diff options
Diffstat (limited to 'Source/WebCore')
657 files changed, 15642 insertions, 9435 deletions
diff --git a/Source/WebCore/Android.derived.jscbindings.mk b/Source/WebCore/Android.derived.jscbindings.mk index e66ef1b..a049033 100644 --- a/Source/WebCore/Android.derived.jscbindings.mk +++ b/Source/WebCore/Android.derived.jscbindings.mk @@ -209,6 +209,7 @@ GEN := \ $(intermediates)/html/JSDOMFormData.h \ $(intermediates)/html/JSDOMSettableTokenList.h \ $(intermediates)/html/JSDOMTokenList.h \ + $(intermediates)/html/JSDOMURL.h \ $(intermediates)/html/JSDataGridColumn.h \ $(intermediates)/html/JSDataGridColumnList.h \ $(intermediates)/html/JSHTMLAllCollection.h \ diff --git a/Source/WebCore/Android.derived.v8bindings.mk b/Source/WebCore/Android.derived.v8bindings.mk index 32851f3..eb00a64 100644 --- a/Source/WebCore/Android.derived.v8bindings.mk +++ b/Source/WebCore/Android.derived.v8bindings.mk @@ -149,6 +149,7 @@ $(patsubst %.h,%.cpp,$(GEN)): $(intermediates)/bindings/%.cpp : $(intermediates) GEN := \ $(intermediates)/bindings/V8Blob.h \ $(intermediates)/bindings/V8BlobBuilder.h \ +<<<<<<< HEAD $(intermediates)/bindings/V8DOMFileSystem.h \ $(intermediates)/bindings/V8DOMFileSystemSync.h \ $(intermediates)/bindings/V8DirectoryEntry.h \ @@ -162,6 +163,13 @@ GEN := \ $(intermediates)/bindings/V8EntryCallback.h \ $(intermediates)/bindings/V8EntrySync.h \ $(intermediates)/bindings/V8ErrorCallback.h \ +======= + $(intermediates)/bindings/V8DOMTokenList.h \ + $(intermediates)/bindings/V8DOMSettableTokenList.h \ + $(intermediates)/bindings/V8DOMURL.h \ + $(intermediates)/bindings/V8DataGridColumn.h \ + $(intermediates)/bindings/V8DataGridColumnList.h \ +>>>>>>> WebKit.org @ r75993 $(intermediates)/bindings/V8File.h \ $(intermediates)/bindings/V8FileCallback.h \ $(intermediates)/bindings/V8FileEntry.h \ diff --git a/Source/WebCore/Android.mk b/Source/WebCore/Android.mk index a1a56d6..7ae9c44 100644 --- a/Source/WebCore/Android.mk +++ b/Source/WebCore/Android.mk @@ -303,7 +303,11 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ html/DOMFormData.cpp \ html/DOMSettableTokenList.cpp \ html/DOMTokenList.cpp \ +<<<<<<< HEAD html/DateComponents.cpp \ +======= + html/DOMURL.cpp \ +>>>>>>> WebKit.org @ r75993 html/DateInputType.cpp \ html/DateTimeInputType.cpp \ html/DateTimeLocalInputType.cpp \ @@ -596,7 +600,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ platform/graphics/Path.cpp \ platform/graphics/PathTraversalState.cpp \ platform/graphics/Pattern.cpp \ - platform/graphics/Pen.cpp \ platform/graphics/SegmentedFontData.cpp \ platform/graphics/SimpleFontData.cpp \ platform/graphics/StringTruncator.cpp \ @@ -795,7 +798,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ rendering/RenderFieldset.cpp \ rendering/RenderFileUploadControl.cpp \ rendering/RenderFlexibleBox.cpp \ - rendering/RenderForeignObject.cpp \ rendering/RenderFrame.cpp \ rendering/RenderFrameBase.cpp \ rendering/RenderFrameSet.cpp \ @@ -828,6 +830,7 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ ifeq ($(ENABLE_SVG), true) LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ +<<<<<<< HEAD rendering/RenderSVGBlock.cpp \ rendering/RenderSVGContainer.cpp \ rendering/RenderSVGGradientStop.cpp \ @@ -851,15 +854,48 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ rendering/RenderSVGTransformableContainer.cpp \ rendering/RenderSVGViewportContainer.cpp \ \ +======= + rendering/svg/RenderSVGBlock.cpp \ + rendering/svg/RenderSVGContainer.cpp \ + rendering/svg/RenderSVGForeignObject.cpp \ + rendering/svg/RenderSVGGradientStop.cpp \ + rendering/svg/RenderSVGHiddenContainer.cpp \ + rendering/svg/RenderSVGImage.cpp \ +>>>>>>> WebKit.org @ r75993 rendering/svg/RenderSVGInline.cpp \ rendering/svg/RenderSVGInlineText.cpp \ + rendering/svg/RenderSVGModelObject.cpp \ rendering/svg/RenderSVGPath.cpp \ + rendering/svg/RenderSVGResource.cpp \ + rendering/svg/RenderSVGResourceClipper.cpp \ + rendering/svg/RenderSVGResourceContainer.cpp \ + rendering/svg/RenderSVGResourceFilter.cpp \ + rendering/svg/RenderSVGResourceFilterPrimitive.cpp \ + rendering/svg/RenderSVGResourceGradient.cpp \ + rendering/svg/RenderSVGResourceLinearGradient.cpp \ + rendering/svg/RenderSVGResourceMarker.cpp \ + rendering/svg/RenderSVGResourceMasker.cpp \ + rendering/svg/RenderSVGResourcePattern.cpp \ + rendering/svg/RenderSVGResourceRadialGradient.cpp \ + rendering/svg/RenderSVGResourceSolidColor.cpp \ + rendering/svg/RenderSVGRoot.cpp \ + rendering/svg/RenderSVGShadowTreeRootContainer.cpp \ rendering/svg/RenderSVGTSpan.cpp \ rendering/svg/RenderSVGText.cpp \ rendering/svg/RenderSVGTextPath.cpp \ + rendering/svg/RenderSVGTransformableContainer.cpp \ + rendering/svg/RenderSVGViewportContainer.cpp \ + rendering/svg/SVGImageBufferTools.cpp \ rendering/svg/SVGInlineFlowBox.cpp \ rendering/svg/SVGInlineTextBox.cpp \ + rendering/svg/SVGMarkerLayoutInfo.cpp \ + rendering/svg/SVGRenderSupport.cpp \ + rendering/svg/SVGRenderTreeAsText.cpp \ + rendering/svg/SVGResources.cpp \ + rendering/svg/SVGResourcesCache.cpp \ + rendering/svg/SVGResourcesCycleSolver.cpp \ rendering/svg/SVGRootInlineBox.cpp \ + rendering/svg/SVGShadowTreeElements.cpp rendering/svg/SVGTextChunk.cpp \ rendering/svg/SVGTextChunkBuilder.cpp \ rendering/svg/SVGTextLayoutAttributes.cpp \ @@ -895,18 +931,6 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ rendering/RenderWordBreak.cpp \ rendering/RootInlineBox.cpp \ -ifeq ($(ENABLE_SVG), true) -LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ - rendering/SVGImageBufferTools.cpp \ - rendering/SVGMarkerLayoutInfo.cpp \ - rendering/SVGRenderSupport.cpp \ - rendering/SVGRenderTreeAsText.cpp \ - rendering/SVGResources.cpp \ - rendering/SVGResourcesCache.cpp \ - rendering/SVGResourcesCycleSolver.cpp \ - rendering/SVGShadowTreeElements.cpp -endif - LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \ rendering/ScrollBehavior.cpp \ rendering/ShadowElement.cpp \ diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt index 8774a09..8050b48 100644 --- a/Source/WebCore/CMakeLists.txt +++ b/Source/WebCore/CMakeLists.txt @@ -49,6 +49,7 @@ SET(WebCore_INCLUDE_DIRECTORIES "${WEBCORE_DIR}/platform/text/transcoder" "${WEBCORE_DIR}/plugins" "${WEBCORE_DIR}/rendering" + "${WEBCORE_DIR}/rendering/mathml" "${WEBCORE_DIR}/rendering/style" "${WEBCORE_DIR}/rendering/svg" "${WEBCORE_DIR}/storage" @@ -197,6 +198,7 @@ SET(WebCore_IDL_FILES html/DOMFormData.idl html/DOMSettableTokenList.idl html/DOMTokenList.idl + html/DOMURL.idl html/HTMLAllCollection.idl html/HTMLAnchorElement.idl html/HTMLAppletElement.idl @@ -995,6 +997,7 @@ SET(WebCore_SOURCES html/DOMFormData.cpp html/DOMSettableTokenList.cpp html/DOMTokenList.cpp + html/DOMURL.cpp html/DataGridColumn.cpp html/DataGridColumnList.cpp html/DateComponents.cpp @@ -1149,8 +1152,10 @@ SET(WebCore_SOURCES inspector/InjectedScript.cpp inspector/InjectedScriptHost.cpp inspector/InspectorApplicationCacheAgent.cpp + inspector/InspectorBrowserDebuggerAgent.cpp inspector/InspectorCSSAgent.cpp inspector/InspectorClient.cpp + inspector/InspectorConsoleAgent.cpp inspector/InspectorController.cpp inspector/InspectorDOMAgent.cpp inspector/InspectorDOMStorageAgent.cpp @@ -1164,10 +1169,11 @@ SET(WebCore_SOURCES inspector/InspectorInstrumentation.cpp inspector/InspectorProfilerAgent.cpp inspector/InspectorResourceAgent.cpp - inspector/InspectorStyleSheet.cpp - inspector/InspectorValues.cpp + inspector/InspectorSettings.cpp inspector/InspectorState.cpp + inspector/InspectorStyleSheet.cpp inspector/InspectorTimelineAgent.cpp + inspector/InspectorValues.cpp inspector/ScriptArguments.cpp inspector/ScriptBreakpoint.cpp inspector/ScriptCallFrame.cpp @@ -1344,7 +1350,6 @@ SET(WebCore_SOURCES platform/graphics/Path.cpp platform/graphics/PathTraversalState.cpp platform/graphics/Pattern.cpp - platform/graphics/Pen.cpp platform/graphics/SegmentedFontData.cpp platform/graphics/SimpleFontData.cpp platform/graphics/StringTruncator.cpp @@ -1408,6 +1413,7 @@ SET(WebCore_SOURCES platform/network/HTTPParsers.cpp platform/network/NetworkStateNotifier.cpp platform/network/ProtectionSpace.cpp + platform/network/ProxyServer.cpp platform/network/ResourceErrorBase.cpp platform/network/ResourceHandle.cpp platform/network/ResourceRequestBase.cpp @@ -1688,16 +1694,16 @@ IF (ENABLE_MATHML) mathml/MathMLInlineContainerElement.cpp mathml/MathMLMathElement.cpp mathml/MathMLTextElement.cpp - mathml/RenderMathMLBlock.cpp - mathml/RenderMathMLFenced.cpp - mathml/RenderMathMLFraction.cpp - mathml/RenderMathMLMath.cpp - mathml/RenderMathMLOperator.cpp - mathml/RenderMathMLRoot.cpp - mathml/RenderMathMLRow.cpp - mathml/RenderMathMLSquareRoot.cpp - mathml/RenderMathMLSubSup.cpp - mathml/RenderMathMLUnderOver.cpp + rendering/mathml/RenderMathMLBlock.cpp + rendering/mathml/RenderMathMLFenced.cpp + rendering/mathml/RenderMathMLFraction.cpp + rendering/mathml/RenderMathMLMath.cpp + rendering/mathml/RenderMathMLOperator.cpp + rendering/mathml/RenderMathMLRoot.cpp + rendering/mathml/RenderMathMLRow.cpp + rendering/mathml/RenderMathMLSquareRoot.cpp + rendering/mathml/RenderMathMLSubSup.cpp + rendering/mathml/RenderMathMLUnderOver.cpp ) ENDIF () @@ -1789,48 +1795,48 @@ IF (ENABLE_SVG) css/SVGCSSParser.cpp css/SVGCSSStyleSelector.cpp rendering/PointerEventsHitRules.cpp - rendering/RenderForeignObject.cpp - rendering/RenderSVGBlock.cpp - rendering/RenderSVGContainer.cpp - rendering/RenderSVGGradientStop.cpp - rendering/RenderSVGHiddenContainer.cpp - rendering/RenderSVGImage.cpp - rendering/RenderSVGModelObject.cpp - rendering/RenderSVGResource.cpp - rendering/RenderSVGResourceClipper.cpp - rendering/RenderSVGResourceContainer.cpp - rendering/RenderSVGResourceFilter.cpp - rendering/RenderSVGResourceFilterPrimitive.cpp - rendering/RenderSVGResourceGradient.cpp - rendering/RenderSVGResourceLinearGradient.cpp - rendering/RenderSVGResourceMarker.cpp - rendering/RenderSVGResourceMasker.cpp - rendering/RenderSVGResourcePattern.cpp - rendering/RenderSVGResourceRadialGradient.cpp - rendering/RenderSVGResourceSolidColor.cpp - rendering/RenderSVGRoot.cpp - rendering/RenderSVGShadowTreeRootContainer.cpp - rendering/RenderSVGTransformableContainer.cpp - rendering/RenderSVGViewportContainer.cpp - rendering/SVGImageBufferTools.cpp - rendering/SVGMarkerLayoutInfo.cpp - rendering/SVGRenderSupport.cpp - rendering/SVGRenderTreeAsText.cpp - rendering/SVGResources.cpp - rendering/SVGResourcesCache.cpp - rendering/SVGResourcesCycleSolver.cpp - rendering/SVGShadowTreeElements.cpp rendering/style/SVGRenderStyle.cpp rendering/style/SVGRenderStyleDefs.cpp + rendering/svg/RenderSVGBlock.cpp + rendering/svg/RenderSVGContainer.cpp + rendering/svg/RenderSVGGradientStop.cpp + rendering/svg/RenderSVGForeignObject.cpp + rendering/svg/RenderSVGHiddenContainer.cpp + rendering/svg/RenderSVGImage.cpp rendering/svg/RenderSVGInline.cpp rendering/svg/RenderSVGInlineText.cpp + rendering/svg/RenderSVGModelObject.cpp rendering/svg/RenderSVGPath.cpp + rendering/svg/RenderSVGResource.cpp + rendering/svg/RenderSVGResourceClipper.cpp + rendering/svg/RenderSVGResourceContainer.cpp + rendering/svg/RenderSVGResourceFilter.cpp + rendering/svg/RenderSVGResourceFilterPrimitive.cpp + rendering/svg/RenderSVGResourceGradient.cpp + rendering/svg/RenderSVGResourceLinearGradient.cpp + rendering/svg/RenderSVGResourceMarker.cpp + rendering/svg/RenderSVGResourceMasker.cpp + rendering/svg/RenderSVGResourcePattern.cpp + rendering/svg/RenderSVGResourceRadialGradient.cpp + rendering/svg/RenderSVGResourceSolidColor.cpp + rendering/svg/RenderSVGRoot.cpp + rendering/svg/RenderSVGShadowTreeRootContainer.cpp rendering/svg/RenderSVGTSpan.cpp rendering/svg/RenderSVGText.cpp rendering/svg/RenderSVGTextPath.cpp + rendering/svg/RenderSVGTransformableContainer.cpp + rendering/svg/RenderSVGViewportContainer.cpp + rendering/svg/SVGImageBufferTools.cpp rendering/svg/SVGInlineFlowBox.cpp rendering/svg/SVGInlineTextBox.cpp + rendering/svg/SVGMarkerLayoutInfo.cpp + rendering/svg/SVGRenderSupport.cpp + rendering/svg/SVGRenderTreeAsText.cpp + rendering/svg/SVGResources.cpp + rendering/svg/SVGResourcesCache.cpp + rendering/svg/SVGResourcesCycleSolver.cpp rendering/svg/SVGRootInlineBox.cpp + rendering/svg/SVGShadowTreeElements.cpp rendering/svg/SVGTextChunk.cpp rendering/svg/SVGTextChunkBuilder.cpp rendering/svg/SVGTextLayoutAttributes.cpp @@ -2098,6 +2104,15 @@ ADD_CUSTOM_COMMAND( LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_DIR}/InspectorBackendDispatcher.cpp ${DERIVED_SOURCES_DIR}/InspectorFrontend.cpp) +# Generate InjectedScriptSource.h +ADD_CUSTOM_COMMAND( + OUTPUT ${DERIVED_SOURCES_DIR}/InjectedScriptSource.h + MAIN_DEPENDENCY inspector/InjectedScriptSource.js + COMMAND ${PERL_EXECUTABLE} ${WEBCORE_DIR}/inspector/xxd.pl InjectedScriptSource_js ${WEBCORE_DIR}/inspector/InjectedScriptSource.js ${DERIVED_SOURCES_DIR}/InjectedScriptSource.h + VERBATIM) +LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_DIR}/InjectedScriptSource.h) + + MAKE_HASH_TOOLS(${WEBCORE_DIR}/platform/ColorData) LIST(APPEND WebCore_SOURCES ${DERIVED_SOURCES_DIR}/ColorData.cpp) diff --git a/Source/WebCore/CMakeListsWinCE.txt b/Source/WebCore/CMakeListsWinCE.txt index c33dc16..8733c26 100644 --- a/Source/WebCore/CMakeListsWinCE.txt +++ b/Source/WebCore/CMakeListsWinCE.txt @@ -74,6 +74,7 @@ LIST(APPEND WebCore_SOURCES platform/network/win/CookieJarWin.cpp platform/network/win/NetworkStateNotifierWin.cpp + platform/network/win/ProxyServerWin.cpp platform/network/win/ResourceHandleWin.cpp platform/network/win/SocketStreamHandleWin.cpp diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 104e6de..e8fe2cd 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,5648 @@ +2011-01-17 Adam Roben <aroben@apple.com> + + Simplify WKCACFLayerRenderer's API + + createRenderer/destroyRenderer are now hidden behind setHostWindow. + WKCACFLayerRendererClient::animationsStarted has been removed, as it + was never called. (The work it was supposed to do was already being + accomplished by WKCACFLayerRenderer::render telling each layer that + animations are starting.) + + Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use + + Reviewed by Chris Marrin. + + * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp: + (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow): Moved the + call to setHostWindow here from the WM_CREATE handler. The WM_CREATE + handler was causing the Direct3D device to be created, but MSDN says + you shouldn't create a device while handling WM_CREATE. Removed + no-longer-needed call to createRenderer (setHostWindow does this now) + and the never-needed call to setNeedsDisplay (we never draw into the + root layer; this was just creating an unnecessary backing store the + size of the screen!). + (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): Moved WM_CREATE + code, as described above. Removed call to destroyRenderer when handling + WM_DESTROY; setHostWindow does this now. Fixed up our WM_PAINT handler + to do a synchronous paint and to clear our dirty region, while I was in + here. + + * platform/graphics/win/WKCACFLayerRenderer.cpp: + (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Changed to call + setHostWindow instead of destroyRenderer; the former calls the latter + if needed. + (WebCore::WKCACFLayerRenderer::setHostWindow): Moved here from the + header file. Destroys our old renderer (i.e., IDirect3DDevice9) if + we're losing our window, or creates a renderer if we're gaining a + window. + (WebCore::WKCACFLayerRenderer::createRenderer): Updated for WKSI function rename. + (WebCore::WKCACFLayerRenderer::destroyRenderer): Changed to clear the + D3D device from our context before releasing the device. + + * platform/graphics/win/WKCACFLayerRenderer.h: Removed + WKCACFLayerRendererClient::animationsStarted. Removed setNeedsDisplay. + Make createRenderer, destroyRenderer, and renderSoon private. + +2011-01-17 Adam Roben <aroben@apple.com> + + Remove special-cased support for providing content for the root layer + + Clients will just have to provide content through the normal + GraphicsLayer channels now! + + Support for <http://webkit.org/b/52582> WebView should paint directly + into a GraphicsLayer when in accelerated compositing mode + + Reviewed by Simon Fraser and Chris Marrin. + + * platform/graphics/win/WKCACFLayerRenderer.cpp: + (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Removed + initialization of m_backingStoreDirty, which has itself been removed. + (WebCore::WKCACFLayerRenderer::setNeedsDisplay): Moved code to schedule + a sync from here to syncCompositingStateSoon. We only need to call + renderSoon if we don't call syncCompositingStateSoon; the latter + function calls the former. + (WebCore::WKCACFLayerRenderer::paint): Removed code to handle + m_backingStoreDirty. We don't want to know anything about clients' + backing stores. + (WebCore::WKCACFLayerRenderer::syncCompositingStateSoon): Added. Code + came from setNeedsDisplay. + + * platform/graphics/win/WKCACFLayerRenderer.h: + Removed setRootContents[AndDisplay], setBackingStoreDirty, and + m_backingStoreDirty. Made paint() public so that clients can force a + synchronous render (e.g., when handling WM_PAINT). + +2011-01-17 Adam Roben <aroben@apple.com> + + Remove contexts from WKCACFContextFlusher before destroying them + + We aren't really using WKCACFContextFlusher for anything useful at the + moment, but that will probably change in the near future. + + I couldn't come up with a way to test this because it isn't possible to + resize a window in DumpRenderTree. + + Fixes <http://webkit.org/b/52573> REGRESSION (r75262): Crash beneath + WKCACFContextFlusher::flushAllContexts when resizing window on page + that uses accelerated compositing + + Reviewed by Simon Fraser. + + * platform/graphics/win/WKCACFLayerRenderer.cpp: + (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer): Remove our + context from WKCACFContextFlusher. (This code was erroneously removed + from WKCACFLayerRenderer::destroyRenderer in r75262. This is a more + sensible place for it.) + +2011-01-17 Adam Roben <aroben@apple.com> + + Don't access the CACFLayerRef's sublayers directly from PlatformCALayer + + There might be a secret extra sublayer (the tile parent layer) that + PlatformCALayer doesn't know about. When PlatformCALayer would + encounter this, it would try to use the tile parent layer's + PlatformCALayer wrapper, which was null, and then would crash. We now + ask PlatformCALayerWinInternal for the sublayer list, since that class + knows about the tile parent layer and can exclude it from the sublayer + list. + + Covered by compositing/tiling/huge-layer-resize.html. + + Fixes <http://webkit.org/b/52597> Crash beneath + PlatformCALayer::adoptSublayers when switching out of tiling mode + (null-dereference of a PlatformCALayer) + + Reviewed by Darin Adler and Chris Marrin. + + * platform/graphics/ca/win/PlatformCALayerWin.cpp: + (PlatformCALayer::adoptSublayers): + (printLayer): + Changed to use PlatformCALayerWinInternal::getSublayers. + + * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp: + (PlatformCALayerWinInternal::getSublayers): Added. Retrieves the list + of PlatformCALayers that represent our sublayers. Significantly, this + code knows about the tile parent layer and can thus exclude it. + + * platform/graphics/ca/win/PlatformCALayerWinInternal.h: Added + getSublayers. + +2011-01-17 Naoki Takano <takano.naoki@gmail.com> + + Reviewed by Kent Tamura. + + [Chromium] Fix popup menu re-positioning when the menu is opened upward, above the corresponding form field. + https://bugs.webkit.org/show_bug.cgi?id=51382 + http://crbug.com/60427 + + Calculate correct location of popup window whenever the items in the window change. + + No new tests, because this fix is for Chromium project and hard to test only in WebKit project + + * platform/chromium/PopupMenuChromium.cpp: + (WebCore::PopupContainer::layoutAndCalculateWidgetRect): New Function to layout and calculate popup widget rect. + (WebCore::PopupContainer::showPopup): Move widgetRect calculation logic to calculateWidgetRect(). + (WebCore::PopupContainer::refresh): Add parameter focusRect to take the location and the size of focus text input field to calculate correct popup window location. + * platform/chromium/PopupMenuChromium.h: Append new input parameter for refresh(). + +2011-01-17 Mark Rowe <mrowe@apple.com> + + Fix the 32-bit build. + + * WebCore.exp.in: + +2011-01-17 Dan Bernstein <mitz@apple.com> + + Reviewed by Darin Adler. + + Use of invalid hash map key in CSSFontFaceSource::getFontData() with 0-sized remote font + https://bugs.webkit.org/show_bug.cgi?id=52598 + + Test: fast/css/font-face-zero-hash-key.html + + * css/CSSFontFaceSource.cpp: + (WebCore::CSSFontFaceSource::getFontData): Add 1 to the font size to avoid a 0 hash key. + * css/CSSSegmentedFontFace.cpp: + (WebCore::CSSSegmentedFontFace::getFontData): Ditto. + +2011-01-17 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/52596> Add missing DOMDocument/DOMDocumentFragment headers to Xcode project + + Reviewed by Dan Bernstein. + + This fixes two issues: + + Add missing DOMDocumentFragmentPrivate.h and + DOMDocumentPrivate.h files to the project. These files were + never added to the the project although their *Internal.h + counterparts were added in r16548 and r17390. + + Add missing DOMDocumentFragmentInternal.h to the Headers + section. It was moved from Headers to "Copy Generated Headers" + in r31045, but it should have an entry in both sections. + + * WebCore.xcodeproj/project.pbxproj: + +2011-01-17 Helder Correia <helder@sencha.com> + + Reviewed by Andreas Kling. + + [Qt] Incorrect shadow alpha with pattern fillStyle + https://bugs.webkit.org/show_bug.cgi?id=52559 + + The shadow color opacity needs to be set on the shadow painter. + This is related to bug 52556. + + Test: fast/canvas/canvas-fillPath-pattern-shadow.html + + * platform/graphics/qt/GraphicsContextQt.cpp: + (WebCore::GraphicsContext::fillPath): + +2011-01-17 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Andreas Kling. + + [GTK] Port a crash fix from libsoup upstream to the libsoup cache code + https://bugs.webkit.org/show_bug.cgi?id=52586 + + No new tests. This is just a merge from upstream. + + * platform/network/soup/cache/soup-http-input-stream.c: + (webkit_soup_http_input_stream_got_chunk): Properly handle unsigned numbers. + +2011-01-17 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Fix some headers with missing or misspelled #ifndef guards + https://bugs.webkit.org/show_bug.cgi?id=52545 + + No new tests because no new functionality. + + * ForwardingHeaders/runtime/InitializeThreading.h: + * editing/SmartReplace.h: + * loader/CrossOriginAccessControl.h: + * loader/NetscapePlugInStreamLoader.h: + * platform/chromium/ClipboardUtilitiesChromium.h: + * platform/graphics/cairo/DrawErrorUnderline.h: + * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: + * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h: + * platform/graphics/cg/PDFDocumentImage.h: + * platform/win/WebCoreTextRenderer.h: + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: follow-up fix for r52574: do not reuse clear() for navigation. + + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkPanel.prototype.clear): + (WebInspector.NetworkPanel.prototype.mainResourceChanged): + +2011-01-17 Sergio Villar Senin <svillar@igalia.com> + + Reviewed by Martin Robinson. + + [Gtk] No need to content sniff 304 Not Modified responses + https://bugs.webkit.org/show_bug.cgi?id=52570 + + Makes no sense to wait for the outcome of content sniffing when WebCore + is validating resources. If we get a 304 Not Modified it means that we can + safely use the cached version of the resource we're asking for. + + No new tests because it does not change functionality, it just + calls didReceiveResponse sooner for 304 Not Modified responses. + + * platform/network/soup/ResourceHandleSoup.cpp: + (WebCore::gotHeadersCallback): + +2011-01-17 Jessie Berlin <jberlin@apple.com> + + Reviewed by Anders Carlsson. + + REGRESSION: Assertion failure in FrameLoader::continueLoadAfterWillSubmitForm() when + navigating back to an unreachable URL + https://bugs.webkit.org/show_bug.cgi?id=52388 + + Test: http/tests/navigation/go-back-to-error-page.html + + * history/PageCache.cpp: + (WebCore::PageCache::canCachePageContainingThisFrame): + Do not cache any error pages (which we can recognize as having substitute data and/or an + unreachableURL). + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: fixing typo in r75952. + + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkDataGridNode.prototype._refreshNameCell): + +2011-01-17 Enrica Casucci <enrica@apple.com> + + Reviewed by Alexey Proskuryakov. + + Drag and drop support: refactoring of image from link and image from selection + https://bugs.webkit.org/show_bug.cgi?id=52496 + + This work cleans up the Mac code and makes it more similar to the Windows implementation, + avoiding the use of an NSView when the FrameView can be used. + The refactoring is a necessary step towards the complete support of drag and drop + in WebKit2. + + * page/mac/FrameMac.mm: + (WebCore::Frame::imageFromRect): Modified to use FrameView instead of NSView + to generate the image for drag. + +2011-01-17 Dan Bernstein <mitz@apple.com> + + Rubber-stamped by Mark Rowe. + + Update xcodeproj svn:ignore to include xcuserdata. + + * WebCore.xcodeproj: Modified property svn:ignore. + * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Modified property svn:ignore. + +2011-01-17 Alexey Proskuryakov <ap@apple.com> + + Leopard build fix. + + * page/PrintContext.cpp: GCC complained about shortening a double value to float. + +2011-01-17 Alexey Proskuryakov <ap@apple.com> + + Reviewed by Dan Bernstein. + + https://bugs.webkit.org/show_bug.cgi?id=52495 + + No change in behavior, so no tests. + + * WebCore.exp.in: Export additional methods, as I'm going to use more code from PrintContext. + + * page/PrintContext.cpp: + (WebCore::PrintContext::~PrintContext): No need to clear m_pageRects, the object is being + destroyed already. + (WebCore::PrintContext::pageCount): Changed page count from int to size_t. + (WebCore::PrintContext::pageRect): Ditto. + (WebCore::PrintContext::computePageRects): Pass allowHorizontalTiling as an argument. + PrintContext already has code to calculate scale factor, so it makes sense to make methods + that contain it universal (allowHorizontalTiling is always true for Safari). + Round page height to an integer, because Mac code does that, and because page height is + treated as integer almost everywhere else in code. + (WebCore::PrintContext::begin): Allow calling this function multiple times. There is no need + to return to screen mode if e.g. "print backgounds" option changes. + (WebCore::PrintContext::computeAutomaticScaleFactor): Expose scale factor computation, so + that clients don't have to copy it. + (WebCore::PrintContext::spoolRect): Add a way to spool a precomputed rect - handy if a request + comes from code that doesn't have page number. + (WebCore::PrintContext::pageNumberForElement): Page number int -> size_t. + + * page/PrintContext.h: Added comments and FIXMEs. PrintContext needs cleanup, but that + depends on deciding how it really needs to work (e.g. whether computePageRects() should + cause relayout). + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: unify image data source assignment, add image url + to the image view properties list. + https://bugs.webkit.org/show_bug.cgi?id=52584 + + * English.lproj/localizedStrings.js: + * inspector/front-end/ImageView.js: + (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad): + (WebInspector.ImageView.prototype._createContentIfNeeded): + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkDataGridNode.prototype._refreshNameCell): + * inspector/front-end/Resource.js: + (WebInspector.Resource.prototype.populateImageSource): + (WebInspector.Resource.prototype._contentURL): + * inspector/front-end/ResourcesPanel.js: + (WebInspector.FrameResourceTreeElement.prototype.onattach): + +2011-01-17 Andrey Kosyakov <caseq@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: [Extensions API] webInspector.resources.onFinished is not fired for redirected resources + Make resource start/finish hanlding more consistent. + https://bugs.webkit.org/show_bug.cgi?id=52452 + + * inspector/front-end/AuditLauncherView.js: Ignore WebSocket resources when displaying progress indicator + (WebInspector.AuditLauncherView.prototype._resetResourceCount): + (WebInspector.AuditLauncherView.prototype.resourceStarted): + (WebInspector.AuditLauncherView.prototype.resourceFinished): + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager): Factor out resource start/finish logic to _startResource()/_finishResource() + (WebInspector.NetworkManager.prototype.identifierForInitialRequest): + (WebInspector.NetworkManager.prototype.willSendRequest): + (WebInspector.NetworkManager.prototype.markResourceAsCached): + (WebInspector.NetworkManager.prototype.didReceiveResponse): + (WebInspector.NetworkManager.prototype.didReceiveContentLength): + (WebInspector.NetworkManager.prototype.didFinishLoading): + (WebInspector.NetworkManager.prototype.didFailLoading): + (WebInspector.NetworkManager.prototype.didLoadResourceFromMemoryCache): + (WebInspector.NetworkManager.prototype.didCreateWebSocket): + (WebInspector.NetworkManager.prototype.willSendWebSocketHandshakeRequest): + (WebInspector.NetworkManager.prototype.didReceiveWebSocketHandshakeResponse): + (WebInspector.NetworkManager.prototype.didCloseWebSocket): + (WebInspector.NetworkManager.prototype._appendRedirect): + (WebInspector.NetworkManager.prototype._startResource): + (WebInspector.NetworkManager.prototype._finishResource): + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: restore dom and network state upon frontend reuse. + https://bugs.webkit.org/show_bug.cgi?id=52574 + + * inspector/Inspector.idl: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::restoreInspectorStateFromCookie): + (WebCore::InspectorController::populateScriptObjects): + (WebCore::InspectorController::pushDataCollectedOffline): + (WebCore::InspectorController::didCommitLoad): + * inspector/InspectorController.h: + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager.prototype.reset): + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkPanel.prototype.clear): + (WebInspector.NetworkPanel.prototype.mainResourceChanged): + * inspector/front-end/ResourceTreeModel.js: + (WebInspector.ResourceTreeModel): + (WebInspector.ResourceTreeModel.prototype.reloadCachedResources): + * inspector/front-end/ResourcesPanel.js: + (WebInspector.ResourcesPanel.prototype.clear): + * inspector/front-end/inspector.js: + (WebInspector.frontendReused): + +2011-01-17 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed buildfix after r75944. + + * WebCore.pro: + +2011-01-17 Yi Shen <yi.4.shen@nokia.com> + + Reviewed by Andreas Kling. + + [Qt] Extend the Platform Plugin to support full screen video handler + https://bugs.webkit.org/show_bug.cgi?id=51249 + + Make MediaPlayerPrivateQt support a fullscreen player. + + No new tests because LayoutTests/media/media-fullscreen-inline.html already exists. + However, this test failed for Qt (QtMediaPlayer) due to durationchange event getting fired twice. + So, still skip it for Qt. + + * WebCore.pro: + * features.pri: + * platform/graphics/qt/MediaPlayerPrivateQt.cpp: + (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt): + (WebCore::MediaPlayerPrivateQt::removeVideoItem): + (WebCore::MediaPlayerPrivateQt::restoreVideoItem): + * platform/graphics/qt/MediaPlayerPrivateQt.h: + (WebCore::MediaPlayerPrivateQt::supportsFullscreen): + (WebCore::MediaPlayerPrivateQt::mediaPlayer): + +2011-01-17 Anthony Ricaud <rik@webkit.org> + + Reviewed by Kent Tamura. + + [HTML5] Revert display:none on datalist + https://bugs.webkit.org/show_bug.cgi?id=52214 + + * css/html.css: + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: simplify debugger enabling routine. + https://bugs.webkit.org/show_bug.cgi?id=52472 + + * inspector/Inspector.idl: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::restoreDebugger): + (WebCore::InspectorController::showAndEnableDebugger): + (WebCore::InspectorController::enableDebugger): + * inspector/InspectorController.h: + * inspector/front-end/DebuggerModel.js: + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel.prototype.show): + (WebInspector.ScriptsPanel.prototype._toggleDebugging): + +2011-01-17 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: refactoring: encapsulate lazy initialization of SourceFrame. + https://bugs.webkit.org/show_bug.cgi?id=51738 + + Extract content loading logic from SourceView and ScriptView to ContentProvider implementations. + Pass ContentProvider in SourceFrame constructor to allow SourceFrame manage it's lazy initialization. + + * inspector/front-end/ScriptView.js: + (WebInspector.ScriptView): + (WebInspector.SourceFrameContentProviderForScript): + (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent.didRequestSource): + (WebInspector.SourceFrameContentProviderForScript.prototype.requestContent): + (WebInspector.SourceFrameContentProviderForScript.prototype.scripts): + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel.prototype._addScript): + (WebInspector.ScriptsPanel.prototype.sourceFrameForScript): + (WebInspector.ScriptsPanel.prototype._sourceFrameForResource): + * inspector/front-end/SourceFrame.js: + (WebInspector.SourceFrame): + (WebInspector.SourceFrame.prototype.set visible): + (WebInspector.SourceFrame.prototype._createTextViewer): + (WebInspector.SourceFrame.prototype._breakpointAdded): + (WebInspector.SourceFrame.prototype._breakpoints): + (WebInspector.SourceFrame.prototype._sourceIDForLine): + (WebInspector.SourceFrame.prototype._sourceIDSet): + (WebInspector.SourceFrameContentProvider): + (WebInspector.SourceFrameContentProvider.prototype.requestContent): + (WebInspector.SourceFrameContentProvider.prototype.scripts): + * inspector/front-end/SourceView.js: + (WebInspector.SourceView): + (WebInspector.SourceView.prototype.show): + (WebInspector.SourceView.prototype.resize): + (WebInspector.SourceView.prototype.performSearch.didFindSearchMatches): + (WebInspector.SourceView.prototype.performSearch): + (WebInspector.SourceView.prototype.revealLine): + (WebInspector.SourceView.prototype.highlightLine): + (WebInspector.SourceView.prototype._jumpToSearchResult): + (WebInspector.SourceFrameContentProviderForResource): + (WebInspector.SourceFrameContentProviderForResource.prototype.requestContent): + (WebInspector.SourceFrameContentProviderForResource.prototype.scripts): + +2011-01-17 John Knottenbelt <jknotten@chromium.org> + + Reviewed by Jeremy Orlow. + + GeolocationController should call stopUpdating on destruction + https://bugs.webkit.org/show_bug.cgi?id=52216 + + Test: fast/dom/Geolocation/window-close-crash.html + + * page/GeolocationController.cpp: + (WebCore::GeolocationController::~GeolocationController): + +2011-01-17 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: Qt build fix. + + * inspector/InspectorInstrumentation.h: + +2011-01-16 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: make WebCore use InspectorInstrumentation + for instrumentation calls. + https://bugs.webkit.org/show_bug.cgi?id=52532 + + This change makes WebCore classes issue instrumentation signals + by means of InspectorInstrumentation interface. It covered migration + for Document, FrameLoader, Database, DOMStorage, etc. It fixed + instrumentation handling for Console as well. This all is a part + of story described in the bug 52510. + + * dom/Document.cpp: + (WebCore::Document::finishedParsing): + * dom/Document.h: + * dom/ScriptExecutionContext.h: + * inspector/InspectorBrowserDebuggerAgent.cpp: + (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr): + (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): + (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded): + (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest): + * inspector/InspectorBrowserDebuggerAgent.h: + (WebCore::InspectorBrowserDebuggerAgent::create): + * inspector/InspectorConsoleAgent.cpp: + (WebCore::InspectorConsoleAgent::stopTiming): + (WebCore::InspectorConsoleAgent::count): + * inspector/InspectorConsoleAgent.h: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::~InspectorController): + (WebCore::InspectorController::handleMousePress): + (WebCore::InspectorController::didClearWindowObjectInWorld): + (WebCore::PostWorkerNotificationToFrontendTask::performTask): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.h: + * inspector/InspectorDOMStorageAgent.h: + * inspector/InspectorDatabaseAgent.cpp: + * inspector/InspectorDatabaseAgent.h: + * inspector/InspectorFrontendHost.cpp: + * inspector/InspectorFrontendHost.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl): + (WebCore::InspectorInstrumentation::inspectedPageDestroyedImpl): + (WebCore::InspectorInstrumentation::mouseDidMoveOverElementImpl): + (WebCore::InspectorInstrumentation::handleMousePressImpl): + (WebCore::InspectorInstrumentation::mainResourceFiredLoadEventImpl): + (WebCore::InspectorInstrumentation::mainResourceFiredDOMContentEventImpl): + (WebCore::InspectorInstrumentation::frameDetachedFromParentImpl): + (WebCore::InspectorInstrumentation::didCommitLoadImpl): + (WebCore::InspectorInstrumentation::addMessageToConsoleImpl): + (WebCore::InspectorInstrumentation::consoleCountImpl): + (WebCore::InspectorInstrumentation::startConsoleTimingImpl): + (WebCore::InspectorInstrumentation::stopConsoleTimingImpl): + (WebCore::InspectorInstrumentation::consoleMarkTimelineImpl): + (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl): + (WebCore::InspectorInstrumentation::didOpenDatabaseImpl): + (WebCore::InspectorInstrumentation::didUseDOMStorageImpl): + (WebCore::InspectorInstrumentation::didCreateWorkerImpl): + (WebCore::InspectorInstrumentation::didDestroyWorkerImpl): + (WebCore::InspectorInstrumentation::didCreateWebSocketImpl): + (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl): + (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl): + (WebCore::InspectorInstrumentation::didCloseWebSocketImpl): + (WebCore::InspectorInstrumentation::networkStateChangedImpl): + (WebCore::InspectorInstrumentation::updateApplicationCacheStatusImpl): + * inspector/InspectorInstrumentation.h: + (WebCore::InspectorInstrumentation::inspectorControllerCreated): + (WebCore::InspectorInstrumentation::inspectorControllerDeleted): + (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld): + (WebCore::InspectorInstrumentation::inspectedPageDestroyed): + (WebCore::InspectorInstrumentation::willInsertDOMNode): + (WebCore::InspectorInstrumentation::didInsertDOMNode): + (WebCore::InspectorInstrumentation::willRemoveDOMNode): + (WebCore::InspectorInstrumentation::willModifyDOMAttr): + (WebCore::InspectorInstrumentation::didModifyDOMAttr): + (WebCore::InspectorInstrumentation::mouseDidMoveOverElement): + (WebCore::InspectorInstrumentation::handleMousePress): + (WebCore::InspectorInstrumentation::characterDataModified): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequest): + (WebCore::InspectorInstrumentation::didScheduleResourceRequest): + (WebCore::InspectorInstrumentation::didInstallTimer): + (WebCore::InspectorInstrumentation::didRemoveTimer): + (WebCore::InspectorInstrumentation::willCallFunction): + (WebCore::InspectorInstrumentation::willChangeXHRReadyState): + (WebCore::InspectorInstrumentation::willDispatchEvent): + (WebCore::InspectorInstrumentation::willDispatchEventOnWindow): + (WebCore::InspectorInstrumentation::willEvaluateScript): + (WebCore::InspectorInstrumentation::willFireTimer): + (WebCore::InspectorInstrumentation::willLayout): + (WebCore::InspectorInstrumentation::willLoadXHR): + (WebCore::InspectorInstrumentation::willPaint): + (WebCore::InspectorInstrumentation::willRecalculateStyle): + (WebCore::InspectorInstrumentation::identifierForInitialRequest): + (WebCore::InspectorInstrumentation::willSendRequest): + (WebCore::InspectorInstrumentation::markResourceAsCached): + (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache): + (WebCore::InspectorInstrumentation::willReceiveResourceData): + (WebCore::InspectorInstrumentation::willReceiveResourceResponse): + (WebCore::InspectorInstrumentation::didReceiveContentLength): + (WebCore::InspectorInstrumentation::didFinishLoading): + (WebCore::InspectorInstrumentation::didFailLoading): + (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequest): + (WebCore::InspectorInstrumentation::scriptImported): + (WebCore::InspectorInstrumentation::mainResourceFiredLoadEvent): + (WebCore::InspectorInstrumentation::mainResourceFiredDOMContentEvent): + (WebCore::InspectorInstrumentation::frameDetachedFromParent): + (WebCore::InspectorInstrumentation::didCommitLoad): + (WebCore::InspectorInstrumentation::willWriteHTML): + (WebCore::InspectorInstrumentation::didOpenDatabase): + (WebCore::InspectorInstrumentation::didUseDOMStorage): + (WebCore::InspectorInstrumentation::didCreateWorker): + (WebCore::InspectorInstrumentation::didDestroyWorker): + (WebCore::InspectorInstrumentation::didCreateWebSocket): + (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest): + (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse): + (WebCore::InspectorInstrumentation::didCloseWebSocket): + (WebCore::InspectorInstrumentation::networkStateChanged): + (WebCore::InspectorInstrumentation::updateApplicationCacheStatus): + (WebCore::InspectorInstrumentation::addMessageToConsole): + (WebCore::InspectorInstrumentation::consoleCount): + (WebCore::InspectorInstrumentation::startConsoleTiming): + (WebCore::InspectorInstrumentation::stopConsoleTiming): + (WebCore::InspectorInstrumentation::consoleMarkTimeline): + (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole): + (WebCore::InspectorInstrumentation::inspectorControllerForContext): + (WebCore::InspectorInstrumentation::inspectorControllerForFrame): + (WebCore::InspectorInstrumentation::inspectorControllerForPage): + (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForContext): + (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForDocument): + (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForFrame): + (WebCore::InspectorInstrumentation::inspectorControllerWithFrontendForPage): + * inspector/InspectorState.cpp: + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::detachFromParent): + (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld): + (WebCore::FrameLoader::dispatchDidCommitLoad): + * page/Chrome.cpp: + (WebCore::Chrome::mouseDidMoveOverElement): + * page/Console.cpp: + (WebCore::Console::addMessage): + (WebCore::Console::count): + (WebCore::Console::markTimeline): + (WebCore::Console::profile): + (WebCore::Console::time): + (WebCore::Console::timeEnd): + (WebCore::Console::group): + (WebCore::Console::groupCollapsed): + (WebCore::Console::groupEnd): + * page/DOMWindow.cpp: + (WebCore::DOMWindow::sessionStorage): + (WebCore::DOMWindow::localStorage): + (WebCore::DOMWindow::dispatchLoadEvent): + * page/EventHandler.cpp: + (WebCore::EventHandler::handleMousePressEvent): + * page/Page.cpp: + (WebCore::Page::~Page): + * storage/Database.cpp: + (WebCore::Database::openDatabase): + * workers/AbstractWorker.cpp: + (WebCore::AbstractWorker::onDestroyWorker): + * workers/SharedWorker.cpp: + (WebCore::SharedWorker::create): + * workers/Worker.cpp: + (WebCore::Worker::create): + * workers/WorkerMessagingProxy.cpp: + +2011-01-17 Gyuyoung Kim <gyuyoung.kim@samsung.com> + + Unreviewed, rolling out r75923. + + GTK guy rolls out the r75914. + + * platform/efl/ScrollViewEfl.cpp: + (WebCore::ScrollView::platformInit): + +2011-01-17 Helder Correia <helder@sencha.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] fast/canvas/canvas-fillPath-gradient-shadow.html does not pass + https://bugs.webkit.org/show_bug.cgi?id=52556 + + The shadow color opacity needs to be set on the shadow painter. + Additionally, the gradient brush should be transformed. + + * platform/graphics/qt/GraphicsContextQt.cpp: + (WebCore::GraphicsContext::fillPath): + +2011-01-17 No'am Rosenthal <noam.rosenthal@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Background image rendering is slow + https://bugs.webkit.org/show_bug.cgi?id=50527 + + When tiling a scaled pixmap in Image::drawPattern, scale the tile + first and only then draw it to the target. Do so only when drawing + more than one tile. + + Tests in fast/backgrounds/size cover this. + + * platform/graphics/qt/ImageQt.cpp: + (WebCore::Image::drawPattern): + +2011-01-17 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] [Symbian] Fix building NPAPI support + https://bugs.webkit.org/show_bug.cgi?id=51981 + + Make sure that npapi.h is always included outside of the extern "C" + linkage declaration block. + + No new tests as there is no new functionality. + + * bridge/npruntime.h: + +2011-01-17 Philippe Normand <pnormand@igalia.com> + + Unreviewed, rolling out r75914. + http://trac.webkit.org/changeset/75914 + https://bugs.webkit.org/show_bug.cgi?id=49177 + + multiple crashes on GTK + + * platform/ScrollView.cpp: + (WebCore::ScrollView::removeChild): + (WebCore::ScrollView::wheelEvent): + * platform/gtk/MainFrameScrollbarGtk.cpp: + (MainFrameScrollbarGtk::attachAdjustment): + (MainFrameScrollbarGtk::gtkValueChanged): + * platform/gtk/ScrollViewGtk.cpp: + (WebCore::ScrollView::platformInit): + (WebCore::ScrollView::platformAddChild): + (WebCore::ScrollView::platformRemoveChild): + +2011-01-17 Gyuyoung Kim <gyuyoung.kim@samsung.com> + + Unreviewed build fix. + + Bug 49177's patch enabled platformInit() in super class(ScrollView). + But, it didn't removed the function in ScrollViewEfl.cpp. + + * platform/efl/ScrollViewEfl.cpp: + +2011-01-16 Dan Bernstein <mitz@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/8871903> REGRESSION (r75897): Crash with 0-by-0 iframe in scaled WebView + + Avoid use of FloatRect::enclosingBoundingBox(), which can stretch an empty + quad to a non-empty rect. + + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::setWidget): + (WebCore::RenderWidget::updateWidgetPosition): + +2011-01-16 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] fast/events/scroll-after-click-on-tab-index has been failing on the bots + https://bugs.webkit.org/show_bug.cgi?id=49177 + + * platform/ScrollView.cpp: Move the platform guards around a little. GTK+ + now shares the implementation of platformAddChild and platformRemoveChild, + but has its own implementation of removeChild, which knows how to inform + main frame scrollbars that they no longer control the WebCore scrollbar. + * platform/gtk/MainFrameScrollbarGtk.cpp: + (MainFrameScrollbarGtk::attachAdjustment): If we are attaching the same adjustment + that we already have, bail out early. Apply the value changed signal handler + after configuring the adjustment. We don't want our reset of the adjustment to + stomp on WebCore values. + (MainFrameScrollbarGtk::gtkValueChanged): Do not adjust the value if the WebCore + state already matches ours. This prevents some unnecessary recursion + * platform/gtk/ScrollViewGtk.cpp: + (WebCore::ScrollView::removeChild): Added, special cases main frame scrollbars + which need their adjustments detached. + +2011-01-13 Yuzo Fujishima <yuzo@google.com> + + Reviewed by Antti Koivisto. + + Fix for Bug 52427 - Inconsistent use of m_cache in CachedResourceLoader + https://bugs.webkit.org/show_bug.cgi?id=52427 + + In constructor/destructor of CachedResourceLoader, m_cache has been + used to call MemoryCache::addCachedResourceLoader/removeCachedResourceLoader + while cache() is used everywhere else. + + Actually addCachedResourceLoader/removeCachedResourceLoader need not be called at all. + Remove the call sites and make MemoryCache non-friend of CachedResourceLoader. + + No new tests because the behavior remains the same. + + * loader/cache/CachedResourceLoader.cpp: + (WebCore::CachedResourceLoader::CachedResourceLoader): + (WebCore::CachedResourceLoader::~CachedResourceLoader): + * loader/cache/CachedResourceLoader.h: + * loader/cache/MemoryCache.cpp: + * loader/cache/MemoryCache.h: + +2011-01-16 Adam Barth <abarth@webkit.org> + + Rubber-stamped by Eric Seidel. + + Move WebKit into Source + https://bugs.webkit.org/show_bug.cgi?id=52530 + + * WebCore.gyp/WebCore.gyp: + * WebCore.pri: + * WebCore.pro: + +2011-01-16 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + frame-removed-during-resize.html test crashes (shows up as image-map-2.html crash) + https://bugs.webkit.org/show_bug.cgi?id=52549 + + Fix regression from r75900; m_widget->setFrameRect() can run script that + clears m_widget, so null-check it before calling setBoundsSize(). + + Tested by fast/replaced/frame-removed-during-resize.html + + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::setWidgetGeometry): + +2011-01-16 Simon Fraser <simon.fraser@apple.com> + + Keep Leopard build happy. + + * platform/mac/WidgetMac.mm: + (WebCore::Widget::setBoundsSize): + +2011-01-16 Robert Hogan <robert@webkit.org> + + Reviewed by Andreas Kling. + + [Qt] plugins/keyboard-events.html fails after r72717 + https://bugs.webkit.org/show_bug.cgi?id=50050 + + * plugins/qt/PluginViewQt.cpp: + (WebCore::setXKeyEventSpecificFields): map event text to keycode + +2011-01-16 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Issues with iframes and plugins when the WebView is scaled. + <rdar://problem/6213380> + + When _scaleWebView has been called on a WebView, iframes + in WebKit1 render and hit-test incorrectly, and plug-ins don't scale up. + This is caused by AppKit NSViews not playing nicely with the scale + applied through style. + + Work around most of these issues by adjusting the bounds size + of widgets to allow iframe contents to paint with the correct scale, + and fix various places in the code where we relied on coordinate + transforms via NSViews (which ignore CSS transforms). + + * WebCore.exp.in: + * platform/Widget.cpp: + (WebCore::Widget::setBoundsSize): + * platform/Widget.h: + * platform/mac/WidgetMac.mm: + (WebCore::Widget::setBoundsSize): + (WebCore::Widget::paint): + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::setWidgetGeometry): + (WebCore::RenderWidget::setWidget): + (WebCore::RenderWidget::updateWidgetPosition): + * rendering/RenderWidget.h: + +2011-01-16 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + RenderView needs to take transforms on its layer into account + https://bugs.webkit.org/show_bug.cgi?id=52536 + + The RenderView's coordinate mapping methods failed to + take into account a transform on the RenderView's layer. + + No tests because it's not possible to get a transform + on the RenderView's layer through content. + + * rendering/RenderView.cpp: + (WebCore::RenderView::mapLocalToContainer): + (WebCore::RenderView::mapAbsoluteToLocalPoint): + +2011-01-15 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r75708. + http://trac.webkit.org/changeset/75708 + https://bugs.webkit.org/show_bug.cgi?id=52521 + + Breaks Qt build if mobility is not installed. (Requested by + benjaminp on #webkit). + + * WebCore.pro: + * platform/graphics/qt/MediaPlayerPrivateQt.cpp: + (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt): + * platform/graphics/qt/MediaPlayerPrivateQt.h: + (WebCore::MediaPlayerPrivateQt::supportsFullscreen): + +2011-01-15 David Kilzer <ddkilzer@apple.com> + + <http://webkit.org/b/52512> REGRESSION(r73818): range.cloneContents() ignores end offset + + Reviewed by Adele Peterson. + + The fix for Bug 50710 in r73799 introduced an off-by-one error + when copying nodes to a local NodeVector for processing. A fix + was attempted for Bug 50854 in r73818, but instead of stopping + at the end offset, it iterates through all the sibling nodes + because the loop variable (i) is never incremented. To clean + this up, revert back to the code in r73799 and fix the + off-by-one error. + + Test: fast/dom/Range/range-clone-contents.html + + * dom/Range.cpp: + (WebCore::Range::processContents): Fix the loop that copies + nodes to a local NodeVector by restoring the code from r73799 + and fixing the off-by-one error. + +2011-01-15 Adam Barth <abarth@webkit.org> + + Rubber-stamped by Eric Seidel. + + Move WebKit2 into Source + https://bugs.webkit.org/show_bug.cgi?id=52438 + + * WebCore.pro: + +2011-01-15 Joone Hur <joone.hur@collabora.co.uk> + + Reviewed by Martin Robinson. + + [GTK] Linux build with FileSystem API enabled fails + https://bugs.webkit.org/show_bug.cgi?id=43878 + + This patch allows WebKitGtk+ to build with FileSystem API option. + + No new tests because no new functionality. + + * GNUmakefile.am: Included AsyncFileSystem.h,cpp and Excluded duplicated JSFileException.h,cpp. + * bindings/js/JSDirectoryEntryCustom.cpp: Included ExceptionCode.h. + +2011-01-14 Sam Magnuson <smagnuso@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Compile with QT_NO_GRAPHICSVIEW + https://bugs.webkit.org/show_bug.cgi?id=49750 + + * platform/graphics/qt/GraphicsLayerQt.cpp: + * platform/graphics/qt/GraphicsLayerQt.h: + * platform/qt/PlatformMouseEventQt.cpp: + +2011-01-14 Tony Chang <tony@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Strip NUL character when copying text on Windows + https://bugs.webkit.org/show_bug.cgi?id=52236 + + Test: editing/pasteboard/copy-null-characters.html + + * editing/Editor.cpp: + (WebCore::Editor::selectedText): + * platform/mac/PasteboardMac.mm: + (WebCore::Pasteboard::writeSelection): Use editor()->selectedText() which matches the other platforms. + +2011-01-14 Yuzo Fujishima <yuzo@google.com> + + Reviewed by Antti Koivisto. + + Rename cache() to memoryCache() + https://bugs.webkit.org/show_bug.cgi?id=52433 + + No new tests because the behavior remains the same. + + * WebCore.exp.in: + * WebCore.order: + * history/PageCache.cpp: + (WebCore::PageCache::releaseAutoreleasedPagesNow): + * inspector/InspectorResourceAgent.cpp: + (WebCore::InspectorResourceAgent::cachedResource): + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::tellClientAboutPastMemoryCacheLoads): + * loader/archive/cf/LegacyWebArchive.cpp: + (WebCore::LegacyWebArchive::create): + * loader/cache/CachedImage.cpp: + (WebCore::CachedImage::allClientsRemoved): + (WebCore::CachedImage::data): + * loader/cache/CachedResource.cpp: + (WebCore::CachedResource::~CachedResource): + (WebCore::CachedResource::addClientToSet): + (WebCore::CachedResource::removeClient): + (WebCore::CachedResource::setDecodedSize): + (WebCore::CachedResource::setEncodedSize): + (WebCore::CachedResource::didAccessDecodedData): + * loader/cache/CachedResourceLoader.cpp: + (WebCore::CachedResourceLoader::CachedResourceLoader): + (WebCore::CachedResourceLoader::requestUserCSSStyleSheet): + (WebCore::CachedResourceLoader::requestResource): + (WebCore::CachedResourceLoader::revalidateResource): + (WebCore::CachedResourceLoader::loadResource): + (WebCore::CachedResourceLoader::clearPreloads): + (WebCore::CachedResourceLoader::printPreloadStats): + * loader/cache/CachedResourceRequest.cpp: + (WebCore::CachedResourceRequest::load): + (WebCore::CachedResourceRequest::didFail): + (WebCore::CachedResourceRequest::didReceiveResponse): + * loader/cache/MemoryCache.cpp: + (WebCore::memoryCache): + * loader/cache/MemoryCache.h: + +2011-01-14 Dan Bernstein <mitz@apple.com> + + Reviewed by Simon Fraser. + + WebCore part of <rdar://problem/8441312> Crash in -[NSView _invalidateGStatesForTree] + + * WebCore.exp.in: Export RenderWidget::suspendWidgetHierarchyUpdates() and + RenderWidget::resumeWidgetHierarchyUpdates(). + * manual-tests/plug-in-mutates-NSView-hierarchy-during-resize.html: Added. + * rendering/RenderWidget.cpp: + (WebCore::RenderWidget::setWidgetGeometry): Removed the assertion that widget hierarchy updates + are disabled. When this assertion was added, this condition was a subset of the “calling out to + plug-in code is forbidden” condition, hence the assertion was valid. The WebKit part of this + change now suspends widget hierarchy updates even at times where plug-in code is expected to be + called, which invalidates the assertion. + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * rendering/style/StyleRareInheritedData.cpp: + * rendering/style/StyleRareNonInheritedData.cpp: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * rendering/style/RenderStyle.cpp: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * editing/EditorCommand.cpp: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * editing/ApplyStyleCommand.cpp: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * css/CSSStyleSelector.cpp: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Unreviewed build fix. + + Fix Qt build after r75837 + https://bugs.webkit.org/show_bug.cgi?id=52494 + + * rendering/InlineFlowBox.h: + * rendering/RenderBoxModelObject.h: + +2011-01-14 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by David Levin. + + Do some forward declaration in RenderStyle.h + https://bugs.webkit.org/show_bug.cgi?id=52453 + + No new tests because no new functionality. + + * css/CSSComputedStyleDeclaration.cpp: + * css/CSSStyleSelector.cpp: + * editing/Editor.cpp: + * page/EventHandler.cpp: + * rendering/EllipsisBox.cpp: + * rendering/InlineBox.cpp: + * rendering/InlineTextBox.cpp: + * rendering/RenderBlock.cpp: + * rendering/RenderBlock.h: + * rendering/RenderBox.cpp: + * rendering/RenderBox.h: + * rendering/RenderEmbeddedObject.cpp: + * rendering/RenderFieldset.cpp: + * rendering/RenderFileUploadControl.cpp: + * rendering/RenderFrameSet.cpp: + * rendering/RenderHTMLCanvas.cpp: + * rendering/RenderImageResource.cpp: + * rendering/RenderInputSpeech.cpp: + * rendering/RenderLayer.h: + * rendering/RenderLineBoxList.cpp: + * rendering/RenderListBox.cpp: + * rendering/RenderMediaControlsChromium.cpp: + * rendering/RenderObject.cpp: + * rendering/RenderObject.h: + * rendering/RenderObjectChildList.cpp: + * rendering/RenderProgress.cpp: + * rendering/RenderScrollbarPart.cpp: + * rendering/RenderTable.cpp: + * rendering/RenderTable.h: + * rendering/RenderTableCell.cpp: + * rendering/RenderTableRow.cpp: + * rendering/RenderTableSection.cpp: + * rendering/RenderTheme.cpp: + * rendering/RenderThemeChromiumSkia.cpp: + * rendering/RenderThemeChromiumWin.cpp: + * rendering/RootInlineBox.cpp: + * rendering/style/RenderStyle.cpp: + * rendering/style/RenderStyle.h: + * rendering/style/StyleRareInheritedData.cpp: + +2011-01-14 Ryosuke Niwa <rniwa@webkit.org> + + Reviewed by Eric Seidel. + + Stop instantiating legacy editing positions in AccessibilityRenderObject.cpp, Element.cpp, + BreakBlockquoteCommand.cpp, CompositeEditCommand.cpp, and DeleteButtonController.cpp + https://bugs.webkit.org/show_bug.cgi?id=52481 + + Removed instantiation of legacy editing positions. + Calls to Position::Position are replaced by calls to Position's convenience functions. + + Also fixed firstPositionInOrBeforeNode and lastPositionInOrAfterNode so that + they instantiate right positions for text nodes. + + * accessibility/AccessibilityRenderObject.cpp: + (WebCore::AccessibilityRenderObject::setSelectedTextRange): + * dom/Element.cpp: + (WebCore::Element::updateFocusAppearance): + * editing/BreakBlockquoteCommand.cpp: + (WebCore::BreakBlockquoteCommand::doApply): + * editing/CompositeEditCommand.cpp: + (WebCore::CompositeEditCommand::inputText): + (WebCore::CompositeEditCommand::rebalanceWhitespaceAt): + (WebCore::CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessary): + (WebCore::CompositeEditCommand::moveParagraphs): + (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): + (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph): + (WebCore::CompositeEditCommand::splitTreeToNode): + * editing/DeleteButtonController.cpp: + (WebCore::enclosingDeletableElement): + * editing/htmlediting.h: + (WebCore::firstPositionInOrBeforeNode): Instantiates firstPositionInNode instead of + positionBeforeNode for a text node. + (WebCore::lastPositionInOrAfterNode): Ditto. + +2011-01-14 Helder Correia <helder@sencha.com> + + Reviewed by Simon Fraser. + + Shadow is not drawn when filling a path with a gradient + https://bugs.webkit.org/show_bug.cgi?id=51982 + + This happens in CG and is related to bug 51869, this time to be fixed + in GraphicsContext::fillPath(const Path& path). We need to draw the + gradient clipped to the path on a CGLayer first, and then draw the + layer on the GraphicsContext. + + Test: fast/canvas/canvas-fillPath-gradient-shadow.html + + * platform/graphics/cg/GraphicsContextCG.cpp: + (WebCore::GraphicsContext::fillPath): + +2011-01-14 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Adam Roben. + + Layer syncing should go through the compositor + https://bugs.webkit.org/show_bug.cgi?id=52486 + + Rather than have FrameView go directly to GraphicsLayer to + sync pending changes, route the call through RenderLayerCompositor. + + Add a FIXME about an existing issue with flushing and subframes. + + No behavior change, so no tests. + + * page/FrameView.cpp: + (WebCore::FrameView::syncCompositingStateForThisFrame): + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::notifySyncRequired): + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::scheduleLayerFlush): + (WebCore::RenderLayerCompositor::flushPendingLayerChanges): + * rendering/RenderLayerCompositor.h: + (WebCore::RenderLayerCompositor::notifySyncRequired): + +2011-01-14 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Hyatt. + + Fix parent block calculation when trying to find top most node + containing "this" float. + https://bugs.webkit.org/show_bug.cgi?id=51711 + + Replace use of containingBlock and traverse the parents directly + to check for float existence. containingBlock can skip parents and + jump to the RenderView directly which will cause floats to not get + cleared from intermediate parents. + + Test: fast/block/float/floats-not-cleared-crash.html + + * rendering/RenderBox.cpp: + (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists): + +2011-01-14 Adam Klein <adamk@chromium.org> + + Reviewed by Darin Fisher. + + [Chromium] Replace BackForwardListClient with BackForwardControllerClient/BackForwardList + https://bugs.webkit.org/show_bug.cgi?id=42237 + + Remove Chromium-specific implementation from WebCore. + + No tests added; this refactor should be covered by existing history-exercising tests. + + * WebCore.gyp/WebCore.gyp: + * WebCore.gypi: + * history/BackForwardListChromium.cpp: Removed. + * history/BackForwardListImpl.h: + +2011-01-12 Satish Sampath <satish@chromium.org> + + Reviewed by Dimitri Glazkov. + + Fix a crash when accessing speech input from script. + https://bugs.webkit.org/show_bug.cgi?id=52325 + + Test: fast/speech/speech-input-scripting.html + + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::parseMappedAttribute): Recreate renderer when speech input is enabled/disabled. + * rendering/RenderTextControlSingleLine.cpp: Remove unused code. + * rendering/RenderTextControlSingleLine.h: + * rendering/TextControlInnerElements.cpp: Take self references before firing events and check for renderer validity after. + (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): + (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): + (WebCore::InputFieldSpeechButtonElement::detach): + +2011-01-14 Abhishek Arya <inferno@chromium.org> + + Reviewed by David Hyatt. + + Prevent merging of anonymous blocks if one of them is already getting + destroyed. + https://bugs.webkit.org/show_bug.cgi?id=52402 + + Test: fast/block/merge-anonymous-block-remove-child-crash2.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::RenderBlock): initialize m_beingDestroyed to false. + (WebCore::RenderBlock::destroy): set m_beingDestroyed to true. + (WebCore::canMergeContiguousAnonymousBlocks): do not merge if any or prev or next is being destroyed. + (WebCore::RenderBlock::removeChild): remove the hack previously done for preventing oldChild merging with nextBlock's next sibling. + * rendering/RenderBlock.h: + (WebCore::RenderBlock::beingDestroyed): public function for m_beingDestroyed. + +2011-01-14 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed. Follow up to r75791: fix missing dispatch. + https://bugs.webkit.org/show_bug.cgi?id=52442 + + * inspector/front-end/DebuggerModel.js: + (WebInspector.DebuggerDispatcher.prototype.breakpointResolved): + +2011-01-14 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Adam Roben. + + Issues with contentsScale in GraphicsLayerCA + https://bugs.webkit.org/show_bug.cgi?id=52463 + + Fix various issues with the recent contentsScale changes: + + * platform/graphics/ca/GraphicsLayerCA.cpp: + (WebCore::GraphicsLayerCA::GraphicsLayerCA): Initialize m_contentsScale to 1. + (WebCore::GraphicsLayerCA::updateContentsScale): Only do a setNeedsDisplay() + if the layer draws content, otherwise we'll create backing store for empty layers. + (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer): Be sure to set contentsScale + on the new (tiled or untiled) layer. + (WebCore::GraphicsLayerCA::cloneLayer): Clones need contentsScale too. + +2011-01-14 Simon Fraser <simon.fraser@apple.com> + + Let Xcode have it's way with the project file. + + * WebCore.xcodeproj/project.pbxproj: + +2011-01-14 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Anders Carlsson. + + Refactor some FrameView::syncCompositingState code + https://bugs.webkit.org/show_bug.cgi?id=52459 + + Refactor some code in FrameView related to synchronizing + compositing layer state. + + * page/FrameView.cpp: + (WebCore::FrameView::syncCompositingStateForThisFrame): + (WebCore::FrameView::syncCompositingStateRecursive): + (WebCore::FrameView::paintContents): + * page/FrameView.h: + +2011-01-14 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Fix build problem introduced by http://trac.webkit.org/changeset/75713 + https://bugs.webkit.org/show_bug.cgi?id=30179 + + * plugins/symbian/PluginViewSymbian.cpp: + +2011-01-14 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Add volume slider to media player + https://bugs.webkit.org/show_bug.cgi?id=51532 + + * css/mediaControlsGtk.css: + (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel): + (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): + * platform/gtk/RenderThemeGtk.cpp: + (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize): + (WebCore::RenderThemeGtk::paintMediaVolumeSliderContainer): + (WebCore::RenderThemeGtk::paintMediaVolumeSliderTrack): + (WebCore::RenderThemeGtk::paintMediaVolumeSliderThumb): + * platform/gtk/RenderThemeGtk.h: + * platform/gtk/RenderThemeGtk2.cpp: + (WebCore::RenderThemeGtk::paintSliderTrack): + (WebCore::RenderThemeGtk::paintSliderThumb): + (WebCore::RenderThemeGtk::adjustSliderThumbSize): + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::paintSliderTrack): + (WebCore::RenderThemeGtk::paintSliderThumb): + (WebCore::RenderThemeGtk::adjustSliderThumbSize): + +2011-01-14 Joone Hur <joone.hur@collabora.co.uk> + + Reviewed by David Levin. + + [GTK] Convert use of raw pointers to GOwnPtr in FileSystemGtk.cpp + https://bugs.webkit.org/show_bug.cgi?id=52434 + + No new tests. This code will be tested when an implementation + of beginDragWithFiles is complete. + + * platform/gtk/FileSystemGtk.cpp: + (WebCore::filenameToString): Use GOwnPtr instead of gchar pointer. + (WebCore::fileSystemRepresentation): Ditto. + (WebCore::filenameForDisplay): Ditto. + (WebCore::pathGetFileName): Ditto. + +2011-01-14 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: breakpoint text snippet in breakpoints sidebar pane disappears after reload. + https://bugs.webkit.org/show_bug.cgi?id=52215 + + * inspector/front-end/Breakpoint.js: + (WebInspector.Breakpoint): + (WebInspector.Breakpoint.prototype.populateLabelElement): + * inspector/front-end/Script.js: + (WebInspector.Script.prototype.get linesCount): + (WebInspector.Script.prototype.sourceLine): + (WebInspector.Script.prototype.sourceLine.didRequestSource): + (WebInspector.Script.prototype.set source): + (WebInspector.Script.prototype.requestSource.didGetScriptSource): + (WebInspector.Script.prototype.requestSource): + * inspector/front-end/ScriptView.js: + (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded.didRequestSource): + (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded): + * inspector/front-end/SourceFrame.js: + (WebInspector.SourceFrame.prototype._addBreakpoint): + * inspector/front-end/utilities.js: + (String.prototype.findAll): + +2011-01-14 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: provide script column offset to frontend. + https://bugs.webkit.org/show_bug.cgi?id=52377 + + * bindings/js/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::dispatchDidParseSource): + * bindings/js/ScriptSourceCode.h: + (WebCore::ScriptSourceCode::ScriptSourceCode): + * bindings/v8/DebuggerScript.js: + (): + * bindings/v8/ScriptDebugServer.cpp: + (WebCore::ScriptDebugServer::dispatchDidParseSource): + * inspector/Inspector.idl: + * inspector/InspectorDebuggerAgent.cpp: + (WebCore::InspectorDebuggerAgent::didParseSource): + * inspector/InspectorDebuggerAgent.h: + * inspector/ScriptDebugListener.h: + * inspector/front-end/DebuggerModel.js: + (WebInspector.DebuggerModel.prototype.parsedScriptSource): + * inspector/front-end/Script.js: + (WebInspector.Script): + +2011-01-14 Ilya Tikhonovsky <loislo@chromium.org> + + Unreviewed one line fix for console-xhr-logging test. + + The problem was introduced at r75788. + + * inspector/InspectorBrowserDebuggerAgent.cpp: + (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest): + +2011-01-13 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: extract console related functionality into InspectorConsoleAgent + https://bugs.webkit.org/show_bug.cgi?id=52282 + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * inspector/CodeGeneratorInspector.pm: + * inspector/ConsoleMessage.cpp: + (WebCore::ConsoleMessage::~ConsoleMessage): + * inspector/ConsoleMessage.h: + * inspector/Inspector.idl: + * inspector/InspectorConsoleAgent.cpp: Added. + (WebCore::InspectorConsoleAgent::InspectorConsoleAgent): + (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent): + (WebCore::InspectorConsoleAgent::setConsoleMessagesEnabled): + (WebCore::InspectorConsoleAgent::clearConsoleMessages): + (WebCore::InspectorConsoleAgent::reset): + (WebCore::InspectorConsoleAgent::setFrontend): + (WebCore::InspectorConsoleAgent::addMessageToConsole): + (WebCore::InspectorConsoleAgent::startTiming): + (WebCore::InspectorConsoleAgent::stopTiming): + (WebCore::InspectorConsoleAgent::count): + (WebCore::InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest): + (WebCore::InspectorConsoleAgent::didReceiveResponse): + (WebCore::InspectorConsoleAgent::didFailLoading): + (WebCore::InspectorConsoleAgent::addConsoleMessage): + * inspector/InspectorConsoleAgent.h: Added. + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::clearConsoleMessages): + (WebCore::InspectorController::connectFrontend): + (WebCore::InspectorController::disconnectFrontend): + (WebCore::InspectorController::didCommitLoad): + * inspector/InspectorController.h: + (WebCore::InspectorController::consoleAgent): + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl): + (WebCore::InspectorInstrumentation::didFailLoadingImpl): + (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::addMessageToConsole): + (WebCore::InspectorInstrumentation::count): + (WebCore::InspectorInstrumentation::startTiming): + (WebCore::InspectorInstrumentation::stopTiming): + (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole): + * inspector/InspectorInstrumentation.h: + * inspector/InspectorProfilerAgent.cpp: + (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole): + (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole): + * inspector/front-end/ConsoleView.js: + (WebInspector.ConsoleView): + (WebInspector.ConsoleView.prototype.addConsoleMessage): + (WebInspector.ConsoleView.prototype.updateConsoleMessageExpiredCount): + (WebInspector.ConsoleView.prototype.consoleMessagesCleared): + * inspector/front-end/inspector.js: + * page/Console.cpp: + (WebCore::Console::addMessage): + (WebCore::Console::count): + (WebCore::Console::profile): + (WebCore::Console::time): + (WebCore::Console::timeEnd): + (WebCore::Console::group): + (WebCore::Console::groupCollapsed): + (WebCore::Console::groupEnd): + * page/Console.h: + * page/Console.idl: + +2011-01-14 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: do not use this as protocol message + dispatcher in models / agents. + https://bugs.webkit.org/show_bug.cgi?id=52442 + + Models should never for InspectorBackend.registerDomainDispatcher("foo", this). + There should be a clear way to tell whether method is being called + from within front-end or by the backend. + + * inspector/front-end/DOMAgent.js: + (WebInspector.DOMAgent): + (WebInspector.DOMAgent.prototype.nodeForId): + (WebInspector.DOMAgent.prototype._bindNodes): + (WebInspector.DOMAgent.prototype._removeBreakpoints): + (WebInspector.DOMDispatcher): + (WebInspector.DOMDispatcher.prototype.setDocument): + (WebInspector.DOMDispatcher.prototype.attributesUpdated): + (WebInspector.DOMDispatcher.prototype.characterDataModified): + (WebInspector.DOMDispatcher.prototype.setChildNodes): + (WebInspector.DOMDispatcher.prototype.setDetachedRoot): + (WebInspector.DOMDispatcher.prototype.childNodeCountUpdated): + (WebInspector.DOMDispatcher.prototype.childNodeInserted): + (WebInspector.DOMDispatcher.prototype.childNodeRemoved): + (WebInspector.DOMDispatcher.prototype.didCommitLoad): + (WebInspector.ApplicationCacheDispatcher): + (WebInspector.ApplicationCacheDispatcher.prototype.getApplicationCachesAsync): + (WebInspector.ApplicationCacheDispatcher.prototype.updateApplicationCacheStatus): + (WebInspector.ApplicationCacheDispatcher.prototype.updateNetworkState): + * inspector/front-end/DOMStorage.js: + (WebInspector.DOMStorageDispatcher): + (WebInspector.DOMStorageDispatcher.prototype.addDOMStorage): + (WebInspector.DOMStorageDispatcher.prototype.selectDOMStorage): + (WebInspector.DOMStorageDispatcher.prototype.updateDOMStorage): + * inspector/front-end/Database.js: + (WebInspector.Database.prototype.executeSql): + (WebInspector.DatabaseDispatcher): + (WebInspector.DatabaseDispatcher.prototype.addDatabase): + (WebInspector.DatabaseDispatcher.prototype.selectDatabase): + (WebInspector.DatabaseDispatcher.prototype.sqlTransactionSucceeded): + (WebInspector.DatabaseDispatcher.prototype.sqlTransactionFailed): + * inspector/front-end/DebuggerModel.js: + (WebInspector.DebuggerModel): + (WebInspector.DebuggerModel.prototype._pausedScript): + (WebInspector.DebuggerModel.prototype._resumedScript): + (WebInspector.DebuggerModel.prototype._parsedScriptSource): + (WebInspector.DebuggerModel.prototype._failedToParseScriptSource): + (WebInspector.DebuggerDispatcher): + (WebInspector.DebuggerDispatcher.prototype.pausedScript): + (WebInspector.DebuggerDispatcher.prototype.resumedScript): + (WebInspector.DebuggerDispatcher.prototype.parsedScriptSource): + (WebInspector.DebuggerDispatcher.prototype.failedToParseScriptSource): + * inspector/front-end/FileSystemView.js: + (WebInspector.FileSystemDispatcher): + (WebInspector.FileSystemDispatcher.prototype.getFileSystemPathsAsync): + (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemPath): + (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemError): + (WebInspector.FileSystemDispatcher.prototype.didGetFileSystemDisabled): + * inspector/front-end/ProfilesPanel.js: + (WebInspector.ProfilesPanel): + (WebInspector.ProfilesPanel.prototype._addProfileHeader): + (WebInspector.ProfilesPanel.prototype._removeProfileHeader): + (WebInspector.ProfilesPanel.prototype._addHeapSnapshotChunk): + (WebInspector.ProfilesPanel.prototype._finishHeapSnapshot): + (WebInspector.ProfilesPanel.prototype._setRecordingProfile): + (WebInspector.ProfilerDispatcher): + (WebInspector.ProfilerDispatcher.prototype.profilerWasEnabled): + (WebInspector.ProfilerDispatcher.prototype.profilerWasDisabled): + (WebInspector.ProfilerDispatcher.prototype.resetProfiles): + (WebInspector.ProfilerDispatcher.prototype.addProfileHeader): + (WebInspector.ProfilerDispatcher.prototype.addHeapSnapshotChunk): + (WebInspector.ProfilerDispatcher.prototype.finishHeapSnapshot): + (WebInspector.ProfilerDispatcher.prototype.setRecordingProfile): + (WebInspector.ProfileSidebarTreeElement.prototype.ondelete): + * inspector/front-end/ResourceTreeModel.js: + (WebInspector.ResourceTreeModel): + * inspector/front-end/TimelinePanel.js: + (WebInspector.TimelinePanel): + (WebInspector.TimelinePanel.prototype._timelineProfilerWasStarted): + (WebInspector.TimelinePanel.prototype._timelineProfilerWasStopped): + (WebInspector.TimelinePanel.prototype._addRecordToTimeline): + (WebInspector.TimelineDispatcher): + (WebInspector.TimelineDispatcher.prototype.timelineProfilerWasStarted): + (WebInspector.TimelineDispatcher.prototype.timelineProfilerWasStopped): + (WebInspector.TimelineDispatcher.prototype.addRecordToTimeline): + +2011-01-14 Csaba Osztrogonác <ossy@webkit.org> + + [Qt][V8] Unreviewed buildfix after r75788. + + * inspector/InspectorBrowserDebuggerAgent.cpp: + +2011-01-12 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent. + We have some methods of Debugger which are related to DOM. + Lets extract these methods to BrowserDebugger agent. + + http://bugs.webkit.org/show_bug.cgi?id=52294 + + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/CodeGeneratorInspector.pm: + * inspector/Inspector.idl: + * inspector/InspectorBrowserDebuggerAgent.cpp: Added. + (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::discardBindings): + (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr): + (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): + (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints): + (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded): + (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest): + (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation): + * inspector/InspectorBrowserDebuggerAgent.h: Added. + (WebCore::InspectorBrowserDebuggerAgent::create): + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectedPageDestroyed): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + (WebCore::InspectorController::restoreStickyBreakpoints): + (WebCore::InspectorController::restoreStickyBreakpoint): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::discardBindings): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::didRemoveDOMNode): + * inspector/InspectorDOMAgent.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): + +2011-01-14 Andrey Kosyakov <caseq@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: redirected resources not handled properly in Network panel + https://bugs.webkit.org/show_bug.cgi?id=52292 + + * inspector/Inspector.idl: Do not pass isMainResource to identifierForInitialRequest() (it's useless, as we may hit provisional load) + * inspector/InspectorInstrumentation.cpp: Ditto. + (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl): + * inspector/InspectorResourceAgent.cpp: Ditto. + (WebCore::InspectorResourceAgent::identifierForInitialRequest): + * inspector/InspectorResourceAgent.h: Ditto. + * inspector/InspectorInstrumentation.cpp: Ditto. + (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl): Fix main resource detection. + * inspector/front-end/AuditsPanel.js: WebInspector.networkResources now returns array, not map. + * inspector/front-end/ConsoleView.js: User WebInspector.resourceById() to get resource + (WebInspector.ConsoleMessage.prototype._formatMessage): + * inspector/front-end/ExtensionServer.js: Ditto. + (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource): + (WebInspector.ExtensionServer.prototype._onGetResourceContent): + * inspector/front-end/HAREntry.js: WebInspector.networkResources now returns array, not map + (WebInspector.HARLog.prototype.build): + (WebInspector.HARLog.prototype._convertResource): + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager): Use appendResource, not refreshResource, when adding a new resource. + (WebInspector.NetworkManager.prototype.identifierForInitialRequest): + (WebInspector.NetworkManager.prototype.willSendRequest): + (WebInspector.NetworkManager.prototype.didLoadResourceFromMemoryCache): + (WebInspector.NetworkManager.prototype.setInitialContent): + (WebInspector.NetworkManager.prototype.didCommitLoadForFrame): + (WebInspector.NetworkManager.prototype.didCreateWebSocket): + (WebInspector.NetworkManager.prototype._createResource): always register resource URL with ResourceTreeModel + (WebInspector.NetworkManager.prototype._appendRedirect): + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkPanel): + (WebInspector.NetworkPanel.prototype.get resources): + (WebInspector.NetworkPanel.prototype.resourceById): + (WebInspector.NetworkPanel.prototype.appendResource): Add resource as new iff appendResource was added. + (WebInspector.NetworkPanel.prototype.refreshResource): ditto. + (WebInspector.NetworkPanel.prototype.mainResourceChanged): Clear console upon arrival of new main resource. + * inspector/front-end/ResourceTreeModel.js: Expose unbindResourceURL, bind resources automatically upon creation. + (WebInspector.ResourceTreeModel.prototype._clearResources): + (WebInspector.ResourceTreeModel.prototype.unbindResourceURL): + (WebInspector.ResourceTreeModel.prototype._addFramesRecursively): + (WebInspector.ResourceTreeModel.prototype.createResource): + * inspector/front-end/inspector.js: + (WebInspector.resourceById): + +2011-01-14 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r75783. + http://trac.webkit.org/changeset/75783 + https://bugs.webkit.org/show_bug.cgi?id=52439 + + a bit strange but the same patch have broken mac builds at + linking stage. (Requested by loislo2 on #webkit). + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/CodeGeneratorInspector.pm: + * inspector/Inspector.idl: + * inspector/InspectorBrowserDebuggerAgent.cpp: Removed. + * inspector/InspectorBrowserDebuggerAgent.h: Removed. + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectedPageDestroyed): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + (WebCore::InspectorController::restoreStickyBreakpoints): + (WebCore::InspectorController::restoreStickyBreakpoint): + (WebCore::InspectorController::setEventListenerBreakpoint): + (WebCore::InspectorController::removeEventListenerBreakpoint): + (WebCore::InspectorController::hasEventListenerBreakpoint): + (WebCore::InspectorController::setXHRBreakpoint): + (WebCore::InspectorController::removeXHRBreakpoint): + (WebCore::InspectorController::hasXHRBreakpoint): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::discardBindings): + (WebCore::InspectorDOMAgent::setDOMBreakpoint): + (WebCore::InspectorDOMAgent::removeDOMBreakpoint): + (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion): + (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval): + (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification): + (WebCore::InspectorDOMAgent::descriptionForDOMEvent): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::didRemoveDOMNode): + (WebCore::InspectorDOMAgent::hasBreakpoint): + (WebCore::InspectorDOMAgent::updateSubtreeBreakpoints): + * inspector/InspectorDOMAgent.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): + +2011-01-12 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent. + We have some methods of Debugger which are related to DOM. + Lets extract these methods to BrowserDebugger agent. + + http://bugs.webkit.org/show_bug.cgi?id=52294 + + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/CodeGeneratorInspector.pm: + * inspector/Inspector.idl: + * inspector/InspectorBrowserDebuggerAgent.cpp: Added. + (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::discardBindings): + (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr): + (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): + (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints): + (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded): + (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest): + (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation): + * inspector/InspectorBrowserDebuggerAgent.h: Added. + (WebCore::InspectorBrowserDebuggerAgent::create): + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectedPageDestroyed): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + (WebCore::InspectorController::restoreStickyBreakpoints): + (WebCore::InspectorController::restoreStickyBreakpoint): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::discardBindings): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::didRemoveDOMNode): + * inspector/InspectorDOMAgent.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): + +2011-01-14 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: build fix. + + * WebCore.vcproj/WebCore.vcproj: + +2011-01-14 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: extract InspectorSettings from InspectorState, + simplify it. + https://bugs.webkit.org/show_bug.cgi?id=52429 + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.xcodeproj/project.pbxproj: + * inspector/InspectorClient.h: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectorStartsAttached): + (WebCore::InspectorController::setInspectorStartsAttached): + (WebCore::InspectorController::setInspectorAttachedHeight): + (WebCore::InspectorController::inspectorAttachedHeight): + (WebCore::InspectorController::setMonitoringXHREnabled): + (WebCore::InspectorController::restoreDebugger): + (WebCore::InspectorController::restoreProfiler): + (WebCore::InspectorController::ensureSettingsLoaded): + (WebCore::InspectorController::enableProfiler): + (WebCore::InspectorController::disableProfiler): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + * inspector/InspectorController.h: + * inspector/InspectorSettings.cpp: Added. + (WebCore::InspectorSettings::InspectorSettings): + (WebCore::InspectorSettings::getBoolean): + (WebCore::InspectorSettings::setBoolean): + (WebCore::InspectorSettings::getLong): + (WebCore::InspectorSettings::setLong): + (WebCore::InspectorSettings::registerBoolean): + (WebCore::InspectorSettings::registerLong): + * inspector/InspectorSettings.h: Added. + * inspector/InspectorState.cpp: + (WebCore::InspectorState::InspectorState): + (WebCore::InspectorState::setValue): + (WebCore::InspectorState::setObject): + (WebCore::InspectorState::registerBoolean): + (WebCore::InspectorState::registerString): + (WebCore::InspectorState::registerLong): + (WebCore::InspectorState::registerObject): + (WebCore::InspectorState::Property::create): + * inspector/InspectorState.h: + (WebCore::InspectorState::setBoolean): + (WebCore::InspectorState::setString): + (WebCore::InspectorState::setLong): + +2011-01-14 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r75774. + http://trac.webkit.org/changeset/75774 + https://bugs.webkit.org/show_bug.cgi?id=52431 + + gtk builds were broken (Requested by loislo2 on #webkit). + + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/CodeGeneratorInspector.pm: + * inspector/Inspector.idl: + * inspector/InspectorBrowserDebuggerAgent.cpp: Removed. + * inspector/InspectorBrowserDebuggerAgent.h: Removed. + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectedPageDestroyed): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + (WebCore::InspectorController::restoreStickyBreakpoints): + (WebCore::InspectorController::restoreStickyBreakpoint): + (WebCore::InspectorController::setEventListenerBreakpoint): + (WebCore::InspectorController::removeEventListenerBreakpoint): + (WebCore::InspectorController::hasEventListenerBreakpoint): + (WebCore::InspectorController::setXHRBreakpoint): + (WebCore::InspectorController::removeXHRBreakpoint): + (WebCore::InspectorController::hasXHRBreakpoint): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::discardBindings): + (WebCore::InspectorDOMAgent::setDOMBreakpoint): + (WebCore::InspectorDOMAgent::removeDOMBreakpoint): + (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion): + (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval): + (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification): + (WebCore::InspectorDOMAgent::descriptionForDOMEvent): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::didRemoveDOMNode): + (WebCore::InspectorDOMAgent::hasBreakpoint): + (WebCore::InspectorDOMAgent::updateSubtreeBreakpoints): + * inspector/InspectorDOMAgent.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): + +2011-01-12 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: Extract BrowserDebuggerAgent from InspectorController, InspectorDOMAgent and InspectorDebugger agent. + We have some methods of Debugger which are related to DOM. + Lets extract these methods to BrowserDebugger agent. + + http://bugs.webkit.org/show_bug.cgi?id=52294 + + * CMakeLists.txt: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * inspector/CodeGeneratorInspector.pm: + * inspector/Inspector.idl: + * inspector/InspectorBrowserDebuggerAgent.cpp: Added. + (WebCore::InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent): + (WebCore::InspectorBrowserDebuggerAgent::discardBindings): + (WebCore::InspectorBrowserDebuggerAgent::setEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willInsertDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willRemoveDOMNode): + (WebCore::InspectorBrowserDebuggerAgent::willModifyDOMAttr): + (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): + (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints): + (WebCore::InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded): + (WebCore::InspectorBrowserDebuggerAgent::setXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::removeXHRBreakpoint): + (WebCore::InspectorBrowserDebuggerAgent::willSendXMLHttpRequest): + (WebCore::InspectorBrowserDebuggerAgent::clearForPageNavigation): + * inspector/InspectorBrowserDebuggerAgent.h: Added. + (WebCore::InspectorBrowserDebuggerAgent::create): + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::inspectedPageDestroyed): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::enableDebuggerFromFrontend): + (WebCore::InspectorController::disableDebugger): + (WebCore::InspectorController::restoreStickyBreakpoints): + (WebCore::InspectorController::restoreStickyBreakpoint): + * inspector/InspectorController.h: + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::discardBindings): + (WebCore::InspectorDOMAgent::didInsertDOMNode): + (WebCore::InspectorDOMAgent::didRemoveDOMNode): + * inspector/InspectorDOMAgent.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl): + (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl): + (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl): + (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): + +2011-01-13 Kent Tamura <tkent@chromium.org> + + Reviewed by Dimitri Glazkov. + + Implement form validation message UI + https://bugs.webkit.org/show_bug.cgi?id=48980 + + * Add four internal pseudo selectors: + - -webkit-validation-bubble + - -webkit-validation-bubble-message + - -webkit-validation-bubble-top-outer-arrow + - -webkit-validation-bubble-top-inner-arrow + + * Implement ValidationMessage functions + Show the message for <the number of characters> / 20.0 seconds. + + No new tests because the feature is disabled by default for now and the + new behavior is strongly timing-dependent. + + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::canShareStyleWithElement): + Do not share a style with elements with different shadowPseudoId(). + * css/html.css: Define appearance for the internal selectors. + (::-webkit-validation-bubble): + (::-webkit-validation-bubble-message): + (::-webkit-validation-bubble-top-outer-arrow): + (::-webkit-validation-bubble-top-inner-arrow): + * dom/Node.cpp: + (WebCore::Node::createRendererIfNeeded): + Allow to add shadow renderers even if canHaveChildren() returns false. + * html/HTMLFormControlElement.cpp: + (WebCore::HTMLFormControlElement::detach): + Remove m_validationMessage immediately because we can't use + hideVisibleValidationMessage(), which calls a ValidationMessage function later. + (WebCore::HTMLFormControlElement::updateVisibleValidationMessage): + - Don't create ValidationMessage if the message is empty. + - Remove the check for message equality. + (WebCore::HTMLFormControlElement::hideVisibleValidationMessage): + Don't remove m_validationMessage immediately. We shouldn't make the + element needsLayout() state in this context. + * html/ValidationMessage.cpp: + (WebCore::ValidationMessage::~ValidationMessage): + hideMessage() -> deleteBubbleTree() renaming. + (WebCore::ValidationMessage::setMessage): Implemented. + (WebCore::ValidationMessage::setMessageDOMAndStartTimer): + Added. This updates the validation message and starts the timer to hide it. + (WebCore::ElementWithPseudoId): + Added to help implementations of styled shadow nodes. + (WebCore::ValidationMessage::buildBubbleTree): Added. + (WebCore::ValidationMessage::requestToHideMessage): Added. + (WebCore::ValidationMessage::deleteBubbleTree): + Renamed from hideMessage(), and implemented. + * html/ValidationMessage.h: Add declarations. + +2011-01-13 Dan Bernstein <mitz@apple.com> + + Reviewed by Alexey Proskuryakov. + + <rdar://problem/8827065> REGRESSION (r71884): Cross-origin XHR fails if willSendRequest changes the URL + https://bugs.webkit.org/show_bug.cgi?id=52419 + + Test: http/tests/loading/cross-origin-XHR-willLoadRequest.html + + * loader/ResourceLoader.cpp: + (WebCore::ResourceLoader::init): Complete r74453 by ensuring that m_request is only set after + willSendRequest(). Otherwise, willSendRequest() ends up calling into + ThreadableDocumentRequest::willSendRequest(), which cancels the request. + +2011-01-13 Dan Bernstein <mitz@apple.com> + + Reviewed by Mark Rowe. + + Don’t try to compile InjectedScriptSource.js into WebCore. + + * WebCore.xcodeproj/project.pbxproj: + +2011-01-13 Mike Thole <mthole@apple.com> + + Reviewed by Darin Adler and Brady Eidson. + + The pageScaleFactor() should be saved/restored along with the scroll position + https://bugs.webkit.org/show_bug.cgi?id=52406 + <rdar://problem/8714412> + + * history/HistoryItem.cpp: + (WebCore::HistoryItem::HistoryItem): Initialize m_pageScaleFactor. + (WebCore::HistoryItem::pageScaleFactor): Added getter. + (WebCore::HistoryItem::setPageScaleFactor): Added setter. + (WebCore::HistoryItem::encodeBackForwardTreeNode): Encode m_pageScaleFactor. + (WebCore::HistoryItem::decodeBackForwardTree): Decode m_pageScaleFactor. + * history/HistoryItem.h: + * loader/HistoryController.cpp: + (WebCore::HistoryController::saveScrollPositionAndViewStateToItem): Save the page scale factor... + (WebCore::HistoryController::restoreScrollPositionAndViewState): ...and restore it here. + +2011-01-13 Evan Martin <evan@chromium.org> + + Reviewed by Tony Chang. + + [chromium] drop backwards iteration in Linux complex text code + https://bugs.webkit.org/show_bug.cgi?id=52403 + + ComplexTextController previously supported iterating through the text in + both directions, but this resulted in duplicate code for each path. + Instead, by being more careful about flipping signs where appropriate, + we can refactor the code into one code path. + + No tests, just a refactoring; should be covered by existing tests. + + * platform/graphics/chromium/ComplexTextControllerLinux.cpp: + (WebCore::ComplexTextController::ComplexTextController): + (WebCore::ComplexTextController::reset): + (WebCore::ComplexTextController::nextScriptRun): + * platform/graphics/chromium/ComplexTextControllerLinux.h: + * platform/graphics/chromium/FontLinux.cpp: + (WebCore::glyphIndexForXPositionInScriptRun): + (WebCore::Font::selectionRectForComplexText): + +2011-01-13 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Darin Adler. + + Flip input[type=range] to use the new shadow DOM model. + https://bugs.webkit.org/show_bug.cgi?id=52317 + + This is a straight-up flip, minimal change to the logic, which will be + refactored in a follow-up patch. + + Covered by existing tests. + + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::initForStyleResolve): Changed to use either + host or parent node to find parent. + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::updateType): Added logic for destroying/creating + shadow DOM subtree. + * html/InputType.cpp: + (WebCore::InputType::createShadowSubtree): Added empty decl. + (WebCore::InputType::destroyShadowSubtree): Added a method to destroy + shadow subtree. + * html/InputType.h: Added defs. + * html/RangeInputType.cpp: + (WebCore::RangeInputType::createShadowSubtree): Added a virtual method to create + slider thumb. + * html/RangeInputType.h: Adde def. + * html/shadow/SliderThumbElement.cpp: Added temporary RenderSliderThumb class + to handle cascading appearance. + (WebCore::RenderSliderThumb::RenderSliderThumb): Added. + (WebCore::RenderSliderThumb::layout): Moved here the logic from + RenderSlider::createThumbStyle. + (WebCore::SliderThumbElement::createRenderer): Added virtual method to + create RenderSliderThumb instance. + (WebCore::SliderThumbElement::defaultEventHandler): Changed to use HTMLDivElement + as base class. + (WebCore::SliderThumbElement::detach): Ditto. + * html/shadow/SliderThumbElement.h: + (WebCore::SliderThumbElement::SliderThumbElement): Ditto. + (WebCore::SliderThumbElement::create): Ditto. + (WebCore::toSliderThumbElement): Added a casting helper. + * rendering/MediaControlElements.cpp: + (WebCore::MediaControlInputElement::attach): Added handling of shadow DOM, + since the whole method is hand-rolled. + (WebCore::MediaControlInputElement::updateStyle): Ditto. + * rendering/RenderSlider.cpp: + (WebCore::RenderSlider::~RenderSlider): Removed unneeded code. + (WebCore::RenderSlider::thumbRect): Changed to use sliderThumbElement helper. + (WebCore::RenderSlider::layout): Ditto. + (WebCore::RenderSlider::sliderThumbElement): Added a temporary helper to access + SliderThumbElement. + (WebCore::RenderSlider::mouseEventIsInThumb): Changed to use sliderThumbElement helper. + (WebCore::RenderSlider::mouseEventOffsetToThumb): Ditto. + (WebCore::RenderSlider::setValueForPosition): Ditto. + (WebCore::RenderSlider::positionForOffset): Ditto. + (WebCore::RenderSlider::currentPosition): Ditto. + (WebCore::RenderSlider::trackSize): Ditto. + (WebCore::RenderSlider::forwardEvent): Ditto. + (WebCore::RenderSlider::inDragMode): Ditto. + * rendering/RenderSlider.h: Added def. + +2011-01-13 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Rename RGBA32Buffer to ImageFrame + https://bugs.webkit.org/show_bug.cgi?id=52363 + + RGBA32Buffer is a terrible misnomer. ImageFrame is vastly + more accurate. More cleanup to come. + + * WebCore.pro: + * platform/graphics/ImageSource.cpp: + (WebCore::ImageSource::createFrameAtIndex): + (WebCore::ImageSource::frameDurationAtIndex): + (WebCore::ImageSource::frameIsCompleteAtIndex): + * platform/graphics/qt/ImageDecoderQt.cpp: + (WebCore::ImageDecoderQt::frameBufferAtIndex): + (WebCore::ImageDecoderQt::internalReadImage): + (WebCore::ImageDecoderQt::internalHandleCurrentImage): + * platform/graphics/qt/ImageDecoderQt.h: + * platform/graphics/wince/ImageWinCE.cpp: + (WebCore::ImageFrame::asNewNativeImage): + * platform/image-decoders/ImageDecoder.cpp: + (WebCore::ImageFrame::ImageFrame): + (WebCore::ImageFrame::operator=): + (WebCore::ImageFrame::clear): + (WebCore::ImageFrame::zeroFill): + (WebCore::ImageFrame::copyReferenceToBitmapData): + (WebCore::ImageFrame::copyBitmapData): + (WebCore::ImageFrame::setSize): + (WebCore::ImageFrame::hasAlpha): + (WebCore::ImageFrame::setHasAlpha): + (WebCore::ImageFrame::setColorProfile): + (WebCore::ImageFrame::setStatus): + (WebCore::ImageFrame::width): + (WebCore::ImageFrame::height): + * platform/image-decoders/ImageDecoder.h: + (WebCore::ImageFrame::ImageFrame): + * platform/image-decoders/bmp/BMPImageDecoder.cpp: + (WebCore::BMPImageDecoder::frameBufferAtIndex): + (WebCore::BMPImageDecoder::decode): + * platform/image-decoders/bmp/BMPImageDecoder.h: + * platform/image-decoders/bmp/BMPImageReader.cpp: + (WebCore::BMPImageReader::decodeBMP): + * platform/image-decoders/bmp/BMPImageReader.h: + (WebCore::BMPImageReader::setBuffer): + * platform/image-decoders/cairo/ImageDecoderCairo.cpp: + (WebCore::ImageFrame::asNewNativeImage): + * platform/image-decoders/cg/ImageDecoderCG.cpp: + (WebCore::getPtrAsPixelData): + (WebCore::ImageFrame::copyReferenceToBitmapData): + (WebCore::ImageFrame::copyBitmapData): + (WebCore::ImageFrame::setSize): + (WebCore::ImageFrame::asNewNativeImage): + * platform/image-decoders/gif/GIFImageDecoder.cpp: + (WebCore::GIFImageDecoder::frameBufferAtIndex): + (WebCore::GIFImageDecoder::clearFrameBufferCache): + (WebCore::GIFImageDecoder::haveDecodedRow): + (WebCore::GIFImageDecoder::frameComplete): + (WebCore::GIFImageDecoder::initFrameBuffer): + * platform/image-decoders/gif/GIFImageDecoder.h: + * platform/image-decoders/gif/GIFImageReader.cpp: + (GIFImageReader::read): + * platform/image-decoders/gif/GIFImageReader.h: + (GIFFrameReader::GIFFrameReader): + * platform/image-decoders/haiku/ImageDecoderHaiku.cpp: + (WebCore::ImageFrame::asNewNativeImage): + * platform/image-decoders/ico/ICOImageDecoder.cpp: + (WebCore::ICOImageDecoder::frameBufferAtIndex): + (WebCore::ICOImageDecoder::decode): + * platform/image-decoders/ico/ICOImageDecoder.h: + * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: + (WebCore::JPEGImageDecoder::frameBufferAtIndex): + (WebCore::JPEGImageDecoder::outputScanlines): + (WebCore::JPEGImageDecoder::jpegComplete): + (WebCore::JPEGImageDecoder::decode): + * platform/image-decoders/jpeg/JPEGImageDecoder.h: + * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp: + (WebCore::ImageFrame::asNewNativeImage): + * platform/image-decoders/png/PNGImageDecoder.cpp: + (WebCore::PNGImageDecoder::frameBufferAtIndex): + (WebCore::PNGImageDecoder::rowAvailable): + (WebCore::PNGImageDecoder::pngComplete): + * platform/image-decoders/png/PNGImageDecoder.h: + (WebCore::PNGImageDecoder::isComplete): + * platform/image-decoders/qt/ImageFrameQt.cpp: Copied from Source/WebCore/platform/image-decoders/qt/RGBA32BufferQt.cpp. + (WebCore::ImageFrame::ImageFrame): + (WebCore::ImageFrame::operator=): + (WebCore::ImageFrame::clear): + (WebCore::ImageFrame::zeroFill): + (WebCore::ImageFrame::copyBitmapData): + (WebCore::ImageFrame::setSize): + (WebCore::ImageFrame::asNewNativeImage): + (WebCore::ImageFrame::hasAlpha): + (WebCore::ImageFrame::setHasAlpha): + (WebCore::ImageFrame::setColorProfile): + (WebCore::ImageFrame::setStatus): + (WebCore::ImageFrame::setPixmap): + (WebCore::ImageFrame::width): + (WebCore::ImageFrame::height): + * platform/image-decoders/qt/RGBA32BufferQt.cpp: Removed. + * platform/image-decoders/skia/ImageDecoderSkia.cpp: + (WebCore::ImageFrame::ImageFrame): + (WebCore::ImageFrame::operator=): + (WebCore::ImageFrame::clear): + (WebCore::ImageFrame::zeroFill): + (WebCore::ImageFrame::copyBitmapData): + (WebCore::ImageFrame::setSize): + (WebCore::ImageFrame::asNewNativeImage): + (WebCore::ImageFrame::hasAlpha): + (WebCore::ImageFrame::setHasAlpha): + (WebCore::ImageFrame::setColorProfile): + (WebCore::ImageFrame::setStatus): + (WebCore::ImageFrame::width): + (WebCore::ImageFrame::height): + * platform/image-decoders/webp/WEBPImageDecoder.cpp: + (WebCore::WEBPImageDecoder::frameBufferAtIndex): + (WebCore::WEBPImageDecoder::decode): + * platform/image-decoders/webp/WEBPImageDecoder.h: + * platform/image-decoders/wx/ImageDecoderWx.cpp: + (WebCore::ImageFrame::asNewNativeImage): + +2011-01-13 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Darin Adler. + + Transferring nodes between documents should be aware of the shadow DOM. + https://bugs.webkit.org/show_bug.cgi?id=52399 + + No visible change in behavior at the moment. + + Once https://bugs.webkit.org/show_bug.cgi?id=52317 lands, the following + tests should no longer crash: + * fast/css/pseudo-in-range-invalid-value.html + * fast/css/pseudo-in-range.html + * fast/forms/form-collection-elements.html + * fast/forms/range-keyoperation.html + + * dom/Document.cpp: + (WebCore::Document::adoptNode): Changed to use Node::setDocumentRecursively. + * dom/Node.cpp: + (WebCore::Node::setDocumentRecursively): Added new method, taking existing + logic and adding shadow DOM traversal. + (WebCore::Node::traverseNextNode): Style fix. + (WebCore::Node::traverseNextSibling): Ditto. + (WebCore::Node::traversePreviousNode): Ditto. + (WebCore::Node::traversePreviousNodePostOrder): Ditto. + (WebCore::Node::checkReplaceChild): Changed to use setDocumentRecursively. + (WebCore::Node::checkAddChild): Ditto. + * dom/Node.h: Added def. + +2011-01-12 Enrica Casucci <enrica@apple.com> + + Reviewed by Darin Adler. + + WebKit2: Add support for drag and drop + https://bugs.webkit.org/show_bug.cgi?id=52343 + <rdar://problem/7660558> + + This patch contains the changes required to support dropping content + in WebKit on the Mac. The DragData class has been extended to provide + additional context from the application (keyboard state, modal windows, etc.) + as well as information of the drag pasteboard being used. + The support for WebKit as drag source will be added with a separate patch. + + * WebCore.exp.in: + * page/DragController.cpp: + (WebCore::DragController::dragIsMove): Added DragData parameter. + (WebCore::DragController::tryDocumentDrag): Modified call to dragIsMove. + (WebCore::DragController::concludeEditDrag): Same as above. + * page/DragController.h: Added parameter to isCopyKeyDown. + * page/mac/DragControllerMac.mm: + The following methods have been modified to use the information stored + in the DragData class. + (WebCore::DragController::isCopyKeyDown): + (WebCore::DragController::dragOperation): + * platform/DragData.h: + (WebCore::DragData::flags): + * platform/DragData.cpp: Added default flags parameter to the constructor. + * platform/mac/DragDataMac.mm: + (WebCore::DragData::DragData): Added constructor that receives the name of the pasteboard to use. + (WebCore::DragData::canSmartReplace): + (WebCore::DragData::containsColor): + (WebCore::DragData::containsFiles): + (WebCore::DragData::asFilenames): + (WebCore::DragData::containsPlainText): + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + All the following files have been modified to add the DragData + parameter to isCopyKeyDown. I plan to improve this in the future + and make isCopyKeyDown not platform specific. + * page/android/DragControllerAndroid.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/brew/DragControllerBrew.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/chromium/DragControllerChromium.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/efl/DragControllerEfl.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/gtk/DragControllerGtk.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/haiku/DragControllerHaiku.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/mac/DragControllerMac.mm: + (WebCore::DragController::isCopyKeyDown): + (WebCore::DragController::dragOperation): + * page/qt/DragControllerQt.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/win/DragControllerWin.cpp: + (WebCore::DragController::isCopyKeyDown): + * page/wx/DragControllerWx.cpp: + (WebCore::DragController::isCopyKeyDown): + +2011-01-13 David Kilzer <ddkilzer@apple.com> + + Add missing MathMLElementFactory.h and MathMLNames.h to Xcode project + + Not reviewed. + + * WebCore.xcodeproj/project.pbxproj: Add missing headers. Note + that the corresponding source files were originally added to the + project in r48559. + +2011-01-12 Zhenyao Mo <zmo@google.com> + + Reviewed by Kenneth Russell. + + Use GC3D types in WebGLRenderingContext and related WebGL classes + https://bugs.webkit.org/show_bug.cgi?id=51908 + + * html/canvas/WebGLActiveInfo.h: + (WebCore::WebGLActiveInfo::create): + (WebCore::WebGLActiveInfo::type): + (WebCore::WebGLActiveInfo::size): + (WebCore::WebGLActiveInfo::WebGLActiveInfo): + * html/canvas/WebGLBuffer.cpp: + (WebCore::WebGLBuffer::associateBufferDataImpl): + (WebCore::WebGLBuffer::associateBufferData): + (WebCore::WebGLBuffer::associateBufferSubDataImpl): + (WebCore::WebGLBuffer::associateBufferSubData): + (WebCore::WebGLBuffer::byteLength): + (WebCore::WebGLBuffer::getCachedMaxIndex): + (WebCore::WebGLBuffer::setCachedMaxIndex): + (WebCore::WebGLBuffer::setTarget): + * html/canvas/WebGLBuffer.h: + (WebCore::WebGLBuffer::getTarget): + * html/canvas/WebGLFramebuffer.cpp: + (WebCore::WebGLFramebuffer::setAttachment): + (WebCore::WebGLFramebuffer::getAttachment): + (WebCore::WebGLFramebuffer::getWidth): + (WebCore::WebGLFramebuffer::getHeight): + (WebCore::WebGLFramebuffer::getColorBufferFormat): + (WebCore::WebGLFramebuffer::initializeRenderbuffers): + * html/canvas/WebGLFramebuffer.h: + * html/canvas/WebGLProgram.cpp: + (WebCore::WebGLProgram::cacheActiveAttribLocations): + (WebCore::WebGLProgram::numActiveAttribLocations): + (WebCore::WebGLProgram::getActiveAttribLocation): + (WebCore::WebGLProgram::isUsingVertexAttrib0): + * html/canvas/WebGLProgram.h: + (WebCore::WebGLProgram::getLinkCount): + * html/canvas/WebGLRenderbuffer.h: + (WebCore::WebGLRenderbuffer::setInternalFormat): + (WebCore::WebGLRenderbuffer::getInternalFormat): + (WebCore::WebGLRenderbuffer::setSize): + (WebCore::WebGLRenderbuffer::getWidth): + (WebCore::WebGLRenderbuffer::getHeight): + * html/canvas/WebGLRenderingContext.cpp: + (WebCore::WebGLRenderingContext::initializeNewContext): + (WebCore::WebGLRenderingContext::sizeInBytes): + (WebCore::WebGLRenderingContext::activeTexture): + (WebCore::WebGLRenderingContext::bindAttribLocation): + (WebCore::WebGLRenderingContext::bindBuffer): + (WebCore::WebGLRenderingContext::bindFramebuffer): + (WebCore::WebGLRenderingContext::bindRenderbuffer): + (WebCore::WebGLRenderingContext::bindTexture): + (WebCore::WebGLRenderingContext::blendColor): + (WebCore::WebGLRenderingContext::blendEquation): + (WebCore::WebGLRenderingContext::blendEquationSeparate): + (WebCore::WebGLRenderingContext::blendFunc): + (WebCore::WebGLRenderingContext::blendFuncSeparate): + (WebCore::WebGLRenderingContext::bufferData): + (WebCore::WebGLRenderingContext::bufferSubData): + (WebCore::WebGLRenderingContext::checkFramebufferStatus): + (WebCore::WebGLRenderingContext::clear): + (WebCore::WebGLRenderingContext::clearColor): + (WebCore::WebGLRenderingContext::clearDepth): + (WebCore::WebGLRenderingContext::clearStencil): + (WebCore::WebGLRenderingContext::colorMask): + (WebCore::WebGLRenderingContext::copyTexImage2D): + (WebCore::WebGLRenderingContext::copyTexSubImage2D): + (WebCore::WebGLRenderingContext::createShader): + (WebCore::WebGLRenderingContext::cullFace): + (WebCore::WebGLRenderingContext::deleteBuffer): + (WebCore::WebGLRenderingContext::depthFunc): + (WebCore::WebGLRenderingContext::depthMask): + (WebCore::WebGLRenderingContext::depthRange): + (WebCore::WebGLRenderingContext::disable): + (WebCore::WebGLRenderingContext::disableVertexAttribArray): + (WebCore::WebGLRenderingContext::validateElementArraySize): + (WebCore::WebGLRenderingContext::validateIndexArrayConservative): + (WebCore::WebGLRenderingContext::validateIndexArrayPrecise): + (WebCore::WebGLRenderingContext::validateRenderingState): + (WebCore::WebGLRenderingContext::drawArrays): + (WebCore::WebGLRenderingContext::drawElements): + (WebCore::WebGLRenderingContext::enable): + (WebCore::WebGLRenderingContext::enableVertexAttribArray): + (WebCore::WebGLRenderingContext::framebufferRenderbuffer): + (WebCore::WebGLRenderingContext::framebufferTexture2D): + (WebCore::WebGLRenderingContext::frontFace): + (WebCore::WebGLRenderingContext::generateMipmap): + (WebCore::WebGLRenderingContext::getActiveAttrib): + (WebCore::WebGLRenderingContext::getActiveUniform): + (WebCore::WebGLRenderingContext::getAttachedShaders): + (WebCore::WebGLRenderingContext::getAttribLocation): + (WebCore::WebGLRenderingContext::getBufferParameter): + (WebCore::WebGLRenderingContext::getError): + (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): + (WebCore::WebGLRenderingContext::getParameter): + (WebCore::WebGLRenderingContext::getProgramParameter): + (WebCore::WebGLRenderingContext::getRenderbufferParameter): + (WebCore::WebGLRenderingContext::getShaderParameter): + (WebCore::WebGLRenderingContext::getTexParameter): + (WebCore::WebGLRenderingContext::getUniform): + (WebCore::WebGLRenderingContext::getUniformLocation): + (WebCore::WebGLRenderingContext::getVertexAttrib): + (WebCore::WebGLRenderingContext::getVertexAttribOffset): + (WebCore::WebGLRenderingContext::hint): + (WebCore::WebGLRenderingContext::isBuffer): + (WebCore::WebGLRenderingContext::isEnabled): + (WebCore::WebGLRenderingContext::isFramebuffer): + (WebCore::WebGLRenderingContext::isProgram): + (WebCore::WebGLRenderingContext::isRenderbuffer): + (WebCore::WebGLRenderingContext::isShader): + (WebCore::WebGLRenderingContext::isTexture): + (WebCore::WebGLRenderingContext::lineWidth): + (WebCore::WebGLRenderingContext::linkProgram): + (WebCore::WebGLRenderingContext::pixelStorei): + (WebCore::WebGLRenderingContext::polygonOffset): + (WebCore::WebGLRenderingContext::readPixels): + (WebCore::WebGLRenderingContext::renderbufferStorage): + (WebCore::WebGLRenderingContext::sampleCoverage): + (WebCore::WebGLRenderingContext::scissor): + (WebCore::WebGLRenderingContext::stencilFunc): + (WebCore::WebGLRenderingContext::stencilFuncSeparate): + (WebCore::WebGLRenderingContext::stencilMask): + (WebCore::WebGLRenderingContext::stencilMaskSeparate): + (WebCore::WebGLRenderingContext::stencilOp): + (WebCore::WebGLRenderingContext::stencilOpSeparate): + (WebCore::WebGLRenderingContext::texImage2DBase): + (WebCore::WebGLRenderingContext::texImage2DImpl): + (WebCore::WebGLRenderingContext::texImage2D): + (WebCore::WebGLRenderingContext::texParameter): + (WebCore::WebGLRenderingContext::texParameterf): + (WebCore::WebGLRenderingContext::texParameteri): + (WebCore::WebGLRenderingContext::texSubImage2DBase): + (WebCore::WebGLRenderingContext::texSubImage2DImpl): + (WebCore::WebGLRenderingContext::texSubImage2D): + (WebCore::WebGLRenderingContext::uniform1f): + (WebCore::WebGLRenderingContext::uniform1fv): + (WebCore::WebGLRenderingContext::uniform1i): + (WebCore::WebGLRenderingContext::uniform1iv): + (WebCore::WebGLRenderingContext::uniform2f): + (WebCore::WebGLRenderingContext::uniform2fv): + (WebCore::WebGLRenderingContext::uniform2i): + (WebCore::WebGLRenderingContext::uniform2iv): + (WebCore::WebGLRenderingContext::uniform3f): + (WebCore::WebGLRenderingContext::uniform3fv): + (WebCore::WebGLRenderingContext::uniform3i): + (WebCore::WebGLRenderingContext::uniform3iv): + (WebCore::WebGLRenderingContext::uniform4f): + (WebCore::WebGLRenderingContext::uniform4fv): + (WebCore::WebGLRenderingContext::uniform4i): + (WebCore::WebGLRenderingContext::uniform4iv): + (WebCore::WebGLRenderingContext::uniformMatrix2fv): + (WebCore::WebGLRenderingContext::uniformMatrix3fv): + (WebCore::WebGLRenderingContext::uniformMatrix4fv): + (WebCore::WebGLRenderingContext::vertexAttrib1f): + (WebCore::WebGLRenderingContext::vertexAttrib1fv): + (WebCore::WebGLRenderingContext::vertexAttrib2f): + (WebCore::WebGLRenderingContext::vertexAttrib2fv): + (WebCore::WebGLRenderingContext::vertexAttrib3f): + (WebCore::WebGLRenderingContext::vertexAttrib3fv): + (WebCore::WebGLRenderingContext::vertexAttrib4f): + (WebCore::WebGLRenderingContext::vertexAttrib4fv): + (WebCore::WebGLRenderingContext::vertexAttribPointer): + (WebCore::WebGLRenderingContext::viewport): + (WebCore::WebGLRenderingContext::getBooleanParameter): + (WebCore::WebGLRenderingContext::getBooleanArrayParameter): + (WebCore::WebGLRenderingContext::getFloatParameter): + (WebCore::WebGLRenderingContext::getIntParameter): + (WebCore::WebGLRenderingContext::getLongParameter): + (WebCore::WebGLRenderingContext::getUnsignedLongParameter): + (WebCore::WebGLRenderingContext::getWebGLFloatArrayParameter): + (WebCore::WebGLRenderingContext::getWebGLIntArrayParameter): + (WebCore::WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid): + (WebCore::WebGLRenderingContext::getBoundFramebufferColorFormat): + (WebCore::WebGLRenderingContext::validateTextureBinding): + (WebCore::WebGLRenderingContext::validateSize): + (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType): + (WebCore::WebGLRenderingContext::validateTexFuncLevel): + (WebCore::WebGLRenderingContext::validateTexFuncParameters): + (WebCore::WebGLRenderingContext::validateTexFuncData): + (WebCore::WebGLRenderingContext::validateDrawMode): + (WebCore::WebGLRenderingContext::validateStencilFunc): + (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters): + (WebCore::WebGLRenderingContext::validateBlendEquation): + (WebCore::WebGLRenderingContext::validateBlendFuncFactors): + (WebCore::WebGLRenderingContext::validateCapability): + (WebCore::WebGLRenderingContext::validateUniformParameters): + (WebCore::WebGLRenderingContext::validateUniformMatrixParameters): + (WebCore::WebGLRenderingContext::validateBufferDataParameters): + (WebCore::WebGLRenderingContext::vertexAttribfImpl): + (WebCore::WebGLRenderingContext::vertexAttribfvImpl): + (WebCore::WebGLRenderingContext::simulateVertexAttrib0): + * html/canvas/WebGLRenderingContext.h: + (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState): + * html/canvas/WebGLShader.cpp: + (WebCore::WebGLShader::create): + (WebCore::WebGLShader::WebGLShader): + * html/canvas/WebGLShader.h: + (WebCore::WebGLShader::getType): + * html/canvas/WebGLTexture.cpp: + (WebCore::WebGLTexture::setTarget): + (WebCore::WebGLTexture::setParameteri): + (WebCore::WebGLTexture::setParameterf): + (WebCore::WebGLTexture::setLevelInfo): + (WebCore::WebGLTexture::generateMipmapLevelInfo): + (WebCore::WebGLTexture::getInternalFormat): + (WebCore::WebGLTexture::getType): + (WebCore::WebGLTexture::getWidth): + (WebCore::WebGLTexture::getHeight): + (WebCore::WebGLTexture::isNPOT): + (WebCore::WebGLTexture::mapTargetToIndex): + (WebCore::WebGLTexture::computeLevelCount): + (WebCore::WebGLTexture::update): + (WebCore::WebGLTexture::getLevelInfo): + * html/canvas/WebGLTexture.h: + (WebCore::WebGLTexture::LevelInfo::setInfo): + * html/canvas/WebGLUniformLocation.cpp: + (WebCore::WebGLUniformLocation::create): + (WebCore::WebGLUniformLocation::WebGLUniformLocation): + (WebCore::WebGLUniformLocation::location): + * html/canvas/WebGLUniformLocation.h: + * platform/graphics/GraphicsContext3D.h: Map GC3Dboolean to bool instead of unsigned char. + +2011-01-13 Jian Li <jianli@chromium.org> + + Reviewed by Darin Fisher. + + Change createObjectURL and revokeObjectURL to put under webkitURL. + https://bugs.webkit.org/show_bug.cgi?id=52257 + + Note that we add "webkit" vendor prefix to URL that is introduced in + the latest File API spec. + + For the time being, we implement webkitURL as a readonly attribute + instead of a constructor so that we will not expose prototype property, + as required by the spec. + + * Android.derived.jscbindings.mk: + * Android.derived.v8bindings.mk: + * Android.mk: + * CMakeLists.txt: + * DerivedSources.cpp: + * DerivedSources.make: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pri: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * html/DOMURL.cpp: Added. + * html/DOMURL.h: Added. + * html/DOMURL.idl: Added. + * inspector/front-end/NetworkPanel.js: + * inspector/front-end/utilities.js: + * page/DOMWindow.cpp: + (WebCore::DOMWindow::webkitURL): + * page/DOMWindow.h: + * page/DOMWindow.idl: + * workers/WorkerContext.cpp: + (WebCore::WorkerContext::webkitURL): + * workers/WorkerContext.h: + * workers/WorkerContext.idl: + +2011-01-13 Emil Eklund <eae@chromium.org> + + Reviewed by Dimitri Glazkov. + + Setting outerText should convert CR/LF to <br> + https://bugs.webkit.org/show_bug.cgi?id=52268 + + Make set outerText support line breaks (sharing the text to fragment code + with setInnerText) and handle empty text nodes the same way IE does. + + Test: fast/dom/set-outer-text.html + + * html/HTMLElement.cpp: + (WebCore::HTMLElement::textToFragment): Shared between setInnerText and setOuterText + (WebCore::HTMLElement::setInnerText): Split out text parsing code. + (WebCore::mergeWithNextTextNode): Split out text node merging code. + (WebCore::HTMLElement::setOuterText): Added support for line breaks. + * html/HTMLElement.h: + +2011-01-13 Zhenyao Mo <zmo@google.com> + + Reviewed by Kenneth Russell. + + Relax the ESSL valid charset a little bit to include " ' ` + https://bugs.webkit.org/show_bug.cgi?id=52396 + + * html/canvas/WebGLRenderingContext.cpp: + +>>>>>>> .r75740 +2011-01-13 Adrienne Walker <enne@google.com> + + Reviewed by Kenneth Russell. + + [chromium] Attempt to fix crash in tiled compositor memcpy + https://bugs.webkit.org/show_bug.cgi?id=52379 + + * platform/graphics/chromium/LayerTilerChromium.cpp: + (WebCore::LayerTilerChromium::update): + +2011-01-13 Dimitri Glazkov <dglazkov@chromium.org> + + Unreviewed, rolling out r75725. + http://trac.webkit.org/changeset/75725 + https://bugs.webkit.org/show_bug.cgi?id=52317 + + Caused crashes in layout tests. + + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::initForStyleResolve): + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::updateType): + * html/InputType.cpp: + * html/InputType.h: + * html/RangeInputType.cpp: + * html/RangeInputType.h: + * html/shadow/SliderThumbElement.cpp: + (WebCore::SliderThumbElement::defaultEventHandler): + (WebCore::SliderThumbElement::detach): + * html/shadow/SliderThumbElement.h: + (WebCore::SliderThumbElement::SliderThumbElement): + (WebCore::SliderThumbElement::create): + * rendering/MediaControlElements.cpp: + (WebCore::MediaControlInputElement::attach): + (WebCore::MediaControlInputElement::updateStyle): + * rendering/RenderSlider.cpp: + (WebCore::RenderSlider::~RenderSlider): + (WebCore::RenderSlider::styleDidChange): + (WebCore::RenderSlider::createThumbStyle): + (WebCore::RenderSlider::thumbRect): + (WebCore::RenderSlider::layout): + (WebCore::RenderSlider::updateFromElement): + (WebCore::RenderSlider::mouseEventIsInThumb): + (WebCore::RenderSlider::mouseEventOffsetToThumb): + (WebCore::RenderSlider::setValueForPosition): + (WebCore::RenderSlider::positionForOffset): + (WebCore::RenderSlider::currentPosition): + (WebCore::RenderSlider::trackSize): + (WebCore::RenderSlider::forwardEvent): + (WebCore::RenderSlider::inDragMode): + * rendering/RenderSlider.h: + +2011-01-12 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Darin Adler. + + Flip input[type=range] to use the new shadow DOM model. + https://bugs.webkit.org/show_bug.cgi?id=52317 + + This is a straight-up flip, minimal change to the logic, which will be + refactored in a follow-up patch. + + Covered by existing tests. + + * css/CSSStyleSelector.cpp: + (WebCore::CSSStyleSelector::initForStyleResolve): Changed to use either + host or parent node to find parent. + * html/HTMLInputElement.cpp: + (WebCore::HTMLInputElement::updateType): Added logic for destroying/creating + shadow DOM subtree. + * html/InputType.cpp: + (WebCore::InputType::createShadowSubtree): Added empty decl. + (WebCore::InputType::destroyShadowSubtree): Added a method to destroy + shadow subtree. + * html/InputType.h: Added defs. + * html/RangeInputType.cpp: + (WebCore::RangeInputType::createShadowSubtree): Added a virtual method to create + slider thumb. + * html/RangeInputType.h: Adde def. + * html/shadow/SliderThumbElement.cpp: Added temporary RenderSliderThumb class + to handle cascading appearance. + (WebCore::RenderSliderThumb::RenderSliderThumb): Added. + (WebCore::RenderSliderThumb::layout): Moved here the logic from + RenderSlider::createThumbStyle. + (WebCore::SliderThumbElement::createRenderer): Added virtual method to + create RenderSliderThumb instance. + (WebCore::SliderThumbElement::defaultEventHandler): Changed to use HTMLDivElement + as base class. + (WebCore::SliderThumbElement::detach): Ditto. + * html/shadow/SliderThumbElement.h: + (WebCore::SliderThumbElement::SliderThumbElement): Ditto. + (WebCore::SliderThumbElement::create): Ditto. + (WebCore::toSliderThumbElement): Added a casting helper. + * rendering/MediaControlElements.cpp: + (WebCore::MediaControlInputElement::attach): Added handling of shadow DOM, + since the whole method is hand-rolled. + (WebCore::MediaControlInputElement::updateStyle): Ditto. + * rendering/RenderSlider.cpp: + (WebCore::RenderSlider::~RenderSlider): Removed unneeded code. + (WebCore::RenderSlider::thumbRect): Changed to use sliderThumbElement helper. + (WebCore::RenderSlider::layout): Ditto. + (WebCore::RenderSlider::sliderThumbElement): Added a temporary helper to access + SliderThumbElement. + (WebCore::RenderSlider::mouseEventIsInThumb): Changed to use sliderThumbElement helper. + (WebCore::RenderSlider::mouseEventOffsetToThumb): Ditto. + (WebCore::RenderSlider::setValueForPosition): Ditto. + (WebCore::RenderSlider::positionForOffset): Ditto. + (WebCore::RenderSlider::currentPosition): Ditto. + (WebCore::RenderSlider::trackSize): Ditto. + (WebCore::RenderSlider::forwardEvent): Ditto. + (WebCore::RenderSlider::inDragMode): Ditto. + * rendering/RenderSlider.h: Added def. + +2011-01-13 Dan Bernstein <mitz@apple.com> + + Reviewed by Simon Fraser. + + <rdar://problem/8098442> Crash in Widget::setFrameRect() + https://bugs.webkit.org/show_bug.cgi?id=52375 + + Test: plugins/destroy-on-setwindow.html + + * platform/mac/WidgetMac.mm: + (WebCore::Widget::setFrameRect): Protect the Widget from being deleted as a result of calling + out to the view. + (WebCore::Widget::getOuterView): Coding style fix. + (WebCore::Widget::paint): Protect the Widget from being deleted as a result of calling out to + the views. This is precautionary, since this function does not applear to access member variables + after such calls. + * platform/wx/WidgetWx.cpp: + (WebCore::Widget::setFrameRect): Protect the Widget from being deleted as a result of calling + out to the platform widget. + +2011-01-13 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed buildfix after r75715. + + * WebCore.pri: + * WebCore.pro: + +2011-01-13 Pavel Feldman <pfeldman@chromium.org> + + Not reviewed: Qt build fix. + + * WebCore.pri: + +2011-01-12 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: embed injected script into the backend. + https://bugs.webkit.org/show_bug.cgi?id=52312 + + InjectedScript belongs to the backend of the system and + should be exposed by means of protocol, not InjectedScriptAccess. + This patch makes injected script a part of the backend. + It introduces single manual generation step (xxd -i) that should be + automated by the build scripts for all the platforms. + + * CMakeLists.txt: + * DerivedSources.make: + * GNUmakefile.am: + * WebCore.gyp/WebCore.gyp: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * bindings/js/JSInjectedScriptHostCustom.cpp: + (WebCore::InjectedScriptHost::injectedScriptFor): + * bindings/v8/custom/V8InjectedScriptHostCustom.cpp: + (WebCore::InjectedScriptHost::injectedScriptFor): + * inspector/InjectedScriptHost.cpp: + (WebCore::InjectedScriptHost::injectedScriptSource): + * inspector/InjectedScriptHost.h: + * inspector/Inspector.idl: + * inspector/InspectorController.cpp: + (WebCore::InspectorController::restoreInspectorStateFromCookie): + * inspector/InspectorState.cpp: + (WebCore::InspectorState::InspectorState): + * inspector/InspectorState.h: + * inspector/front-end/InjectedScript.js: Removed. + * inspector/front-end/WebKit.qrc: + * inspector/front-end/inspector.html: + * inspector/front-end/inspector.js: + (WebInspector.doLoadedDone.propertyNamesCallback): + (WebInspector.doLoadedDone): + * inspector/xxd.pl: Added. + +2011-01-13 Mikhail Naganov <mnaganov@chromium.org> + + Reviewed by Timothy Hatcher. + + Web Inspector: Cleanup after r75613 -- make all UI-facing strings + to be passed directly to WebInspector.UIString + + https://bugs.webkit.org/show_bug.cgi?id=52365 + + * English.lproj/localizedStrings.js: + * inspector/front-end/ApplicationCacheItemsView.js: + (WebInspector.ApplicationCacheItemsView.prototype._updateCallback): + (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid): + * inspector/front-end/AuditRules.js: + (WebInspector.AuditRules.GzipRule.prototype.doRun): + (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies): + (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies): + * inspector/front-end/BreakpointsSidebarPane.js: + (WebInspector.EventListenerBreakpointsSidebarPane): + (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory): + * inspector/front-end/CookieItemsView.js: + (WebInspector.CookieItemsView.prototype._updateWithCookies): + * inspector/front-end/ImageView.js: + (WebInspector.ImageView.prototype._createContentIfNeeded.onImageLoad): + (WebInspector.ImageView.prototype._createContentIfNeeded): + * inspector/front-end/NetworkPanel.js: + (WebInspector.NetworkTimeCalculator.prototype.formatValue): + (WebInspector.NetworkTransferTimeCalculator.prototype.formatValue): + (WebInspector.NetworkTransferDurationCalculator.prototype.formatValue): + * inspector/front-end/ProfileDataGridTree.js: + (WebInspector.ProfileDataGridNode.prototype.get data.formatMilliseconds): + (WebInspector.ProfileDataGridNode.prototype.get data): + * inspector/front-end/Resource.js: + (WebInspector.Resource.Type.toUIString): + (WebInspector.Resource.Type.toString): + * inspector/front-end/TimelineOverviewPane.js: + (WebInspector.TimelineOverviewCalculator.prototype.formatValue): + * inspector/front-end/TimelinePanel.js: + (WebInspector.TimelinePanel): + (WebInspector.TimelineCalculator.prototype.formatValue): + (WebInspector.TimelinePanel.FormattedRecord.prototype._generateAggregatedInfo): + (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent): + (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails): + * inspector/front-end/utilities.js: + (): + +2011-01-13 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Need a way to inform the application when a Netscape plugin is created. + https://bugs.webkit.org/show_bug.cgi?id=30179 + + Added "c" style static method for the application to hook up for + receiving notifications when a plugin is created. + + * plugins/symbian/PluginViewSymbian.cpp: + (qtwebkit_setPluginCreatedCallback): + (WebCore::PluginView::platformStart): + +2011-01-13 Yi Shen <yi.4.shen@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Use a black background color for the video element on Qt Mobile + https://bugs.webkit.org/show_bug.cgi?id=52252 + + Use black as the background color for the video element on Qt Mobile. + + * css/themeQtMobile.css: + (video): + +2011-01-13 Yi Shen <yi.4.shen@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Use a big central media play control button for video element + https://bugs.webkit.org/show_bug.cgi?id=52315 + + When ChromeClient::requiresFullscreenForVideoPlayback() returns true, + all other control buttons for the video element are hidden, except + a big centralized play button. + + No new tests because no client implements requiresFullscreenForVideoPlayback yet. + + * WebCore.pri: + * css/mediaControlsQtFullscreen.css: Added. + (audio): + (audio::-webkit-media-controls-panel): + (video::-webkit-media-controls-panel): + (video:-webkit-full-page-media::-webkit-media-controls-panel): + (audio::-webkit-media-controls-mute-button): + (video::-webkit-media-controls-mute-button): + (audio::-webkit-media-controls-play-button): + (video::-webkit-media-controls-play-button): + (audio::-webkit-media-controls-timeline-container): + (video::-webkit-media-controls-timeline-container): + (audio::-webkit-media-controls-current-time-display): + (video::-webkit-media-controls-current-time-display): + (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display): + (audio::-webkit-media-controls-timeline): + (video::-webkit-media-controls-timeline): + (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-seek-back-button, video::-webkit-media-controls-seek-back-button): + (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button): + (audio::-webkit-media-controls-fullscreen-button): + (video::-webkit-media-controls-fullscreen-button): + (audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button): + (audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button): + (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button): + * platform/qt/RenderThemeQt.cpp: + (WebCore::RenderThemeQt::extraMediaControlsStyleSheet): + +2011-01-13 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Paint toggle buttons inconsistent when the object state is indeterminate + https://bugs.webkit.org/show_bug.cgi?id=52361 + + Check whether the object state is indeterminate to set the flag + GTK_STATE_FLAG_INCONSISTENT before rendering check and radio + buttons. + + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::paintToggle): + +2011-01-13 Yi Shen <yi.4.shen@nokia.com> + + Reviewed by Simon Hausmann. + + [Qt] Extend the Platform Plugin to support full screen video handler + https://bugs.webkit.org/show_bug.cgi?id=51249 + + Make MediaPlayerPrivateQt support a fullscreen player. + + No new tests because LayoutTests/media/media-fullscreen-inline.html already exists. + However, this test failed for Qt (QtMediaPlayer) due to durationchange event getting fired twice. + So, still skip it for Qt. + + * WebCore.pro: + * platform/graphics/qt/MediaPlayerPrivateQt.cpp: + (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt): + (WebCore::MediaPlayerPrivateQt::removeVideoItem): + (WebCore::MediaPlayerPrivateQt::restoreVideoItem): + * platform/graphics/qt/MediaPlayerPrivateQt.h: + (WebCore::MediaPlayerPrivateQt::supportsFullscreen): + (WebCore::MediaPlayerPrivateQt::mediaPlayer): + +2011-01-13 Dan Bernstein <mitz@apple.com> + + Reviewed by Dave Hyatt. + + <rdar://problem/8858548> Disable inheritance of text emphasis marks to ruby text + https://bugs.webkit.org/show_bug.cgi?id=52359 + + Test: fast/ruby/text-emphasis.html + + * css/html.css: + (rt): + +2011-01-13 Csaba Osztrogonác <ossy@webkit.org> + + Rubber-stamped by David Levin. + + Trivial fix after r75682. + + * loader/FrameLoader.cpp: Remove accidentally committed debug code. + (WebCore::FrameLoader::shouldClose): + +2011-01-12 Ryosuke Niwa <rniwa@webkit.org> + + Reviewed by Eric Seidel. + + REGRESSION(r69831): focus() in onkeypress discards input (affects chaseonline.chase.com) + https://bugs.webkit.org/show_bug.cgi?id=52241 + + The bug was caused by RenderTextControl::selection's creating a Range with m_insertText + which is a shadow DOM div as both start and end containers. Fixed the bug by traversing + through the descendents of m_innerText and using the right start and end containers to + create a Range. + + Test: fast/forms/focus-change-on-keypress.html + + * rendering/RenderTextControl.cpp: + (WebCore::setContainerAndOffsetForRange): Added; a helper function. + (WebCore::RenderTextControl::selection): See above. + +2011-01-12 Kenichi Ishibashi <bashi@google.com> + + Reviewed by Kent Tamura. + + M_formElementsWithFormAttribute not cleared when FormAssociatedElement is inserted with a null m_form and then removed. + https://bugs.webkit.org/show_bug.cgi?id=51905 + + Calls unregisterFormElementWithFormAttribute() when 'form' attribute + is removed. + + Tests: fast/forms/form-associated-element-crash.html + fast/forms/form-associated-element-crash2.html + + * html/FormAssociatedElement.cpp: + (WebCore::FormAssociatedElement::formAttributeChanged): + +2011-01-12 Kenichi Ishibashi <bashi@google.com> + + Reviewed by Kent Tamura. + + M_formElementsWithFormAttribute not cleared when Node is moved to another document. + https://bugs.webkit.org/show_bug.cgi?id=51418 + + Calls unregisterFormElementWithFormAttribute() when form associated elements + are moved to another document. + + Test: fast/forms/change-form-element-document-crash.html + + * html/FormAssociatedElement.cpp: + (WebCore::FormAssociatedElement::willMoveToNewOwnerDocument): Added. + * html/FormAssociatedElement.h: Added willMoveToNewOwnerDocument(). + * html/HTMLFormControlElement.cpp: + (WebCore::HTMLFormControlElement::willMoveToNewOwnerDocument): Added. + * html/HTMLFormControlElement.h: Added willMoveToNewOwnerDocument(). + * html/HTMLObjectElement.cpp: + (WebCore::HTMLObjectElement::willMoveToNewOwnerDocument): Added. + * html/HTMLObjectElement.h: Added willMoveToNewOwnerDocument(). + * html/HTMLPlugInImageElement.h: Moves willMoveToNewOwnerDocument() to protected. + +2011-01-12 Ryosuke Niwa <rniwa@webkit.org> + + Reviewed by Eric Seidel. + + Stop instantiating legacy editing positions in ApplyBlockElementCommand and ApplyStyleCommand + https://bugs.webkit.org/show_bug.cgi?id=52250 + + Removed instantiation of legacy editing positions. + Calls to Position::Position are replaced by calls to Position's convenience functions. + + Also added firstPositionInOrBeforeNode and lastPositionInOrAfterNode, + which are functions that return firstPositionInNode and lastPositionInNode respectively + when the specified node can have children for editing purpose and return positionBeforeNode + and positionAfterNode respectively otherwise. They can be used to guarantee that we never + create a bogus position like [img, 0] or [br, 0]. + + No tests are added since this is a cleanup. + + * editing/ApplyBlockElementCommand.cpp: + (WebCore::ApplyBlockElementCommand::formatSelection): + * editing/ApplyStyleCommand.cpp: + (WebCore::ApplyStyleCommand::applyBlockStyle): + (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle): + (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): + (WebCore::ApplyStyleCommand::removeInlineStyle): + (WebCore::ApplyStyleCommand::nodeFullySelected): + (WebCore::ApplyStyleCommand::nodeFullyUnselected): + (WebCore::ApplyStyleCommand::splitTextAtStart): + (WebCore::ApplyStyleCommand::splitTextAtEnd): + (WebCore::ApplyStyleCommand::splitTextElementAtStart): + (WebCore::ApplyStyleCommand::splitTextElementAtEnd): + (WebCore::ApplyStyleCommand::isValidCaretPositionInTextNode): + (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical): + (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical): + (WebCore::ApplyStyleCommand::computedFontSize): + (WebCore::ApplyStyleCommand::joinChildTextNodes): + * editing/ApplyStyleCommand.h: + * editing/htmlediting.h: + (WebCore::firstPositionInOrBeforeNode): Added. + (WebCore::lastPositionInOrAfterNode): Added. + +2011-01-12 Sam Weinig <sam@webkit.org> + + Another build fix. + + * platform/mac/WheelEventMac.mm: + (WebCore::phaseForEvent): + +2011-01-12 Sam Weinig <sam@webkit.org> + + Fix build. + + * platform/mac/WheelEventMac.mm: + (WebCore::phaseForEvent): + +2011-01-12 Adam Barth <abarth@webkit.org> + + Reviewed by Darin Adler. + + Remove premature optimization from SchemeRegistry + https://bugs.webkit.org/show_bug.cgi?id=52283 + + As far as I can tell, this optimization isn't necessary. I'm slightly + unsure which benchmarks to run to demonstrate this numerically, but + none of the benchmarks Chromium tracks were affected by adding a + similar check for "display-isolated" schemes. + + * platform/SchemeRegistry.cpp: + (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal): + +2011-01-12 Beth Dakin <bdakin@apple.com> + + Reviewed by Anders Carlsson. + + Add-on for https://bugs.webkit.org/show_bug.cgi?id=52309 + Expose fixed layout through WebKit SPI + -and corresponding- + <rdar://problem/8844464> + + And now with getters! + * WebCore.exp.in: + +2011-01-12 Sam Weinig <sam@webkit.org> + + Reviewed by Anders Carlsson. + + https://bugs.webkit.org/show_bug.cgi?id=52337 + PlatformWheelEvent should know about the scroll phase on the Mac + + Add a phase parameter on Mac PlatformWheelEvents. + + * platform/PlatformWheelEvent.h: + (WebCore::PlatformWheelEvent::PlatformWheelEvent): + (WebCore::PlatformWheelEvent::phase): + * platform/mac/WheelEventMac.mm: + (WebCore::phaseForEvent): + (WebCore::PlatformWheelEvent::PlatformWheelEvent): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + A couple of lines of the patch for https://bugs.webkit.org/show_bug.cgi?id=52321 + were omitted. + + * platform/graphics/ca/GraphicsLayerCA.cpp: + (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + Getting rid of an assert that was causing build failures that turns out not to be needed. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::paintsWithTransform): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + Another fix for Gtk + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::paintsWithTransform): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + Fix for Gtk and Windows builds + + * page/Frame.cpp: + (WebCore::Frame::scalePage): + * page/Frame.h: + * platform/graphics/ca/win/PlatformCALayerWin.cpp: + (PlatformCALayer::contentsScale): + (PlatformCALayer::setContentsScale): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + UNreviewed. + + Fix for the Windows build + + * platform/graphics/ca/win/PlatformCALayerWin.cpp: + (contentsScale): + (setContentsScale): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + Another build fix + + * platform/graphics/ca/GraphicsLayerCA.cpp: + (WebCore::GraphicsLayerCA::clampedContentsScaleForScale): + * platform/graphics/ca/mac/PlatformCALayerMac.mm: + (PlatformCALayer::setContentsScale): + +2011-01-11 Matthew Delaney <mdelaney@apple.com> + + Reviewed by Simon Fraser. + + Max area bound needed in creation of IOSurface in ImageBufferCG.cpp + https://bugs.webkit.org/show_bug.cgi?id=52172 + + Tests: fast/canvas/canvas-large-dimensions.html + + * platform/graphics/cg/ImageBufferCG.cpp: + (WebCore::ImageBuffer::ImageBuffer): + +2011-01-12 Daniel Bates <dbates@rim.com> + And Benjamin C Meyer <bmeyer@rim.com> + + Build fix when building with Inspector disabled + https://bugs.webkit.org/show_bug.cgi?id=52313 + + After changeset 75604 <http://trac.webkit.org/changeset/75604> it's not + possible to build when the Inspector is disabled. + + * inspector/InspectorInstrumentation.h: + (WebCore::InspectorInstrumentation::updateApplicationCacheStatus): Fix build breakage when building + with Inspector disabled and Offline Web Applications enabled by moving macro guard condition + ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) into function body. This makes us also + consistent with the form we use for InspectorInstrumentation::networkStateChanged() and other + InspectorInstrumentation functions. + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::ApplicationCacheGroup::didReceiveData): Fix build breakage when building with Inspector + disabled by adding ENABLE(INSPECTOR) guard around code that references the instance variable + ApplicationCacheGroup::m_currentResourceIdentifier as this variable only exists when building + with the Inspector. + (WebCore::ApplicationCacheGroup::didFinishLoading): Ditto. + (WebCore::ApplicationCacheGroup::didFail): Ditto. + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Unreviewed. + + Fix a build issue from http://trac.webkit.org/changeset/75639. + + * platform/graphics/GraphicsLayer.h: + (WebCore::GraphicsLayer::contentsScale): + (WebCore::GraphicsLayer::setContentsScale): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Reviewed by Kevin Decker. + + Pages with accelerated layers lose subpixel-AA and become blurry when a scale factor is applied + rdar://problem/8824974 + + This prevents the rootLayer (with the WebKit rendered content) from going becoming + a tiled layer when zoomed, and when there is other layered content on the page. + This speeds up zooming a lot and avoids some buggy behavior in CA with a very large + number of layers. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::paintsWithTransform): + * rendering/RenderLayer.h: + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::paintingGoesToWindow): + +2011-01-12 Chris Marrin <cmarrin@apple.com> + + Reviewed by Simon Fraser. + + Pages with accelerated layers lose subpixel-AA and become blurry when a scale factor is applied + rdar://problem/8824974 + + When scaled, WebKit renders the page content at the scaled up size, so there are no + scaling artifacts. But content drawn into a layer's backing store does not scale up. + This is made worse by the fact that the root page contents become layered when there + are other accelerated compositing layers present (video, plugins, etc.). + + Plumb scaling factor from Frame::scalePage() down into all layers with content. It + eventually calls CALayer::setContentsScale which renders to a backing store whose dimensions + are scaled, causing them to render larger and appear pixel perfect at the scaled + page size. + + * page/Frame.cpp: + (WebCore::Frame::updateContentsScale): + (WebCore::Frame::scalePage): + * page/Frame.h: + * platform/graphics/GraphicsLayer.h: + * platform/graphics/ca/GraphicsLayerCA.cpp: + (WebCore::GraphicsLayerCA::setContentsScale): + (WebCore::GraphicsLayerCA::clampedContentsScaleForScale): + * platform/graphics/ca/GraphicsLayerCA.h: + (WebCore::GraphicsLayerCA::contentsScale): + * platform/graphics/ca/PlatformCALayer.h: + * platform/graphics/ca/mac/PlatformCALayerMac.mm: + (PlatformCALayer::contentsScale): + (PlatformCALayer::setContentsScale): + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::updateContentsScale): + * rendering/RenderLayer.h: + * rendering/RenderLayerBacking.cpp: + (WebCore::RenderLayerBacking::createGraphicsLayer): + (WebCore::RenderLayerBacking::updateForegroundLayer): + (WebCore::RenderLayerBacking::updateMaskLayer): + (WebCore::RenderLayerBacking::updateContentsScale): + * rendering/RenderLayerBacking.h: + * rendering/RenderLayerCompositor.cpp: + (WebCore::RenderLayerCompositor::updateContentsScale): + * rendering/RenderLayerCompositor.h: + +2011-01-12 Stephen White <senorblanco@chromium.org> + + Reviewed by James Robinson. + + Fix DrawingBuffer issues for depth/stencil, extensions, etc. + https://bugs.webkit.org/show_bug.cgi?id=52310 + + 1) GL_TEXTURE is not a valid argument to glFramebufferTexture2D() + (should be GL_TEXTURE_2D). + 2) Support for the multisampling extension was being checked after + the DrawingBuffer constructor was called, which calls multisample() + to check for the extension. + 3) If depth or stencil is set, the corresponding framebuffers must + be created in the DrawingBuffer constructor. + 4) GL_DEPTH_STENCIL is not a valid framebuffer internal type in + GLES2. Must use GL_OES_DEPTH24_STENCIL8, and check for the + OES_packed_depth_stencil extension. + + * platform/graphics/chromium/DrawingBufferChromium.cpp: + (WebCore::DrawingBuffer::DrawingBuffer): + Record the extension support in the constructor. Create all the + secondary drawing buffers (for multisampling, depth/stencil). + * platform/graphics/gpu/DrawingBuffer.cpp: + (WebCore::DrawingBuffer::create): + Check for the extensions before calling the DrawingBuffer constructor. + (WebCore::DrawingBuffer::createSecondaryBuffers): + Refactor creation of the secondary buffers from DrawingBufferMac.mm to + here. + (WebCore::DrawingBuffer::reset): + Use DEPTH24_STENCIL8 format, not DEPTH_STENCIL. Use + DEPTH_COMPONENT16, not DEPTH_COMPONENT. + Use GL_TEXTURE_2D, not GL_TEXTURE (for glFramebufferTexture2D). + * platform/graphics/gpu/DrawingBuffer.h: + Refactor createSecondaryBuffers(). Add extension support arguments to + constructor. Add support for packed_depth_stencil extension. + * platform/graphics/gpu/mac/DrawingBufferMac.mm: + (WebCore::DrawingBuffer::DrawingBuffer): + Record extension support in constructor. Refactor out creation of + secondary buffers. + +2011-01-12 Beth Dakin <bdakin@apple.com> + + Reviewed by Anders Carlsson. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=52309 Expose + fixed layout through WebKit SPI + -and corresponding- + <rdar://problem/8844464> + + Export symbols for ScrollView::setUseFixedLayout() and + ScrollView::setFixedLayoutSize() + * WebCore.exp.in: + +2011-01-12 Robert Hogan <robert@webkit.org> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Search input field doesn't have cancel button + + Add a cancel button to the search field and make it customizable + by the client. For now, use the close dialog button associated + with the application's style as the default. + + Unskip a bunch of search field related tests that pass now: + + fast/forms/search-cancel-button-mouseup.html + fast/forms/search-rtl.html + fast/forms/search-abs-pos-cancel-button.html + fast/forms/search-styled.html + fast/forms/search-transformed.html + fast/forms/search-zoomed.html + fast/forms/search-cancel-button-style-sharing.html + fast/forms/search-display-none-cancel-button.html + fast/forms/search-placeholder-value-changed.html + fast/repaint/search-field-cancel.html + fast/forms/search-cancel-button-events.html + + https://bugs.webkit.org/show_bug.cgi?id=42887 + + * platform/graphics/qt/ImageQt.cpp: + (loadResourcePixmap): + * platform/qt/RenderThemeQt.cpp: + (WebCore::RenderThemeQt::isControlStyled): + (WebCore::RenderThemeQt::computeSizeBasedOnStyle): + (WebCore::RenderThemeQt::paintSearchField): + (WebCore::RenderThemeQt::adjustSearchFieldStyle): + (WebCore::RenderThemeQt::adjustSearchFieldCancelButtonStyle): + (WebCore::RenderThemeQt::convertToPaintingRect): + (WebCore::RenderThemeQt::paintSearchFieldCancelButton): + * platform/qt/RenderThemeQt.h: + +2011-01-12 Andrey Kosyakov <caseq@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: cookie table is multiplied after repeated switching to cookies tab in network item view + Only create cookiesTable is it hasn't been done yet. + https://bugs.webkit.org/show_bug.cgi?id=52303 + + * inspector/front-end/ResourceCookiesView.js: + (WebInspector.ResourceCookiesView.prototype.show): + +2011-01-12 Koan-Sin Tan <koansin.tan@gmail.com> + + Reviewed by Martin Robinson. + + [Gtk] WebKitGtk+ doesn't build on Mac OS X 10.6 + https://bugs.webkit.org/show_bug.cgi?id=50867 + + * config.h: Don't disallow ctype for (OS(DARWIN) && PLATFORM(GTK)) + Many GTK+ related files include <libintl.h> or <glib/gi18n-lib.h>. + On Mac, <libintl.h> includes <xlocale.h>. <xclocale.h> includes + <xlocale/_ctype.h>, which uses isacii(). + * platform/UUID.cpp: + (WebCore::createCanonicalUUIDString): For OS(DARWIN) && !PLATFORM(CF) + use the Chromium Linux UUID generation. + +2011-01-12 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Eric Seidel. + + [CSS Gradients] One color stop should not paint anything for linear-gradient + https://bugs.webkit.org/show_bug.cgi?id=52259 + + Share color stop parsing code between linear and radial gradients. + Consider the gradient invalid if it has less than two color stops. + + * css/CSSParser.cpp: + (WebCore::CSSParser::parseLinearGradient): + (WebCore::CSSParser::parseRadialGradient): + (WebCore::CSSParser::parseGradientColorStops): + * css/CSSParser.h: + +2011-01-12 Mikhail Naganov <mnaganov@chromium.org> + + Reviewed by Pavel Feldman. + + Fix inconsistencies in Inspector strings found by the new check-inspector-strings script. + + https://bugs.webkit.org/show_bug.cgi?id=52295 + + * English.lproj/localizedStrings.js: + * inspector/front-end/BreakpointsSidebarPane.js: + (WebInspector.EventListenerBreakpointsSidebarPane): + * inspector/front-end/ProfilesPanel.js: + (WebInspector.ProfilesPanel.prototype.setRecordingProfile): + * inspector/front-end/Resource.js: + (WebInspector.Resource.Type.toString): + * inspector/front-end/ResourcesPanel.js: + (WebInspector.ResourceRevisionTreeElement): + * inspector/front-end/utilities.js: + (): + +2011-01-12 Yury Semikhatsky <yurys@chromium.org> + + Unreviewed. Fix WML compilation on Mac. + + * wml/WMLInputElement.cpp: + (WebCore::WMLInputElement::setValue): + (WebCore::WMLInputElement::setValueForUser): + (WebCore::WMLInputElement::initialize): + (WebCore::WMLInputElement::validateInputMask): + * wml/WMLSelectElement.cpp: + (WebCore::WMLSelectElement::listBoxSelectItem): + +2011-01-12 Justin Schuh <jschuh@chromium.org> + + Unreviewed build fix for debug strict compiles. + + Use fprintf for debug statements instead of fwrite, which caused compile failures + in debug strict mode because of failure to check the fwrite return value. + + No behavior changed. + + * rendering/CounterNode.cpp: + (WebCore::showTreeAndMark): + +2010-12-29 Yury Semikhatsky <yurys@chromium.org> + + Reviewed by Pavel Feldman. + + inspector/timeline-network-resource.html fails when run twice + https://bugs.webkit.org/show_bug.cgi?id=37394 + + Send didReceiveResponse notification to the timeline agent from ResourceLoadNotifier + instead of ResourceLoader::didReceiveResponse to cover the cases when resources + are loaded from memory cache. + + Network notifications are now sent to InspectorInstrumentation which dispatches + them to interested agents and InspectorController. + + * inspector/Inspector.idl: + * inspector/InspectorApplicationCacheAgent.cpp: + (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse): + * inspector/InspectorController.cpp: + (WebCore::InspectorController::InspectorController): + (WebCore::InspectorController::didCommitLoad): + (WebCore::InspectorController::willSendRequest): + (WebCore::InspectorController::didReceiveResponse): + (WebCore::InspectorController::didFailLoading): + (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest): + * inspector/InspectorController.h: + * inspector/InspectorInstrumentation.cpp: + (WebCore::InspectorInstrumentation::identifierForInitialRequestImpl): + (WebCore::InspectorInstrumentation::willSendRequestImpl): + (WebCore::InspectorInstrumentation::markResourceAsCachedImpl): + (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl): + (WebCore::InspectorInstrumentation::willReceiveResourceResponseImpl): + (WebCore::InspectorInstrumentation::didReceiveContentLengthImpl): + (WebCore::InspectorInstrumentation::didFinishLoadingImpl): + (WebCore::InspectorInstrumentation::didFailLoadingImpl): + (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl): + (WebCore::InspectorInstrumentation::scriptImportedImpl): + (WebCore::InspectorInstrumentation::retrieveResourceAgent): + * inspector/InspectorInstrumentation.h: + (WebCore::InspectorInstrumentation::identifierForInitialRequest): + (WebCore::InspectorInstrumentation::willSendRequest): + (WebCore::InspectorInstrumentation::markResourceAsCached): + (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCache): + (WebCore::InspectorInstrumentation::willReceiveResourceResponse): + (WebCore::InspectorInstrumentation::didReceiveContentLength): + (WebCore::InspectorInstrumentation::didFinishLoading): + (WebCore::InspectorInstrumentation::didFailLoading): + (WebCore::InspectorInstrumentation::resourceRetrievedByXMLHttpRequest): + (WebCore::InspectorInstrumentation::scriptImported): + * inspector/InspectorResourceAgent.cpp: + (WebCore::InspectorResourceAgent::identifierForInitialRequest): + * inspector/InspectorResourceAgent.h: + * inspector/InspectorTimelineAgent.cpp: + (WebCore::InspectorTimelineAgent::willSendResourceRequest): + * inspector/InspectorTimelineAgent.h: + * inspector/TimelineRecordFactory.cpp: + (WebCore::TimelineRecordFactory::createResourceSendRequestData): + * inspector/TimelineRecordFactory.h: + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager.prototype.identifierForInitialRequest): + * inspector/front-end/TimelinePanel.js: + (WebInspector.TimelinePanel.prototype.addRecordToTimeline): + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::loadedResourceFromMemoryCache): + * loader/ResourceLoadNotifier.cpp: + (WebCore::ResourceLoadNotifier::didReceiveResponse): + (WebCore::ResourceLoadNotifier::didFailToLoad): + (WebCore::ResourceLoadNotifier::assignIdentifierToInitialRequest): + (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): + (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse): + (WebCore::ResourceLoadNotifier::dispatchDidReceiveContentLength): + (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading): + (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages): + * loader/ResourceLoader.cpp: + (WebCore::ResourceLoader::didReceiveResponse): + * loader/appcache/ApplicationCacheGroup.cpp: + (WebCore::ApplicationCacheGroup::createResourceHandle): + (WebCore::ApplicationCacheGroup::didReceiveResponse): + (WebCore::ApplicationCacheGroup::didReceiveData): + (WebCore::ApplicationCacheGroup::didFinishLoading): + (WebCore::ApplicationCacheGroup::didFail): + * loader/appcache/ApplicationCacheGroup.h: + * workers/DefaultSharedWorkerRepository.cpp: + (WebCore::SharedWorkerScriptLoader::notifyFinished): + * workers/Worker.cpp: + (WebCore::Worker::notifyFinished): + * workers/WorkerContext.cpp: + (WebCore::WorkerContext::importScripts): + * xml/XMLHttpRequest.cpp: + (WebCore::XMLHttpRequest::didFinishLoading): + +2011-01-12 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: do not replace all tabs with spaces when editing script source + https://bugs.webkit.org/show_bug.cgi?id=52291 + + * inspector/front-end/SourceFrame.js: + (WebInspector.SourceFrame.prototype.setContent): + (WebInspector.SourceFrame.prototype._editLine): + +2011-01-11 Jeremy Orlow <jorlow@chromium.org> + + Reviewed by Nate Chapin. + + Enforce READ_ONLY transactions in IndexedDB + https://bugs.webkit.org/show_bug.cgi?id=52229 + + Add READ_ONLY_ERR and return it whenever delete or put + are called. Note that IDBCursor's delete and update + are simply aliases for delete/put, which is why no + extra code is required to handle those cases. + + Test: storage/indexeddb/transaction-read-only.html + + * dom/ExceptionCode.cpp: + * storage/IDBCursorBackendImpl.cpp: + (WebCore::IDBCursorBackendImpl::deleteFunction): + * storage/IDBDatabase.idl: + * storage/IDBDatabaseException.h: + * storage/IDBDatabaseException.idl: + * storage/IDBObjectStoreBackendImpl.cpp: + (WebCore::IDBObjectStoreBackendImpl::put): + (WebCore::IDBObjectStoreBackendImpl::deleteFunction): + (WebCore::IDBObjectStoreBackendImpl::deleteIndex): + +2011-01-11 Philippe Normand <pnormand@igalia.com> + + Reviewed by Eric Seidel. + + [GTK] minimal build breaks in RenderThemeGtk3 + https://bugs.webkit.org/show_bug.cgi?id=52202 + + * platform/gtk/RenderThemeGtk3.cpp: Added VIDEO guards around + initMediaColors(). + +2011-01-11 Philippe Normand <pnormand@igalia.com> + + Reviewed by Eric Carlson. + + [GStreamer] PlatformVideoWindowMac implementation + https://bugs.webkit.org/show_bug.cgi?id=50770 + + This new implementation will be used on Mac OS to display the + fullscreen video window with the GStreamer-based media player. + + * platform/graphics/gstreamer/GStreamerGWorld.cpp: + (WebCore::gstGWorldSyncMessageCallback): + * platform/graphics/gstreamer/PlatformVideoWindow.h: + (WebCore::PlatformVideoWindow::window): + * platform/graphics/gstreamer/PlatformVideoWindowMac.mm: + (PlatformVideoWindow::PlatformVideoWindow): + (PlatformVideoWindow::~PlatformVideoWindow): + (PlatformVideoWindow::prepareForOverlay): + +2011-01-11 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Dan Bernstein. + + Webkit crashes when a gradient is applied using the first-line pseudo element + https://bugs.webkit.org/show_bug.cgi?id=52225 + + When a pseudostyle references images, we fail to register/unregister + the relevant RenderObjects as clients of the image in the style. + For gradients, this caused a crash. + + This patch fixes the crash by returning a null gradient image in this + situation. + + Test: fast/gradients/gradient-on-pseudoelement-crash.html + + * css/CSSGradientValue.cpp: + (WebCore::CSSGradientValue::image): + +2011-01-11 Andy Estes <aestes@apple.com> + + Reviewed by Darin Adler. + + REGRESSION (r71562): servePendingRequests() no longer called when + resources are done loading. + https://bugs.webkit.org/show_bug.cgi?id=52264 + <rdar://problem/8767429> + + In r71562, servePendingRequests() is no longer called in Loader's + didFinishLoading(), didFail() and didReceiveResponse() methods. Since + r71562 was intended only as a refactoring, these calls should be + restored. At least one WebKit-based Mac OS X application relies on this + for correct behavior. + + * loader/cache/CachedResourceLoader.cpp: + (WebCore::CachedResourceLoader::loadDone): Call + resourceLoadScheduler()->servePendingRequests(). + +2011-01-11 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Eric Seidel. + + Add Document::setContent() + https://bugs.webkit.org/show_bug.cgi?id=52085 + + Add a method to Document to set the whole content at once. + This removes the hack of the insert method in the xml parser + and is a predecessor to feed the xml parser with raw data. + + * dom/Document.cpp: + (WebCore::Document::setContent): + * dom/Document.h: + * dom/XMLDocumentParser.cpp: + (WebCore::XMLDocumentParser::insert): Added ASSERT_NOT_REACHED(). + * loader/cache/CachedFont.cpp: + (WebCore::CachedFont::ensureSVGFontData): Use setContent. + * xml/DOMParser.cpp: + (WebCore::DOMParser::parseFromString): Ditto. + * xml/XMLHttpRequest.cpp: + (WebCore::XMLHttpRequest::responseXML): Ditto. + * xml/XSLTProcessor.cpp: + (WebCore::XSLTProcessor::createDocumentFromSource): Ditto. + +2011-01-11 Brent Fulgham <bfulgham@webkit.org> + + Unreviewed build fix. + + * platform/graphics/cairo/PathCairo.cpp: + (WebCore::Path::addArc): Switch to MathExtra's piFloat define, + rather than M_PI which is not always available. + +2011-01-11 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk> + + Reviewed by Adam Barth. + + Use plug-in DB for extensions to MIME type convertion + + Plugins extension to MIME type conversion was not used in the + frameLoader. This was causing some fallback to be use which as the side + effect of loosing all the <OBJECT> parameters or <EMBED> attributes. + This patch ensure that we try to convert the extension to MIME type + using the plugin database beofre using this fallback. + + Attribute lost with Flash plugin without mime type set + https://bugs.webkit.org/show_bug.cgi?id=50657 + + Test: plugins/no-mime-with-valid-extension.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::defaultObjectContentType): Use PluginDatabase for MIME + +2011-01-11 James Simonsen <simonjam@chromium.org> + + Reviewed by Eric Seidel. + + [Web Timing] Rename sslHandshakeStart to secureConnectionStart + https://bugs.webkit.org/show_bug.cgi?id=52239 + + * page/PerformanceTiming.cpp: + (WebCore::PerformanceTiming::secureConnectionStart): + * page/PerformanceTiming.h: + * page/PerformanceTiming.idl: + +2011-01-11 Adam Barth <abarth@webkit.org> + + Reviewed by Eric Seidel. + + Introduce the notion of a "display-isolated" URL scheme for use by + Chrome-internal URLs + https://bugs.webkit.org/show_bug.cgi?id=50182 + + This patch actually makes the display-isolated schemes display + isolated. The behavior should be the same as the previous iteration of + this patch, but re-organized a bit because reading the access white + list is expensive. + + * page/SecurityOrigin.cpp: + (WebCore::SecurityOrigin::isAccessToURLWhiteListed): + (WebCore::SecurityOrigin::canDisplay): + * page/SecurityOrigin.h: + * platform/SchemeRegistry.cpp: + * platform/SchemeRegistry.h: + +2011-01-11 Mihai Parparita <mihaip@chromium.org> + + Reviewed by Darin Fisher. + + Scroll event should be fired asynchronously + https://bugs.webkit.org/show_bug.cgi?id=45631 + + Tests: fast/events/fire-scroll-event.html + fast/events/fire-scroll-event-element.html + fast/events/scroll-event-phase.html + + Makes scroll events fire asynchronously to be in compliance with the + CSSOM View Module and consistent with Gecko, Opera and (to some degree) + IE. + + Implemented via the EventQueue class added by r74062 (EventQueue now + has a convenience enqueueScrollEvent method). + + * dom/EventQueue.cpp: + (WebCore::EventQueue::enqueueScrollEvent): + (WebCore::EventQueue::pendingEventTimerFired): + * dom/EventQueue.h: + * page/EventHandler.cpp: + (WebCore::EventHandler::sendScrollEvent): + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::scrollToOffset): + * rendering/RenderListBox.cpp: + (WebCore::RenderListBox::valueChanged): + +2011-01-11 Patrick Gansterer <paroga@webkit.org> + + Unreviewed WinCE build fix for r75523. + + * platform/wince/DragDataWinCE.cpp: Added missing include. + +2011-01-11 Abhishek Arya <inferno@chromium.org> + + Reviewed by Dimitri Glazkov. + + RefPtr the FrameView to prevent scrollbar from getting deleted inside + its scroll event. + https://bugs.webkit.org/show_bug.cgi?id=52238 + + Test: scrollbars/scrollable-iframe-remove-crash.html + + * page/DOMWindow.cpp: + (WebCore::DOMWindow::scrollTo): + +2011-01-08 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by David Hyatt. + + Make pseudo-style resolution less hard-coded when used to select a shadow node + https://bugs.webkit.org/show_bug.cgi?id=46595 + + Essentially implements the plumbing for the XBL2 pseudo attribute: + http://dev.w3.org/2006/xbl2/#the-pseudo-attribute + + Test: fast/css/unknown-pseudo-element-matching.html + + * css/CSSGrammar.y: Changed to handle specifier_list structure with the + CSSParser::updateSpecifierWithElementName helper, added logic to + keep unknown pseudo-element selectors at the top of the selector chain, + so that we can easily check for them and grab them, and also because + they would either not match anything or act as a descendant selector + (descendant into a shadow DOM subtree that is), not a specifier. + * css/CSSParser.cpp: + (WebCore::CSSParser::updateSpecifiersWithElementName): Generalized/combined + the logic adding element name to selectors and added the special case + to handle unknown pseudo-element selectors. + * css/CSSParser.h: Added def. + * css/CSSSelector.cpp: + (WebCore::CSSSelector::pseudoId): Removed any mention of PseudoSliderThumb/SLIDER_THUMB. + (WebCore::nameToPseudoTypeMap): Ditto. + (WebCore::CSSSelector::extractPseudoType): Ditto. + * css/CSSSelector.h: Added a new ShadowDescendant relation type, + removed PseudoSliderThumb def. + (WebCore::CSSSelector::isUnknownPseudoElement): Added a helper method. + * css/CSSSelectorList.cpp: + (WebCore::SelectorHasUnknownPseudoElementFunctor::operator()): Added a functor + to check for an unknown pseudo-element in the list. + (WebCore::CSSSelectorList::hasUnknownPseudoElements): Added. + * css/CSSSelectorList.h: Added a def. + * css/CSSStyleSelector.cpp: + (WebCore::CSSRuleSet::getPseudoRules): Added accessor to pseudo-element hash. + (WebCore::CSSStyleSelector::matchRules): Added matching pseudo elements. + (WebCore::CSSStyleSelector::SelectorChecker::checkSelector): Added handling + of ShadowDescendant relation. + (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Enabled handling + of unknown pseudo-element selectors. + (WebCore::CSSRuleSet::addRule): Added populating unknown pseudo-element hash. + * css/html.css: + (input[type="range"]::-webkit-slider-thumb): Added previously-hard-coded + display:block. + * dom/Element.h: + (WebCore::Element::shadowPseudoId): Added new virtual method to allow + elements to provide the value of pseudo-element selector they would match. + * dom/Node.cpp: + (WebCore::Node::querySelector): Added checking for unknown pseudo-element selectors, + so that we can throw a SYNTAX_ERR if found. + (WebCore::Node::querySelectorAll): Ditto. + * html/shadow/SliderThumbElement.h: + (WebCore::SliderThumbElement::shadowPseudoId): Added to return "-webkit-slider-thumb"; + * rendering/RenderSlider.cpp: + (WebCore::RenderSlider::createThumbStyle): Changed to use the new styleForElement logic. + * rendering/style/RenderStyleConstants.h: Removed SLIDER_THUMB. + +2011-01-11 Dean Jackson <dino@apple.com> + + Reviewed by Simon Fraser. + + https://bugs.webkit.org/show_bug.cgi?id=52233 + + WebKitCSSMatrix constructor should accept 'none' + as a valid string parameter. + + * css/WebKitCSSMatrix.cpp: + (WebCore::WebKitCSSMatrix::setMatrixValue): + +2011-01-11 James Robinson <jamesr@chromium.org> + + Reviewed by Dimitri Glazkov. + + Set all RenderBlocks as replaced when an inline display type is specified + https://bugs.webkit.org/show_bug.cgi?id=50858 + + When a RenderBlock is created for an element with a specified display:inline style, + it should always be treated as inline-block. This situations often comes up for form + controls. Previously, RenderBlock::styleWillChange set the replaced flag for display + values of inline-block, inline-table, and inline-table and a number of subclasses of + RenderBlock set the replaced flag in styleDidChange for a display:inline. However + sometimes new subclasses would miss this step leading to bugs (such as with RenderDetails). + This patch sets the replaced flag for all inline display types in RenderBlock::styleWillChange. + + Code cleanup only, no change in behavior so no new tests. + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::styleWillChange): + * rendering/RenderButton.cpp: + (WebCore::RenderButton::styleDidChange): + * rendering/RenderFieldset.cpp: + * rendering/RenderFieldset.h: + * rendering/RenderFileUploadControl.cpp: + (WebCore::RenderFileUploadControl::styleDidChange): + * rendering/RenderListBox.cpp: + * rendering/RenderListBox.h: + * rendering/RenderMenuList.cpp: + (WebCore::RenderMenuList::styleDidChange): + * rendering/RenderSlider.cpp: + (WebCore::RenderSlider::styleDidChange): + * rendering/RenderTextControl.cpp: + (WebCore::RenderTextControl::styleDidChange): + +2011-01-11 Dimitri Glazkov <dglazkov@chromium.org> + + Reviewed by Eric Seidel. + + REGRESSION(r71934) Can't type in search edit field on skin-one.com + https://bugs.webkit.org/show_bug.cgi?id=52195 + + Restored the original behavior, where the selectstart event is not + dispatched when selection changes inside of the shadow DOM. + + * dom/Node.cpp: + (WebCore::determineDispatchBehavior): Moved EventDispatchBehavior-determining + logic into a helper function, also added a check to keep selectstart + events inside of the shadow DOM. + (WebCore::Node::dispatchGenericEvent): Changed to use the helper function. + +2011-01-11 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Provide plugin coordinates to windowless plugins on Symbian. + https://bugs.webkit.org/show_bug.cgi?id=52213 + + * plugins/symbian/PluginViewSymbian.cpp: + (WebCore::PluginView::setNPWindowIfNeeded): + +2011-01-10 Zhenyao Mo <zmo@google.com> + + Reviewed by Kenneth Russell. + + Need to consider UNPACK_ALIGNMENT in GraphicsContext3D::texImage2DResourceSafe + https://bugs.webkit.org/show_bug.cgi?id=52068 + + * html/canvas/WebGLRenderingContext.cpp: + (WebCore::WebGLRenderingContext::copyTexImage2D): Use computeImageSizeInBytes. + (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto. + (WebCore::WebGLRenderingContext::readPixels): Ditto, and fix a bug on generating the wrong error. + (WebCore::WebGLRenderingContext::texImage2DBase): Ditto. + (WebCore::WebGLRenderingContext::validateTexFuncData): Use computeImageSizeInBytes. + * platform/graphics/GraphicsContext3D.cpp: + (WebCore::GraphicsContext3D::texImage2DResourceSafe): Add a new parameter alignment. + (WebCore::GraphicsContext3D::computeFormatAndTypeParameters): Add more supported format/type. + (WebCore::GraphicsContext3D::computeImageSizeInBytes): Added. + * platform/graphics/GraphicsContext3D.h: + +2011-01-10 Enrica Casucci <enrica@apple.com> + + Reviewed by Alexey Proskuryakov. + + Paste and drag and drop use different code paths to interact with the pasteboard. + https://bugs.webkit.org/show_bug.cgi?id=52093 + The change consists in a refactoring of the code to have only one class that + deals with the pasteboard on Mac. + + No new tests. A test is already available for this + (editing/pasteboard/drag-image-to-contenteditable-in-iframe.html) but had incorrect results. + + * WebCore.exp.in: + * loader/EmptyClients.h: Added two Mac only methods to call into WebKit to use functionality + that is in NSURLExtras. + (WebCore::EmptyEditorClient::canonicalizeURL): + (WebCore::EmptyEditorClient::canonicalizeURLString): + * page/DragController.cpp: + The following methods have been changed to pass a pointer to the Frame object + to the DragData class. + (WebCore::documentFragmentFromDragData): + (WebCore::DragController::performDrag): + (WebCore::DragController::dispatchTextInputEventFor): + (WebCore::DragController::concludeEditDrag): + * page/EditorClient.h: Added two Mac only methods to call into WebKit to use functionality + that is in NSURLExtras. + The following files have been modified to pass the Frame object to the DragData method calls. + * page/chromium/DragControllerChromium.cpp: + (WebCore::DragController::dragOperation): + * page/gtk/DragControllerGtk.cpp: + (WebCore::DragController::dragOperation): + * page/mac/DragControllerMac.mm: + (WebCore::DragController::dragOperation): + * page/qt/DragControllerQt.cpp: + (WebCore::DragController::dragOperation): + * page/win/DragControllerWin.cpp: + (WebCore::DragController::dragOperation): + * platform/DragData.h: Removed Mac specific constructor and reference to PasteboardHelper class. + * platform/Pasteboard.h: Added public constructor to create a Pasteboard object from an NSPasteboard. + The following files were all modified to match the new parameters of the methods listed. + * platform/android/DragDataAndroid.cpp: + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + * platform/chromium/DragDataChromium.cpp: + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::asFragment): + * platform/gtk/DragDataGtk.cpp: + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + * platform/haiku/DragDataHaiku.cpp: + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + * platform/mac/DragDataMac.mm: + (WebCore::DragData::DragData): + (WebCore::DragData::asPlainText): + (WebCore::insertablePasteboardTypes): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + * platform/mac/PasteboardMac.mm: + (WebCore::Pasteboard::getBestURL): + (WebCore::Pasteboard::asURL): + * platform/qt/DragDataQt.cpp: + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + * platform/win/DragDataWin.cpp: + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsCompatibleContent): + (WebCore::DragData::asFragment): + * platform/wince/DragDataWinCE.cpp: + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asPlainText): + (WebCore::DragData::asFragment): + * platform/wx/DragDataWx.cpp: + (WebCore::DragData::asPlainText): + (WebCore::DragData::containsURL): + (WebCore::DragData::asURL): + (WebCore::DragData::asFragment): + +2011-01-11 Abhishek Arya <inferno@chromium.org> + + Reviewed by Dimitri Glazkov. + + RefPtr text node in setOuterText since calling appendData + on a text node can fire away dom event listener which might + remove the text node from underneath. + https://bugs.webkit.org/show_bug.cgi?id=52163 + + Test: fast/dom/text-node-append-data-remove-crash.html + + * html/HTMLElement.cpp: + (WebCore::HTMLElement::setOuterText): + +2011-01-11 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Add support for <meter> element + https://bugs.webkit.org/show_bug.cgi?id=48713 + + * GNUmakefile.am: Enable meter element. + +2011-01-11 Csaba Osztrogonác <ossy@webkit.org> + + Unreviewed buildfix. + + [Qt][V8] Add missing include for debug build. + + * loader/cache/CachedResourceLoader.cpp: + +2011-01-11 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: redirects are lost from the network panel upon navigation. + https://bugs.webkit.org/show_bug.cgi?id=52210 + + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager.prototype.didCommitLoadForFrame): + +2011-01-11 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Remove uses of QFuture since it isn't supported on all platforms. + https://bugs.webkit.org/show_bug.cgi?id=51204 + + * platform/network/qt/QtNAMThreadSafeProxy.cpp: + (WebCore::QtNAMThreadSafeProxy::QtNAMThreadSafeProxy): + (WebCore::QtNAMThreadSafeProxy::localCookiesForUrl): + (WebCore::QtNAMThreadSafeProxy::localWillLoadFromCache): + * platform/network/qt/QtNAMThreadSafeProxy.h: + (WebCore::QtNAMThreadSafeProxy::cookiesForUrl): + (WebCore::QtNAMThreadSafeProxy::willLoadFromCache): + +2011-01-11 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: recreate script view after live edit. + https://bugs.webkit.org/show_bug.cgi?id=51751 + + * inspector/front-end/Script.js: + (WebInspector.Script.prototype.set source): + * inspector/front-end/ScriptView.js: + (WebInspector.ScriptView): + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback): + (WebInspector.ScriptsPanel.prototype.editScriptSource): + (WebInspector.ScriptsPanel.prototype.viewRecreated): + * inspector/front-end/SourceFrame.js: + (WebInspector.SourceFrame.prototype._doEditLine): + +2011-01-11 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: frameDetachedFromParent notification handler is missing in NetworkManager. + https://bugs.webkit.org/show_bug.cgi?id=52205 + + * inspector/front-end/NetworkManager.js: + (WebInspector.NetworkManager.prototype.frameDetachedFromParent): + +2011-01-11 Alexander Pavlov <apavlov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: "Audit present state" always disabled + https://bugs.webkit.org/show_bug.cgi?id=52199 + + Removed all traces of resource tracking checks, as we have it no more. + + * English.lproj/localizedStrings.js: + * inspector/front-end/AuditLauncherView.js: + (WebInspector.AuditLauncherView.prototype._createLauncherUI): + * inspector/front-end/AuditsPanel.js: + +2011-01-11 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: move delayed search implementation to SourceFrame. + https://bugs.webkit.org/show_bug.cgi?id=51753 + + * inspector/front-end/SourceFrame.js: + (WebInspector.SourceFrame.prototype._createViewerIfNeeded): + (WebInspector.SourceFrame.prototype.findSearchMatches): + (WebInspector.SourceFrame.prototype.cancelFindSearchMatches): + * inspector/front-end/SourceView.js: + (WebInspector.SourceView.prototype.hide): + (WebInspector.SourceView.prototype.searchCanceled): + (WebInspector.SourceView.prototype.performSearch.didFindSearchMatches): + (WebInspector.SourceView.prototype.performSearch): + +2011-01-11 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: innerFirstChild has a side effect which should be called explicitly. + + If a node is a frame's owner then innerFirstChild method + subscribes DOMAgent instance to the frame's doc's events. + I think this should be done explicitly when we meet with + the node for the first time. As I understand it happens + in buildArrayForContainerChildren method. + + https://bugs.webkit.org/show_bug.cgi?id=52204 + + * inspector/InspectorDOMAgent.cpp: + (WebCore::InspectorDOMAgent::startListeningFrameDoc): + (WebCore::InspectorDOMAgent::buildArrayForContainerChildren): + (WebCore::InspectorDOMAgent::innerFirstChild): + * inspector/InspectorDOMAgent.h: + +2011-01-11 Adam Roben <aroben@apple.com> + + Delete WKCACFLayer.{cpp,h} + + These have been unused since r75262 + + * platform/graphics/win/WKCACFLayer.cpp: Removed. + * platform/graphics/win/WKCACFLayer.h: Removed. + +2011-01-11 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: [regression] Cookies view does not allow columns resize. + https://bugs.webkit.org/show_bug.cgi?id=51877 + + * inspector/front-end/CookieItemsView.js: + (WebInspector.CookieItemsView.prototype._updateWithCookies): + +2011-01-11 Noel Gordon <noel.gordon@gmail.com> + + Reviewed by James Robinson. + + [chromium] canvas.toDataURL("image/jpeg") should composite onto black. + https://bugs.webkit.org/show_bug.cgi?id=51237 + + The Canvas specification requires that the canvas image is composited using + the Porter-Duff operator source-over onto a black background; the resultant + image should be JPEG encoded and returned as a dataURL. To composite image + A and background B, for any Porter-Duff operator, produce pixels I with + + I = c(A)F(A) + c(B)F(B) + + where, F(X) is the fraction [0.0-1.0] contributed to the composite by image + X, and c(X) are the premultiplied RGB color components of image X. Note by + definition, c(B) = 0 since the background is black, so I = c(A)F(A). Since + F(A) = 1 in Porter-Duff operator source-over, the composited pixels satisfy + I = c(A). Hence, to conform to the Canvas spec, pass the premultiplied RGB + color components of the canvas image to the JPEG encoder. + + Covered by canvas/philip/tests/toDataURL.jpeg.alpha.html + + * platform/image-encoders/skia/JPEGImageEncoder.cpp: + (WebCore::preMultipliedBGRAtoRGB): Use Porter-Duff source-over black. + +2011-01-11 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Chromium DevTools: get rid of APU-related code in WebKit/chromium. + https://bugs.webkit.org/show_bug.cgi?id=52152 + + * inspector/InspectorController.cpp: + (WebCore::InspectorController::restoreInspectorStateFromCookie): + (WebCore::InspectorController::setInjectedScriptSource): + * inspector/InspectorState.cpp: + (WebCore::InspectorState::InspectorState): + * inspector/InspectorState.h: + * inspector/front-end/inspector.js: + +2011-01-11 Pavel Feldman <pfeldman@chromium.org> + + Reviewed by Yury Semikhatsky. + + Web Inspector: [REGRESSION] Load timing is requested + for all resources (not only for the main one). + https://bugs.webkit.org/show_bug.cgi?id=51749 + + * inspector/InspectorController.cpp: + (WebCore::InspectorController::willSendRequest): + * loader/ResourceLoadNotifier.cpp: + (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): + +2011-01-11 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] GRefPtr should not be used with Gtk widgets + https://bugs.webkit.org/show_bug.cgi?id=51241 + + GRefPtr breaks the widget life-cycle, the main problem is + that GRefPtr calls g_object_unref() when it's destroyed, + which is undesirable for widgets. In gtk+ widgets are created with + a floating reference and when added to a container, the container + takes the ownership of the widget consuming the floating + reference. So you don't usually need to call g_object_ref/unref on + widgets (only for some operations like reparent a widget) and + toplevel widgets are destroyed with gtk_widget_destroy(). + + * platform/ContextMenuItem.h: + * platform/gtk/ContextMenuGtk.cpp: + (WebCore::ContextMenu::ContextMenu): + (WebCore::ContextMenu::~ContextMenu): + (WebCore::ContextMenu::setPlatformDescription): + * platform/gtk/ContextMenuItemGtk.cpp: + (WebCore::ContextMenuItem::ContextMenuItem): + (WebCore::ContextMenuItem::releasePlatformDescription): + (WebCore::ContextMenuItem::type): + (WebCore::ContextMenuItem::action): + (WebCore::ContextMenuItem::setAction): + (WebCore::ContextMenuItem::title): + (WebCore::ContextMenuItem::setTitle): + (WebCore::ContextMenuItem::platformSubMenu): + (WebCore::ContextMenuItem::setSubMenu): + (WebCore::ContextMenuItem::setChecked): + (WebCore::ContextMenuItem::setEnabled): + +2010-10-10 David Hyatt <hyatt@apple.com> + + Reviewed by Simon Fraser. + + https://bugs.webkit.org/show_bug.cgi?id=51119, transformed + elements not responding properly to :hover after r73385. + Just use the entire document area as the hit test area, + since there appears to be a rounding bug/issues with relying + on float math when mapping the hit test area into + transformed coordinates. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::hitTest): + +2011-01-10 Stephen White <senorblanco@chromium.org> + + Reviewed by James Robinson. + + Fix canvas->canvas draws on the GPU path. + https://bugs.webkit.org/show_bug.cgi?id=52141 + + Two problems: according to the canvas spec, both source and + destination rects can have negative width or height, but this shouldn't + cause the image to be flipped. So we need to normalize the rects (in + the software path, this is done by BitmapImage*::draw). Secondly, in + the FBO->FBO path, the image needs to be flipped vertically, since it + is drawn upside down. We were doing this by flipping the destination + rect, but this doesn't work if the source rect is not the entire image, + since we extract the wrong part of the image. Fixed by flipping the + source rect instead (and flipping it within the image buffer's height, + not the source rect's height). + + Covered by fast/canvas/drawImage-with-negative-source-destination.html. + + + * platform/graphics/skia/BitmapImageSingleFrameSkia.h: + Put normalizeRect() in global scope. + * platform/graphics/skia/ImageBufferSkia.cpp: + (WebCore::ImageBuffer::draw): + Fix as above: normalize both source and dest rects, and flip the + source rect instead of the dest rect. + * platform/graphics/skia/ImageSkia.cpp: + (WebCore::normalizeRect): + Put normalizeRect() in global scope. + +2011-01-10 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Csaba Osztrogonác. + + [Qt] Baseline qt_minimal configuration + https://bugs.webkit.org/show_bug.cgi?id=51313 + + No new tests as there is no new functionality. + + * platform/graphics/qt/GraphicsLayerQt.cpp: Fix the location of the + QT_NO_ANIMATION guard. + + * platform/qt/WheelEventQt.cpp: + (WebCore::PlatformWheelEvent::applyDelta): Fix the location of the + QT_NO_WHEELEVENT guard. + +2011-01-10 Joe Mason <jmason@rim.com> + + Reviewed by Alexey Proskuryakov. + + WebSockets: unbounded buffer growth when server sends bad data + https://bugs.webkit.org/show_bug.cgi?id=51253 + + Fail a websocket handshake after 1024 bytes without a newline, or if it + contains a null byte before the first newline. + + Tests: http/tests/websocket/tests/handshake-fail-by-maxlength.html + http/tests/websocket/tests/handshake-fail-by-prepended-null.html + + * websockets/WebSocketHandshake.cpp: + (WebCore::WebSocketHandshake::readStatusLine): + +2011-01-10 Adam Barth <abarth@webkit.org> + + Reviewed by Darin Adler. + + Introduce the notion of a "display-isolated" URL scheme for use by + Chrome-internal URLs + https://bugs.webkit.org/show_bug.cgi?id=50182 + + This patch adds the basic plumbing for display-isolated URL schemes. + Originally, this patch also had the functional change, but I've split + that off into a separate patch because the original patch caused a + performance regression. + + * page/SecurityOrigin.cpp: + (WebCore::SecurityOrigin::canDisplay): + * platform/SchemeRegistry.cpp: + (WebCore::displayIsolatedURLSchemes): + (WebCore::SchemeRegistry::registerURLSchemeAsLocal): + (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal): + (WebCore::SchemeRegistry::localSchemes): + (WebCore::SchemeRegistry::deprecatedShouldTreatURLAsLocal): + (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal): + (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated): + (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated): + * platform/SchemeRegistry.h: + +2011-01-10 Jer Noble <jer.noble@apple.com> + + Reviewed by Simon Fraser. + + https://bugs.webkit.org/show_bug.cgi?id=52095 + REGRESSION (r75277): 2 test cases (<1%) had incorrect layout + + Fixes tests: + fullscreen/full-screen-remove-ancestor.html + fullscreen/full-screen-remove.html + + Previously, the above tests were failing because DRT dumped the contents of their + <script> tags, though all the explicit tests were passing. This was caused by + the document's render tree being left in an inconsistent state when a full screen + element's ancestor was removed from the DOM. + + In nodeWillBeRemoved(), match the code in webkitDidExitFullScreen(). + Don't detach the documentElement, but rather simply call recalcStyle(Force). + + * dom/Document.cpp: + (WebCore::Document::nodeWillBeRemoved): + * rendering/RenderFullScreen.cpp: + (RenderFullScreen::setAnimating): #if ENABLED -> # if USE + * rendering/RenderFullScreen.h: + (WebCore::RenderFullScreen::RenderFullScreen): RenderFullScreen should be an anonymous renderer. + +2011-01-10 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Remove use of deprecated GTK+ methods before the 1.3.10 release + https://bugs.webkit.org/show_bug.cgi?id=52173 + + No new tests. This is only a build fix. + + * platform/gtk/GRefPtrGtk.cpp: Guard the GdkCursor specialization against GTK+ 3.x. + In GTK+ 3.x, GdkCursor is just a GObject. + * platform/gtk/GRefPtrGtk.h: Ditto. + +2011-01-10 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Moved Collector.* => Heap.*, since the file contains a class named "Heap". + + * ForwardingHeaders/runtime/Collector.h: Removed. + * ForwardingHeaders/runtime/Heap.h: Copied from WebCore/ForwardingHeaders/runtime/Collector.h. + * WebCore.vcproj/WebCore.vcproj: + * bindings/js/GCController.cpp: + * bindings/js/ScriptGCEvent.cpp: + +2011-01-10 Leonid Ebril <leonid.ebril@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + https://bugs.webkit.org/show_bug.cgi?id=51879 + + Set the PluginQuirkDontSetNullWindowHandleOnDestroy for Adobe Lite + plugin if Flash 10 or newer (for Symbian platform), setting a nulled + window handler on destroy crashes WebKit. + + * plugins/symbian/PluginPackageSymbian.cpp: + (WebCore::PluginPackage::fetchInfo): + (WebCore::PluginPackage::determineQuirks): + +2011-01-10 Martin Robinson <mrobinson@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Remove unecessary RenderThemeGtk and WidgetRenderingContext code + https://bugs.webkit.org/show_bug.cgi?id=52170 + + Remove unnecessary code from RenderThemeGtk3 and RenderThemeGtk now that the + GtkStyleContext port is complete. Also remove WidgetRenderingContextGtk3 and + move WidgetRenderingRenderingContextGtk2 to WidgetRenderingContext and make it + GTK+ 2.x only. Some methods have been moved to RenderThemeGtk2 since they are + GTK+ 2.x only now. + + No new tests. This should not change functionality. + + * GNUmakefile.am: Remove WidgetRenderingContextGtk3 and gtk3drawing.c + * platform/gtk/RenderThemeGtk.cpp: + (WebCore::RenderThemeGtk::RenderThemeGtk): + (WebCore::gtkIconState): Made this method static. It isn't used outside RenderThemeGtk. + (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration): Updated to refelct gtkIconState change. + (WebCore::RenderThemeGtk::paintSearchFieldCancelButton): Ditto. + (WebCore::RenderThemeGtk::paintMediaButton): Ditto + * platform/gtk/RenderThemeGtk.h: Move a few methods which are now GTK+ 2.x only. + * platform/gtk/RenderThemeGtk2.cpp: + (WebCore::RenderThemeGtk::platformInit): Added this platform initialization method + that is only used for GTK+ 2.x at the moment. + (WebCore::RenderThemeGtk::~RenderThemeGtk): Added. + (WebCore::getGtkStateType): Made this method static. + (WebCore::RenderThemeGtk::getIndicatorMetrics): Moved this here from RenderThemeGtk. + (WebCore::setToggleSize): Updated to reflect changes to getGtkStateType. + (WebCore::RenderThemeGtk::paintButton): Ditto. + (WebCore::RenderThemeGtk::paintSliderTrack): Ditto. + (WebCore::RenderThemeGtk::paintSliderThumb): Ditto. + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::gtkScrollbarStyle): Moved to the top of the file. + (WebCore::RenderThemeGtk::platformInit): Added. + (WebCore::RenderThemeGtk::~RenderThemeGtk): Added. + (WebCore::RenderThemeGtk::initMediaColors): Changed to use the GtkStyleContext API to + fetch these colors. This was the last dependency on the old API. + * platform/gtk/WidgetRenderingContext.cpp: Renamed from Source/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp. + * platform/gtk/WidgetRenderingContext.h: Made GTK+ 2.x only. + * platform/gtk/WidgetRenderingContextGtk3.cpp: Removed. + * platform/gtk/gtk3drawing.c: Removed. + * platform/gtk/gtkdrawing.h: Made GTK+ 2.x only. + +2011-01-10 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar + https://bugs.webkit.org/show_bug.cgi?id=52081 + + Test for the availability of cookie jar to return if cookies are enabled or not. + + * platform/qt/CookieJarQt.cpp: + (WebCore::cookiesEnabled): + +2011-01-10 W. James MacLean <wjmaclean@chromium.org> + + Reviewed by Kenneth Russell. + + [chromium] Enable reuse of RenderSurface for drawing. + https://bugs.webkit.org/show_bug.cgi?id=51928 + + Modifies RenderSurfaceChromium::prepareContentsTexture to avoid trying to 'reserve' a texture + that is already reserved, should an attempt be made to re-select a previously drawn render surface + in order to continue drawing to it. This use case appears when compositing into an offscreen texture. + + Covered by existing test (compositing/geometry/fixed-position.html) when offscreen compositing enabled. + + * platform/graphics/chromium/LayerTexture.h: + (WebCore::LayerTexture::isReserved): + * platform/graphics/chromium/RenderSurfaceChromium.cpp: + (WebCore::RenderSurfaceChromium::prepareContentsTexture): + * platform/graphics/chromium/TextureManager.cpp: + (WebCore::TextureManager::isProtected): + * platform/graphics/chromium/TextureManager.h: + +2011-01-10 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Port combo box painting to GtkStyleContext + https://bugs.webkit.org/show_bug.cgi?id=51828 + + Use GtkStyleContext API to paint combo boxes when building with + GTK+ 3.x. Method paintButton() has been factored out and the new + static method renderButton() is used by both paintButton() and + paintMenuList(). + + No new tests. This should not change functionality. + + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::adjustRepaintRect): + (WebCore::renderButton): + (WebCore::RenderThemeGtk::paintButton): + (WebCore::getComboBoxMetrics): + (WebCore::RenderThemeGtk::popupInternalPaddingLeft): + (WebCore::RenderThemeGtk::popupInternalPaddingRight): + (WebCore::RenderThemeGtk::popupInternalPaddingTop): + (WebCore::RenderThemeGtk::popupInternalPaddingBottom): + (WebCore::RenderThemeGtk::paintMenuList): + +2011-01-10 Evan Martin <evan@chromium.org> + + Reviewed by Tony Chang. + + [chromium] simplify complex glyph positioning code + https://bugs.webkit.org/show_bug.cgi?id=52159 + + Before, we had roughly same code duplicated for RTL and LTR. + Now, use the same code for both directions by being careful about + flipping signs where appropriate. + + * platform/graphics/chromium/ComplexTextControllerLinux.cpp: + (WebCore::ComplexTextController::shapeGlyphs): + (WebCore::ComplexTextController::setGlyphXPositions): + +2011-01-10 Alejandro G. Castro <alex@igalia.com> + + Reviewed by Xan Lopez. + + [GTK] Fix gtk2 compilation for master + https://bugs.webkit.org/show_bug.cgi?id=51885 + + * platform/gtk/GtkVersioning.h: Replaced the 2.24.0 check with + 2.23.0 to avoid using the old symbols in the 2.23 releases. Added + support for gdk_pixmap_get_size before the 2.23.4. + * platform/gtk/WidgetRenderingContextGtk2.cpp: + (WebCore::WidgetRenderingContext::WidgetRenderingContext): + Replaced the old gdk_drawable_get_size with gdk_pixmap_get_size. + +2011-01-10 Ryosuke Niwa <rniwa@webkit.org> + + Unreviewed; build fix for r75385. + + * rendering/mathml/RenderMathMLFraction.cpp: + (WebCore::RenderMathMLFraction::paint): + +2011-01-10 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r75341. + http://trac.webkit.org/changeset/75341 + https://bugs.webkit.org/show_bug.cgi?id=52157 + + Regressions on several pixel tests (Requested by jorlow on + #webkit). + + * platform/graphics/cg/GraphicsContextCG.cpp: + (WebCore::GraphicsContext::fillPath): + +2011-01-10 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Port check and radio button painting to GtkStyleContext + https://bugs.webkit.org/show_bug.cgi?id=51815 + + Use GtkStyleContext API to paint check and radio buttons when + building with GTK+ 3.x. + + No new tests. This should not change functionality. + + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::adjustRepaintRect): + (WebCore::setToggleSize): + (WebCore::paintToggle): + (WebCore::RenderThemeGtk::setCheckboxSize): + (WebCore::RenderThemeGtk::paintCheckbox): + (WebCore::RenderThemeGtk::setRadioSize): + (WebCore::RenderThemeGtk::paintRadio): + +2011-01-10 François Sausset <sausset@gmail.com> + + Reviewed by Kenneth Rohde Christiansen. + + MathML: vertical alignment & bar thickness adjustments of fractions. + https://bugs.webkit.org/show_bug.cgi?id=50018 + + The fraction bar thickness default value should follow the w3c MathML 3 recommendation: + http://www.w3.org/TR/MathML3/chapter3.html#presm.mfrac + The vertical alignment of the fraction bar should be more accurate, specially with operators (+,=,...). + + Test: mathml/presentation/fractions.xhtml + + * rendering/mathml/RenderMathMLFraction.cpp: + (WebCore::RenderMathMLFraction::RenderMathMLFraction): + (WebCore::RenderMathMLFraction::updateFromElement): + (WebCore::RenderMathMLFraction::layout): + (WebCore::RenderMathMLFraction::paint): + (WebCore::RenderMathMLFraction::baselinePosition): + * rendering/mathml/RenderMathMLFraction.h: + +2011-01-10 Antti Koivisto <antti@apple.com> + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=52044 + REGRESSION(r74807): No-store is ignored within a document + + Don't use cached resources with Cache-control: no-store (unless cache policy is CachePolicyHistoryBuffer). + This matches a behavior that got lost in r74807. + + Test: http/tests/misc/script-no-store.html + (by Alexey Proskuryakov) + + * loader/cache/CachedResourceLoader.cpp: + (WebCore::CachedResourceLoader::determineRevalidationPolicy): + +2011-01-10 Patrick Gansterer <paroga@webkit.org> + + Reviewed by Laszlo Gombos. + + [WIN] Add ProxyServerWin.cpp + https://bugs.webkit.org/show_bug.cgi?id=52031 + + Add stub implementation to fix ENABLE_NETSCAPE_PLUGIN_API on WinCE. + + * CMakeLists.txt: + * CMakeListsWinCE.txt: + * platform/network/win/ProxyServerWin.cpp: Added. + (WebCore::proxyServersForURL): + +2011-01-10 Alejandro G. Castro <alex@igalia.com> + + Reviewed by Martin Robinson. + + [cairo] Rendering a lot of arcs on top of each other causes time + outs in some tests + https://bugs.webkit.org/show_bug.cgi?id=50869 + + We avoid the situation where we have to render the same arc + multiple times over itself. Now it renders just one oval and + moves to the end angle. + + * platform/graphics/cairo/PathCairo.cpp: + (WebCore::Path::addArc): + +2011-01-10 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Port text input control painting to GtkStyleContext + https://bugs.webkit.org/show_bug.cgi?id=51870 + + Use GtkStyleContext API to paint text input controls when building + with GTK+ 3.x. + + No new tests. This should not change functionality. + + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::adjustRepaintRect): + (WebCore::RenderThemeGtk::paintTextField): + +2011-01-09 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Forward declare some headers where possible + https://bugs.webkit.org/show_bug.cgi?id=52133 + + No new tests because no new functionality. + + * css/CSSValue.h: + * dom/BeforeLoadEvent.h: + * dom/Event.cpp: + * dom/Event.h: + * dom/StyledElement.cpp: + * dom/StyledElement.h: + * loader/DocumentLoader.h: + * loader/FrameLoader.h: + * page/Frame.h: + * platform/graphics/GraphicsContext.cpp: + * platform/graphics/GraphicsContext.h: + * platform/graphics/filters/FEBlend.cpp: + * platform/graphics/filters/FEColorMatrix.cpp: + * platform/graphics/filters/FEComponentTransfer.cpp: + * platform/graphics/filters/FEComposite.cpp: + * platform/graphics/filters/FEConvolveMatrix.cpp: + * platform/graphics/filters/FEDiffuseLighting.cpp: + * platform/graphics/filters/FEDisplacementMap.cpp: + * platform/graphics/filters/FEFlood.cpp: + * platform/graphics/filters/FEGaussianBlur.cpp: + * platform/graphics/filters/FEMerge.cpp: + * platform/graphics/filters/FEMorphology.cpp: + * platform/graphics/filters/FEOffset.cpp: + * platform/graphics/filters/FESpecularLighting.cpp: + * platform/graphics/filters/FETile.cpp: + * platform/graphics/filters/FETurbulence.cpp: + * platform/graphics/filters/FilterEffect.cpp: + * platform/graphics/filters/FilterEffect.h: + * platform/graphics/filters/SourceAlpha.cpp: + * platform/graphics/filters/SourceGraphic.cpp: + * svg/SVGElement.cpp: + * svg/SVGElement.h: + * svg/SVGFEBlendElement.cpp: + * svg/SVGFEColorMatrixElement.cpp: + * svg/SVGFEComponentTransferElement.cpp: + * svg/SVGFECompositeElement.cpp: + * svg/SVGFEConvolveMatrixElement.cpp: + * svg/SVGFEConvolveMatrixElement.h: + * svg/SVGFEDiffuseLightingElement.cpp: + * svg/SVGFEDisplacementMapElement.cpp: + * svg/SVGFEGaussianBlurElement.cpp: + * svg/SVGFEImageElement.h: + * svg/SVGFEMergeElement.cpp: + * svg/SVGFEMorphologyElement.cpp: + * svg/SVGFEOffsetElement.cpp: + * svg/SVGFESpecularLightingElement.cpp: + * svg/SVGFETileElement.cpp: + * svg/SVGFETurbulenceElement.h: + * svg/SVGFilterPrimitiveStandardAttributes.cpp: + * svg/SVGFilterPrimitiveStandardAttributes.h: + * svg/SVGTextContentElement.cpp: + * svg/graphics/filters/SVGFEImage.cpp: + * svg/graphics/filters/SVGFEImage.h: + +2011-01-10 Adam Roben <aroben@apple.com> + + Windows build fix after r75313 + + * WebCore.vcproj/build-generated-files.sh: Updated for the change in + this script's path. + +2011-01-10 Pavel Podivilov <podivilov@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: make properties on Array's prototype non-enumerable. + https://bugs.webkit.org/show_bug.cgi?id=51776 + + * inspector/front-end/utilities.js: + (): + +2011-01-10 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Simon Fraser. + + Specificity of negated selectors apparently miscalculated + https://bugs.webkit.org/show_bug.cgi?id=41206 + + Give negated selectors the specificity of the selector they are negating. + This is the same as the behavior of other browsers. + + Test: fast/css/pseudo-not.html + + * css/CSSSelector.cpp: + (WebCore::CSSSelector::specificityForOneSelector): + +2011-01-10 Adam Roben <aroben@apple.com> + + Windows build fix after r75353 + + * WebCore.vcproj/WebCoreCommon.vsprops: Added rendering/mathml to the + include path. + +2011-01-10 John Knottenbelt <jknotten@chromium.org> + + Reviewed by Jeremy Orlow. + + [Chromium] Remove non-client-based Geolocation code + https://bugs.webkit.org/show_bug.cgi?id=50921 + + Code clean up, covered by existing tests. + + * WebCore.gyp/WebCore.gyp: + * WebCore.gypi: + * platform/chromium/ChromiumBridge.h: + * platform/chromium/GeolocationServiceChromium.cpp: Removed. + * platform/chromium/GeolocationServiceChromium.h: Removed. + +2011-01-10 Ilya Tikhonovsky <loislo@chromium.org> + + Reviewed by Pavel Feldman. + + Web Inspector: protocol related change. Rename stepIntoStatement, stepOutOfFunction, stepOverStatement. + stepIntoStatement => stepInto + stepOutOfFunction => stepOut + stepOverStatement => stepOver + + https://bugs.webkit.org/show_bug.cgi?id=52142 + + * inspector/Inspector.idl: + * inspector/InspectorDebuggerAgent.cpp: + (WebCore::InspectorDebuggerAgent::stepOver): + (WebCore::InspectorDebuggerAgent::stepInto): + (WebCore::InspectorDebuggerAgent::stepOut): + * inspector/InspectorDebuggerAgent.h: + * inspector/front-end/ScriptsPanel.js: + (WebInspector.ScriptsPanel.prototype._stepOverClicked): + (WebInspector.ScriptsPanel.prototype._stepIntoClicked): + (WebInspector.ScriptsPanel.prototype._stepOutClicked): + +2011-01-10 Carlos Garcia Campos <cgarcia@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Port progressbar painting to GtkStyleContext + https://bugs.webkit.org/show_bug.cgi?id=52054 + + Use GtkStyleContext API to paint progressbars when building with + GTK+ 3.x. Also add support for indeterminate progressbars. + + No new tests. This should not change functionality. + + * platform/gtk/RenderThemeGtk.cpp: + * platform/gtk/RenderThemeGtk2.cpp: + (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar): + (WebCore::RenderThemeGtk::animationDurationForProgressBar): + * platform/gtk/RenderThemeGtk3.cpp: + (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar): + (WebCore::RenderThemeGtk::animationDurationForProgressBar): + (WebCore::RenderThemeGtk::paintProgressBar): + +2011-01-10 Andreas Kling <kling@webkit.org> + + Reviewed by Darin Adler. + + Remove unused class "Pen" in WebCore/platform/graphics + https://bugs.webkit.org/show_bug.cgi?id=49955 + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * platform/graphics/Pen.cpp: Removed. + * platform/graphics/Pen.h: Removed. + * platform/graphics/haiku/GraphicsContextHaiku.cpp: + * platform/graphics/wx/GraphicsContextWx.cpp: + * platform/graphics/wx/PenWx.cpp: Removed. + +2011-01-10 Xan Lopez <xlopez@igalia.com> + + Reviewed by Martin Robinson. + + [GTK] Create intermediate libWebCore library + https://bugs.webkit.org/show_bug.cgi?id=52116 + + Create intermediate libWebCore.la to avoid overflowing the linker + in the final link stage. + + * GNUmakefile.am: define the new library. + +2011-01-09 Sheriff Bot <webkit.review.bot@gmail.com> + + Unreviewed, rolling out r75337. + http://trac.webkit.org/changeset/75337 + https://bugs.webkit.org/show_bug.cgi?id=52137 + + It made fast/dom/navigator-detached-no-crash.html crash + (Requested by Ossy on #webkit). + + * platform/qt/CookieJarQt.cpp: + (WebCore::cookiesEnabled): + +2011-01-09 Mark Rowe <mrowe@apple.com> + + Fix the build. + + * WebCore.xcodeproj/project.pbxproj: Copy SVGResourcesCache.h in to PrivateHeaders + once more. + +2011-01-09 Dan Bernstein <mitz@apple.com> + + Reviewed by Sam Weinig. + + <rdar://problem/8765555> WebKit2: Search field focus ring is missing + + Provide a focus ring visible rect to AppKit. + + * platform/mac/ThemeMac.mm: + (-[WebCoreFlippedView _focusRingVisibleRect]): + (-[WebCoreFlippedView _focusRingClipAncestor]): + +2011-01-09 Dirk Schulze <krit@webkit.org> + + Reviewed by Rob Buis. + + Move MathML renderer to rendering/mathml + https://bugs.webkit.org/show_bug.cgi?id=52131 + + Move all renderer of MathML to WebCore/rendering/mathml + + No change of functionality, no new tests added. + + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vcproj/WebCore.vcproj: + * WebCore.xcodeproj/project.pbxproj: + * mathml/RenderMathMLBlock.cpp: Removed. + * mathml/RenderMathMLBlock.h: Removed. + * mathml/RenderMathMLFenced.cpp: Removed. + * mathml/RenderMathMLFenced.h: Removed. + * mathml/RenderMathMLFraction.cpp: Removed. + * mathml/RenderMathMLFraction.h: Removed. + * mathml/RenderMathMLMath.cpp: Removed. + * mathml/RenderMathMLMath.h: Removed. + * mathml/RenderMathMLOperator.cpp: Removed. + * mathml/RenderMathMLOperator.h: Removed. + * mathml/RenderMathMLRoot.cpp: Removed. + * mathml/RenderMathMLRoot.h: Removed. + * mathml/RenderMathMLRow.cpp: Removed. + * mathml/RenderMathMLRow.h: Removed. + * mathml/RenderMathMLSquareRoot.cpp: Removed. + * mathml/RenderMathMLSquareRoot.h: Removed. + * mathml/RenderMathMLSubSup.cpp: Removed. + * mathml/RenderMathMLSubSup.h: Removed. + * mathml/RenderMathMLUnderOver.cpp: Removed. + * mathml/RenderMathMLUnderOver.h: Removed. + * rendering/mathml: Added. + * rendering/mathml/RenderMathMLBlock.cpp: Copied from Source/WebCore/mathml/RenderMathMLBlock.cpp. + * rendering/mathml/RenderMathMLBlock.h: Copied from Source/WebCore/mathml/RenderMathMLBlock.h. + * rendering/mathml/RenderMathMLFenced.cpp: Copied from Source/WebCore/mathml/RenderMathMLFenced.cpp. + * rendering/mathml/RenderMathMLFenced.h: Copied from Source/WebCore/mathml/RenderMathMLFenced.h. + * rendering/mathml/RenderMathMLFraction.cpp: Copied from Source/WebCore/mathml/RenderMathMLFraction.cpp. + * rendering/mathml/RenderMathMLFraction.h: Copied from Source/WebCore/mathml/RenderMathMLFraction.h. + * rendering/mathml/RenderMathMLMath.cpp: Copied from Source/WebCore/mathml/RenderMathMLMath.cpp. + * rendering/mathml/RenderMathMLMath.h: Copied from Source/WebCore/mathml/RenderMathMLMath.h. + * rendering/mathml/RenderMathMLOperator.cpp: Copied from Source/WebCore/mathml/RenderMathMLOperator.cpp. + * rendering/mathml/RenderMathMLOperator.h: Copied from Source/WebCore/mathml/RenderMathMLOperator.h. + * rendering/mathml/RenderMathMLRoot.cpp: Copied from Source/WebCore/mathml/RenderMathMLRoot.cpp. + * rendering/mathml/RenderMathMLRoot.h: Copied from Source/WebCore/mathml/RenderMathMLRoot.h. + * rendering/mathml/RenderMathMLRow.cpp: Copied from Source/WebCore/mathml/RenderMathMLRow.cpp. + * rendering/mathml/RenderMathMLRow.h: Copied from Source/WebCore/mathml/RenderMathMLRow.h. + * rendering/mathml/RenderMathMLSquareRoot.cpp: Copied from Source/WebCore/mathml/RenderMathMLSquareRoot.cpp. + * rendering/mathml/RenderMathMLSquareRoot.h: Copied from Source/WebCore/mathml/RenderMathMLSquareRoot.h. + * rendering/mathml/RenderMathMLSubSup.cpp: Copied from Source/WebCore/mathml/RenderMathMLSubSup.cpp. + * rendering/mathml/RenderMathMLSubSup.h: Copied from Source/WebCore/mathml/RenderMathMLSubSup.h. + * rendering/mathml/RenderMathMLUnderOver.cpp: Copied from Source/WebCore/mathml/RenderMathMLUnderOver.cpp. + * rendering/mathml/RenderMathMLUnderOver.h: Copied from Source/WebCore/mathml/RenderMathMLUnderOver.h. + +2011-01-08 Simon Fraser <simon.fraser@apple.com> + + Reviewed by Alexey Proskuryakov. + + HTMLStyleElement.disabled doesn't work (affects jQuery) + https://bugs.webkit.org/show_bug.cgi?id=25287 + + Fix the disabled property of a HTMLStyleElement to reflect, + and set the disabled state of its style sheet, as required + by DOM1 etc. + + Based on initial patch by Tarun Nainani. + + Test: fast/html/disable-style-element.html + + * dom/StyleElement.h: + (WebCore::StyleElement::sheet): Make const. + + * html/HTMLStyleElement.h: + * html/HTMLStyleElement.idl: + * html/HTMLStyleElement.cpp: + (WebCore::HTMLStyleElement::disabled): + (WebCore::HTMLStyleElement::setDisabled): Getter and setter for disabled + call through to the sheet (if any). + +2011-01-09 Dirk Schulze <krit@webkit.org> + + Reviewed by Nikolas Zimmermann. + + Rename RenderForeignObject to RenderSVGForeignObject + https://bugs.webkit.org/show_bug.cgi?id=52129 + + Rename RenderForeignObject to RenderSVGForeignObject to match the naming schema in render/svg. + + No change of functionality, no new tests. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.xcodeproj/project.pbxproj: + * rendering/RenderingAllInOne.cpp: + * rendering/svg/RenderForeignObject.cpp: Removed. + * rendering/svg/RenderForeignObject.h: Removed. + * rendering/svg/RenderSVGAllInOne.cpp: + * rendering/svg/RenderSVGBlock.cpp: + (WebCore::RenderSVGBlock::updateBoxModelInfoFromStyle): + * rendering/svg/RenderSVGForeignObject.cpp: Copied from Source/WebCore/rendering/svg/RenderForeignObject.cpp. + (WebCore::RenderSVGForeignObject::RenderSVGForeignObject): + (WebCore::RenderSVGForeignObject::~RenderSVGForeignObject): + (WebCore::RenderSVGForeignObject::paint): + (WebCore::RenderSVGForeignObject::clippedOverflowRectForRepaint): + (WebCore::RenderSVGForeignObject::computeRectForRepaint): + (WebCore::RenderSVGForeignObject::localToParentTransform): + (WebCore::RenderSVGForeignObject::computeLogicalWidth): + (WebCore::RenderSVGForeignObject::computeLogicalHeight): + (WebCore::RenderSVGForeignObject::layout): + (WebCore::RenderSVGForeignObject::nodeAtFloatPoint): + (WebCore::RenderSVGForeignObject::nodeAtPoint): + (WebCore::RenderSVGForeignObject::mapLocalToContainer): + * rendering/svg/RenderSVGForeignObject.h: Copied from Source/WebCore/rendering/svg/RenderForeignObject.h. + (WebCore::RenderSVGForeignObject::renderName): + * svg/SVGForeignObjectElement.cpp: + (WebCore::SVGForeignObjectElement::createRenderer): + +2011-01-09 Dirk Schulze <krit@webkit.org> + + Reviewed by Nikolas Zimmermann. + + Move all SVG renderer to WebCore/rendering/svg + https://bugs.webkit.org/show_bug.cgi?id=52087 + + No change of functionality. Just moved all SVG renderer to WebCore/rendering/svg. + + * Android.mk: + * CMakeLists.txt: + * GNUmakefile.am: + * WebCore.gypi: + * WebCore.pro: + * WebCore.vjproj/project.vjproj: + * WebCore.xcodeproj/project.pbxproj: + * rendering/RenderForeignObject.cpp: Removed. + * rendering/RenderForeignObject.h: Removed. + * rendering/RenderSVGAllInOne.cpp: Removed. + * rendering/RenderSVGBlock.cpp: Removed. + * rendering/RenderSVGBlock.h: Removed. + * rendering/RenderSVGContainer.cpp: Removed. + * rendering/RenderSVGContainer.h: Removed. + * rendering/RenderSVGGradientStop.cpp: Removed. + * rendering/RenderSVGGradientStop.h: Removed. + * rendering/RenderSVGHiddenContainer.cpp: Removed. + * rendering/RenderSVGHiddenContainer.h: Removed. + * rendering/RenderSVGImage.cpp: Removed. + * rendering/RenderSVGImage.h: Removed. + * rendering/RenderSVGModelObject.cpp: Removed. + * rendering/RenderSVGModelObject.h: Removed. + * rendering/RenderSVGResource.cpp: Removed. + * rendering/RenderSVGResource.h: Removed. + * rendering/RenderSVGResourceClipper.cpp: Removed. + * rendering/RenderSVGResourceClipper.h: Removed. + * rendering/RenderSVGResourceContainer.cpp: Removed. + * rendering/RenderSVGResourceContainer.h: Removed. + * rendering/RenderSVGResourceFilter.cpp: Removed. + * rendering/RenderSVGResourceFilter.h: Removed. + * rendering/RenderSVGResourceFilterPrimitive.cpp: Removed. + * rendering/RenderSVGResourceFilterPrimitive.h: Removed. + * rendering/RenderSVGResourceGradient.cpp: Removed. + * rendering/RenderSVGResourceGradient.h: Removed. + * rendering/RenderSVGResourceLinearGradient.cpp: Removed. + * rendering/RenderSVGResourceLinearGradient.h: Removed. + * rendering/RenderSVGResourceMarker.cpp: Removed. + * rendering/RenderSVGResourceMarker.h: Removed. + * rendering/RenderSVGResourceMasker.cpp: Removed. + * rendering/RenderSVGResourceMasker.h: Removed. + * rendering/RenderSVGResourcePattern.cpp: Removed. + * rendering/RenderSVGResourcePattern.h: Removed. + * rendering/RenderSVGResourceRadialGradient.cpp: Removed. + * rendering/RenderSVGResourceRadialGradient.h: Removed. + * rendering/RenderSVGResourceSolidColor.cpp: Removed. + * rendering/RenderSVGResourceSolidColor.h: Removed. + * rendering/RenderSVGRoot.cpp: Removed. + * rendering/RenderSVGRoot.h: Removed. + * rendering/RenderSVGShadowTreeRootContainer.cpp: Removed. + * rendering/RenderSVGShadowTreeRootContainer.h: Removed. + * rendering/RenderSVGTransformableContainer.cpp: Removed. + * rendering/RenderSVGTransformableContainer.h: Removed. + * rendering/RenderSVGViewportContainer.cpp: Removed. + * rendering/RenderSVGViewportContainer.h: Removed. + * rendering/SVGImageBufferTools.cpp: Removed. + * rendering/SVGImageBufferTools.h: Removed. + * rendering/SVGMarkerData.h: Removed. + * rendering/SVGMarkerLayoutInfo.cpp: Removed. + * rendering/SVGMarkerLayoutInfo.h: Removed. + * rendering/SVGRenderSupport.cpp: Removed. + * rendering/SVGRenderSupport.h: Removed. + * rendering/SVGRenderTreeAsText.cpp: Removed. + * rendering/SVGRenderTreeAsText.h: Removed. + * rendering/SVGResources.cpp: Removed. + * rendering/SVGResources.h: Removed. + * rendering/SVGResourcesCache.cpp: Removed. + * rendering/SVGResourcesCache.h: Removed. + * rendering/SVGResourcesCycleSolver.cpp: Removed. + * rendering/SVGResourcesCycleSolver.h: Removed. + * rendering/SVGShadowTreeElements.cpp: Removed. + * rendering/SVGShadowTreeElements.h: Removed. + * rendering/svg/RenderForeignObject.cpp: Copied from Source/WebCore/rendering/RenderForeignObject.cpp. + * rendering/svg/RenderForeignObject.h: Copied from Source/WebCore/rendering/RenderForeignObject.h. + * rendering/svg/RenderSVGAllInOne.cpp: Copied from Source/WebCore/rendering/RenderSVGAllInOne.cpp. + * rendering/svg/RenderSVGBlock.cpp: Copied from Source/WebCore/rendering/RenderSVGBlock.cpp. + * rendering/svg/RenderSVGBlock.h: Copied from Source/WebCore/rendering/RenderSVGBlock.h. + * rendering/svg/RenderSVGContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGContainer.cpp. + * rendering/svg/RenderSVGContainer.h: Copied from Source/WebCore/rendering/RenderSVGContainer.h. + * rendering/svg/RenderSVGGradientStop.cpp: Copied from Source/WebCore/rendering/RenderSVGGradientStop.cpp. + * rendering/svg/RenderSVGGradientStop.h: Copied from Source/WebCore/rendering/RenderSVGGradientStop.h. + * rendering/svg/RenderSVGHiddenContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGHiddenContainer.cpp. + * rendering/svg/RenderSVGHiddenContainer.h: Copied from Source/WebCore/rendering/RenderSVGHiddenContainer.h. + * rendering/svg/RenderSVGImage.cpp: Copied from Source/WebCore/rendering/RenderSVGImage.cpp. + * rendering/svg/RenderSVGImage.h: Copied from Source/WebCore/rendering/RenderSVGImage.h. + * rendering/svg/RenderSVGModelObject.cpp: Copied from Source/WebCore/rendering/RenderSVGModelObject.cpp. + * rendering/svg/RenderSVGModelObject.h: Copied from Source/WebCore/rendering/RenderSVGModelObject.h. + * rendering/svg/RenderSVGResource.cpp: Copied from Source/WebCore/rendering/RenderSVGResource.cpp. + * rendering/svg/RenderSVGResource.h: Copied from Source/WebCore/rendering/RenderSVGResource.h. + * rendering/svg/RenderSVGResourceClipper.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceClipper.cpp. + * rendering/svg/RenderSVGResourceClipper.h: Copied from Source/WebCore/rendering/RenderSVGResourceClipper.h. + * rendering/svg/RenderSVGResourceContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceContainer.cpp. + * rendering/svg/RenderSVGResourceContainer.h: Copied from Source/WebCore/rendering/RenderSVGResourceContainer.h. + * rendering/svg/RenderSVGResourceFilter.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceFilter.cpp. + * rendering/svg/RenderSVGResourceFilter.h: Copied from Source/WebCore/rendering/RenderSVGResourceFilter.h. + * rendering/svg/RenderSVGResourceFilterPrimitive.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp. + * rendering/svg/RenderSVGResourceFilterPrimitive.h: Copied from Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.h. + * rendering/svg/RenderSVGResourceGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceGradient.cpp. + * rendering/svg/RenderSVGResourceGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceGradient.h. + * rendering/svg/RenderSVGResourceLinearGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceLinearGradient.cpp. + * rendering/svg/RenderSVGResourceLinearGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceLinearGradient.h. + * rendering/svg/RenderSVGResourceMarker.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceMarker.cpp. + * rendering/svg/RenderSVGResourceMarker.h: Copied from Source/WebCore/rendering/RenderSVGResourceMarker.h. + * rendering/svg/RenderSVGResourceMasker.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceMasker.cpp. + * rendering/svg/RenderSVGResourceMasker.h: Copied from Source/WebCore/rendering/RenderSVGResourceMasker.h. + * rendering/svg/RenderSVGResourcePattern.cpp: Copied from Source/WebCore/rendering/RenderSVGResourcePattern.cpp. + * rendering/svg/RenderSVGResourcePattern.h: Copied from Source/WebCore/rendering/RenderSVGResourcePattern.h. + * rendering/svg/RenderSVGResourceRadialGradient.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceRadialGradient.cpp. + * rendering/svg/RenderSVGResourceRadialGradient.h: Copied from Source/WebCore/rendering/RenderSVGResourceRadialGradient.h. + * rendering/svg/RenderSVGResourceSolidColor.cpp: Copied from Source/WebCore/rendering/RenderSVGResourceSolidColor.cpp. + * rendering/svg/RenderSVGResourceSolidColor.h: Copied from Source/WebCore/rendering/RenderSVGResourceSolidColor.h. + * rendering/svg/RenderSVGRoot.cpp: Copied from Source/WebCore/rendering/RenderSVGRoot.cpp. + * rendering/svg/RenderSVGRoot.h: Copied from Source/WebCore/rendering/RenderSVGRoot.h. + * rendering/svg/RenderSVGShadowTreeRootContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.cpp. + * rendering/svg/RenderSVGShadowTreeRootContainer.h: Copied from Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.h. + * rendering/svg/RenderSVGTransformableContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGTransformableContainer.cpp. + * rendering/svg/RenderSVGTransformableContainer.h: Copied from Source/WebCore/rendering/RenderSVGTransformableContainer.h. + * rendering/svg/RenderSVGViewportContainer.cpp: Copied from Source/WebCore/rendering/RenderSVGViewportContainer.cpp. + * rendering/svg/RenderSVGViewportContainer.h: Copied from Source/WebCore/rendering/RenderSVGViewportContainer.h. + * rendering/svg/SVGImageBufferTools.cpp: Copied from Source/WebCore/rendering/SVGImageBufferTools.cpp. + * rendering/svg/SVGImageBufferTools.h: Copied from Source/WebCore/rendering/SVGImageBufferTools.h. + * rendering/svg/SVGMarkerData.h: Copied from Source/WebCore/rendering/SVGMarkerData.h. + * rendering/svg/SVGMarkerLayoutInfo.cpp: Copied from Source/WebCore/rendering/SVGMarkerLayoutInfo.cpp. + * rendering/svg/SVGMarkerLayoutInfo.h: Copied from Source/WebCore/rendering/SVGMarkerLayoutInfo.h. + * rendering/svg/SVGRenderSupport.cpp: Copied from Source/WebCore/rendering/SVGRenderSupport.cpp. + * rendering/svg/SVGRenderSupport.h: Copied from Source/WebCore/rendering/SVGRenderSupport.h. + * rendering/svg/SVGRenderTreeAsText.cpp: Copied from Source/WebCore/rendering/SVGRenderTreeAsText.cpp. + * rendering/svg/SVGRenderTreeAsText.h: Copied from Source/WebCore/rendering/SVGRenderTreeAsText.h. + * rendering/svg/SVGResources.cpp: Copied from Source/WebCore/rendering/SVGResources.cpp. + * rendering/svg/SVGResources.h: Copied from Source/WebCore/rendering/SVGResources.h. + * rendering/svg/SVGResourcesCache.cpp: Copied from Source/WebCore/rendering/SVGResourcesCache.cpp. + * rendering/svg/SVGResourcesCache.h: Copied from Source/WebCore/rendering/SVGResourcesCache.h. + * rendering/svg/SVGResourcesCycleSolver.cpp: Copied from Source/WebCore/rendering/SVGResourcesCycleSolver.cpp. + * rendering/svg/SVGResourcesCycleSolver.h: Copied from Source/WebCore/rendering/SVGResourcesCycleSolver.h. + * rendering/svg/SVGShadowTreeElements.cpp: Copied from Source/WebCore/rendering/SVGShadowTreeElements.cpp. + * rendering/svg/SVGShadowTreeElements.h: Copied from Source/WebCore/rendering/SVGShadowTreeElements.h. + +2011-01-09 Xianzhu Wang <phnixwxz@gmail.com> + + Reviewed by Darin Fisher. + + https://bugs.webkit.org/show_bug.cgi?id=41441 + createWindow method should only do window-creating without URL navigation. + Let client APIs know which URL a new window will start with + + * loader/FrameLoader.cpp: + (WebCore::createWindow): + * page/ContextMenuController.cpp: + (WebCore::openNewWindow): + * page/DOMWindow.cpp: + (WebCore::DOMWindow::createWindow): + +2011-01-09 Dirk Schulze <krit@webkit.org> + + Unreviewed sort of Xcode project file. + + * WebCore.xcodeproj/project.pbxproj: + +2011-01-09 Amruth Raj <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com> + + Reviewed by Martin Robinson. + + Changes to add Process Launcher and Thread Launcher implementation to the WebKit2 GTK port. + https://bugs.webkit.org/show_bug.cgi?id=48511 + + * platform/FileSystem.h: + * platform/gtk/FileSystemGtk.cpp: Implement function to get a binary's path + (WebCore::applicationDirectoryPath): + +2011-01-08 Martin Robinson <mrobinson@igalia.com> + + GTK+ Build fix. Add missing headers to the source list, fixing make dist. + + No new tests. This is only a build change. + + * GNUmakefile.am: Add missing headers to the source list. + +2011-01-08 Amruth Raj <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com> + + Reviewed by Martin Robinson. + + [GTK] WebKit2 GNUmakefile is out of date from trunk + https://bugs.webkit.org/show_bug.cgi?id=51883 + + Added stubs for WebKit2 compilation. + + * platform/gtk/ContextMenuGtk.cpp: + (WebCore::contextMenuItemVector): + * platform/gtk/ContextMenuItemGtk.cpp: + (WebCore::ContextMenuItem::ContextMenuItem): + (WebCore::ContextMenuItem::checked): + (WebCore::ContextMenuItem::enabled): + * platform/network/soup/AuthenticationChallenge.h: + (WebCore::AuthenticationChallenge::authenticationClient): + +2011-01-08 Helder Correia <helder@sencha.com> + + Reviewed by Simon Fraser. + + Shadow is not drawn when filling a path with a gradient + https://bugs.webkit.org/show_bug.cgi?id=51982 + + This happens in CG and is related to bug 51869, this time to be fixed + in GraphicsContext::fillPath(const Path& path). We need to draw the + gradient clipped to the path on a CGLayer first, and then draw the + layer on the GraphicsContext. + + Test: fast/canvas/canvas-fillPath-gradient-shadow.html + + * platform/graphics/cg/GraphicsContextCG.cpp: + (WebCore::GraphicsContext::fillPath): + +2011-01-08 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] PasteboardQt.cpp has coding-style errors + https://bugs.webkit.org/show_bug.cgi?id=39771 + + Update the code to follow the coding style. + + * platform/qt/PasteboardQt.cpp: + (WebCore::Pasteboard::writeSelection): + (WebCore::Pasteboard::plainText): + (WebCore::Pasteboard::writePlainText): + (WebCore::Pasteboard::writeURL): + +2011-01-08 Tony Gentilcore <tonyg@chromium.org> + + Reviewed by Eric Seidel. + + HTML5 Conformance Test failure: approved/xhtml5/html_style_in_comment.xhtml + https://bugs.webkit.org/show_bug.cgi?id=48593 + + XHTML <style> blocks, unlike HTML <style> blocks, should respect HTML + comments. + + Test: fast/parser/xhtml-html-comment-in-style-block.xhtml + + * dom/StyleElement.cpp: + (WebCore::isValidStyleChild): Remove the COMMENT_NODE check as the HTML parser doesn't add COMMENT_NODEs as children of style blocks. + (WebCore::StyleElement::process): Factored out a condition that must remain in sync. + +2011-01-08 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar + https://bugs.webkit.org/show_bug.cgi?id=52081 + + Test for the availability of cookie jar to return if cookies are enabled or not. The network access + manager always exist, not the cookie jar. + + * platform/qt/CookieJarQt.cpp: + (WebCore::cookiesEnabled): + +2011-01-08 Charlie Reis <creis@chromium.org> + + Reviewed by Mihai Parparita. + + Canceled frame loads can corrupt back forward list + https://bugs.webkit.org/show_bug.cgi?id=50254 + + Avoids changing m_currentItem until the navigation commits. + Also resets top-level history items if a subframe navigation is canceled. + + * WebCore/loader/FrameLoader.cpp: + (WebCore::FrameLoader::checkLoadCompleteForThisFrame): + * WebCore/loader/HistoryController.cpp: + * WebCore/loader/HistoryController.h: + +2011-01-08 Chang Shu <chang.shu@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Support createTouchList with Touch list for test automation. + Implemented JS/V8 custom functions for createTouchList. + https://bugs.webkit.org/show_bug.cgi?id=51196 + + * bindings/js/JSDocumentCustom.cpp: + (WebCore::JSDocument::createTouchList): + * bindings/v8/custom/V8DocumentCustom.cpp: + (WebCore::V8Document::createTouchListCallback): + * dom/Document.idl: + * dom/TouchEvent.cpp: + (WebCore::TouchEvent::initTouchEvent): + +2011-01-08 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] CookieJarQt.cpp has coding-style errors + https://bugs.webkit.org/show_bug.cgi?id=39778 + + Improve the coding style of CookieJarQt.cpp. + + * platform/qt/CookieJarQt.cpp: + (WebCore::networkAccessManager): + (WebCore::cookiesEnabled): + +2011-01-08 Jeff Miller <jeffm@apple.com> + + Rubber-stamped by Dan Bernstein. + + Fix QTMovieWin.vcproj to account for moving WebCore to Source\WebCore + https://bugs.webkit.org/show_bug.cgi?id=52114 + + * WebCore.vcproj/QTMovieWin.vcproj: + Add an extra .. to some InheritedPropertySheets entries since WebCore is now one level deeper. + +2011-01-08 Dirk Schulze <krit@webkit.org> + + Reviewed by Mihai Parparita. + + SVG rendering clean up according to the webkit style rules 2 + https://bugs.webkit.org/show_bug.cgi?id=52112 + + Modified the style of the license of all files in WebCore/rendering/svg to match the style + in WebCore/svg. Cleaned up the code according to the webkit style rules. + + No change of functionality. No test added. + + * rendering/svg/RenderSVGInline.cpp: + * rendering/svg/RenderSVGInline.h: + * rendering/svg/RenderSVGInlineText.cpp: + * rendering/svg/RenderSVGInlineText.h: + * rendering/svg/RenderSVGPath.cpp: + * rendering/svg/RenderSVGPath.h: + * rendering/svg/RenderSVGTSpan.cpp: + * rendering/svg/RenderSVGTSpan.h: + * rendering/svg/RenderSVGText.cpp: + * rendering/svg/RenderSVGText.h: + * rendering/svg/RenderSVGTextPath.cpp: + * rendering/svg/RenderSVGTextPath.h: + * rendering/svg/SVGInlineFlowBox.cpp: + * rendering/svg/SVGInlineFlowBox.h: + * rendering/svg/SVGInlineTextBox.cpp: + * rendering/svg/SVGInlineTextBox.h: + * rendering/svg/SVGRootInlineBox.cpp: + * rendering/svg/SVGRootInlineBox.h: + * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Brace was misplaced accoring to check-webkit-style. + (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle): + * rendering/svg/SVGTextQuery.cpp: + * rendering/svg/SVGTextQuery.h: + +2011-01-08 Dirk Schulze <krit@webkit.org> + + Reviewed by Mihai Parparita. + + SVG rendering clean up according to the webkit style rules + https://bugs.webkit.org/show_bug.cgi?id=52107 + + Cleanup of the SVG rendering code according to the webbkit style rules. + Changed style of licensing texts to match the style in WebCore/svg, no change + of the licensing text itself. + + * rendering/RenderForeignObject.cpp: + * rendering/RenderForeignObject.h: + * rendering/RenderSVGBlock.cpp: + * rendering/RenderSVGBlock.h: + * rendering/RenderSVGContainer.cpp: + * rendering/RenderSVGContainer.h: + * rendering/RenderSVGGradientStop.cpp: + * rendering/RenderSVGGradientStop.h: + * rendering/RenderSVGHiddenContainer.cpp: + * rendering/RenderSVGHiddenContainer.h: + (WebCore::RenderSVGHiddenContainer::renderName): + (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer): + (WebCore::RenderSVGHiddenContainer::requiresLayer): + (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint): + * rendering/RenderSVGImage.cpp: + * rendering/RenderSVGImage.h: + * rendering/RenderSVGModelObject.h: + * rendering/RenderSVGResource.cpp: + * rendering/RenderSVGResource.h: + * rendering/RenderSVGResourceClipper.cpp: + * rendering/RenderSVGResourceClipper.h: + * rendering/RenderSVGResourceContainer.cpp: + * rendering/RenderSVGResourceContainer.h: + * rendering/RenderSVGResourceFilter.cpp: + * rendering/RenderSVGResourceFilter.h: + * rendering/RenderSVGResourceFilterPrimitive.cpp: + * rendering/RenderSVGResourceFilterPrimitive.h: + * rendering/RenderSVGResourceGradient.cpp: + * rendering/RenderSVGResourceGradient.h: + * rendering/RenderSVGResourceLinearGradient.cpp: + * rendering/RenderSVGResourceLinearGradient.h: + * rendering/RenderSVGResourceMarker.cpp: + * rendering/RenderSVGResourceMarker.h: + * rendering/RenderSVGResourceMasker.cpp: + * rendering/RenderSVGResourceMasker.h: + * rendering/RenderSVGResourcePattern.cpp: + * rendering/RenderSVGResourcePattern.h: + * rendering/RenderSVGResourceRadialGradient.cpp: + * rendering/RenderSVGResourceRadialGradient.h: + * rendering/RenderSVGResourceSolidColor.cpp: + * rendering/RenderSVGResourceSolidColor.h: + * rendering/RenderSVGRoot.cpp: + (WebCore::RenderSVGRoot::nodeAtPoint): + * rendering/RenderSVGRoot.h: + * rendering/RenderSVGShadowTreeRootContainer.cpp: + * rendering/RenderSVGShadowTreeRootContainer.h: + * rendering/RenderSVGTransformableContainer.cpp: + (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): + * rendering/RenderSVGTransformableContainer.h: + (WebCore::RenderSVGTransformableContainer::localToParentTransform): + (WebCore::RenderSVGTransformableContainer::setNeedsTransformUpdate): + (WebCore::RenderSVGTransformableContainer::localTransform): + * rendering/RenderSVGViewportContainer.cpp: + * rendering/RenderSVGViewportContainer.h: + * rendering/SVGImageBufferTools.cpp: + * rendering/SVGImageBufferTools.h: + * rendering/SVGMarkerData.h: + * rendering/SVGMarkerLayoutInfo.cpp: + * rendering/SVGMarkerLayoutInfo.h: + * rendering/SVGRenderSupport.cpp: + * rendering/SVGRenderSupport.h: + * rendering/SVGRenderTreeAsText.cpp: + (WebCore::operator<<): + * rendering/SVGRenderTreeAsText.h: + * rendering/SVGResources.cpp: + * rendering/SVGResources.h: + * rendering/SVGResourcesCache.cpp: + * rendering/SVGResourcesCache.h: + * rendering/SVGResourcesCycleSolver.cpp: + * rendering/SVGResourcesCycleSolver.h: + * rendering/SVGShadowTreeElements.cpp: + * rendering/SVGShadowTreeElements.h: + 2011-01-07 Adam Barth <abarth@webkit.org> Rubber-stamped by Eric Seidel. diff --git a/Source/WebCore/DerivedSources.cpp b/Source/WebCore/DerivedSources.cpp index 6d6a28d..1be63f3 100644 --- a/Source/WebCore/DerivedSources.cpp +++ b/Source/WebCore/DerivedSources.cpp @@ -94,6 +94,7 @@ #include "JSDOMStringList.cpp" #include "JSDOMStringMap.cpp" #include "JSDOMTokenList.cpp" +#include "JSDOMURL.cpp" #include "JSDOMWindow.cpp" #include "JSElement.cpp" #include "JSEntity.cpp" diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make index ebb92b1..e1b4db4 100644 --- a/Source/WebCore/DerivedSources.make +++ b/Source/WebCore/DerivedSources.make @@ -147,6 +147,7 @@ DOM_CLASSES = \ DOMStringMap \ DOMSettableTokenList \ DOMTokenList \ + DOMURL \ DOMWindow \ Database \ DatabaseCallback \ @@ -866,6 +867,11 @@ INSPECTOR_GENERATOR_SCRIPTS = $(GENERATE_SCRIPTS) inspector/CodeGeneratorInspect InspectorFrontend.h : Inspector.idl $(INSPECTOR_GENERATOR_SCRIPTS) $(call generator_script, $(INSPECTOR_GENERATOR_SCRIPTS)) --outputDir . --defines "$(FEATURE_DEFINES) LANGUAGE_JAVASCRIPT" --generator Inspector $< +all : InjectedScriptSource.h + +InjectedScriptSource.h : InjectedScriptSource.js + perl $(WebCore)/inspector/xxd.pl InjectedScriptSource_js $(WebCore)/inspector/InjectedScriptSource.js InjectedScriptSource.h + -include $(JS_DOM_HEADERS:.h=.dep) ifeq ($(findstring BUILDING_WX,$(FEATURE_DEFINES)), BUILDING_WX) diff --git a/Source/WebCore/English.lproj/localizedStrings.js b/Source/WebCore/English.lproj/localizedStrings.js Binary files differindex 0cc5884..0d8edc2 100644 --- a/Source/WebCore/English.lproj/localizedStrings.js +++ b/Source/WebCore/English.lproj/localizedStrings.js diff --git a/Source/WebCore/ForwardingHeaders/runtime/Collector.h b/Source/WebCore/ForwardingHeaders/runtime/Collector.h deleted file mode 100644 index d133a27..0000000 --- a/Source/WebCore/ForwardingHeaders/runtime/Collector.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef WebCore_FWD_Collector_h -#define WebCore_FWD_Collector_h -#include <JavaScriptCore/Collector.h> -#endif diff --git a/Source/WebCore/ForwardingHeaders/runtime/Heap.h b/Source/WebCore/ForwardingHeaders/runtime/Heap.h new file mode 100644 index 0000000..810fa3c --- /dev/null +++ b/Source/WebCore/ForwardingHeaders/runtime/Heap.h @@ -0,0 +1,4 @@ +#ifndef WebCore_FWD_Heap_h +#define WebCore_FWD_Heap_h +#include <JavaScriptCore/Heap.h> +#endif diff --git a/Source/WebCore/ForwardingHeaders/runtime/InitializeThreading.h b/Source/WebCore/ForwardingHeaders/runtime/InitializeThreading.h index bd4f735..ee1f856 100644 --- a/Source/WebCore/ForwardingHeaders/runtime/InitializeThreading.h +++ b/Source/WebCore/ForwardingHeaders/runtime/InitializeThreading.h @@ -1,4 +1,4 @@ -#ifndef WebCore_FWD_InitializeThreadingn_h +#ifndef WebCore_FWD_InitializeThreading_h #define WebCore_FWD_InitializeThreading_h #include <JavaScriptCore/InitializeThreading.h> #endif diff --git a/Source/WebCore/GNUmakefile.am b/Source/WebCore/GNUmakefile.am index 0841894..efbbb70 100644 --- a/Source/WebCore/GNUmakefile.am +++ b/Source/WebCore/GNUmakefile.am @@ -57,6 +57,7 @@ webcore_cppflags += \ -I$(srcdir)/Source/WebCore/plugins \ -I$(srcdir)/Source/WebCore/plugins/win \ -I$(srcdir)/Source/WebCore/rendering \ + -I$(srcdir)/Source/WebCore/rendering/mathml \ -I$(srcdir)/Source/WebCore/rendering/style \ -I$(srcdir)/Source/WebCore/rendering/svg \ -I$(srcdir)/Source/WebCore/storage \ @@ -108,6 +109,7 @@ webcore_built_sources += \ DerivedSources/WebCore/HTMLEntityTable.cpp \ DerivedSources/WebCore/HTMLNames.cpp \ DerivedSources/WebCore/HTMLNames.h \ + DerivedSources/WebCore/InjectedScriptSource.h \ DerivedSources/WebCore/InspectorBackendDispatcher.cpp \ DerivedSources/WebCore/InspectorBackendDispatcher.h \ DerivedSources/WebCore/InspectorFrontend.cpp \ @@ -235,6 +237,8 @@ webcore_built_sources += \ DerivedSources/WebCore/JSDOMStringMap.h \ DerivedSources/WebCore/JSDOMTokenList.cpp \ DerivedSources/WebCore/JSDOMTokenList.h \ + DerivedSources/WebCore/JSDOMURL.cpp \ + DerivedSources/WebCore/JSDOMURL.h \ DerivedSources/WebCore/JSDOMWindow.cpp \ DerivedSources/WebCore/JSDOMWindow.h \ DerivedSources/WebCore/JSElement.cpp \ @@ -1297,6 +1301,7 @@ webcore_sources += \ Source/WebCore/dom/TextEvent.cpp \ Source/WebCore/dom/TextEvent.h \ Source/WebCore/dom/Text.h \ + Source/WebCore/dom/TouchList.h \ Source/WebCore/dom/TransformSource.h \ Source/WebCore/dom/TransformSourceLibxslt.cpp \ Source/WebCore/dom/Traversal.cpp \ @@ -1440,6 +1445,7 @@ webcore_sources += \ Source/WebCore/editing/visible_units.h \ Source/WebCore/editing/WrapContentsInDummySpanCommand.cpp \ Source/WebCore/editing/WrapContentsInDummySpanCommand.h \ + Source/WebCore/editing/WritingDirection.h \ Source/WebCore/fileapi/AsyncFileWriter.h \ Source/WebCore/fileapi/AsyncFileWriterClient.h \ Source/WebCore/fileapi/BlobBuilder.cpp \ @@ -1561,6 +1567,7 @@ webcore_sources += \ Source/WebCore/html/canvas/CanvasRenderingContext.h \ Source/WebCore/html/canvas/CanvasStyle.cpp \ Source/WebCore/html/canvas/CanvasStyle.h \ + Source/WebCore/html/canvas/CheckedInt.h \ Source/WebCore/html/canvas/DataView.cpp \ Source/WebCore/html/canvas/DataView.h \ Source/WebCore/html/canvas/Float32Array.cpp \ @@ -1571,8 +1578,10 @@ webcore_sources += \ Source/WebCore/html/canvas/Int32Array.h \ Source/WebCore/html/canvas/Int8Array.cpp \ Source/WebCore/html/canvas/Int8Array.h \ + Source/WebCore/html/canvas/IntegralTypedArrayBase.h \ Source/WebCore/html/canvas/OESTextureFloat.cpp \ Source/WebCore/html/canvas/OESTextureFloat.h \ + Source/WebCore/html/canvas/TypedArrayBase.h \ Source/WebCore/html/canvas/WebKitLoseContext.cpp \ Source/WebCore/html/canvas/WebKitLoseContext.h \ Source/WebCore/html/canvas/Uint16Array.cpp \ @@ -1611,6 +1620,8 @@ webcore_sources += \ Source/WebCore/html/DOMDataGridDataSource.h \ Source/WebCore/html/DOMFormData.cpp \ Source/WebCore/html/DOMFormData.h \ + Source/WebCore/html/DOMURL.cpp \ + Source/WebCore/html/DOMURL.h \ Source/WebCore/html/EmailInputType.cpp \ Source/WebCore/html/EmailInputType.h \ Source/WebCore/html/FileInputType.cpp \ @@ -1935,10 +1946,14 @@ webcore_sources += \ Source/WebCore/inspector/InjectedScriptHost.h \ Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp \ Source/WebCore/inspector/InspectorApplicationCacheAgent.h \ + Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp \ + Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h \ Source/WebCore/inspector/InspectorClient.cpp \ Source/WebCore/inspector/InspectorClient.h \ Source/WebCore/inspector/InspectorController.cpp \ Source/WebCore/inspector/InspectorController.h \ + Source/WebCore/inspector/InspectorConsoleAgent.cpp \ + Source/WebCore/inspector/InspectorConsoleAgent.h \ Source/WebCore/inspector/InspectorCSSAgent.cpp \ Source/WebCore/inspector/InspectorCSSAgent.h \ Source/WebCore/inspector/InspectorDatabaseAgent.cpp \ @@ -1966,6 +1981,8 @@ webcore_sources += \ Source/WebCore/inspector/InspectorProfilerAgent.h \ Source/WebCore/inspector/InspectorResourceAgent.cpp \ Source/WebCore/inspector/InspectorResourceAgent.h \ + Source/WebCore/inspector/InspectorSettings.cpp \ + Source/WebCore/inspector/InspectorSettings.h \ Source/WebCore/inspector/InspectorState.cpp \ Source/WebCore/inspector/InspectorState.h \ Source/WebCore/inspector/InspectorStyleSheet.cpp \ @@ -2094,7 +2111,6 @@ webcore_sources += \ Source/WebCore/loader/ResourceLoader.h \ Source/WebCore/loader/ResourceLoadNotifier.cpp \ Source/WebCore/loader/ResourceLoadNotifier.h \ - Source/WebCore/loader/ResourceLoadPriority.h \ Source/WebCore/loader/ResourceLoadScheduler.cpp \ Source/WebCore/loader/ResourceLoadScheduler.h \ Source/WebCore/loader/SinkDocument.cpp \ @@ -2122,26 +2138,6 @@ webcore_sources += \ Source/WebCore/mathml/MathMLMathElement.h \ Source/WebCore/mathml/MathMLTextElement.cpp \ Source/WebCore/mathml/MathMLTextElement.h \ - Source/WebCore/mathml/RenderMathMLBlock.cpp \ - Source/WebCore/mathml/RenderMathMLBlock.h \ - Source/WebCore/mathml/RenderMathMLFenced.cpp \ - Source/WebCore/mathml/RenderMathMLFenced.h \ - Source/WebCore/mathml/RenderMathMLFraction.cpp \ - Source/WebCore/mathml/RenderMathMLFraction.h \ - Source/WebCore/mathml/RenderMathMLMath.cpp \ - Source/WebCore/mathml/RenderMathMLMath.h \ - Source/WebCore/mathml/RenderMathMLOperator.cpp \ - Source/WebCore/mathml/RenderMathMLOperator.h \ - Source/WebCore/mathml/RenderMathMLRoot.cpp \ - Source/WebCore/mathml/RenderMathMLRoot.h \ - Source/WebCore/mathml/RenderMathMLRow.cpp \ - Source/WebCore/mathml/RenderMathMLRow.h \ - Source/WebCore/mathml/RenderMathMLSquareRoot.cpp \ - Source/WebCore/mathml/RenderMathMLSquareRoot.h \ - Source/WebCore/mathml/RenderMathMLSubSup.cpp \ - Source/WebCore/mathml/RenderMathMLSubSup.h \ - Source/WebCore/mathml/RenderMathMLUnderOver.cpp \ - Source/WebCore/mathml/RenderMathMLUnderOver.h \ Source/WebCore/notifications/NotificationCenter.cpp \ Source/WebCore/notifications/NotificationCenter.h \ Source/WebCore/notifications/NotificationContents.h \ @@ -2288,6 +2284,8 @@ webcore_sources += \ Source/WebCore/platform/Arena.cpp \ Source/WebCore/platform/Arena.h \ Source/WebCore/platform/AsyncFileStream.h \ + Source/WebCore/platform/AsyncFileSystem.cpp \ + Source/WebCore/platform/AsyncFileSystem.h \ Source/WebCore/platform/AutodrainedPool.h \ Source/WebCore/platform/ContentType.cpp \ Source/WebCore/platform/ContentType.h \ @@ -2437,8 +2435,6 @@ webcore_sources += \ Source/WebCore/platform/graphics/PathTraversalState.h \ Source/WebCore/platform/graphics/Pattern.cpp \ Source/WebCore/platform/graphics/Pattern.h \ - Source/WebCore/platform/graphics/Pen.cpp \ - Source/WebCore/platform/graphics/Pen.h \ Source/WebCore/platform/graphics/SegmentedFontData.cpp \ Source/WebCore/platform/graphics/SegmentedFontData.h \ Source/WebCore/platform/graphics/SimpleFontData.cpp \ @@ -2540,6 +2536,7 @@ webcore_sources += \ Source/WebCore/platform/network/ResourceHandle.h \ Source/WebCore/platform/network/ResourceHandleInternal.h \ Source/WebCore/platform/network/ResourceLoadInfo.h \ + Source/WebCore/platform/network/ResourceLoadPriority.h \ Source/WebCore/platform/network/ResourceLoadTiming.h \ Source/WebCore/platform/network/ResourceRequestBase.cpp \ Source/WebCore/platform/network/ResourceRequestBase.h \ @@ -2742,8 +2739,6 @@ webcore_sources += \ Source/WebCore/rendering/RenderFileUploadControl.h \ Source/WebCore/rendering/RenderFlexibleBox.cpp \ Source/WebCore/rendering/RenderFlexibleBox.h \ - Source/WebCore/rendering/RenderForeignObject.cpp \ - Source/WebCore/rendering/RenderForeignObject.h \ Source/WebCore/rendering/RenderFrameBase.cpp \ Source/WebCore/rendering/RenderFrameBase.h \ Source/WebCore/rendering/RenderFrame.cpp \ @@ -2817,50 +2812,6 @@ webcore_sources += \ Source/WebCore/rendering/RenderSlider.h \ Source/WebCore/rendering/RenderSummary.cpp \ Source/WebCore/rendering/RenderSummary.h \ - Source/WebCore/rendering/RenderSVGBlock.cpp \ - Source/WebCore/rendering/RenderSVGBlock.h \ - Source/WebCore/rendering/RenderSVGContainer.cpp \ - Source/WebCore/rendering/RenderSVGContainer.h \ - Source/WebCore/rendering/RenderSVGGradientStop.cpp \ - Source/WebCore/rendering/RenderSVGGradientStop.h \ - Source/WebCore/rendering/RenderSVGHiddenContainer.cpp \ - Source/WebCore/rendering/RenderSVGHiddenContainer.h \ - Source/WebCore/rendering/RenderSVGImage.cpp \ - Source/WebCore/rendering/RenderSVGImage.h \ - Source/WebCore/rendering/RenderSVGModelObject.cpp \ - Source/WebCore/rendering/RenderSVGModelObject.h \ - Source/WebCore/rendering/RenderSVGResourceClipper.cpp \ - Source/WebCore/rendering/RenderSVGResourceClipper.h \ - Source/WebCore/rendering/RenderSVGResourceContainer.cpp \ - Source/WebCore/rendering/RenderSVGResourceContainer.h \ - Source/WebCore/rendering/RenderSVGResource.cpp \ - Source/WebCore/rendering/RenderSVGResourceFilter.cpp \ - Source/WebCore/rendering/RenderSVGResourceFilter.h \ - Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp \ - Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.h \ - Source/WebCore/rendering/RenderSVGResourceGradient.cpp \ - Source/WebCore/rendering/RenderSVGResourceGradient.h \ - Source/WebCore/rendering/RenderSVGResource.h \ - Source/WebCore/rendering/RenderSVGResourceLinearGradient.cpp \ - Source/WebCore/rendering/RenderSVGResourceLinearGradient.h \ - Source/WebCore/rendering/RenderSVGResourceMarker.cpp \ - Source/WebCore/rendering/RenderSVGResourceMarker.h \ - Source/WebCore/rendering/RenderSVGResourceMasker.cpp \ - Source/WebCore/rendering/RenderSVGResourceMasker.h \ - Source/WebCore/rendering/RenderSVGResourcePattern.cpp \ - Source/WebCore/rendering/RenderSVGResourcePattern.h \ - Source/WebCore/rendering/RenderSVGResourceRadialGradient.cpp \ - Source/WebCore/rendering/RenderSVGResourceRadialGradient.h \ - Source/WebCore/rendering/RenderSVGResourceSolidColor.cpp \ - Source/WebCore/rendering/RenderSVGResourceSolidColor.h \ - Source/WebCore/rendering/RenderSVGRoot.cpp \ - Source/WebCore/rendering/RenderSVGRoot.h \ - Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.cpp \ - Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.h \ - Source/WebCore/rendering/RenderSVGTransformableContainer.cpp \ - Source/WebCore/rendering/RenderSVGTransformableContainer.h \ - Source/WebCore/rendering/RenderSVGViewportContainer.cpp \ - Source/WebCore/rendering/RenderSVGViewportContainer.h \ Source/WebCore/rendering/RenderTableCell.cpp \ Source/WebCore/rendering/RenderTableCell.h \ Source/WebCore/rendering/RenderTableCol.cpp \ @@ -2901,6 +2852,26 @@ webcore_sources += \ Source/WebCore/rendering/ShadowElement.cpp \ Source/WebCore/rendering/ShadowElement.h \ Source/WebCore/rendering/VerticalPositionCache.h \ + Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLBlock.h \ + Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLFenced.h \ + Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLFraction.h \ + Source/WebCore/rendering/mathml/RenderMathMLMath.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLMath.h \ + Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLOperator.h \ + Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLRoot.h \ + Source/WebCore/rendering/mathml/RenderMathMLRow.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLRow.h \ + Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.h \ + Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLSubSup.h \ + Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp \ + Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h \ Source/WebCore/rendering/style/BorderData.h \ Source/WebCore/rendering/style/BorderValue.h \ Source/WebCore/rendering/style/CollapsedBorderValue.h \ @@ -2959,41 +2930,87 @@ webcore_sources += \ Source/WebCore/rendering/style/SVGRenderStyleDefs.cpp \ Source/WebCore/rendering/style/SVGRenderStyleDefs.h \ Source/WebCore/rendering/style/SVGRenderStyle.h \ - Source/WebCore/rendering/SVGImageBufferTools.cpp \ - Source/WebCore/rendering/SVGImageBufferTools.h \ - Source/WebCore/rendering/SVGMarkerData.h \ - Source/WebCore/rendering/SVGMarkerLayoutInfo.cpp \ - Source/WebCore/rendering/SVGMarkerLayoutInfo.h \ - Source/WebCore/rendering/SVGRenderSupport.cpp \ - Source/WebCore/rendering/SVGRenderSupport.h \ - Source/WebCore/rendering/SVGRenderTreeAsText.cpp \ - Source/WebCore/rendering/SVGRenderTreeAsText.h \ - Source/WebCore/rendering/SVGResourcesCache.cpp \ - Source/WebCore/rendering/SVGResourcesCache.h \ - Source/WebCore/rendering/SVGResources.cpp \ - Source/WebCore/rendering/SVGResourcesCycleSolver.cpp \ - Source/WebCore/rendering/SVGResourcesCycleSolver.h \ - Source/WebCore/rendering/SVGResources.h \ - Source/WebCore/rendering/SVGShadowTreeElements.cpp \ - Source/WebCore/rendering/SVGShadowTreeElements.h \ + Source/WebCore/rendering/svg/RenderSVGBlock.cpp \ + Source/WebCore/rendering/svg/RenderSVGBlock.h \ + Source/WebCore/rendering/svg/RenderSVGContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGContainer.h \ + Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp \ + Source/WebCore/rendering/svg/RenderSVGForeignObject.h \ + Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp \ + Source/WebCore/rendering/svg/RenderSVGGradientStop.h \ + Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h \ + Source/WebCore/rendering/svg/RenderSVGImage.cpp \ + Source/WebCore/rendering/svg/RenderSVGImage.h \ Source/WebCore/rendering/svg/RenderSVGInline.cpp \ Source/WebCore/rendering/svg/RenderSVGInline.h \ Source/WebCore/rendering/svg/RenderSVGInlineText.cpp \ Source/WebCore/rendering/svg/RenderSVGInlineText.h \ + Source/WebCore/rendering/svg/RenderSVGModelObject.cpp \ + Source/WebCore/rendering/svg/RenderSVGModelObject.h \ Source/WebCore/rendering/svg/RenderSVGPath.cpp \ Source/WebCore/rendering/svg/RenderSVGPath.h \ + Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceClipper.h \ + Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceContainer.h \ + Source/WebCore/rendering/svg/RenderSVGResource.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceFilter.h \ + Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h \ + Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceGradient.h \ + Source/WebCore/rendering/svg/RenderSVGResource.h \ + Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h \ + Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceMarker.h \ + Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceMasker.h \ + Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourcePattern.h \ + Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h \ + Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp \ + Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h \ + Source/WebCore/rendering/svg/RenderSVGRoot.cpp \ + Source/WebCore/rendering/svg/RenderSVGRoot.h \ + Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.h \ Source/WebCore/rendering/svg/RenderSVGTSpan.cpp \ Source/WebCore/rendering/svg/RenderSVGTSpan.h \ Source/WebCore/rendering/svg/RenderSVGText.cpp \ Source/WebCore/rendering/svg/RenderSVGText.h \ Source/WebCore/rendering/svg/RenderSVGTextPath.cpp \ Source/WebCore/rendering/svg/RenderSVGTextPath.h \ + Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h \ + Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp \ + Source/WebCore/rendering/svg/RenderSVGViewportContainer.h \ + Source/WebCore/rendering/svg/SVGImageBufferTools.cpp \ + Source/WebCore/rendering/svg/SVGImageBufferTools.h \ Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp \ Source/WebCore/rendering/svg/SVGInlineFlowBox.h \ Source/WebCore/rendering/svg/SVGInlineTextBox.cpp \ Source/WebCore/rendering/svg/SVGInlineTextBox.h \ + Source/WebCore/rendering/svg/SVGMarkerData.h \ + Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.cpp \ + Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.h \ + Source/WebCore/rendering/svg/SVGRenderSupport.cpp \ + Source/WebCore/rendering/svg/SVGRenderSupport.h \ + Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp \ + Source/WebCore/rendering/svg/SVGRenderTreeAsText.h \ + Source/WebCore/rendering/svg/SVGResourcesCache.cpp \ + Source/WebCore/rendering/svg/SVGResourcesCache.h \ + Source/WebCore/rendering/svg/SVGResources.cpp \ + Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp \ + Source/WebCore/rendering/svg/SVGResourcesCycleSolver.h \ + Source/WebCore/rendering/svg/SVGResources.h \ Source/WebCore/rendering/svg/SVGRootInlineBox.cpp \ Source/WebCore/rendering/svg/SVGRootInlineBox.h \ + Source/WebCore/rendering/svg/SVGShadowTreeElements.cpp \ + Source/WebCore/rendering/svg/SVGShadowTreeElements.h \ Source/WebCore/rendering/svg/SVGTextChunk.cpp \ Source/WebCore/rendering/svg/SVGTextChunk.h \ Source/WebCore/rendering/svg/SVGTextChunkBuilder.cpp \ @@ -3696,7 +3713,6 @@ webcoregtk_sources += \ Source/WebCore/platform/gtk/GRefPtrGtk.cpp \ Source/WebCore/platform/gtk/GRefPtrGtk.h \ Source/WebCore/platform/gtk/gtk2drawing.c \ - Source/WebCore/platform/gtk/gtk3drawing.c \ Source/WebCore/platform/gtk/gtkdrawing.h \ Source/WebCore/platform/gtk/GtkPluginWidget.cpp \ Source/WebCore/platform/gtk/GtkPluginWidget.h \ @@ -3734,8 +3750,7 @@ webcoregtk_sources += \ Source/WebCore/platform/gtk/TemporaryLinkStubs.cpp \ Source/WebCore/platform/gtk/WheelEventGtk.cpp \ Source/WebCore/platform/gtk/WidgetGtk.cpp \ - Source/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp \ - Source/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp \ + Source/WebCore/platform/gtk/WidgetRenderingContext.cpp \ Source/WebCore/platform/gtk/WidgetRenderingContext.h \ Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp \ Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h \ @@ -3890,10 +3905,10 @@ FEATURE_DEFINES += ENABLE_DATAGRID=0 webcore_cppflags += -DENABLE_DATAGRID=0 # ---- -# HTML Meter Element - disable for now. +# HTML Meter Element # ---- -FEATURE_DEFINES += ENABLE_METER_TAG=0 -webcore_cppflags += -DENABLE_METER_TAG=0 +FEATURE_DEFINES += ENABLE_METER_TAG=1 +webcore_cppflags += -DENABLE_METER_TAG=1 # ---- # HTML Progress Element @@ -4070,8 +4085,6 @@ webcore_built_sources += \ DerivedSources/WebCore/JSFileEntry.h \ DerivedSources/WebCore/JSFileEntrySync.cpp \ DerivedSources/WebCore/JSFileEntrySync.h \ - DerivedSources/WebCore/JSFileException.cpp \ - DerivedSources/WebCore/JSFileException.h \ DerivedSources/WebCore/JSFileSystemCallback.cpp \ DerivedSources/WebCore/JSFileSystemCallback.h \ DerivedSources/WebCore/JSFileWriter.cpp \ @@ -4782,6 +4795,8 @@ DerivedSources/WebCore/InspectorFrontend.h: DerivedSources/WebCore/InspectorFron DerivedSources/WebCore/InspectorFrontend.cpp: DerivedSources/WebCore/InspectorBackendStub.js DerivedSources/WebCore/InspectorBackendStub.js: DerivedSources/WebCore/InspectorBackendDispatcher.h DerivedSources/WebCore/InspectorBackendDispatcher.h: DerivedSources/WebCore/InspectorBackendDispatcher.cpp +DerivedSources/WebCore/InjectedScriptSource.h: $(WebCore)/inspector/InjectedScriptSource.js + perl $(WebCore)/inspector/xxd.pl InjectedScriptSource_js $(WebCore)/inspector/InjectedScriptSource.js $(GENSOURCES_WEBCORE)/InjectedScriptSource.h IDL_PATH := \ $(WebCore)/bindings/js \ @@ -4812,6 +4827,49 @@ DerivedSources/WebCore/JS%.cpp: DerivedSources/WebCore/JS%.h; DerivedSources/WebCore/JS%.h: %.idl $(SCRIPTS_BINDINGS) $(WebCore)/bindings/scripts/CodeGeneratorJS.pm $(AM_V_GEN)$(PERL) -I$(WebCore)/bindings/scripts $(WebCore)/bindings/scripts/generate-bindings.pl $(IDL_PATH:%=--include "%") --outputDir "$(GENSOURCES_WEBCORE)" --defines "LANGUAGE_JAVASCRIPT=1 $(FEATURE_DEFINES)" --generator JS $< +noinst_LTLIBRARIES += \ + libWebCore.la + +nodist_EXTRA_libWebCore_la_SOURCES = \ + $(webcore_built_nosources) + +nodist_libWebCore_la_SOURCES = \ + $(webcore_built_sources) + +libWebCore_la_SOURCES = \ + $(webcore_sources) + +libWebCore_la_CXXFLAGS = \ + $(SYMBOL_VISIBILITY_INLINES) \ + $(global_cxxflags) + +libWebCore_la_CFLAGS = \ + $(SYMBOL_VISIBILITY) \ + $(global_cflags) + +libWebCore_la_CPPFLAGS = \ + -DBUILDING_WEBKIT \ + $(global_cppflags) \ + $(webcore_cppflags) \ + $(webcoregtk_cppflags) \ + $(javascriptcore_cppflags) \ + -fno-strict-aliasing \ + $(HILDON_CPPFLAGS) \ + $(COVERAGE_CFLAGS) \ + $(ENCHANT_CFLAGS) \ + $(GAIL_CFLAGS) \ + $(GEOCLUE_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GSTREAMER_CFLAGS) \ + $(GTK_CFLAGS) \ + $(HILDON_CFLAGS) \ + $(LIBSOUP_CFLAGS) \ + $(LIBXML_CFLAGS) \ + $(LIBXSLT_CFLAGS) \ + $(SQLITE3_CFLAGS) \ + $(UNICODE_CFLAGS) \ + $(XT_CFLAGS) + EXTRA_DIST += \ $(shell ls $(srcdir)/Source/WebCore/css/*.idl) \ $(shell ls $(srcdir)/Source/WebCore/dom/*.idl) \ diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in index 88ab671..a3132f5 100644 --- a/Source/WebCore/WebCore.exp.in +++ b/Source/WebCore/WebCore.exp.in @@ -141,6 +141,8 @@ __ZN7WebCore10CredentialC1ERKN3WTF6StringES4_NS_21CredentialPersistenceE __ZN7WebCore10CredentialC1Ev __ZN7WebCore10JSDocument6s_infoE __ZN7WebCore10MouseEventC1ERKN3WTF12AtomicStringEbbNS1_10PassRefPtrINS_9DOMWindowEEEiiiiibbbbtNS5_INS_11EventTargetEEENS5_INS_9ClipboardEEEb +__ZN7WebCore10ScrollView17setUseFixedLayoutEb +__ZN7WebCore10ScrollView18setFixedLayoutSizeERKNS_7IntSizeE __ZN7WebCore10ScrollView20setCanHaveScrollbarsEb __ZN7WebCore10ScrollView24windowResizerRectChangedEv __ZN7WebCore10deleteFileERKN3WTF6StringE @@ -209,6 +211,7 @@ __ZN7WebCore11MemoryCache13getStatisticsEv __ZN7WebCore11MemoryCache13setCapacitiesEjjj __ZN7WebCore11RenderLayer19scrollRectToVisibleERKNS_7IntRectEbRKNS_15ScrollAlignmentES6_ __ZN7WebCore11globalPointERK8_NSPointP8NSWindow +__ZN7WebCore11memoryCacheEv __ZN7WebCore11toUserSpaceERK7_NSRectP8NSWindow __ZN7WebCore11writeToFileEiPKci __ZN7WebCore12ChromeClient20paintCustomScrollbarEPNS_15GraphicsContextERKNS_9FloatRectENS_20ScrollbarControlSizeEjNS_13ScrollbarPartEbffj @@ -259,15 +262,23 @@ __ZN7WebCore12IconDatabase9setClientEPNS_18IconDatabaseClientE __ZN7WebCore12PopupMenuMacC1EPNS_15PopupMenuClientE __ZN7WebCore12PrintContext12pagePropertyEPNS_5FrameEPKci __ZN7WebCore12PrintContext13numberOfPagesEPNS_5FrameERKNS_9FloatSizeE +__ZN7WebCore12PrintContext16computePageRectsERKNS_9FloatRectEfffRfb __ZN7WebCore12PrintContext16isPageBoxVisibleEPNS_5FrameEi __ZN7WebCore12PrintContext20pageNumberForElementEPNS_7ElementERKNS_9FloatSizeE __ZN7WebCore12PrintContext26pageSizeAndMarginsInPixelsEPNS_5FrameEiiiiiii +__ZN7WebCore12PrintContext27computeAutomaticScaleFactorEf __ZN7WebCore12PrintContext27spoolAllPagesWithBoundariesEPNS_5FrameERNS_15GraphicsContextERKNS_9FloatSizeE __ZN7WebCore12PrintContext28computePageRectsWithPageSizeERKNS_9FloatSizeEb +__ZN7WebCore12PrintContext3endEv +__ZN7WebCore12PrintContext5beginEff +__ZN7WebCore12PrintContext9spoolPageERNS_15GraphicsContextEif +__ZN7WebCore12PrintContext9spoolRectERNS_15GraphicsContextERKNS_7IntRectE __ZN7WebCore12PrintContextC1EPNS_5FrameE __ZN7WebCore12PrintContextD1Ev __ZN7WebCore12RenderObject16repaintRectangleERKNS_7IntRectEb __ZN7WebCore12RenderWidget19showSubstituteImageEN3WTF10PassRefPtrINS_5ImageEEE +__ZN7WebCore12RenderWidget28resumeWidgetHierarchyUpdatesEv +__ZN7WebCore12RenderWidget29suspendWidgetHierarchyUpdatesEv __ZN7WebCore12SchedulePairC1EP9NSRunLoopPK10__CFString __ZN7WebCore12SharedBuffer10wrapNSDataEP6NSData __ZN7WebCore12SharedBuffer12createNSDataEv @@ -677,7 +688,6 @@ __ZN7WebCore5Range6createEN3WTF10PassRefPtrINS_8DocumentEEENS2_INS_4NodeEEEiS6_i __ZN7WebCore5Range6setEndEN3WTF10PassRefPtrINS_4NodeEEEiRi __ZN7WebCore5Range8setStartEN3WTF10PassRefPtrINS_4NodeEEEiRi __ZN7WebCore5RangeD1Ev -__ZN7WebCore5cacheEv __ZN7WebCore6Chrome16setStatusbarTextEPNS_5FrameERKN3WTF6StringE __ZN7WebCore6Cursor8fromTypeENS0_4TypeE __ZN7WebCore6CursorD1Ev @@ -727,6 +737,7 @@ __ZN7WebCore6Editor7CommandC1Ev __ZN7WebCore6Editor7commandERKN3WTF6StringE __ZN7WebCore6Editor7outdentEv __ZN7WebCore6Widget12setFrameRectERKNS_7IntRectE +__ZN7WebCore6Widget13setBoundsSizeERKNS_7IntSizeE __ZN7WebCore6Widget16removeFromParentEv __ZN7WebCore6Widget17frameRectsChangedEv __ZN7WebCore6Widget17setPlatformWidgetEP6NSView @@ -769,7 +780,6 @@ __ZN7WebCore8FormDataD1Ev __ZN7WebCore8Gradient12addColorStopEfRKNS_5ColorE __ZN7WebCore8GradientC1ERKNS_10FloatPointES3_ __ZN7WebCore8IntPointC1ERK8_NSPoint -__ZN7WebCore8openFileERKN3WTF6StringENS_12FileOpenModeE __ZN7WebCore8PositionC1EN3WTF10PassRefPtrINS_4NodeEEEi __ZN7WebCore8Settings14setJavaEnabledEb __ZN7WebCore8Settings15setWebGLEnabledEb @@ -836,6 +846,7 @@ __ZN7WebCore8Settings40setTextDirectionSubmenuInclusionBehaviorENS_37TextDirecti __ZN7WebCore8Settings41setNeedsKeyboardEventDisambiguationQuirksEb __ZN7WebCore8blankURLEv __ZN7WebCore8makeRGBAEiiii +__ZN7WebCore8openFileERKN3WTF6StringENS_12FileOpenModeE __ZN7WebCore8toStringERKN3WTF6VectorINS_11ProxyServerELm0EEE __ZN7WebCore9DOMWindow30dispatchAllPendingUnloadEventsEv __ZN7WebCore9DOMWindow36dispatchAllPendingBeforeUnloadEventsEv @@ -946,6 +957,8 @@ __ZNK7WebCore10RenderText9firstRunYEv __ZNK7WebCore10ScrollView12contentsSizeEv __ZNK7WebCore10ScrollView12documentViewEv __ZNK7WebCore10ScrollView14scrollbarModesERNS_13ScrollbarModeES2_ +__ZNK7WebCore10ScrollView14useFixedLayoutEv +__ZNK7WebCore10ScrollView15fixedLayoutSizeEv __ZNK7WebCore10ScrollView16contentsToWindowERKNS_7IntRectE __ZNK7WebCore10ScrollView16contentsToWindowERKNS_8IntPointE __ZNK7WebCore10ScrollView18visibleContentRectEb @@ -1161,12 +1174,12 @@ __ZNK7WebCore6Widget25convertFromContainingViewERKNS_8IntPointE __ZNK7WebCore6Widget25convertToContainingWindowERKNS_7IntRectE __ZNK7WebCore6Widget25convertToContainingWindowERKNS_8IntPointE __ZNK7WebCore6Widget9frameRectEv +__ZNK7WebCore7Element10screenRectEv __ZNK7WebCore7Element12getAttributeERKNS_13QualifiedNameE __ZNK7WebCore7Element19boundsInWindowSpaceEv __ZNK7WebCore7Element9innerTextEv -__ZNK7WebCore7IntRect8containsERKS0_ __ZNK7WebCore7IntRect10intersectsERKS0_ -__ZNK7WebCore7Element10screenRectEv +__ZNK7WebCore7IntRect8containsERKS0_ __ZNK7WebCore7IntRectcv6CGRectEv __ZNK7WebCore7IntRectcv7_NSRectEv __ZNK7WebCore7IntSizecv7_NSSizeEv @@ -1179,6 +1192,7 @@ __ZNK7WebCore8Document20cacheDocumentElementEv __ZNK7WebCore8Document31displayStringModifiedByEncodingERKN3WTF6StringE __ZNK7WebCore8Document4bodyEv __ZNK7WebCore8Document6domainEv +__ZNK7WebCore8IntPointcv7CGPointEv __ZNK7WebCore8IntPointcv8_NSPointEv __ZNK7WebCore8Position10downstreamENS_27EditingBoundaryCrossingRuleE __ZNK7WebCore8Position25leadingWhitespacePositionENS_9EAffinityEb @@ -1324,7 +1338,8 @@ __ZN7WebCore14DragController11dragUpdatedEPNS_8DragDataE __ZN7WebCore14DragController11performDragEPNS_8DragDataE __ZN7WebCore14DragController14placeDragCaretERKNS_8IntPointE __ZN7WebCore14DragController9dragEndedEv -__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationEPNS_16PasteboardHelperE +__ZN7WebCore8DragDataC1EP11objc_objectRKNS_8IntPointES5_NS_13DragOperationENS_20DragApplicationFlagsE +__ZN7WebCore8DragDataC1ERKN3WTF6StringERKNS_8IntPointES7_NS_13DragOperationENS_20DragApplicationFlagsE #endif #if ENABLE(GEOLOCATION) @@ -1342,7 +1357,7 @@ __ZN7WebCore15InspectorClient31doDispatchMessageOnFrontendPageEPNS_4PageERKN3WTF __ZN7WebCore19InspectorController12ConsolePanelE __ZN7WebCore19InspectorController12ScriptsPanelE __ZN7WebCore19InspectorController13ProfilesPanelE -__ZN7WebCore19InspectorController14enableDebuggerEv +__ZN7WebCore19InspectorController21showAndEnableDebuggerEv __ZN7WebCore19InspectorController14enableProfilerEbb __ZN7WebCore19InspectorController15disableDebuggerEb __ZN7WebCore19InspectorController15disableProfilerEb diff --git a/Source/WebCore/WebCore.gyp/WebCore.gyp b/Source/WebCore/WebCore.gyp/WebCore.gyp index 2cd5169..34066f7 100644 --- a/Source/WebCore/WebCore.gyp/WebCore.gyp +++ b/Source/WebCore/WebCore.gyp/WebCore.gyp @@ -32,7 +32,7 @@ 'includes': [ # FIXME: Sense whether upstream or downstream build, and # include the right features.gypi - '../../../WebKit/chromium/features.gypi', + '../../../Source/WebKit/chromium/features.gypi', '../WebCore.gypi', ], # Location of the chromium src directory. @@ -40,7 +40,7 @@ ['inside_chromium_build==0', { # Webkit is being built outside of the full chromium project. 'variables': { - 'chromium_src_dir': '../../../WebKit/chromium', + 'chromium_src_dir': '../../../Source/WebKit/chromium', 'libjpeg_gyp_path': '<(chromium_src_dir)/third_party/libjpeg/libjpeg.gyp', }, },{ @@ -333,6 +333,29 @@ ] }, { + 'target_name': 'injected_script_source', + 'type': 'none', + 'actions': [ + { + 'action_name': 'generateInjectedScriptSource', + 'inputs': [ + '../inspector/InjectedScriptSource.js', + ], + 'outputs': [ + '<(SHARED_INTERMEDIATE_DIR)/webkit/InjectedScriptSource.h', + ], + 'action': [ + 'perl', + '../inspector/xxd.pl', + 'InjectedScriptSource_js', + '../inspector/InjectedScriptSource.js', + '<(SHARED_INTERMEDIATE_DIR)/webkit/InjectedScriptSource.h' + ], + 'message': 'Generating InjectedScriptSource.h from InjectedScriptSource.js', + }, + ] + }, + { 'target_name': 'webcore_bindings_sources', 'type': 'none', 'hard_dependency': 1, @@ -723,6 +746,7 @@ 'dependencies': [ 'webcore_bindings_sources', 'inspector_protocol_sources', + 'injected_script_source', '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:pcre', '../../JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp:wtf', '<(chromium_src_dir)/build/temp_gyp/googleurl.gyp:googleurl', @@ -1061,7 +1085,7 @@ '<@(webcore_files)', # For WebCoreSystemInterface, Mac-only. - '../../../WebKit/mac/WebCoreSupport/WebSystemInterface.mm', + '../../../Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm', ], 'sources/': [ # Start by excluding everything then include platform files only. @@ -1177,7 +1201,7 @@ # Use USE_NEW_THEME on Mac. ['include', 'platform/Theme\\.cpp$'], - ['include', 'WebKit/mac/WebCoreSupport/WebSystemInterface\\.mm$'], + ['include', 'Source/WebKit/mac/WebCoreSupport/WebSystemInterface\\.mm$'], # Chromium Mac does not use skia. ['exclude', 'platform/graphics/skia/[^/]*Skia\\.(cpp|h)$'], @@ -1236,11 +1260,6 @@ ['exclude', 'platform/graphics/skia/GlyphPageTreeNodeSkia\\.cpp$'] ], }], - ['"ENABLE_CLIENT_BASED_GEOLOCATION=1" in feature_defines', { - 'sources/': [ - ['exclude', '/GeolocationService.*$'], - ], - }], ['(OS=="linux" or OS=="win") and "WTF_USE_WEBAUDIO_MKL=1" in feature_defines', { 'sources/': [ ['include', 'platform/audio/mkl/FFTFrameMKL\\.cpp$'], @@ -1304,9 +1323,6 @@ # Don't build IDBKeyPathBackendImpl. We have our own implementation. ['exclude', 'storage/IDBKeyPathBackendImpl\\.cpp$'], - # Use history/BackForwardListChromium.cpp instead. - ['exclude', 'history/BackForwardListImpl\\.cpp$'], - # Use loader/icon/IconDatabaseNone.cpp instead. ['exclude', 'loader/icon/IconDatabase\\.cpp$'], @@ -1448,7 +1464,7 @@ 'direct_dependent_settings': { 'include_dirs': [ '../../../WebKitLibraries', - '../../../WebKit/mac/WebCoreSupport', + '../../../Source/WebKit/mac/WebCoreSupport', ], }, }], diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi index 9a0421d..f4a239f 100644 --- a/Source/WebCore/WebCore.gypi +++ b/Source/WebCore/WebCore.gypi @@ -119,6 +119,7 @@ 'html/DOMFormData.idl', 'html/DOMSettableTokenList.idl', 'html/DOMTokenList.idl', + 'html/DOMURL.idl', 'html/DataGridColumn.idl', 'html/DataGridColumnList.idl', 'html/HTMLAllCollection.idl', @@ -1588,7 +1589,6 @@ 'history/BackForwardList.h', 'history/BackForwardListImpl.cpp', 'history/BackForwardListImpl.h', - 'history/BackForwardListChromium.cpp', 'history/CachedFrame.cpp', 'history/CachedFrame.h', 'history/CachedFramePlatformData.h', @@ -1627,6 +1627,8 @@ 'html/DOMSettableTokenList.h', 'html/DOMTokenList.cpp', 'html/DOMTokenList.h', + 'html/DOMURL.cpp', + 'html/DOMURL.h', 'html/DataGridColumn.cpp', 'html/DataGridColumn.h', 'html/DataGridColumnList.cpp', @@ -1999,8 +2001,12 @@ 'inspector/InjectedScriptHost.h', 'inspector/InspectorApplicationCacheAgent.cpp', 'inspector/InspectorApplicationCacheAgent.h', + 'inspector/InspectorBrowserDebuggerAgent.cpp', + 'inspector/InspectorBrowserDebuggerAgent.h', 'inspector/InspectorClient.cpp', 'inspector/InspectorClient.h', + 'inspector/InspectorConsoleAgent.cpp', + 'inspector/InspectorConsoleAgent.h', 'inspector/InspectorController.cpp', 'inspector/InspectorController.h', 'inspector/InspectorCSSAgent.cpp', @@ -2029,6 +2035,8 @@ 'inspector/InspectorResourceAgent.cpp', 'inspector/InspectorResourceAgent.h', 'inspector/InspectorState.cpp', + 'inspector/InspectorSettings.h', + 'inspector/InspectorSettings.cpp', 'inspector/InspectorState.h', 'inspector/InspectorStyleSheet.cpp', 'inspector/InspectorStyleSheet.h', @@ -2192,26 +2200,6 @@ 'mathml/MathMLMathElement.h', 'mathml/MathMLTextElement.cpp', 'mathml/MathMLTextElement.h', - 'mathml/RenderMathMLBlock.cpp', - 'mathml/RenderMathMLBlock.h', - 'mathml/RenderMathMLFenced.cpp', - 'mathml/RenderMathMLFenced.h', - 'mathml/RenderMathMLFraction.cpp', - 'mathml/RenderMathMLFraction.h', - 'mathml/RenderMathMLMath.cpp', - 'mathml/RenderMathMLMath.h', - 'mathml/RenderMathMLOperator.cpp', - 'mathml/RenderMathMLOperator.h', - 'mathml/RenderMathMLRoot.cpp', - 'mathml/RenderMathMLRoot.h', - 'mathml/RenderMathMLRow.cpp', - 'mathml/RenderMathMLRow.h', - 'mathml/RenderMathMLSquareRoot.cpp', - 'mathml/RenderMathMLSquareRoot.h', - 'mathml/RenderMathMLSubSup.cpp', - 'mathml/RenderMathMLSubSup.h', - 'mathml/RenderMathMLUnderOver.cpp', - 'mathml/RenderMathMLUnderOver.h', 'notifications/Notification.cpp', 'notifications/Notification.h', 'notifications/NotificationCenter.cpp', @@ -2479,8 +2467,6 @@ 'platform/chromium/FramelessScrollView.cpp', 'platform/chromium/FramelessScrollView.h', 'platform/chromium/FramelessScrollViewClient.h', - 'platform/chromium/GeolocationServiceChromium.cpp', - 'platform/chromium/GeolocationServiceChromium.h', 'platform/chromium/KeyCodeConversion.h', 'platform/chromium/KeyCodeConversionGtk.cpp', 'platform/chromium/LanguageChromium.cpp', @@ -2956,8 +2942,6 @@ 'platform/graphics/PathTraversalState.h', 'platform/graphics/Pattern.cpp', 'platform/graphics/Pattern.h', - 'platform/graphics/Pen.cpp', - 'platform/graphics/Pen.h', 'platform/graphics/SegmentedFontData.cpp', 'platform/graphics/SegmentedFontData.h', 'platform/graphics/SimpleFontData.cpp', @@ -3597,6 +3581,26 @@ 'plugins/PluginViewNone.cpp', 'plugins/npapi.cpp', 'plugins/npfunctions.h', + 'rendering/mathml/RenderMathMLBlock.cpp', + 'rendering/mathml/RenderMathMLBlock.h', + 'rendering/mathml/RenderMathMLFenced.cpp', + 'rendering/mathml/RenderMathMLFenced.h', + 'rendering/mathml/RenderMathMLFraction.cpp', + 'rendering/mathml/RenderMathMLFraction.h', + 'rendering/mathml/RenderMathMLMath.cpp', + 'rendering/mathml/RenderMathMLMath.h', + 'rendering/mathml/RenderMathMLOperator.cpp', + 'rendering/mathml/RenderMathMLOperator.h', + 'rendering/mathml/RenderMathMLRoot.cpp', + 'rendering/mathml/RenderMathMLRoot.h', + 'rendering/mathml/RenderMathMLRow.cpp', + 'rendering/mathml/RenderMathMLRow.h', + 'rendering/mathml/RenderMathMLSquareRoot.cpp', + 'rendering/mathml/RenderMathMLSquareRoot.h', + 'rendering/mathml/RenderMathMLSubSup.cpp', + 'rendering/mathml/RenderMathMLSubSup.h', + 'rendering/mathml/RenderMathMLUnderOver.cpp', + 'rendering/mathml/RenderMathMLUnderOver.h', 'rendering/style/BorderData.h', 'rendering/style/BorderValue.h', 'rendering/style/CollapsedBorderValue.h', @@ -3654,24 +3658,87 @@ 'rendering/style/StyleTransformData.h', 'rendering/style/StyleVisualData.cpp', 'rendering/style/StyleVisualData.h', + 'rendering/svg/RenderSVGBlock.cpp', + 'rendering/svg/RenderSVGBlock.h', + 'rendering/svg/RenderSVGContainer.cpp', + 'rendering/svg/RenderSVGContainer.h', + 'rendering/svg/RenderSVGForeignObject.cpp', + 'rendering/svg/RenderSVGForeignObject.h', + 'rendering/svg/RenderSVGGradientStop.cpp', + 'rendering/svg/RenderSVGGradientStop.h', + 'rendering/svg/RenderSVGHiddenContainer.cpp', + 'rendering/svg/RenderSVGHiddenContainer.h', + 'rendering/svg/RenderSVGImage.cpp', + 'rendering/svg/RenderSVGImage.h', 'rendering/svg/RenderSVGInline.cpp', 'rendering/svg/RenderSVGInline.h', 'rendering/svg/RenderSVGInlineText.cpp', 'rendering/svg/RenderSVGInlineText.h', + 'rendering/svg/RenderSVGModelObject.cpp', + 'rendering/svg/RenderSVGModelObject.h', 'rendering/svg/RenderSVGPath.cpp', 'rendering/svg/RenderSVGPath.h', + 'rendering/svg/RenderSVGResource.cpp', + 'rendering/svg/RenderSVGResource.h', + 'rendering/svg/RenderSVGResourceClipper.cpp', + 'rendering/svg/RenderSVGResourceClipper.h', + 'rendering/svg/RenderSVGResourceContainer.cpp', + 'rendering/svg/RenderSVGResourceContainer.h', + 'rendering/svg/RenderSVGResourceFilter.cpp', + 'rendering/svg/RenderSVGResourceFilter.h', + 'rendering/svg/RenderSVGResourceFilterPrimitive.cpp', + 'rendering/svg/RenderSVGResourceFilterPrimitive.h', + 'rendering/svg/RenderSVGResourceGradient.cpp', + 'rendering/svg/RenderSVGResourceGradient.h', + 'rendering/svg/RenderSVGResourceLinearGradient.cpp', + 'rendering/svg/RenderSVGResourceLinearGradient.h', + 'rendering/svg/RenderSVGResourceMarker.cpp', + 'rendering/svg/RenderSVGResourceMarker.h', + 'rendering/svg/RenderSVGResourceMasker.cpp', + 'rendering/svg/RenderSVGResourceMasker.h', + 'rendering/svg/RenderSVGResourcePattern.cpp', + 'rendering/svg/RenderSVGResourcePattern.h', + 'rendering/svg/RenderSVGResourceRadialGradient.cpp', + 'rendering/svg/RenderSVGResourceRadialGradient.h', + 'rendering/svg/RenderSVGResourceSolidColor.cpp', + 'rendering/svg/RenderSVGResourceSolidColor.h', + 'rendering/svg/RenderSVGRoot.cpp', + 'rendering/svg/RenderSVGRoot.h', + 'rendering/svg/RenderSVGShadowTreeRootContainer.cpp', + 'rendering/svg/RenderSVGShadowTreeRootContainer.h', 'rendering/svg/RenderSVGTSpan.cpp', 'rendering/svg/RenderSVGTSpan.h', 'rendering/svg/RenderSVGText.cpp', 'rendering/svg/RenderSVGText.h', 'rendering/svg/RenderSVGTextPath.cpp', 'rendering/svg/RenderSVGTextPath.h', + 'rendering/svg/RenderSVGTransformableContainer.cpp', + 'rendering/svg/RenderSVGTransformableContainer.h', + 'rendering/svg/RenderSVGViewportContainer.cpp', + 'rendering/svg/RenderSVGViewportContainer.h', + 'rendering/svg/SVGImageBufferTools.cpp', + 'rendering/svg/SVGImageBufferTools.h', 'rendering/svg/SVGInlineFlowBox.cpp', 'rendering/svg/SVGInlineFlowBox.h', 'rendering/svg/SVGInlineTextBox.cpp', 'rendering/svg/SVGInlineTextBox.h', + 'rendering/svg/SVGMarkerData.h', + 'rendering/svg/SVGMarkerLayoutInfo.cpp', + 'rendering/svg/SVGMarkerLayoutInfo.h', + 'rendering/svg/SVGRenderSupport.cpp', + 'rendering/svg/SVGRenderSupport.h', + 'rendering/svg/SVGRenderTreeAsText.cpp', + 'rendering/svg/SVGRenderTreeAsText.h', + 'rendering/svg/SVGResources.cpp', + 'rendering/svg/SVGResources.h', + 'rendering/svg/SVGResourcesCache.cpp', + 'rendering/svg/SVGResourcesCache.h', + 'rendering/svg/SVGResourcesCycleSolver.cpp', + 'rendering/svg/SVGResourcesCycleSolver.h', 'rendering/svg/SVGRootInlineBox.cpp', 'rendering/svg/SVGRootInlineBox.h', + 'rendering/svg/SVGShadowTreeElements.cpp', + 'rendering/svg/SVGShadowTreeElements.h', 'rendering/svg/SVGTextChunk.cpp', 'rendering/svg/SVGTextChunk.h', 'rendering/svg/SVGTextChunkBuilder.cpp', @@ -3751,8 +3818,6 @@ 'rendering/RenderFileUploadControl.h', 'rendering/RenderFlexibleBox.cpp', 'rendering/RenderFlexibleBox.h', - 'rendering/RenderForeignObject.cpp', - 'rendering/RenderForeignObject.h', 'rendering/RenderFrame.cpp', 'rendering/RenderFrame.h', 'rendering/RenderFrameBase.cpp', @@ -3821,50 +3886,6 @@ 'rendering/RenderRubyText.h', 'rendering/RenderSummary.cpp', 'rendering/RenderSummary.h', - 'rendering/RenderSVGBlock.cpp', - 'rendering/RenderSVGBlock.h', - 'rendering/RenderSVGContainer.cpp', - 'rendering/RenderSVGContainer.h', - 'rendering/RenderSVGGradientStop.cpp', - 'rendering/RenderSVGGradientStop.h', - 'rendering/RenderSVGHiddenContainer.cpp', - 'rendering/RenderSVGHiddenContainer.h', - 'rendering/RenderSVGImage.cpp', - 'rendering/RenderSVGImage.h', - 'rendering/RenderSVGModelObject.cpp', - 'rendering/RenderSVGModelObject.h', - 'rendering/RenderSVGResource.cpp', - 'rendering/RenderSVGResource.h', - 'rendering/RenderSVGResourceClipper.cpp', - 'rendering/RenderSVGResourceClipper.h', - 'rendering/RenderSVGResourceContainer.cpp', - 'rendering/RenderSVGResourceContainer.h', - 'rendering/RenderSVGResourceFilter.cpp', - 'rendering/RenderSVGResourceFilter.h', - 'rendering/RenderSVGResourceFilterPrimitive.cpp', - 'rendering/RenderSVGResourceFilterPrimitive.h', - 'rendering/RenderSVGResourceGradient.cpp', - 'rendering/RenderSVGResourceGradient.h', - 'rendering/RenderSVGResourceLinearGradient.cpp', - 'rendering/RenderSVGResourceLinearGradient.h', - 'rendering/RenderSVGResourceMarker.cpp', - 'rendering/RenderSVGResourceMarker.h', - 'rendering/RenderSVGResourceMasker.cpp', - 'rendering/RenderSVGResourceMasker.h', - 'rendering/RenderSVGResourcePattern.cpp', - 'rendering/RenderSVGResourcePattern.h', - 'rendering/RenderSVGResourceRadialGradient.cpp', - 'rendering/RenderSVGResourceRadialGradient.h', - 'rendering/RenderSVGResourceSolidColor.cpp', - 'rendering/RenderSVGResourceSolidColor.h', - 'rendering/RenderSVGRoot.cpp', - 'rendering/RenderSVGRoot.h', - 'rendering/RenderSVGShadowTreeRootContainer.cpp', - 'rendering/RenderSVGShadowTreeRootContainer.h', - 'rendering/RenderSVGTransformableContainer.cpp', - 'rendering/RenderSVGTransformableContainer.h', - 'rendering/RenderSVGViewportContainer.cpp', - 'rendering/RenderSVGViewportContainer.h', 'rendering/RenderScrollbar.cpp', 'rendering/RenderScrollbar.h', 'rendering/RenderScrollbarPart.cpp', @@ -3926,23 +3947,6 @@ 'rendering/ScrollBehavior.h', 'rendering/ShadowElement.cpp', 'rendering/ShadowElement.h', - 'rendering/SVGImageBufferTools.cpp', - 'rendering/SVGImageBufferTools.h', - 'rendering/SVGMarkerData.h', - 'rendering/SVGMarkerLayoutInfo.cpp', - 'rendering/SVGMarkerLayoutInfo.h', - 'rendering/SVGRenderSupport.cpp', - 'rendering/SVGRenderSupport.h', - 'rendering/SVGRenderTreeAsText.cpp', - 'rendering/SVGRenderTreeAsText.h', - 'rendering/SVGResources.cpp', - 'rendering/SVGResources.h', - 'rendering/SVGResourcesCache.cpp', - 'rendering/SVGResourcesCache.h', - 'rendering/SVGResourcesCycleSolver.cpp', - 'rendering/SVGResourcesCycleSolver.h', - 'rendering/SVGShadowTreeElements.cpp', - 'rendering/SVGShadowTreeElements.h', 'rendering/TableLayout.h', 'rendering/TextControlInnerElements.cpp', 'rendering/TextControlInnerElements.h', @@ -4642,7 +4646,6 @@ 'inspector/front-end/ImageView.js', 'inspector/front-end/InspectorFrontendHostStub.js', 'inspector/front-end/InjectedFakeWorker.js', - 'inspector/front-end/InjectedScript.js', 'inspector/front-end/InjectedScriptAccess.js', 'inspector/front-end/inspector.js', 'inspector/front-end/KeyboardShortcut.js', diff --git a/Source/WebCore/WebCore.order b/Source/WebCore/WebCore.order index 271dfc9..e88c444 100644 --- a/Source/WebCore/WebCore.order +++ b/Source/WebCore/WebCore.order @@ -371,7 +371,7 @@ __ZN7WebCore15CollectionCache5resetEv __ZN3WTF20deleteAllPairSecondsIPNS_6VectorIPN7WebCore7ElementELm0EEEKNS_7HashMapIPNS2_16AtomicStringImplES6_NS_7PtrHashIS9_EENS __ZN7WebCore9DocLoaderC1EPNS_8DocumentE __ZN7WebCore9DocLoaderC2EPNS_8DocumentE -__ZN7WebCore5cacheEv +__ZN7WebCore11memoryCacheEv __ZN7WebCore5CacheC1Ev __ZN7WebCore5CacheC2Ev __ZN7WebCore6LoaderC1Ev diff --git a/Source/WebCore/WebCore.pri b/Source/WebCore/WebCore.pri index 0c33eed..736d534 100644 --- a/Source/WebCore/WebCore.pri +++ b/Source/WebCore/WebCore.pri @@ -60,6 +60,7 @@ STYLESHEETS_EMBED = \ $$PWD/css/wml.css \ $$PWD/css/mediaControls.css \ $$PWD/css/mediaControlsQt.css \ + $$PWD/css/mediaControlsQtFullscreen.css \ $$PWD/css/themeQtNoListboxes.css \ $$PWD/css/themeQtMobile.css @@ -213,6 +214,7 @@ IDL_BINDINGS += \ html/DOMFormData.idl \ html/DOMSettableTokenList.idl \ html/DOMTokenList.idl \ + html/DOMURL.idl \ html/HTMLAllCollection.idl \ html/HTMLAudioElement.idl \ html/HTMLAnchorElement.idl \ @@ -537,6 +539,7 @@ IDL_BINDINGS += \ INSPECTOR_INTERFACES = inspector/Inspector.idl INSPECTOR_BACKEND_STUB_QRC = inspector/front-end/InspectorBackendStub.qrc +INJECTED_SCRIPT_SOURCE = $$PWD/inspector/InjectedScriptSource.js v8: wrapperFactoryArg = --wrapperFactoryV8 else: wrapperFactoryArg = --wrapperFactory @@ -650,6 +653,12 @@ inspectorBackendStub.tempNames = $$PWD/$$INSPECTOR_BACKEND_STUB_QRC $${WC_GENERA inspectorBackendStub.commands = $$QMAKE_COPY $$replace(inspectorBackendStub.tempNames, "/", $$QMAKE_DIR_SEP) addExtraCompiler(inspectorBackendStub) +# GENERATOR 2-a: inspector injected script source compiler +injectedScriptSource.output = $${WC_GENERATED_SOURCES_DIR}/InjectedScriptSource.h +injectedScriptSource.input = INJECTED_SCRIPT_SOURCE +injectedScriptSource.commands = perl $$PWD/inspector/xxd.pl InjectedScriptSource_js $$PWD/inspector/InjectedScriptSource.js $${WC_GENERATED_SOURCES_DIR}/InjectedScriptSource.h +addExtraCompiler(injectedScriptSource) + # GENERATOR 3: tokenizer (flex) tokenizer.output = $${WC_GENERATED_SOURCES_DIR}/${QMAKE_FILE_BASE}.cpp tokenizer.input = TOKENIZER @@ -737,11 +746,11 @@ xpathbison.depends = ${QMAKE_FILE_NAME} addExtraCompiler(xpathbison) # GENERATOR 11: WebKit Version -# The appropriate Apple-maintained Version.xcconfig file for WebKit version information is in WebKit/mac/Configurations/. -webkitversion.wkScript = $$PWD/../../WebKit/scripts/generate-webkitversion.pl +# The appropriate Apple-maintained Version.xcconfig file for WebKit version information is in Source/WebKit/mac/Configurations/. +webkitversion.wkScript = $$PWD/../../Source/WebKit/scripts/generate-webkitversion.pl webkitversion.output = $${WC_GENERATED_SOURCES_DIR}/WebKitVersion.h webkitversion.input = webkitversion.wkScript -webkitversion.commands = perl $$webkitversion.wkScript --config $$PWD/../../WebKit/mac/Configurations/Version.xcconfig --outputDir $${WC_GENERATED_SOURCES_DIR}/ +webkitversion.commands = perl $$webkitversion.wkScript --config $$PWD/../../Source/WebKit/mac/Configurations/Version.xcconfig --outputDir $${WC_GENERATED_SOURCES_DIR}/ webkitversion.clean = ${QMAKE_VAR_WC_GENERATED_SOURCES_DIR}/WebKitVersion.h webkitversion.wkAddOutputToSources = false addExtraCompiler(webkitversion) diff --git a/Source/WebCore/WebCore.pro b/Source/WebCore/WebCore.pro index de927a3..d37cdc7 100644 --- a/Source/WebCore/WebCore.pro +++ b/Source/WebCore/WebCore.pro @@ -52,12 +52,12 @@ symbian: { " " webkitlibs.pkg_prerules = vendorinfo - webkitbackup.sources = ../../WebKit/qt/symbian/backup_registration.xml + webkitbackup.sources = ../../Source/WebKit/qt/symbian/backup_registration.xml webkitbackup.path = /private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,) contains(QT_CONFIG, declarative) { declarativeImport.sources = $$QT_BUILD_TREE/imports/QtWebKit/qmlwebkitplugin$${QT_LIBINFIX}.dll - declarativeImport.sources += ../../WebKit/qt/declarative/qmldir + declarativeImport.sources += ../../Source/WebKit/qt/declarative/qmldir declarativeImport.path = c:$$QT_IMPORTS_BASE_DIR/QtWebKit DEPLOYMENT += declarativeImport } @@ -90,7 +90,7 @@ CONFIG(standalone_package) { isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$PWD/generated isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/../JavaScriptCore/generated - PRECOMPILED_HEADER = $$PWD/../../WebKit/qt/WebKit_pch.h + PRECOMPILED_HEADER = $$PWD/../../Source/WebKit/qt/WebKit_pch.h } else { isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = generated isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = ../JavaScriptCore/generated @@ -110,7 +110,7 @@ CONFIG(QTDIR_build) { !static: DEFINES += QT_MAKEDLL symbian: TARGET =$$TARGET$${QT_LIBINFIX} } -moduleFile=$$PWD/../../WebKit/qt/qt_webkit_version.pri +moduleFile=$$PWD/../../Source/WebKit/qt/qt_webkit_version.pri isEmpty(QT_BUILD_TREE):include($$moduleFile) VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION} @@ -181,8 +181,8 @@ include($$PWD/../JavaScriptCore/JavaScriptCore.pri) !v8: addJavaScriptCoreLib(../JavaScriptCore) webkit2 { - include($$PWD/../../WebKit2/WebKit2.pri) - addWebKit2LibWholeArchive(../../WebKit2) + include($$PWD/../../Source/WebKit2/WebKit2.pri) + addWebKit2LibWholeArchive(../../Source/WebKit2) } # Extract sources to build from the generator definitions @@ -262,6 +262,7 @@ WEBCORE_INCLUDEPATH = \ $$PWD/platform/text/transcoder \ $$PWD/plugins \ $$PWD/rendering \ + $$PWD/rendering/mathml \ $$PWD/rendering/style \ $$PWD/rendering/svg \ $$PWD/storage \ @@ -284,8 +285,8 @@ WEBCORE_INCLUDEPATH = \ $$PWD/platform/graphics/qt \ $$PWD/platform/network/qt \ $$PWD/platform/qt \ - $$PWD/../../WebKit/qt/Api \ - $$PWD/../../WebKit/qt/WebCoreSupport \ + $$PWD/../../Source/WebKit/qt/Api \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport \ $$WEBCORE_INCLUDEPATH symbian { @@ -891,6 +892,7 @@ SOURCES += \ html/DOMFormData.cpp \ html/DOMSettableTokenList.cpp \ html/DOMTokenList.cpp \ + html/DOMURL.cpp \ html/DataGridColumn.cpp \ html/DataGridColumnList.cpp \ html/DateComponents.cpp \ @@ -1041,8 +1043,10 @@ SOURCES += \ inspector/InjectedScript.cpp \ inspector/InjectedScriptHost.cpp \ inspector/InspectorApplicationCacheAgent.cpp \ + inspector/InspectorBrowserDebuggerAgent.cpp \ inspector/InspectorCSSAgent.cpp \ inspector/InspectorClient.cpp \ + inspector/InspectorConsoleAgent.cpp \ inspector/InspectorController.cpp \ inspector/InspectorDatabaseAgent.cpp \ inspector/InspectorDatabaseResource.cpp \ @@ -1056,6 +1060,7 @@ SOURCES += \ inspector/InspectorInstrumentation.cpp \ inspector/InspectorProfilerAgent.cpp \ inspector/InspectorResourceAgent.cpp \ + inspector/InspectorSettings.cpp \ inspector/InspectorState.cpp \ inspector/InspectorStyleSheet.cpp \ inspector/InspectorTimelineAgent.cpp \ @@ -1178,7 +1183,7 @@ SOURCES += \ platform/FileStream.cpp \ platform/FileSystem.cpp \ platform/GeolocationService.cpp \ - platform/image-decoders/qt/RGBA32BufferQt.cpp \ + platform/image-decoders/qt/ImageFrameQt.cpp \ platform/graphics/FontDescription.cpp \ platform/graphics/FontFallbackList.cpp \ platform/graphics/FontFamily.cpp \ @@ -1205,7 +1210,6 @@ SOURCES += \ platform/graphics/Path.cpp \ platform/graphics/PathTraversalState.cpp \ platform/graphics/Pattern.cpp \ - platform/graphics/Pen.cpp \ platform/graphics/SegmentedFontData.cpp \ platform/graphics/SimpleFontData.cpp \ platform/graphics/TiledBackingStore.cpp \ @@ -1358,7 +1362,6 @@ SOURCES += \ rendering/RenderWidget.cpp \ rendering/RenderWordBreak.cpp \ rendering/RootInlineBox.cpp \ - rendering/SVGRenderTreeAsText.cpp \ rendering/ScrollBehavior.cpp \ rendering/ShadowElement.cpp \ rendering/TextControlInnerElements.cpp \ @@ -1814,6 +1817,7 @@ HEADERS += \ html/DOMFormData.h \ html/DOMSettableTokenList.h \ html/DOMTokenList.h \ + html/DOMURL.h \ html/FormAssociatedElement.h \ html/FormDataList.h \ html/FTPDirectoryDocument.h \ @@ -1934,6 +1938,8 @@ HEADERS += \ inspector/InjectedScript.h \ inspector/InjectedScriptHost.h \ inspector/InspectorApplicationCacheAgent.h \ + inspector/InspectorBrowserDebuggerAgent.h \ + inspector/InspectorConsoleAgent.h \ inspector/InspectorController.h \ inspector/InspectorCSSAgent.h \ inspector/InspectorDatabaseAgent.h \ @@ -1948,6 +1954,7 @@ HEADERS += \ inspector/InspectorInstrumentation.h \ inspector/InspectorProfilerAgent.h \ inspector/InspectorResourceAgent.h \ + inspector/InspectorSettings.h \ inspector/InspectorState.h \ inspector/InspectorStyleSheet.h \ inspector/InspectorTimelineAgent.h \ @@ -2001,16 +2008,6 @@ HEADERS += \ mathml/MathMLInlineContainerElement.h \ mathml/MathMLMathElement.h \ mathml/MathMLTextElement.h \ - mathml/RenderMathMLBlock.h \ - mathml/RenderMathMLFenced.h \ - mathml/RenderMathMLFraction.h \ - mathml/RenderMathMLMath.h \ - mathml/RenderMathMLOperator.h \ - mathml/RenderMathMLRoot.h \ - mathml/RenderMathMLRow.h \ - mathml/RenderMathMLSquareRoot.h \ - mathml/RenderMathMLSubSup.h \ - mathml/RenderMathMLUnderOver.h \ notifications/Notification.h \ notifications/NotificationCenter.h \ notifications/NotificationPresenter.h \ @@ -2132,7 +2129,6 @@ HEADERS += \ platform/graphics/Path.h \ platform/graphics/PathTraversalState.h \ platform/graphics/Pattern.h \ - platform/graphics/Pen.h \ platform/graphics/qt/FontCustomPlatformData.h \ platform/graphics/qt/ImageDecoderQt.h \ platform/graphics/qt/StillImageQt.h \ @@ -2249,6 +2245,16 @@ HEADERS += \ rendering/InlineFlowBox.h \ rendering/InlineTextBox.h \ rendering/LayoutState.h \ + rendering/mathml/RenderMathMLBlock.h \ + rendering/mathml/RenderMathMLFenced.h \ + rendering/mathml/RenderMathMLFraction.h \ + rendering/mathml/RenderMathMLMath.h \ + rendering/mathml/RenderMathMLOperator.h \ + rendering/mathml/RenderMathMLRoot.h \ + rendering/mathml/RenderMathMLRow.h \ + rendering/mathml/RenderMathMLSquareRoot.h \ + rendering/mathml/RenderMathMLSubSup.h \ + rendering/mathml/RenderMathMLUnderOver.h \ rendering/MediaControlElements.h \ rendering/PaintInfo.h \ rendering/PaintPhase.h \ @@ -2268,7 +2274,6 @@ HEADERS += \ rendering/RenderFieldset.h \ rendering/RenderFileUploadControl.h \ rendering/RenderFlexibleBox.h \ - rendering/RenderForeignObject.h \ rendering/RenderFrame.h \ rendering/RenderFrameBase.h \ rendering/RenderFrameSet.h \ @@ -2306,28 +2311,6 @@ HEADERS += \ rendering/RenderScrollbarTheme.h \ rendering/RenderSlider.h \ rendering/RenderSummary.h \ - rendering/RenderSVGBlock.h \ - rendering/RenderSVGContainer.h \ - rendering/RenderSVGGradientStop.h \ - rendering/RenderSVGHiddenContainer.h \ - rendering/RenderSVGImage.h \ - rendering/RenderSVGModelObject.h \ - rendering/RenderSVGResource.h \ - rendering/RenderSVGResourceClipper.h \ - rendering/RenderSVGResourceContainer.h \ - rendering/RenderSVGResourceFilter.h \ - rendering/RenderSVGResourceFilterPrimitive.h \ - rendering/RenderSVGResourceGradient.h \ - rendering/RenderSVGResourceLinearGradient.h \ - rendering/RenderSVGResourceMarker.h \ - rendering/RenderSVGResourceMasker.h \ - rendering/RenderSVGResourcePattern.h \ - rendering/RenderSVGResourceRadialGradient.h \ - rendering/RenderSVGResourceSolidColor.h \ - rendering/RenderSVGRoot.h \ - rendering/RenderSVGShadowTreeRootContainer.h \ - rendering/RenderSVGTransformableContainer.h \ - rendering/RenderSVGViewportContainer.h \ rendering/RenderTableCell.h \ rendering/RenderTableCol.h \ rendering/RenderTable.h \ @@ -2372,15 +2355,47 @@ HEADERS += \ rendering/style/StyleVisualData.h \ rendering/style/SVGRenderStyleDefs.h \ rendering/style/SVGRenderStyle.h \ + rendering/svg/RenderSVGBlock.h \ + rendering/svg/RenderSVGContainer.h \ + rendering/svg/RenderSVGForeignObject.h \ + rendering/svg/RenderSVGGradientStop.h \ + rendering/svg/RenderSVGHiddenContainer.h \ + rendering/svg/RenderSVGImage.h \ rendering/svg/RenderSVGInline.h \ rendering/svg/RenderSVGInlineText.h \ + rendering/svg/RenderSVGModelObject.h \ rendering/svg/RenderSVGPath.h \ + rendering/svg/RenderSVGResource.h \ + rendering/svg/RenderSVGResourceClipper.h \ + rendering/svg/RenderSVGResourceContainer.h \ + rendering/svg/RenderSVGResourceFilter.h \ + rendering/svg/RenderSVGResourceFilterPrimitive.h \ + rendering/svg/RenderSVGResourceGradient.h \ + rendering/svg/RenderSVGResourceLinearGradient.h \ + rendering/svg/RenderSVGResourceMarker.h \ + rendering/svg/RenderSVGResourceMasker.h \ + rendering/svg/RenderSVGResourcePattern.h \ + rendering/svg/RenderSVGResourceRadialGradient.h \ + rendering/svg/RenderSVGResourceSolidColor.h \ + rendering/svg/RenderSVGRoot.h \ + rendering/svg/RenderSVGShadowTreeRootContainer.h \ rendering/svg/RenderSVGTSpan.h \ rendering/svg/RenderSVGText.h \ rendering/svg/RenderSVGTextPath.h \ + rendering/svg/RenderSVGTransformableContainer.h \ + rendering/svg/RenderSVGViewportContainer.h \ + rendering/svg/SVGImageBufferTools.h \ rendering/svg/SVGInlineFlowBox.h \ rendering/svg/SVGInlineTextBox.h \ + rendering/svg/SVGMarkerData.h \ + rendering/svg/SVGMarkerLayoutInfo.h \ + rendering/svg/SVGRenderSupport.h \ + rendering/svg/SVGRenderTreeAsText.h \ + rendering/svg/SVGResources.h \ + rendering/svg/SVGResourcesCache.h \ + rendering/svg/SVGResourcesCycleSolver.h \ rendering/svg/SVGRootInlineBox.h \ + rendering/svg/SVGShadowTreeElements.h \ rendering/svg/SVGTextChunk.h \ rendering/svg/SVGTextChunkBuilder.h \ rendering/svg/SVGTextFragment.h \ @@ -2391,15 +2406,6 @@ HEADERS += \ rendering/svg/SVGTextLayoutEngineSpacing.h \ rendering/svg/SVGTextMetrics.h \ rendering/svg/SVGTextQuery.h \ - rendering/SVGImageBufferTools.h \ - rendering/SVGMarkerData.h \ - rendering/SVGMarkerLayoutInfo.h \ - rendering/SVGRenderSupport.h \ - rendering/SVGRenderTreeAsText.h \ - rendering/SVGResources.h \ - rendering/SVGResourcesCache.h \ - rendering/SVGResourcesCycleSolver.h \ - rendering/SVGShadowTreeElements.h \ rendering/TextControlInnerElements.h \ rendering/TransformState.h \ svg/animation/SMILTimeContainer.h \ @@ -2649,18 +2655,18 @@ HEADERS += \ xml/XSLTExtensions.h \ xml/XSLTProcessor.h \ xml/XSLTUnicodeSort.h \ - $$PWD/../../WebKit/qt/Api/qwebplugindatabase_p.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/InspectorServerQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/QtFallbackWebPopup.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/PageClientQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/QtPlatformPlugin.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/PopupMenuQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/SearchPopupMenuQt.h \ - $$PWD/../../WebKit/qt/WebCoreSupport/WebPlatformStrategies.h \ + $$PWD/../../Source/WebKit/qt/Api/qwebplugindatabase_p.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/InspectorServerQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/PageClientQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/QtPlatformPlugin.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/PopupMenuQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/SearchPopupMenuQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.h \ $$PWD/platform/network/qt/DnsPrefetchHelper.h v8 { @@ -2748,39 +2754,39 @@ SOURCES += \ platform/text/qt/TextCodecQt.cpp \ platform/qt/WheelEventQt.cpp \ platform/qt/WidgetQt.cpp \ - ../../WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp \ - ../../WebKit/qt/WebCoreSupport/ChromeClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DragClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp \ - ../../WebKit/qt/WebCoreSupport/EditorClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/EditCommandQt.cpp \ - ../../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp \ - ../../WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/InspectorClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/InspectorServerQt.cpp \ - ../../WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/PageClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/PopupMenuQt.cpp \ - ../../WebKit/qt/WebCoreSupport/QtPlatformPlugin.cpp \ - ../../WebKit/qt/WebCoreSupport/SearchPopupMenuQt.cpp \ - ../../WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp \ - ../../WebKit/qt/Api/qwebframe.cpp \ - ../../WebKit/qt/Api/qgraphicswebview.cpp \ - ../../WebKit/qt/Api/qwebpage.cpp \ - ../../WebKit/qt/Api/qwebview.cpp \ - ../../WebKit/qt/Api/qwebelement.cpp \ - ../../WebKit/qt/Api/qwebhistory.cpp \ - ../../WebKit/qt/Api/qwebsettings.cpp \ - ../../WebKit/qt/Api/qwebhistoryinterface.cpp \ - ../../WebKit/qt/Api/qwebplugindatabase.cpp \ - ../../WebKit/qt/Api/qwebpluginfactory.cpp \ - ../../WebKit/qt/Api/qwebsecurityorigin.cpp \ - ../../WebKit/qt/Api/qwebscriptworld.cpp \ - ../../WebKit/qt/Api/qwebdatabase.cpp \ - ../../WebKit/qt/Api/qwebinspector.cpp \ - ../../WebKit/qt/Api/qwebkitversion.cpp + ../../Source/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/ContextMenuClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DragClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/EditorClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/EditCommandQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/GeolocationPermissionClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/NotificationPresenterClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/PopupMenuQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/QtPlatformPlugin.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/SearchPopupMenuQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/WebPlatformStrategies.cpp \ + ../../Source/WebKit/qt/Api/qwebframe.cpp \ + ../../Source/WebKit/qt/Api/qgraphicswebview.cpp \ + ../../Source/WebKit/qt/Api/qwebpage.cpp \ + ../../Source/WebKit/qt/Api/qwebview.cpp \ + ../../Source/WebKit/qt/Api/qwebelement.cpp \ + ../../Source/WebKit/qt/Api/qwebhistory.cpp \ + ../../Source/WebKit/qt/Api/qwebsettings.cpp \ + ../../Source/WebKit/qt/Api/qwebhistoryinterface.cpp \ + ../../Source/WebKit/qt/Api/qwebplugindatabase.cpp \ + ../../Source/WebKit/qt/Api/qwebpluginfactory.cpp \ + ../../Source/WebKit/qt/Api/qwebsecurityorigin.cpp \ + ../../Source/WebKit/qt/Api/qwebscriptworld.cpp \ + ../../Source/WebKit/qt/Api/qwebdatabase.cpp \ + ../../Source/WebKit/qt/Api/qwebinspector.cpp \ + ../../Source/WebKit/qt/Api/qwebkitversion.cpp contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) { HEADERS += platform/qt/QtMobileWebStyle.h @@ -2788,8 +2794,8 @@ contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) { } maemo5 { - HEADERS += ../../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h - SOURCES += ../../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp + HEADERS += ../../Source/WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h + SOURCES += ../../Source/WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp } contains(DEFINES, ENABLE_SMOOTH_SCROLLING=1) { @@ -3251,8 +3257,13 @@ contains(DEFINES, ENABLE_VIDEO=1) { PKGCONFIG += glib-2.0 gio-2.0 gstreamer-0.10 gstreamer-app-0.10 gstreamer-base-0.10 gstreamer-interfaces-0.10 gstreamer-pbutils-0.10 gstreamer-plugins-base-0.10 gstreamer-video-0.10 } else:contains(MOBILITY_CONFIG, multimedia) { - HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h - SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp + HEADERS += \ + platform/graphics/qt/MediaPlayerPrivateQt.h \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.h + + SOURCES += \ + platform/graphics/qt/MediaPlayerPrivateQt.cpp \ + $$PWD/../../Source/WebKit/qt/WebCoreSupport/FullScreenVideoQt.cpp CONFIG *= mobility MOBILITY += multimedia @@ -3346,16 +3357,16 @@ contains(DEFINES, ENABLE_MATHML=1) { mathml/MathMLInlineContainerElement.cpp \ mathml/MathMLMathElement.cpp \ mathml/MathMLTextElement.cpp \ - mathml/RenderMathMLBlock.cpp \ - mathml/RenderMathMLFenced.cpp \ - mathml/RenderMathMLFraction.cpp \ - mathml/RenderMathMLMath.cpp \ - mathml/RenderMathMLOperator.cpp \ - mathml/RenderMathMLRoot.cpp \ - mathml/RenderMathMLRow.cpp \ - mathml/RenderMathMLSquareRoot.cpp \ - mathml/RenderMathMLSubSup.cpp \ - mathml/RenderMathMLUnderOver.cpp + rendering/mathml/RenderMathMLBlock.cpp \ + rendering/mathml/RenderMathMLFenced.cpp \ + rendering/mathml/RenderMathMLFraction.cpp \ + rendering/mathml/RenderMathMLMath.cpp \ + rendering/mathml/RenderMathMLOperator.cpp \ + rendering/mathml/RenderMathMLRoot.cpp \ + rendering/mathml/RenderMathMLRow.cpp \ + rendering/mathml/RenderMathMLSquareRoot.cpp \ + rendering/mathml/RenderMathMLSubSup.cpp \ + rendering/mathml/RenderMathMLUnderOver.cpp } contains(DEFINES, ENABLE_WML=1) { @@ -3438,18 +3449,18 @@ contains(DEFINES, ENABLE_GEOLOCATION=1) { contains(DEFINES, ENABLE_DEVICE_ORIENTATION=1) { HEADERS += \ - ../../WebKit/qt/WebCoreSupport/DeviceMotionClientQt.h \ - ../../WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.h \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.h \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationClientMockQt.h \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.h + ../../Source/WebKit/qt/WebCoreSupport/DeviceMotionClientQt.h \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.h \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.h \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientMockQt.h \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.h SOURCES += \ - ../../WebKit/qt/WebCoreSupport/DeviceMotionClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationClientMockQt.cpp \ - ../../WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.cpp + ../../Source/WebKit/qt/WebCoreSupport/DeviceMotionClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceMotionProviderQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationClientMockQt.cpp \ + ../../Source/WebKit/qt/WebCoreSupport/DeviceOrientationProviderQt.cpp CONFIG += mobility MOBILITY += sensors @@ -3470,15 +3481,46 @@ contains(DEFINES, ENABLE_SVG=1) { css/SVGCSSStyleSelector.cpp \ rendering/style/SVGRenderStyle.cpp \ rendering/style/SVGRenderStyleDefs.cpp \ + rendering/svg/RenderSVGBlock.cpp \ + rendering/svg/RenderSVGContainer.cpp \ + rendering/svg/RenderSVGForeignObject.cpp \ + rendering/svg/RenderSVGGradientStop.cpp \ + rendering/svg/RenderSVGHiddenContainer.cpp \ + rendering/svg/RenderSVGImage.cpp \ rendering/svg/RenderSVGInline.cpp \ rendering/svg/RenderSVGInlineText.cpp \ + rendering/svg/RenderSVGModelObject.cpp \ rendering/svg/RenderSVGPath.cpp \ + rendering/svg/RenderSVGResource.cpp \ + rendering/svg/RenderSVGResourceClipper.cpp \ + rendering/svg/RenderSVGResourceContainer.cpp \ + rendering/svg/RenderSVGResourceFilter.cpp \ + rendering/svg/RenderSVGResourceFilterPrimitive.cpp \ + rendering/svg/RenderSVGResourceGradient.cpp \ + rendering/svg/RenderSVGResourceLinearGradient.cpp \ + rendering/svg/RenderSVGResourceMarker.cpp \ + rendering/svg/RenderSVGResourceMasker.cpp \ + rendering/svg/RenderSVGResourcePattern.cpp \ + rendering/svg/RenderSVGResourceRadialGradient.cpp \ + rendering/svg/RenderSVGResourceSolidColor.cpp \ + rendering/svg/RenderSVGRoot.cpp \ + rendering/svg/RenderSVGShadowTreeRootContainer.cpp \ rendering/svg/RenderSVGTSpan.cpp \ rendering/svg/RenderSVGText.cpp \ rendering/svg/RenderSVGTextPath.cpp \ + rendering/svg/RenderSVGTransformableContainer.cpp \ + rendering/svg/RenderSVGViewportContainer.cpp \ + rendering/svg/SVGImageBufferTools.cpp \ rendering/svg/SVGInlineFlowBox.cpp \ rendering/svg/SVGInlineTextBox.cpp \ + rendering/svg/SVGMarkerLayoutInfo.cpp \ + rendering/svg/SVGRenderSupport.cpp \ + rendering/svg/SVGRenderTreeAsText.cpp \ + rendering/svg/SVGResources.cpp \ + rendering/svg/SVGResourcesCache.cpp \ + rendering/svg/SVGResourcesCycleSolver.cpp \ rendering/svg/SVGRootInlineBox.cpp \ + rendering/svg/SVGShadowTreeElements.cpp \ rendering/svg/SVGTextChunk.cpp \ rendering/svg/SVGTextChunkBuilder.cpp \ rendering/svg/SVGTextLayoutAttributes.cpp \ @@ -3628,37 +3670,7 @@ contains(DEFINES, ENABLE_SVG=1) { svg/graphics/filters/SVGFilter.cpp \ svg/graphics/filters/SVGFilterBuilder.cpp \ svg/graphics/SVGImage.cpp \ - svg/properties/SVGPathSegListPropertyTearOff.cpp \ - rendering/RenderForeignObject.cpp \ - rendering/RenderSVGBlock.cpp \ - rendering/RenderSVGContainer.cpp \ - rendering/RenderSVGGradientStop.cpp \ - rendering/RenderSVGHiddenContainer.cpp \ - rendering/RenderSVGImage.cpp \ - rendering/RenderSVGModelObject.cpp \ - rendering/RenderSVGResource.cpp \ - rendering/RenderSVGResourceClipper.cpp \ - rendering/RenderSVGResourceContainer.cpp \ - rendering/RenderSVGResourceFilter.cpp \ - rendering/RenderSVGResourceFilterPrimitive.cpp \ - rendering/RenderSVGResourceGradient.cpp \ - rendering/RenderSVGResourceLinearGradient.cpp \ - rendering/RenderSVGResourceMarker.cpp \ - rendering/RenderSVGResourceMasker.cpp \ - rendering/RenderSVGResourcePattern.cpp \ - rendering/RenderSVGResourceRadialGradient.cpp \ - rendering/RenderSVGResourceSolidColor.cpp \ - rendering/RenderSVGRoot.cpp \ - rendering/RenderSVGShadowTreeRootContainer.cpp \ - rendering/RenderSVGTransformableContainer.cpp \ - rendering/RenderSVGViewportContainer.cpp \ - rendering/SVGImageBufferTools.cpp \ - rendering/SVGMarkerLayoutInfo.cpp \ - rendering/SVGRenderSupport.cpp \ - rendering/SVGResources.cpp \ - rendering/SVGResourcesCache.cpp \ - rendering/SVGResourcesCycleSolver.cpp \ - rendering/SVGShadowTreeElements.cpp + svg/properties/SVGPathSegListPropertyTearOff.cpp } contains(DEFINES, ENABLE_JAVASCRIPT_DEBUGGER=1) { @@ -3853,7 +3865,7 @@ contains(DEFINES, ENABLE_SYMBIAN_DIALOG_PROVIDERS) { QMAKE_EXTRA_TARGETS += install } -include($$PWD/../../WebKit/qt/Api/headers.pri) +include($$PWD/../../Source/WebKit/qt/Api/headers.pri) HEADERS += $$WEBKIT_API_HEADERS @@ -3981,9 +3993,9 @@ contains(CONFIG, texmap) { symbian { shared { contains(CONFIG, def_files) { - DEF_FILE=../../WebKit/qt/symbian + DEF_FILE=../../Source/WebKit/qt/symbian # defFilePath is for Qt4.6 compatibility - defFilePath=../../WebKit/qt/symbian + defFilePath=../../Source/WebKit/qt/symbian } else { MMP_RULES += EXPORTUNFROZEN } diff --git a/Source/WebCore/WebCore.vcproj/QTMovieWin.vcproj b/Source/WebCore/WebCore.vcproj/QTMovieWin.vcproj index da717e5..7d85d2f 100644 --- a/Source/WebCore/WebCore.vcproj/QTMovieWin.vcproj +++ b/Source/WebCore/WebCore.vcproj/QTMovieWin.vcproj @@ -18,7 +18,7 @@ <Configuration Name="Debug|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" > <Tool @@ -79,7 +79,7 @@ <Configuration Name="Release|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" > <Tool @@ -140,7 +140,7 @@ <Configuration Name="Debug_All|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_all.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" > <Tool @@ -201,7 +201,7 @@ <Configuration Name="Release_LTCG|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" WholeProgramOptimization="1" > @@ -263,7 +263,7 @@ <Configuration Name="Release_Cairo_CFLite|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\release.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\WinCairo.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" > <Tool @@ -324,7 +324,7 @@ <Configuration Name="Debug_Cairo_CFLite|Win32" ConfigurationType="2" - InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\QTMovieWinCommon.vsprops" + InheritedPropertySheets="$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefinesCairo.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\common.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug.vsprops;$(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\debug_wincairo.vsprops;.\QTMovieWinCommon.vsprops" CharacterSet="1" > <Tool diff --git a/Source/WebCore/WebCore.vcproj/WebCore.vcproj b/Source/WebCore/WebCore.vcproj/WebCore.vcproj index 6c46417..39671a0 100755 --- a/Source/WebCore/WebCore.vcproj/WebCore.vcproj +++ b/Source/WebCore/WebCore.vcproj/WebCore.vcproj @@ -574,6 +574,10 @@ > </File> <File + RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\InjectedScriptSource.h" + > + </File> + <File RelativePath="$(ConfigurationBuildDir)\obj\WebCore\DerivedSources\JSAbstractWorker.cpp" > <FileConfiguration @@ -4070,6 +4074,62 @@ > </File> <File + RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSDOMURL.cpp" + > + <FileConfiguration + Name="Debug|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug_Cairo_CFLite|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="Release_Cairo_CFLite|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="Debug_All|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + <FileConfiguration + Name="Release_LTCG|Win32" + ExcludedFromBuild="true" + > + <Tool + Name="VCCLCompilerTool" + /> + </FileConfiguration> + </File> + <File + RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSDOMURL.h" + > + </File> + <File RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSDOMWindow.cpp" > <FileConfiguration @@ -26633,14 +26693,6 @@ > </File> <File - RelativePath="..\platform\graphics\Pen.cpp" - > - </File> - <File - RelativePath="..\platform\graphics\Pen.h" - > - </File> - <File RelativePath="..\platform\graphics\SegmentedFontData.cpp" > </File> @@ -33358,7 +33410,7 @@ > </File> <File - RelativePath="..\rendering\RenderForeignObject.cpp" + RelativePath="..\rendering\svg\RenderForeignObject.cpp" > <FileConfiguration Name="Debug|Win32" @@ -33410,7 +33462,7 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderForeignObject.h" + RelativePath="..\rendering\svg\RenderForeignObject.h" > </File> <File @@ -35462,11 +35514,11 @@ > </File> <File - RelativePath="..\rendering\RenderSVGAllInOne.cpp" + RelativePath="..\rendering\svg\RenderSVGAllInOne.cpp" > </File> <File - RelativePath="..\rendering\RenderSVGBlock.cpp" + RelativePath="..\rendering\svg\RenderSVGBlock.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35518,11 +35570,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGBlock.h" + RelativePath="..\rendering\svg\RenderSVGBlock.h" > </File> <File - RelativePath="..\rendering\RenderSVGContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35574,11 +35626,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGContainer.h" + RelativePath="..\rendering\svg\RenderSVGContainer.h" > </File> <File - RelativePath="..\rendering\RenderSVGGradientStop.cpp" + RelativePath="..\rendering\svg\RenderSVGGradientStop.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35630,11 +35682,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGGradientStop.h" + RelativePath="..\rendering\svg\RenderSVGGradientStop.h" > </File> <File - RelativePath="..\rendering\RenderSVGHiddenContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGHiddenContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35686,11 +35738,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGHiddenContainer.h" + RelativePath="..\rendering\svg\RenderSVGHiddenContainer.h" > </File> <File - RelativePath="..\rendering\RenderSVGImage.cpp" + RelativePath="..\rendering\svg\RenderSVGImage.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35742,11 +35794,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGImage.h" + RelativePath="..\rendering\svg\RenderSVGImage.h" > </File> <File - RelativePath="..\rendering\RenderSVGModelObject.cpp" + RelativePath="..\rendering\svg\RenderSVGModelObject.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35798,11 +35850,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGModelObject.h" + RelativePath="..\rendering\svg\RenderSVGModelObject.h" > </File> <File - RelativePath="..\rendering\RenderSVGResource.cpp" + RelativePath="..\rendering\svg\RenderSVGResource.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35854,11 +35906,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResource.h" + RelativePath="..\rendering\svg\RenderSVGResource.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceClipper.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceClipper.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35910,11 +35962,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceClipper.h" + RelativePath="..\rendering\svg\RenderSVGResourceClipper.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -35966,11 +36018,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceContainer.h" + RelativePath="..\rendering\svg\RenderSVGResourceContainer.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceFilter.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceFilter.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36022,11 +36074,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceFilter.h" + RelativePath="..\rendering\svg\RenderSVGResourceFilter.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceFilterPrimitive.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceFilterPrimitive.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36078,11 +36130,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceFilterPrimitive.h" + RelativePath="..\rendering\svg\RenderSVGResourceFilterPrimitive.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceGradient.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceGradient.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36134,11 +36186,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceGradient.h" + RelativePath="..\rendering\svg\RenderSVGResourceGradient.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceLinearGradient.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceLinearGradient.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36190,11 +36242,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceLinearGradient.h" + RelativePath="..\rendering\svg\RenderSVGResourceLinearGradient.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceMarker.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceMarker.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36246,11 +36298,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceMarker.h" + RelativePath="..\rendering\svg\RenderSVGResourceMarker.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceMasker.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceMasker.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36302,11 +36354,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceMasker.h" + RelativePath="..\rendering\svg\RenderSVGResourceMasker.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourcePattern.cpp" + RelativePath="..\rendering\svg\RenderSVGResourcePattern.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36358,11 +36410,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourcePattern.h" + RelativePath="..\rendering\svg\RenderSVGResourcePattern.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceRadialGradient.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceRadialGradient.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36414,11 +36466,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceRadialGradient.h" + RelativePath="..\rendering\svg\RenderSVGResourceRadialGradient.h" > </File> <File - RelativePath="..\rendering\RenderSVGResourceSolidColor.cpp" + RelativePath="..\rendering\svg\RenderSVGResourceSolidColor.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36470,11 +36522,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGResourceSolidColor.h" + RelativePath="..\rendering\svg\RenderSVGResourceSolidColor.h" > </File> <File - RelativePath="..\rendering\RenderSVGRoot.cpp" + RelativePath="..\rendering\svg\RenderSVGRoot.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36526,11 +36578,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGRoot.h" + RelativePath="..\rendering\svg\RenderSVGRoot.h" > </File> <File - RelativePath="..\rendering\RenderSVGShadowTreeRootContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGShadowTreeRootContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36582,11 +36634,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGShadowTreeRootContainer.h" + RelativePath="..\rendering\svg\RenderSVGShadowTreeRootContainer.h" > </File> <File - RelativePath="..\rendering\RenderSVGTransformableContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGTransformableContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -36638,11 +36690,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\RenderSVGTransformableContainer.h" + RelativePath="..\rendering\svg\RenderSVGTransformableContainer.h" > </File> <File - RelativePath="..\rendering\RenderSVGViewportContainer.cpp" + RelativePath="..\rendering\svg\RenderSVGViewportContainer.cpp" > <FileConfiguration Name="Debug|Win32" @@ -37896,11 +37948,11 @@ > </File> <File - RelativePath="..\rendering\SVGMarkerData.h" + RelativePath="..\rendering\svg\SVGMarkerData.h" > </File> <File - RelativePath="..\rendering\SVGMarkerLayoutInfo.cpp" + RelativePath="..\rendering\svg\SVGMarkerLayoutInfo.cpp" > <FileConfiguration Name="Debug|Win32" @@ -37952,11 +38004,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGMarkerLayoutInfo.h" + RelativePath="..\rendering\svg\SVGMarkerLayoutInfo.h" > </File> <File - RelativePath="..\rendering\SVGRenderSupport.cpp" + RelativePath="..\rendering\svg\SVGRenderSupport.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38008,11 +38060,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGRenderSupport.h" + RelativePath="..\rendering\svg\SVGRenderSupport.h" > </File> <File - RelativePath="..\rendering\SVGRenderTreeAsText.cpp" + RelativePath="..\rendering\svg\SVGRenderTreeAsText.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38064,11 +38116,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGRenderTreeAsText.h" + RelativePath="..\rendering\svg\SVGRenderTreeAsText.h" > </File> <File - RelativePath="..\rendering\SVGResources.cpp" + RelativePath="..\rendering\svg\SVGResources.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38120,11 +38172,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGResources.h" + RelativePath="..\rendering\svg\SVGResources.h" > </File> <File - RelativePath="..\rendering\SVGResourcesCache.cpp" + RelativePath="..\rendering\svg\SVGResourcesCache.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38176,11 +38228,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGResourcesCache.h" + RelativePath="..\rendering\svg\SVGResourcesCache.h" > </File> <File - RelativePath="..\rendering\SVGResourcesCycleSolver.cpp" + RelativePath="..\rendering\svg\SVGResourcesCycleSolver.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38232,11 +38284,11 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGResourcesCycleSolver.h" + RelativePath="..\rendering\svg\SVGResourcesCycleSolver.h" > </File> <File - RelativePath="..\rendering\SVGShadowTreeElements.cpp" + RelativePath="..\rendering\svg\SVGShadowTreeElements.cpp" > <FileConfiguration Name="Debug|Win32" @@ -38288,7 +38340,7 @@ </FileConfiguration> </File> <File - RelativePath="..\rendering\SVGShadowTreeElements.h" + RelativePath="..\rendering\svg\SVGShadowTreeElements.h" > </File> <File @@ -38412,6 +38464,90 @@ > </File> <Filter + Name="mathml" + > + <File + RelativePath="..\rendering\mathml\RenderMathMLBlock.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLBlock.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLFenced.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLFenced.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLFraction.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLFraction.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLMath.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLMath.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLOperator.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLOperator.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLRoot.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLRoot.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLRow.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLRow.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLSquareRoot.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLSquareRoot.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLSubSup.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLSubSup.h" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLUnderOver.cpp" + > + </File> + <File + RelativePath="..\rendering\mathml\RenderMathMLUnderOver.h" + > + </File> + </Filter> + <Filter Name="style" > <File @@ -50222,6 +50358,14 @@ > </File> <File + RelativePath="..\html\DOMURL.cpp" + > + </File> + <File + RelativePath="..\html\DOMURL.h" + > + </File> + <File RelativePath="..\html\EmailInputType.cpp" > </File> @@ -64045,7 +64189,7 @@ > </File> <File - RelativePath="..\ForwardingHeaders\runtime\Collector.h" + RelativePath="..\ForwardingHeaders\runtime\Heap.h" > </File> <File @@ -64866,6 +65010,14 @@ > </File> <File + RelativePath="..\inspector\InspectorBrowserDebuggerAgent.cpp" + > + </File> + <File + RelativePath="..\inspector\InspectorBrowserDebuggerAgent.h" + > + </File> + <File RelativePath="..\inspector\InspectorClient.cpp" > </File> @@ -64874,6 +65026,14 @@ > </File> <File + RelativePath="..\inspector\InspectorConsoleAgent.cpp" + > + </File> + <File + RelativePath="..\inspector\InspectorConsoleAgent.h" + > + </File> + <File RelativePath="..\inspector\InspectorController.cpp" > </File> @@ -64990,6 +65150,14 @@ > </File> <File + RelativePath="..\inspector\InspectorSettings.cpp" + > + </File> + <File + RelativePath="..\inspector\InspectorSettings.h" + > + </File> + <File RelativePath="..\inspector\InspectorState.cpp" > </File> @@ -65289,10 +65457,6 @@ > </File> <File - RelativePath="..\inspector\front-end\InjectedScript.js" - > - </File> - <File RelativePath="..\inspector\front-end\InjectedScriptAccess.js" > </File> @@ -66005,86 +66169,6 @@ RelativePath="..\mathml\MathMLTextElement.h" > </File> - <File - RelativePath="..\mathml\RenderMathMLBlock.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLBlock.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLFenced.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLFenced.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLFraction.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLFraction.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLMath.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLMath.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLOperator.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLOperator.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLRoot.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLRoot.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLRow.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLRow.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLSquareRoot.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLSquareRoot.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLSubSup.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLSubSup.h" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLUnderOver.cpp" - > - </File> - <File - RelativePath="..\mathml\RenderMathMLUnderOver.h" - > - </File> </Filter> <File RelativePath="..\config.h" diff --git a/Source/WebCore/WebCore.vcproj/WebCoreCommon.vsprops b/Source/WebCore/WebCore.vcproj/WebCoreCommon.vsprops index 91e046c..86b630f 100644 --- a/Source/WebCore/WebCore.vcproj/WebCoreCommon.vsprops +++ b/Source/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)..\fileapi";"$(ProjectDir)..\rendering";"$(ProjectDir)..\rendering\style";"$(ProjectDir)..\rendering\svg";"$(ProjectDir)..\bindings";"$(ProjectDir)..\bindings\generic";"$(ProjectDir)..\bindings\js";"$(ProjectDir)..\bindings\js\specialization";"$(ProjectDir)..\dom";"$(ProjectDir)..\dom\default";"$(ProjectDir)..\history";"$(ProjectDir)..\html";"$(ProjectDir)..\html\canvas";"$(ProjectDir)..\html\parser";"$(ProjectDir)..\html\shadow";"$(ProjectDir)..\inspector";"$(ProjectDir)..\loader";"$(ProjectDir)..\loader\appcache";"$(ProjectDir)..\loader\archive";"$(ProjectDir)..\loader\archive\cf";"$(ProjectDir)..\loader\cache";"$(ProjectDir)..\loader\icon";"$(ProjectDir)..\mathml";"$(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\ca";"$(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";"$(ConfigurationBuildDir)\obj\WebCore\DerivedSources";"$(ProjectDir)..\plugins";"$(ProjectDir)..\plugins\win";"$(ProjectDir)..\svg\animation";"$(ProjectDir)..\svg\graphics";"$(ProjectDir)..\svg\properties";"$(ProjectDir)..\svg\graphics\filters";"$(ProjectDir)..\svg";"$(ProjectDir)..\wml";"$(ProjectDir)..\storage";"$(ProjectDir)..\websockets";"$(ProjectDir)..\workers";"$(ConfigurationBuildDir)\include";"$(ConfigurationBuildDir)\include\private";"$(ConfigurationBuildDir)\include\JavaScriptCore";"$(ConfigurationBuildDir)\include\private\JavaScriptCore";"$(ProjectDir)..\ForwardingHeaders";"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\private";"$(WebKitLibrariesDir)\include\private\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\include\sqlite";"$(WebKitLibrariesDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\zlib"" + AdditionalIncludeDirectories=""$(ProjectDir)..";"$(ProjectDir)..\accessibility";"$(ProjectDir)..\accessibility\win";"$(ProjectDir)..\bridge";"$(ProjectDir)..\bridge\c";"$(ProjectDir)..\bridge\jsc";"$(ProjectDir)..\css";"$(ProjectDir)..\editing";"$(ProjectDir)..\fileapi";"$(ProjectDir)..\rendering";"$(ProjectDir)..\rendering\mathml";"$(ProjectDir)..\rendering\style";"$(ProjectDir)..\rendering\svg";"$(ProjectDir)..\bindings";"$(ProjectDir)..\bindings\generic";"$(ProjectDir)..\bindings\js";"$(ProjectDir)..\bindings\js\specialization";"$(ProjectDir)..\dom";"$(ProjectDir)..\dom\default";"$(ProjectDir)..\history";"$(ProjectDir)..\html";"$(ProjectDir)..\html\canvas";"$(ProjectDir)..\html\parser";"$(ProjectDir)..\html\shadow";"$(ProjectDir)..\inspector";"$(ProjectDir)..\loader";"$(ProjectDir)..\loader\appcache";"$(ProjectDir)..\loader\archive";"$(ProjectDir)..\loader\archive\cf";"$(ProjectDir)..\loader\cache";"$(ProjectDir)..\loader\icon";"$(ProjectDir)..\mathml";"$(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\ca";"$(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";"$(ConfigurationBuildDir)\obj\WebCore\DerivedSources";"$(ProjectDir)..\plugins";"$(ProjectDir)..\plugins\win";"$(ProjectDir)..\svg\animation";"$(ProjectDir)..\svg\graphics";"$(ProjectDir)..\svg\properties";"$(ProjectDir)..\svg\graphics\filters";"$(ProjectDir)..\svg";"$(ProjectDir)..\wml";"$(ProjectDir)..\storage";"$(ProjectDir)..\websockets";"$(ProjectDir)..\workers";"$(ConfigurationBuildDir)\include";"$(ConfigurationBuildDir)\include\private";"$(ConfigurationBuildDir)\include\JavaScriptCore";"$(ConfigurationBuildDir)\include\private\JavaScriptCore";"$(ProjectDir)..\ForwardingHeaders";"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\private";"$(WebKitLibrariesDir)\include\private\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\include\sqlite";"$(WebKitLibrariesDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\zlib"" PreprocessorDefinitions="__WIN32__;DISABLE_3D_RENDERING;WEBCORE_CONTEXT_MENUS" UsePrecompiledHeader="2" PrecompiledHeaderThrough="WebCorePrefix.h" diff --git a/Source/WebCore/WebCore.vcproj/build-generated-files.sh b/Source/WebCore/WebCore.vcproj/build-generated-files.sh index 3d15ad9..5660538 100644 --- a/Source/WebCore/WebCore.vcproj/build-generated-files.sh +++ b/Source/WebCore/WebCore.vcproj/build-generated-files.sh @@ -26,7 +26,7 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -NUMCPUS=`../../Tools/Scripts/num-cpus` +NUMCPUS=`../../../Tools/Scripts/num-cpus` XSRCROOT="`pwd`/.." XSRCROOT=`realpath "$XSRCROOT"` diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj index 1d07372..ed86c67 100644 --- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj +++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj @@ -63,7 +63,6 @@ 0804BF6E0EE09C3B0006C000 /* WMLDoElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */; }; 0804BF6F0EE09C3B0006C000 /* WMLDoElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */; }; 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 0806E57912893045007CED32 /* SVGMatrix.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08082373117987C100241DE8 /* RenderSVGResourceContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 08082372117987C100241DE8 /* RenderSVGResourceContainer.h */; }; 080AEC810ED8708B00DF4CCE /* WMLIntrinsicEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */; }; 080AEC820ED8708B00DF4CCE /* WMLIntrinsicEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */; }; 080AEC830ED8708B00DF4CCE /* WMLIntrinsicEventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 080AEC7F0ED8708B00DF4CCE /* WMLIntrinsicEventHandler.cpp */; }; @@ -97,10 +96,6 @@ 0823D159127AD6AC000EBC95 /* SVGAnimatedInteger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */; settings = {ATTRIBUTES = (Private, ); }; }; 08250939128BD4D800E2ED8E /* SVGAnimatedTransformList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */; settings = {ATTRIBUTES = (Private, ); }; }; 082DE42D1292621600D923DF /* SVGPathSegWithContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 082DE42C1292621600D923DF /* SVGPathSegWithContext.h */; }; - 083192AA112B43050083C3B9 /* RenderSVGResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 083192A7112B43050083C3B9 /* RenderSVGResource.h */; }; - 083192AB112B43050083C3B9 /* RenderSVGResourceMasker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */; }; - 083192AC112B43050083C3B9 /* RenderSVGResourceMasker.h in Headers */ = {isa = PBXBuildFile; fileRef = 083192A9112B43050083C3B9 /* RenderSVGResourceMasker.h */; }; - 08385FF610F0186000BFE07B /* SVGMarkerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 08385FF510F0186000BFE07B /* SVGMarkerData.h */; }; 0839476C0ECE4BD600027350 /* WMLElementFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08FB84B00ECE373300DC064E /* WMLElementFactory.cpp */; }; 0839476D0ECE4BD600027350 /* WMLElementFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 08FB84B10ECE373300DC064E /* WMLElementFactory.h */; }; 083DAEA60F01A7FB00342754 /* RenderTextControlMultiLine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 083DAEA20F01A7FB00342754 /* RenderTextControlMultiLine.cpp */; }; @@ -114,10 +109,6 @@ 084CE5CC0F27DADC00E6240E /* WMLOptGroupElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 084CE5C80F27DADC00E6240E /* WMLOptGroupElement.h */; }; 084CE5CD0F27DADC00E6240E /* WMLOptionElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084CE5C90F27DADC00E6240E /* WMLOptionElement.cpp */; }; 084CE5CE0F27DADC00E6240E /* WMLOptionElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 084CE5CA0F27DADC00E6240E /* WMLOptionElement.h */; }; - 084D0E3C11F5816100081E1A /* SVGResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084D0E3811F5816100081E1A /* SVGResources.cpp */; }; - 084D0E3D11F5816100081E1A /* SVGResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 084D0E3911F5816100081E1A /* SVGResources.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 084D0E3E11F5816100081E1A /* SVGResourcesCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084D0E3A11F5816100081E1A /* SVGResourcesCache.cpp */; }; - 084D0E3F11F5816100081E1A /* SVGResourcesCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 084D0E3B11F5816100081E1A /* SVGResourcesCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; 084DB59B128008CC002A6D64 /* SVGAnimatedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 084DB59A128008CC002A6D64 /* SVGAnimatedString.h */; settings = {ATTRIBUTES = (Private, ); }; }; 084DBAA10ED39D360038C226 /* WMLVariables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 084DBA9D0ED39D350038C226 /* WMLVariables.cpp */; }; 084DBAA20ED39D360038C226 /* WMLVariables.h in Headers */ = {isa = PBXBuildFile; fileRef = 084DBA9E0ED39D360038C226 /* WMLVariables.h */; }; @@ -140,30 +131,22 @@ 0854B0231255E4E600B9CDD0 /* SVGRootInlineBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854B0111255E4E600B9CDD0 /* SVGRootInlineBox.h */; }; 0854B0241255E4E600B9CDD0 /* SVGTextQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0854B0121255E4E600B9CDD0 /* SVGTextQuery.cpp */; }; 0854B0251255E4E600B9CDD0 /* SVGTextQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 0854B0131255E4E600B9CDD0 /* SVGTextQuery.h */; }; - 08563BB4117861780012B578 /* RenderSVGResourcePattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08563BB2117861770012B578 /* RenderSVGResourcePattern.cpp */; }; - 08563BB5117861780012B578 /* RenderSVGResourcePattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 08563BB3117861770012B578 /* RenderSVGResourcePattern.h */; }; - 08563BD0117865F50012B578 /* RenderSVGResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08563BCF117865F50012B578 /* RenderSVGResource.cpp */; }; 085797091278394C00A8EC5F /* SVGAnimatedBoolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */; settings = {ATTRIBUTES = (Private, ); }; }; 08591AA50F085C4E009BACB1 /* InputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08591AA40F085C4E009BACB1 /* InputElement.h */; settings = {ATTRIBUTES = (Private, ); }; }; 085A15931289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; }; 085AFDC80F2977350061F2B3 /* WMLFormControlElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */; }; 085AFDC90F2977350061F2B3 /* WMLFormControlElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */; settings = {ATTRIBUTES = (); }; }; - 085B05C211FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */; }; - 085B05C311FAE16C004D65F6 /* SVGResourcesCycleSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 085B05C111FAE16C004D65F6 /* SVGResourcesCycleSolver.h */; }; 085B92BA0EFDE73D00E6123C /* FormDataBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 085B92B80EFDE73D00E6123C /* FormDataBuilder.cpp */; }; 085B92BB0EFDE73D00E6123C /* FormDataBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 085B92B90EFDE73D00E6123C /* FormDataBuilder.h */; settings = {ATTRIBUTES = (); }; }; 08641D4712142F7D008DE9F6 /* RenderImageResourceStyleImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08641D4512142F7D008DE9F6 /* RenderImageResourceStyleImage.cpp */; }; 08641D4812142F7D008DE9F6 /* RenderImageResourceStyleImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 08641D4612142F7D008DE9F6 /* RenderImageResourceStyleImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0865CCE60EDDF51B00DF9EC3 /* WMLNoopElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0865CCE40EDDF51B00DF9EC3 /* WMLNoopElement.cpp */; }; 0865CCE70EDDF51B00DF9EC3 /* WMLNoopElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 0865CCE50EDDF51B00DF9EC3 /* WMLNoopElement.h */; }; - 086A400611F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 086A400511F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp */; }; 08700BE70F086C5300919419 /* InputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08700BE60F086C5300919419 /* InputElement.cpp */; }; 087281550F26B9B600AFC596 /* OptionElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 087281510F26B9B600AFC596 /* OptionElement.cpp */; }; 087281560F26B9B600AFC596 /* OptionElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 087281520F26B9B600AFC596 /* OptionElement.h */; }; 087281570F26B9B600AFC596 /* OptionGroupElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 087281530F26B9B600AFC596 /* OptionGroupElement.cpp */; }; 087281580F26B9B600AFC596 /* OptionGroupElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 087281540F26B9B600AFC596 /* OptionGroupElement.h */; }; - 08735FB810E91232006D6FAD /* SVGMarkerLayoutInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08735FB610E91232006D6FAD /* SVGMarkerLayoutInfo.cpp */; }; - 08735FB910E91232006D6FAD /* SVGMarkerLayoutInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 08735FB710E91232006D6FAD /* SVGMarkerLayoutInfo.h */; }; 08744BAA0EDB7D86004C9E63 /* WMLOnEventElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08744BA90EDB7D86004C9E63 /* WMLOnEventElement.cpp */; }; 08744BAE0EDB7D92004C9E63 /* WMLOnEventElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08744BAD0EDB7D92004C9E63 /* WMLOnEventElement.h */; }; 087B84961272CEC800A14417 /* SVGAnimatedAngle.h in Headers */ = {isa = PBXBuildFile; fileRef = 087B84951272CEC700A14417 /* SVGAnimatedAngle.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -223,20 +206,10 @@ 08A48A6E0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */; }; 08B35B13127B6A7C005314DD /* SVGAnimatedNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B35B12127B6A7C005314DD /* SVGAnimatedNumber.h */; settings = {ATTRIBUTES = (Private, ); }; }; 08B35B17127B6A88005314DD /* SVGAnimatedNumberList.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B35B16127B6A88005314DD /* SVGAnimatedNumberList.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08C34AF51179C057002D7456 /* RenderSVGResourceGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C34AF11179C056002D7456 /* RenderSVGResourceGradient.cpp */; }; - 08C34AF61179C057002D7456 /* RenderSVGResourceGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C34AF21179C057002D7456 /* RenderSVGResourceGradient.h */; }; - 08C34AF71179C057002D7456 /* RenderSVGResourceLinearGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C34AF31179C057002D7456 /* RenderSVGResourceLinearGradient.cpp */; }; - 08C34AF81179C057002D7456 /* RenderSVGResourceLinearGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C34AF41179C057002D7456 /* RenderSVGResourceLinearGradient.h */; }; - 08C34AFD1179C072002D7456 /* RenderSVGResourceRadialGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C34AFB1179C072002D7456 /* RenderSVGResourceRadialGradient.cpp */; }; - 08C34AFE1179C072002D7456 /* RenderSVGResourceRadialGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C34AFC1179C072002D7456 /* RenderSVGResourceRadialGradient.h */; }; - 08C46B691212F15E0011AF40 /* SVGImageBufferTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C46B671212F15D0011AF40 /* SVGImageBufferTools.cpp */; }; - 08C46B6A1212F15E0011AF40 /* SVGImageBufferTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C46B681212F15D0011AF40 /* SVGImageBufferTools.h */; }; 08C4C5180EF19A4000E4840F /* WMLImageElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C4C5140EF19A4000E4840F /* WMLImageElement.cpp */; }; 08C4C5190EF19A4000E4840F /* WMLImageElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C4C5150EF19A4000E4840F /* WMLImageElement.h */; }; 08C4C51A0EF19A4000E4840F /* WMLImageLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C4C5160EF19A4000E4840F /* WMLImageLoader.cpp */; }; 08C4C51B0EF19A4000E4840F /* WMLImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C4C5170EF19A4000E4840F /* WMLImageLoader.h */; }; - 08C6A7AB117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */; }; - 08C6A7AC117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */; }; 08C7136E128956A3001B107E /* SVGTransformListPropertyTearOff.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */; settings = {ATTRIBUTES = (Private, ); }; }; 08C7A2C710DC7462002D368B /* SVGNames.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 656581E909D1508D000E61D7 /* SVGNames.h */; }; 08C859C01274575400A5728D /* SVGAnimatedRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 08C859BF1274575300A5728D /* SVGAnimatedRect.h */; settings = {ATTRIBUTES = (Private, ); }; }; @@ -246,10 +219,6 @@ 08CD61BC0ED3929C002DDF51 /* WMLTaskElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */; }; 08CD61BD0ED3929C002DDF51 /* WMLTaskElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */; }; 08D46CE3127AD5FC0089694B /* SVGAnimatedEnumeration.h in Headers */ = {isa = PBXBuildFile; fileRef = 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08DAB9BA1103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08DAB9B81103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.cpp */; }; - 08DAB9BB1103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DAB9B91103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.h */; }; - 08DAB9C21103D9C1003E7ABA /* SVGShadowTreeElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08DAB9C01103D9C1003E7ABA /* SVGShadowTreeElements.cpp */; }; - 08DAB9C31103D9C1003E7ABA /* SVGShadowTreeElements.h in Headers */ = {isa = PBXBuildFile; fileRef = 08DAB9C11103D9C1003E7ABA /* SVGShadowTreeElements.h */; }; 08E192530EDE0C3A0087B780 /* WMLErrorHandling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E192510EDE0C390087B780 /* WMLErrorHandling.cpp */; }; 08E192540EDE0C3A0087B780 /* WMLErrorHandling.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E192520EDE0C3A0087B780 /* WMLErrorHandling.h */; }; 08E4FE460E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */; }; @@ -297,8 +266,6 @@ 0F580D000F12DE9B0051D689 /* RenderLayerBacking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F580CFC0F12DE9B0051D689 /* RenderLayerBacking.cpp */; }; 0F5B7A5410F65D7A00376302 /* RenderEmbeddedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F5B7A5210F65D7A00376302 /* RenderEmbeddedObject.cpp */; }; 0F5B7A5510F65D7A00376302 /* RenderEmbeddedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F5B7A5310F65D7A00376302 /* RenderEmbeddedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0F69B9C9120FE1D6000E1FC7 /* RenderMathMLFenced.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F69B9C7120FE1D6000E1FC7 /* RenderMathMLFenced.cpp */; }; - 0F69B9CA120FE1D6000E1FC7 /* RenderMathMLFenced.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F69B9C8120FE1D6000E1FC7 /* RenderMathMLFenced.h */; }; 0F6ECD450F252F3700BDE271 /* CSSPropertyLonghand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6ECD430F252F3700BDE271 /* CSSPropertyLonghand.h */; }; 0F6ECD460F252F3700BDE271 /* CSSPropertyLonghand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F6ECD440F252F3700BDE271 /* CSSPropertyLonghand.cpp */; }; 0FCF33240F2B9715004B6795 /* ColorCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FCF33230F2B9715004B6795 /* ColorCG.cpp */; }; @@ -312,10 +279,6 @@ 0FD308D6117D168500A791F7 /* RenderIFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD308D4117D168400A791F7 /* RenderIFrame.h */; }; 0FD723820EC8BD9300CA5DD7 /* FloatQuad.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD723800EC8BD9300CA5DD7 /* FloatQuad.h */; settings = {ATTRIBUTES = (Private, ); }; }; 0FD723830EC8BD9300CA5DD7 /* FloatQuad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FD723810EC8BD9300CA5DD7 /* FloatQuad.cpp */; }; - 0FF2859011864052007B7CD6 /* RenderMathMLRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FF2813211821CB6007B7CD6 /* RenderMathMLRoot.cpp */; }; - 0FF2859111864053007B7CD6 /* RenderMathMLRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF2813311821CB6007B7CD6 /* RenderMathMLRoot.h */; }; - 0FF2859211864054007B7CD6 /* RenderMathMLSquareRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FF2813411821CB6007B7CD6 /* RenderMathMLSquareRoot.cpp */; }; - 0FF2859311864055007B7CD6 /* RenderMathMLSquareRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF2813511821CB6007B7CD6 /* RenderMathMLSquareRoot.h */; }; 0FF5025B102BA9010066F39A /* DOMStyleMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF50259102BA9010066F39A /* DOMStyleMedia.h */; }; 0FF5025C102BA9010066F39A /* DOMStyleMedia.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FF5025A102BA9010066F39A /* DOMStyleMedia.mm */; }; 0FF50263102BA92C0066F39A /* DOMStyleMediaInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF50262102BA92B0066F39A /* DOMStyleMediaInternal.h */; }; @@ -382,8 +345,6 @@ 18F831B80FD48C7800D8C56B /* WorkerLoaderProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F831B70FD48C7800D8C56B /* WorkerLoaderProxy.h */; }; 1921327411C0E6BB00456238 /* SVGFEConvolveMatrixElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1921327111C0E6BB00456238 /* SVGFEConvolveMatrixElement.cpp */; }; 1921327511C0E6BB00456238 /* SVGFEConvolveMatrixElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 1921327211C0E6BB00456238 /* SVGFEConvolveMatrixElement.h */; }; - 19423B501234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */; }; - 19423B511234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */; }; 19BFF64B11C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 19BFF64611C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h */; }; 19BFF64C11C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = 19BFF64711C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm */; }; 19BFF64D11C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElementInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 19BFF64811C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElementInternal.h */; }; @@ -742,6 +703,10 @@ 2E2D99EA10E2BC3800496337 /* DOMBlobInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2D99E910E2BC3800496337 /* DOMBlobInternal.h */; }; 2E2D99EB10E2BD3900496337 /* DOMBlob.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 2E2D99E510E2BC1C00496337 /* DOMBlob.h */; }; 2E2D99EC10E2BD3900496337 /* DOMBlobInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 2E2D99E910E2BC3800496337 /* DOMBlobInternal.h */; }; + 2E37DFDA12DBAFB800A6B233 /* DOMURL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E37DFD712DBAFB800A6B233 /* DOMURL.cpp */; }; + 2E37DFDB12DBAFB800A6B233 /* DOMURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E37DFD812DBAFB800A6B233 /* DOMURL.h */; }; + 2E37E00512DBC5A400A6B233 /* JSDOMURL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E37E00312DBC5A400A6B233 /* JSDOMURL.cpp */; }; + 2E37E00612DBC5A400A6B233 /* JSDOMURL.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E37E00412DBC5A400A6B233 /* JSDOMURL.h */; }; 2E3BBF071162DA1100B9409A /* UUID.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E3BBF051162DA1100B9409A /* UUID.cpp */; }; 2E3BBF081162DA1100B9409A /* UUID.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E3BBF061162DA1100B9409A /* UUID.h */; }; 2E3BC0CA117D3E0800B9409A /* JSFileError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E3BC0C8117D3E0800B9409A /* JSFileError.cpp */; }; @@ -972,11 +937,99 @@ 41F1D21F0EF35C2A00DA8753 /* ScriptCachedFrameData.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F1D21D0EF35C2A00DA8753 /* ScriptCachedFrameData.h */; settings = {ATTRIBUTES = (Private, ); }; }; 41F1D2200EF35C2A00DA8753 /* ScriptCachedFrameData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41F1D21E0EF35C2A00DA8753 /* ScriptCachedFrameData.cpp */; }; 41F584C7104652CB009CAA64 /* JSMessagePortCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F584C6104652CB009CAA64 /* JSMessagePortCustom.h */; }; + 436708C012D9CA4B00044234 /* RenderSVGBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088112D9CA4A00044234 /* RenderSVGBlock.cpp */; }; + 436708C112D9CA4B00044234 /* RenderSVGBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088212D9CA4A00044234 /* RenderSVGBlock.h */; }; + 436708C212D9CA4B00044234 /* RenderSVGContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088312D9CA4A00044234 /* RenderSVGContainer.cpp */; }; + 436708C312D9CA4B00044234 /* RenderSVGContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088412D9CA4A00044234 /* RenderSVGContainer.h */; }; + 436708C412D9CA4B00044234 /* RenderSVGGradientStop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088512D9CA4A00044234 /* RenderSVGGradientStop.cpp */; }; + 436708C512D9CA4B00044234 /* RenderSVGGradientStop.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088612D9CA4A00044234 /* RenderSVGGradientStop.h */; }; + 436708C612D9CA4B00044234 /* RenderSVGHiddenContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088712D9CA4A00044234 /* RenderSVGHiddenContainer.cpp */; }; + 436708C712D9CA4B00044234 /* RenderSVGHiddenContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088812D9CA4A00044234 /* RenderSVGHiddenContainer.h */; }; + 436708C812D9CA4B00044234 /* RenderSVGImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088912D9CA4A00044234 /* RenderSVGImage.cpp */; }; + 436708C912D9CA4B00044234 /* RenderSVGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088A12D9CA4A00044234 /* RenderSVGImage.h */; }; + 436708CA12D9CA4B00044234 /* RenderSVGModelObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088B12D9CA4A00044234 /* RenderSVGModelObject.cpp */; }; + 436708CB12D9CA4B00044234 /* RenderSVGModelObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088C12D9CA4A00044234 /* RenderSVGModelObject.h */; }; + 436708CC12D9CA4B00044234 /* RenderSVGResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088D12D9CA4A00044234 /* RenderSVGResource.cpp */; }; + 436708CD12D9CA4B00044234 /* RenderSVGResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367088E12D9CA4A00044234 /* RenderSVGResource.h */; }; + 436708CE12D9CA4B00044234 /* RenderSVGResourceClipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367088F12D9CA4A00044234 /* RenderSVGResourceClipper.cpp */; }; + 436708CF12D9CA4B00044234 /* RenderSVGResourceClipper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089012D9CA4A00044234 /* RenderSVGResourceClipper.h */; }; + 436708D012D9CA4B00044234 /* RenderSVGResourceContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089112D9CA4A00044234 /* RenderSVGResourceContainer.cpp */; }; + 436708D112D9CA4B00044234 /* RenderSVGResourceContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089212D9CA4A00044234 /* RenderSVGResourceContainer.h */; }; + 436708D212D9CA4B00044234 /* RenderSVGResourceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089312D9CA4A00044234 /* RenderSVGResourceFilter.cpp */; }; + 436708D312D9CA4B00044234 /* RenderSVGResourceFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089412D9CA4A00044234 /* RenderSVGResourceFilter.h */; }; + 436708D412D9CA4B00044234 /* RenderSVGResourceFilterPrimitive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089512D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.cpp */; }; + 436708D512D9CA4B00044234 /* RenderSVGResourceFilterPrimitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089612D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.h */; }; + 436708D612D9CA4B00044234 /* RenderSVGResourceGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089712D9CA4A00044234 /* RenderSVGResourceGradient.cpp */; }; + 436708D712D9CA4B00044234 /* RenderSVGResourceGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089812D9CA4A00044234 /* RenderSVGResourceGradient.h */; }; + 436708D812D9CA4B00044234 /* RenderSVGResourceLinearGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089912D9CA4B00044234 /* RenderSVGResourceLinearGradient.cpp */; }; + 436708D912D9CA4B00044234 /* RenderSVGResourceLinearGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089A12D9CA4B00044234 /* RenderSVGResourceLinearGradient.h */; }; + 436708DA12D9CA4B00044234 /* RenderSVGResourceMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089B12D9CA4B00044234 /* RenderSVGResourceMarker.cpp */; }; + 436708DB12D9CA4B00044234 /* RenderSVGResourceMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089C12D9CA4B00044234 /* RenderSVGResourceMarker.h */; }; + 436708DC12D9CA4B00044234 /* RenderSVGResourceMasker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089D12D9CA4B00044234 /* RenderSVGResourceMasker.cpp */; }; + 436708DD12D9CA4B00044234 /* RenderSVGResourceMasker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4367089E12D9CA4B00044234 /* RenderSVGResourceMasker.h */; }; + 436708DE12D9CA4B00044234 /* RenderSVGResourcePattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4367089F12D9CA4B00044234 /* RenderSVGResourcePattern.cpp */; }; + 436708DF12D9CA4B00044234 /* RenderSVGResourcePattern.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708A012D9CA4B00044234 /* RenderSVGResourcePattern.h */; }; + 436708E012D9CA4B00044234 /* RenderSVGResourceRadialGradient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708A112D9CA4B00044234 /* RenderSVGResourceRadialGradient.cpp */; }; + 436708E112D9CA4B00044234 /* RenderSVGResourceRadialGradient.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708A212D9CA4B00044234 /* RenderSVGResourceRadialGradient.h */; }; + 436708E212D9CA4B00044234 /* RenderSVGResourceSolidColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708A312D9CA4B00044234 /* RenderSVGResourceSolidColor.cpp */; }; + 436708E312D9CA4B00044234 /* RenderSVGResourceSolidColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708A412D9CA4B00044234 /* RenderSVGResourceSolidColor.h */; }; + 436708E412D9CA4B00044234 /* RenderSVGRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708A512D9CA4B00044234 /* RenderSVGRoot.cpp */; }; + 436708E512D9CA4B00044234 /* RenderSVGRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708A612D9CA4B00044234 /* RenderSVGRoot.h */; }; + 436708E612D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708A712D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.cpp */; }; + 436708E712D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708A812D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.h */; }; + 436708E812D9CA4B00044234 /* RenderSVGTransformableContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708A912D9CA4B00044234 /* RenderSVGTransformableContainer.cpp */; }; + 436708E912D9CA4B00044234 /* RenderSVGTransformableContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708AA12D9CA4B00044234 /* RenderSVGTransformableContainer.h */; }; + 436708EA12D9CA4B00044234 /* RenderSVGViewportContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708AB12D9CA4B00044234 /* RenderSVGViewportContainer.cpp */; }; + 436708EB12D9CA4B00044234 /* RenderSVGViewportContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708AC12D9CA4B00044234 /* RenderSVGViewportContainer.h */; }; + 436708EC12D9CA4B00044234 /* SVGImageBufferTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708AD12D9CA4B00044234 /* SVGImageBufferTools.cpp */; }; + 436708ED12D9CA4B00044234 /* SVGImageBufferTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708AE12D9CA4B00044234 /* SVGImageBufferTools.h */; }; + 436708EE12D9CA4B00044234 /* SVGMarkerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708AF12D9CA4B00044234 /* SVGMarkerData.h */; }; + 436708EF12D9CA4B00044234 /* SVGMarkerLayoutInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708B012D9CA4B00044234 /* SVGMarkerLayoutInfo.cpp */; }; + 436708F012D9CA4B00044234 /* SVGMarkerLayoutInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708B112D9CA4B00044234 /* SVGMarkerLayoutInfo.h */; }; + 436708F112D9CA4B00044234 /* SVGRenderSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708B212D9CA4B00044234 /* SVGRenderSupport.cpp */; }; + 436708F212D9CA4B00044234 /* SVGRenderSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708B312D9CA4B00044234 /* SVGRenderSupport.h */; }; + 436708F312D9CA4B00044234 /* SVGRenderTreeAsText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708B412D9CA4B00044234 /* SVGRenderTreeAsText.cpp */; }; + 436708F412D9CA4B00044234 /* SVGRenderTreeAsText.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708B512D9CA4B00044234 /* SVGRenderTreeAsText.h */; }; + 436708F512D9CA4B00044234 /* SVGResources.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708B612D9CA4B00044234 /* SVGResources.cpp */; }; + 436708F612D9CA4B00044234 /* SVGResources.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708B712D9CA4B00044234 /* SVGResources.h */; }; + 436708F712D9CA4B00044234 /* SVGResourcesCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708B812D9CA4B00044234 /* SVGResourcesCache.cpp */; }; + 436708F812D9CA4B00044234 /* SVGResourcesCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708B912D9CA4B00044234 /* SVGResourcesCache.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 436708F912D9CA4B00044234 /* SVGResourcesCycleSolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708BA12D9CA4B00044234 /* SVGResourcesCycleSolver.cpp */; }; + 436708FA12D9CA4B00044234 /* SVGResourcesCycleSolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708BB12D9CA4B00044234 /* SVGResourcesCycleSolver.h */; }; + 436708FB12D9CA4B00044234 /* SVGShadowTreeElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 436708BC12D9CA4B00044234 /* SVGShadowTreeElements.cpp */; }; + 436708FC12D9CA4B00044234 /* SVGShadowTreeElements.h in Headers */ = {isa = PBXBuildFile; fileRef = 436708BD12D9CA4B00044234 /* SVGShadowTreeElements.h */; }; + 439046D712DA25E800AF80A2 /* RenderMathMLBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046C312DA25E800AF80A2 /* RenderMathMLBlock.cpp */; }; + 439046D812DA25E800AF80A2 /* RenderMathMLBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046C412DA25E800AF80A2 /* RenderMathMLBlock.h */; }; + 439046D912DA25E800AF80A2 /* RenderMathMLFenced.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046C512DA25E800AF80A2 /* RenderMathMLFenced.cpp */; }; + 439046DA12DA25E800AF80A2 /* RenderMathMLFenced.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046C612DA25E800AF80A2 /* RenderMathMLFenced.h */; }; + 439046DB12DA25E800AF80A2 /* RenderMathMLFraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046C712DA25E800AF80A2 /* RenderMathMLFraction.cpp */; }; + 439046DC12DA25E800AF80A2 /* RenderMathMLFraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046C812DA25E800AF80A2 /* RenderMathMLFraction.h */; }; + 439046DD12DA25E800AF80A2 /* RenderMathMLMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046C912DA25E800AF80A2 /* RenderMathMLMath.cpp */; }; + 439046DE12DA25E800AF80A2 /* RenderMathMLMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */; }; + 439046DF12DA25E800AF80A2 /* RenderMathMLOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */; }; + 439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */; }; + 439046E112DA25E800AF80A2 /* RenderMathMLRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */; }; + 439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */; }; + 439046E312DA25E800AF80A2 /* RenderMathMLRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */; }; + 439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046D012DA25E800AF80A2 /* RenderMathMLRow.h */; }; + 439046E512DA25E800AF80A2 /* RenderMathMLSquareRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046D112DA25E800AF80A2 /* RenderMathMLSquareRoot.cpp */; }; + 439046E612DA25E800AF80A2 /* RenderMathMLSquareRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046D212DA25E800AF80A2 /* RenderMathMLSquareRoot.h */; }; + 439046E712DA25E800AF80A2 /* RenderMathMLSubSup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046D312DA25E800AF80A2 /* RenderMathMLSubSup.cpp */; }; + 439046E812DA25E800AF80A2 /* RenderMathMLSubSup.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046D412DA25E800AF80A2 /* RenderMathMLSubSup.h */; }; + 439046E912DA25E800AF80A2 /* RenderMathMLUnderOver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 439046D512DA25E800AF80A2 /* RenderMathMLUnderOver.cpp */; }; + 439046EA12DA25E800AF80A2 /* RenderMathMLUnderOver.h in Headers */ = {isa = PBXBuildFile; fileRef = 439046D612DA25E800AF80A2 /* RenderMathMLUnderOver.h */; }; + 43C092BB12D9E4EE00A989C3 /* RenderSVGForeignObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43C092B912D9E4EE00A989C3 /* RenderSVGForeignObject.cpp */; }; + 43C092BC12D9E4EE00A989C3 /* RenderSVGForeignObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 43C092BA12D9E4EE00A989C3 /* RenderSVGForeignObject.h */; }; 4415292E0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 4415292C0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4415292F0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4415292D0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.cpp */; }; 441B055C0CD77A2D007C1F18 /* DOMHTMLEmbedElementPrivate.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 4429AAFB0CB84E88007647C5 /* DOMHTMLEmbedElementPrivate.h */; }; 441B055E0CD77A48007C1F18 /* DOMHTMLIFrameElementPrivate.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 4429AAFD0CB84EA5007647C5 /* DOMHTMLIFrameElementPrivate.h */; }; 441B05600CD77A65007C1F18 /* DOMHTMLObjectElementPrivate.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 4429AAFF0CB84EC3007647C5 /* DOMHTMLObjectElementPrivate.h */; }; + 44311CD612E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 44311CD412E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h */; }; + 44311CD712E4E22D000A8D19 /* DOMDocumentPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 44311CD512E4E22D000A8D19 /* DOMDocumentPrivate.h */; }; + 44311CD812E4E24B000A8D19 /* DOMDocumentPrivate.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 44311CD512E4E22D000A8D19 /* DOMDocumentPrivate.h */; }; + 44311CD912E4E257000A8D19 /* DOMDocumentFragmentPrivate.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 44311CD412E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h */; }; + 44311F8212E4E66C000A8D19 /* DOMDocumentFragmentInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711450AC5D5340053270F /* DOMDocumentFragmentInternal.h */; }; 445C8DB710015FC90031531A /* IconDatabaseNone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 445C8DB610015FC90031531A /* IconDatabaseNone.cpp */; }; 447D69030FA626810015CCB1 /* RuntimeApplicationChecks.h in Headers */ = {isa = PBXBuildFile; fileRef = 447D69010FA626810015CCB1 /* RuntimeApplicationChecks.h */; settings = {ATTRIBUTES = (Private, ); }; }; 447D69040FA626810015CCB1 /* RuntimeApplicationChecks.mm in Sources */ = {isa = PBXBuildFile; fileRef = 447D69020FA626810015CCB1 /* RuntimeApplicationChecks.mm */; }; @@ -984,6 +1037,8 @@ 448A29C00A46D9CB0030759F /* JSHTMLOptionsCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 448A29BE0A46D9CB0030759F /* JSHTMLOptionsCollection.cpp */; }; 448AD27C0A48137A0023D179 /* JSHTMLOptionsCollectionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 448AD27A0A4813790023D179 /* JSHTMLOptionsCollectionCustom.cpp */; }; 449B19F50FA72ECE0015CA4A /* HTMLParserQuirks.h in Headers */ = {isa = PBXBuildFile; fileRef = 449B19F30FA72ECE0015CA4A /* HTMLParserQuirks.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 44A28AAC12DFB8AC00AE923B /* MathMLElementFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A28AAB12DFB8AC00AE923B /* MathMLElementFactory.h */; }; + 44A28AAF12DFB8BF00AE923B /* MathMLNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A28AAE12DFB8BF00AE923B /* MathMLNames.h */; }; 4614A1FE0B23A8D600446E1C /* copyCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 4614A1FD0B23A8D600446E1C /* copyCursor.png */; }; 464EA2730B8A350B00A8E6E3 /* crossHairCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 464EA2710B8A350B00A8E6E3 /* crossHairCursor.png */; }; 464EA2740B8A350B00A8E6E3 /* notAllowedCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 464EA2720B8A350B00A8E6E3 /* notAllowedCursor.png */; }; @@ -1602,6 +1657,8 @@ 7A1F2B52126C61B20006A7E6 /* InspectorClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A1F2B51126C61B20006A7E6 /* InspectorClient.cpp */; }; 7A24587B1021EAF4000A00AA /* InspectorDOMAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */; }; 7A24587C1021EAF4000A00AA /* InspectorDOMAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 7A5640BF12DF9E5E00F4536D /* InspectorSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */; }; + 7A5640C012DF9E5E00F4536D /* InspectorSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */; }; 7A674BDB0F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A674BD90F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp */; }; 7A674BDC0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A674BDA0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h */; }; 7A74ECBA101839A600BF939E /* InspectorDOMStorageAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A74ECB8101839A500BF939E /* InspectorDOMStorageAgent.cpp */; }; @@ -1655,8 +1712,6 @@ 8419D2AD120D92FC00141F8F /* SVGPathByteStreamSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 8419D2AB120D92FC00141F8F /* SVGPathByteStreamSource.h */; }; 8419D2B9120E0C7600141F8F /* SVGPathStringBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8419D2B7120E0C7600141F8F /* SVGPathStringBuilder.cpp */; }; 8419D2BA120E0C7600141F8F /* SVGPathStringBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8419D2B8120E0C7600141F8F /* SVGPathStringBuilder.h */; }; - 841FDC261178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */; }; - 841FDC271178C9BE00F8AC9B /* RenderSVGResourceFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 841FDC251178C9BE00F8AC9B /* RenderSVGResourceFilter.h */; }; 84224183107E77F400766A87 /* JSSVGFEMorphologyElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84224181107E77F400766A87 /* JSSVGFEMorphologyElement.cpp */; }; 84224184107E77F400766A87 /* JSSVGFEMorphologyElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84224182107E77F400766A87 /* JSSVGFEMorphologyElement.h */; }; 8422418C107E786F00766A87 /* DOMSVGFEMorphologyElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 84224189107E786F00766A87 /* DOMSVGFEMorphologyElement.h */; }; @@ -1721,8 +1776,6 @@ 84852286119016A7006EDC7F /* DOMSVGVKernElement.mm in Sources */ = {isa = PBXBuildFile; fileRef = 84852282119016A7006EDC7F /* DOMSVGVKernElement.mm */; }; 8485228A1190173C006EDC7F /* SVGVKernElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 848522871190173C006EDC7F /* SVGVKernElement.cpp */; }; 8485228B1190173C006EDC7F /* SVGVKernElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 848522881190173C006EDC7F /* SVGVKernElement.h */; }; - 8499A514115FB33000F566E3 /* RenderSVGResourceMarker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8499A512115FB33000F566E3 /* RenderSVGResourceMarker.cpp */; }; - 8499A515115FB33000F566E3 /* RenderSVGResourceMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = 8499A513115FB33000F566E3 /* RenderSVGResourceMarker.h */; }; 849F77760EFEC6200090849D /* StrokeStyleApplier.h in Headers */ = {isa = PBXBuildFile; fileRef = 849F77750EFEC6200090849D /* StrokeStyleApplier.h */; }; 84A81F3D0FC7DFF000955300 /* SourceAlpha.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84A81F3B0FC7DFF000955300 /* SourceAlpha.cpp */; }; 84A81F3E0FC7DFF000955300 /* SourceAlpha.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A81F3C0FC7DFF000955300 /* SourceAlpha.h */; }; @@ -1730,8 +1783,6 @@ 84A81F420FC7E02700955300 /* SourceGraphic.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A81F400FC7E02700955300 /* SourceGraphic.h */; }; 84B6B977120F13E500B8EFAF /* SVGPathSegListSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B6B975120F13E500B8EFAF /* SVGPathSegListSource.cpp */; }; 84B6B978120F13E500B8EFAF /* SVGPathSegListSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B6B976120F13E500B8EFAF /* SVGPathSegListSource.h */; }; - 84BDA16B11358D2A00DBF64C /* RenderSVGResourceClipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BDA16911358D2A00DBF64C /* RenderSVGResourceClipper.cpp */; }; - 84BDA16C11358D2A00DBF64C /* RenderSVGResourceClipper.h in Headers */ = {isa = PBXBuildFile; fileRef = 84BDA16A11358D2A00DBF64C /* RenderSVGResourceClipper.h */; }; 84C5B2FA1216DC810088B53A /* SVGPathTraversalStateBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C5B2F81216DC810088B53A /* SVGPathTraversalStateBuilder.cpp */; }; 84C5B2FB1216DC810088B53A /* SVGPathTraversalStateBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 84C5B2F91216DC810088B53A /* SVGPathTraversalStateBuilder.h */; }; 84C6784C1214814700A92902 /* SVGPathBlender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C6784A1214814700A92902 /* SVGPathBlender.cpp */; }; @@ -1985,12 +2036,6 @@ 853BF4DB0ABB6B55008647BB /* DOMNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 853BF4D90ABB6B55008647BB /* DOMNode.h */; }; 853BF4DC0ABB6B55008647BB /* DOMNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = 853BF4DA0ABB6B55008647BB /* DOMNode.mm */; }; 853BF4EC0ABB6EB9008647BB /* DOMNode.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 853BF4D90ABB6B55008647BB /* DOMNode.h */; }; - 853CA9D60AEEC5E9002372DC /* RenderSVGContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 853CA9CA0AEEC5E9002372DC /* RenderSVGContainer.cpp */; }; - 853CA9D70AEEC5E9002372DC /* RenderSVGContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 853CA9CB0AEEC5E9002372DC /* RenderSVGContainer.h */; }; - 853CA9D80AEEC5E9002372DC /* RenderSVGImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 853CA9CC0AEEC5E9002372DC /* RenderSVGImage.cpp */; }; - 853CA9D90AEEC5E9002372DC /* RenderSVGImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 853CA9CD0AEEC5E9002372DC /* RenderSVGImage.h */; }; - 853CA9EC0AEEC63C002372DC /* RenderForeignObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 853CA9EA0AEEC63C002372DC /* RenderForeignObject.cpp */; }; - 853CA9ED0AEEC63C002372DC /* RenderForeignObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 853CA9EB0AEEC63C002372DC /* RenderForeignObject.h */; }; 854074FC0AD6C22E00620C57 /* DOMSVGNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 854074F90AD6C22E00620C57 /* DOMSVGNumber.h */; }; 854074FD0AD6C22E00620C57 /* DOMSVGPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 854074FA0AD6C22E00620C57 /* DOMSVGPoint.h */; }; 854074FE0AD6C22E00620C57 /* DOMSVGRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 854074FB0AD6C22E00620C57 /* DOMSVGRect.h */; }; @@ -2458,7 +2503,7 @@ 85E711910AC5D5350053270F /* DOMCounterInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711420AC5D5340053270F /* DOMCounterInternal.h */; }; 85E711920AC5D5350053270F /* DOMCSSRuleListInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711430AC5D5340053270F /* DOMCSSRuleListInternal.h */; }; 85E711930AC5D5350053270F /* DOMCSSStyleDeclarationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711440AC5D5340053270F /* DOMCSSStyleDeclarationInternal.h */; }; - 85E711940AC5D5350053270F /* DOMDocumentFragmentInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85E711450AC5D5340053270F /* DOMDocumentFragmentInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 85E711940AC5D5350053270F /* DOMDocumentFragmentInternal.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85E711450AC5D5340053270F /* DOMDocumentFragmentInternal.h */; }; 85E711950AC5D5350053270F /* DOMDocumentInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711460AC5D5340053270F /* DOMDocumentInternal.h */; }; 85E711960AC5D5350053270F /* DOMDocumentTypeInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711470AC5D5340053270F /* DOMDocumentTypeInternal.h */; }; 85E711970AC5D5350053270F /* DOMDOMImplementationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 85E711480AC5D5340053270F /* DOMDOMImplementationInternal.h */; }; @@ -3118,8 +3163,6 @@ A622A8FF122C44A600A785B3 /* GenericBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = A622A8F9122C44A600A785B3 /* GenericBinding.h */; }; A718760E0B2A120100A16ECE /* DragActions.h in Headers */ = {isa = PBXBuildFile; fileRef = A718760D0B2A120100A16ECE /* DragActions.h */; settings = {ATTRIBUTES = (Private, ); }; }; A71878900B2D04AC00A16ECE /* DragControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */; }; - A7352C190B1BB89D00A986D0 /* RenderSVGBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */; }; - A7352C1A0B1BB89D00A986D0 /* RenderSVGBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = A7352C180B1BB89D00A986D0 /* RenderSVGBlock.h */; }; A75E497610752ACB00C9B896 /* SerializedScriptValue.h in Headers */ = {isa = PBXBuildFile; fileRef = A75E497410752ACB00C9B896 /* SerializedScriptValue.h */; settings = {ATTRIBUTES = (Private, ); }; }; A75E497710752ACB00C9B896 /* SerializedScriptValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A75E497510752ACB00C9B896 /* SerializedScriptValue.cpp */; }; A75E8B880E1DE2D6007F2481 /* FEBlend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A75E8B800E1DE2D6007F2481 /* FEBlend.cpp */; }; @@ -3163,10 +3206,6 @@ A7DBF8DE1276919C006B6008 /* TextCheckingHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = A7DBF8DC1276919C006B6008 /* TextCheckingHelper.h */; }; A7F338A311C0EFCA00A320A7 /* ShadowElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7F338A111C0EFCA00A320A7 /* ShadowElement.cpp */; }; A7F338A411C0EFCA00A320A7 /* ShadowElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F338A211C0EFCA00A320A7 /* ShadowElement.h */; }; - A809F1470B73793A002E4D7F /* RenderSVGGradientStop.h in Headers */ = {isa = PBXBuildFile; fileRef = A809F1450B73793A002E4D7F /* RenderSVGGradientStop.h */; }; - A809F1480B73793B002E4D7F /* RenderSVGGradientStop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A809F1460B73793A002E4D7F /* RenderSVGGradientStop.cpp */; }; - A809F1AA0B737FB6002E4D7F /* RenderSVGHiddenContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A809F1A80B737FB6002E4D7F /* RenderSVGHiddenContainer.h */; }; - A809F1AB0B737FB6002E4D7F /* RenderSVGHiddenContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A809F1A90B737FB6002E4D7F /* RenderSVGHiddenContainer.cpp */; }; A80A38FE0E50CC8200A25EBC /* PatternCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80A38FD0E50CC8200A25EBC /* PatternCG.cpp */; }; A80D67080E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h in Headers */ = {isa = PBXBuildFile; fileRef = A80D67070E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h */; }; A80E6CE40A1989CA007FB8C5 /* CSSValueList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A80E6CBA0A1989CA007FB8C5 /* CSSValueList.cpp */; }; @@ -3549,8 +3588,6 @@ A89943290B42338800D7C802 /* BitmapImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A89943270B42338700D7C802 /* BitmapImage.cpp */; }; A89CCC520F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A89CCC500F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp */; }; A89CCC530F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = A89CCC510F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h */; }; - A8A909AC0CBCD6B50029B807 /* RenderSVGTransformableContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */; }; - A8A909AD0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */; }; A8BC04921214F69600B5F122 /* HTMLEntityTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8BC04911214F69600B5F122 /* HTMLEntityTable.cpp */; }; A8C2280E11D4A59700D5A7D3 /* DocumentParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */; }; A8C228A111D5722E00D5A7D3 /* DecodedDataDocumentParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */; }; @@ -3956,10 +3993,6 @@ A8F46B7C0CB20A9D003A9670 /* DOMSVGLinearGradientElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85C9A2FB0AD7E94200FBFF1E /* DOMSVGLinearGradientElement.h */; }; A8F46B7D0CB20A9D003A9670 /* DOMSVGRadialGradientElement.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 859D62790AD888EE00012995 /* DOMSVGRadialGradientElement.h */; }; A8F46B810CB20A9D003A9670 /* DOMSVGStringList.h in Copy Generated Headers */ = {isa = PBXBuildFile; fileRef = 85D79AD20ACA17EB00F02FC5 /* DOMSVGStringList.h */; }; - A8F4FB940C169E7B002AFED5 /* SVGRenderSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F4FB930C169E7B002AFED5 /* SVGRenderSupport.h */; }; - A8F4FB960C169E85002AFED5 /* SVGRenderSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8F4FB950C169E85002AFED5 /* SVGRenderSupport.cpp */; }; - A8F5C0B80F9285AC0098E06B /* RenderSVGModelObject.h in Headers */ = {isa = PBXBuildFile; fileRef = A8F5C0B60F9285AC0098E06B /* RenderSVGModelObject.h */; }; - A8F5C0B90F9285AC0098E06B /* RenderSVGModelObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */; }; A8FA6E5D0E4CFDED00D5CF49 /* Pattern.h in Headers */ = {isa = PBXBuildFile; fileRef = A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */; settings = {ATTRIBUTES = (Private, ); }; }; A8FA6E5E0E4CFDED00D5CF49 /* Pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */; }; A9C6E4E30D745E05006442E9 /* DOMMimeType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A9C6E4E10D745E05006442E9 /* DOMMimeType.cpp */; }; @@ -3990,8 +4023,6 @@ A9D248090D757E7D00FDF959 /* JSDOMMimeTypeArray.h in Headers */ = {isa = PBXBuildFile; fileRef = A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */; }; AA21ECCA0ABF0FBA002B834C /* CSSCursorImageValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */; }; AA21ECCD0ABF0FC6002B834C /* CSSCursorImageValue.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0978EE0ABAA6E100874480 /* CSSCursorImageValue.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AA31B5B40C1DFD1000AE7083 /* RenderSVGRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA31B5B20C1DFD1000AE7083 /* RenderSVGRoot.cpp */; }; - AA31B5B50C1DFD1000AE7083 /* RenderSVGRoot.h in Headers */ = {isa = PBXBuildFile; fileRef = AA31B5B30C1DFD1000AE7083 /* RenderSVGRoot.h */; }; AA4C3A760B2B1679002334A2 /* StyleElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA4C3A740B2B1679002334A2 /* StyleElement.cpp */; }; AA4C3A770B2B1679002334A2 /* StyleElement.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4C3A750B2B1679002334A2 /* StyleElement.h */; }; AB014DE30E689A4300E10445 /* TextControlInnerElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB014DE10E689A4300E10445 /* TextControlInnerElements.cpp */; }; @@ -4320,8 +4351,6 @@ B275357E0B053814002CE64F /* IntSizeMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B27535510B053814002CE64F /* IntSizeMac.mm */; }; B275357F0B053814002CE64F /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27535520B053814002CE64F /* Path.cpp */; }; B27535800B053814002CE64F /* Path.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535530B053814002CE64F /* Path.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B27535810B053814002CE64F /* Pen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27535540B053814002CE64F /* Pen.cpp */; }; - B27535820B053814002CE64F /* Pen.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535550B053814002CE64F /* Pen.h */; }; B275358E0B053A66002CE64F /* IconMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B275358D0B053A66002CE64F /* IconMac.mm */; }; B277B4040B22F37C0004BEC6 /* GraphicsContextMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */; }; B27B28250CEF0C0700D39D54 /* JSSVGFontElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27B281F0CEF0C0700D39D54 /* JSSVGFontElement.cpp */; }; @@ -4437,14 +4466,10 @@ B2CB92620B5BDA02009BAA78 /* DOMSVGElementInstance.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2CB925E0B5BDA02009BAA78 /* DOMSVGElementInstance.mm */; }; B2CB92630B5BDA02009BAA78 /* DOMSVGElementInstanceList.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CB925F0B5BDA02009BAA78 /* DOMSVGElementInstanceList.h */; }; B2CB92640B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm in Sources */ = {isa = PBXBuildFile; fileRef = B2CB92600B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm */; }; - B2CCEC470C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2CCEC450C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp */; }; - B2CCEC480C6CA9F1006A5424 /* RenderSVGViewportContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = B2CCEC460C6CA9F1006A5424 /* RenderSVGViewportContainer.h */; }; B2E27C9F0B0F2B0900F17C7B /* FloatPoint3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2E27C9D0B0F2B0900F17C7B /* FloatPoint3D.cpp */; }; B2E27CA00B0F2B0900F17C7B /* FloatPoint3D.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E27C9E0B0F2B0900F17C7B /* FloatPoint3D.h */; settings = {ATTRIBUTES = (Private, ); }; }; B2E4EC970D00C22B00432643 /* SVGZoomEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2E4EC940D00C22B00432643 /* SVGZoomEvent.cpp */; }; B2E4EC980D00C22B00432643 /* SVGZoomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E4EC950D00C22B00432643 /* SVGZoomEvent.h */; }; - B2EBDC9C0AF77E3400AE4A68 /* SVGRenderTreeAsText.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2EBDC9A0AF77E3400AE4A68 /* SVGRenderTreeAsText.cpp */; }; - B2EBDC9D0AF77E3400AE4A68 /* SVGRenderTreeAsText.h in Headers */ = {isa = PBXBuildFile; fileRef = B2EBDC9B0AF77E3400AE4A68 /* SVGRenderTreeAsText.h */; }; B2ED97710B1F55CE00257D0F /* GraphicsContextCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2ED97700B1F55CE00257D0F /* GraphicsContextCG.cpp */; }; B2F34FE60E82F81400F627CD /* DNS.h in Headers */ = {isa = PBXBuildFile; fileRef = B2F34FE50E82F81400F627CD /* DNS.h */; }; B2F34FE90E82F82700F627CD /* DNSCFNet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B2F34FE80E82F82700F627CD /* DNSCFNet.cpp */; }; @@ -5569,6 +5594,8 @@ ED501DC60B249F2900AE18D9 /* EditorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED501DC50B249F2900AE18D9 /* EditorMac.mm */; }; EDE3A5000C7A430600956A37 /* ColorMac.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE3A4FF0C7A430600956A37 /* ColorMac.h */; settings = {ATTRIBUTES = (Private, ); }; }; EDEC98030AED7E170059137F /* WebCorePrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = EDEC98020AED7E170059137F /* WebCorePrefix.h */; }; + F3335BF812E07DC300D33011 /* InspectorConsoleAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3335BF612E07DC300D33011 /* InspectorConsoleAgent.cpp */; }; + F3335BF912E07DC300D33011 /* InspectorConsoleAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3335BF712E07DC300D33011 /* InspectorConsoleAgent.h */; }; F33F0282120947F200E5743A /* ScriptProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F33F0281120947F200E5743A /* ScriptProfile.cpp */; }; F33F053D120B0DA500E5743A /* InspectorDebuggerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F33F053B120B0DA500E5743A /* InspectorDebuggerAgent.cpp */; }; F33F053E120B0DA500E5743A /* InspectorDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F33F053C120B0DA500E5743A /* InspectorDebuggerAgent.h */; }; @@ -5584,6 +5611,8 @@ F39BE95C12673BF400E0A674 /* ScriptArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = F39BE95A12673BF400E0A674 /* ScriptArguments.h */; }; F3D461481161D53200CA0D09 /* JSWorkerContextErrorHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3D461461161D53200CA0D09 /* JSWorkerContextErrorHandler.cpp */; }; F3D461491161D53200CA0D09 /* JSWorkerContextErrorHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D461471161D53200CA0D09 /* JSWorkerContextErrorHandler.h */; }; + F3D4C47812E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */; }; + F3D4C47912E07663003DA150 /* InspectorBrowserDebuggerAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = F3D4C47712E07663003DA150 /* InspectorBrowserDebuggerAgent.h */; }; F4EAF4AE10C742B1009100D3 /* OpenTypeSanitizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4EAF4AC10C742B1009100D3 /* OpenTypeSanitizer.cpp */; }; F4EAF4AF10C742B1009100D3 /* OpenTypeSanitizer.h in Headers */ = {isa = PBXBuildFile; fileRef = F4EAF4AD10C742B1009100D3 /* OpenTypeSanitizer.h */; }; F55B3DAD1251F12D003EF269 /* BaseTextInputType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F55B3D791251F12D003EF269 /* BaseTextInputType.cpp */; }; @@ -5657,20 +5686,8 @@ F98FFF4411A2676200F548E8 /* CSSOMUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F98FFF4211A2676200F548E8 /* CSSOMUtils.cpp */; }; F98FFF4511A2676200F548E8 /* CSSOMUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F98FFF4311A2676200F548E8 /* CSSOMUtils.h */; }; F9F0ED7A0DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F0ED770DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h */; }; - FA0B1F8611125CEE007F9839 /* RenderMathMLMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */; }; - FA0B1F8711125CEE007F9839 /* RenderMathMLMath.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */; }; - FA0B1F8811125CEE007F9839 /* RenderMathMLRow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */; }; - FA0B1F8911125CEE007F9839 /* RenderMathMLRow.h in Headers */ = {isa = PBXBuildFile; fileRef = FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */; }; - FA5FAE4211126A5D00D3750F /* RenderMathMLOperator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */; }; - FA5FAE4311126A5D00D3750F /* RenderMathMLOperator.h in Headers */ = {isa = PBXBuildFile; fileRef = FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */; }; FA654A6B1108ABED002615E0 /* MathMLTextElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA654A691108ABED002615E0 /* MathMLTextElement.cpp */; }; FA654A6C1108ABED002615E0 /* MathMLTextElement.h in Headers */ = {isa = PBXBuildFile; fileRef = FA654A6A1108ABED002615E0 /* MathMLTextElement.h */; }; - FA654A6F1108ABFF002615E0 /* RenderMathMLBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA654A6D1108ABFF002615E0 /* RenderMathMLBlock.cpp */; }; - FA654A701108ABFF002615E0 /* RenderMathMLBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = FA654A6E1108ABFF002615E0 /* RenderMathMLBlock.h */; }; - FA7EFB051120D25400CF79C7 /* RenderMathMLUnderOver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FA7EFB031120D25400CF79C7 /* RenderMathMLUnderOver.cpp */; }; - FA7EFB061120D25400CF79C7 /* RenderMathMLUnderOver.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7EFB041120D25400CF79C7 /* RenderMathMLUnderOver.h */; }; - FAA10570114C2DF700940A01 /* RenderMathMLFraction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAA1056E114C2DF700940A01 /* RenderMathMLFraction.cpp */; }; - FAA10571114C2DF700940A01 /* RenderMathMLFraction.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA1056F114C2DF700940A01 /* RenderMathMLFraction.h */; }; FABE72F41059C1EB00D999DD /* MathMLElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABE72ED1059C1EB00D999DD /* MathMLElement.cpp */; }; FABE72F51059C1EB00D999DD /* MathMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = FABE72EE1059C1EB00D999DD /* MathMLElement.h */; }; FABE72F61059C1EB00D999DD /* MathMLInlineContainerElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABE72EF1059C1EB00D999DD /* MathMLInlineContainerElement.cpp */; }; @@ -5679,8 +5696,6 @@ FABE72F91059C1EB00D999DD /* MathMLMathElement.h in Headers */ = {isa = PBXBuildFile; fileRef = FABE72F21059C1EB00D999DD /* MathMLMathElement.h */; }; FABE72FD1059C21100D999DD /* MathMLElementFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABE72FB1059C21100D999DD /* MathMLElementFactory.cpp */; }; FABE72FE1059C21100D999DD /* MathMLNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FABE72FC1059C21100D999DD /* MathMLNames.cpp */; }; - FAC12CC41120DA6900DACC36 /* RenderMathMLSubSup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAC12CC21120DA6900DACC36 /* RenderMathMLSubSup.cpp */; }; - FAC12CC51120DA6900DACC36 /* RenderMathMLSubSup.h in Headers */ = {isa = PBXBuildFile; fileRef = FAC12CC31120DA6900DACC36 /* RenderMathMLSubSup.h */; }; FBC220DF1237FBEB00BCF788 /* GraphicsContext3DOpenGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FBC220DE1237FBEB00BCF788 /* GraphicsContext3DOpenGL.cpp */; }; FD2DBF1212B048A300ED98C6 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD2DBF0E12B048A300ED98C6 /* Accelerate.framework */; }; FD2DBF1312B048A300ED98C6 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD2DBF0F12B048A300ED98C6 /* AudioToolbox.framework */; }; @@ -5927,7 +5942,9 @@ 1C11CCBD0AA6093700DADB20 /* DOMDocument.h in Copy Generated Headers */, 1C11CCC60AA6093700DADB20 /* DOMDocumentFragment.h in Copy Generated Headers */, 85E711940AC5D5350053270F /* DOMDocumentFragmentInternal.h in Copy Generated Headers */, + 44311CD912E4E257000A8D19 /* DOMDocumentFragmentPrivate.h in Copy Generated Headers */, 1CB4214A0AF2B2CA0085AD91 /* DOMDocumentInternal.h in Copy Generated Headers */, + 44311CD812E4E24B000A8D19 /* DOMDocumentPrivate.h in Copy Generated Headers */, 1C11CCC00AA6093700DADB20 /* DOMDocumentType.h in Copy Generated Headers */, 1C11CCC10AA6093700DADB20 /* DOMDOMImplementation.h in Copy Generated Headers */, 1C11CCC40AA6093700DADB20 /* DOMElement.h in Copy Generated Headers */, @@ -6347,7 +6364,6 @@ 0804BF6C0EE09C3B0006C000 /* WMLDoElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLDoElement.cpp; sourceTree = "<group>"; }; 0804BF6D0EE09C3B0006C000 /* WMLDoElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLDoElement.h; sourceTree = "<group>"; }; 0806E57912893045007CED32 /* SVGMatrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMatrix.h; sourceTree = "<group>"; }; - 08082372117987C100241DE8 /* RenderSVGResourceContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceContainer.h; sourceTree = "<group>"; }; 080AEC7D0ED8708A00DF4CCE /* WMLIntrinsicEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLIntrinsicEvent.cpp; sourceTree = "<group>"; }; 080AEC7E0ED8708B00DF4CCE /* WMLIntrinsicEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLIntrinsicEvent.h; sourceTree = "<group>"; }; 080AEC7F0ED8708B00DF4CCE /* WMLIntrinsicEventHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLIntrinsicEventHandler.cpp; sourceTree = "<group>"; }; @@ -6381,10 +6397,6 @@ 0823D158127AD6AC000EBC95 /* SVGAnimatedInteger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedInteger.h; sourceTree = "<group>"; }; 08250938128BD4D800E2ED8E /* SVGAnimatedTransformList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformList.h; sourceTree = "<group>"; }; 082DE42C1292621600D923DF /* SVGPathSegWithContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegWithContext.h; sourceTree = "<group>"; }; - 083192A7112B43050083C3B9 /* RenderSVGResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResource.h; sourceTree = "<group>"; }; - 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMasker.cpp; sourceTree = "<group>"; }; - 083192A9112B43050083C3B9 /* RenderSVGResourceMasker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceMasker.h; sourceTree = "<group>"; }; - 08385FF510F0186000BFE07B /* SVGMarkerData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerData.h; sourceTree = "<group>"; }; 083DAEA20F01A7FB00342754 /* RenderTextControlMultiLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlMultiLine.cpp; sourceTree = "<group>"; }; 083DAEA30F01A7FB00342754 /* RenderTextControlMultiLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderTextControlMultiLine.h; sourceTree = "<group>"; }; 083DAEA40F01A7FB00342754 /* RenderTextControlSingleLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderTextControlSingleLine.cpp; sourceTree = "<group>"; }; @@ -6396,10 +6408,6 @@ 084CE5C80F27DADC00E6240E /* WMLOptGroupElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLOptGroupElement.h; sourceTree = "<group>"; }; 084CE5C90F27DADC00E6240E /* WMLOptionElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLOptionElement.cpp; sourceTree = "<group>"; }; 084CE5CA0F27DADC00E6240E /* WMLOptionElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLOptionElement.h; sourceTree = "<group>"; }; - 084D0E3811F5816100081E1A /* SVGResources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResources.cpp; sourceTree = "<group>"; }; - 084D0E3911F5816100081E1A /* SVGResources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResources.h; sourceTree = "<group>"; }; - 084D0E3A11F5816100081E1A /* SVGResourcesCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCache.cpp; sourceTree = "<group>"; }; - 084D0E3B11F5816100081E1A /* SVGResourcesCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResourcesCache.h; sourceTree = "<group>"; }; 084DB59A128008CC002A6D64 /* SVGAnimatedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedString.h; sourceTree = "<group>"; }; 084DBA9D0ED39D350038C226 /* WMLVariables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLVariables.cpp; sourceTree = "<group>"; }; 084DBA9E0ED39D360038C226 /* WMLVariables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLVariables.h; sourceTree = "<group>"; }; @@ -6422,30 +6430,22 @@ 0854B0111255E4E600B9CDD0 /* SVGRootInlineBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRootInlineBox.h; sourceTree = "<group>"; }; 0854B0121255E4E600B9CDD0 /* SVGTextQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGTextQuery.cpp; sourceTree = "<group>"; }; 0854B0131255E4E600B9CDD0 /* SVGTextQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTextQuery.h; sourceTree = "<group>"; }; - 08563BB2117861770012B578 /* RenderSVGResourcePattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourcePattern.cpp; sourceTree = "<group>"; }; - 08563BB3117861770012B578 /* RenderSVGResourcePattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourcePattern.h; sourceTree = "<group>"; }; - 08563BCF117865F50012B578 /* RenderSVGResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResource.cpp; sourceTree = "<group>"; }; 085797081278394C00A8EC5F /* SVGAnimatedBoolean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedBoolean.h; sourceTree = "<group>"; }; 08591AA40F085C4E009BACB1 /* InputElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputElement.h; sourceTree = "<group>"; }; 085A15921289A8DD002710E3 /* SVGAnimatedTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedTransformListPropertyTearOff.h; sourceTree = "<group>"; }; 085AFDC60F2977350061F2B3 /* WMLFormControlElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLFormControlElement.cpp; sourceTree = "<group>"; }; 085AFDC70F2977350061F2B3 /* WMLFormControlElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLFormControlElement.h; sourceTree = "<group>"; }; - 085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCycleSolver.cpp; sourceTree = "<group>"; }; - 085B05C111FAE16C004D65F6 /* SVGResourcesCycleSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResourcesCycleSolver.h; sourceTree = "<group>"; }; 085B92B80EFDE73D00E6123C /* FormDataBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FormDataBuilder.cpp; sourceTree = "<group>"; }; 085B92B90EFDE73D00E6123C /* FormDataBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FormDataBuilder.h; sourceTree = "<group>"; }; 08641D4512142F7D008DE9F6 /* RenderImageResourceStyleImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderImageResourceStyleImage.cpp; sourceTree = "<group>"; }; 08641D4612142F7D008DE9F6 /* RenderImageResourceStyleImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderImageResourceStyleImage.h; sourceTree = "<group>"; }; 0865CCE40EDDF51B00DF9EC3 /* WMLNoopElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLNoopElement.cpp; sourceTree = "<group>"; }; 0865CCE50EDDF51B00DF9EC3 /* WMLNoopElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLNoopElement.h; sourceTree = "<group>"; }; - 086A400511F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceContainer.cpp; sourceTree = "<group>"; }; 08700BE60F086C5300919419 /* InputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputElement.cpp; sourceTree = "<group>"; }; 087281510F26B9B600AFC596 /* OptionElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionElement.cpp; sourceTree = "<group>"; }; 087281520F26B9B600AFC596 /* OptionElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionElement.h; sourceTree = "<group>"; }; 087281530F26B9B600AFC596 /* OptionGroupElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionGroupElement.cpp; sourceTree = "<group>"; }; 087281540F26B9B600AFC596 /* OptionGroupElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionGroupElement.h; sourceTree = "<group>"; }; - 08735FB610E91232006D6FAD /* SVGMarkerLayoutInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGMarkerLayoutInfo.cpp; sourceTree = "<group>"; }; - 08735FB710E91232006D6FAD /* SVGMarkerLayoutInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerLayoutInfo.h; sourceTree = "<group>"; }; 08744BA90EDB7D86004C9E63 /* WMLOnEventElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLOnEventElement.cpp; sourceTree = "<group>"; }; 08744BAD0EDB7D92004C9E63 /* WMLOnEventElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLOnEventElement.h; sourceTree = "<group>"; }; 087B84951272CEC700A14417 /* SVGAnimatedAngle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedAngle.h; sourceTree = "<group>"; }; @@ -6493,20 +6493,10 @@ 08A48A6D0E86CF6D00E225DD /* JSSVGElementInstanceCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGElementInstanceCustom.cpp; sourceTree = "<group>"; }; 08B35B12127B6A7C005314DD /* SVGAnimatedNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedNumber.h; sourceTree = "<group>"; }; 08B35B16127B6A88005314DD /* SVGAnimatedNumberList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedNumberList.h; sourceTree = "<group>"; }; - 08C34AF11179C056002D7456 /* RenderSVGResourceGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceGradient.cpp; sourceTree = "<group>"; }; - 08C34AF21179C057002D7456 /* RenderSVGResourceGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceGradient.h; sourceTree = "<group>"; }; - 08C34AF31179C057002D7456 /* RenderSVGResourceLinearGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceLinearGradient.cpp; sourceTree = "<group>"; }; - 08C34AF41179C057002D7456 /* RenderSVGResourceLinearGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceLinearGradient.h; sourceTree = "<group>"; }; - 08C34AFB1179C072002D7456 /* RenderSVGResourceRadialGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceRadialGradient.cpp; sourceTree = "<group>"; }; - 08C34AFC1179C072002D7456 /* RenderSVGResourceRadialGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceRadialGradient.h; sourceTree = "<group>"; }; - 08C46B671212F15D0011AF40 /* SVGImageBufferTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImageBufferTools.cpp; sourceTree = "<group>"; }; - 08C46B681212F15D0011AF40 /* SVGImageBufferTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGImageBufferTools.h; sourceTree = "<group>"; }; 08C4C5140EF19A4000E4840F /* WMLImageElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLImageElement.cpp; sourceTree = "<group>"; }; 08C4C5150EF19A4000E4840F /* WMLImageElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLImageElement.h; sourceTree = "<group>"; }; 08C4C5160EF19A4000E4840F /* WMLImageLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLImageLoader.cpp; sourceTree = "<group>"; }; 08C4C5170EF19A4000E4840F /* WMLImageLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLImageLoader.h; sourceTree = "<group>"; }; - 08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceSolidColor.cpp; sourceTree = "<group>"; }; - 08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceSolidColor.h; sourceTree = "<group>"; }; 08C7136D128956A3001B107E /* SVGTransformListPropertyTearOff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGTransformListPropertyTearOff.h; sourceTree = "<group>"; }; 08C859BF1274575300A5728D /* SVGAnimatedRect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedRect.h; sourceTree = "<group>"; }; 08C925170FCC7C4A00480DEC /* FilterEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FilterEffect.cpp; path = filters/FilterEffect.cpp; sourceTree = "<group>"; }; @@ -6515,10 +6505,6 @@ 08CD61B80ED3929C002DDF51 /* WMLTaskElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLTaskElement.cpp; sourceTree = "<group>"; }; 08CD61B90ED3929C002DDF51 /* WMLTaskElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLTaskElement.h; sourceTree = "<group>"; }; 08D46CE2127AD5FC0089694B /* SVGAnimatedEnumeration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedEnumeration.h; sourceTree = "<group>"; }; - 08DAB9B81103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGShadowTreeRootContainer.cpp; sourceTree = "<group>"; }; - 08DAB9B91103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGShadowTreeRootContainer.h; sourceTree = "<group>"; }; - 08DAB9C01103D9C1003E7ABA /* SVGShadowTreeElements.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGShadowTreeElements.cpp; sourceTree = "<group>"; }; - 08DAB9C11103D9C1003E7ABA /* SVGShadowTreeElements.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGShadowTreeElements.h; sourceTree = "<group>"; }; 08E192510EDE0C390087B780 /* WMLErrorHandling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WMLErrorHandling.cpp; sourceTree = "<group>"; }; 08E192520EDE0C3A0087B780 /* WMLErrorHandling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WMLErrorHandling.h; sourceTree = "<group>"; }; 08E4FE450E2BD41400F4CAE0 /* JSSVGLengthCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGLengthCustom.cpp; sourceTree = "<group>"; }; @@ -6569,8 +6555,6 @@ 0F580CFC0F12DE9B0051D689 /* RenderLayerBacking.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderLayerBacking.cpp; sourceTree = "<group>"; }; 0F5B7A5210F65D7A00376302 /* RenderEmbeddedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderEmbeddedObject.cpp; sourceTree = "<group>"; }; 0F5B7A5310F65D7A00376302 /* RenderEmbeddedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderEmbeddedObject.h; sourceTree = "<group>"; }; - 0F69B9C7120FE1D6000E1FC7 /* RenderMathMLFenced.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLFenced.cpp; sourceTree = "<group>"; }; - 0F69B9C8120FE1D6000E1FC7 /* RenderMathMLFenced.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLFenced.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>"; }; 0FCF33230F2B9715004B6795 /* ColorCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorCG.cpp; sourceTree = "<group>"; }; @@ -6584,10 +6568,6 @@ 0FD308D4117D168400A791F7 /* RenderIFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderIFrame.h; sourceTree = "<group>"; }; 0FD723800EC8BD9300CA5DD7 /* FloatQuad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FloatQuad.h; sourceTree = "<group>"; }; 0FD723810EC8BD9300CA5DD7 /* FloatQuad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FloatQuad.cpp; sourceTree = "<group>"; }; - 0FF2813211821CB6007B7CD6 /* RenderMathMLRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLRoot.cpp; sourceTree = "<group>"; }; - 0FF2813311821CB6007B7CD6 /* RenderMathMLRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLRoot.h; sourceTree = "<group>"; }; - 0FF2813411821CB6007B7CD6 /* RenderMathMLSquareRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLSquareRoot.cpp; sourceTree = "<group>"; }; - 0FF2813511821CB6007B7CD6 /* RenderMathMLSquareRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLSquareRoot.h; sourceTree = "<group>"; }; 0FF50259102BA9010066F39A /* DOMStyleMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStyleMedia.h; sourceTree = "<group>"; }; 0FF5025A102BA9010066F39A /* DOMStyleMedia.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMStyleMedia.mm; sourceTree = "<group>"; }; 0FF50262102BA92B0066F39A /* DOMStyleMediaInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMStyleMediaInternal.h; sourceTree = "<group>"; }; @@ -6668,8 +6648,6 @@ 1921327111C0E6BB00456238 /* SVGFEConvolveMatrixElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGFEConvolveMatrixElement.cpp; sourceTree = "<group>"; }; 1921327211C0E6BB00456238 /* SVGFEConvolveMatrixElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGFEConvolveMatrixElement.h; sourceTree = "<group>"; }; 1921327311C0E6BB00456238 /* SVGFEConvolveMatrixElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SVGFEConvolveMatrixElement.idl; sourceTree = "<group>"; }; - 19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilterPrimitive.cpp; sourceTree = "<group>"; }; - 19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceFilterPrimitive.h; sourceTree = "<group>"; }; 19BFF64611C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGFEConvolveMatrixElement.h; sourceTree = "<group>"; }; 19BFF64711C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElement.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGFEConvolveMatrixElement.mm; sourceTree = "<group>"; }; 19BFF64811C0F2AC00B8C04D /* DOMSVGFEConvolveMatrixElementInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGFEConvolveMatrixElementInternal.h; sourceTree = "<group>"; }; @@ -7052,6 +7030,11 @@ 2E2D99E510E2BC1C00496337 /* DOMBlob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMBlob.h; sourceTree = "<group>"; }; 2E2D99E610E2BC1C00496337 /* DOMBlob.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMBlob.mm; sourceTree = "<group>"; }; 2E2D99E910E2BC3800496337 /* DOMBlobInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMBlobInternal.h; sourceTree = "<group>"; }; + 2E37DFD712DBAFB800A6B233 /* DOMURL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DOMURL.cpp; sourceTree = "<group>"; }; + 2E37DFD812DBAFB800A6B233 /* DOMURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMURL.h; sourceTree = "<group>"; }; + 2E37DFD912DBAFB800A6B233 /* DOMURL.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMURL.idl; sourceTree = "<group>"; }; + 2E37E00312DBC5A400A6B233 /* JSDOMURL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMURL.cpp; sourceTree = "<group>"; }; + 2E37E00412DBC5A400A6B233 /* JSDOMURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMURL.h; sourceTree = "<group>"; }; 2E3BBF051162DA1100B9409A /* UUID.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UUID.cpp; sourceTree = "<group>"; }; 2E3BBF061162DA1100B9409A /* UUID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UUID.h; sourceTree = "<group>"; }; 2E3BC0C8117D3E0800B9409A /* JSFileError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSFileError.cpp; sourceTree = "<group>"; }; @@ -7301,12 +7284,97 @@ 41F1D21D0EF35C2A00DA8753 /* ScriptCachedFrameData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptCachedFrameData.h; sourceTree = "<group>"; }; 41F1D21E0EF35C2A00DA8753 /* ScriptCachedFrameData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptCachedFrameData.cpp; sourceTree = "<group>"; }; 41F584C6104652CB009CAA64 /* JSMessagePortCustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMessagePortCustom.h; sourceTree = "<group>"; }; + 4367088112D9CA4A00044234 /* RenderSVGBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGBlock.cpp; sourceTree = "<group>"; }; + 4367088212D9CA4A00044234 /* RenderSVGBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGBlock.h; sourceTree = "<group>"; }; + 4367088312D9CA4A00044234 /* RenderSVGContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGContainer.cpp; sourceTree = "<group>"; }; + 4367088412D9CA4A00044234 /* RenderSVGContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGContainer.h; sourceTree = "<group>"; }; + 4367088512D9CA4A00044234 /* RenderSVGGradientStop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGGradientStop.cpp; sourceTree = "<group>"; }; + 4367088612D9CA4A00044234 /* RenderSVGGradientStop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGGradientStop.h; sourceTree = "<group>"; }; + 4367088712D9CA4A00044234 /* RenderSVGHiddenContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGHiddenContainer.cpp; sourceTree = "<group>"; }; + 4367088812D9CA4A00044234 /* RenderSVGHiddenContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGHiddenContainer.h; sourceTree = "<group>"; }; + 4367088912D9CA4A00044234 /* RenderSVGImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGImage.cpp; sourceTree = "<group>"; }; + 4367088A12D9CA4A00044234 /* RenderSVGImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGImage.h; sourceTree = "<group>"; }; + 4367088B12D9CA4A00044234 /* RenderSVGModelObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGModelObject.cpp; sourceTree = "<group>"; }; + 4367088C12D9CA4A00044234 /* RenderSVGModelObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGModelObject.h; sourceTree = "<group>"; }; + 4367088D12D9CA4A00044234 /* RenderSVGResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResource.cpp; sourceTree = "<group>"; }; + 4367088E12D9CA4A00044234 /* RenderSVGResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResource.h; sourceTree = "<group>"; }; + 4367088F12D9CA4A00044234 /* RenderSVGResourceClipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceClipper.cpp; sourceTree = "<group>"; }; + 4367089012D9CA4A00044234 /* RenderSVGResourceClipper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceClipper.h; sourceTree = "<group>"; }; + 4367089112D9CA4A00044234 /* RenderSVGResourceContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceContainer.cpp; sourceTree = "<group>"; }; + 4367089212D9CA4A00044234 /* RenderSVGResourceContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceContainer.h; sourceTree = "<group>"; }; + 4367089312D9CA4A00044234 /* RenderSVGResourceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilter.cpp; sourceTree = "<group>"; }; + 4367089412D9CA4A00044234 /* RenderSVGResourceFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceFilter.h; sourceTree = "<group>"; }; + 4367089512D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilterPrimitive.cpp; sourceTree = "<group>"; }; + 4367089612D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceFilterPrimitive.h; sourceTree = "<group>"; }; + 4367089712D9CA4A00044234 /* RenderSVGResourceGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceGradient.cpp; sourceTree = "<group>"; }; + 4367089812D9CA4A00044234 /* RenderSVGResourceGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceGradient.h; sourceTree = "<group>"; }; + 4367089912D9CA4B00044234 /* RenderSVGResourceLinearGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceLinearGradient.cpp; sourceTree = "<group>"; }; + 4367089A12D9CA4B00044234 /* RenderSVGResourceLinearGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceLinearGradient.h; sourceTree = "<group>"; }; + 4367089B12D9CA4B00044234 /* RenderSVGResourceMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMarker.cpp; sourceTree = "<group>"; }; + 4367089C12D9CA4B00044234 /* RenderSVGResourceMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceMarker.h; sourceTree = "<group>"; }; + 4367089D12D9CA4B00044234 /* RenderSVGResourceMasker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMasker.cpp; sourceTree = "<group>"; }; + 4367089E12D9CA4B00044234 /* RenderSVGResourceMasker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceMasker.h; sourceTree = "<group>"; }; + 4367089F12D9CA4B00044234 /* RenderSVGResourcePattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourcePattern.cpp; sourceTree = "<group>"; }; + 436708A012D9CA4B00044234 /* RenderSVGResourcePattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourcePattern.h; sourceTree = "<group>"; }; + 436708A112D9CA4B00044234 /* RenderSVGResourceRadialGradient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceRadialGradient.cpp; sourceTree = "<group>"; }; + 436708A212D9CA4B00044234 /* RenderSVGResourceRadialGradient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceRadialGradient.h; sourceTree = "<group>"; }; + 436708A312D9CA4B00044234 /* RenderSVGResourceSolidColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceSolidColor.cpp; sourceTree = "<group>"; }; + 436708A412D9CA4B00044234 /* RenderSVGResourceSolidColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceSolidColor.h; sourceTree = "<group>"; }; + 436708A512D9CA4B00044234 /* RenderSVGRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGRoot.cpp; sourceTree = "<group>"; }; + 436708A612D9CA4B00044234 /* RenderSVGRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGRoot.h; sourceTree = "<group>"; }; + 436708A712D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGShadowTreeRootContainer.cpp; sourceTree = "<group>"; }; + 436708A812D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGShadowTreeRootContainer.h; sourceTree = "<group>"; }; + 436708A912D9CA4B00044234 /* RenderSVGTransformableContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGTransformableContainer.cpp; sourceTree = "<group>"; }; + 436708AA12D9CA4B00044234 /* RenderSVGTransformableContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGTransformableContainer.h; sourceTree = "<group>"; }; + 436708AB12D9CA4B00044234 /* RenderSVGViewportContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGViewportContainer.cpp; sourceTree = "<group>"; }; + 436708AC12D9CA4B00044234 /* RenderSVGViewportContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGViewportContainer.h; sourceTree = "<group>"; }; + 436708AD12D9CA4B00044234 /* SVGImageBufferTools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGImageBufferTools.cpp; sourceTree = "<group>"; }; + 436708AE12D9CA4B00044234 /* SVGImageBufferTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGImageBufferTools.h; sourceTree = "<group>"; }; + 436708AF12D9CA4B00044234 /* SVGMarkerData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerData.h; sourceTree = "<group>"; }; + 436708B012D9CA4B00044234 /* SVGMarkerLayoutInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGMarkerLayoutInfo.cpp; sourceTree = "<group>"; }; + 436708B112D9CA4B00044234 /* SVGMarkerLayoutInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGMarkerLayoutInfo.h; sourceTree = "<group>"; }; + 436708B212D9CA4B00044234 /* SVGRenderSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGRenderSupport.cpp; sourceTree = "<group>"; }; + 436708B312D9CA4B00044234 /* SVGRenderSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRenderSupport.h; sourceTree = "<group>"; }; + 436708B412D9CA4B00044234 /* SVGRenderTreeAsText.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGRenderTreeAsText.cpp; sourceTree = "<group>"; }; + 436708B512D9CA4B00044234 /* SVGRenderTreeAsText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRenderTreeAsText.h; sourceTree = "<group>"; }; + 436708B612D9CA4B00044234 /* SVGResources.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResources.cpp; sourceTree = "<group>"; }; + 436708B712D9CA4B00044234 /* SVGResources.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResources.h; sourceTree = "<group>"; }; + 436708B812D9CA4B00044234 /* SVGResourcesCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCache.cpp; sourceTree = "<group>"; }; + 436708B912D9CA4B00044234 /* SVGResourcesCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResourcesCache.h; sourceTree = "<group>"; }; + 436708BA12D9CA4B00044234 /* SVGResourcesCycleSolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGResourcesCycleSolver.cpp; sourceTree = "<group>"; }; + 436708BB12D9CA4B00044234 /* SVGResourcesCycleSolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGResourcesCycleSolver.h; sourceTree = "<group>"; }; + 436708BC12D9CA4B00044234 /* SVGShadowTreeElements.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGShadowTreeElements.cpp; sourceTree = "<group>"; }; + 436708BD12D9CA4B00044234 /* SVGShadowTreeElements.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGShadowTreeElements.h; sourceTree = "<group>"; }; + 439046C312DA25E800AF80A2 /* RenderMathMLBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLBlock.cpp; path = mathml/RenderMathMLBlock.cpp; sourceTree = "<group>"; }; + 439046C412DA25E800AF80A2 /* RenderMathMLBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLBlock.h; path = mathml/RenderMathMLBlock.h; sourceTree = "<group>"; }; + 439046C512DA25E800AF80A2 /* RenderMathMLFenced.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLFenced.cpp; path = mathml/RenderMathMLFenced.cpp; sourceTree = "<group>"; }; + 439046C612DA25E800AF80A2 /* RenderMathMLFenced.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLFenced.h; path = mathml/RenderMathMLFenced.h; sourceTree = "<group>"; }; + 439046C712DA25E800AF80A2 /* RenderMathMLFraction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLFraction.cpp; path = mathml/RenderMathMLFraction.cpp; sourceTree = "<group>"; }; + 439046C812DA25E800AF80A2 /* RenderMathMLFraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLFraction.h; path = mathml/RenderMathMLFraction.h; sourceTree = "<group>"; }; + 439046C912DA25E800AF80A2 /* RenderMathMLMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLMath.cpp; path = mathml/RenderMathMLMath.cpp; sourceTree = "<group>"; }; + 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLMath.h; path = mathml/RenderMathMLMath.h; sourceTree = "<group>"; }; + 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLOperator.cpp; path = mathml/RenderMathMLOperator.cpp; sourceTree = "<group>"; }; + 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLOperator.h; path = mathml/RenderMathMLOperator.h; sourceTree = "<group>"; }; + 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLRoot.cpp; path = mathml/RenderMathMLRoot.cpp; sourceTree = "<group>"; }; + 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLRoot.h; path = mathml/RenderMathMLRoot.h; sourceTree = "<group>"; }; + 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLRow.cpp; path = mathml/RenderMathMLRow.cpp; sourceTree = "<group>"; }; + 439046D012DA25E800AF80A2 /* RenderMathMLRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLRow.h; path = mathml/RenderMathMLRow.h; sourceTree = "<group>"; }; + 439046D112DA25E800AF80A2 /* RenderMathMLSquareRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLSquareRoot.cpp; path = mathml/RenderMathMLSquareRoot.cpp; sourceTree = "<group>"; }; + 439046D212DA25E800AF80A2 /* RenderMathMLSquareRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLSquareRoot.h; path = mathml/RenderMathMLSquareRoot.h; sourceTree = "<group>"; }; + 439046D312DA25E800AF80A2 /* RenderMathMLSubSup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLSubSup.cpp; path = mathml/RenderMathMLSubSup.cpp; sourceTree = "<group>"; }; + 439046D412DA25E800AF80A2 /* RenderMathMLSubSup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLSubSup.h; path = mathml/RenderMathMLSubSup.h; sourceTree = "<group>"; }; + 439046D512DA25E800AF80A2 /* RenderMathMLUnderOver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderMathMLUnderOver.cpp; path = mathml/RenderMathMLUnderOver.cpp; sourceTree = "<group>"; }; + 439046D612DA25E800AF80A2 /* RenderMathMLUnderOver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderMathMLUnderOver.h; path = mathml/RenderMathMLUnderOver.h; sourceTree = "<group>"; }; + 43C092B912D9E4EE00A989C3 /* RenderSVGForeignObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGForeignObject.cpp; sourceTree = "<group>"; }; + 43C092BA12D9E4EE00A989C3 /* RenderSVGForeignObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGForeignObject.h; sourceTree = "<group>"; }; 4415292C0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLPlugInImageElement.h; sourceTree = "<group>"; }; 4415292D0E1AE8A000C4A2D0 /* HTMLPlugInImageElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLPlugInImageElement.cpp; sourceTree = "<group>"; }; 4429AAFB0CB84E88007647C5 /* DOMHTMLEmbedElementPrivate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMHTMLEmbedElementPrivate.h; sourceTree = "<group>"; }; 4429AAFD0CB84EA5007647C5 /* DOMHTMLIFrameElementPrivate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMHTMLIFrameElementPrivate.h; sourceTree = "<group>"; }; 4429AAFF0CB84EC3007647C5 /* DOMHTMLObjectElementPrivate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMHTMLObjectElementPrivate.h; sourceTree = "<group>"; }; 4429AB070CB84F81007647C5 /* DOMTextEventInternal.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMTextEventInternal.h; sourceTree = "<group>"; }; + 44311CD412E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMDocumentFragmentPrivate.h; sourceTree = "<group>"; }; + 44311CD512E4E22D000A8D19 /* DOMDocumentPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMDocumentPrivate.h; sourceTree = "<group>"; }; 445C8DB610015FC90031531A /* IconDatabaseNone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IconDatabaseNone.cpp; sourceTree = "<group>"; }; 447D69010FA626810015CCB1 /* RuntimeApplicationChecks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RuntimeApplicationChecks.h; sourceTree = "<group>"; }; 447D69020FA626810015CCB1 /* RuntimeApplicationChecks.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RuntimeApplicationChecks.mm; sourceTree = "<group>"; }; @@ -7315,6 +7383,8 @@ 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>"; }; 449B19F30FA72ECE0015CA4A /* HTMLParserQuirks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLParserQuirks.h; sourceTree = "<group>"; }; + 44A28AAB12DFB8AC00AE923B /* MathMLElementFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLElementFactory.h; sourceTree = "<group>"; }; + 44A28AAE12DFB8BF00AE923B /* MathMLNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLNames.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>"; }; 464EA2720B8A350B00A8E6E3 /* notAllowedCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = notAllowedCursor.png; sourceTree = "<group>"; }; @@ -8007,6 +8077,10 @@ 7A1F2B51126C61B20006A7E6 /* InspectorClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorClient.cpp; sourceTree = "<group>"; }; 7A2458791021EAF4000A00AA /* InspectorDOMAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMAgent.cpp; sourceTree = "<group>"; }; 7A24587A1021EAF4000A00AA /* InspectorDOMAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDOMAgent.h; sourceTree = "<group>"; }; + 7A563E5412DE32B000F4536D /* InjectedScriptSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedScriptSource.h; sourceTree = "<group>"; }; + 7A563F9512DF5C9100F4536D /* InjectedScriptSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = InjectedScriptSource.js; sourceTree = "<group>"; }; + 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorSettings.cpp; sourceTree = "<group>"; }; + 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorSettings.h; sourceTree = "<group>"; }; 7A674BD90F9EBF4E006CF099 /* PageGroupLoadDeferrer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageGroupLoadDeferrer.cpp; sourceTree = "<group>"; }; 7A674BDA0F9EBF4E006CF099 /* PageGroupLoadDeferrer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PageGroupLoadDeferrer.h; sourceTree = "<group>"; }; 7A74ECB8101839A500BF939E /* InspectorDOMStorageAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDOMStorageAgent.cpp; sourceTree = "<group>"; }; @@ -8061,8 +8135,6 @@ 8419D2AB120D92FC00141F8F /* SVGPathByteStreamSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathByteStreamSource.h; sourceTree = "<group>"; }; 8419D2B7120E0C7600141F8F /* SVGPathStringBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathStringBuilder.cpp; sourceTree = "<group>"; }; 8419D2B8120E0C7600141F8F /* SVGPathStringBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathStringBuilder.h; sourceTree = "<group>"; }; - 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceFilter.cpp; sourceTree = "<group>"; }; - 841FDC251178C9BE00F8AC9B /* RenderSVGResourceFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceFilter.h; sourceTree = "<group>"; }; 84224181107E77F400766A87 /* JSSVGFEMorphologyElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGFEMorphologyElement.cpp; sourceTree = "<group>"; }; 84224182107E77F400766A87 /* JSSVGFEMorphologyElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGFEMorphologyElement.h; sourceTree = "<group>"; }; 84224189107E786F00766A87 /* DOMSVGFEMorphologyElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMSVGFEMorphologyElement.h; sourceTree = "<group>"; }; @@ -8129,8 +8201,6 @@ 848522871190173C006EDC7F /* SVGVKernElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGVKernElement.cpp; sourceTree = "<group>"; }; 848522881190173C006EDC7F /* SVGVKernElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGVKernElement.h; sourceTree = "<group>"; }; 848522891190173C006EDC7F /* SVGVKernElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SVGVKernElement.idl; sourceTree = "<group>"; }; - 8499A512115FB33000F566E3 /* RenderSVGResourceMarker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceMarker.cpp; sourceTree = "<group>"; }; - 8499A513115FB33000F566E3 /* RenderSVGResourceMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceMarker.h; sourceTree = "<group>"; }; 849F77750EFEC6200090849D /* StrokeStyleApplier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StrokeStyleApplier.h; sourceTree = "<group>"; }; 84A81F3B0FC7DFF000955300 /* SourceAlpha.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SourceAlpha.cpp; path = filters/SourceAlpha.cpp; sourceTree = "<group>"; }; 84A81F3C0FC7DFF000955300 /* SourceAlpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SourceAlpha.h; path = filters/SourceAlpha.h; sourceTree = "<group>"; }; @@ -8141,8 +8211,6 @@ 84B2B24F056BF15F00D2B771 /* SSLKeyGeneratorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SSLKeyGeneratorMac.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; 84B6B975120F13E500B8EFAF /* SVGPathSegListSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathSegListSource.cpp; sourceTree = "<group>"; }; 84B6B976120F13E500B8EFAF /* SVGPathSegListSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathSegListSource.h; sourceTree = "<group>"; }; - 84BDA16911358D2A00DBF64C /* RenderSVGResourceClipper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGResourceClipper.cpp; sourceTree = "<group>"; }; - 84BDA16A11358D2A00DBF64C /* RenderSVGResourceClipper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGResourceClipper.h; sourceTree = "<group>"; }; 84C5B2F81216DC810088B53A /* SVGPathTraversalStateBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathTraversalStateBuilder.cpp; sourceTree = "<group>"; }; 84C5B2F91216DC810088B53A /* SVGPathTraversalStateBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPathTraversalStateBuilder.h; sourceTree = "<group>"; }; 84C6784A1214814700A92902 /* SVGPathBlender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGPathBlender.cpp; sourceTree = "<group>"; }; @@ -8391,12 +8459,6 @@ 8538F0840AD72CB6006A81D1 /* DOMRanges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMRanges.h; sourceTree = "<group>"; }; 853BF4D90ABB6B55008647BB /* DOMNode.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMNode.h; sourceTree = "<group>"; }; 853BF4DA0ABB6B55008647BB /* DOMNode.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMNode.mm; sourceTree = "<group>"; }; - 853CA9CA0AEEC5E9002372DC /* RenderSVGContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGContainer.cpp; sourceTree = "<group>"; }; - 853CA9CB0AEEC5E9002372DC /* RenderSVGContainer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGContainer.h; sourceTree = "<group>"; }; - 853CA9CC0AEEC5E9002372DC /* RenderSVGImage.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGImage.cpp; sourceTree = "<group>"; }; - 853CA9CD0AEEC5E9002372DC /* RenderSVGImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGImage.h; sourceTree = "<group>"; }; - 853CA9EA0AEEC63C002372DC /* RenderForeignObject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderForeignObject.cpp; sourceTree = "<group>"; }; - 853CA9EB0AEEC63C002372DC /* RenderForeignObject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderForeignObject.h; sourceTree = "<group>"; }; 854074F90AD6C22E00620C57 /* DOMSVGNumber.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGNumber.h; sourceTree = "<group>"; }; 854074FA0AD6C22E00620C57 /* DOMSVGPoint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGPoint.h; sourceTree = "<group>"; }; 854074FB0AD6C22E00620C57 /* DOMSVGRect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGRect.h; sourceTree = "<group>"; }; @@ -9471,8 +9533,6 @@ A718760D0B2A120100A16ECE /* DragActions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragActions.h; sourceTree = "<group>"; }; A718788F0B2D04AC00A16ECE /* DragControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragControllerMac.mm; sourceTree = "<group>"; }; A71A70C911AFB02000989D6D /* HTMLMeterElement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLMeterElement.idl; sourceTree = "<group>"; }; - A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGBlock.cpp; sourceTree = "<group>"; }; - A7352C180B1BB89D00A986D0 /* RenderSVGBlock.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGBlock.h; sourceTree = "<group>"; }; A75E497410752ACB00C9B896 /* SerializedScriptValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedScriptValue.h; sourceTree = "<group>"; }; A75E497510752ACB00C9B896 /* SerializedScriptValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedScriptValue.cpp; sourceTree = "<group>"; }; A75E8B800E1DE2D6007F2481 /* FEBlend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FEBlend.cpp; path = filters/FEBlend.cpp; sourceTree = "<group>"; }; @@ -9518,10 +9578,6 @@ A7DBF8DC1276919C006B6008 /* TextCheckingHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCheckingHelper.h; sourceTree = "<group>"; }; A7F338A111C0EFCA00A320A7 /* ShadowElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShadowElement.cpp; sourceTree = "<group>"; }; A7F338A211C0EFCA00A320A7 /* ShadowElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShadowElement.h; sourceTree = "<group>"; }; - A809F1450B73793A002E4D7F /* RenderSVGGradientStop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGGradientStop.h; sourceTree = "<group>"; }; - A809F1460B73793A002E4D7F /* RenderSVGGradientStop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGGradientStop.cpp; sourceTree = "<group>"; }; - A809F1A80B737FB6002E4D7F /* RenderSVGHiddenContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGHiddenContainer.h; sourceTree = "<group>"; }; - A809F1A90B737FB6002E4D7F /* RenderSVGHiddenContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGHiddenContainer.cpp; sourceTree = "<group>"; }; A80A38FD0E50CC8200A25EBC /* PatternCG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PatternCG.cpp; sourceTree = "<group>"; }; A80D67070E9E9DEB00E420F0 /* GraphicsContextPlatformPrivateCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsContextPlatformPrivateCG.h; sourceTree = "<group>"; }; A80E6CBA0A1989CA007FB8C5 /* CSSValueList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSValueList.cpp; sourceTree = "<group>"; }; @@ -9770,8 +9826,6 @@ A89943270B42338700D7C802 /* BitmapImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitmapImage.cpp; sourceTree = "<group>"; }; A89CCC500F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReplaceNodeWithSpanCommand.cpp; sourceTree = "<group>"; }; A89CCC510F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReplaceNodeWithSpanCommand.h; sourceTree = "<group>"; }; - A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGTransformableContainer.h; sourceTree = "<group>"; }; - A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGTransformableContainer.cpp; sourceTree = "<group>"; }; A8BC04911214F69600B5F122 /* HTMLEntityTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLEntityTable.cpp; sourceTree = "<group>"; }; A8C2280D11D4A59700D5A7D3 /* DocumentParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentParser.cpp; sourceTree = "<group>"; }; A8C2289F11D5722E00D5A7D3 /* DecodedDataDocumentParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DecodedDataDocumentParser.h; sourceTree = "<group>"; }; @@ -10053,10 +10107,6 @@ A8EA80040A19516E00A8EF5F /* StyleSheet.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = StyleSheet.h; sourceTree = "<group>"; }; A8EA80050A19516E00A8EF5F /* StyleSheet.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = StyleSheet.cpp; sourceTree = "<group>"; }; A8EA80060A19516E00A8EF5F /* MediaList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MediaList.h; sourceTree = "<group>"; }; - A8F4FB930C169E7B002AFED5 /* SVGRenderSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRenderSupport.h; sourceTree = "<group>"; }; - A8F4FB950C169E85002AFED5 /* SVGRenderSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGRenderSupport.cpp; sourceTree = "<group>"; }; - A8F5C0B60F9285AC0098E06B /* RenderSVGModelObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGModelObject.h; sourceTree = "<group>"; }; - 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 /* DOMMimeType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DOMMimeType.cpp; sourceTree = "<group>"; }; @@ -10092,8 +10142,6 @@ A9D248050D757E7D00FDF959 /* JSDOMMimeTypeArray.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSDOMMimeTypeArray.h; sourceTree = "<group>"; }; AA0978ED0ABAA6E100874480 /* CSSCursorImageValue.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CSSCursorImageValue.cpp; sourceTree = "<group>"; }; AA0978EE0ABAA6E100874480 /* CSSCursorImageValue.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CSSCursorImageValue.h; sourceTree = "<group>"; }; - AA31B5B20C1DFD1000AE7083 /* RenderSVGRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGRoot.cpp; sourceTree = "<group>"; }; - AA31B5B30C1DFD1000AE7083 /* RenderSVGRoot.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGRoot.h; sourceTree = "<group>"; }; AA4C3A740B2B1679002334A2 /* StyleElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = StyleElement.cpp; sourceTree = "<group>"; }; AA4C3A750B2B1679002334A2 /* StyleElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = StyleElement.h; sourceTree = "<group>"; }; AB014DE10E689A4300E10445 /* TextControlInnerElements.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextControlInnerElements.cpp; sourceTree = "<group>"; }; @@ -10563,8 +10611,6 @@ B27535510B053814002CE64F /* IntSizeMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = IntSizeMac.mm; sourceTree = "<group>"; }; B27535520B053814002CE64F /* Path.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Path.cpp; sourceTree = "<group>"; }; B27535530B053814002CE64F /* Path.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Path.h; sourceTree = "<group>"; }; - B27535540B053814002CE64F /* Pen.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Pen.cpp; sourceTree = "<group>"; }; - B27535550B053814002CE64F /* Pen.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Pen.h; sourceTree = "<group>"; }; B275358D0B053A66002CE64F /* IconMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = IconMac.mm; sourceTree = "<group>"; }; B277B4030B22F37C0004BEC6 /* GraphicsContextMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = GraphicsContextMac.mm; sourceTree = "<group>"; }; B27B281F0CEF0C0700D39D54 /* JSSVGFontElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGFontElement.cpp; sourceTree = "<group>"; }; @@ -10684,15 +10730,11 @@ B2CB925E0B5BDA02009BAA78 /* DOMSVGElementInstance.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGElementInstance.mm; sourceTree = "<group>"; }; B2CB925F0B5BDA02009BAA78 /* DOMSVGElementInstanceList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMSVGElementInstanceList.h; sourceTree = "<group>"; }; B2CB92600B5BDA02009BAA78 /* DOMSVGElementInstanceList.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = DOMSVGElementInstanceList.mm; sourceTree = "<group>"; }; - B2CCEC450C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGViewportContainer.cpp; sourceTree = "<group>"; }; - B2CCEC460C6CA9F1006A5424 /* RenderSVGViewportContainer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGViewportContainer.h; sourceTree = "<group>"; }; B2E27C9D0B0F2B0900F17C7B /* FloatPoint3D.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FloatPoint3D.cpp; sourceTree = "<group>"; }; B2E27C9E0B0F2B0900F17C7B /* FloatPoint3D.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FloatPoint3D.h; sourceTree = "<group>"; }; B2E4EC940D00C22B00432643 /* SVGZoomEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGZoomEvent.cpp; sourceTree = "<group>"; }; B2E4EC950D00C22B00432643 /* SVGZoomEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGZoomEvent.h; sourceTree = "<group>"; }; B2E4EC960D00C22B00432643 /* SVGZoomEvent.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SVGZoomEvent.idl; sourceTree = "<group>"; }; - B2EBDC9A0AF77E3400AE4A68 /* SVGRenderTreeAsText.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = SVGRenderTreeAsText.cpp; sourceTree = "<group>"; }; - B2EBDC9B0AF77E3400AE4A68 /* SVGRenderTreeAsText.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SVGRenderTreeAsText.h; sourceTree = "<group>"; }; B2ED97700B1F55CE00257D0F /* GraphicsContextCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContextCG.cpp; sourceTree = "<group>"; }; B2F34FE50E82F81400F627CD /* DNS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNS.h; sourceTree = "<group>"; }; B2F34FE80E82F82700F627CD /* DNSCFNet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DNSCFNet.cpp; sourceTree = "<group>"; }; @@ -11896,6 +11938,8 @@ ED501DC50B249F2900AE18D9 /* EditorMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = EditorMac.mm; path = mac/EditorMac.mm; sourceTree = "<group>"; }; EDE3A4FF0C7A430600956A37 /* ColorMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorMac.h; sourceTree = "<group>"; }; EDEC98020AED7E170059137F /* WebCorePrefix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = WebCorePrefix.h; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; }; + F3335BF612E07DC300D33011 /* InspectorConsoleAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorConsoleAgent.cpp; sourceTree = "<group>"; }; + F3335BF712E07DC300D33011 /* InspectorConsoleAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorConsoleAgent.h; sourceTree = "<group>"; }; F33F0281120947F200E5743A /* ScriptProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptProfile.cpp; sourceTree = "<group>"; }; F33F053B120B0DA500E5743A /* InspectorDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorDebuggerAgent.cpp; sourceTree = "<group>"; }; F33F053C120B0DA500E5743A /* InspectorDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorDebuggerAgent.h; sourceTree = "<group>"; }; @@ -11911,6 +11955,8 @@ F39BE95A12673BF400E0A674 /* ScriptArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptArguments.h; sourceTree = "<group>"; }; F3D461461161D53200CA0D09 /* JSWorkerContextErrorHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWorkerContextErrorHandler.cpp; sourceTree = "<group>"; }; F3D461471161D53200CA0D09 /* JSWorkerContextErrorHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWorkerContextErrorHandler.h; sourceTree = "<group>"; }; + F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorBrowserDebuggerAgent.cpp; sourceTree = "<group>"; }; + F3D4C47712E07663003DA150 /* InspectorBrowserDebuggerAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorBrowserDebuggerAgent.h; sourceTree = "<group>"; }; F4EAF4AC10C742B1009100D3 /* OpenTypeSanitizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenTypeSanitizer.cpp; path = opentype/OpenTypeSanitizer.cpp; sourceTree = "<group>"; }; F4EAF4AD10C742B1009100D3 /* OpenTypeSanitizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenTypeSanitizer.h; path = opentype/OpenTypeSanitizer.h; sourceTree = "<group>"; }; F523D23B02DE4396018635CA /* HTMLDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLDocument.cpp; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; @@ -12011,22 +12057,10 @@ F98FFF4311A2676200F548E8 /* CSSOMUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSOMUtils.h; sourceTree = "<group>"; }; F9F0ED770DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = XMLHttpRequestProgressEvent.h; sourceTree = "<group>"; }; F9F0ED780DB50CA200D16DB9 /* XMLHttpRequestProgressEvent.idl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = XMLHttpRequestProgressEvent.idl; sourceTree = "<group>"; }; - FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLMath.cpp; sourceTree = "<group>"; }; - FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLMath.h; sourceTree = "<group>"; }; - FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLRow.cpp; sourceTree = "<group>"; }; - FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLRow.h; sourceTree = "<group>"; }; - FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLOperator.cpp; sourceTree = "<group>"; }; - FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLOperator.h; sourceTree = "<group>"; }; FA654A631108ABB7002615E0 /* mathml.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mathml.css; sourceTree = "<group>"; }; FA654A671108ABE2002615E0 /* mathattrs.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mathattrs.in; sourceTree = "<group>"; }; FA654A691108ABED002615E0 /* MathMLTextElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLTextElement.cpp; sourceTree = "<group>"; }; FA654A6A1108ABED002615E0 /* MathMLTextElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLTextElement.h; sourceTree = "<group>"; }; - FA654A6D1108ABFF002615E0 /* RenderMathMLBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLBlock.cpp; sourceTree = "<group>"; }; - FA654A6E1108ABFF002615E0 /* RenderMathMLBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLBlock.h; sourceTree = "<group>"; }; - FA7EFB031120D25400CF79C7 /* RenderMathMLUnderOver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLUnderOver.cpp; sourceTree = "<group>"; }; - FA7EFB041120D25400CF79C7 /* RenderMathMLUnderOver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLUnderOver.h; sourceTree = "<group>"; }; - FAA1056E114C2DF700940A01 /* RenderMathMLFraction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMathMLFraction.cpp; sourceTree = "<group>"; }; - FAA1056F114C2DF700940A01 /* RenderMathMLFraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMathMLFraction.h; sourceTree = "<group>"; }; FABE72ED1059C1EB00D999DD /* MathMLElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLElement.cpp; sourceTree = "<group>"; }; FABE72EE1059C1EB00D999DD /* MathMLElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathMLElement.h; sourceTree = "<group>"; }; FABE72EF1059C1EB00D999DD /* MathMLInlineContainerElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLInlineContainerElement.cpp; sourceTree = "<group>"; }; @@ -12036,8 +12070,6 @@ FABE72F31059C1EB00D999DD /* mathtags.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mathtags.in; sourceTree = "<group>"; }; FABE72FB1059C21100D999DD /* MathMLElementFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathMLElementFactory.cpp; sourceTree = "<group>"; }; 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>"; }; FBC220DE1237FBEB00BCF788 /* GraphicsContext3DOpenGL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsContext3DOpenGL.cpp; sourceTree = "<group>"; }; FD2DBF0E12B048A300ED98C6 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = /System/Library/Frameworks/Accelerate.framework; sourceTree = "<absolute>"; }; FD2DBF0F12B048A300ED98C6 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; }; @@ -12392,24 +12424,87 @@ 088C2F7412390080003D65CE /* svg */ = { isa = PBXGroup; children = ( + 4367088112D9CA4A00044234 /* RenderSVGBlock.cpp */, + 4367088212D9CA4A00044234 /* RenderSVGBlock.h */, + 4367088312D9CA4A00044234 /* RenderSVGContainer.cpp */, + 4367088412D9CA4A00044234 /* RenderSVGContainer.h */, + 43C092B912D9E4EE00A989C3 /* RenderSVGForeignObject.cpp */, + 43C092BA12D9E4EE00A989C3 /* RenderSVGForeignObject.h */, + 4367088512D9CA4A00044234 /* RenderSVGGradientStop.cpp */, + 4367088612D9CA4A00044234 /* RenderSVGGradientStop.h */, + 4367088712D9CA4A00044234 /* RenderSVGHiddenContainer.cpp */, + 4367088812D9CA4A00044234 /* RenderSVGHiddenContainer.h */, + 4367088912D9CA4A00044234 /* RenderSVGImage.cpp */, + 4367088A12D9CA4A00044234 /* RenderSVGImage.h */, 0854B0021255E4E600B9CDD0 /* RenderSVGInline.cpp */, 0854B0031255E4E600B9CDD0 /* RenderSVGInline.h */, 0854B0041255E4E600B9CDD0 /* RenderSVGInlineText.cpp */, 0854B0051255E4E600B9CDD0 /* RenderSVGInlineText.h */, + 4367088B12D9CA4A00044234 /* RenderSVGModelObject.cpp */, + 4367088C12D9CA4A00044234 /* RenderSVGModelObject.h */, ADDF1AD41257CD9A0003A759 /* RenderSVGPath.cpp */, ADDF1AD51257CD9A0003A759 /* RenderSVGPath.h */, + 4367088D12D9CA4A00044234 /* RenderSVGResource.cpp */, + 4367088E12D9CA4A00044234 /* RenderSVGResource.h */, + 4367088F12D9CA4A00044234 /* RenderSVGResourceClipper.cpp */, + 4367089012D9CA4A00044234 /* RenderSVGResourceClipper.h */, + 4367089112D9CA4A00044234 /* RenderSVGResourceContainer.cpp */, + 4367089212D9CA4A00044234 /* RenderSVGResourceContainer.h */, + 4367089312D9CA4A00044234 /* RenderSVGResourceFilter.cpp */, + 4367089412D9CA4A00044234 /* RenderSVGResourceFilter.h */, + 4367089512D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.cpp */, + 4367089612D9CA4A00044234 /* RenderSVGResourceFilterPrimitive.h */, + 4367089712D9CA4A00044234 /* RenderSVGResourceGradient.cpp */, + 4367089812D9CA4A00044234 /* RenderSVGResourceGradient.h */, + 4367089912D9CA4B00044234 /* RenderSVGResourceLinearGradient.cpp */, + 4367089A12D9CA4B00044234 /* RenderSVGResourceLinearGradient.h */, + 4367089B12D9CA4B00044234 /* RenderSVGResourceMarker.cpp */, + 4367089C12D9CA4B00044234 /* RenderSVGResourceMarker.h */, + 4367089D12D9CA4B00044234 /* RenderSVGResourceMasker.cpp */, + 4367089E12D9CA4B00044234 /* RenderSVGResourceMasker.h */, + 4367089F12D9CA4B00044234 /* RenderSVGResourcePattern.cpp */, + 436708A012D9CA4B00044234 /* RenderSVGResourcePattern.h */, + 436708A112D9CA4B00044234 /* RenderSVGResourceRadialGradient.cpp */, + 436708A212D9CA4B00044234 /* RenderSVGResourceRadialGradient.h */, + 436708A312D9CA4B00044234 /* RenderSVGResourceSolidColor.cpp */, + 436708A412D9CA4B00044234 /* RenderSVGResourceSolidColor.h */, + 436708A512D9CA4B00044234 /* RenderSVGRoot.cpp */, + 436708A612D9CA4B00044234 /* RenderSVGRoot.h */, + 436708A712D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.cpp */, + 436708A812D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.h */, 0854B0061255E4E600B9CDD0 /* RenderSVGText.cpp */, 0854B0071255E4E600B9CDD0 /* RenderSVGText.h */, 0854B0081255E4E600B9CDD0 /* RenderSVGTextPath.cpp */, 0854B0091255E4E600B9CDD0 /* RenderSVGTextPath.h */, + 436708A912D9CA4B00044234 /* RenderSVGTransformableContainer.cpp */, + 436708AA12D9CA4B00044234 /* RenderSVGTransformableContainer.h */, 0854B00A1255E4E600B9CDD0 /* RenderSVGTSpan.cpp */, 0854B00B1255E4E600B9CDD0 /* RenderSVGTSpan.h */, + 436708AB12D9CA4B00044234 /* RenderSVGViewportContainer.cpp */, + 436708AC12D9CA4B00044234 /* RenderSVGViewportContainer.h */, + 436708AD12D9CA4B00044234 /* SVGImageBufferTools.cpp */, + 436708AE12D9CA4B00044234 /* SVGImageBufferTools.h */, 0854B00C1255E4E600B9CDD0 /* SVGInlineFlowBox.cpp */, 0854B00D1255E4E600B9CDD0 /* SVGInlineFlowBox.h */, 0854B00E1255E4E600B9CDD0 /* SVGInlineTextBox.cpp */, 0854B00F1255E4E600B9CDD0 /* SVGInlineTextBox.h */, + 436708AF12D9CA4B00044234 /* SVGMarkerData.h */, + 436708B012D9CA4B00044234 /* SVGMarkerLayoutInfo.cpp */, + 436708B112D9CA4B00044234 /* SVGMarkerLayoutInfo.h */, + 436708B212D9CA4B00044234 /* SVGRenderSupport.cpp */, + 436708B312D9CA4B00044234 /* SVGRenderSupport.h */, + 436708B412D9CA4B00044234 /* SVGRenderTreeAsText.cpp */, + 436708B512D9CA4B00044234 /* SVGRenderTreeAsText.h */, + 436708B612D9CA4B00044234 /* SVGResources.cpp */, + 436708B712D9CA4B00044234 /* SVGResources.h */, + 436708B812D9CA4B00044234 /* SVGResourcesCache.cpp */, + 436708B912D9CA4B00044234 /* SVGResourcesCache.h */, + 436708BA12D9CA4B00044234 /* SVGResourcesCycleSolver.cpp */, + 436708BB12D9CA4B00044234 /* SVGResourcesCycleSolver.h */, 0854B0101255E4E600B9CDD0 /* SVGRootInlineBox.cpp */, 0854B0111255E4E600B9CDD0 /* SVGRootInlineBox.h */, + 436708BC12D9CA4B00044234 /* SVGShadowTreeElements.cpp */, + 436708BD12D9CA4B00044234 /* SVGShadowTreeElements.h */, 08F0BFBD1255C53C00075185 /* SVGTextChunk.cpp */, 08F0BFBE1255C53C00075185 /* SVGTextChunk.h */, 081668D1125603BF006F25DE /* SVGTextChunkBuilder.cpp */, @@ -12810,6 +12905,7 @@ 1C5FAECA0DCFD8C900D58F78 /* Inspector */ = { isa = PBXGroup; children = ( + 7A563E5412DE32B000F4536D /* InjectedScriptSource.h */, 4F707A9711EF679400ACDA69 /* InspectorBackendDispatcher.cpp */, 4F707A9811EF679400ACDA69 /* InspectorBackendDispatcher.h */, 4F4F5FFA11CBD2D200A186BF /* InspectorFrontend.cpp */, @@ -12839,10 +12935,17 @@ 7A0E76F610BF08ED00A0276E /* InjectedScriptHost.cpp */, 7A0E76F710BF08ED00A0276E /* InjectedScriptHost.h */, 7A0E76F810BF08ED00A0276E /* InjectedScriptHost.idl */, + 7A563F9512DF5C9100F4536D /* InjectedScriptSource.js */, + 7A5640BD12DF9E5E00F4536D /* InspectorSettings.cpp */, + 7A5640BE12DF9E5E00F4536D /* InspectorSettings.h */, B885E8D211E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp */, B885E8D311E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h */, + F3D4C47612E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp */, + F3D4C47712E07663003DA150 /* InspectorBrowserDebuggerAgent.h */, 7A1F2B51126C61B20006A7E6 /* InspectorClient.cpp */, 1C81B9580E97330800266E07 /* InspectorClient.h */, + F3335BF612E07DC300D33011 /* InspectorConsoleAgent.cpp */, + F3335BF712E07DC300D33011 /* InspectorConsoleAgent.h */, 1C81B9570E97330800266E07 /* InspectorController.cpp */, 1C81B9560E97330800266E07 /* InspectorController.h */, 82AB1741124B99EC00C5069D /* InspectorCSSAgent.cpp */, @@ -12949,10 +13052,10 @@ A409C983116D0DDD007197BD /* AccessibilityProgressIndicator.h */, 29A812080FBB9C1D00510293 /* AccessibilityRenderObject.cpp */, 29A8121B0FBB9C1D00510293 /* AccessibilityRenderObject.h */, - 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */, - 29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */, 93C4F6E81108F9A50099D0DB /* AccessibilityScrollbar.cpp */, 93C4F6E91108F9A50099D0DB /* AccessibilityScrollbar.h */, + 29489FC612C00F0300D83F0F /* AccessibilityScrollView.cpp */, + 29489FC512C00F0300D83F0F /* AccessibilityScrollView.h */, 0709FC4B1025DED80059CDBA /* AccessibilitySlider.cpp */, 0709FC4D1025DEE30059CDBA /* AccessibilitySlider.h */, 29A812090FBB9C1D00510293 /* AccessibilityTable.cpp */, @@ -13083,6 +13186,33 @@ path = shadow; sourceTree = "<group>"; }; + 439046C212DA25CE00AF80A2 /* mathml */ = { + isa = PBXGroup; + children = ( + 439046C312DA25E800AF80A2 /* RenderMathMLBlock.cpp */, + 439046C412DA25E800AF80A2 /* RenderMathMLBlock.h */, + 439046C512DA25E800AF80A2 /* RenderMathMLFenced.cpp */, + 439046C612DA25E800AF80A2 /* RenderMathMLFenced.h */, + 439046C712DA25E800AF80A2 /* RenderMathMLFraction.cpp */, + 439046C812DA25E800AF80A2 /* RenderMathMLFraction.h */, + 439046C912DA25E800AF80A2 /* RenderMathMLMath.cpp */, + 439046CA12DA25E800AF80A2 /* RenderMathMLMath.h */, + 439046CB12DA25E800AF80A2 /* RenderMathMLOperator.cpp */, + 439046CC12DA25E800AF80A2 /* RenderMathMLOperator.h */, + 439046CD12DA25E800AF80A2 /* RenderMathMLRoot.cpp */, + 439046CE12DA25E800AF80A2 /* RenderMathMLRoot.h */, + 439046CF12DA25E800AF80A2 /* RenderMathMLRow.cpp */, + 439046D012DA25E800AF80A2 /* RenderMathMLRow.h */, + 439046D112DA25E800AF80A2 /* RenderMathMLSquareRoot.cpp */, + 439046D212DA25E800AF80A2 /* RenderMathMLSquareRoot.h */, + 439046D312DA25E800AF80A2 /* RenderMathMLSubSup.cpp */, + 439046D412DA25E800AF80A2 /* RenderMathMLSubSup.h */, + 439046D512DA25E800AF80A2 /* RenderMathMLUnderOver.cpp */, + 439046D612DA25E800AF80A2 /* RenderMathMLUnderOver.h */, + ); + name = mathml; + sourceTree = "<group>"; + }; 449195900FBE175B00D9F824 /* Exports */ = { isa = PBXGroup; children = ( @@ -13095,9 +13225,6 @@ 49484FAE102CF01E00187DD3 /* canvas */ = { isa = PBXGroup; children = ( - 93F1D5B712D532C400832BEC /* WebKitLoseContext.cpp */, - 93F1D5B812D532C400832BEC /* WebKitLoseContext.h */, - 93F1D5B912D532C400832BEC /* WebKitLoseContext.idl */, 49EECDCA10503C2300099FAB /* ArrayBuffer.cpp */, 49EECDCB10503C2300099FAB /* ArrayBuffer.h */, 49EECDCC10503C2300099FAB /* ArrayBuffer.idl */, @@ -13191,6 +13318,9 @@ 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */, 0C3F1F5810C8871200D72CE1 /* WebGLUniformLocation.h */, 0C3F1F5910C8871200D72CE1 /* WebGLUniformLocation.idl */, + 93F1D5B712D532C400832BEC /* WebKitLoseContext.cpp */, + 93F1D5B812D532C400832BEC /* WebKitLoseContext.h */, + 93F1D5B912D532C400832BEC /* WebKitLoseContext.idl */, ); name = canvas; sourceTree = "<group>"; @@ -13589,7 +13719,9 @@ 8574D1F10ADE6122004CBA11 /* JSSVGElementWrapperFactory.cpp */, 8574D1F20ADE6122004CBA11 /* JSSVGElementWrapperFactory.h */, FABE72FB1059C21100D999DD /* MathMLElementFactory.cpp */, + 44A28AAB12DFB8AC00AE923B /* MathMLElementFactory.h */, FABE72FC1059C21100D999DD /* MathMLNames.cpp */, + 44A28AAE12DFB8BF00AE923B /* MathMLNames.h */, 656581E609D1508D000E61D7 /* SVGElementFactory.cpp */, 656581E709D1508D000E61D7 /* SVGElementFactory.h */, 656581E809D1508D000E61D7 /* SVGNames.cpp */, @@ -14022,6 +14154,8 @@ 85ACABAF0A9CAF8000671E90 /* DOMDocument.mm */, 85089CD30A98C42800A275AA /* DOMDocumentFragment.h */, 85089CD40A98C42800A275AA /* DOMDocumentFragment.mm */, + 44311CD412E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h */, + 44311CD512E4E22D000A8D19 /* DOMDocumentPrivate.h */, 85CA975A0A962E5400690CCF /* DOMDocumentType.h */, 85CA975B0A962E5400690CCF /* DOMDocumentType.mm */, 8518DCE70A9CC80C0091B7A6 /* DOMDOMImplementation.h */, @@ -15300,6 +15434,9 @@ 76FC2B0812370DA0006A991A /* DOMTokenList.cpp */, 76FC2B0912370DA0006A991A /* DOMTokenList.h */, 76FC2B0A12370DA0006A991A /* DOMTokenList.idl */, + 2E37DFD712DBAFB800A6B233 /* DOMURL.cpp */, + 2E37DFD812DBAFB800A6B233 /* DOMURL.h */, + 2E37DFD912DBAFB800A6B233 /* DOMURL.idl */, F55B3D871251F12D003EF269 /* EmailInputType.cpp */, F55B3D881251F12D003EF269 /* EmailInputType.h */, F55B3D891251F12D003EF269 /* FileInputType.cpp */, @@ -15841,8 +15978,6 @@ A83B79080CCAFF2B000B0825 /* HTML */ = { isa = PBXGroup; children = ( - 93F1D5BE12D5335600832BEC /* JSWebKitLoseContext.cpp */, - 93F1D5BF12D5335600832BEC /* JSWebKitLoseContext.h */, 49EECEF2105070C400099FAB /* JSArrayBuffer.cpp */, 49EECEF3105070C400099FAB /* JSArrayBuffer.h */, 49EECF19105072F300099FAB /* JSArrayBufferView.cpp */, @@ -15867,6 +16002,8 @@ 4ACBC0C912713D0A0094F9B2 /* JSDOMSettableTokenList.h */, 7694563A1214D97C0007CBAE /* JSDOMTokenList.cpp */, 7694563B1214D97C0007CBAE /* JSDOMTokenList.h */, + 2E37E00312DBC5A400A6B233 /* JSDOMURL.cpp */, + 2E37E00412DBC5A400A6B233 /* JSDOMURL.h */, 49EECEF4105070C400099FAB /* JSFloat32Array.cpp */, 49EECEF5105070C400099FAB /* JSFloat32Array.h */, BC97E410109154FA0010D361 /* JSHTMLAllCollection.cpp */, @@ -16061,6 +16198,8 @@ 49C7B9921042D2D30009D447 /* JSWebGLTexture.h */, 0C45342510CDBBFA00869157 /* JSWebGLUniformLocation.cpp */, 0C45342610CDBBFA00869157 /* JSWebGLUniformLocation.h */, + 93F1D5BE12D5335600832BEC /* JSWebKitLoseContext.cpp */, + 93F1D5BF12D5335600832BEC /* JSWebKitLoseContext.h */, ); name = HTML; sourceTree = "<group>"; @@ -17321,8 +17460,6 @@ A88DD4860B4629A300C02990 /* PathTraversalState.h */, A8FA6E5C0E4CFDED00D5CF49 /* Pattern.cpp */, A8FA6E5B0E4CFDED00D5CF49 /* Pattern.h */, - B27535540B053814002CE64F /* Pen.cpp */, - B27535550B053814002CE64F /* Pen.h */, 371F4FFB0D25E7F300ECE0D5 /* SegmentedFontData.cpp */, 371F4FFA0D25E7F300ECE0D5 /* SegmentedFontData.h */, B2C3DA530D006CD600EF6F26 /* SimpleFontData.cpp */, @@ -18480,6 +18617,7 @@ F523D2F302DE443B018635CA /* rendering */ = { isa = PBXGroup; children = ( + 439046C212DA25CE00AF80A2 /* mathml */, BC8C8FAA0DDCD2F200B592F4 /* style */, 088C2F7412390080003D65CE /* svg */, A8CFF04B0A154F09000A4234 /* AutoTableLayout.cpp */, @@ -18546,8 +18684,6 @@ 066C772F0AB603FD00238CC4 /* RenderFileUploadControl.h */, BCEA482E097D93020094C9E4 /* RenderFlexibleBox.cpp */, BCEA482F097D93020094C9E4 /* RenderFlexibleBox.h */, - 853CA9EA0AEEC63C002372DC /* RenderForeignObject.cpp */, - 853CA9EB0AEEC63C002372DC /* RenderForeignObject.h */, A871DECC0A1530C700B12A68 /* RenderFrame.cpp */, A871DECB0A1530C700B12A68 /* RenderFrame.h */, 0FD3080C117CF7E700A791F7 /* RenderFrameBase.cpp */, @@ -18626,50 +18762,6 @@ AB247A6B0AFD6383003FA5FD /* RenderSlider.h */, D302754B12A5FEAB004BD828 /* RenderSummary.cpp */, D302754C12A5FEAB004BD828 /* RenderSummary.h */, - A7352C170B1BB89D00A986D0 /* RenderSVGBlock.cpp */, - A7352C180B1BB89D00A986D0 /* RenderSVGBlock.h */, - 853CA9CA0AEEC5E9002372DC /* RenderSVGContainer.cpp */, - 853CA9CB0AEEC5E9002372DC /* RenderSVGContainer.h */, - A809F1460B73793A002E4D7F /* RenderSVGGradientStop.cpp */, - A809F1450B73793A002E4D7F /* RenderSVGGradientStop.h */, - A809F1A90B737FB6002E4D7F /* RenderSVGHiddenContainer.cpp */, - A809F1A80B737FB6002E4D7F /* RenderSVGHiddenContainer.h */, - 853CA9CC0AEEC5E9002372DC /* RenderSVGImage.cpp */, - 853CA9CD0AEEC5E9002372DC /* RenderSVGImage.h */, - A8F5C0B70F9285AC0098E06B /* RenderSVGModelObject.cpp */, - A8F5C0B60F9285AC0098E06B /* RenderSVGModelObject.h */, - 08563BCF117865F50012B578 /* RenderSVGResource.cpp */, - 083192A7112B43050083C3B9 /* RenderSVGResource.h */, - 84BDA16911358D2A00DBF64C /* RenderSVGResourceClipper.cpp */, - 84BDA16A11358D2A00DBF64C /* RenderSVGResourceClipper.h */, - 086A400511F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp */, - 08082372117987C100241DE8 /* RenderSVGResourceContainer.h */, - 841FDC241178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp */, - 841FDC251178C9BE00F8AC9B /* RenderSVGResourceFilter.h */, - 19423B4E1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp */, - 19423B4F1234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h */, - 08C34AF11179C056002D7456 /* RenderSVGResourceGradient.cpp */, - 08C34AF21179C057002D7456 /* RenderSVGResourceGradient.h */, - 08C34AF31179C057002D7456 /* RenderSVGResourceLinearGradient.cpp */, - 08C34AF41179C057002D7456 /* RenderSVGResourceLinearGradient.h */, - 8499A512115FB33000F566E3 /* RenderSVGResourceMarker.cpp */, - 8499A513115FB33000F566E3 /* RenderSVGResourceMarker.h */, - 083192A8112B43050083C3B9 /* RenderSVGResourceMasker.cpp */, - 083192A9112B43050083C3B9 /* RenderSVGResourceMasker.h */, - 08563BB2117861770012B578 /* RenderSVGResourcePattern.cpp */, - 08563BB3117861770012B578 /* RenderSVGResourcePattern.h */, - 08C34AFB1179C072002D7456 /* RenderSVGResourceRadialGradient.cpp */, - 08C34AFC1179C072002D7456 /* RenderSVGResourceRadialGradient.h */, - 08C6A7A9117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp */, - 08C6A7AA117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h */, - AA31B5B20C1DFD1000AE7083 /* RenderSVGRoot.cpp */, - AA31B5B30C1DFD1000AE7083 /* RenderSVGRoot.h */, - 08DAB9B81103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.cpp */, - 08DAB9B91103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.h */, - A8A909AB0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp */, - A8A909AA0CBCD6B50029B807 /* RenderSVGTransformableContainer.h */, - B2CCEC450C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp */, - B2CCEC460C6CA9F1006A5424 /* RenderSVGViewportContainer.h */, A8DF4AE20980C42C0052981B /* RenderTable.cpp */, A8DF4AE10980C42C0052981B /* RenderTable.h */, A8DF4AE00980C42C0052981B /* RenderTableCell.cpp */, @@ -18710,23 +18802,6 @@ 5D925B660F64D4DD00B847F0 /* ScrollBehavior.h */, A7F338A111C0EFCA00A320A7 /* ShadowElement.cpp */, A7F338A211C0EFCA00A320A7 /* ShadowElement.h */, - 08C46B671212F15D0011AF40 /* SVGImageBufferTools.cpp */, - 08C46B681212F15D0011AF40 /* SVGImageBufferTools.h */, - 08385FF510F0186000BFE07B /* SVGMarkerData.h */, - 08735FB610E91232006D6FAD /* SVGMarkerLayoutInfo.cpp */, - 08735FB710E91232006D6FAD /* SVGMarkerLayoutInfo.h */, - A8F4FB950C169E85002AFED5 /* SVGRenderSupport.cpp */, - A8F4FB930C169E7B002AFED5 /* SVGRenderSupport.h */, - B2EBDC9A0AF77E3400AE4A68 /* SVGRenderTreeAsText.cpp */, - B2EBDC9B0AF77E3400AE4A68 /* SVGRenderTreeAsText.h */, - 084D0E3811F5816100081E1A /* SVGResources.cpp */, - 084D0E3911F5816100081E1A /* SVGResources.h */, - 084D0E3A11F5816100081E1A /* SVGResourcesCache.cpp */, - 084D0E3B11F5816100081E1A /* SVGResourcesCache.h */, - 085B05C011FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp */, - 085B05C111FAE16C004D65F6 /* SVGResourcesCycleSolver.h */, - 08DAB9C01103D9C1003E7ABA /* SVGShadowTreeElements.cpp */, - 08DAB9C11103D9C1003E7ABA /* SVGShadowTreeElements.h */, A8CFF04C0A154F09000A4234 /* TableLayout.h */, AB014DE10E689A4300E10445 /* TextControlInnerElements.cpp */, AB014DE20E689A4300E10445 /* TextControlInnerElements.h */, @@ -19058,26 +19133,6 @@ FA654A691108ABED002615E0 /* MathMLTextElement.cpp */, FA654A6A1108ABED002615E0 /* MathMLTextElement.h */, FABE72F31059C1EB00D999DD /* mathtags.in */, - FA654A6D1108ABFF002615E0 /* RenderMathMLBlock.cpp */, - FA654A6E1108ABFF002615E0 /* RenderMathMLBlock.h */, - 0F69B9C7120FE1D6000E1FC7 /* RenderMathMLFenced.cpp */, - 0F69B9C8120FE1D6000E1FC7 /* RenderMathMLFenced.h */, - FAA1056E114C2DF700940A01 /* RenderMathMLFraction.cpp */, - FAA1056F114C2DF700940A01 /* RenderMathMLFraction.h */, - FA0B1F8211125CEE007F9839 /* RenderMathMLMath.cpp */, - FA0B1F8311125CEE007F9839 /* RenderMathMLMath.h */, - FA5FAE4011126A5D00D3750F /* RenderMathMLOperator.cpp */, - FA5FAE4111126A5D00D3750F /* RenderMathMLOperator.h */, - 0FF2813211821CB6007B7CD6 /* RenderMathMLRoot.cpp */, - 0FF2813311821CB6007B7CD6 /* RenderMathMLRoot.h */, - FA0B1F8411125CEE007F9839 /* RenderMathMLRow.cpp */, - FA0B1F8511125CEE007F9839 /* RenderMathMLRow.h */, - 0FF2813411821CB6007B7CD6 /* RenderMathMLSquareRoot.cpp */, - 0FF2813511821CB6007B7CD6 /* RenderMathMLSquareRoot.h */, - FAC12CC21120DA6900DACC36 /* RenderMathMLSubSup.cpp */, - FAC12CC31120DA6900DACC36 /* RenderMathMLSubSup.h */, - FA7EFB031120D25400CF79C7 /* RenderMathMLUnderOver.cpp */, - FA7EFB041120D25400CF79C7 /* RenderMathMLUnderOver.h */, ); path = mathml; sourceTree = "<group>"; @@ -19302,7 +19357,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CDEA7C841276230400B846DD /* RenderFullScreen.h in Headers */, B5B5DC6A119BB3D5002A8790 /* AbstractDatabase.h in Headers */, 41E1B1D10FF5986900576B3B /* AbstractWorker.h in Headers */, 29A8122E0FBB9C1D00510293 /* AccessibilityARIAGridCell.h in Headers */, @@ -19320,6 +19374,7 @@ A409C985116D0DDD007197BD /* AccessibilityProgressIndicator.h in Headers */, 29A812390FBB9C1D00510293 /* AccessibilityRenderObject.h in Headers */, 93C4F6EB1108F9A50099D0DB /* AccessibilityScrollbar.h in Headers */, + 29489FC712C00F0300D83F0F /* AccessibilityScrollView.h in Headers */, 0709FC4E1025DEE30059CDBA /* AccessibilitySlider.h in Headers */, 29A8122B0FBB9C1D00510293 /* AccessibilityTable.h in Headers */, 29A812320FBB9C1D00510293 /* AccessibilityTableCell.h in Headers */, @@ -19391,6 +19446,8 @@ FD31602212B0267600C1A359 /* AudioSourceNode.h in Headers */, FD31608912B026F700C1A359 /* AudioSourceProvider.h in Headers */, FD31608B12B026F700C1A359 /* AudioUtilities.h in Headers */, + 7EE6846012D26E3800E79415 /* AuthenticationCF.h in Headers */, + 7EE6846112D26E3800E79415 /* AuthenticationChallenge.h in Headers */, 934F713A0D5A6F1000018D69 /* AuthenticationChallengeBase.h in Headers */, E124748410AA161D00B79493 /* AuthenticationClient.h in Headers */, 514C764C0CE9234E007EF3CD /* AuthenticationMac.h in Headers */, @@ -19513,6 +19570,7 @@ FD31602912B0267600C1A359 /* ConvolverNode.h in Headers */, D8B6152F1032495100C8554A /* Cookie.h in Headers */, 9352088209BD45E900F2038D /* CookieJar.h in Headers */, + 7EE6846412D26E3800E79415 /* CookieStorageCFNet.h in Headers */, FE6FD4880F676E5700092873 /* Coordinates.h in Headers */, B8A6A6D5127B338D008673BA /* CorrectionPanelInfo.h in Headers */, A80E6D040A1989CA007FB8C5 /* Counter.h in Headers */, @@ -19698,7 +19756,10 @@ BC7DAAEF0FF9615D00CE0138 /* DOMDataGridDataSource.h in Headers */, 85ACABB00A9CAF8000671E90 /* DOMDocument.h in Headers */, 85089CDB0A98C42800A275AA /* DOMDocumentFragment.h in Headers */, + 44311F8212E4E66C000A8D19 /* DOMDocumentFragmentInternal.h in Headers */, + 44311CD612E4E22D000A8D19 /* DOMDocumentFragmentPrivate.h in Headers */, 85E711950AC5D5350053270F /* DOMDocumentInternal.h in Headers */, + 44311CD712E4E22D000A8D19 /* DOMDocumentPrivate.h in Headers */, 85CA975C0A962E5400690CCF /* DOMDocumentType.h in Headers */, 85E711960AC5D5350053270F /* DOMDocumentTypeInternal.h in Headers */, 8518DCE90A9CC80D0091B7A6 /* DOMDOMImplementation.h in Headers */, @@ -20532,6 +20593,7 @@ 514C76700CE923A1007EF3CD /* FormData.h in Headers */, 085B92BB0EFDE73D00E6123C /* FormDataBuilder.h in Headers */, A8136D380973A8E700D74463 /* FormDataList.h in Headers */, + 7EE6846712D26E3800E79415 /* FormDataStreamCFNet.h in Headers */, 514C764E0CE9234E007EF3CD /* FormDataStreamMac.h in Headers */, 656D373A0ADBA5DE00A4554D /* FormState.h in Headers */, 41885B9311B6FDA6003383BB /* FormSubmission.h in Headers */, @@ -20772,6 +20834,7 @@ B885E8D511E06DD2009FFBF4 /* InspectorApplicationCacheAgent.h in Headers */, 4F707A9A11EF679400ACDA69 /* InspectorBackendDispatcher.h in Headers */, 1C81B95C0E97330800266E07 /* InspectorClient.h in Headers */, + F3335BF912E07DC300D33011 /* InspectorConsoleAgent.h in Headers */, 1C81B95A0E97330800266E07 /* InspectorController.h in Headers */, 82AB1744124B99EC00C5069D /* InspectorCSSAgent.h in Headers */, 7AB0B1C11211A62200A76940 /* InspectorDatabaseAgent.h in Headers */, @@ -21281,6 +21344,7 @@ 316FE0740E6CCBEE00BF6088 /* JSWebKitCSSKeyframesRule.h in Headers */, 498391400F1E767500C23782 /* JSWebKitCSSMatrix.h in Headers */, 31611E5B0E1C4DE000F6A579 /* JSWebKitCSSTransformValue.h in Headers */, + 93F1D5C112D5335600832BEC /* JSWebKitLoseContext.h in Headers */, 494BD79E0F55C94C00747828 /* JSWebKitPoint.h in Headers */, 31C0FF400E4CEFAC007D6FE5 /* JSWebKitTransitionEvent.h in Headers */, 5DA5E0FD102B953800088CF9 /* JSWebSocket.h in Headers */, @@ -21323,6 +21387,7 @@ 89B5EAA211E8003D00F2367E /* LineEnding.h in Headers */, A7AD2F880EC89D07008AB002 /* LinkHash.h in Headers */, 656D37320ADBA5DE00A4554D /* LoaderNSURLExtras.h in Headers */, + 7EE6846912D26E3800E79415 /* LoaderRunLoopCF.h in Headers */, 06E81ED70AB5D5E900C87837 /* LocalCurrentGraphicsContext.h in Headers */, 89878568122CA064003AABDA /* LocalFileSystem.h in Headers */, BC5CFCA911F793320099ED09 /* LocalizationStrategy.h in Headers */, @@ -21342,8 +21407,10 @@ 93309DF8099E64920056E581 /* markup.h in Headers */, 9728C3141268E4390041E89B /* MarkupAccumulator.h in Headers */, FABE72F51059C1EB00D999DD /* MathMLElement.h in Headers */, + 44A28AAC12DFB8AC00AE923B /* MathMLElementFactory.h in Headers */, FABE72F71059C1EB00D999DD /* MathMLInlineContainerElement.h in Headers */, FABE72F91059C1EB00D999DD /* MathMLMathElement.h in Headers */, + 44A28AAF12DFB8BF00AE923B /* MathMLNames.h in Headers */, FA654A6C1108ABED002615E0 /* MathMLTextElement.h in Headers */, 49D5DC2C0F423A73008F20FD /* Matrix3DTransformOperation.h in Headers */, 49E911C70EF86D47009D0CAF /* MatrixTransformOperation.h in Headers */, @@ -21449,7 +21516,6 @@ A8FA6E5D0E4CFDED00D5CF49 /* Pattern.h in Headers */, B22279710D00BF220071B782 /* PatternAttributes.h in Headers */, B27535650B053814002CE64F /* PDFDocumentImage.h in Headers */, - B27535820B053814002CE64F /* Pen.h in Headers */, 8A7CC96B12076D73001D4588 /* PendingScript.h in Headers */, 8A844D0511D3C18E0014065C /* Performance.h in Headers */, 8AF4E55611DC5A36000ED3DE /* PerformanceNavigation.h in Headers */, @@ -21459,6 +21525,7 @@ 377C4CDF1014E9F600B9AE42 /* PlaceholderDocument.h in Headers */, 499B3EDD128DB50200E726C2 /* PlatformCAAnimation.h in Headers */, 499B3EC5128CCC4700E726C2 /* PlatformCALayer.h in Headers */, + 493E5E0912D6420500020081 /* PlatformCALayerClient.h in Headers */, 935C476809AC4D4300A6AAB4 /* PlatformKeyboardEvent.h in Headers */, 932871C00B20DEB70049035A /* PlatformMenuDescription.h in Headers */, 41BF70100FE86F61005E8DEC /* PlatformMessagePortChannel.h in Headers */, @@ -21534,10 +21601,10 @@ A8EA73C40A1900E300A8EF5F /* RenderFieldset.h in Headers */, 066C77310AB603FD00238CC4 /* RenderFileUploadControl.h in Headers */, BCEA486E097D93020094C9E4 /* RenderFlexibleBox.h in Headers */, - 853CA9ED0AEEC63C002372DC /* RenderForeignObject.h in Headers */, A871DED30A1530C700B12A68 /* RenderFrame.h in Headers */, 0FD3080F117CF7E700A791F7 /* RenderFrameBase.h in Headers */, A871DED10A1530C700B12A68 /* RenderFrameSet.h in Headers */, + CDEA7C841276230400B846DD /* RenderFullScreen.h in Headers */, BCEA486A097D93020094C9E4 /* RenderHTMLCanvas.h in Headers */, 0FD308D6117D168500A791F7 /* RenderIFrame.h in Headers */, BCEA4876097D93020094C9E4 /* RenderImage.h in Headers */, @@ -21554,16 +21621,16 @@ A8EA7A520A191A5200A8EF5F /* RenderListItem.h in Headers */, A8EA7A500A191A5200A8EF5F /* RenderListMarker.h in Headers */, 0F56028F0E4B76580065B038 /* RenderMarquee.h in Headers */, - FA654A701108ABFF002615E0 /* RenderMathMLBlock.h in Headers */, - 0F69B9CA120FE1D6000E1FC7 /* RenderMathMLFenced.h in Headers */, - FAA10571114C2DF700940A01 /* RenderMathMLFraction.h in Headers */, - FA0B1F8711125CEE007F9839 /* RenderMathMLMath.h in Headers */, - FA5FAE4311126A5D00D3750F /* RenderMathMLOperator.h in Headers */, - 0FF2859111864053007B7CD6 /* RenderMathMLRoot.h in Headers */, - FA0B1F8911125CEE007F9839 /* RenderMathMLRow.h in Headers */, - 0FF2859311864055007B7CD6 /* RenderMathMLSquareRoot.h in Headers */, - FAC12CC51120DA6900DACC36 /* RenderMathMLSubSup.h in Headers */, - FA7EFB061120D25400CF79C7 /* RenderMathMLUnderOver.h in Headers */, + 439046D812DA25E800AF80A2 /* RenderMathMLBlock.h in Headers */, + 439046DA12DA25E800AF80A2 /* RenderMathMLFenced.h in Headers */, + 439046DC12DA25E800AF80A2 /* RenderMathMLFraction.h in Headers */, + 439046DE12DA25E800AF80A2 /* RenderMathMLMath.h in Headers */, + 439046E012DA25E800AF80A2 /* RenderMathMLOperator.h in Headers */, + 439046E212DA25E800AF80A2 /* RenderMathMLRoot.h in Headers */, + 439046E412DA25E800AF80A2 /* RenderMathMLRow.h in Headers */, + 439046E612DA25E800AF80A2 /* RenderMathMLSquareRoot.h in Headers */, + 439046E812DA25E800AF80A2 /* RenderMathMLSubSup.h in Headers */, + 439046EA12DA25E800AF80A2 /* RenderMathMLUnderOver.h in Headers */, E4C279590CF9741900E97B98 /* RenderMedia.h in Headers */, ABDDFE7A0A5C6E7000A3E11D /* RenderMenuList.h in Headers */, A454424F119B3687009BE912 /* RenderMeter.h in Headers */, @@ -21586,34 +21653,35 @@ BC8C8FAE0DDCD31B00B592F4 /* RenderStyle.h in Headers */, BC5EB6680E81CB7100B25965 /* RenderStyleConstants.h in Headers */, D302754E12A5FEAB004BD828 /* RenderSummary.h in Headers */, - A7352C1A0B1BB89D00A986D0 /* RenderSVGBlock.h in Headers */, - 853CA9D70AEEC5E9002372DC /* RenderSVGContainer.h in Headers */, - A809F1470B73793A002E4D7F /* RenderSVGGradientStop.h in Headers */, - A809F1AA0B737FB6002E4D7F /* RenderSVGHiddenContainer.h in Headers */, - 853CA9D90AEEC5E9002372DC /* RenderSVGImage.h in Headers */, + 436708C112D9CA4B00044234 /* RenderSVGBlock.h in Headers */, + 436708C312D9CA4B00044234 /* RenderSVGContainer.h in Headers */, + 43C092BC12D9E4EE00A989C3 /* RenderSVGForeignObject.h in Headers */, + 436708C512D9CA4B00044234 /* RenderSVGGradientStop.h in Headers */, + 436708C712D9CA4B00044234 /* RenderSVGHiddenContainer.h in Headers */, + 436708C912D9CA4B00044234 /* RenderSVGImage.h in Headers */, 0854B0151255E4E600B9CDD0 /* RenderSVGInline.h in Headers */, 0854B0171255E4E600B9CDD0 /* RenderSVGInlineText.h in Headers */, - A8F5C0B80F9285AC0098E06B /* RenderSVGModelObject.h in Headers */, + 436708CB12D9CA4B00044234 /* RenderSVGModelObject.h in Headers */, ADDF1AD71257CD9A0003A759 /* RenderSVGPath.h in Headers */, - 083192AA112B43050083C3B9 /* RenderSVGResource.h in Headers */, - 84BDA16C11358D2A00DBF64C /* RenderSVGResourceClipper.h in Headers */, - 08082373117987C100241DE8 /* RenderSVGResourceContainer.h in Headers */, - 841FDC271178C9BE00F8AC9B /* RenderSVGResourceFilter.h in Headers */, - 19423B511234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.h in Headers */, - 08C34AF61179C057002D7456 /* RenderSVGResourceGradient.h in Headers */, - 08C34AF81179C057002D7456 /* RenderSVGResourceLinearGradient.h in Headers */, - 8499A515115FB33000F566E3 /* RenderSVGResourceMarker.h in Headers */, - 083192AC112B43050083C3B9 /* RenderSVGResourceMasker.h in Headers */, - 08563BB5117861780012B578 /* RenderSVGResourcePattern.h in Headers */, - 08C34AFE1179C072002D7456 /* RenderSVGResourceRadialGradient.h in Headers */, - 08C6A7AC117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.h in Headers */, - AA31B5B50C1DFD1000AE7083 /* RenderSVGRoot.h in Headers */, - 08DAB9BB1103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.h in Headers */, + 436708CD12D9CA4B00044234 /* RenderSVGResource.h in Headers */, + 436708CF12D9CA4B00044234 /* RenderSVGResourceClipper.h in Headers */, + 436708D112D9CA4B00044234 /* RenderSVGResourceContainer.h in Headers */, + 436708D312D9CA4B00044234 /* RenderSVGResourceFilter.h in Headers */, + 436708D512D9CA4B00044234 /* RenderSVGResourceFilterPrimitive.h in Headers */, + 436708D712D9CA4B00044234 /* RenderSVGResourceGradient.h in Headers */, + 436708D912D9CA4B00044234 /* RenderSVGResourceLinearGradient.h in Headers */, + 436708DB12D9CA4B00044234 /* RenderSVGResourceMarker.h in Headers */, + 436708DD12D9CA4B00044234 /* RenderSVGResourceMasker.h in Headers */, + 436708DF12D9CA4B00044234 /* RenderSVGResourcePattern.h in Headers */, + 436708E112D9CA4B00044234 /* RenderSVGResourceRadialGradient.h in Headers */, + 436708E312D9CA4B00044234 /* RenderSVGResourceSolidColor.h in Headers */, + 436708E512D9CA4B00044234 /* RenderSVGRoot.h in Headers */, + 436708E712D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.h in Headers */, 0854B0191255E4E600B9CDD0 /* RenderSVGText.h in Headers */, 0854B01B1255E4E600B9CDD0 /* RenderSVGTextPath.h in Headers */, - A8A909AC0CBCD6B50029B807 /* RenderSVGTransformableContainer.h in Headers */, + 436708E912D9CA4B00044234 /* RenderSVGTransformableContainer.h in Headers */, 0854B01D1255E4E600B9CDD0 /* RenderSVGTSpan.h in Headers */, - B2CCEC480C6CA9F1006A5424 /* RenderSVGViewportContainer.h in Headers */, + 436708EB12D9CA4B00044234 /* RenderSVGViewportContainer.h in Headers */, A8DF4AEB0980C42C0052981B /* RenderTable.h in Headers */, A8DF4AE90980C42C0052981B /* RenderTableCell.h in Headers */, A8DF4AF10980C42C0052981B /* RenderTableCol.h in Headers */, @@ -21634,6 +21702,7 @@ A89CCC530F44E98100B5DA10 /* ReplaceNodeWithSpanCommand.h in Headers */, 93309E0A099E64920056E581 /* ReplaceSelectionCommand.h in Headers */, F55B3DD01251F12D003EF269 /* ResetInputType.h in Headers */, + 7EE6846A12D26E3800E79415 /* ResourceError.h in Headers */, 934F713C0D5A6F1900018D69 /* ResourceErrorBase.h in Headers */, 514C76790CE923A1007EF3CD /* ResourceHandle.h in Headers */, 514C767A0CE923A1007EF3CD /* ResourceHandleClient.h in Headers */, @@ -21644,7 +21713,10 @@ E4295FA412B0614E00D1ACE0 /* ResourceLoadPriority.h in Headers */, D0CE58F9125E4CC200F3F199 /* ResourceLoadScheduler.h in Headers */, 8A81BF8511DCFD9000DA2B98 /* ResourceLoadTiming.h in Headers */, + 7EE6846D12D26E3800E79415 /* ResourceRequest.h in Headers */, 514C767D0CE923A1007EF3CD /* ResourceRequestBase.h in Headers */, + 7EE6846F12D26E3800E79415 /* ResourceRequestCFNet.h in Headers */, + 7EE6847012D26E3800E79415 /* ResourceResponse.h in Headers */, 514C767F0CE923A1007EF3CD /* ResourceResponseBase.h in Headers */, FD3160A512B026F700C1A359 /* Reverb.h in Headers */, FD3160A712B026F700C1A359 /* ReverbAccumulationBuffer.h in Headers */, @@ -21919,7 +21991,7 @@ B2227A2A0D00BF220071B782 /* SVGGradientElement.h in Headers */, 650FBF2B0D9AF047008FC292 /* SVGHKernElement.h in Headers */, B25599A40D00D8BA00BB825C /* SVGImage.h in Headers */, - 08C46B6A1212F15E0011AF40 /* SVGImageBufferTools.h in Headers */, + 436708ED12D9CA4B00044234 /* SVGImageBufferTools.h in Headers */, B2227A2D0D00BF220071B782 /* SVGImageElement.h in Headers */, B28C6A2A0D00C44800334AA4 /* SVGImageLoader.h in Headers */, 0854B01F1255E4E600B9CDD0 /* SVGInlineFlowBox.h in Headers */, @@ -21932,9 +22004,9 @@ 0810764412828556007C63BA /* SVGListProperty.h in Headers */, 088A0E09126EF1DB00978F7A /* SVGListPropertyTearOff.h in Headers */, B2227A410D00BF220071B782 /* SVGLocatable.h in Headers */, - 08385FF610F0186000BFE07B /* SVGMarkerData.h in Headers */, + 436708EE12D9CA4B00044234 /* SVGMarkerData.h in Headers */, B2227A440D00BF220071B782 /* SVGMarkerElement.h in Headers */, - 08735FB910E91232006D6FAD /* SVGMarkerLayoutInfo.h in Headers */, + 436708F012D9CA4B00044234 /* SVGMarkerLayoutInfo.h in Headers */, B2227A470D00BF220071B782 /* SVGMaskElement.h in Headers */, 0806E57A12893045007CED32 /* SVGMatrix.h in Headers */, B2227A4B0D00BF220071B782 /* SVGMetadataElement.h in Headers */, @@ -21987,15 +22059,15 @@ B2227AA00D00BF220071B782 /* SVGRenderingIntent.h in Headers */, BC2274790E8366E200E7F975 /* SVGRenderStyle.h in Headers */, BC22747B0E8366E200E7F975 /* SVGRenderStyleDefs.h in Headers */, - A8F4FB940C169E7B002AFED5 /* SVGRenderSupport.h in Headers */, - B2EBDC9D0AF77E3400AE4A68 /* SVGRenderTreeAsText.h in Headers */, - 084D0E3D11F5816100081E1A /* SVGResources.h in Headers */, - 084D0E3F11F5816100081E1A /* SVGResourcesCache.h in Headers */, - 085B05C311FAE16C004D65F6 /* SVGResourcesCycleSolver.h in Headers */, + 436708F212D9CA4B00044234 /* SVGRenderSupport.h in Headers */, + 436708F412D9CA4B00044234 /* SVGRenderTreeAsText.h in Headers */, + 436708F612D9CA4B00044234 /* SVGResources.h in Headers */, + 436708F812D9CA4B00044234 /* SVGResourcesCache.h in Headers */, + 436708FA12D9CA4B00044234 /* SVGResourcesCycleSolver.h in Headers */, 0854B0231255E4E600B9CDD0 /* SVGRootInlineBox.h in Headers */, B2227AA30D00BF220071B782 /* SVGScriptElement.h in Headers */, B2227AA60D00BF220071B782 /* SVGSetElement.h in Headers */, - 08DAB9C31103D9C1003E7ABA /* SVGShadowTreeElements.h in Headers */, + 436708FC12D9CA4B00044234 /* SVGShadowTreeElements.h in Headers */, E4AFD0100DAF335500F5F55C /* SVGSMILElement.h in Headers */, 0880F70E1282B46D00948505 /* SVGStaticListPropertyTearOff.h in Headers */, 0813A4EA1284132600992511 /* SVGStaticPropertyTearOff.h in Headers */, @@ -22168,6 +22240,7 @@ 31288E750E3005D6003619AE /* WebKitCSSKeyframesRule.h in Headers */, 498391590F1E776900C23782 /* WebKitCSSMatrix.h in Headers */, BC9ADD230CC4032600098C4C /* WebKitCSSTransformValue.h in Headers */, + 93F1D5BB12D532C400832BEC /* WebKitLoseContext.h in Headers */, 494BD7950F55C8EE00747828 /* WebKitPoint.h in Headers */, 31C0FF250E4CEB6E007D6FE5 /* WebKitTransitionEvent.h in Headers */, 0FCF332F0F2B9A25004B6795 /* WebLayer.h in Headers */, @@ -22279,19 +22352,10 @@ 93F199ED08245E59001E9ABC /* XSLTProcessor.h in Headers */, E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */, 97DD4D870FDF4D6E00ECF9A4 /* XSSAuditor.h in Headers */, - 29489FC712C00F0300D83F0F /* AccessibilityScrollView.h in Headers */, - 7EE6846012D26E3800E79415 /* AuthenticationCF.h in Headers */, - 7EE6846112D26E3800E79415 /* AuthenticationChallenge.h in Headers */, - 7EE6846412D26E3800E79415 /* CookieStorageCFNet.h in Headers */, - 7EE6846712D26E3800E79415 /* FormDataStreamCFNet.h in Headers */, - 7EE6846912D26E3800E79415 /* LoaderRunLoopCF.h in Headers */, - 7EE6846A12D26E3800E79415 /* ResourceError.h in Headers */, - 7EE6846D12D26E3800E79415 /* ResourceRequest.h in Headers */, - 7EE6846F12D26E3800E79415 /* ResourceRequestCFNet.h in Headers */, - 7EE6847012D26E3800E79415 /* ResourceResponse.h in Headers */, - 493E5E0912D6420500020081 /* PlatformCALayerClient.h in Headers */, - 93F1D5BB12D532C400832BEC /* WebKitLoseContext.h in Headers */, - 93F1D5C112D5335600832BEC /* JSWebKitLoseContext.h in Headers */, + 2E37DFDB12DBAFB800A6B233 /* DOMURL.h in Headers */, + 2E37E00612DBC5A400A6B233 /* JSDOMURL.h in Headers */, + 7A5640C012DF9E5E00F4536D /* InspectorSettings.h in Headers */, + F3D4C47912E07663003DA150 /* InspectorBrowserDebuggerAgent.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -22609,6 +22673,7 @@ A409C984116D0DDD007197BD /* AccessibilityProgressIndicator.cpp in Sources */, 29A812260FBB9C1D00510293 /* AccessibilityRenderObject.cpp in Sources */, 93C4F6EA1108F9A50099D0DB /* AccessibilityScrollbar.cpp in Sources */, + 29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */, 0709FC4C1025DED80059CDBA /* AccessibilitySlider.cpp in Sources */, 29A812270FBB9C1D00510293 /* AccessibilityTable.cpp in Sources */, 29A8122A0FBB9C1D00510293 /* AccessibilityTableCell.cpp in Sources */, @@ -22666,6 +22731,7 @@ FD31608512B026F700C1A359 /* AudioResampler.cpp in Sources */, FD31608712B026F700C1A359 /* AudioResamplerKernel.cpp in Sources */, FD31608A12B026F700C1A359 /* AudioUtilities.cpp in Sources */, + 7EE6845F12D26E3800E79415 /* AuthenticationCF.cpp in Sources */, 934F71380D5A6EFF00018D69 /* AuthenticationChallengeBase.cpp in Sources */, 514C764D0CE9234E007EF3CD /* AuthenticationMac.mm in Sources */, 51E1ECAF0C91C54600DC255B /* AutodrainedPool.mm in Sources */, @@ -22766,12 +22832,15 @@ 93B6A0EA0B0BCA8400F5027A /* ContextMenuMac.mm in Sources */, FD31602812B0267600C1A359 /* ConvolverNode.cpp in Sources */, 9352087709BD453400F2038D /* CookieJar.mm in Sources */, + 7EE6846212D26E3800E79415 /* CookieJarCFNet.cpp in Sources */, + 7EE6846312D26E3800E79415 /* CookieStorageCFNet.cpp in Sources */, E13F01F11270E19000DFBA71 /* CookieStorageMac.mm in Sources */, BC5EB9500E82056B00B25965 /* CounterDirectives.cpp in Sources */, 9392F1500AD1862300691BD4 /* CounterNode.cpp in Sources */, D0B0556909C6700100307E43 /* CreateLinkCommand.cpp in Sources */, 514C766D0CE923A1007EF3CD /* Credential.cpp in Sources */, 51A052341058774F00CC9E95 /* CredentialStorage.cpp in Sources */, + 7EE6846512D26E3800E79415 /* CredentialStorageCFNet.cpp in Sources */, E1B4CD2510B322E200BFFD7E /* CredentialStorageMac.mm in Sources */, E1C416170F6563180092D2FB /* CrossOriginAccessControl.cpp in Sources */, E1C415DE0F655D7C0092D2FB /* CrossOriginPreflightResultCache.cpp in Sources */, @@ -23286,6 +23355,7 @@ 514C766F0CE923A1007EF3CD /* FormData.cpp in Sources */, 085B92BA0EFDE73D00E6123C /* FormDataBuilder.cpp in Sources */, A8136D390973A8E700D74463 /* FormDataList.cpp in Sources */, + 7EE6846612D26E3800E79415 /* FormDataStreamCFNet.cpp in Sources */, 514C764F0CE9234E007EF3CD /* FormDataStreamMac.mm in Sources */, 656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */, 41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */, @@ -23497,6 +23567,7 @@ B885E8D411E06DD2009FFBF4 /* InspectorApplicationCacheAgent.cpp in Sources */, 4F707A9911EF679400ACDA69 /* InspectorBackendDispatcher.cpp in Sources */, 7A1F2B52126C61B20006A7E6 /* InspectorClient.cpp in Sources */, + F3335BF812E07DC300D33011 /* InspectorConsoleAgent.cpp in Sources */, 1C81B95B0E97330800266E07 /* InspectorController.cpp in Sources */, 82AB1743124B99EC00C5069D /* InspectorCSSAgent.cpp in Sources */, 7AB0B1C01211A62200A76940 /* InspectorDatabaseAgent.cpp in Sources */, @@ -24107,6 +24178,7 @@ 4983913F0F1E767500C23782 /* JSWebKitCSSMatrix.cpp in Sources */, BC275B7D11C5D23500C9206C /* JSWebKitCSSMatrixCustom.cpp in Sources */, 31611E5A0E1C4DE000F6A579 /* JSWebKitCSSTransformValue.cpp in Sources */, + 93F1D5C012D5335600832BEC /* JSWebKitLoseContext.cpp in Sources */, 494BD79D0F55C94C00747828 /* JSWebKitPoint.cpp in Sources */, BC275B7911C5D1C300C9206C /* JSWebKitPointCustom.cpp in Sources */, 31C0FF3F0E4CEFAC007D6FE5 /* JSWebKitTransitionEvent.cpp in Sources */, @@ -24156,6 +24228,7 @@ 89B5EAA111E8003D00F2367E /* LineEnding.cpp in Sources */, A7AD2F870EC89D07008AB002 /* LinkHash.cpp in Sources */, 656D37330ADBA5DE00A4554D /* LoaderNSURLExtras.mm in Sources */, + 7EE6846812D26E3800E79415 /* LoaderRunLoopCF.cpp in Sources */, 06E81EEC0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm in Sources */, 89878567122CA064003AABDA /* LocalFileSystem.cpp in Sources */, C046E1AC1208A9FE00BA2CF7 /* LocalizedStrings.cpp in Sources */, @@ -24260,7 +24333,6 @@ A8FA6E5E0E4CFDED00D5CF49 /* Pattern.cpp in Sources */, A80A38FE0E50CC8200A25EBC /* PatternCG.cpp in Sources */, B27535640B053814002CE64F /* PDFDocumentImage.cpp in Sources */, - B27535810B053814002CE64F /* Pen.cpp in Sources */, 8A7CC97012076F8A001D4588 /* PendingScript.cpp in Sources */, 8A844D0411D3C18E0014065C /* Performance.cpp in Sources */, 8AF4E55511DC5A36000ED3DE /* PerformanceNavigation.cpp in Sources */, @@ -24322,10 +24394,10 @@ A8EA73C30A1900E300A8EF5F /* RenderFieldset.cpp in Sources */, 066C77300AB603FD00238CC4 /* RenderFileUploadControl.cpp in Sources */, BCEA486D097D93020094C9E4 /* RenderFlexibleBox.cpp in Sources */, - 853CA9EC0AEEC63C002372DC /* RenderForeignObject.cpp in Sources */, A871DED40A1530C700B12A68 /* RenderFrame.cpp in Sources */, 0FD3080E117CF7E700A791F7 /* RenderFrameBase.cpp in Sources */, A871DED20A1530C700B12A68 /* RenderFrameSet.cpp in Sources */, + CDEA7C851276230400B846DD /* RenderFullScreen.cpp in Sources */, BCEA4869097D93020094C9E4 /* RenderHTMLCanvas.cpp in Sources */, 0FD308D5117D168500A791F7 /* RenderIFrame.cpp in Sources */, BCEA4875097D93020094C9E4 /* RenderImage.cpp in Sources */, @@ -24342,16 +24414,16 @@ A8EA7A4E0A191A5200A8EF5F /* RenderListItem.cpp in Sources */, A8EA7A510A191A5200A8EF5F /* RenderListMarker.cpp in Sources */, 0F5602900E4B76580065B038 /* RenderMarquee.cpp in Sources */, - FA654A6F1108ABFF002615E0 /* RenderMathMLBlock.cpp in Sources */, - 0F69B9C9120FE1D6000E1FC7 /* RenderMathMLFenced.cpp in Sources */, - FAA10570114C2DF700940A01 /* RenderMathMLFraction.cpp in Sources */, - FA0B1F8611125CEE007F9839 /* RenderMathMLMath.cpp in Sources */, - FA5FAE4211126A5D00D3750F /* RenderMathMLOperator.cpp in Sources */, - 0FF2859011864052007B7CD6 /* RenderMathMLRoot.cpp in Sources */, - FA0B1F8811125CEE007F9839 /* RenderMathMLRow.cpp in Sources */, - 0FF2859211864054007B7CD6 /* RenderMathMLSquareRoot.cpp in Sources */, - FAC12CC41120DA6900DACC36 /* RenderMathMLSubSup.cpp in Sources */, - FA7EFB051120D25400CF79C7 /* RenderMathMLUnderOver.cpp in Sources */, + 439046D712DA25E800AF80A2 /* RenderMathMLBlock.cpp in Sources */, + 439046D912DA25E800AF80A2 /* RenderMathMLFenced.cpp in Sources */, + 439046DB12DA25E800AF80A2 /* RenderMathMLFraction.cpp in Sources */, + 439046DD12DA25E800AF80A2 /* RenderMathMLMath.cpp in Sources */, + 439046DF12DA25E800AF80A2 /* RenderMathMLOperator.cpp in Sources */, + 439046E112DA25E800AF80A2 /* RenderMathMLRoot.cpp in Sources */, + 439046E312DA25E800AF80A2 /* RenderMathMLRow.cpp in Sources */, + 439046E512DA25E800AF80A2 /* RenderMathMLSquareRoot.cpp in Sources */, + 439046E712DA25E800AF80A2 /* RenderMathMLSubSup.cpp in Sources */, + 439046E912DA25E800AF80A2 /* RenderMathMLUnderOver.cpp in Sources */, E4C279580CF9741900E97B98 /* RenderMedia.cpp in Sources */, ABDDFE790A5C6E7000A3E11D /* RenderMenuList.cpp in Sources */, A454424E119B3687009BE912 /* RenderMeter.cpp in Sources */, @@ -24371,34 +24443,35 @@ AB247A6C0AFD6383003FA5FD /* RenderSlider.cpp in Sources */, BC8C8FAD0DDCD31B00B592F4 /* RenderStyle.cpp in Sources */, D302754D12A5FEAB004BD828 /* RenderSummary.cpp in Sources */, - A7352C190B1BB89D00A986D0 /* RenderSVGBlock.cpp in Sources */, - 853CA9D60AEEC5E9002372DC /* RenderSVGContainer.cpp in Sources */, - A809F1480B73793B002E4D7F /* RenderSVGGradientStop.cpp in Sources */, - A809F1AB0B737FB6002E4D7F /* RenderSVGHiddenContainer.cpp in Sources */, - 853CA9D80AEEC5E9002372DC /* RenderSVGImage.cpp in Sources */, + 436708C012D9CA4B00044234 /* RenderSVGBlock.cpp in Sources */, + 436708C212D9CA4B00044234 /* RenderSVGContainer.cpp in Sources */, + 43C092BB12D9E4EE00A989C3 /* RenderSVGForeignObject.cpp in Sources */, + 436708C412D9CA4B00044234 /* RenderSVGGradientStop.cpp in Sources */, + 436708C612D9CA4B00044234 /* RenderSVGHiddenContainer.cpp in Sources */, + 436708C812D9CA4B00044234 /* RenderSVGImage.cpp in Sources */, 0854B0141255E4E600B9CDD0 /* RenderSVGInline.cpp in Sources */, 0854B0161255E4E600B9CDD0 /* RenderSVGInlineText.cpp in Sources */, - A8F5C0B90F9285AC0098E06B /* RenderSVGModelObject.cpp in Sources */, + 436708CA12D9CA4B00044234 /* RenderSVGModelObject.cpp in Sources */, ADDF1AD61257CD9A0003A759 /* RenderSVGPath.cpp in Sources */, - 08563BD0117865F50012B578 /* RenderSVGResource.cpp in Sources */, - 84BDA16B11358D2A00DBF64C /* RenderSVGResourceClipper.cpp in Sources */, - 086A400611F6D6B7002CEC53 /* RenderSVGResourceContainer.cpp in Sources */, - 841FDC261178C9BE00F8AC9B /* RenderSVGResourceFilter.cpp in Sources */, - 19423B501234E86B00D1EE9E /* RenderSVGResourceFilterPrimitive.cpp in Sources */, - 08C34AF51179C057002D7456 /* RenderSVGResourceGradient.cpp in Sources */, - 08C34AF71179C057002D7456 /* RenderSVGResourceLinearGradient.cpp in Sources */, - 8499A514115FB33000F566E3 /* RenderSVGResourceMarker.cpp in Sources */, - 083192AB112B43050083C3B9 /* RenderSVGResourceMasker.cpp in Sources */, - 08563BB4117861780012B578 /* RenderSVGResourcePattern.cpp in Sources */, - 08C34AFD1179C072002D7456 /* RenderSVGResourceRadialGradient.cpp in Sources */, - 08C6A7AB117DFBAB00FEA1A2 /* RenderSVGResourceSolidColor.cpp in Sources */, - AA31B5B40C1DFD1000AE7083 /* RenderSVGRoot.cpp in Sources */, - 08DAB9BA1103D9A5003E7ABA /* RenderSVGShadowTreeRootContainer.cpp in Sources */, + 436708CC12D9CA4B00044234 /* RenderSVGResource.cpp in Sources */, + 436708CE12D9CA4B00044234 /* RenderSVGResourceClipper.cpp in Sources */, + 436708D012D9CA4B00044234 /* RenderSVGResourceContainer.cpp in Sources */, + 436708D212D9CA4B00044234 /* RenderSVGResourceFilter.cpp in Sources */, + 436708D412D9CA4B00044234 /* RenderSVGResourceFilterPrimitive.cpp in Sources */, + 436708D612D9CA4B00044234 /* RenderSVGResourceGradient.cpp in Sources */, + 436708D812D9CA4B00044234 /* RenderSVGResourceLinearGradient.cpp in Sources */, + 436708DA12D9CA4B00044234 /* RenderSVGResourceMarker.cpp in Sources */, + 436708DC12D9CA4B00044234 /* RenderSVGResourceMasker.cpp in Sources */, + 436708DE12D9CA4B00044234 /* RenderSVGResourcePattern.cpp in Sources */, + 436708E012D9CA4B00044234 /* RenderSVGResourceRadialGradient.cpp in Sources */, + 436708E212D9CA4B00044234 /* RenderSVGResourceSolidColor.cpp in Sources */, + 436708E412D9CA4B00044234 /* RenderSVGRoot.cpp in Sources */, + 436708E612D9CA4B00044234 /* RenderSVGShadowTreeRootContainer.cpp in Sources */, 0854B0181255E4E600B9CDD0 /* RenderSVGText.cpp in Sources */, 0854B01A1255E4E600B9CDD0 /* RenderSVGTextPath.cpp in Sources */, - A8A909AD0CBCD6B50029B807 /* RenderSVGTransformableContainer.cpp in Sources */, + 436708E812D9CA4B00044234 /* RenderSVGTransformableContainer.cpp in Sources */, 0854B01C1255E4E600B9CDD0 /* RenderSVGTSpan.cpp in Sources */, - B2CCEC470C6CA9F1006A5424 /* RenderSVGViewportContainer.cpp in Sources */, + 436708EA12D9CA4B00044234 /* RenderSVGViewportContainer.cpp in Sources */, A8DF4AEC0980C42C0052981B /* RenderTable.cpp in Sources */, A8DF4AEA0980C42C0052981B /* RenderTableCell.cpp in Sources */, A8DF4AE80980C42C0052981B /* RenderTableCol.cpp in Sources */, @@ -24420,16 +24493,21 @@ 93309E09099E64920056E581 /* ReplaceSelectionCommand.cpp in Sources */, F55B3DCF1251F12D003EF269 /* ResetInputType.cpp in Sources */, 934F713E0D5A6F2800018D69 /* ResourceErrorBase.cpp in Sources */, + 7EE6846B12D26E3800E79415 /* ResourceErrorCF.cpp in Sources */, 514C76500CE9234E007EF3CD /* ResourceErrorMac.mm in Sources */, 514C76780CE923A1007EF3CD /* ResourceHandle.cpp in Sources */, + 7EE6846C12D26E3800E79415 /* ResourceHandleCFNet.cpp in Sources */, 514C76510CE9234E007EF3CD /* ResourceHandleMac.mm in Sources */, 93E227E30AF589AD00D48324 /* ResourceLoader.cpp in Sources */, + 7EE6847512D26E7000E79415 /* ResourceLoaderCFNet.cpp in Sources */, 51AA3F6F0BD5AA9E00892971 /* ResourceLoaderMac.mm in Sources */, 973E325610883B7C005BC493 /* ResourceLoadNotifier.cpp in Sources */, D0CE58F8125E4CC200F3F199 /* ResourceLoadScheduler.cpp in Sources */, 514C767C0CE923A1007EF3CD /* ResourceRequestBase.cpp in Sources */, + 7EE6846E12D26E3800E79415 /* ResourceRequestCFNet.cpp in Sources */, 514C76530CE9234E007EF3CD /* ResourceRequestMac.mm in Sources */, 514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */, + 7EE6847112D26E3800E79415 /* ResourceResponseCFNet.cpp in Sources */, 514C76550CE9234F007EF3CD /* ResourceResponseMac.mm in Sources */, FD3160A412B026F700C1A359 /* Reverb.cpp in Sources */, FD3160A612B026F700C1A359 /* ReverbAccumulationBuffer.cpp in Sources */, @@ -24667,7 +24745,7 @@ B2227A290D00BF220071B782 /* SVGGradientElement.cpp in Sources */, 650FBF2A0D9AF047008FC292 /* SVGHKernElement.cpp in Sources */, B25599A30D00D8BA00BB825C /* SVGImage.cpp in Sources */, - 08C46B691212F15E0011AF40 /* SVGImageBufferTools.cpp in Sources */, + 436708EC12D9CA4B00044234 /* SVGImageBufferTools.cpp in Sources */, B2227A2C0D00BF220071B782 /* SVGImageElement.cpp in Sources */, B28C6A290D00C44800334AA4 /* SVGImageLoader.cpp in Sources */, 0854B01E1255E4E600B9CDD0 /* SVGInlineFlowBox.cpp in Sources */, @@ -24679,7 +24757,7 @@ B2227A3B0D00BF220071B782 /* SVGLineElement.cpp in Sources */, B2227A400D00BF220071B782 /* SVGLocatable.cpp in Sources */, B2227A430D00BF220071B782 /* SVGMarkerElement.cpp in Sources */, - 08735FB810E91232006D6FAD /* SVGMarkerLayoutInfo.cpp in Sources */, + 436708EF12D9CA4B00044234 /* SVGMarkerLayoutInfo.cpp in Sources */, B2227A460D00BF220071B782 /* SVGMaskElement.cpp in Sources */, B2227A4A0D00BF220071B782 /* SVGMetadataElement.cpp in Sources */, B2A1F2B00CEF0ABF00442F6A /* SVGMissingGlyphElement.cpp in Sources */, @@ -24712,15 +24790,15 @@ B2227A9D0D00BF220071B782 /* SVGRectElement.cpp in Sources */, BC2274780E8366E200E7F975 /* SVGRenderStyle.cpp in Sources */, BC22747A0E8366E200E7F975 /* SVGRenderStyleDefs.cpp in Sources */, - A8F4FB960C169E85002AFED5 /* SVGRenderSupport.cpp in Sources */, - B2EBDC9C0AF77E3400AE4A68 /* SVGRenderTreeAsText.cpp in Sources */, - 084D0E3C11F5816100081E1A /* SVGResources.cpp in Sources */, - 084D0E3E11F5816100081E1A /* SVGResourcesCache.cpp in Sources */, - 085B05C211FAE16C004D65F6 /* SVGResourcesCycleSolver.cpp in Sources */, + 436708F112D9CA4B00044234 /* SVGRenderSupport.cpp in Sources */, + 436708F312D9CA4B00044234 /* SVGRenderTreeAsText.cpp in Sources */, + 436708F512D9CA4B00044234 /* SVGResources.cpp in Sources */, + 436708F712D9CA4B00044234 /* SVGResourcesCache.cpp in Sources */, + 436708F912D9CA4B00044234 /* SVGResourcesCycleSolver.cpp in Sources */, 0854B0221255E4E600B9CDD0 /* SVGRootInlineBox.cpp in Sources */, B2227AA20D00BF220071B782 /* SVGScriptElement.cpp in Sources */, B2227AA50D00BF220071B782 /* SVGSetElement.cpp in Sources */, - 08DAB9C21103D9C1003E7ABA /* SVGShadowTreeElements.cpp in Sources */, + 436708FB12D9CA4B00044234 /* SVGShadowTreeElements.cpp in Sources */, E4AFD00F0DAF335500F5F55C /* SVGSMILElement.cpp in Sources */, B2227AA80D00BF220071B782 /* SVGStopElement.cpp in Sources */, B2227AAB0D00BF220071B782 /* SVGStringList.cpp in Sources */, @@ -24860,6 +24938,7 @@ 31288E740E3005D6003619AE /* WebKitCSSKeyframesRule.cpp in Sources */, 498391580F1E776900C23782 /* WebKitCSSMatrix.cpp in Sources */, BC9ADD800CC4092200098C4C /* WebKitCSSTransformValue.cpp in Sources */, + 93F1D5BA12D532C400832BEC /* WebKitLoseContext.cpp in Sources */, 31C0FF240E4CEB6E007D6FE5 /* WebKitTransitionEvent.cpp in Sources */, 0FCF332E0F2B9A25004B6795 /* WebLayer.mm in Sources */, 1CAF34820A6C405200ABE06E /* WebScriptObject.mm in Sources */, @@ -24961,21 +25040,10 @@ 93F19B0508245E59001E9ABC /* XSLTProcessorLibxslt.cpp in Sources */, E1BE512D0CF6C512002EA959 /* XSLTUnicodeSort.cpp in Sources */, 97DD4D860FDF4D6E00ECF9A4 /* XSSAuditor.cpp in Sources */, - 29489FC812C00F0300D83F0F /* AccessibilityScrollView.cpp in Sources */, - 7EE6845F12D26E3800E79415 /* AuthenticationCF.cpp in Sources */, - 7EE6846212D26E3800E79415 /* CookieJarCFNet.cpp in Sources */, - 7EE6846312D26E3800E79415 /* CookieStorageCFNet.cpp in Sources */, - 7EE6846512D26E3800E79415 /* CredentialStorageCFNet.cpp in Sources */, - 7EE6846612D26E3800E79415 /* FormDataStreamCFNet.cpp in Sources */, - 7EE6846812D26E3800E79415 /* LoaderRunLoopCF.cpp in Sources */, - 7EE6846B12D26E3800E79415 /* ResourceErrorCF.cpp in Sources */, - 7EE6846C12D26E3800E79415 /* ResourceHandleCFNet.cpp in Sources */, - 7EE6846E12D26E3800E79415 /* ResourceRequestCFNet.cpp in Sources */, - 7EE6847112D26E3800E79415 /* ResourceResponseCFNet.cpp in Sources */, - 7EE6847512D26E7000E79415 /* ResourceLoaderCFNet.cpp in Sources */, - 93F1D5BA12D532C400832BEC /* WebKitLoseContext.cpp in Sources */, - 93F1D5C012D5335600832BEC /* JSWebKitLoseContext.cpp in Sources */, - CDEA7C851276230400B846DD /* RenderFullScreen.cpp in Sources */, + 2E37DFDA12DBAFB800A6B233 /* DOMURL.cpp in Sources */, + 2E37E00512DBC5A400A6B233 /* JSDOMURL.cpp in Sources */, + 7A5640BF12DF9E5E00F4536D /* InspectorSettings.cpp in Sources */, + F3D4C47812E07663003DA150 /* InspectorBrowserDebuggerAgent.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp index 7dc6840..8b0c5ca 100644 --- a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp +++ b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp @@ -2026,8 +2026,8 @@ void AccessibilityRenderObject::setSelectedTextRange(const PlainTextRange& range if (!frame) return; Node* node = m_renderer->node(); - frame->selection()->setSelection(VisibleSelection(Position(node, range.start), - Position(node, range.start + range.length), DOWNSTREAM)); + frame->selection()->setSelection(VisibleSelection(Position(node, range.start, Position::PositionIsOffsetInAnchor), + Position(node, range.start + range.length, Position::PositionIsOffsetInAnchor), DOWNSTREAM)); } KURL AccessibilityRenderObject::url() const diff --git a/Source/WebCore/bindings/js/GCController.cpp b/Source/WebCore/bindings/js/GCController.cpp index f193b2e..fe0e36f 100644 --- a/Source/WebCore/bindings/js/GCController.cpp +++ b/Source/WebCore/bindings/js/GCController.cpp @@ -29,7 +29,7 @@ #include "JSDOMWindow.h" #include <runtime/JSGlobalData.h> #include <runtime/JSLock.h> -#include <runtime/Collector.h> +#include <runtime/Heap.h> #include <wtf/StdLibExtras.h> #if USE(PTHREADS) diff --git a/Source/WebCore/bindings/js/JSDirectoryEntryCustom.cpp b/Source/WebCore/bindings/js/JSDirectoryEntryCustom.cpp index a0e0455..ceb3ccb 100644 --- a/Source/WebCore/bindings/js/JSDirectoryEntryCustom.cpp +++ b/Source/WebCore/bindings/js/JSDirectoryEntryCustom.cpp @@ -34,6 +34,7 @@ #include "JSDirectoryEntry.h" +#include "ExceptionCode.h" #include "JSDOMBinding.h" #include "JSEntryCallback.h" #include "JSErrorCallback.h" diff --git a/Source/WebCore/bindings/js/JSDocumentCustom.cpp b/Source/WebCore/bindings/js/JSDocumentCustom.cpp index 5f61e2a..4cc176c 100644 --- a/Source/WebCore/bindings/js/JSDocumentCustom.cpp +++ b/Source/WebCore/bindings/js/JSDocumentCustom.cpp @@ -31,8 +31,11 @@ #include "JSDOMWindowCustom.h" #include "JSHTMLDocument.h" #include "JSLocation.h" +#include "JSTouch.h" +#include "JSTouchList.h" #include "Location.h" #include "ScriptController.h" +#include "TouchList.h" #if ENABLE(SVG) #include "JSSVGDocument.h" @@ -124,4 +127,16 @@ JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, Document* documen return wrapper; } +#if ENABLE(TOUCH_EVENTS) +JSValue JSDocument::createTouchList(ExecState* exec) +{ + RefPtr<TouchList> touchList = TouchList::create(); + + for (int i = 0; i < exec->argumentCount(); i++) + touchList->append(toTouch(exec->argument(i))); + + return toJS(exec, touchList.release()); +} +#endif + } // namespace WebCore diff --git a/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp b/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp index de72dea..971098d 100644 --- a/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp +++ b/Source/WebCore/bindings/js/JSInjectedScriptHostCustom.cpp @@ -199,8 +199,7 @@ InjectedScript InjectedScriptHost::injectedScriptFor(ScriptState* scriptState) if (!canAccessInspectedWindow(scriptState)) return InjectedScript(); - ASSERT(!m_injectedScriptSource.isEmpty()); - pair<long, ScriptObject> injectedScriptObject = injectScript(m_injectedScriptSource, scriptState); + pair<long, ScriptObject> injectedScriptObject = injectScript(injectedScriptSource(), scriptState); globalObject->setInjectedScript(injectedScriptObject.second.jsObject()); InjectedScript result(injectedScriptObject.second); m_idToInjectedScript.set(injectedScriptObject.first, result); diff --git a/Source/WebCore/bindings/js/ScriptDebugServer.cpp b/Source/WebCore/bindings/js/ScriptDebugServer.cpp index 10df223..9845277 100644 --- a/Source/WebCore/bindings/js/ScriptDebugServer.cpp +++ b/Source/WebCore/bindings/js/ScriptDebugServer.cpp @@ -287,12 +287,11 @@ void ScriptDebugServer::dispatchDidParseSource(const ListenerSet& listeners, con String sourceID = ustringToString(JSC::UString::number(source.provider()->asID())); String url = ustringToString(source.provider()->url()); String data = ustringToString(JSC::UString(source.data(), source.length())); - int firstLine = source.firstLine(); Vector<ScriptDebugListener*> copy; copyToVector(listeners, copy); for (size_t i = 0; i < copy.size(); ++i) - copy[i]->didParseSource(sourceID, url, data, firstLine, worldType); + copy[i]->didParseSource(sourceID, url, data, source.firstLine() - 1, source.firstColumn() - 1, worldType); } void ScriptDebugServer::dispatchFailedToParseSource(const ListenerSet& listeners, const SourceCode& source, int errorLine, const String& errorMessage) diff --git a/Source/WebCore/bindings/js/ScriptGCEvent.cpp b/Source/WebCore/bindings/js/ScriptGCEvent.cpp index 4b39799..b7fc7b3 100644 --- a/Source/WebCore/bindings/js/ScriptGCEvent.cpp +++ b/Source/WebCore/bindings/js/ScriptGCEvent.cpp @@ -34,7 +34,7 @@ #if ENABLE(INSPECTOR) #include "JSDOMWindow.h" -#include <runtime/Collector.h> +#include <runtime/Heap.h> #include <runtime/JSGlobalData.h> #include <wtf/CurrentTime.h> diff --git a/Source/WebCore/bindings/js/ScriptSourceCode.h b/Source/WebCore/bindings/js/ScriptSourceCode.h index 092eeb8..6cf3987 100644 --- a/Source/WebCore/bindings/js/ScriptSourceCode.h +++ b/Source/WebCore/bindings/js/ScriptSourceCode.h @@ -44,7 +44,7 @@ class ScriptSourceCode { public: ScriptSourceCode(const String& source, const KURL& url = KURL(), const TextPosition1& startPosition = TextPosition1::minimumPosition()) : m_provider(StringSourceProvider::create(source, url.isNull() ? String() : url.string())) - , m_code(m_provider, startPosition.m_line.oneBasedInt()) + , m_code(m_provider, startPosition) , m_url(url) { } diff --git a/Source/WebCore/bindings/v8/DebuggerScript.js b/Source/WebCore/bindings/v8/DebuggerScript.js index 50f791d..8c9d98e 100644 --- a/Source/WebCore/bindings/v8/DebuggerScript.js +++ b/Source/WebCore/bindings/v8/DebuggerScript.js @@ -83,8 +83,8 @@ DebuggerScript._formatScript = function(script) id: script.id, name: script.nameOrSourceURL(), source: script.source, - lineOffset: DebuggerScript._v8ToWebkitLineNumber(script.line_offset), - lineCount: script.lineCount(), + lineOffset: script.line_offset, + columnOffset: script.column_offset, scriptWorldType: scriptWorldType }; } diff --git a/Source/WebCore/bindings/v8/ScriptDebugServer.cpp b/Source/WebCore/bindings/v8/ScriptDebugServer.cpp index 4b4611a..1c70a0e 100644 --- a/Source/WebCore/bindings/v8/ScriptDebugServer.cpp +++ b/Source/WebCore/bindings/v8/ScriptDebugServer.cpp @@ -447,6 +447,7 @@ void ScriptDebugServer::dispatchDidParseSource(ScriptDebugListener* listener, v8 toWebCoreStringWithNullOrUndefinedCheck(object->Get(v8::String::New("name"))), toWebCoreStringWithNullOrUndefinedCheck(object->Get(v8::String::New("source"))), object->Get(v8::String::New("lineOffset"))->ToInteger()->Value(), + object->Get(v8::String::New("columnOffset"))->ToInteger()->Value(), static_cast<ScriptWorldType>(object->Get(v8::String::New("scriptWorldType"))->Int32Value())); } diff --git a/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp b/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp index 9fa9f80..cda0737 100644 --- a/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp +++ b/Source/WebCore/bindings/v8/custom/V8DocumentCustom.cpp @@ -35,6 +35,7 @@ #include "Document.h" #include "ExceptionCode.h" #include "Node.h" +#include "TouchList.h" #include "XPathNSResolver.h" #include "XPathResult.h" @@ -46,6 +47,8 @@ #include "V8IsolatedContext.h" #include "V8Node.h" #include "V8Proxy.h" +#include "V8Touch.h" +#include "V8TouchList.h" #if ENABLE(3D_CANVAS) #include "V8WebGLRenderingContext.h" #endif @@ -163,4 +166,19 @@ v8::Handle<v8::Value> toV8(Document* impl, bool forceNewObject) return wrapper; } +#if ENABLE(TOUCH_EVENTS) +v8::Handle<v8::Value> V8Document::createTouchListCallback(const v8::Arguments& args) +{ + RefPtr<TouchList> touchList = TouchList::create(); + + for (int i = 0; i < args.Length(); i++) { + if (!args[i]->IsObject()) + return v8::Undefined(); + touchList->append(V8Touch::toNative(args[i]->ToObject())); + } + + return toV8(touchList.release()); +} +#endif + } // namespace WebCore diff --git a/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp b/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp index 81ad955..6bd5abb 100644 --- a/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp +++ b/Source/WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp @@ -241,8 +241,7 @@ InjectedScript InjectedScriptHost::injectedScriptFor(ScriptState* inspectedScrip if (!canAccessInspectedWindow(inspectedScriptState)) return InjectedScript(); - ASSERT(!m_injectedScriptSource.isEmpty()); - pair<long, ScriptObject> injectedScript = injectScript(m_injectedScriptSource, inspectedScriptState); + pair<long, ScriptObject> injectedScript = injectScript(injectedScriptSource(), inspectedScriptState); InjectedScript result(injectedScript.second); m_idToInjectedScript.set(injectedScript.first, result); global->SetHiddenValue(key, injectedScript.second.v8Object()); diff --git a/Source/WebCore/bridge/npruntime.h b/Source/WebCore/bridge/npruntime.h index 468cf92..828a340 100644 --- a/Source/WebCore/bridge/npruntime.h +++ b/Source/WebCore/bridge/npruntime.h @@ -33,12 +33,12 @@ #ifndef _NP_RUNTIME_H_ #define _NP_RUNTIME_H_ +#include "npapi.h" + #ifdef __cplusplus extern "C" { #endif -#include "npapi.h" - /* This API is used to facilitate binding code written in C to script objects. The API in this header does not assume the presence of a diff --git a/Source/WebCore/config.h b/Source/WebCore/config.h index 3d54a19..1954e0d 100644 --- a/Source/WebCore/config.h +++ b/Source/WebCore/config.h @@ -234,8 +234,10 @@ // this breaks compilation of <QFontDatabase>, at least, so turn it off for now // Also generates errors on wx on Windows, presumably because these functions -// are used from wx headers. -#if !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM) +// are used from wx headers. On GTK+ for Mac many GTK+ files include <libintl.h> +// or <glib/gi18n-lib.h>, which in turn include <xlocale/_ctype.h> which uses +// isacii(). +#if !PLATFORM(QT) && !PLATFORM(WX) && !PLATFORM(CHROMIUM) && !(OS(DARWIN) && PLATFORM(GTK)) #include <wtf/DisallowCType.h> #endif diff --git a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp index 21cf9ac..89564c3 100644 --- a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp +++ b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp @@ -24,6 +24,7 @@ #include "CSSComputedStyleDeclaration.h" #include "AnimationController.h" +#include "CursorList.h" #include "CSSBorderImageValue.h" #include "CSSMutableStyleDeclaration.h" #include "CSSPrimitiveValue.h" diff --git a/Source/WebCore/css/CSSFontFaceSource.cpp b/Source/WebCore/css/CSSFontFaceSource.cpp index 12d2e1e..034b22e 100644 --- a/Source/WebCore/css/CSSFontFaceSource.cpp +++ b/Source/WebCore/css/CSSFontFaceSource.cpp @@ -115,7 +115,7 @@ SimpleFontData* CSSFontFaceSource::getFontData(const FontDescription& fontDescri } // See if we have a mapping in our FontData cache. - unsigned hashKey = fontDescription.computedPixelSize() << 3 | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0); + unsigned hashKey = (fontDescription.computedPixelSize() + 1) << 3 | (fontDescription.orientation() == Vertical ? 4 : 0) | (syntheticBold ? 2 : 0) | (syntheticItalic ? 1 : 0); if (SimpleFontData* cachedData = m_fontDataTable.get(hashKey)) return cachedData; diff --git a/Source/WebCore/css/CSSGradientValue.cpp b/Source/WebCore/css/CSSGradientValue.cpp index 8040c6c..fde4a4e 100644 --- a/Source/WebCore/css/CSSGradientValue.cpp +++ b/Source/WebCore/css/CSSGradientValue.cpp @@ -43,7 +43,8 @@ namespace WebCore { Image* CSSGradientValue::image(RenderObject* renderer, const IntSize& size) { - ASSERT(m_clients.contains(renderer)); + if (!m_clients.contains(renderer)) + return 0; // Need to look up our size. Create a string of width*height to use as a hash key. // FIXME: hashing based only on size is not sufficient. Color stops may use context-sensitive units (like em) diff --git a/Source/WebCore/css/CSSGrammar.y b/Source/WebCore/css/CSSGrammar.y index ba5855d..a5fe795 100644 --- a/Source/WebCore/css/CSSGrammar.y +++ b/Source/WebCore/css/CSSGrammar.y @@ -901,16 +901,13 @@ simple_selector: } | element_name specifier_list { $$ = $2; - if ($$) { - CSSParser* p = static_cast<CSSParser*>(parser); - $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, $1, $$); } | specifier_list { $$ = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if ($$ && p->m_defaultNamespace != starAtom) - $$->m_tag = QualifiedName(nullAtom, starAtom, p->m_defaultNamespace); + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, starAtom, $$); } | namespace_selector element_name { AtomicString namespacePrefix = $1; @@ -924,25 +921,13 @@ simple_selector: } | namespace_selector element_name specifier_list { $$ = $3; - if ($$) { - AtomicString namespacePrefix = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if (p->m_styleSheet) - $$->m_tag = QualifiedName(namespacePrefix, $2, - p->m_styleSheet->determineNamespace(namespacePrefix)); - else // FIXME: Shouldn't this case be an error? - $$->m_tag = QualifiedName(nullAtom, $2, p->m_defaultNamespace); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName($1, $2, $$); } | namespace_selector specifier_list { $$ = $2; - if ($$) { - AtomicString namespacePrefix = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if (p->m_styleSheet) - $$->m_tag = QualifiedName(namespacePrefix, starAtom, - p->m_styleSheet->determineNamespace(namespacePrefix)); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName($1, starAtom, $$); } ; @@ -970,13 +955,22 @@ specifier_list: if (!$2) $$ = 0; else if ($1) { - $$ = $1; CSSParser* p = static_cast<CSSParser*>(parser); - CSSSelector* end = $1; - while (end->tagHistory()) + CSSSelector* end; + CSSSelector* history; + // Ensure that unknown pseudo element always stays at the top of selector chain. + if ($2->isUnknownPseudoElement()) { + end = $2; + history = $1; + } else { + end = $1; + history = $2; + } + $$ = end; + while(end->tagHistory()) end = end->tagHistory(); end->m_relation = CSSSelector::SubSelector; - end->setTagHistory(p->sinkFloatingSelector($2)); + end->setTagHistory(p->sinkFloatingSelector(history)); } } | specifier_list error { @@ -1141,9 +1135,7 @@ pseudo: $3.lower(); $$->m_value = $3; CSSSelector::PseudoType type = $$->pseudoType(); - if (type == CSSSelector::PseudoUnknown) - $$ = 0; - else if (type == CSSSelector::PseudoFirstLine) { + if (type == CSSSelector::PseudoFirstLine) { CSSParser* p = static_cast<CSSParser*>(parser); if (Document* doc = p->document()) doc->setUsesFirstLineRules(true); diff --git a/Source/WebCore/css/CSSParser.cpp b/Source/WebCore/css/CSSParser.cpp index abc9300..fd5841f 100644 --- a/Source/WebCore/css/CSSParser.cpp +++ b/Source/WebCore/css/CSSParser.cpp @@ -5004,7 +5004,6 @@ bool CSSParser::parseLinearGradient(RefPtr<CSSValue>& gradient, CSSGradientRepea a = args->next(); expectComma = true; } else { - // Look one or two optional keywords that indicate a side or corner. RefPtr<CSSPrimitiveValue> startX, startY; @@ -5043,35 +5042,8 @@ bool CSSParser::parseLinearGradient(RefPtr<CSSValue>& gradient, CSSGradientRepea result->setFirstY(startY.release()); } - // Now look for 0 or more color stops. - while (a) { - // Look for the comma before the next stop. - if (expectComma) { - if (a->unit != CSSParserValue::Operator || a->iValue != ',') - return false; - - a = args->next(); - if (!a) - return false; - } - - // <color-stop> = <color> [ <percentage> | <length> ]? - CSSGradientColorStop stop; - stop.m_color = parseGradientColorOrKeyword(this, a); - if (!stop.m_color) - return false; - - a = args->next(); - if (a) { - if (validUnit(a, FLength | FPercent, m_strict)) { - stop.m_position = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit); - a = args->next(); - } - } - - result->addStop(stop); - expectComma = true; - } + if (!parseGradientColorStops(args, result.get(), expectComma)) + return false; Vector<CSSGradientColorStop>& stops = result->stops(); if (stops.isEmpty()) @@ -5191,14 +5163,25 @@ bool CSSParser::parseRadialGradient(RefPtr<CSSValue>& gradient, CSSGradientRepea result->setEndHorizontalSize(horizontalSize); result->setEndVerticalSize(verticalSize); - // Now look for 0 or more color stops. + if (!parseGradientColorStops(args, result.get(), expectComma)) + return false; + + gradient = result.release(); + return true; +} + +bool CSSParser::parseGradientColorStops(CSSParserValueList* valueList, CSSGradientValue* gradient, bool expectComma) +{ + CSSParserValue* a = valueList->current(); + + // Now look for color stops. while (a) { // Look for the comma before the next stop. if (expectComma) { if (a->unit != CSSParserValue::Operator || a->iValue != ',') return false; - a = args->next(); + a = valueList->next(); if (!a) return false; } @@ -5209,24 +5192,20 @@ bool CSSParser::parseRadialGradient(RefPtr<CSSValue>& gradient, CSSGradientRepea if (!stop.m_color) return false; - a = args->next(); + a = valueList->next(); if (a) { if (validUnit(a, FLength | FPercent, m_strict)) { stop.m_position = CSSPrimitiveValue::create(a->fValue, (CSSPrimitiveValue::UnitTypes)a->unit); - a = args->next(); + a = valueList->next(); } } - result->addStop(stop); + gradient->addStop(stop); expectComma = true; } - Vector<CSSGradientColorStop>& stops = result->stops(); - if (stops.isEmpty()) - return false; - - gradient = result.release(); - return true; + // Must have 2 or more stops to be valid. + return gradient->stops().size() > 1; } bool CSSParser::isGeneratedImageValue(CSSParserValue* val) const @@ -6026,6 +6005,35 @@ void CSSParser::addNamespace(const AtomicString& prefix, const AtomicString& uri m_styleSheet->addNamespace(this, prefix, uri); } +void CSSParser::updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSSelector* specifiers) +{ + AtomicString determinedNamespace = namespacePrefix != nullAtom && m_styleSheet ? m_styleSheet->determineNamespace(namespacePrefix) : m_defaultNamespace; + QualifiedName tag = QualifiedName(namespacePrefix, elementName, determinedNamespace); + if (!specifiers->isUnknownPseudoElement()) { + specifiers->m_tag = tag; + return; + } + + if (Document* doc = document()) + doc->setUsesDescendantRules(true); + + specifiers->m_relation = CSSSelector::ShadowDescendant; + if (CSSSelector* history = specifiers->tagHistory()) { + history->m_tag = tag; + return; + } + + // No need to create an extra element name selector if we are matching any element + // in any namespace. + if (elementName == starAtom && m_defaultNamespace == starAtom) + return; + + CSSSelector* elementNameSelector = fastNew<CSSSelector>(); + elementNameSelector->m_tag = tag; + specifiers->setTagHistory(elementNameSelector); +} + + CSSRule* CSSParser::createPageRule(CSSSelector* pageSelector) { // FIXME: Margin at-rules are ignored. diff --git a/Source/WebCore/css/CSSParser.h b/Source/WebCore/css/CSSParser.h index e60519e..496a21a 100644 --- a/Source/WebCore/css/CSSParser.h +++ b/Source/WebCore/css/CSSParser.h @@ -160,6 +160,7 @@ namespace WebCore { bool parseDeprecatedGradient(RefPtr<CSSValue>&); bool parseLinearGradient(RefPtr<CSSValue>&, CSSGradientRepeat repeating); bool parseRadialGradient(RefPtr<CSSValue>&, CSSGradientRepeat repeating); + bool parseGradientColorStops(CSSParserValueList*, CSSGradientValue*, bool expectComma); PassRefPtr<CSSValueList> parseTransform(); bool parseTransformOrigin(int propId, int& propId1, int& propId2, int& propId3, RefPtr<CSSValue>&, RefPtr<CSSValue>&, RefPtr<CSSValue>&); @@ -203,6 +204,7 @@ namespace WebCore { PassOwnPtr<MediaQuery> sinkFloatingMediaQuery(MediaQuery*); void addNamespace(const AtomicString& prefix, const AtomicString& uri); + void updateSpecifiersWithElementName(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSSelector*); void invalidBlockHit(); diff --git a/Source/WebCore/css/CSSSegmentedFontFace.cpp b/Source/WebCore/css/CSSSegmentedFontFace.cpp index cdabec1..1f6e20d 100644 --- a/Source/WebCore/css/CSSSegmentedFontFace.cpp +++ b/Source/WebCore/css/CSSSegmentedFontFace.cpp @@ -88,7 +88,7 @@ FontData* CSSSegmentedFontFace::getFontData(const FontDescription& fontDescripti return 0; FontTraitsMask desiredTraitsMask = fontDescription.traitsMask(); - unsigned hashKey = (fontDescription.computedPixelSize() << (FontTraitsMaskWidth + 1)) | ((fontDescription.orientation() == Vertical ? 1 : 0) << FontTraitsMaskWidth) | desiredTraitsMask; + unsigned hashKey = ((fontDescription.computedPixelSize() + 1) << (FontTraitsMaskWidth + 1)) | ((fontDescription.orientation() == Vertical ? 1 : 0) << FontTraitsMaskWidth) | desiredTraitsMask; SegmentedFontData* fontData = m_fontDataTable.get(hashKey); if (fontData) diff --git a/Source/WebCore/css/CSSSelector.cpp b/Source/WebCore/css/CSSSelector.cpp index c139dbf..400dd40 100644 --- a/Source/WebCore/css/CSSSelector.cpp +++ b/Source/WebCore/css/CSSSelector.cpp @@ -99,7 +99,10 @@ inline unsigned CSSSelector::specificityForOneSelector() const case Contain: case Begin: case End: - s += 0x100; + if (pseudoType() == PseudoNot && simpleSelector()) + s += simpleSelector()->specificityForOneSelector(); + else + s += 0x100; case None: break; } @@ -148,8 +151,6 @@ PseudoId CSSSelector::pseudoId(PseudoType type) case PseudoInputSpeechButton: return INPUT_SPEECH_BUTTON; #endif - case PseudoSliderThumb: - return SLIDER_THUMB; case PseudoSearchCancelButton: return SEARCH_CANCEL_BUTTON; case PseudoSearchDecoration: @@ -417,7 +418,6 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap( DEFINE_STATIC_LOCAL(AtomicString, searchResultsDecoration, ("-webkit-search-results-decoration")); DEFINE_STATIC_LOCAL(AtomicString, searchResultsButton, ("-webkit-search-results-button")); DEFINE_STATIC_LOCAL(AtomicString, selection, ("selection")); - DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb")); DEFINE_STATIC_LOCAL(AtomicString, target, ("target")); DEFINE_STATIC_LOCAL(AtomicString, visited, ("visited")); DEFINE_STATIC_LOCAL(AtomicString, windowInactive, ("window-inactive")); @@ -546,7 +546,6 @@ static HashMap<AtomicStringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap( nameToPseudoType->set(searchResultsDecoration.impl(), CSSSelector::PseudoSearchResultsDecoration); nameToPseudoType->set(searchResultsButton.impl(), CSSSelector::PseudoSearchResultsButton); nameToPseudoType->set(selection.impl(), CSSSelector::PseudoSelection); - nameToPseudoType->set(sliderThumb.impl(), CSSSelector::PseudoSliderThumb); nameToPseudoType->set(target.impl(), CSSSelector::PseudoTarget); nameToPseudoType->set(visited.impl(), CSSSelector::PseudoVisited); nameToPseudoType->set(firstPage.impl(), CSSSelector::PseudoFirstPage); @@ -634,7 +633,6 @@ void CSSSelector::extractPseudoType() const case PseudoSearchResultsDecoration: case PseudoSearchResultsButton: case PseudoSelection: - case PseudoSliderThumb: element = true; break; case PseudoUnknown: diff --git a/Source/WebCore/css/CSSSelector.h b/Source/WebCore/css/CSSSelector.h index 353fb5e..1101eed 100644 --- a/Source/WebCore/css/CSSSelector.h +++ b/Source/WebCore/css/CSSSelector.h @@ -109,7 +109,8 @@ namespace WebCore { Child, DirectAdjacent, IndirectAdjacent, - SubSelector + SubSelector, + ShadowDescendant }; enum PseudoType { @@ -177,7 +178,6 @@ namespace WebCore { PseudoNoButton, PseudoSelection, PseudoFileUploadButton, - PseudoSliderThumb, PseudoSearchCancelButton, PseudoSearchDecoration, PseudoSearchResultsDecoration, @@ -277,6 +277,7 @@ namespace WebCore { extractPseudoType(); return m_match == PseudoElement; } + bool isUnknownPseudoElement() const; Relation relation() const { return static_cast<Relation>(m_relation); } @@ -344,6 +345,11 @@ namespace WebCore { QualifiedName m_tag; }; +inline bool CSSSelector::isUnknownPseudoElement() const +{ + return m_match == PseudoElement && m_pseudoType == PseudoUnknown; +} + } // namespace WebCore #endif // CSSSelector_h diff --git a/Source/WebCore/css/CSSSelectorList.cpp b/Source/WebCore/css/CSSSelectorList.cpp index 7f82ca4..7cb4df4 100644 --- a/Source/WebCore/css/CSSSelectorList.cpp +++ b/Source/WebCore/css/CSSSelectorList.cpp @@ -136,4 +136,20 @@ bool CSSSelectorList::selectorsNeedNamespaceResolution() return forEachSelector(functor, this); } +class SelectorHasUnknownPseudoElementFunctor { +public: + bool operator()(CSSSelector* selector) + { + return selector->isUnknownPseudoElement(); + } +}; + +bool CSSSelectorList::hasUnknownPseudoElements() const +{ + SelectorHasUnknownPseudoElementFunctor functor; + return forEachSelector(functor, this); +} + + + } // namespace WebCore diff --git a/Source/WebCore/css/CSSSelectorList.h b/Source/WebCore/css/CSSSelectorList.h index 9e40ef8..7adc6b9 100644 --- a/Source/WebCore/css/CSSSelectorList.h +++ b/Source/WebCore/css/CSSSelectorList.h @@ -44,6 +44,7 @@ public: bool hasOneSelector() const { return m_selectorArray ? m_selectorArray->isLastInSelectorList() : false; } bool selectorsNeedNamespaceResolution(); + bool hasUnknownPseudoElements() const; private: void deleteSelectors(); diff --git a/Source/WebCore/css/CSSStyleSelector.cpp b/Source/WebCore/css/CSSStyleSelector.cpp index 986591d..b98b90d 100644 --- a/Source/WebCore/css/CSSStyleSelector.cpp +++ b/Source/WebCore/css/CSSStyleSelector.cpp @@ -27,6 +27,9 @@ #include "CSSStyleSelector.h" #include "Attribute.h" +#include "ContentData.h" +#include "CounterContent.h" +#include "CursorList.h" #include "CSSBorderImageValue.h" #include "CSSCursorImageValue.h" #include "CSSFontFaceRule.h" @@ -76,6 +79,7 @@ #include "ScaleTransformOperation.h" #include "SelectionController.h" #include "Settings.h" +#include "ShadowData.h" #include "ShadowValue.h" #include "SkewTransformOperation.h" #include "StyleCachedImage.h" @@ -424,6 +428,7 @@ public: CSSRuleDataList* getIDRules(AtomicStringImpl* key) { return m_idRules.get(key); } CSSRuleDataList* getClassRules(AtomicStringImpl* key) { return m_classRules.get(key); } CSSRuleDataList* getTagRules(AtomicStringImpl* key) { return m_tagRules.get(key); } + CSSRuleDataList* getPseudoRules(AtomicStringImpl* key) { return m_pseudoRules.get(key); } CSSRuleDataList* getUniversalRules() { return m_universalRules.get(); } CSSRuleDataList* getPageRules() { return m_pageRules.get(); } @@ -431,6 +436,7 @@ public: AtomRuleMap m_idRules; AtomRuleMap m_classRules; AtomRuleMap m_tagRules; + AtomRuleMap m_pseudoRules; OwnPtr<CSSRuleDataList> m_universalRules; OwnPtr<CSSRuleDataList> m_pageRules; unsigned m_ruleCount; @@ -658,6 +664,10 @@ void CSSStyleSelector::matchRules(CSSRuleSet* rules, int& firstRuleIndex, int& l for (size_t i = 0; i < size; ++i) matchRulesForList(rules->getClassRules(classNames[i].impl()), firstRuleIndex, lastRuleIndex, includeEmptyRules); } + if (!m_element->shadowPseudoId().isEmpty()) { + ASSERT(m_styledElement); + matchRulesForList(rules->getPseudoRules(m_element->shadowPseudoId().impl()), firstRuleIndex, lastRuleIndex, includeEmptyRules); + } matchRulesForList(rules->getTagRules(m_element->localName().impl()), firstRuleIndex, lastRuleIndex, includeEmptyRules); matchRulesForList(rules->getUniversalRules(), firstRuleIndex, lastRuleIndex, includeEmptyRules); @@ -816,12 +826,7 @@ inline void CSSStyleSelector::initForStyleResolve(Element* e, RenderStyle* paren { m_checker.m_pseudoStyle = pseudoID; - m_parentNode = e ? e->parentNode() : 0; - -#if ENABLE(SVG) - if (!m_parentNode && e && e->isSVGElement() && e->isShadowRoot()) - m_parentNode = e->shadowHost(); -#endif + m_parentNode = e ? e->parentOrHostNode() : 0; if (parentStyle) m_parentStyle = parentStyle; @@ -980,6 +985,7 @@ bool CSSStyleSelector::canShareStyleWithElement(Node* n) const (s->hovered() == m_element->hovered()) && (s->active() == m_element->active()) && (s->focused() == m_element->focused()) && + (s->shadowPseudoId() == m_element->shadowPseudoId()) && (s != s->document()->cssTarget() && m_element != m_element->document()->cssTarget()) && (s->fastGetAttribute(typeAttr) == m_element->fastGetAttribute(typeAttr)) && (s->fastGetAttribute(XMLNames::langAttr) == m_element->fastGetAttribute(XMLNames::langAttr)) && @@ -2051,6 +2057,14 @@ CSSStyleSelector::SelectorMatch CSSStyleSelector::SelectorChecker::checkSelector !((RenderScrollbar::scrollbarForStyleResolve() || dynamicPseudo == SCROLLBAR_CORNER || dynamicPseudo == RESIZER) && sel->m_match == CSSSelector::PseudoClass)) return SelectorFailsCompletely; return checkSelector(sel, e, selectorAttrs, dynamicPseudo, true, encounteredLink, elementStyle, elementParentStyle); + case CSSSelector::ShadowDescendant: + { + Node* shadowHostNode = e->shadowAncestorNode(); + if (shadowHostNode == e || !shadowHostNode->isElementNode()) + return SelectorFailsCompletely; + e = static_cast<Element*>(shadowHostNode); + return checkSelector(sel, e, selectorAttrs, dynamicPseudo, false, encounteredLink); + } } return SelectorFailsCompletely; @@ -2703,12 +2717,8 @@ bool CSSStyleSelector::SelectorChecker::checkOneSelector(CSSSelector* sel, Eleme if (Document* document = e->document()) document->setUsesFirstLetterRules(true); } - if (pseudoId != NOPSEUDO) { + if (pseudoId != NOPSEUDO) dynamicPseudo = pseudoId; - return true; - } - ASSERT_NOT_REACHED(); - return false; } // ### add the rest of the checks... return true; @@ -2829,12 +2839,17 @@ void CSSRuleSet::addRule(CSSStyleRule* rule, CSSSelector* sel) return; } + if (sel->isUnknownPseudoElement()) { + addToRuleSet(sel->m_value.impl(), m_pseudoRules, rule, sel); + return; + } + const AtomicString& localName = sel->m_tag.localName(); if (localName != starAtom) { addToRuleSet(localName.impl(), m_tagRules, rule, sel); return; } - + // Just put it in the universal rule set. if (!m_universalRules) m_universalRules = adoptPtr(new CSSRuleDataList(m_ruleCount++, rule, sel)); diff --git a/Source/WebCore/css/CSSValue.h b/Source/WebCore/css/CSSValue.h index ec1b15e..d1464ca 100644 --- a/Source/WebCore/css/CSSValue.h +++ b/Source/WebCore/css/CSSValue.h @@ -21,8 +21,6 @@ #ifndef CSSValue_h #define CSSValue_h -#include "StyleBase.h" - #include "CSSParserValues.h" #include "KURLHash.h" #include <wtf/ListHashSet.h> diff --git a/Source/WebCore/css/WebKitCSSMatrix.cpp b/Source/WebCore/css/WebKitCSSMatrix.cpp index a4af7f8..7d60f8c 100644 --- a/Source/WebCore/css/WebKitCSSMatrix.cpp +++ b/Source/WebCore/css/WebKitCSSMatrix.cpp @@ -30,6 +30,7 @@ #include "CSSStyleSelector.h" #include "CSSMutableStyleDeclaration.h" #include "CSSPropertyNames.h" +#include "CSSValueKeywords.h" #include "ExceptionCode.h" #include "RenderStyle.h" #include <wtf/MathExtras.h> @@ -57,9 +58,14 @@ void WebKitCSSMatrix::setMatrixValue(const String& string, ExceptionCode& ec) if (p.parseValue(styleDeclaration.get(), CSSPropertyWebkitTransform, string, true)) { // Convert to TransformOperations. This can fail if a property // requires style (i.e., param uses 'ems' or 'exs') - PassRefPtr<CSSValue> val = styleDeclaration->getPropertyCSSValue(CSSPropertyWebkitTransform); + RefPtr<CSSValue> value = styleDeclaration->getPropertyCSSValue(CSSPropertyWebkitTransform); + + // Check for a "none" or empty transform. In these cases we can use the default identity matrix. + if (!value || (value->isPrimitiveValue() && (static_cast<CSSPrimitiveValue*>(value.get()))->getIdent() == CSSValueNone)) + return; + TransformOperations operations; - if (!CSSStyleSelector::createTransformOperations(val.get(), 0, 0, operations)) { + if (!CSSStyleSelector::createTransformOperations(value.get(), 0, 0, operations)) { ec = SYNTAX_ERR; return; } diff --git a/Source/WebCore/css/html.css b/Source/WebCore/css/html.css index 823f5f3..3c75559 100644 --- a/Source/WebCore/css/html.css +++ b/Source/WebCore/css/html.css @@ -2,7 +2,7 @@ * The default style sheet used to render HTML. * * Copyright (C) 2000 Lars Knoll (knoll@kde.org) - * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -474,6 +474,7 @@ input[type="range"] { input[type="range"]::-webkit-slider-thumb { -webkit-appearance: sliderthumb-horizontal; + display: block; } input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled, @@ -536,10 +537,6 @@ select[size="1"] { white-space: pre; } -datalist { - display: none; -} - optgroup { font-weight: bolder; } @@ -552,6 +549,59 @@ output { display: inline; } +/* form validation message bubble */ + +::-webkit-validation-bubble { + display: block; + z-index: 2147483647; + position: absolute; + opacity: 0.9; + line-height: 0; + -webkit-transition: opacity 05.5s ease; +} + +::-webkit-validation-bubble-message { + display: block; + font: message-box; + min-width: 50px; + max-width: 200px; + border: solid 2px black; + background: -webkit-gradient(linear, left top, left bottom, from(#fbf9f9), to(#f0e4e4)); + padding: 8px; + -webkit-border-radius: 8px; + -webkit-box-shadow: 4px 4px 4px rgba(204,204,204,0.7); + line-height: normal; +} + +::-webkit-validation-bubble-top-outer-arrow { + display: inline-block; + position: relative; + left: 14px; + height: 0; + width: 0; + border-style: solid; + border-width: 14px; + border-bottom-color: black; + border-right-color: transparent; + border-top-width: 0; + border-left-width: 0; +} + +::-webkit-validation-bubble-top-inner-arrow { + display: inline-block; + height: 0; + width: 0; + border-style: solid; + border-width: 10px; /* <border box width of outer-arrow> - <message border width> * 2 */ + border-bottom-color: #fbf9f9; + border-right-color: transparent; + border-top-width: 0; + border-left-width: 0; + position: relative; + top: 2px; /* <message border width> */ + left: 2px; /* <outer-arrow position> + <message border width> - <border box width of outer-arrow> */ +} + /* meter */ meter { @@ -738,6 +788,7 @@ ruby, rt { rt { line-height: normal; + -webkit-text-emphasis: none; } ruby > rt { diff --git a/Source/WebCore/css/mediaControlsGtk.css b/Source/WebCore/css/mediaControlsGtk.css index 18b7dcc..b4637f7 100644 --- a/Source/WebCore/css/mediaControlsGtk.css +++ b/Source/WebCore/css/mediaControlsGtk.css @@ -26,7 +26,17 @@ audio { } audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel { - height: 20px; + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: end; + -webkit-user-select: none; + position: absolute; + bottom: 0; + width: 100%; + z-index: 0; + overflow: hidden; + text-align: right; + height: 100%; } audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button { @@ -75,3 +85,21 @@ audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-f width: 20px; height: 20px; } + +audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container { + -webkit-appearance: media-volume-slider-container; + position: absolute; + height: 100px; + width: 20px; +} + +audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider { + -webkit-appearance: media-volume-slider; + display: inline; + position: absolute; + width: 14px; + height: 95px; + + left: 3px; + top: 5px; +}
\ No newline at end of file diff --git a/Source/WebCore/css/mediaControlsQtFullscreen.css b/Source/WebCore/css/mediaControlsQtFullscreen.css new file mode 100644 index 0000000..d191331 --- /dev/null +++ b/Source/WebCore/css/mediaControlsQtFullscreen.css @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE 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, + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +audio { + height: 34px; + width: 400px; +} + +audio::-webkit-media-controls-panel { + display: -webkit-box; + -webkit-box-orient: horizontal; + -webkit-box-align: end; + -webkit-user-select: none; + position: absolute; + bottom: 0; + width: 100%; + z-index: 0; + overflow: visible; + height: 100%; + text-align: right; +} + +video::-webkit-media-controls-panel { +/* The control panel is only play button for full screen */ + display: -webkit-box; + -webkit-box-align: center; + -webkit-box-pack: center; + width: 100%; + height: 100%; +} + +video:-webkit-full-page-media::-webkit-media-controls-panel { + display: none; +} + +audio::-webkit-media-controls-mute-button { + width: 12px; + height: 12px; + padding: 6px; + margin: 5px 5px 5px 3px; +} + +video::-webkit-media-controls-mute-button { + display: none; +} + +audio::-webkit-media-controls-play-button { + width: 9px; + height: 12px; + padding: 6px 12px 6px 11px; + margin: 5px 3px 5px 5px; +} + +video::-webkit-media-controls-play-button { + display: -webkit-box; + -webkit-box-align: center; + -webkit-box-pack: center; + width: 50px; + height: 50px; + padding: 20px; +} + +audio::-webkit-media-controls-timeline-container { + height: 34px; +} + +video::-webkit-media-controls-timeline-container { + display: none; +} + +audio::-webkit-media-controls-current-time-display { + -webkit-appearance: media-current-time-display; + -webkit-user-select: none; + display: inline-block; + height: 12px; + padding: 6px; + margin: 5px 3px; + + overflow: hidden; + cursor: default; + + text-align: center; + font-size: 10px; + font-family: Verdana; + font-weight: bold; + color: white; +} + +video::-webkit-media-controls-current-time-display { + -webkit-appearance: media-current-time-display; + -webkit-user-select: none; + display: none; +} + +audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display { + display: none; +} + +audio::-webkit-media-controls-timeline { + height: 12px; + padding: 6px 8px; + margin: 5px 3px; +} + +video::-webkit-media-controls-timeline { + display: none; +} + +audio::-webkit-media-controls-volume-slider-container { + -webkit-appearance: media-volume-slider-container; + position: absolute; + height: 103px; + width: 24px; +} + +video::-webkit-media-controls-volume-slider-container { + -webkit-appearance: media-volume-slider-container; + display: none; +} + +audio::-webkit-media-controls-volume-slider { + -webkit-appearance: media-volume-slider; + display: inline; + position: absolute; + + width: 12px; + padding: 6px; + height: 88px; + margin: 0 0 3px 0; +} + +video::-webkit-media-controls-volume-slider { + -webkit-appearance: media-volume-slider; + display: none; +} + +audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button { + display: none; +} + +audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button { + display: none; +} + +audio::-webkit-media-controls-fullscreen-button { + position: absolute; + top: 0px; + right: 0px; + width: 12px; + height: 12px; + padding: 6px; + margin: 5px 5px 5px 3px; +} + +video::-webkit-media-controls-fullscreen-button { + display: none; +} + +audio::-webkit-media-controls-rewind-button, video::-webkit-media-controls-rewind-button { + display: none; +} + +audio::-webkit-media-controls-return-to-realtime-button, video::-webkit-media-controls-return-to-realtime-button { + display: none; +} + +audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button { + display: none; +} diff --git a/Source/WebCore/css/themeQtMobile.css b/Source/WebCore/css/themeQtMobile.css index f6327a9..27be523 100644 --- a/Source/WebCore/css/themeQtMobile.css +++ b/Source/WebCore/css/themeQtMobile.css @@ -128,3 +128,7 @@ input[type="url"]:active, textarea:active { background: ButtonShadow; } + +video { + background-color: #000000; +} diff --git a/Source/WebCore/dom/BeforeLoadEvent.h b/Source/WebCore/dom/BeforeLoadEvent.h index f60e438..fc5814a 100644 --- a/Source/WebCore/dom/BeforeLoadEvent.h +++ b/Source/WebCore/dom/BeforeLoadEvent.h @@ -28,6 +28,7 @@ #define BeforeLoadEvent_h #include "Event.h" +#include "EventNames.h" namespace WebCore { diff --git a/Source/WebCore/dom/Document.cpp b/Source/WebCore/dom/Document.cpp index 0c865c9..1787b52 100644 --- a/Source/WebCore/dom/Document.cpp +++ b/Source/WebCore/dom/Document.cpp @@ -92,7 +92,6 @@ #include "HitTestRequest.h" #include "HitTestResult.h" #include "ImageLoader.h" -#include "InspectorController.h" #include "InspectorInstrumentation.h" #include "KeyboardEvent.h" #include "Logging.h" @@ -938,9 +937,8 @@ PassRefPtr<Node> Document::adoptNode(PassRefPtr<Node> source, ExceptionCode& ec) if (source->parentNode()) source->parentNode()->removeChild(source.get(), ec); } - - for (Node* node = source.get(); node; node = node->traverseNextNode(source.get())) - node->setDocument(this); + + source->setDocumentRecursively(this); return source; } @@ -1196,6 +1194,16 @@ KURL Document::baseURI() const return m_baseURL; } +void Document::setContent(const String& content) +{ + removeAllChildren(); + + open(); + m_parser->append(content); + m_parser->finish(); + close(); +} + // FIXME: We need to discuss the DOM API here at some point. Ideas: // * making it receive a rect as parameter, i.e. nodesFromRect(x, y, w, h); // * making it receive the expading size of each direction separately, @@ -3451,11 +3459,13 @@ void Document::nodeWillBeRemoved(Node* n) ASSERT(n); if (n->contains(m_fullScreenElement.get())) { ASSERT(n != documentElement()); + + if (m_fullScreenRenderer) + m_fullScreenRenderer->remove(); + setFullScreenRenderer(0); m_fullScreenElement = documentElement(); - m_fullScreenElement->setNeedsStyleRecalc(); - m_fullScreenElement->detach(); - updateStyleIfNeeded(); + recalcStyle(Force); m_fullScreenChangeDelayTimer.startOneShot(0); } #endif @@ -4309,13 +4319,7 @@ void Document::finishedParsing() f->loader()->finishedParsing(); -#if ENABLE(INSPECTOR) - if (!page()) - return; - - if (InspectorController* controller = page()->inspectorController()) - controller->mainResourceFiredDOMContentEvent(f->loader()->documentLoader(), url()); -#endif + InspectorInstrumentation::mainResourceFiredDOMContentEvent(f, url()); } } @@ -4866,13 +4870,6 @@ bool Document::isXHTMLMPDocument() const } #endif -#if ENABLE(INSPECTOR) -InspectorController* Document::inspectorController() const -{ - return page() ? page()->inspectorController() : 0; -} -#endif - #if ENABLE(FULLSCREEN_API) void Document::webkitRequestFullScreenForElement(Element* element, unsigned short flags) { diff --git a/Source/WebCore/dom/Document.h b/Source/WebCore/dom/Document.h index e114385..e70063a 100644 --- a/Source/WebCore/dom/Document.h +++ b/Source/WebCore/dom/Document.h @@ -91,7 +91,6 @@ class HTMLInputElement; class HTMLMapElement; class HitTestRequest; class HitTestResult; -class InspectorController; class IntPoint; class DOMWrapperWorld; class JSNode; @@ -349,6 +348,8 @@ public: void setCharset(const String&); + void setContent(const String&); + String contentLanguage() const { return m_contentLanguage; } void setContentLanguage(const String& lang) { m_contentLanguage = lang; } @@ -500,9 +501,6 @@ public: Frame* frame() const { return m_frame; } // can be NULL Page* page() const; // can be NULL Settings* settings() const; // can be NULL -#if ENABLE(INSPECTOR) - virtual InspectorController* inspectorController() const; // can be NULL -#endif PassRefPtr<Range> createRange(); diff --git a/Source/WebCore/dom/Document.idl b/Source/WebCore/dom/Document.idl index 89f53ec..8d7a71b 100644 --- a/Source/WebCore/dom/Document.idl +++ b/Source/WebCore/dom/Document.idl @@ -333,7 +333,7 @@ module core { in long ScreenX, in long screenY) raises (DOMException); - [ReturnsNew, EnabledAtRuntime] TouchList createTouchList() + [ReturnsNew, EnabledAtRuntime, Custom] TouchList createTouchList() raises (DOMException); #endif diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp index 4c10a32..5d91db7 100644 --- a/Source/WebCore/dom/Element.cpp +++ b/Source/WebCore/dom/Element.cpp @@ -1497,7 +1497,7 @@ void Element::updateFocusAppearance(bool /*restorePreviousSelection*/) return; // FIXME: We should restore the previous selection if there is one. - VisibleSelection newSelection = VisibleSelection(Position(this, 0), DOWNSTREAM); + VisibleSelection newSelection = VisibleSelection(firstPositionInNode(this), DOWNSTREAM); if (frame->selection()->shouldChangeSelection(newSelection)) { frame->selection()->setSelection(newSelection); diff --git a/Source/WebCore/dom/Element.h b/Source/WebCore/dom/Element.h index e552376..5e6c047 100644 --- a/Source/WebCore/dom/Element.h +++ b/Source/WebCore/dom/Element.h @@ -230,6 +230,7 @@ public: Node* shadowRoot(); void setShadowRoot(PassRefPtr<Node>); + virtual AtomicString shadowPseudoId() const; RenderStyle* computedStyle(PseudoId = NOPSEUDO); @@ -507,6 +508,11 @@ inline void Element::setIdAttribute(const AtomicString& value) setAttribute(document()->idAttributeName(), value); } +inline AtomicString Element::shadowPseudoId() const +{ + return AtomicString(); +} + } // namespace #endif diff --git a/Source/WebCore/dom/Event.cpp b/Source/WebCore/dom/Event.cpp index a949fd5..0a1538b 100644 --- a/Source/WebCore/dom/Event.cpp +++ b/Source/WebCore/dom/Event.cpp @@ -22,6 +22,7 @@ #include "config.h" #include "Event.h" +#include "EventTarget.h" #include "UserGestureIndicator.h" #include <wtf/CurrentTime.h> diff --git a/Source/WebCore/dom/Event.h b/Source/WebCore/dom/Event.h index f05d36c..8562cad 100644 --- a/Source/WebCore/dom/Event.h +++ b/Source/WebCore/dom/Event.h @@ -25,13 +25,13 @@ #define Event_h #include "DOMTimeStamp.h" -#include "EventTarget.h" #include <wtf/RefCounted.h> #include <wtf/text/AtomicString.h> namespace WebCore { class Clipboard; + class EventTarget; class Event : public RefCounted<Event> { public: diff --git a/Source/WebCore/dom/EventQueue.cpp b/Source/WebCore/dom/EventQueue.cpp index 27cd802..a43929e 100644 --- a/Source/WebCore/dom/EventQueue.cpp +++ b/Source/WebCore/dom/EventQueue.cpp @@ -48,12 +48,26 @@ void EventQueue::enqueueEvent(PassRefPtr<Event> event) m_pendingEventTimer.startOneShot(0); } +void EventQueue::enqueueScrollEvent(PassRefPtr<Node> target, ScrollEventTargetType targetType) +{ + if (!m_nodesWithQueuedScrollEvents.add(target.get()).second) + return; + + // Per the W3C CSSOM View Module, scroll events fired at the document should bubble, others should not. + bool canBubble = targetType == ScrollEventDocumentTarget; + RefPtr<Event> scrollEvent = Event::create(eventNames().scrollEvent, canBubble, false /* non cancelleable */); + scrollEvent->setTarget(target); + enqueueEvent(scrollEvent.release()); +} + void EventQueue::pendingEventTimerFired(Timer<EventQueue>*) { ASSERT(!m_pendingEventTimer.isActive()); Vector<RefPtr<Event> > queuedEvents; queuedEvents.swap(m_queuedEvents); + + m_nodesWithQueuedScrollEvents.clear(); for (size_t i = 0; i < queuedEvents.size(); i++) dispatchEvent(queuedEvents[i].release()); diff --git a/Source/WebCore/dom/EventQueue.h b/Source/WebCore/dom/EventQueue.h index 8dd7ec9..7f8d5fb 100644 --- a/Source/WebCore/dom/EventQueue.h +++ b/Source/WebCore/dom/EventQueue.h @@ -28,6 +28,7 @@ #define EventQueue_h #include "Timer.h" +#include <wtf/HashSet.h> #include <wtf/Noncopyable.h> #include <wtf/RefPtr.h> #include <wtf/Vector.h> @@ -41,9 +42,15 @@ class EventQueue { WTF_MAKE_NONCOPYABLE(EventQueue); public: + enum ScrollEventTargetType { + ScrollEventDocumentTarget, + ScrollEventElementTarget + }; + EventQueue(); void enqueueEvent(PassRefPtr<Event>); + void enqueueScrollEvent(PassRefPtr<Node>, ScrollEventTargetType); private: void pendingEventTimerFired(Timer<EventQueue>*); @@ -51,6 +58,7 @@ private: Timer<EventQueue> m_pendingEventTimer; Vector<RefPtr<Event> > m_queuedEvents; + HashSet<Node*> m_nodesWithQueuedScrollEvents; }; } diff --git a/Source/WebCore/dom/ExceptionCode.cpp b/Source/WebCore/dom/ExceptionCode.cpp index 7e7e0c9..1118a1a 100644 --- a/Source/WebCore/dom/ExceptionCode.cpp +++ b/Source/WebCore/dom/ExceptionCode.cpp @@ -222,7 +222,8 @@ static const char* const idbDatabaseExceptionNames[] = { "RECOVERABLE_ERR", "TRANSIENT_ERR", "TIMEOUT_ERR", - "DEADLOCK_ERR" + "DEADLOCK_ERR", + "READ_ONLY_ERR" }; static const char* const idbDatabaseExceptionDescriptions[] = { @@ -236,7 +237,8 @@ static const char* const idbDatabaseExceptionDescriptions[] = { "RECOVERABLE_ERR", // FIXME: This isn't even used. "TRANSIENT_ERR", // FIXME: This isn't even used. "TIMEOUT_ERR", // This can't be thrown. - "DEADLOCK_ERR" // This can't be thrown. + "DEADLOCK_ERR", // This can't be thrown. + "Write operations cannot be preformed on a read-only transaction." }; #endif diff --git a/Source/WebCore/dom/Node.cpp b/Source/WebCore/dom/Node.cpp index 8c12285..1998c8c 100644 --- a/Source/WebCore/dom/Node.cpp +++ b/Source/WebCore/dom/Node.cpp @@ -756,6 +756,21 @@ bool Node::hasNonEmptyBoundingBox() const return false; } +void Node::setDocumentRecursively(Document* document) +{ + // FIXME: To match Gecko, we should do this for nodes that are already in the document as well. + if (this->document() == document || this->inDocument()) + return; + + for (Node* node = this; node; node = node->traverseNextNode(this)) { + node->setDocument(document); + if (!node->isElementNode()) + continue; + if (Node* shadow = toElement(node)->shadowRoot()) + shadow->setDocumentRecursively(document); + } +} + inline void Node::setStyleChange(StyleChangeType changeType) { m_nodeFlags = (m_nodeFlags & ~StyleChangeMask) | changeType; @@ -998,7 +1013,7 @@ void Node::removeCachedLabelsNodeList(DynamicNodeList* list) data->m_labelsNodeListCache = 0; } -Node *Node::traverseNextNode(const Node *stayWithin) const +Node* Node::traverseNextNode(const Node* stayWithin) const { if (firstChild()) return firstChild(); @@ -1014,7 +1029,7 @@ Node *Node::traverseNextNode(const Node *stayWithin) const return 0; } -Node *Node::traverseNextSibling(const Node *stayWithin) const +Node* Node::traverseNextSibling(const Node* stayWithin) const { if (this == stayWithin) return 0; @@ -1038,7 +1053,7 @@ Node* Node::traverseNextNodePostOrder() const return next; } -Node *Node::traversePreviousNode(const Node *stayWithin) const +Node* Node::traversePreviousNode(const Node* stayWithin) const { if (this == stayWithin) return 0; @@ -1051,7 +1066,7 @@ Node *Node::traversePreviousNode(const Node *stayWithin) const return parentNode(); } -Node *Node::traversePreviousNodePostOrder(const Node *stayWithin) const +Node* Node::traversePreviousNodePostOrder(const Node* stayWithin) const { if (lastChild()) return lastChild(); @@ -1163,15 +1178,6 @@ static void checkAcceptChild(Node* newParent, Node* newChild, ExceptionCode& ec) } } -static void transferOwnerDocument(Document* newDocument, Node* root) -{ - // FIXME: To match Gecko, we should do this for nodes that are already in the document as well. - if (root->document() != newDocument && !root->inDocument()) { - for (Node* node = root; node; node = node->traverseNextNode(root)) - node->setDocument(newDocument); - } -} - void Node::checkReplaceChild(Node* newChild, Node* oldChild, ExceptionCode& ec) { checkAcceptChild(this, newChild, ec); @@ -1183,7 +1189,7 @@ void Node::checkReplaceChild(Node* newChild, Node* oldChild, ExceptionCode& ec) return; } - transferOwnerDocument(document(), newChild); + newChild->setDocumentRecursively(document()); } void Node::checkAddChild(Node *newChild, ExceptionCode& ec) @@ -1197,7 +1203,7 @@ void Node::checkAddChild(Node *newChild, ExceptionCode& ec) return; } - transferOwnerDocument(document(), newChild); + newChild->setDocumentRecursively(document()); } bool Node::isDescendantOf(const Node *other) const @@ -1379,8 +1385,10 @@ void Node::createRendererIfNeeded() document()->setFullScreenRenderer(fullscreenRenderer); } #endif - - if (parentRenderer && parentRenderer->canHaveChildren() && parent->childShouldCreateRenderer(this)) { + + // FIXME: Ignoreing canHaveChildren() in a case of isShadowRoot() might be wrong. + // See https://bugs.webkit.org/show_bug.cgi?id=52423 + if (parentRenderer && (parentRenderer->canHaveChildren() || isShadowRoot()) && parent->childShouldCreateRenderer(this)) { RefPtr<RenderStyle> style = styleForRenderer(); if (rendererIsNeeded(style.get())) { if (RenderObject* r = createRenderer(document()->renderArena(), style.get())) { @@ -1617,7 +1625,7 @@ PassRefPtr<Element> Node::querySelector(const String& selectors, ExceptionCode& CSSSelectorList querySelectorList; p.parseSelector(selectors, document(), querySelectorList); - if (!querySelectorList.first()) { + if (!querySelectorList.first() || querySelectorList.hasUnknownPseudoElements()) { ec = SYNTAX_ERR; return 0; } @@ -1664,7 +1672,7 @@ PassRefPtr<NodeList> Node::querySelectorAll(const String& selectors, ExceptionCo CSSSelectorList querySelectorList; p.parseSelector(selectors, document(), querySelectorList); - if (!querySelectorList.first()) { + if (!querySelectorList.first() || querySelectorList.hasUnknownPseudoElements()) { ec = SYNTAX_ERR; return 0; } @@ -2685,6 +2693,22 @@ static const EventContext* topEventContext(const Vector<EventContext>& ancestors return ancestors.isEmpty() ? 0 : &ancestors.last(); } +static EventDispatchBehavior determineDispatchBehavior(Event* event) +{ + // Per XBL 2.0 spec, mutation events should never cross shadow DOM boundary: + // http://dev.w3.org/2006/xbl2/#event-flow-and-targeting-across-shadow-s + if (event->isMutationEvent()) + return StayInsideShadowDOM; + + // WebKit never allowed selectstart event to cross the the shadow DOM boundary. + // Changing this breaks existing sites. + // See https://bugs.webkit.org/show_bug.cgi?id=52195 for details. + if (event->type() == eventNames().selectstartEvent) + return StayInsideShadowDOM; + + return RetargetEvent; +} + bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent) { RefPtr<Event> event(prpEvent); @@ -2699,7 +2723,7 @@ bool Node::dispatchGenericEvent(PassRefPtr<Event> prpEvent) RefPtr<Node> thisNode(this); RefPtr<EventTarget> originalTarget = event->target(); Vector<EventContext> ancestors; - getEventAncestors(ancestors, originalTarget.get(), event->isMutationEvent() ? StayInsideShadowDOM : RetargetEvent); + getEventAncestors(ancestors, originalTarget.get(), determineDispatchBehavior(event.get())); WindowEventContext windowContext(event.get(), this, topEventContext(ancestors)); diff --git a/Source/WebCore/dom/Node.h b/Source/WebCore/dom/Node.h index 31a4a65..bc33e22 100644 --- a/Source/WebCore/dom/Node.h +++ b/Source/WebCore/dom/Node.h @@ -372,7 +372,7 @@ public: // argument is non-null, the traversal will stop once the specified node is reached. // This can be used to restrict traversal to a particular sub-tree. Node* traverseNextNode(const Node* stayWithin = 0) const; - + // Like traverseNextNode, but skips children and starts with the next sibling. Node* traverseNextSibling(const Node* stayWithin = 0) const; @@ -656,6 +656,7 @@ private: void markCachedNodeListsSlow(JSC::MarkStack&, JSC::JSGlobalData&); #endif + void setDocumentRecursively(Document*); void setStyleChange(StyleChangeType); // Used to share code between lazyAttach and setNeedsStyleRecalc. diff --git a/Source/WebCore/dom/Range.cpp b/Source/WebCore/dom/Range.cpp index 1f15f26..a41fc49 100644 --- a/Source/WebCore/dom/Range.cpp +++ b/Source/WebCore/dom/Range.cpp @@ -794,13 +794,8 @@ PassRefPtr<DocumentFragment> Range::processContents(ActionType action, Exception Node* n = m_end.container()->firstChild(); if (n && m_end.offset()) { NodeVector nodes; - int i = 0; - do { + for (int i = 0; i < m_end.offset() && n; i++, n = n->nextSibling()) nodes.append(n); - if (!n->nextSibling()) - break; - n = n->nextSibling(); - } while (i + 1 < m_end.offset()); for (int i = nodes.size() - 1; i >= 0; i--) { n = nodes[i].get(); if (action == EXTRACT_CONTENTS) diff --git a/Source/WebCore/dom/ScriptExecutionContext.h b/Source/WebCore/dom/ScriptExecutionContext.h index 12eb776..e473a4b 100644 --- a/Source/WebCore/dom/ScriptExecutionContext.h +++ b/Source/WebCore/dom/ScriptExecutionContext.h @@ -57,9 +57,6 @@ namespace WebCore { #endif class MessagePort; class SecurityOrigin; -#if ENABLE(INSPECTOR) - class InspectorController; -#endif class ScriptExecutionContext { public: @@ -87,9 +84,6 @@ namespace WebCore { virtual String userAgent(const KURL&) const = 0; SecurityOrigin* securityOrigin() const { return m_securityOrigin.get(); } -#if ENABLE(INSPECTOR) - virtual InspectorController* inspectorController() const { return 0; } -#endif virtual void reportException(const String& errorMessage, int lineNumber, const String& sourceURL) = 0; virtual void addMessage(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceURL) = 0; diff --git a/Source/WebCore/dom/StyleElement.cpp b/Source/WebCore/dom/StyleElement.cpp index e9878a6..8f37275 100644 --- a/Source/WebCore/dom/StyleElement.cpp +++ b/Source/WebCore/dom/StyleElement.cpp @@ -30,6 +30,13 @@ namespace WebCore { +static bool isValidStyleChild(Node* node) +{ + ASSERT(node); + Node::NodeType nodeType = node->nodeType(); + return nodeType == Node::TEXT_NODE || nodeType == Node::CDATA_SECTION_NODE; +} + StyleElement::StyleElement(Document* document, bool createdByParser) : m_createdByParser(createdByParser) , m_loading(false) @@ -94,6 +101,7 @@ void StyleElement::process(Element* e) unsigned resultLength = 0; for (Node* c = e->firstChild(); c; c = c->nextSibling()) { +<<<<<<< HEAD Node::NodeType nodeType = c->nodeType(); if (nodeType == Node::TEXT_NODE || nodeType == Node::CDATA_SECTION_NODE || nodeType == Node::COMMENT_NODE) { unsigned length = c->nodeValue().length(); @@ -101,14 +109,17 @@ void StyleElement::process(Element* e) CRASH(); resultLength += length; } +======= + if (isValidStyleChild(c)) + resultLength += c->nodeValue().length(); +>>>>>>> WebKit.org @ r75993 } UChar* text; String sheetText = String::createUninitialized(resultLength, text); UChar* p = text; for (Node* c = e->firstChild(); c; c = c->nextSibling()) { - Node::NodeType nodeType = c->nodeType(); - if (nodeType == Node::TEXT_NODE || nodeType == Node::CDATA_SECTION_NODE || nodeType == Node::COMMENT_NODE) { + if (isValidStyleChild(c)) { String nodeValue = c->nodeValue(); unsigned nodeLength = nodeValue.length(); memcpy(p, nodeValue.characters(), nodeLength * sizeof(UChar)); diff --git a/Source/WebCore/dom/StyleElement.h b/Source/WebCore/dom/StyleElement.h index 05c07c5..4356c17 100644 --- a/Source/WebCore/dom/StyleElement.h +++ b/Source/WebCore/dom/StyleElement.h @@ -37,7 +37,7 @@ protected: virtual const AtomicString& type() const = 0; virtual const AtomicString& media() const = 0; - StyleSheet* sheet() { return m_sheet.get(); } + StyleSheet* sheet() const { return m_sheet.get(); } bool isLoading() const; bool sheetLoaded(Document*); diff --git a/Source/WebCore/dom/StyledElement.cpp b/Source/WebCore/dom/StyledElement.cpp index 9a7c9c8..d6a532f 100644 --- a/Source/WebCore/dom/StyledElement.cpp +++ b/Source/WebCore/dom/StyledElement.cpp @@ -25,10 +25,11 @@ #include "StyledElement.h" #include "Attribute.h" -#include "ClassList.h" +#include "CSSMutableStyleDeclaration.h" #include "CSSStyleSelector.h" #include "CSSStyleSheet.h" #include "CSSValueKeywords.h" +#include "ClassList.h" #include "DOMTokenList.h" #include "Document.h" #include "HTMLNames.h" diff --git a/Source/WebCore/dom/StyledElement.h b/Source/WebCore/dom/StyledElement.h index 8040dbf..32fc4c2 100644 --- a/Source/WebCore/dom/StyledElement.h +++ b/Source/WebCore/dom/StyledElement.h @@ -25,7 +25,6 @@ #ifndef StyledElement_h #define StyledElement_h -#include "CSSMutableStyleDeclaration.h" #include "Element.h" #include "MappedAttributeEntry.h" @@ -33,6 +32,7 @@ namespace WebCore { class Attribute; class CSSMappedAttributeDeclaration; +class CSSMutableStyleDeclaration; class StyledElement : public Element { public: diff --git a/Source/WebCore/dom/TouchEvent.cpp b/Source/WebCore/dom/TouchEvent.cpp index 88d3e6f..225e3ae 100644 --- a/Source/WebCore/dom/TouchEvent.cpp +++ b/Source/WebCore/dom/TouchEvent.cpp @@ -61,6 +61,9 @@ void TouchEvent::initTouchEvent(TouchList* touches, TouchList* targetTouches, initUIEvent(type, true, true, view, 0); + m_touches = touches; + m_targetTouches = targetTouches; + m_changedTouches = changedTouches; m_screenX = screenX; m_screenY = screenY; m_ctrlKey = ctrlKey; diff --git a/Source/WebCore/dom/XMLDocumentParser.cpp b/Source/WebCore/dom/XMLDocumentParser.cpp index 68c8dd9..a5d3c08 100644 --- a/Source/WebCore/dom/XMLDocumentParser.cpp +++ b/Source/WebCore/dom/XMLDocumentParser.cpp @@ -116,13 +116,9 @@ void XMLDocumentParser::clearCurrentNodeStack() } } -void XMLDocumentParser::insert(const SegmentedString& source) +void XMLDocumentParser::insert(const SegmentedString&) { - // FIXME: This is a hack to work around the fact that XMLHttpRequest - // responseXML() calls Document::write() which in turn calls insert(). In - // HTML, that's correct, as insert() implies a synchronous parse. For XML, - // all parsing is synchronous but document.write shouldn't be supported. - append(source); + ASSERT_NOT_REACHED(); } void XMLDocumentParser::append(const SegmentedString& s) diff --git a/Source/WebCore/editing/ApplyBlockElementCommand.cpp b/Source/WebCore/editing/ApplyBlockElementCommand.cpp index 285650d..e700875 100644 --- a/Source/WebCore/editing/ApplyBlockElementCommand.cpp +++ b/Source/WebCore/editing/ApplyBlockElementCommand.cpp @@ -102,7 +102,7 @@ void ApplyBlockElementCommand::formatSelection(const VisiblePosition& startOfSel insertNodeAt(blockquote, start); RefPtr<Element> placeholder = createBreakElement(document()); appendNode(placeholder, blockquote); - setEndingSelection(VisibleSelection(Position(placeholder.get(), 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(positionBeforeNode(placeholder.get()), DOWNSTREAM)); return; } diff --git a/Source/WebCore/editing/ApplyStyleCommand.cpp b/Source/WebCore/editing/ApplyStyleCommand.cpp index 71b6a27..7227d7b 100644 --- a/Source/WebCore/editing/ApplyStyleCommand.cpp +++ b/Source/WebCore/editing/ApplyStyleCommand.cpp @@ -33,6 +33,7 @@ #include "CSSPropertyNames.h" #include "CSSStyleSelector.h" #include "CSSValueKeywords.h" +#include "CSSValueList.h" #include "Document.h" #include "EditingStyle.h" #include "Editor.h" @@ -563,17 +564,16 @@ void ApplyStyleCommand::applyBlockStyle(CSSMutableStyleDeclaration *style) if (visibleStart.isNull() || visibleStart.isOrphan() || visibleEnd.isNull() || visibleEnd.isOrphan()) return; - + // Save and restore the selection endpoints using their indices in the document, since // addBlockStyleIfNeeded may moveParagraphs, which can remove these endpoints. // Calculate start and end indices from the start of the tree that they're in. Node* scope = highestAncestor(visibleStart.deepEquivalent().node()); - Position rangeStart(scope, 0); - RefPtr<Range> startRange = Range::create(document(), rangeStart, rangeCompliantEquivalent(visibleStart.deepEquivalent())); - RefPtr<Range> endRange = Range::create(document(), rangeStart, rangeCompliantEquivalent(visibleEnd.deepEquivalent())); + RefPtr<Range> startRange = Range::create(document(), firstPositionInNode(scope), rangeCompliantEquivalent(visibleStart.deepEquivalent())); + RefPtr<Range> endRange = Range::create(document(), firstPositionInNode(scope), rangeCompliantEquivalent(visibleEnd.deepEquivalent())); int startIndex = TextIterator::rangeLength(startRange.get(), true); int endIndex = TextIterator::rangeLength(endRange.get(), true); - + VisiblePosition paragraphStart(startOfParagraph(visibleStart)); VisiblePosition nextParagraphStart(endOfParagraph(paragraphStart).next()); VisiblePosition beyondEnd(endOfParagraph(visibleEnd).next()); @@ -982,7 +982,7 @@ void ApplyStyleCommand::fixRangeAndApplyInlineStyle(CSSMutableStyleDeclaration* if (start.deprecatedEditingOffset() >= caretMaxOffset(start.node())) { startNode = startNode->traverseNextNode(); - if (!startNode || comparePositions(end, Position(startNode, 0)) < 0) + if (!startNode || comparePositions(end, firstPositionInOrBeforeNode(startNode)) < 0) return; } @@ -1333,7 +1333,7 @@ HTMLElement* ApplyStyleCommand::highestAncestorWithConflictingInlineStyle(CSSMut return 0; HTMLElement* result = 0; - Node* unsplittableElement = unsplittableElementForPosition(Position(node, 0)); + Node* unsplittableElement = unsplittableElementForPosition(firstPositionInOrBeforeNode(node)); for (Node *n = node; n; n = n->parentNode()) { if (n->isHTMLElement() && shouldRemoveInlineStyleFromElement(style, static_cast<HTMLElement*>(n))) @@ -1515,15 +1515,16 @@ void ApplyStyleCommand::removeInlineStyle(PassRefPtr<CSSMutableStyleDeclaration> if (s.node() == elem) { // Since elem must have been fully selected, and it is at the start // of the selection, it is clear we can set the new s offset to 0. - ASSERT(s.deprecatedEditingOffset() <= caretMinOffset(s.node())); - s = Position(next, 0); + ASSERT(s.anchorType() == Position::PositionIsBeforeAnchor || s.offsetInContainerNode() <= 0); + s = firstPositionInOrBeforeNode(next.get()); } if (e.node() == elem) { // Since elem must have been fully selected, and it is at the end // of the selection, it is clear we can set the new e offset to // the max range offset of prev. - ASSERT(e.deprecatedEditingOffset() >= lastOffsetForEditing(e.node())); - e = Position(prev, lastOffsetForEditing(prev.get())); + ASSERT(s.anchorType() == Position::PositionIsAfterAnchor + || s.offsetInContainerNode() >= lastOffsetInNode(s.containerNode())); + e = lastPositionInOrAfterNode(prev.get()); } } @@ -1545,8 +1546,8 @@ bool ApplyStyleCommand::nodeFullySelected(Node *node, const Position &start, con ASSERT(node); ASSERT(node->isElementNode()); - Position pos = Position(node, node->childNodeCount()).upstream(); - return comparePositions(Position(node, 0), start) >= 0 && comparePositions(pos, end) <= 0; + return comparePositions(firstPositionInOrBeforeNode(node), start) >= 0 + && comparePositions(lastPositionInOrAfterNode(node).upstream(), end) <= 0; } bool ApplyStyleCommand::nodeFullyUnselected(Node *node, const Position &start, const Position &end) const @@ -1554,51 +1555,68 @@ bool ApplyStyleCommand::nodeFullyUnselected(Node *node, const Position &start, c ASSERT(node); ASSERT(node->isElementNode()); - Position pos = Position(node, node->childNodeCount()).upstream(); - bool isFullyBeforeStart = comparePositions(pos, start) < 0; - bool isFullyAfterEnd = comparePositions(Position(node, 0), end) > 0; + bool isFullyBeforeStart = comparePositions(lastPositionInOrAfterNode(node).upstream(), start) < 0; + bool isFullyAfterEnd = comparePositions(firstPositionInOrBeforeNode(node), end) > 0; return isFullyBeforeStart || isFullyAfterEnd; } void ApplyStyleCommand::splitTextAtStart(const Position& start, const Position& end) { - int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; + ASSERT(start.anchorType() == Position::PositionIsOffsetInAnchor); + + Position newEnd; + if (end.anchorType() == Position::PositionIsOffsetInAnchor && start.containerNode() == end.containerNode()) + newEnd = Position(end.containerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor); + else + newEnd = end; + Text* text = static_cast<Text*>(start.node()); - splitTextNode(text, start.deprecatedEditingOffset()); - updateStartEnd(Position(start.node(), 0), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); + splitTextNode(text, start.offsetInContainerNode()); + updateStartEnd(firstPositionInNode(start.node()), newEnd); } void ApplyStyleCommand::splitTextAtEnd(const Position& start, const Position& end) { + ASSERT(end.anchorType() == Position::PositionIsOffsetInAnchor); + + bool shouldUpdateStart = start.anchorType() == Position::PositionIsOffsetInAnchor && start.containerNode() == end.containerNode(); Text* text = static_cast<Text *>(end.node()); - splitTextNode(text, end.deprecatedEditingOffset()); + splitTextNode(text, end.offsetInContainerNode()); Node* prevNode = text->previousSibling(); ASSERT(prevNode); - Node* startNode = start.node() == end.node() ? prevNode : start.node(); - ASSERT(startNode); - updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode, caretMaxOffset(prevNode))); + Position newStart = shouldUpdateStart ? Position(prevNode, start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor) : start; + updateStartEnd(newStart, lastPositionInNode(prevNode)); } void ApplyStyleCommand::splitTextElementAtStart(const Position& start, const Position& end) { - int endOffsetAdjustment = start.node() == end.node() ? start.deprecatedEditingOffset() : 0; + ASSERT(start.anchorType() == Position::PositionIsOffsetInAnchor); + + Position newEnd; + if (end.anchorType() == Position::PositionIsOffsetInAnchor && start.containerNode() == end.containerNode()) + newEnd = Position(end.containerNode(), end.offsetInContainerNode() - start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor); + else + newEnd = end; + Text* text = static_cast<Text*>(start.node()); splitTextNodeContainingElement(text, start.deprecatedEditingOffset()); - updateStartEnd(Position(start.node()->parentNode(), start.node()->nodeIndex()), Position(end.node(), end.deprecatedEditingOffset() - endOffsetAdjustment)); + updateStartEnd(Position(start.node()->parentNode(), start.node()->nodeIndex(), Position::PositionIsOffsetInAnchor), newEnd); } void ApplyStyleCommand::splitTextElementAtEnd(const Position& start, const Position& end) { + ASSERT(end.anchorType() == Position::PositionIsOffsetInAnchor); + + bool shouldUpdateStart = start.anchorType() == Position::PositionIsOffsetInAnchor && start.containerNode() == end.containerNode(); Text* text = static_cast<Text*>(end.node()); splitTextNodeContainingElement(text, end.deprecatedEditingOffset()); Node* prevNode = text->parentNode()->previousSibling()->lastChild(); ASSERT(prevNode); - Node* startNode = start.node() == end.node() ? prevNode : start.node(); - ASSERT(startNode); - updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(prevNode->parentNode(), prevNode->nodeIndex() + 1)); + Position newStart = shouldUpdateStart ? Position(prevNode, start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor) : start; + updateStartEnd(newStart, Position(prevNode->parentNode(), prevNode->nodeIndex() + 1, Position::PositionIsOffsetInAnchor)); } bool ApplyStyleCommand::shouldSplitTextElement(Element* element, CSSMutableStyleDeclaration* style) @@ -1611,11 +1629,11 @@ bool ApplyStyleCommand::shouldSplitTextElement(Element* element, CSSMutableStyle bool ApplyStyleCommand::isValidCaretPositionInTextNode(const Position& position) { - Node* node = position.node(); - if (!node->isTextNode()) + Node* node = position.containerNode(); + if (position.anchorType() != Position::PositionIsOffsetInAnchor || !node->isTextNode()) return false; - int offsetInText = position.deprecatedEditingOffset(); - return (offsetInText > caretMinOffset(node) && offsetInText < caretMaxOffset(node)); + int offsetInText = position.offsetInContainerNode(); + return offsetInText > caretMinOffset(node) && offsetInText < caretMaxOffset(node); } static bool areIdenticalElements(Node *first, Node *second) @@ -1653,55 +1671,52 @@ static bool areIdenticalElements(Node *first, Node *second) return true; } -bool ApplyStyleCommand::mergeStartWithPreviousIfIdentical(const Position &start, const Position &end) +bool ApplyStyleCommand::mergeStartWithPreviousIfIdentical(const Position& start, const Position& end) { - Node *startNode = start.node(); - int startOffset = start.deprecatedEditingOffset(); - - if (isAtomicNode(start.node())) { - if (start.deprecatedEditingOffset() != 0) - return false; + Node* startNode = start.containerNode(); + int startOffset = start.computeOffsetInContainerNode(); + if (startOffset) + return false; + if (isAtomicNode(startNode)) { // note: prior siblings could be unrendered elements. it's silly to miss the // merge opportunity just for that. - if (start.node()->previousSibling()) + if (startNode->previousSibling()) return false; - startNode = start.node()->parentNode(); + startNode = startNode->parentNode(); startOffset = 0; } if (!startNode->isElementNode()) return false; - if (startOffset != 0) - return false; - - Node *previousSibling = startNode->previousSibling(); + Node* previousSibling = startNode->previousSibling(); if (previousSibling && areIdenticalElements(startNode, previousSibling)) { - Element *previousElement = static_cast<Element *>(previousSibling); - Element *element = static_cast<Element *>(startNode); - Node *startChild = element->firstChild(); + Element* previousElement = static_cast<Element*>(previousSibling); + Element* element = static_cast<Element*>(startNode); + Node* startChild = element->firstChild(); ASSERT(startChild); mergeIdenticalElements(previousElement, element); int startOffsetAdjustment = startChild->nodeIndex(); int endOffsetAdjustment = startNode == end.node() ? startOffsetAdjustment : 0; - updateStartEnd(Position(startNode, startOffsetAdjustment), Position(end.node(), end.deprecatedEditingOffset() + endOffsetAdjustment)); + updateStartEnd(Position(startNode, startOffsetAdjustment, Position::PositionIsOffsetInAnchor), + Position(end.node(), end.deprecatedEditingOffset() + endOffsetAdjustment, Position::PositionIsOffsetInAnchor)); return true; } return false; } -bool ApplyStyleCommand::mergeEndWithNextIfIdentical(const Position &start, const Position &end) +bool ApplyStyleCommand::mergeEndWithNextIfIdentical(const Position& start, const Position& end) { - Node *endNode = end.node(); - int endOffset = end.deprecatedEditingOffset(); + Node* endNode = end.containerNode(); + int endOffset = end.computeOffsetInContainerNode(); if (isAtomicNode(endNode)) { - if (endOffset < caretMaxOffset(endNode)) + if (endOffset < lastOffsetInNode(endNode)) return false; unsigned parentLastOffset = end.node()->parentNode()->childNodes()->length() - 1; @@ -1715,20 +1730,18 @@ bool ApplyStyleCommand::mergeEndWithNextIfIdentical(const Position &start, const if (!endNode->isElementNode() || endNode->hasTagName(brTag)) return false; - Node *nextSibling = endNode->nextSibling(); - + Node* nextSibling = endNode->nextSibling(); if (nextSibling && areIdenticalElements(endNode, nextSibling)) { - Element *nextElement = static_cast<Element *>(nextSibling); - Element *element = static_cast<Element *>(endNode); - Node *nextChild = nextElement->firstChild(); + Element* nextElement = static_cast<Element *>(nextSibling); + Element* element = static_cast<Element *>(endNode); + Node* nextChild = nextElement->firstChild(); mergeIdenticalElements(element, nextElement); - Node *startNode = start.node() == endNode ? nextElement : start.node(); - ASSERT(startNode); - + bool shouldUpdateStart = start.containerNode() == endNode; int endOffset = nextChild ? nextChild->nodeIndex() : nextElement->childNodes()->length(); - updateStartEnd(Position(startNode, start.deprecatedEditingOffset()), Position(nextElement, endOffset)); + updateStartEnd(shouldUpdateStart ? Position(nextElement, start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor) : start, + Position(nextElement, endOffset, Position::PositionIsOffsetInAnchor)); return true; } @@ -1880,41 +1893,40 @@ void ApplyStyleCommand::addInlineStyleIfNeeded(CSSMutableStyleDeclaration *style surroundNodeRangeWithElement(startNode, endNode, m_styledInlineElement->cloneElementWithoutChildren()); } -float ApplyStyleCommand::computedFontSize(const Node *node) +float ApplyStyleCommand::computedFontSize(Node* node) { if (!node) return 0; - - Position pos(const_cast<Node *>(node), 0); - RefPtr<CSSComputedStyleDeclaration> computedStyle = pos.computedStyle(); - if (!computedStyle) + + RefPtr<CSSComputedStyleDeclaration> style = computedStyle(node); + if (!style) return 0; - RefPtr<CSSPrimitiveValue> value = static_pointer_cast<CSSPrimitiveValue>(computedStyle->getPropertyCSSValue(CSSPropertyFontSize)); + RefPtr<CSSPrimitiveValue> value = static_pointer_cast<CSSPrimitiveValue>(style->getPropertyCSSValue(CSSPropertyFontSize)); if (!value) return 0; return value->getFloatValue(CSSPrimitiveValue::CSS_PX); } -void ApplyStyleCommand::joinChildTextNodes(Node *node, const Position &start, const Position &end) +void ApplyStyleCommand::joinChildTextNodes(Node* node, const Position& start, const Position& end) { if (!node) return; Position newStart = start; Position newEnd = end; - - Node *child = node->firstChild(); + + Node* child = node->firstChild(); while (child) { - Node *next = child->nextSibling(); + Node* next = child->nextSibling(); if (child->isTextNode() && next && next->isTextNode()) { - Text *childText = static_cast<Text *>(child); - Text *nextText = static_cast<Text *>(next); - if (next == start.node()) - newStart = Position(childText, childText->length() + start.deprecatedEditingOffset()); - if (next == end.node()) - newEnd = Position(childText, childText->length() + end.deprecatedEditingOffset()); + Text* childText = static_cast<Text *>(child); + Text* nextText = static_cast<Text *>(next); + if (start.anchorType() == Position::PositionIsOffsetInAnchor && next == start.containerNode()) + newStart = Position(childText, childText->length() + start.offsetInContainerNode(), Position::PositionIsOffsetInAnchor); + if (end.anchorType() == Position::PositionIsOffsetInAnchor && next == end.containerNode()) + newEnd = Position(childText, childText->length() + end.offsetInContainerNode(), Position::PositionIsOffsetInAnchor); String textToMove = nextText->data(); insertTextIntoNode(childText, childText->length(), textToMove); removeNode(next); diff --git a/Source/WebCore/editing/ApplyStyleCommand.h b/Source/WebCore/editing/ApplyStyleCommand.h index 5f369ba..05af85c 100644 --- a/Source/WebCore/editing/ApplyStyleCommand.h +++ b/Source/WebCore/editing/ApplyStyleCommand.h @@ -108,7 +108,7 @@ private: void cleanupUnstyledAppleStyleSpans(Node* dummySpanAncestor); void surroundNodeRangeWithElement(PassRefPtr<Node> start, PassRefPtr<Node> end, PassRefPtr<Element>); - float computedFontSize(const Node*); + float computedFontSize(Node*); void joinChildTextNodes(Node*, const Position& start, const Position& end); HTMLElement* splitAncestorsWithUnicodeBidi(Node*, bool before, int allowedDirection); diff --git a/Source/WebCore/editing/BreakBlockquoteCommand.cpp b/Source/WebCore/editing/BreakBlockquoteCommand.cpp index 63956e5..ae409c6 100644 --- a/Source/WebCore/editing/BreakBlockquoteCommand.cpp +++ b/Source/WebCore/editing/BreakBlockquoteCommand.cpp @@ -82,7 +82,7 @@ void BreakBlockquoteCommand::doApply() // Instead, insert the break before the blockquote, unless the position is as the end of the the quoted content. if (isFirstVisiblePositionInNode(visiblePos, topBlockquote) && !isLastVisPosInNode) { insertNodeBefore(breakNode.get(), topBlockquote); - setEndingSelection(VisibleSelection(Position(breakNode.get(), 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(positionBeforeNode(breakNode.get()), DOWNSTREAM)); rebalanceWhitespace(); return; } @@ -92,7 +92,7 @@ void BreakBlockquoteCommand::doApply() // If we're inserting the break at the end of the quoted content, we don't need to break the quote. if (isLastVisPosInNode) { - setEndingSelection(VisibleSelection(Position(breakNode.get(), 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(positionBeforeNode(breakNode.get()), DOWNSTREAM)); rebalanceWhitespace(); return; } @@ -125,7 +125,7 @@ void BreakBlockquoteCommand::doApply() // If there's nothing inside topBlockquote to move, we're finished. if (!startNode->isDescendantOf(topBlockquote)) { - setEndingSelection(VisibleSelection(VisiblePosition(Position(startNode, 0)))); + setEndingSelection(VisibleSelection(VisiblePosition(firstPositionInOrBeforeNode(startNode)))); return; } @@ -198,7 +198,7 @@ void BreakBlockquoteCommand::doApply() addBlockPlaceholderIfNeeded(clonedBlockquote.get()); // Put the selection right before the break. - setEndingSelection(VisibleSelection(Position(breakNode.get(), 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(positionBeforeNode(breakNode.get()), DOWNSTREAM)); rebalanceWhitespace(); } diff --git a/Source/WebCore/editing/CompositeEditCommand.cpp b/Source/WebCore/editing/CompositeEditCommand.cpp index 748777d..9e1dfca 100644 --- a/Source/WebCore/editing/CompositeEditCommand.cpp +++ b/Source/WebCore/editing/CompositeEditCommand.cpp @@ -301,7 +301,7 @@ void CompositeEditCommand::inputText(const String& text, bool selectInsertedText { unsigned offset = 0; unsigned length = text.length(); - RefPtr<Range> startRange = Range::create(document(), Position(document()->documentElement(), 0), endingSelection().start()); + RefPtr<Range> startRange = Range::create(document(), firstPositionInNode(document()->documentElement()), endingSelection().start()); unsigned startIndex = TextIterator::rangeLength(startRange.get()); size_t newline; do { @@ -398,17 +398,17 @@ static inline bool isWhitespace(UChar c) // FIXME: Doesn't go into text nodes that contribute adjacent text (siblings, cousins, etc). void CompositeEditCommand::rebalanceWhitespaceAt(const Position& position) { - Node* node = position.node(); - if (!node || !node->isTextNode()) + Node* node = position.containerNode(); + if (position.anchorType() != Position::PositionIsOffsetInAnchor || !node || !node->isTextNode()) return; Text* textNode = static_cast<Text*>(node); - + if (textNode->length() == 0) return; RenderObject* renderer = textNode->renderer(); if (renderer && !renderer->style()->collapseWhiteSpace()) return; - + String text = textNode->data(); ASSERT(!text.isEmpty()); @@ -432,8 +432,8 @@ void CompositeEditCommand::rebalanceWhitespaceAt(const Position& position) int length = downstream - upstream + 1; ASSERT(length > 0); - VisiblePosition visibleUpstreamPos(Position(position.node(), upstream)); - VisiblePosition visibleDownstreamPos(Position(position.node(), downstream + 1)); + VisiblePosition visibleUpstreamPos(Position(position.containerNode(), upstream, Position::PositionIsOffsetInAnchor)); + VisiblePosition visibleDownstreamPos(Position(position.containerNode(), downstream + 1, Position::PositionIsOffsetInAnchor)); String string = text.substring(upstream, length); String rebalancedString = stringWithRebalancedWhitespace(string, @@ -715,10 +715,10 @@ PassRefPtr<Node> CompositeEditCommand::moveParagraphContentsToNewBlockIfNecessar } RefPtr<Node> newBlock = insertNewDefaultParagraphElementAt(upstreamStart); - + bool endWasBr = visibleParagraphEnd.deepEquivalent().node()->hasTagName(brTag); - moveParagraphs(visibleParagraphStart, visibleParagraphEnd, VisiblePosition(Position(newBlock.get(), 0))); + moveParagraphs(visibleParagraphStart, visibleParagraphEnd, VisiblePosition(firstPositionInNode(newBlock.get()))); if (newBlock->lastChild() && newBlock->lastChild()->hasTagName(brTag) && !endWasBr) removeNode(newBlock->lastChild()); @@ -973,10 +973,10 @@ void CompositeEditCommand::moveParagraphs(const VisiblePosition& startOfParagrap // Need an updateLayout here in case inserting the br has split a text node. updateLayout(); } - - RefPtr<Range> startToDestinationRange(Range::create(document(), Position(document(), 0), rangeCompliantEquivalent(destination.deepEquivalent()))); + + RefPtr<Range> startToDestinationRange(Range::create(document(), firstPositionInNode(document()->documentElement()), rangeCompliantEquivalent(destination.deepEquivalent()))); destinationIndex = TextIterator::rangeLength(startToDestinationRange.get(), true); - + setEndingSelection(destination); ASSERT(endingSelection().isCaretOrRange()); applyCommandToComposite(ReplaceSelectionCommand::create(document(), fragment, true, false, !preserveStyle, false, true)); @@ -1055,7 +1055,7 @@ bool CompositeEditCommand::breakOutOfEmptyListItem() } appendBlockPlaceholder(newBlock); - setEndingSelection(VisibleSelection(Position(newBlock.get(), 0), DOWNSTREAM)); + setEndingSelection(VisibleSelection(firstPositionInNode(newBlock.get()), DOWNSTREAM)); style->prepareToApplyAt(endingSelection().start()); if (!style->isEmpty()) @@ -1088,7 +1088,7 @@ bool CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph() // We want to replace this quoted paragraph with an unquoted one, so insert a br // to hold the caret before the highest blockquote. insertNodeBefore(br, highestBlockquote); - VisiblePosition atBR(Position(br.get(), 0)); + VisiblePosition atBR(positionBeforeNode(br.get())); // If the br we inserted collapsed, for example foo<br><blockquote>...</blockquote>, insert // a second one. if (!isStartOfParagraph(atBR)) @@ -1191,8 +1191,8 @@ PassRefPtr<Node> CompositeEditCommand::splitTreeToNode(Node* start, Node* end, b for (node = start; node && node->parentNode() != end; node = node->parentNode()) { if (!node->parentNode()->isElementNode()) break; - VisiblePosition positionInParent(Position(node->parentNode(), 0), DOWNSTREAM); - VisiblePosition positionInNode(Position(node, 0), DOWNSTREAM); + VisiblePosition positionInParent(firstPositionInNode(node->parentNode()), DOWNSTREAM); + VisiblePosition positionInNode(firstPositionInOrBeforeNode(node.get()), DOWNSTREAM); if (positionInParent != positionInNode) applyCommandToComposite(SplitElementCommand::create(static_cast<Element*>(node->parentNode()), node)); } diff --git a/Source/WebCore/editing/DeleteButtonController.cpp b/Source/WebCore/editing/DeleteButtonController.cpp index 028edc8..61e3190 100644 --- a/Source/WebCore/editing/DeleteButtonController.cpp +++ b/Source/WebCore/editing/DeleteButtonController.cpp @@ -159,7 +159,7 @@ static HTMLElement* enclosingDeletableElement(const VisibleSelection& selection) if (!container->isContentEditable()) return 0; - Node* element = enclosingNodeOfType(Position(container, 0), &isDeletableElement); + Node* element = enclosingNodeOfType(firstPositionInNode(container), &isDeletableElement); if (!element) return 0; diff --git a/Source/WebCore/editing/Editor.cpp b/Source/WebCore/editing/Editor.cpp index a24e7c6..bea74d9 100644 --- a/Source/WebCore/editing/Editor.cpp +++ b/Source/WebCore/editing/Editor.cpp @@ -52,6 +52,7 @@ #include "Frame.h" #include "FrameTree.h" #include "FrameView.h" +#include "GraphicsContext.h" #include "HTMLFrameOwnerElement.h" #include "HTMLInputElement.h" #include "HTMLTextAreaElement.h" @@ -3031,7 +3032,8 @@ void Editor::changeSelectionAfterCommand(const VisibleSelection& newSelection, b String Editor::selectedText() const { - return plainText(m_frame->selection()->toNormalizedRange().get()); + // We remove '\0' characters because they are not visibly rendered to the user. + return plainText(m_frame->selection()->toNormalizedRange().get()).replace(0, ""); } IntRect Editor::firstRectForRange(Range* range) const diff --git a/Source/WebCore/editing/EditorCommand.cpp b/Source/WebCore/editing/EditorCommand.cpp index 5de44a6..64993d5 100644 --- a/Source/WebCore/editing/EditorCommand.cpp +++ b/Source/WebCore/editing/EditorCommand.cpp @@ -32,6 +32,7 @@ #include "CSSMutableStyleDeclaration.h" #include "CSSPropertyNames.h" #include "CSSValueKeywords.h" +#include "CSSValueList.h" #include "Chrome.h" #include "CreateLinkCommand.h" #include "DocumentFragment.h" diff --git a/Source/WebCore/editing/SmartReplace.h b/Source/WebCore/editing/SmartReplace.h index 5a37137..b072e58 100644 --- a/Source/WebCore/editing/SmartReplace.h +++ b/Source/WebCore/editing/SmartReplace.h @@ -26,6 +26,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef SmartReplace_h +#define SmartReplace_h + #include <wtf/unicode/Unicode.h> namespace WebCore { @@ -33,3 +36,5 @@ namespace WebCore { bool isCharacterSmartReplaceExempt(UChar32 c, bool isPreviousCharacter); } // namespace WebCore + +#endif // SmartReplace_h diff --git a/Source/WebCore/editing/htmlediting.h b/Source/WebCore/editing/htmlediting.h index 1892357..1f6b986 100644 --- a/Source/WebCore/editing/htmlediting.h +++ b/Source/WebCore/editing/htmlediting.h @@ -114,7 +114,17 @@ Position positionBeforeTabSpan(const Position&); Position positionBeforeContainingSpecialElement(const Position&, Node** containingSpecialElement=0); Position positionAfterContainingSpecialElement(const Position&, Node** containingSpecialElement=0); Position positionOutsideContainingSpecialElement(const Position&, Node** containingSpecialElement=0); - + +inline Position firstPositionInOrBeforeNode(Node* node) +{ + return editingIgnoresContent(node) ? positionBeforeNode(node) : firstPositionInNode(node); +} + +inline Position lastPositionInOrAfterNode(Node* node) +{ + return editingIgnoresContent(node) ? positionAfterNode(node) : lastPositionInNode(node); +} + // Position creation functions are inline to prevent ref-churn. // Other Position creation functions are in Position.h // but these depend on lastOffsetForEditing which is defined in htmlediting.h. diff --git a/Source/WebCore/features.pri b/Source/WebCore/features.pri index ff54b14..fdf11ed 100644 --- a/Source/WebCore/features.pri +++ b/Source/WebCore/features.pri @@ -152,9 +152,13 @@ contains(MOBILITY_CONFIG, sensors) { contains(MOBILITY_CONFIG, multimedia) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 + DEFINES -= ENABLE_QT_MULTIMEDIA=0 + DEFINES += ENABLE_QT_MULTIMEDIA=1 } else:contains(QT_CONFIG, phonon) { DEFINES -= ENABLE_VIDEO=0 DEFINES += ENABLE_VIDEO=1 + DEFINES -= ENABLE_QT_MULTIMEDIA=1 + DEFINES += ENABLE_QT_MULTIMEDIA=0 } } diff --git a/Source/WebCore/history/BackForwardListChromium.cpp b/Source/WebCore/history/BackForwardListChromium.cpp deleted file mode 100644 index a22a147..0000000 --- a/Source/WebCore/history/BackForwardListChromium.cpp +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2005, 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. - */ - -#include "config.h" -#include "BackForwardListImpl.h" - -#include "HistoryItem.h" -#include "Logging.h" - -namespace WebCore { - -static const unsigned DefaultCapacity = 100; -static const unsigned NoCurrentItemIndex = UINT_MAX; - -BackForwardListImpl::BackForwardListImpl(Page* page) - : m_page(page) - , m_client(0) - , m_capacity(DefaultCapacity) - , m_closed(true) - , m_enabled(true) -{ -} - -BackForwardListImpl::~BackForwardListImpl() -{ - ASSERT(m_closed); -} - -void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem) -{ - ASSERT(prpItem); - if (m_capacity == 0 || !m_enabled) - return; - - m_client->addItem(prpItem); -} - -void BackForwardListImpl::goToItem(HistoryItem* item) -{ - m_client->goToItem(item); -} - -int BackForwardListImpl::capacity() -{ - return m_capacity; -} - -void BackForwardListImpl::setCapacity(int size) -{ - m_capacity = size; -} - -bool BackForwardListImpl::enabled() -{ - return m_enabled; -} - -void BackForwardListImpl::setEnabled(bool enabled) -{ - m_enabled = enabled; - if (!enabled) { - int capacity = m_capacity; - setCapacity(0); - setCapacity(capacity); - } -} - -int BackForwardListImpl::backListCount() -{ - return m_client->backListCount(); -} - -int BackForwardListImpl::forwardListCount() -{ - return m_client->forwardListCount(); -} - -HistoryItem* BackForwardListImpl::itemAtIndex(int index) -{ - return m_client->itemAtIndex(index); -} - -HistoryItemVector& BackForwardListImpl::entries() -{ - static HistoryItemVector noEntries; - return noEntries; -} - -void BackForwardListImpl::close() -{ - if (m_client) - m_client->close(); - m_page = 0; - m_closed = true; -} - -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/Source/WebCore/history/BackForwardListImpl.h b/Source/WebCore/history/BackForwardListImpl.h index 30043fa..7b1a422 100644 --- a/Source/WebCore/history/BackForwardListImpl.h +++ b/Source/WebCore/history/BackForwardListImpl.h @@ -39,25 +39,6 @@ class Page; typedef Vector<RefPtr<HistoryItem> > HistoryItemVector; typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet; -// FIXME: Change Chromium to use its own BackForwardList implementation -// and not use BackForwardListImpl at all, then remove this -// BackForwardListClient feature entirely and just don't use this -// class on Chromium. -#if PLATFORM(CHROMIUM) -// In the Chromium port, the back/forward list is managed externally. -// See BackForwardListChromium.cpp -class BackForwardListClient { -public: - virtual ~BackForwardListClient() { } - virtual void addItem(PassRefPtr<HistoryItem>) = 0; - virtual void goToItem(HistoryItem*) = 0; - virtual HistoryItem* itemAtIndex(int) = 0; - virtual int backListCount() = 0; - virtual int forwardListCount() = 0; - virtual void close() = 0; -}; -#endif - // FIXME: After renaming BackForwardList to BackForwardClient, // rename this to BackForwardList. class BackForwardListImpl : public BackForwardList { @@ -65,11 +46,6 @@ public: static PassRefPtr<BackForwardListImpl> create(Page* page) { return adoptRef(new BackForwardListImpl(page)); } virtual ~BackForwardListImpl(); -#if PLATFORM(CHROMIUM) - // Must be called before any other methods. - void setClient(BackForwardListClient* client) { m_client = client; } -#endif - Page* page() { return m_page; } virtual void addItem(PassRefPtr<HistoryItem>); @@ -109,13 +85,9 @@ private: virtual bool isActive() { return enabled() && capacity(); } 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; diff --git a/Source/WebCore/history/HistoryItem.cpp b/Source/WebCore/history/HistoryItem.cpp index 0995913..f9e6c96 100644 --- a/Source/WebCore/history/HistoryItem.cpp +++ b/Source/WebCore/history/HistoryItem.cpp @@ -40,7 +40,7 @@ namespace WebCore { -const uint32_t backForwardTreeEncodingVersion = 0; +const uint32_t backForwardTreeEncodingVersion = 1; static long long generateSequenceNumber() { @@ -59,6 +59,7 @@ void (*notifyHistoryItemChanged)(HistoryItem*) = defaultNotifyHistoryItemChanged HistoryItem::HistoryItem() : m_lastVisitedTime(0) , m_lastVisitWasHTTPNonGet(false) + , m_pageScaleFactor(1) , m_lastVisitWasFailure(false) , m_isTargetItem(false) , m_visitCount(0) @@ -73,6 +74,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, double ti , m_title(title) , m_lastVisitedTime(time) , m_lastVisitWasHTTPNonGet(false) + , m_pageScaleFactor(1) , m_lastVisitWasFailure(false) , m_isTargetItem(false) , m_visitCount(0) @@ -89,6 +91,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, const Str , m_displayTitle(alternateTitle) , m_lastVisitedTime(time) , m_lastVisitWasHTTPNonGet(false) + , m_pageScaleFactor(1) , m_lastVisitWasFailure(false) , m_isTargetItem(false) , m_visitCount(0) @@ -106,6 +109,7 @@ HistoryItem::HistoryItem(const KURL& url, const String& target, const String& pa , m_title(title) , m_lastVisitedTime(0) , m_lastVisitWasHTTPNonGet(false) + , m_pageScaleFactor(1) , m_lastVisitWasFailure(false) , m_isTargetItem(false) , m_visitCount(0) @@ -137,6 +141,7 @@ inline HistoryItem::HistoryItem(const HistoryItem& item) , m_lastVisitedTime(item.m_lastVisitedTime) , m_lastVisitWasHTTPNonGet(item.m_lastVisitWasHTTPNonGet) , m_scrollPoint(item.m_scrollPoint) + , m_pageScaleFactor(item.m_pageScaleFactor) , m_lastVisitWasFailure(item.m_lastVisitWasFailure) , m_isTargetItem(item.m_isTargetItem) , m_visitCount(item.m_visitCount) @@ -379,6 +384,16 @@ void HistoryItem::clearScrollPoint() m_scrollPoint.setY(0); } +float HistoryItem::pageScaleFactor() const +{ + return m_pageScaleFactor; +} + +void HistoryItem::setPageScaleFactor(float scaleFactor) +{ + m_pageScaleFactor = scaleFactor; +} + void HistoryItem::setDocumentState(const Vector<String>& state) { m_documentState = state; @@ -667,6 +682,8 @@ void HistoryItem::encodeBackForwardTreeNode(Encoder& encoder) const encoder.encodeInt32(m_scrollPoint.x()); encoder.encodeInt32(m_scrollPoint.y()); + + encoder.encodeFloat(m_pageScaleFactor); encoder.encodeBool(m_stateObject); if (m_stateObject) { @@ -776,6 +793,9 @@ resume: if (!decoder.decodeInt32(y)) return 0; node->m_scrollPoint = IntPoint(x, y); + + if (!decoder.decodeFloat(node->m_pageScaleFactor)) + return 0; bool hasStateObject; if (!decoder.decodeBool(hasStateObject)) diff --git a/Source/WebCore/history/HistoryItem.h b/Source/WebCore/history/HistoryItem.h index 19b33ad..a4622c0 100644 --- a/Source/WebCore/history/HistoryItem.h +++ b/Source/WebCore/history/HistoryItem.h @@ -123,6 +123,10 @@ public: const IntPoint& scrollPoint() const; void setScrollPoint(const IntPoint&); void clearScrollPoint(); + + float pageScaleFactor() const; + void setPageScaleFactor(float); + const Vector<String>& documentState() const; void setDocumentState(const Vector<String>&); void clearDocumentState(); @@ -245,6 +249,7 @@ private: bool m_lastVisitWasHTTPNonGet; IntPoint m_scrollPoint; + float m_pageScaleFactor; Vector<String> m_documentState; HistoryItemVector m_children; diff --git a/Source/WebCore/history/PageCache.cpp b/Source/WebCore/history/PageCache.cpp index 7375a9c..a5dfb1e 100644 --- a/Source/WebCore/history/PageCache.cpp +++ b/Source/WebCore/history/PageCache.cpp @@ -252,6 +252,8 @@ bool PageCache::canCachePageContainingThisFrame(Frame* frame) return frame->loader()->documentLoader() && frame->loader()->documentLoader()->mainDocumentError().isNull() + // Do not cache error pages (these can be recognized as pages with substitute data or unreachable URLs). + && !(frame->loader()->documentLoader()->substituteData().isValid() && !frame->loader()->documentLoader()->substituteData().failingURL().isEmpty()) // FIXME: If we ever change this so that frames with plug-ins will be cached, // we need to make sure that we don't cache frames that have outstanding NPObjects // (objects created by the plug-in). Since there is no way to pause/resume a Netscape plug-in, @@ -453,7 +455,7 @@ void PageCache::releaseAutoreleasedPagesNow() m_autoreleaseTimer.stop(); // Postpone dead pruning until all our resources have gone dead. - cache()->setPruneEnabled(false); + memoryCache()->setPruneEnabled(false); CachedPageSet tmp; tmp.swap(m_autoreleaseSet); @@ -463,8 +465,8 @@ void PageCache::releaseAutoreleasedPagesNow() (*it)->destroy(); // Now do the prune. - cache()->setPruneEnabled(true); - cache()->prune(); + memoryCache()->setPruneEnabled(true); + memoryCache()->prune(); } void PageCache::autorelease(PassRefPtr<CachedPage> page) diff --git a/Source/WebCore/html/DOMURL.cpp b/Source/WebCore/html/DOMURL.cpp new file mode 100644 index 0000000..87f9f45 --- /dev/null +++ b/Source/WebCore/html/DOMURL.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#if ENABLE(BLOB) + +#include "DOMURL.h" + +#include "KURL.h" +#include "ScriptExecutionContext.h" + +namespace WebCore { + +DOMURL::DOMURL(ScriptExecutionContext* scriptExecutionContext) + : m_scriptExecutionContext(scriptExecutionContext) +{ +} + +String DOMURL::createObjectURL(Blob* blob) +{ + if (!m_scriptExecutionContext) + return String(); + return m_scriptExecutionContext->createPublicBlobURL(blob).string(); +} + +void DOMURL::revokeObjectURL(const String& urlString) +{ + if (!m_scriptExecutionContext) + return; + m_scriptExecutionContext->revokePublicBlobURL(KURL(KURL(), urlString)); +} + +} // namespace WebCore + +#endif // ENABLE(BLOB) diff --git a/Source/WebCore/html/DOMURL.h b/Source/WebCore/html/DOMURL.h new file mode 100644 index 0000000..57f3000 --- /dev/null +++ b/Source/WebCore/html/DOMURL.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef DOMURL_h +#define DOMURL_h + +#if ENABLE(BLOB) + +#include "PlatformString.h" +#include <wtf/PassRefPtr.h> +#include <wtf/RefCounted.h> + +namespace WebCore { + +class Blob; +class ScriptExecutionContext; + +class DOMURL : public RefCounted<DOMURL> { +public: + static PassRefPtr<DOMURL> create(ScriptExecutionContext* scriptExecutionContext) { return adoptRef(new DOMURL(scriptExecutionContext)); } + + String createObjectURL(Blob*); + void revokeObjectURL(const String&); + +private: + explicit DOMURL(ScriptExecutionContext*); + + ScriptExecutionContext* m_scriptExecutionContext; +}; + +} // namespace WebCore + +#endif // ENABLE(BLOB) + +#endif // DOMURL_h diff --git a/Source/WebCore/html/DOMURL.idl b/Source/WebCore/html/DOMURL.idl new file mode 100644 index 0000000..75945b7 --- /dev/null +++ b/Source/WebCore/html/DOMURL.idl @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +module html { + interface [ + Conditional=BLOB, + OmitConstructor, + GenerateNativeConverter, + GenerateToJS, + NoStaticTables + ] DOMURL { + [ConvertNullStringTo=Undefined] DOMString createObjectURL(in Blob blob); + void revokeObjectURL(in DOMString url); + }; +} diff --git a/Source/WebCore/html/FormAssociatedElement.cpp b/Source/WebCore/html/FormAssociatedElement.cpp index a97c0e2..574dfe5 100644 --- a/Source/WebCore/html/FormAssociatedElement.cpp +++ b/Source/WebCore/html/FormAssociatedElement.cpp @@ -52,6 +52,13 @@ ValidityState* FormAssociatedElement::validity() return m_validityState.get(); } +void FormAssociatedElement::willMoveToNewOwnerDocument() +{ + HTMLElement* element = toHTMLElement(this); + if (element->fastHasAttribute(formAttr)) + element->document()->unregisterFormElementWithFormAttribute(this); +} + void FormAssociatedElement::insertedIntoTree() { HTMLElement* element = toHTMLElement(this); @@ -140,6 +147,7 @@ void FormAssociatedElement::formAttributeChanged() m_form = element->findFormAncestor(); if (m_form) form()->registerFormElement(this); + element->document()->unregisterFormElementWithFormAttribute(this); } else resetFormOwner(0); } diff --git a/Source/WebCore/html/FormAssociatedElement.h b/Source/WebCore/html/FormAssociatedElement.h index 3c8c6e1..873bdf4 100644 --- a/Source/WebCore/html/FormAssociatedElement.h +++ b/Source/WebCore/html/FormAssociatedElement.h @@ -63,6 +63,8 @@ protected: void insertedIntoTree(); void removedFromTree(); + void willMoveToNewOwnerDocument(); + void setForm(HTMLFormElement* form) { m_form = form; } void removeFromForm(); void formAttributeChanged(); diff --git a/Source/WebCore/html/HTMLElement.cpp b/Source/WebCore/html/HTMLElement.cpp index a504f75..af3115c 100644 --- a/Source/WebCore/html/HTMLElement.cpp +++ b/Source/WebCore/html/HTMLElement.cpp @@ -376,6 +376,39 @@ void HTMLElement::setOuterHTML(const String& html, ExceptionCode& ec) } } +PassRefPtr<DocumentFragment> HTMLElement::textToFragment(const String& text, ExceptionCode& ec) +{ + RefPtr<DocumentFragment> fragment = DocumentFragment::create(document()); + unsigned int i, length = text.length(); + UChar c = 0; + for (unsigned int start = 0; start < length; ) { + + // Find next line break. + for (i = start; i < length; i++) { + c = text[i]; + if (c == '\r' || c == '\n') + break; + } + + fragment->appendChild(Text::create(document(), text.substring(start, i - start)), ec); + if (ec) + return 0; + + if (c == '\r' || c == '\n') { + fragment->appendChild(HTMLBRElement::create(document()), ec); + if (ec) + return 0; + // Make sure \r\n doesn't result in two line breaks. + if (c == '\r' && i + 1 < length && text[i + 1] == '\n') + i++; + } + + start = i + 1; // Character after line break. + } + + return fragment; +} + void HTMLElement::setInnerText(const String& text, ExceptionCode& ec) { if (ieForbidsInsertHTML()) { @@ -419,30 +452,25 @@ void HTMLElement::setInnerText(const String& text, ExceptionCode& ec) // Add text nodes and <br> elements. ec = 0; - RefPtr<DocumentFragment> fragment = DocumentFragment::create(document()); - int lineStart = 0; - UChar prev = 0; - int length = text.length(); - for (int i = 0; i < length; ++i) { - UChar c = text[i]; - if (c == '\n' || c == '\r') { - if (i > lineStart) { - fragment->appendChild(Text::create(document(), text.substring(lineStart, i - lineStart)), ec); - if (ec) - return; - } - if (!(c == '\n' && i != 0 && prev == '\r')) { - fragment->appendChild(HTMLBRElement::create(document()), ec); - if (ec) - return; - } - lineStart = i + 1; - } - prev = c; - } - if (length > lineStart) - fragment->appendChild(Text::create(document(), text.substring(lineStart, length - lineStart)), ec); - replaceChildrenWithFragment(this, fragment.release(), ec); + RefPtr<DocumentFragment> fragment = textToFragment(text, ec); + if (!ec) + replaceChildrenWithFragment(this, fragment.release(), ec); +} + +static void mergeWithNextTextNode(PassRefPtr<Node> node, ExceptionCode& ec) +{ + ASSERT(node && node->isTextNode()); + Node* next = node->nextSibling(); + if (!next || !next->isTextNode()) + return; + + RefPtr<Text> textNode = static_cast<Text*>(node.get()); + RefPtr<Text> textNext = static_cast<Text*>(next); + textNode->appendData(textNext->data(), ec); + if (ec) + return; + if (textNext->parentNode()) // Might have been removed by mutation event. + textNext->remove(ec); } void HTMLElement::setOuterText(const String &text, ExceptionCode& ec) @@ -465,39 +493,29 @@ void HTMLElement::setOuterText(const String &text, ExceptionCode& ec) return; } - // FIXME: This creates a new text node even when the text is empty. - // FIXME: This creates a single text node even when the text has CR and LF - // characters in it. Instead it should create <br> elements. - RefPtr<Text> t = Text::create(document(), text); + RefPtr<Node> prev = previousSibling(); + RefPtr<Node> next = nextSibling(); + RefPtr<Node> newChild; ec = 0; - parent->replaceChild(t, this, ec); + + // Convert text to fragment with <br> tags instead of linebreaks if needed. + if (text.contains('\r') || text.contains('\n')) + newChild = textToFragment(text, ec); + else + newChild = Text::create(document(), text); + + if (!this || !parentNode()) + ec = HIERARCHY_REQUEST_ERR; if (ec) return; + parent->replaceChild(newChild.release(), this, ec); - // Is previous node a text node? If so, merge into it. - Node* prev = t->previousSibling(); - if (prev && prev->isTextNode()) { - Text* textPrev = static_cast<Text*>(prev); - textPrev->appendData(t->data(), ec); - if (ec) - return; - t->remove(ec); - if (ec) - return; - t = textPrev; - } + RefPtr<Node> node = next ? next->previousSibling() : 0; + if (!ec && node && node->isTextNode()) + mergeWithNextTextNode(node.release(), ec); - // Is next node a text node? If so, merge it in. - Node* next = t->nextSibling(); - if (next && next->isTextNode()) { - Text* textNext = static_cast<Text*>(next); - t->appendData(textNext->data(), ec); - if (ec) - return; - textNext->remove(ec); - if (ec) - return; - } + if (!ec && prev && prev->isTextNode()) + mergeWithNextTextNode(prev.release(), ec); } Node* HTMLElement::insertAdjacent(const String& where, Node* newChild, ExceptionCode& ec) diff --git a/Source/WebCore/html/HTMLElement.h b/Source/WebCore/html/HTMLElement.h index 63ce110..a64db2c 100644 --- a/Source/WebCore/html/HTMLElement.h +++ b/Source/WebCore/html/HTMLElement.h @@ -100,6 +100,7 @@ private: virtual HTMLFormElement* virtualForm() const; Node* insertAdjacent(const String& where, Node* newChild, ExceptionCode&); + PassRefPtr<DocumentFragment> textToFragment(const String&, ExceptionCode&); }; inline HTMLElement::HTMLElement(const QualifiedName& tagName, Document* document) diff --git a/Source/WebCore/html/HTMLFormControlElement.cpp b/Source/WebCore/html/HTMLFormControlElement.cpp index 8556c1e..b3ad7c8 100644 --- a/Source/WebCore/html/HTMLFormControlElement.cpp +++ b/Source/WebCore/html/HTMLFormControlElement.cpp @@ -80,7 +80,7 @@ HTMLFormControlElement::~HTMLFormControlElement() void HTMLFormControlElement::detach() { - hideVisibleValidationMessage(); + m_validationMessage = 0; HTMLElement::detach(); } @@ -144,6 +144,12 @@ void HTMLFormControlElement::attach() focus(); } +void HTMLFormControlElement::willMoveToNewOwnerDocument() +{ + FormAssociatedElement::willMoveToNewOwnerDocument(); + HTMLElement::willMoveToNewOwnerDocument(); +} + void HTMLFormControlElement::insertedIntoTree(bool deep) { FormAssociatedElement::insertedIntoTree(); @@ -304,18 +310,24 @@ void HTMLFormControlElement::updateVisibleValidationMessage() message.append(title); } } + if (message.isEmpty()) { + hideVisibleValidationMessage(); + return; + } if (!m_validationMessage) { m_validationMessage = ValidationMessage::create(this); m_validationMessage->setMessage(message); - } else if (message.isEmpty()) - hideVisibleValidationMessage(); - else if (m_validationMessage->message() != message) + } else { + // Call setMessage() even if m_validationMesage->message() == message + // because the existing message might be to be hidden. m_validationMessage->setMessage(message); + } } void HTMLFormControlElement::hideVisibleValidationMessage() { - m_validationMessage = 0; + if (m_validationMessage) + m_validationMessage->requestToHideMessage(); } String HTMLFormControlElement::visibleValidationMessage() const diff --git a/Source/WebCore/html/HTMLFormControlElement.h b/Source/WebCore/html/HTMLFormControlElement.h index e5d741b..8403b84 100644 --- a/Source/WebCore/html/HTMLFormControlElement.h +++ b/Source/WebCore/html/HTMLFormControlElement.h @@ -109,6 +109,7 @@ protected: virtual void attach(); virtual void insertedIntoTree(bool deep); virtual void removedFromTree(bool deep); + virtual void willMoveToNewOwnerDocument(); virtual bool isKeyboardFocusable(KeyboardEvent*) const; virtual bool isMouseFocusable() const; diff --git a/Source/WebCore/html/HTMLInputElement.cpp b/Source/WebCore/html/HTMLInputElement.cpp index 49888f1..c7a1a86 100644 --- a/Source/WebCore/html/HTMLInputElement.cpp +++ b/Source/WebCore/html/HTMLInputElement.cpp @@ -455,7 +455,9 @@ void HTMLInputElement::updateType() bool neededActivationCallback = needsActivationCallback(); bool didRespectHeightAndWidth = m_inputType->shouldRespectHeightAndWidthAttributes(); + m_inputType->destroyShadowSubtree(); m_inputType = newType.release(); + m_inputType->createShadowSubtree(); setNeedsWillValidateCheck(); @@ -637,9 +639,14 @@ void HTMLInputElement::parseMappedAttribute(Attribute* attr) #endif #if ENABLE(INPUT_SPEECH) else if (attr->name() == webkitspeechAttr) { - if (renderer()) - toRenderTextControlSingleLine(renderer())->speechAttributeChanged(); - setNeedsStyleRecalc(); + if (renderer()) { + // This renderer and its children have quite different layouts and styles depending on + // whether the speech button is visible or not. So we reset the whole thing and recreate + // to get the right styles and layout. + detach(); + attach(); + } + setNeedsStyleRecalc(); } else if (attr->name() == onwebkitspeechchangeAttr) setAttributeEventListener(eventNames().webkitspeechchangeEvent, createAttributeEventListener(this, attr)); #endif diff --git a/Source/WebCore/html/HTMLObjectElement.cpp b/Source/WebCore/html/HTMLObjectElement.cpp index 2c6e6de..a1dde1a 100644 --- a/Source/WebCore/html/HTMLObjectElement.cpp +++ b/Source/WebCore/html/HTMLObjectElement.cpp @@ -479,6 +479,12 @@ void HTMLObjectElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) con addSubresourceURL(urls, document()->completeURL(useMap)); } +void HTMLObjectElement::willMoveToNewOwnerDocument() +{ + FormAssociatedElement::willMoveToNewOwnerDocument(); + HTMLPlugInImageElement::willMoveToNewOwnerDocument(); +} + void HTMLObjectElement::insertedIntoTree(bool deep) { FormAssociatedElement::insertedIntoTree(); diff --git a/Source/WebCore/html/HTMLObjectElement.h b/Source/WebCore/html/HTMLObjectElement.h index d5797ff..ff773f1 100644 --- a/Source/WebCore/html/HTMLObjectElement.h +++ b/Source/WebCore/html/HTMLObjectElement.h @@ -73,6 +73,7 @@ private: virtual bool rendererIsNeeded(RenderStyle*); virtual void insertedIntoDocument(); virtual void removedFromDocument(); + virtual void willMoveToNewOwnerDocument(); virtual void childrenChanged(bool changedByParser = false, Node* beforeChange = 0, Node* afterChange = 0, int childCountDelta = 0); diff --git a/Source/WebCore/html/HTMLPlugInImageElement.h b/Source/WebCore/html/HTMLPlugInImageElement.h index 377fd99..f394d40 100644 --- a/Source/WebCore/html/HTMLPlugInImageElement.h +++ b/Source/WebCore/html/HTMLPlugInImageElement.h @@ -58,12 +58,13 @@ protected: bool allowedToLoadFrameURL(const String& url); bool wouldLoadAsNetscapePlugin(const String& url, const String& serviceType); + virtual void willMoveToNewOwnerDocument(); + private: virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); virtual void recalcStyle(StyleChange); virtual void finishParsingChildren(); - virtual void willMoveToNewOwnerDocument(); void updateWidgetIfNecessary(); virtual bool useFallbackContent() const { return false; } diff --git a/Source/WebCore/html/HTMLStyleElement.cpp b/Source/WebCore/html/HTMLStyleElement.cpp index 7c2512b..0f256e1 100644 --- a/Source/WebCore/html/HTMLStyleElement.cpp +++ b/Source/WebCore/html/HTMLStyleElement.cpp @@ -27,8 +27,9 @@ #include "Attribute.h" #include "Document.h" #include "HTMLNames.h" -#include "ScriptableDocumentParser.h" #include "ScriptEventListener.h" +#include "ScriptableDocumentParser.h" + namespace WebCore { @@ -104,4 +105,19 @@ void HTMLStyleElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) cons styleSheet->addSubresourceStyleURLs(urls); } +bool HTMLStyleElement::disabled() const +{ + StyleSheet* styleSheet = sheet(); + if (!styleSheet) + return false; + + return styleSheet->disabled(); +} + +void HTMLStyleElement::setDisabled(bool setDisabled) +{ + if (StyleSheet* styleSheet = sheet()) + styleSheet->setDisabled(setDisabled); +} + } diff --git a/Source/WebCore/html/HTMLStyleElement.h b/Source/WebCore/html/HTMLStyleElement.h index 3d6958f..c9b5649 100644 --- a/Source/WebCore/html/HTMLStyleElement.h +++ b/Source/WebCore/html/HTMLStyleElement.h @@ -39,6 +39,9 @@ public: using StyleElement::sheet; + bool disabled() const; + void setDisabled(bool); + private: HTMLStyleElement(const QualifiedName&, Document*, bool createdByParser); diff --git a/Source/WebCore/html/HTMLStyleElement.idl b/Source/WebCore/html/HTMLStyleElement.idl index d78e9d3..459801e 100644 --- a/Source/WebCore/html/HTMLStyleElement.idl +++ b/Source/WebCore/html/HTMLStyleElement.idl @@ -21,7 +21,7 @@ module html { interface [CustomMarkFunction] HTMLStyleElement : HTMLElement { - attribute [Reflect] boolean disabled; + attribute boolean disabled; attribute [Reflect] DOMString media; attribute [Reflect] DOMString type; diff --git a/Source/WebCore/html/InputType.cpp b/Source/WebCore/html/InputType.cpp index be86399..729f204 100644 --- a/Source/WebCore/html/InputType.cpp +++ b/Source/WebCore/html/InputType.cpp @@ -349,6 +349,15 @@ RenderObject* InputType::createRenderer(RenderArena*, RenderStyle* style) const return RenderObject::createObject(element(), style); } +void InputType::createShadowSubtree() +{ +} + +void InputType::destroyShadowSubtree() +{ + element()->setShadowRoot(0); +} + double InputType::parseToDouble(const String&, double defaultValue) const { return defaultValue; diff --git a/Source/WebCore/html/InputType.h b/Source/WebCore/html/InputType.h index 4d25a97..0d1f6b8 100644 --- a/Source/WebCore/html/InputType.h +++ b/Source/WebCore/html/InputType.h @@ -171,6 +171,12 @@ public: virtual void accessKeyAction(bool sendToAnyElement); virtual bool canBeSuccessfulSubmitButton(); + + // Shadow tree handling + + virtual void createShadowSubtree(); + void destroyShadowSubtree(); + // Miscellaneous functions virtual bool rendererIsNeeded(); diff --git a/Source/WebCore/html/RangeInputType.cpp b/Source/WebCore/html/RangeInputType.cpp index 7a0d3e4..7d0a38c 100644 --- a/Source/WebCore/html/RangeInputType.cpp +++ b/Source/WebCore/html/RangeInputType.cpp @@ -37,6 +37,7 @@ #include "HTMLParserIdioms.h" #include "KeyboardEvent.h" #include "RenderSlider.h" +#include "SliderThumbElement.h" #include "StepRange.h" #include <limits> #include <wtf/MathExtras.h> @@ -192,6 +193,11 @@ void RangeInputType::forwardEvent(Event* event) toRenderSlider(element()->renderer())->forwardEvent(event); } +void RangeInputType::createShadowSubtree() +{ + element()->setShadowRoot(SliderThumbElement::create(element()->document())); +} + RenderObject* RangeInputType::createRenderer(RenderArena* arena, RenderStyle*) const { return new (arena) RenderSlider(element()); diff --git a/Source/WebCore/html/RangeInputType.h b/Source/WebCore/html/RangeInputType.h index 7f341a7..57eb299 100644 --- a/Source/WebCore/html/RangeInputType.h +++ b/Source/WebCore/html/RangeInputType.h @@ -58,6 +58,7 @@ private: virtual void handleKeydownEvent(KeyboardEvent*); virtual void forwardEvent(Event*); virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const; + virtual void createShadowSubtree(); virtual double parseToDouble(const String&, double) const; virtual String serialize(double) const; virtual void accessKeyAction(bool sendToAnyElement); diff --git a/Source/WebCore/html/ValidationMessage.cpp b/Source/WebCore/html/ValidationMessage.cpp index 4418235..2c441c7 100644 --- a/Source/WebCore/html/ValidationMessage.cpp +++ b/Source/WebCore/html/ValidationMessage.cpp @@ -31,10 +31,18 @@ #include "config.h" #include "ValidationMessage.h" +#include "CSSStyleSelector.h" +#include "FormAssociatedElement.h" +#include "HTMLBRElement.h" +#include "HTMLNames.h" +#include "RenderObject.h" +#include "Text.h" #include <wtf/PassOwnPtr.h> namespace WebCore { +using namespace HTMLNames; + ALWAYS_INLINE ValidationMessage::ValidationMessage(FormAssociatedElement* element) : m_element(element) { @@ -42,7 +50,7 @@ ALWAYS_INLINE ValidationMessage::ValidationMessage(FormAssociatedElement* elemen ValidationMessage::~ValidationMessage() { - hideMessage(); + deleteBubbleTree(); } PassOwnPtr<ValidationMessage> ValidationMessage::create(FormAssociatedElement* element) @@ -52,18 +60,105 @@ PassOwnPtr<ValidationMessage> ValidationMessage::create(FormAssociatedElement* e void ValidationMessage::setMessage(const String& message) { - // FIXME: Construct validation message UI if m_message is empty. - + // Don't modify the DOM tree in this context. + // If so, an assertion in Node::isFocusable() fails. + ASSERT(!message.isEmpty()); m_message = message; + if (!m_bubble) + m_timer.set(new Timer<ValidationMessage>(this, &ValidationMessage::buildBubbleTree)); + else + m_timer.set(new Timer<ValidationMessage>(this, &ValidationMessage::setMessageDOMAndStartTimer)); + m_timer->startOneShot(0); +} + +void ValidationMessage::setMessageDOMAndStartTimer(Timer<ValidationMessage>*) +{ + ASSERT(m_bubbleMessage); + m_bubbleMessage->removeAllChildren(); + Vector<String> lines; + m_message.split('\n', lines); + Document* doc = m_bubbleMessage->document(); + ExceptionCode ec = 0; + for (unsigned i = 0; i < lines.size(); ++i) { + if (i) { + m_bubbleMessage->appendChild(HTMLBRElement::create(doc), ec); + m_bubbleMessage->appendChild(Text::create(doc, lines[i]), ec); + } else { + RefPtr<HTMLElement> bold = HTMLElement::create(bTag, doc); + bold->setInnerText(lines[i], ec); + m_bubbleMessage->appendChild(bold.release(), ec); + } + } - m_timer.set(new Timer<ValidationMessage>(this, &ValidationMessage::hideMessage)); - m_timer->startOneShot(6.0); // FIXME: should be <message length> * something. + m_timer.set(new Timer<ValidationMessage>(this, &ValidationMessage::deleteBubbleTree)); + m_timer->startOneShot(max(5.0, m_message.length() / 20.0)); } -void ValidationMessage::hideMessage(Timer<ValidationMessage>*) +class ElementWithPseudoId : public HTMLElement { +public: + static PassRefPtr<HTMLElement> create(Document* doc, const AtomicString& pseudoName) + { + return adoptRef(new ElementWithPseudoId(doc, pseudoName)); + } + +protected: + ElementWithPseudoId(Document* doc, const AtomicString& pseudoName) + : HTMLElement(divTag, doc) + , m_pseudoName(pseudoName) { }; + virtual AtomicString shadowPseudoId() const { return m_pseudoName; } + +private: + AtomicString m_pseudoName; +}; + +void ValidationMessage::buildBubbleTree(Timer<ValidationMessage>*) { - // FIXME: Implement. + HTMLElement* host = toHTMLElement(m_element); + Document* doc = host->document(); + m_bubble = ElementWithPseudoId::create(doc, "-webkit-validation-bubble"); + ExceptionCode ec = 0; + // FIXME: We need a way to host multiple shadow roots in a single node, or + // to inherit an existing shadow tree. + if (host->shadowRoot()) + host->shadowRoot()->appendChild(m_bubble.get(), ec); + else { + host->setShadowRoot(m_bubble); + // FIXME: The following attach() should be unnecessary. + m_bubble->attach(); + } + + m_bubble->appendChild(ElementWithPseudoId::create(doc, "-webkit-validation-bubble-top-outer-arrow"), ec); + m_bubble->appendChild(ElementWithPseudoId::create(doc, "-webkit-validation-bubble-top-inner-arrow"), ec); + m_bubbleMessage = ElementWithPseudoId::create(doc, "-webkit-validation-bubble-message"); + m_bubble->appendChild(m_bubbleMessage, ec); + setMessageDOMAndStartTimer(); + + // FIXME: Use transition to show the bubble. + + // We don't need to adjust the bubble location. The default position is enough. +} + +void ValidationMessage::requestToHideMessage() +{ + // We must not modify the DOM tree in this context by the same reason as setMessage(). + m_timer.set(new Timer<ValidationMessage>(this, &ValidationMessage::deleteBubbleTree)); + m_timer->startOneShot(0); +} + +void ValidationMessage::deleteBubbleTree(Timer<ValidationMessage>*) +{ + if (m_bubble) { + m_bubbleMessage = 0; + HTMLElement* host = toHTMLElement(m_element); + if (m_bubble->isShadowRoot()) + host->setShadowRoot(0); + else { + ExceptionCode ec; + host->shadowRoot()->removeChild(m_bubble.get(), ec); + } + m_bubble = 0; + } m_message = String(); } diff --git a/Source/WebCore/html/ValidationMessage.h b/Source/WebCore/html/ValidationMessage.h index d78e3f3..5fa1f96 100644 --- a/Source/WebCore/html/ValidationMessage.h +++ b/Source/WebCore/html/ValidationMessage.h @@ -34,11 +34,13 @@ #include "Timer.h" #include <wtf/Noncopyable.h> #include <wtf/OwnPtr.h> +#include <wtf/RefPtr.h> #include <wtf/text/WTFString.h> namespace WebCore { class FormAssociatedElement; +class HTMLElement; class ValidationMessage : public Noncopyable { public: @@ -46,14 +48,19 @@ public: ~ValidationMessage(); String message() const { return m_message; } void setMessage(const String&); + void requestToHideMessage(); private: ValidationMessage(FormAssociatedElement*); - void hideMessage(Timer<ValidationMessage>* = 0); + void setMessageDOMAndStartTimer(Timer<ValidationMessage>* = 0); + void buildBubbleTree(Timer<ValidationMessage>*); + void deleteBubbleTree(Timer<ValidationMessage>* = 0); FormAssociatedElement* m_element; String m_message; OwnPtr<Timer<ValidationMessage> > m_timer; + RefPtr<HTMLElement> m_bubble; + RefPtr<HTMLElement> m_bubbleMessage; }; } // namespace WebCore diff --git a/Source/WebCore/html/canvas/WebGLActiveInfo.h b/Source/WebCore/html/canvas/WebGLActiveInfo.h index 4650ea1..e75e1f5 100644 --- a/Source/WebCore/html/canvas/WebGLActiveInfo.h +++ b/Source/WebCore/html/canvas/WebGLActiveInfo.h @@ -26,6 +26,7 @@ #ifndef WebGLActiveInfo_h #define WebGLActiveInfo_h +#include "GraphicsContext3D.h" #include "PlatformString.h" #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> @@ -34,16 +35,16 @@ namespace WebCore { class WebGLActiveInfo : public RefCounted<WebGLActiveInfo> { public: - static PassRefPtr<WebGLActiveInfo> create(const String& name, unsigned type, int size) + static PassRefPtr<WebGLActiveInfo> create(const String& name, GC3Denum type, GC3Dint size) { return adoptRef(new WebGLActiveInfo(name, type, size)); } String name() const { return m_name; } - unsigned type() const { return m_type; } - int size() const { return m_size; } + GC3Denum type() const { return m_type; } + GC3Dint size() const { return m_size; } private: - WebGLActiveInfo(const String& name, unsigned type, int size) + WebGLActiveInfo(const String& name, GC3Denum type, GC3Dint size) : m_name(name) , m_type(type) , m_size(size) @@ -53,8 +54,8 @@ private: ASSERT(size); } String m_name; - unsigned m_type; - int m_size; + GC3Denum m_type; + GC3Dint m_size; }; } diff --git a/Source/WebCore/html/canvas/WebGLBuffer.cpp b/Source/WebCore/html/canvas/WebGLBuffer.cpp index f8c7b38..4566bfa 100644 --- a/Source/WebCore/html/canvas/WebGLBuffer.cpp +++ b/Source/WebCore/html/canvas/WebGLBuffer.cpp @@ -55,13 +55,16 @@ void WebGLBuffer::deleteObjectImpl(Platform3DObject object) context()->graphicsContext3D()->deleteBuffer(object); } -bool WebGLBuffer::associateBufferDataImpl(ArrayBuffer* array, unsigned byteOffset, unsigned byteLength) +bool WebGLBuffer::associateBufferDataImpl(ArrayBuffer* array, GC3Dintptr byteOffset, GC3Dsizeiptr byteLength) { + if (byteLength < 0 || byteOffset < 0) + return false; + if (array && byteLength) { - CheckedInt<uint32_t> checkedOffset(byteOffset); - CheckedInt<uint32_t> checkedLength(byteLength); - CheckedInt<uint32_t> checkedMax = checkedOffset + checkedLength; - if (!checkedMax.valid() || checkedMax.value() > array->byteLength()) + CheckedInt<int32_t> checkedOffset(byteOffset); + CheckedInt<int32_t> checkedLength(byteLength); + CheckedInt<int32_t> checkedMax = checkedOffset + checkedLength; + if (!checkedMax.valid() || checkedMax.value() > static_cast<int32_t>(array->byteLength())) return false; } @@ -94,11 +97,11 @@ bool WebGLBuffer::associateBufferDataImpl(ArrayBuffer* array, unsigned byteOffse } } -bool WebGLBuffer::associateBufferData(int size) +bool WebGLBuffer::associateBufferData(GC3Dsizeiptr size) { if (size < 0) return false; - return associateBufferDataImpl(0, 0, static_cast<unsigned>(size)); + return associateBufferDataImpl(0, 0, size); } bool WebGLBuffer::associateBufferData(ArrayBuffer* array) @@ -115,18 +118,18 @@ bool WebGLBuffer::associateBufferData(ArrayBufferView* array) return associateBufferDataImpl(array->buffer().get(), array->byteOffset(), array->byteLength()); } -bool WebGLBuffer::associateBufferSubDataImpl(long offset, ArrayBuffer* array, unsigned arrayByteOffset, unsigned byteLength) +bool WebGLBuffer::associateBufferSubDataImpl(GC3Dintptr offset, ArrayBuffer* array, GC3Dintptr arrayByteOffset, GC3Dsizeiptr byteLength) { - if (!array || offset < 0) + if (!array || offset < 0 || arrayByteOffset < 0 || byteLength < 0) return false; if (byteLength) { - CheckedInt<uint32_t> checkedBufferOffset(offset); - CheckedInt<uint32_t> checkedArrayOffset(arrayByteOffset); - CheckedInt<uint32_t> checkedLength(byteLength); - CheckedInt<uint32_t> checkedArrayMax = checkedArrayOffset + checkedLength; - CheckedInt<uint32_t> checkedBufferMax = checkedBufferOffset + checkedLength; - if (!checkedArrayMax.valid() || checkedArrayMax.value() > array->byteLength() || !checkedBufferMax.valid() || checkedBufferMax.value() > m_byteLength) + CheckedInt<int32_t> checkedBufferOffset(offset); + CheckedInt<int32_t> checkedArrayOffset(arrayByteOffset); + CheckedInt<int32_t> checkedLength(byteLength); + CheckedInt<int32_t> checkedArrayMax = checkedArrayOffset + checkedLength; + CheckedInt<int32_t> checkedBufferMax = checkedBufferOffset + checkedLength; + if (!checkedArrayMax.valid() || checkedArrayMax.value() > static_cast<int32_t>(array->byteLength()) || !checkedBufferMax.valid() || checkedBufferMax.value() > m_byteLength) return false; } @@ -148,26 +151,26 @@ bool WebGLBuffer::associateBufferSubDataImpl(long offset, ArrayBuffer* array, un } } -bool WebGLBuffer::associateBufferSubData(long offset, ArrayBuffer* array) +bool WebGLBuffer::associateBufferSubData(GC3Dintptr offset, ArrayBuffer* array) { if (!array) return false; return associateBufferSubDataImpl(offset, array, 0, array->byteLength()); } -bool WebGLBuffer::associateBufferSubData(long offset, ArrayBufferView* array) +bool WebGLBuffer::associateBufferSubData(GC3Dintptr offset, ArrayBufferView* array) { if (!array) return false; return associateBufferSubDataImpl(offset, array->buffer().get(), array->byteOffset(), array->byteLength()); } -unsigned WebGLBuffer::byteLength() const +GC3Dsizeiptr WebGLBuffer::byteLength() const { return m_byteLength; } -long WebGLBuffer::getCachedMaxIndex(unsigned long type) +int WebGLBuffer::getCachedMaxIndex(GC3Denum type) { for (size_t i = 0; i < WTF_ARRAY_LENGTH(m_maxIndexCache); ++i) if (m_maxIndexCache[i].type == type) @@ -175,7 +178,7 @@ long WebGLBuffer::getCachedMaxIndex(unsigned long type) return -1; } -void WebGLBuffer::setCachedMaxIndex(unsigned long type, long value) +void WebGLBuffer::setCachedMaxIndex(GC3Denum type, int value) { size_t numEntries = WTF_ARRAY_LENGTH(m_maxIndexCache); for (size_t i = 0; i < numEntries; ++i) @@ -188,7 +191,7 @@ void WebGLBuffer::setCachedMaxIndex(unsigned long type, long value) m_nextAvailableCacheEntry = (m_nextAvailableCacheEntry + 1) % numEntries; } -void WebGLBuffer::setTarget(unsigned long target) +void WebGLBuffer::setTarget(GC3Denum target) { // In WebGL, a buffer is bound to one target in its lifetime if (m_target) diff --git a/Source/WebCore/html/canvas/WebGLBuffer.h b/Source/WebCore/html/canvas/WebGLBuffer.h index af819a3..ec79a2d 100644 --- a/Source/WebCore/html/canvas/WebGLBuffer.h +++ b/Source/WebCore/html/canvas/WebGLBuffer.h @@ -41,23 +41,23 @@ public: static PassRefPtr<WebGLBuffer> create(WebGLRenderingContext*); - bool associateBufferData(int size); + bool associateBufferData(GC3Dsizeiptr size); bool associateBufferData(ArrayBuffer* array); bool associateBufferData(ArrayBufferView* array); - bool associateBufferSubData(long offset, ArrayBuffer* array); - bool associateBufferSubData(long offset, ArrayBufferView* array); + bool associateBufferSubData(GC3Dintptr offset, ArrayBuffer* array); + bool associateBufferSubData(GC3Dintptr offset, ArrayBufferView* array); - unsigned byteLength() const; + GC3Dsizeiptr byteLength() const; const ArrayBuffer* elementArrayBuffer() const { return m_elementArrayBuffer.get(); } // Gets the cached max index for the given type. Returns -1 if // none has been set. - long getCachedMaxIndex(unsigned long type); + int getCachedMaxIndex(GC3Denum type); // Sets the cached max index for the given type. - void setCachedMaxIndex(unsigned long type, long value); + void setCachedMaxIndex(GC3Denum type, int value); - unsigned long getTarget() const { return m_target; } - void setTarget(unsigned long); + GC3Denum getTarget() const { return m_target; } + void setTarget(GC3Denum); bool hasEverBeenBound() const { return object() && m_target; } @@ -69,10 +69,10 @@ protected: private: virtual bool isBuffer() const { return true; } - unsigned long m_target; + GC3Denum m_target; RefPtr<ArrayBuffer> m_elementArrayBuffer; - unsigned m_byteLength; + GC3Dsizeiptr m_byteLength; // Optimization for index validation. For each type of index // (i.e., UNSIGNED_SHORT), cache the maximum index in the @@ -82,22 +82,22 @@ private: // draw call as long as all bound array buffers are at least // that size. struct MaxIndexCacheEntry { - unsigned long type; - long maxIndex; + GC3Denum type; + int maxIndex; }; // OpenGL ES 2.0 only has two valid index types (UNSIGNED_BYTE // and UNSIGNED_SHORT), but might as well leave open the // possibility of adding others. MaxIndexCacheEntry m_maxIndexCache[4]; - unsigned m_nextAvailableCacheEntry; + unsigned int m_nextAvailableCacheEntry; // Clears all of the cached max indices. void clearCachedMaxIndices(); // Helper function called by the three associateBufferData(). - bool associateBufferDataImpl(ArrayBuffer* array, unsigned byteOffset, unsigned byteLength); + bool associateBufferDataImpl(ArrayBuffer* array, GC3Dintptr byteOffset, GC3Dsizeiptr byteLength); // Helper function called by the two associateBufferSubData(). - bool associateBufferSubDataImpl(long offset, ArrayBuffer* array, unsigned arrayByteOffset, unsigned byteLength); + bool associateBufferSubDataImpl(GC3Dintptr offset, ArrayBuffer* array, GC3Dintptr arrayByteOffset, GC3Dsizeiptr byteLength); }; } // namespace WebCore diff --git a/Source/WebCore/html/canvas/WebGLFramebuffer.cpp b/Source/WebCore/html/canvas/WebGLFramebuffer.cpp index a1c3a9a..dbc714b 100644 --- a/Source/WebCore/html/canvas/WebGLFramebuffer.cpp +++ b/Source/WebCore/html/canvas/WebGLFramebuffer.cpp @@ -37,7 +37,7 @@ namespace { // This function is only for depth/stencil/depth_stencil attachment. // Currently we assume these attachments are all renderbuffers. - unsigned long getInternalFormat(WebGLObject* buffer) + GC3Denum getInternalFormat(WebGLObject* buffer) { ASSERT(buffer && buffer->isRenderbuffer()); return (reinterpret_cast<WebGLRenderbuffer*>(buffer))->getInternalFormat(); @@ -82,7 +82,7 @@ WebGLFramebuffer::WebGLFramebuffer(WebGLRenderingContext* ctx) setObject(context()->graphicsContext3D()->createFramebuffer()); } -void WebGLFramebuffer::setAttachment(unsigned long attachment, unsigned long texTarget, WebGLTexture* texture, int level) +void WebGLFramebuffer::setAttachment(GC3Denum attachment, GC3Denum texTarget, WebGLTexture* texture, GC3Dint level) { if (!object()) return; @@ -110,7 +110,7 @@ void WebGLFramebuffer::setAttachment(unsigned long attachment, unsigned long tex } } -void WebGLFramebuffer::setAttachment(unsigned long attachment, WebGLRenderbuffer* renderbuffer) +void WebGLFramebuffer::setAttachment(GC3Denum attachment, WebGLRenderbuffer* renderbuffer) { if (!object()) return; @@ -134,7 +134,7 @@ void WebGLFramebuffer::setAttachment(unsigned long attachment, WebGLRenderbuffer } } -WebGLObject* WebGLFramebuffer::getAttachment(unsigned long attachment) const +WebGLObject* WebGLFramebuffer::getAttachment(GC3Denum attachment) const { if (!object()) return 0; @@ -168,7 +168,7 @@ void WebGLFramebuffer::removeAttachment(WebGLObject* attachment) return; } -int WebGLFramebuffer::getWidth() const +GC3Dsizei WebGLFramebuffer::getWidth() const { if (!object() || !isColorAttached()) return 0; @@ -180,7 +180,7 @@ int WebGLFramebuffer::getWidth() const return 0; } -int WebGLFramebuffer::getHeight() const +GC3Dsizei WebGLFramebuffer::getHeight() const { if (!object() || !isColorAttached()) return 0; @@ -192,7 +192,7 @@ int WebGLFramebuffer::getHeight() const return 0; } -unsigned long WebGLFramebuffer::getColorBufferFormat() const +GC3Denum WebGLFramebuffer::getColorBufferFormat() const { if (!object() || !isColorAttached()) return 0; @@ -260,7 +260,7 @@ bool WebGLFramebuffer::initializeRenderbuffers() { ASSERT(object()); bool initColor = false, initDepth = false, initStencil = false; - unsigned long mask = 0; + GC3Dbitfield mask = 0; if (isUninitialized(m_colorAttachment.get())) { initColor = true; mask |= GraphicsContext3D::COLOR_BUFFER_BIT; @@ -287,12 +287,12 @@ bool WebGLFramebuffer::initializeRenderbuffers() if (g3d->checkFramebufferStatus(GraphicsContext3D::FRAMEBUFFER) != GraphicsContext3D::FRAMEBUFFER_COMPLETE) return false; - float colorClearValue[] = {0, 0, 0, 0}, depthClearValue = 0; - int stencilClearValue = 0; - unsigned char colorMask[] = {0, 0, 0, 0}, depthMask = 0; - unsigned int stencilMask = 0xffffffff; - bool isScissorEnabled = false; - bool isDitherEnabled = false; + GC3Dfloat colorClearValue[] = {0, 0, 0, 0}, depthClearValue = 0; + GC3Dint stencilClearValue = 0; + GC3Dboolean colorMask[] = {0, 0, 0, 0}, depthMask = 0; + GC3Duint stencilMask = 0xffffffff; + GC3Dboolean isScissorEnabled = 0; + GC3Dboolean isDitherEnabled = 0; if (initColor) { g3d->getFloatv(GraphicsContext3D::COLOR_CLEAR_VALUE, colorClearValue); g3d->getBooleanv(GraphicsContext3D::COLOR_WRITEMASK, colorMask); @@ -307,7 +307,7 @@ bool WebGLFramebuffer::initializeRenderbuffers() } if (initStencil) { g3d->getIntegerv(GraphicsContext3D::STENCIL_CLEAR_VALUE, &stencilClearValue); - g3d->getIntegerv(GraphicsContext3D::STENCIL_WRITEMASK, reinterpret_cast<int*>(&stencilMask)); + g3d->getIntegerv(GraphicsContext3D::STENCIL_WRITEMASK, reinterpret_cast<GC3Dint*>(&stencilMask)); g3d->clearStencil(0); g3d->stencilMask(0xffffffff); } diff --git a/Source/WebCore/html/canvas/WebGLFramebuffer.h b/Source/WebCore/html/canvas/WebGLFramebuffer.h index d801904..a1cb86f 100644 --- a/Source/WebCore/html/canvas/WebGLFramebuffer.h +++ b/Source/WebCore/html/canvas/WebGLFramebuffer.h @@ -42,15 +42,15 @@ public: static PassRefPtr<WebGLFramebuffer> create(WebGLRenderingContext*); - void setAttachment(unsigned long attachment, unsigned long texTarget, WebGLTexture*, int level); - void setAttachment(unsigned long attachment, WebGLRenderbuffer*); + void setAttachment(GC3Denum attachment, GC3Denum texTarget, WebGLTexture*, GC3Dint level); + void setAttachment(GC3Denum attachment, WebGLRenderbuffer*); // If an object is attached to the framebuffer, remove it. void removeAttachment(WebGLObject*); - WebGLObject* getAttachment(unsigned long) const; + WebGLObject* getAttachment(GC3Denum) const; - unsigned long getColorBufferFormat() const; - int getWidth() const; - int getHeight() const; + GC3Denum getColorBufferFormat() const; + GC3Dsizei getWidth() const; + GC3Dsizei getHeight() const; // This should always be called before drawArray, drawElements, clear, // readPixels, copyTexImage2D, copyTexSubImage2D if this framebuffer is @@ -90,8 +90,8 @@ private: bool m_hasEverBeenBound; - unsigned long m_texTarget; - int m_texLevel; + GC3Denum m_texTarget; + GC3Dint m_texLevel; }; } // namespace WebCore diff --git a/Source/WebCore/html/canvas/WebGLProgram.cpp b/Source/WebCore/html/canvas/WebGLProgram.cpp index b2c2086..b3fa363 100644 --- a/Source/WebCore/html/canvas/WebGLProgram.cpp +++ b/Source/WebCore/html/canvas/WebGLProgram.cpp @@ -70,7 +70,7 @@ bool WebGLProgram::cacheActiveAttribLocations() if (!m_linkStatus) return false; - int numAttribs = 0; + GC3Dint numAttribs = 0; context3d->getProgramiv(object(), GraphicsContext3D::ACTIVE_ATTRIBUTES, &numAttribs); m_activeAttribLocations.resize(static_cast<size_t>(numAttribs)); for (int i = 0; i < numAttribs; ++i) { @@ -82,21 +82,21 @@ bool WebGLProgram::cacheActiveAttribLocations() return true; } -int WebGLProgram::numActiveAttribLocations() const +unsigned WebGLProgram::numActiveAttribLocations() const { - return static_cast<int>(m_activeAttribLocations.size()); + return m_activeAttribLocations.size(); } -int WebGLProgram::getActiveAttribLocation(int index) const +GC3Dint WebGLProgram::getActiveAttribLocation(GC3Duint index) const { - if (index < 0 || index >= numActiveAttribLocations()) + if (index >= numActiveAttribLocations()) return -1; - return m_activeAttribLocations[static_cast<size_t>(index)]; + return m_activeAttribLocations[index]; } bool WebGLProgram::isUsingVertexAttrib0() const { - for (int ii = 0; ii < numActiveAttribLocations(); ++ii) { + for (unsigned ii = 0; ii < numActiveAttribLocations(); ++ii) { if (!getActiveAttribLocation(ii)) return true; } diff --git a/Source/WebCore/html/canvas/WebGLProgram.h b/Source/WebCore/html/canvas/WebGLProgram.h index 6b89ae5..f2acef8 100644 --- a/Source/WebCore/html/canvas/WebGLProgram.h +++ b/Source/WebCore/html/canvas/WebGLProgram.h @@ -45,15 +45,15 @@ public: // cacheActiveAttribLocation() is only called once after linkProgram() // succeeds. bool cacheActiveAttribLocations(); - int numActiveAttribLocations() const; - int getActiveAttribLocation(int index) const; + unsigned numActiveAttribLocations() const; + GC3Dint getActiveAttribLocation(GC3Duint index) const; bool isUsingVertexAttrib0() const; bool getLinkStatus() const { return m_linkStatus; } void setLinkStatus(bool status) { m_linkStatus = status; } - unsigned long getLinkCount() const { return m_linkCount; } + unsigned getLinkCount() const { return m_linkCount; } // This is to be called everytime after the program is successfully linked. // We don't deal with integer overflow here, assuming in reality a program @@ -72,13 +72,13 @@ protected: private: virtual bool isProgram() const { return true; } - Vector<int> m_activeAttribLocations; + Vector<GC3Dint> m_activeAttribLocations; - bool m_linkStatus; + GC3Dint m_linkStatus; // This is used to track whether a WebGLUniformLocation belongs to this // program or not. - unsigned long m_linkCount; + unsigned m_linkCount; RefPtr<WebGLShader> m_vertexShader; RefPtr<WebGLShader> m_fragmentShader; diff --git a/Source/WebCore/html/canvas/WebGLRenderbuffer.h b/Source/WebCore/html/canvas/WebGLRenderbuffer.h index a432f9d..4b47bf5 100644 --- a/Source/WebCore/html/canvas/WebGLRenderbuffer.h +++ b/Source/WebCore/html/canvas/WebGLRenderbuffer.h @@ -39,20 +39,20 @@ public: static PassRefPtr<WebGLRenderbuffer> create(WebGLRenderingContext*); - void setInternalFormat(unsigned long internalformat) + void setInternalFormat(GC3Denum internalformat) { m_internalFormat = internalformat; m_initialized = false; } - unsigned long getInternalFormat() const { return m_internalFormat; } + GC3Denum getInternalFormat() const { return m_internalFormat; } - void setSize(unsigned long width, unsigned long height) + void setSize(GC3Dsizei width, GC3Dsizei height) { m_width = width; m_height = height; } - unsigned long getWidth() const { return m_width; } - unsigned long getHeight() const { return m_height; } + GC3Dsizei getWidth() const { return m_width; } + GC3Dsizei getHeight() const { return m_height; } void setIsValid(bool isValid) { m_isValid = isValid; } bool isValid() const { return m_isValid; } @@ -72,9 +72,9 @@ protected: private: virtual bool isRenderbuffer() const { return true; } - unsigned long m_internalFormat; + GC3Denum m_internalFormat; bool m_initialized; - unsigned long m_width, m_height; + GC3Dsizei m_width, m_height; bool m_isValid; // This is only false if internalFormat is DEPTH_STENCIL and packed_depth_stencil is not supported. bool m_hasEverBeenBound; diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp index 4ffd400..c445e2b 100644 --- a/Source/WebCore/html/canvas/WebGLRenderingContext.cpp +++ b/Source/WebCore/html/canvas/WebGLRenderingContext.cpp @@ -74,14 +74,14 @@ namespace { return object ? object->object() : 0; } - void clip1D(long start, long range, long sourceRange, long* clippedStart, long* clippedRange) + void clip1D(GC3Dint start, GC3Dsizei range, GC3Dsizei sourceRange, GC3Dint* clippedStart, GC3Dsizei* clippedRange) { ASSERT(clippedStart && clippedRange); if (start < 0) { range += start; start = 0; } - long end = start + range; + GC3Dint end = start + range; if (end > sourceRange) range -= end - sourceRange; *clippedStart = start; @@ -89,9 +89,9 @@ namespace { } // Returns false if no clipping is necessary, i.e., x, y, width, height stay the same. - bool clip2D(long x, long y, long width, long height, - long sourceWidth, long sourceHeight, - long* clippedX, long* clippedY, long* clippedWidth, long*clippedHeight) + bool clip2D(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, + GC3Dsizei sourceWidth, GC3Dsizei sourceHeight, + GC3Dint* clippedX, GC3Dint* clippedY, GC3Dsizei* clippedWidth, GC3Dsizei*clippedHeight) { ASSERT(clippedX && clippedY && clippedWidth && clippedHeight); clip1D(x, width, sourceWidth, clippedX, clippedWidth); @@ -101,11 +101,12 @@ namespace { // Return true if a character belongs to the ASCII subset as defined in // GLSL ES 1.0 spec section 3.1. + // We make exceptions for " ' `. bool validateCharacter(unsigned char c) { // Printing characters are valid except " $ ` @ \ ' DEL. if (c >= 32 && c <= 126 - && c != '"' && c != '$' && c != '`' && c != '@' && c != '\\' && c != '\'') + && c != '$' && c != '@' && c != '\\') return true; // Horizontal tab, line feed, vertical tab, form feed, carriage return // are also valid. @@ -208,12 +209,12 @@ void WebGLRenderingContext::initializeNewContext() m_stencilFuncMaskBack = 0xFFFFFFFF; m_vertexAttribState.clear(); - int numCombinedTextureImageUnits = 0; + GC3Dint numCombinedTextureImageUnits = 0; m_context->getIntegerv(GraphicsContext3D::MAX_COMBINED_TEXTURE_IMAGE_UNITS, &numCombinedTextureImageUnits); m_textureUnits.clear(); m_textureUnits.resize(numCombinedTextureImageUnits); - int numVertexAttribs = 0; + GC3Dint numVertexAttribs = 0; m_context->getIntegerv(GraphicsContext3D::MAX_VERTEX_ATTRIBS, &numVertexAttribs); m_maxVertexAttribs = numVertexAttribs; @@ -300,12 +301,12 @@ void WebGLRenderingContext::reshape(int width, int height) m_context->reshape(width, height); } -int WebGLRenderingContext::sizeInBytes(int type) +unsigned int WebGLRenderingContext::sizeInBytes(GC3Denum type) { return m_context->sizeInBytes(type); } -void WebGLRenderingContext::activeTexture(unsigned long texture, ExceptionCode& ec) +void WebGLRenderingContext::activeTexture(GC3Denum texture, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -333,7 +334,7 @@ void WebGLRenderingContext::attachShader(WebGLProgram* program, WebGLShader* sha cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, unsigned long index, const String& name, ExceptionCode& ec) +void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, GC3Duint index, const String& name, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateWebGLObject(program)) @@ -344,7 +345,7 @@ void WebGLRenderingContext::bindAttribLocation(WebGLProgram* program, unsigned l cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bindBuffer(unsigned long target, WebGLBuffer* buffer, ExceptionCode& ec) +void WebGLRenderingContext::bindBuffer(GC3Denum target, WebGLBuffer* buffer, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -374,7 +375,7 @@ void WebGLRenderingContext::bindBuffer(unsigned long target, WebGLBuffer* buffer } -void WebGLRenderingContext::bindFramebuffer(unsigned long target, WebGLFramebuffer* buffer, ExceptionCode& ec) +void WebGLRenderingContext::bindFramebuffer(GC3Denum target, WebGLFramebuffer* buffer, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -394,7 +395,7 @@ void WebGLRenderingContext::bindFramebuffer(unsigned long target, WebGLFramebuff cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bindRenderbuffer(unsigned long target, WebGLRenderbuffer* renderBuffer, ExceptionCode& ec) +void WebGLRenderingContext::bindRenderbuffer(GC3Denum target, WebGLRenderbuffer* renderBuffer, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -415,7 +416,7 @@ void WebGLRenderingContext::bindRenderbuffer(unsigned long target, WebGLRenderbu } -void WebGLRenderingContext::bindTexture(unsigned long target, WebGLTexture* texture, ExceptionCode& ec) +void WebGLRenderingContext::bindTexture(GC3Denum target, WebGLTexture* texture, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -424,7 +425,7 @@ void WebGLRenderingContext::bindTexture(unsigned long target, WebGLTexture* text m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; } - int maxLevel = 0; + GC3Dint maxLevel = 0; if (target == GraphicsContext3D::TEXTURE_2D) { m_textureUnits[m_activeTextureUnit].m_texture2DBinding = texture; maxLevel = m_maxTextureLevel; @@ -451,7 +452,7 @@ void WebGLRenderingContext::bindTexture(unsigned long target, WebGLTexture* text cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::blendColor(float red, float green, float blue, float alpha) +void WebGLRenderingContext::blendColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat alpha) { if (isContextLost()) return; @@ -459,7 +460,7 @@ void WebGLRenderingContext::blendColor(float red, float green, float blue, float cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::blendEquation(unsigned long mode) +void WebGLRenderingContext::blendEquation(GC3Denum mode) { if (isContextLost() || !validateBlendEquation(mode)) return; @@ -467,7 +468,7 @@ void WebGLRenderingContext::blendEquation(unsigned long mode) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha) +void WebGLRenderingContext::blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha) { if (isContextLost() || !validateBlendEquation(modeRGB) || !validateBlendEquation(modeAlpha)) return; @@ -476,7 +477,7 @@ void WebGLRenderingContext::blendEquationSeparate(unsigned long modeRGB, unsigne } -void WebGLRenderingContext::blendFunc(unsigned long sfactor, unsigned long dfactor) +void WebGLRenderingContext::blendFunc(GC3Denum sfactor, GC3Denum dfactor) { if (isContextLost() || !validateBlendFuncFactors(sfactor, dfactor)) return; @@ -484,7 +485,7 @@ void WebGLRenderingContext::blendFunc(unsigned long sfactor, unsigned long dfact cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha) +void WebGLRenderingContext::blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha) { if (isContextLost() || !validateBlendFuncFactors(srcRGB, dstRGB)) return; @@ -492,7 +493,7 @@ void WebGLRenderingContext::blendFuncSeparate(unsigned long srcRGB, unsigned lon cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode& ec) +void WebGLRenderingContext::bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -511,7 +512,7 @@ void WebGLRenderingContext::bufferData(unsigned long target, int size, unsigned cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode& ec) +void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBuffer* data, GC3Denum usage, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -534,7 +535,7 @@ void WebGLRenderingContext::bufferData(unsigned long target, ArrayBuffer* data, cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode& ec) +void WebGLRenderingContext::bufferData(GC3Denum target, ArrayBufferView* data, GC3Denum usage, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -557,7 +558,7 @@ void WebGLRenderingContext::bufferData(unsigned long target, ArrayBufferView* da cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode& ec) +void WebGLRenderingContext::bufferSubData(GC3Denum target, GC3Dintptr offset, ArrayBuffer* data, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -578,7 +579,7 @@ void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, Arr cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode& ec) +void WebGLRenderingContext::bufferSubData(GC3Denum target, GC3Dintptr offset, ArrayBufferView* data, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -599,7 +600,7 @@ void WebGLRenderingContext::bufferSubData(unsigned long target, long offset, Arr cleanupAfterGraphicsCall(false); } -unsigned long WebGLRenderingContext::checkFramebufferStatus(unsigned long target) +GC3Denum WebGLRenderingContext::checkFramebufferStatus(GC3Denum target) { if (isContextLost()) return GraphicsContext3D::FRAMEBUFFER_UNSUPPORTED; @@ -616,7 +617,7 @@ unsigned long WebGLRenderingContext::checkFramebufferStatus(unsigned long target return result; } -void WebGLRenderingContext::clear(unsigned long mask) +void WebGLRenderingContext::clear(GC3Dbitfield mask) { if (isContextLost()) return; @@ -632,7 +633,7 @@ void WebGLRenderingContext::clear(unsigned long mask) cleanupAfterGraphicsCall(true); } -void WebGLRenderingContext::clearColor(float r, float g, float b, float a) +void WebGLRenderingContext::clearColor(GC3Dfloat r, GC3Dfloat g, GC3Dfloat b, GC3Dfloat a) { if (isContextLost()) return; @@ -648,7 +649,7 @@ void WebGLRenderingContext::clearColor(float r, float g, float b, float a) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::clearDepth(float depth) +void WebGLRenderingContext::clearDepth(GC3Dfloat depth) { if (isContextLost()) return; @@ -656,7 +657,7 @@ void WebGLRenderingContext::clearDepth(float depth) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::clearStencil(long s) +void WebGLRenderingContext::clearStencil(GC3Dint s) { if (isContextLost()) return; @@ -664,7 +665,7 @@ void WebGLRenderingContext::clearStencil(long s) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::colorMask(bool red, bool green, bool blue, bool alpha) +void WebGLRenderingContext::colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha) { if (isContextLost()) return; @@ -681,7 +682,7 @@ void WebGLRenderingContext::compileShader(WebGLShader* shader, ExceptionCode& ec cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::copyTexImage2D(unsigned long target, long level, unsigned long internalformat, long x, long y, long width, long height, long border) +void WebGLRenderingContext::copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border) { if (isContextLost()) return; @@ -705,10 +706,11 @@ void WebGLRenderingContext::copyTexImage2D(unsigned long target, long level, uns if (isResourceSafe()) m_context->copyTexImage2D(target, level, internalformat, x, y, width, height, border); else { - long clippedX, clippedY, clippedWidth, clippedHeight; + GC3Dint clippedX, clippedY; + GC3Dsizei clippedWidth, clippedHeight; if (clip2D(x, y, width, height, getBoundFramebufferWidth(), getBoundFramebufferHeight(), &clippedX, &clippedY, &clippedWidth, &clippedHeight)) { m_context->texImage2DResourceSafe(target, level, internalformat, width, height, border, - internalformat, GraphicsContext3D::UNSIGNED_BYTE); + internalformat, GraphicsContext3D::UNSIGNED_BYTE, m_unpackAlignment); if (clippedWidth > 0 && clippedHeight > 0) { m_context->copyTexSubImage2D(target, level, clippedX - x, clippedY - y, clippedX, clippedY, clippedWidth, clippedHeight); @@ -721,7 +723,7 @@ void WebGLRenderingContext::copyTexImage2D(unsigned long target, long level, uns cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::copyTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, long x, long y, long width, long height) +void WebGLRenderingContext::copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) { if (isContextLost()) return; @@ -747,20 +749,19 @@ void WebGLRenderingContext::copyTexSubImage2D(unsigned long target, long level, if (isResourceSafe()) m_context->copyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); else { - long clippedX, clippedY, clippedWidth, clippedHeight; + GC3Dint clippedX, clippedY; + GC3Dsizei clippedWidth, clippedHeight; if (clip2D(x, y, width, height, getBoundFramebufferWidth(), getBoundFramebufferHeight(), &clippedX, &clippedY, &clippedWidth, &clippedHeight)) { - unsigned long format = tex->getInternalFormat(target, level); - unsigned long type = tex->getType(target, level); - unsigned int componentsPerPixel = 0; - unsigned int bytesPerComponent = 0; - bool valid = m_context->computeFormatAndTypeParameters(format, type, &componentsPerPixel, &bytesPerComponent); - if (!valid) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); - return; - } + GC3Denum format = tex->getInternalFormat(target, level); + GC3Denum type = tex->getType(target, level); OwnArrayPtr<unsigned char> zero; if (width && height) { - unsigned long size = componentsPerPixel * bytesPerComponent * width * height; + unsigned int size; + GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, height, m_unpackAlignment, &size, 0); + if (error != GraphicsContext3D::NO_ERROR) { + m_context->synthesizeGLError(error); + return; + } zero = adoptArrayPtr(new unsigned char[size]); if (!zero) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -768,11 +769,7 @@ void WebGLRenderingContext::copyTexSubImage2D(unsigned long target, long level, } memset(zero.get(), 0, size); } - if (zero) - m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, 1); m_context->texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, zero.get()); - if (zero) - m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment); if (clippedWidth > 0 && clippedHeight > 0) { m_context->copyTexSubImage2D(target, level, xoffset + clippedX - x, yoffset + clippedY - y, clippedX, clippedY, clippedWidth, clippedHeight); @@ -828,7 +825,7 @@ PassRefPtr<WebGLRenderbuffer> WebGLRenderingContext::createRenderbuffer() return o; } -PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(unsigned long type, ExceptionCode& ec) +PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(GC3Denum type, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -838,12 +835,12 @@ PassRefPtr<WebGLShader> WebGLRenderingContext::createShader(unsigned long type, return 0; } - RefPtr<WebGLShader> o = WebGLShader::create(this, static_cast<GraphicsContext3D::WebGLEnumType>(type)); + RefPtr<WebGLShader> o = WebGLShader::create(this, type); addObject(o.get()); return o; } -void WebGLRenderingContext::cullFace(unsigned long mode) +void WebGLRenderingContext::cullFace(GC3Denum mode) { if (isContextLost()) return; @@ -927,7 +924,7 @@ void WebGLRenderingContext::deleteTexture(WebGLTexture* texture) m_framebufferBinding->removeAttachment(texture); } -void WebGLRenderingContext::depthFunc(unsigned long func) +void WebGLRenderingContext::depthFunc(GC3Denum func) { if (isContextLost()) return; @@ -935,7 +932,7 @@ void WebGLRenderingContext::depthFunc(unsigned long func) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::depthMask(bool flag) +void WebGLRenderingContext::depthMask(GC3Dboolean flag) { if (isContextLost()) return; @@ -943,7 +940,7 @@ void WebGLRenderingContext::depthMask(bool flag) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::depthRange(float zNear, float zFar) +void WebGLRenderingContext::depthRange(GC3Dfloat zNear, GC3Dfloat zFar) { if (isContextLost()) return; @@ -970,7 +967,7 @@ void WebGLRenderingContext::detachShader(WebGLProgram* program, WebGLShader* sha } -void WebGLRenderingContext::disable(unsigned long cap) +void WebGLRenderingContext::disable(GC3Denum cap) { if (isContextLost() || !validateCapability(cap)) return; @@ -978,7 +975,7 @@ void WebGLRenderingContext::disable(unsigned long cap) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::disableVertexAttribArray(unsigned long index, ExceptionCode& ec) +void WebGLRenderingContext::disableVertexAttribArray(GC3Duint index, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -997,7 +994,7 @@ void WebGLRenderingContext::disableVertexAttribArray(unsigned long index, Except } } -bool WebGLRenderingContext::validateElementArraySize(unsigned long count, unsigned long type, long offset) +bool WebGLRenderingContext::validateElementArraySize(GC3Dsizei count, GC3Denum type, GC3Dintptr offset) { if (!m_boundElementArrayBuffer) return false; @@ -1005,28 +1002,26 @@ bool WebGLRenderingContext::validateElementArraySize(unsigned long count, unsign if (offset < 0) return false; - unsigned long uoffset = static_cast<unsigned long>(offset); - if (type == GraphicsContext3D::UNSIGNED_SHORT) { // For an unsigned short array, offset must be divisible by 2 for alignment reasons. - if (uoffset & 1) + if (offset % 2) return false; // Make uoffset an element offset. - uoffset /= 2; + offset /= 2; - unsigned long n = m_boundElementArrayBuffer->byteLength() / 2; - if (uoffset > n || count > n - uoffset) + GC3Dsizeiptr n = m_boundElementArrayBuffer->byteLength() / 2; + if (offset > n || count > n - offset) return false; } else if (type == GraphicsContext3D::UNSIGNED_BYTE) { - unsigned long n = m_boundElementArrayBuffer->byteLength(); - if (uoffset > n || count > n - uoffset) + GC3Dsizeiptr n = m_boundElementArrayBuffer->byteLength(); + if (offset > n || count > n - offset) return false; } return true; } -bool WebGLRenderingContext::validateIndexArrayConservative(unsigned long type, long& numElementsRequired) +bool WebGLRenderingContext::validateIndexArrayConservative(GC3Denum type, int& numElementsRequired) { // Performs conservative validation by caching a maximum index of // the given type per element array buffer. If all of the bound @@ -1037,28 +1032,28 @@ bool WebGLRenderingContext::validateIndexArrayConservative(unsigned long type, l if (!m_boundElementArrayBuffer) return false; - unsigned numElements = m_boundElementArrayBuffer->byteLength(); + GC3Dsizeiptr numElements = m_boundElementArrayBuffer->byteLength(); // The case count==0 is already dealt with in drawElements before validateIndexArrayConservative. if (!numElements) return false; const ArrayBuffer* buffer = m_boundElementArrayBuffer->elementArrayBuffer(); ASSERT(buffer); - long maxIndex = m_boundElementArrayBuffer->getCachedMaxIndex(type); + int maxIndex = m_boundElementArrayBuffer->getCachedMaxIndex(type); if (maxIndex < 0) { // Compute the maximum index in the entire buffer for the given type of index. switch (type) { case GraphicsContext3D::UNSIGNED_BYTE: { - const unsigned char* p = static_cast<const unsigned char*>(buffer->data()); - for (unsigned i = 0; i < numElements; i++) - maxIndex = max(maxIndex, static_cast<long>(p[i])); + const GC3Dubyte* p = static_cast<const GC3Dubyte*>(buffer->data()); + for (GC3Dsizeiptr i = 0; i < numElements; i++) + maxIndex = max(maxIndex, static_cast<int>(p[i])); break; } case GraphicsContext3D::UNSIGNED_SHORT: { - numElements /= sizeof(unsigned short); - const unsigned short* p = static_cast<const unsigned short*>(buffer->data()); - for (unsigned i = 0; i < numElements; i++) - maxIndex = max(maxIndex, static_cast<long>(p[i])); + numElements /= sizeof(GC3Dushort); + const GC3Dushort* p = static_cast<const GC3Dushort*>(buffer->data()); + for (GC3Dsizeiptr i = 0; i < numElements; i++) + maxIndex = max(maxIndex, static_cast<int>(p[i])); break; } default: @@ -1077,9 +1072,10 @@ bool WebGLRenderingContext::validateIndexArrayConservative(unsigned long type, l return false; } -bool WebGLRenderingContext::validateIndexArrayPrecise(unsigned long count, unsigned long type, long offset, long& numElementsRequired) +bool WebGLRenderingContext::validateIndexArrayPrecise(GC3Dsizei count, GC3Denum type, GC3Dintptr offset, int& numElementsRequired) { - long lastIndex = -1; + ASSERT(count >= 0 && offset >= 0); + int lastIndex = -1; if (!m_boundElementArrayBuffer) return false; @@ -1092,20 +1088,20 @@ bool WebGLRenderingContext::validateIndexArrayPrecise(unsigned long count, unsig if (!m_boundElementArrayBuffer->elementArrayBuffer()) return false; - unsigned long uoffset = static_cast<unsigned long>(offset); + unsigned long uoffset = offset; unsigned long n = count; if (type == GraphicsContext3D::UNSIGNED_SHORT) { // Make uoffset an element offset. - uoffset /= 2; - const unsigned short* p = static_cast<const unsigned short*>(m_boundElementArrayBuffer->elementArrayBuffer()->data()) + uoffset; + uoffset /= sizeof(GC3Dushort); + const GC3Dushort* p = static_cast<const GC3Dushort*>(m_boundElementArrayBuffer->elementArrayBuffer()->data()) + uoffset; while (n-- > 0) { if (*p > lastIndex) lastIndex = *p; ++p; } } else if (type == GraphicsContext3D::UNSIGNED_BYTE) { - const unsigned char* p = static_cast<const unsigned char*>(m_boundElementArrayBuffer->elementArrayBuffer()->data()) + uoffset; + const GC3Dubyte* p = static_cast<const GC3Dubyte*>(m_boundElementArrayBuffer->elementArrayBuffer()->data()) + uoffset; while (n-- > 0) { if (*p > lastIndex) lastIndex = *p; @@ -1118,7 +1114,7 @@ bool WebGLRenderingContext::validateIndexArrayPrecise(unsigned long count, unsig return numElementsRequired > 0; } -bool WebGLRenderingContext::validateRenderingState(long numElementsRequired) +bool WebGLRenderingContext::validateRenderingState(int numElementsRequired) { if (!m_currentProgram) return false; @@ -1136,7 +1132,7 @@ bool WebGLRenderingContext::validateRenderingState(long numElementsRequired) return true; // Look in each consumed vertex attrib (by the current program) and find the smallest buffer size - long smallestNumElements = LONG_MAX; + int smallestNumElements = INT_MAX; int numActiveAttribLocations = m_currentProgram->numActiveAttribLocations(); for (int i = 0; i < numActiveAttribLocations; ++i) { int loc = m_currentProgram->getActiveAttribLocation(i); @@ -1146,8 +1142,9 @@ bool WebGLRenderingContext::validateRenderingState(long numElementsRequired) // Avoid off-by-one errors in numElements computation. // For the last element, we will only touch the data for the // element and nothing beyond it. - long bytesRemaining = state.bufferBinding->byteLength() - state.offset; - long numElements = 0; + int bytesRemaining = static_cast<int>(state.bufferBinding->byteLength() - state.offset); + int numElements = 0; + ASSERT(state.stride > 0); if (bytesRemaining >= state.bytesPerElement) numElements = 1 + (bytesRemaining - state.bytesPerElement) / state.stride; if (numElements < smallestNumElements) @@ -1156,7 +1153,7 @@ bool WebGLRenderingContext::validateRenderingState(long numElementsRequired) } } - if (smallestNumElements == LONG_MAX) + if (smallestNumElements == INT_MAX) smallestNumElements = 0; return numElementsRequired <= smallestNumElements; @@ -1175,7 +1172,7 @@ bool WebGLRenderingContext::validateWebGLObject(WebGLObject* object) return true; } -void WebGLRenderingContext::drawArrays(unsigned long mode, long first, long count, ExceptionCode& ec) +void WebGLRenderingContext::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count, ExceptionCode& ec) { UNUSED_PARAM(ec); @@ -1195,9 +1192,9 @@ void WebGLRenderingContext::drawArrays(unsigned long mode, long first, long coun if (!isErrorGeneratedOnOutOfBoundsAccesses()) { // Ensure we have a valid rendering state - CheckedInt<int32_t> checkedFirst(first); - CheckedInt<int32_t> checkedCount(count); - CheckedInt<int32_t> checkedSum = checkedFirst + checkedCount; + CheckedInt<GC3Dint> checkedFirst(first); + CheckedInt<GC3Dint> checkedCount(count); + CheckedInt<GC3Dint> checkedSum = checkedFirst + checkedCount; if (!checkedSum.valid() || !validateRenderingState(checkedSum.value())) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; @@ -1227,7 +1224,7 @@ void WebGLRenderingContext::drawArrays(unsigned long mode, long first, long coun cleanupAfterGraphicsCall(true); } -void WebGLRenderingContext::drawElements(unsigned long mode, long count, unsigned long type, long offset, ExceptionCode& ec) +void WebGLRenderingContext::drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset, ExceptionCode& ec) { UNUSED_PARAM(ec); @@ -1254,7 +1251,7 @@ void WebGLRenderingContext::drawElements(unsigned long mode, long count, unsigne if (!count) return; - long numElements = 0; + int numElements = 0; if (!isErrorGeneratedOnOutOfBoundsAccesses()) { // Ensure we have a valid rendering state if (!validateElementArraySize(count, type, offset)) { @@ -1297,7 +1294,7 @@ void WebGLRenderingContext::drawElements(unsigned long mode, long count, unsigne cleanupAfterGraphicsCall(true); } -void WebGLRenderingContext::enable(unsigned long cap) +void WebGLRenderingContext::enable(GC3Denum cap) { if (isContextLost() || !validateCapability(cap)) return; @@ -1305,7 +1302,7 @@ void WebGLRenderingContext::enable(unsigned long cap) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::enableVertexAttribArray(unsigned long index, ExceptionCode& ec) +void WebGLRenderingContext::enableVertexAttribArray(GC3Duint index, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -1341,7 +1338,7 @@ void WebGLRenderingContext::flush() cleanupAfterGraphicsCall(true); } -void WebGLRenderingContext::framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, WebGLRenderbuffer* buffer, ExceptionCode& ec) +void WebGLRenderingContext::framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, WebGLRenderbuffer* buffer, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateFramebufferFuncParameters(target, attachment)) @@ -1412,7 +1409,7 @@ void WebGLRenderingContext::framebufferRenderbuffer(unsigned long target, unsign cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, WebGLTexture* texture, long level, ExceptionCode& ec) +void WebGLRenderingContext::framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, WebGLTexture* texture, GC3Dint level, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateFramebufferFuncParameters(target, attachment)) @@ -1437,7 +1434,7 @@ void WebGLRenderingContext::framebufferTexture2D(unsigned long target, unsigned cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::frontFace(unsigned long mode) +void WebGLRenderingContext::frontFace(GC3Denum mode) { if (isContextLost()) return; @@ -1445,7 +1442,7 @@ void WebGLRenderingContext::frontFace(unsigned long mode) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::generateMipmap(unsigned long target) +void WebGLRenderingContext::generateMipmap(GC3Denum target) { if (isContextLost()) return; @@ -1474,7 +1471,7 @@ void WebGLRenderingContext::generateMipmap(unsigned long target) cleanupAfterGraphicsCall(false); } -PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram* program, unsigned long index, ExceptionCode& ec) +PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram* program, GC3Duint index, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateWebGLObject(program)) @@ -1485,7 +1482,7 @@ PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveAttrib(WebGLProgram* return WebGLActiveInfo::create(info.name, info.type, info.size); } -PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveUniform(WebGLProgram* program, unsigned long index, ExceptionCode& ec) +PassRefPtr<WebGLActiveInfo> WebGLRenderingContext::getActiveUniform(WebGLProgram* program, GC3Duint index, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateWebGLObject(program)) @@ -1505,16 +1502,16 @@ bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Web shaderObjects.clear(); if (isContextLost() || !validateWebGLObject(program)) return false; - int numShaders = 0; + GC3Dint numShaders = 0; m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ATTACHED_SHADERS, &numShaders); if (numShaders) { - OwnArrayPtr<unsigned int> shaders(new unsigned int[numShaders]); - int count = 0; + OwnArrayPtr<Platform3DObject> shaders(new Platform3DObject[numShaders]); + GC3Dsizei count = 0; m_context->getAttachedShaders(objectOrZero(program), numShaders, &count, shaders.get()); if (count != numShaders) return false; shaderObjects.resize(numShaders); - for (int ii = 0; ii < numShaders; ++ii) { + for (GC3Dint ii = 0; ii < numShaders; ++ii) { WebGLShader* shader = findShader(shaders[ii]); if (!shader) { shaderObjects.clear(); @@ -1526,7 +1523,7 @@ bool WebGLRenderingContext::getAttachedShaders(WebGLProgram* program, Vector<Web return true; } -int WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const String& name) +GC3Dint WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const String& name) { if (isContextLost()) return -1; @@ -1535,7 +1532,7 @@ int WebGLRenderingContext::getAttribLocation(WebGLProgram* program, const String return m_context->getAttribLocation(objectOrZero(program), name); } -WebGLGetInfo WebGLRenderingContext::getBufferParameter(unsigned long target, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getBufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -1551,7 +1548,7 @@ WebGLGetInfo WebGLRenderingContext::getBufferParameter(unsigned long target, uns } WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; m_context->getBufferParameteriv(target, pname, &value); if (pname == GraphicsContext3D::BUFFER_SIZE) return WebGLGetInfo(static_cast<long>(value)); @@ -1567,7 +1564,7 @@ PassRefPtr<WebGLContextAttributes> WebGLRenderingContext::getContextAttributes() return WebGLContextAttributes::create(m_context->getContextAttributes()); } -unsigned long WebGLRenderingContext::getError() +GC3Denum WebGLRenderingContext::getError() { return m_context->getError(); } @@ -1593,7 +1590,7 @@ WebGLExtension* WebGLRenderingContext::getExtension(const String& name) return 0; } -WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(unsigned long target, unsigned long attachment, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(GC3Denum target, GC3Denum attachment, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateFramebufferFuncParameters(target, attachment)) @@ -1616,7 +1613,7 @@ WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(unsigned l if (pname != GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) { WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; m_context->getFramebufferAttachmentParameteriv(target, attachment, pname, &value); if (pname == GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) return WebGLGetInfo(static_cast<unsigned long>(value)); @@ -1624,11 +1621,11 @@ WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(unsigned l } WebGLStateRestorer(this, false); - int type = 0; + GC3Dint type = 0; m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type); if (!type) return WebGLGetInfo(); - int value = 0; + GC3Dint value = 0; m_context->getFramebufferAttachmentParameteriv(target, attachment, GraphicsContext3D::FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &value); switch (type) { case GraphicsContext3D::RENDERBUFFER: @@ -1641,7 +1638,7 @@ WebGLGetInfo WebGLRenderingContext::getFramebufferAttachmentParameter(unsigned l } } -WebGLGetInfo WebGLRenderingContext::getParameter(unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getParameter(GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -1819,7 +1816,7 @@ WebGLGetInfo WebGLRenderingContext::getParameter(unsigned long pname, ExceptionC case GraphicsContext3D::UNPACK_PREMULTIPLY_ALPHA_WEBGL: return WebGLGetInfo(m_unpackPremultiplyAlpha); case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL: - return WebGLGetInfo(m_unpackColorspaceConversion); + return WebGLGetInfo(static_cast<unsigned long>(m_unpackColorspaceConversion)); case GraphicsContext3D::VENDOR: return WebGLGetInfo("Webkit (" + m_context->getString(GraphicsContext3D::VENDOR) + ")"); case GraphicsContext3D::VERSION: @@ -1832,14 +1829,14 @@ WebGLGetInfo WebGLRenderingContext::getParameter(unsigned long pname, ExceptionC } } -WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getProgramParameter(WebGLProgram* program, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateWebGLObject(program)) return WebGLGetInfo(); WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; switch (pname) { case GraphicsContext3D::DELETE_STATUS: return WebGLGetInfo(program->isDeleted()); @@ -1873,7 +1870,7 @@ String WebGLRenderingContext::getProgramInfoLog(WebGLProgram* program, Exception return m_context->getProgramInfoLog(objectOrZero(program)); } -WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long target, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -1911,7 +1908,7 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe value = 8; break; case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT: - return WebGLGetInfo(m_renderbufferBinding->getInternalFormat()); + return WebGLGetInfo(static_cast<unsigned long>(m_renderbufferBinding->getInternalFormat())); default: m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); return WebGLGetInfo(); @@ -1920,7 +1917,7 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe } WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; switch (pname) { case GraphicsContext3D::RENDERBUFFER_WIDTH: case GraphicsContext3D::RENDERBUFFER_HEIGHT: @@ -1933,20 +1930,20 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe m_context->getRenderbufferParameteriv(target, pname, &value); return WebGLGetInfo(static_cast<long>(value)); case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT: - return WebGLGetInfo(m_renderbufferBinding->getInternalFormat()); + return WebGLGetInfo(static_cast<unsigned long>(m_renderbufferBinding->getInternalFormat())); default: m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); return WebGLGetInfo(); } } -WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getShaderParameter(WebGLShader* shader, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateWebGLObject(shader)) return WebGLGetInfo(); WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; switch (pname) { case GraphicsContext3D::DELETE_STATUS: return WebGLGetInfo(shader->isDeleted()); @@ -1997,7 +1994,7 @@ Vector<String> WebGLRenderingContext::getSupportedExtensions() return result; } -WebGLGetInfo WebGLRenderingContext::getTexParameter(unsigned long target, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getTexParameter(GC3Denum target, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -2006,7 +2003,7 @@ WebGLGetInfo WebGLRenderingContext::getTexParameter(unsigned long target, unsign if (!tex) return WebGLGetInfo(); WebGLStateRestorer(this, false); - int value = 0; + GC3Dint value = 0; switch (pname) { case GraphicsContext3D::TEXTURE_MAG_FILTER: case GraphicsContext3D::TEXTURE_MIN_FILTER: @@ -2029,13 +2026,13 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return WebGLGetInfo(); } - long location = uniformLocation->location(); + GC3Dint location = uniformLocation->location(); WebGLStateRestorer(this, false); // FIXME: make this more efficient using WebGLUniformLocation and caching types in it - int activeUniforms = 0; + GC3Dint activeUniforms = 0; m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::ACTIVE_UNIFORMS, &activeUniforms); - for (int i = 0; i < activeUniforms; i++) { + for (GC3Dint i = 0; i < activeUniforms; i++) { ActiveInfo info; if (!m_context->getActiveUniform(objectOrZero(program), i, info)) return WebGLGetInfo(); @@ -2043,7 +2040,7 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG if (info.size > 1) info.name = info.name.left(info.name.length() - 3); // If it's an array, we need to iterate through each element, appending "[index]" to the name. - for (int index = 0; index < info.size; ++index) { + for (GC3Dint index = 0; index < info.size; ++index) { String name = info.name; if (info.size > 1 && index >= 1) { name.append('['); @@ -2051,11 +2048,11 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG name.append(']'); } // Now need to look this up by name again to find its location - long loc = m_context->getUniformLocation(objectOrZero(program), name); + GC3Dint loc = m_context->getUniformLocation(objectOrZero(program), name); if (loc == location) { // Found it. Use the type in the ActiveInfo to determine the return type. - GraphicsContext3D::WebGLEnumType baseType; - unsigned length; + GC3Denum baseType; + unsigned int length; switch (info.type) { case GraphicsContext3D::BOOL: baseType = GraphicsContext3D::BOOL; @@ -2125,21 +2122,21 @@ WebGLGetInfo WebGLRenderingContext::getUniform(WebGLProgram* program, const WebG } switch (baseType) { case GraphicsContext3D::FLOAT: { - float value[16] = {0}; + GC3Dfloat value[16] = {0}; m_context->getUniformfv(objectOrZero(program), location, value); if (length == 1) return WebGLGetInfo(value[0]); return WebGLGetInfo(Float32Array::create(value, length)); } case GraphicsContext3D::INT: { - int value[4] = {0}; + GC3Dint value[4] = {0}; m_context->getUniformiv(objectOrZero(program), location, value); if (length == 1) return WebGLGetInfo(static_cast<long>(value[0])); return WebGLGetInfo(Int32Array::create(value, length)); } case GraphicsContext3D::BOOL: { - int value[4] = {0}; + GC3Dint value[4] = {0}; m_context->getUniformiv(objectOrZero(program), location, value); if (length > 1) { bool boolValue[16] = {0}; @@ -2168,13 +2165,13 @@ PassRefPtr<WebGLUniformLocation> WebGLRenderingContext::getUniformLocation(WebGL if (!validateString(name)) return 0; WebGLStateRestorer(this, false); - long uniformLocation = m_context->getUniformLocation(objectOrZero(program), name); + GC3Dint uniformLocation = m_context->getUniformLocation(objectOrZero(program), name); if (uniformLocation == -1) return 0; return WebGLUniformLocation::create(program, uniformLocation); } -WebGLGetInfo WebGLRenderingContext::getVertexAttrib(unsigned long index, unsigned long pname, ExceptionCode& ec) +WebGLGetInfo WebGLRenderingContext::getVertexAttrib(GC3Duint index, GC3Denum pname, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -2203,15 +2200,15 @@ WebGLGetInfo WebGLRenderingContext::getVertexAttrib(unsigned long index, unsigne case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_SIZE: if (index >= m_vertexAttribState.size()) return WebGLGetInfo(static_cast<long>(4)); - return WebGLGetInfo(m_vertexAttribState[index].size); + return WebGLGetInfo(static_cast<long>(m_vertexAttribState[index].size)); case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_STRIDE: if (index >= m_vertexAttribState.size()) return WebGLGetInfo(static_cast<long>(0)); - return WebGLGetInfo(m_vertexAttribState[index].originalStride); + return WebGLGetInfo(static_cast<long>(m_vertexAttribState[index].originalStride)); case GraphicsContext3D::VERTEX_ATTRIB_ARRAY_TYPE: if (index >= m_vertexAttribState.size()) return WebGLGetInfo(static_cast<unsigned long>(GraphicsContext3D::FLOAT)); - return WebGLGetInfo(m_vertexAttribState[index].type); + return WebGLGetInfo(static_cast<unsigned long>(m_vertexAttribState[index].type)); case GraphicsContext3D::CURRENT_VERTEX_ATTRIB: if (index >= m_vertexAttribState.size()) { float value[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; @@ -2224,16 +2221,16 @@ WebGLGetInfo WebGLRenderingContext::getVertexAttrib(unsigned long index, unsigne } } -long WebGLRenderingContext::getVertexAttribOffset(unsigned long index, unsigned long pname) +GC3Dsizeiptr WebGLRenderingContext::getVertexAttribOffset(GC3Duint index, GC3Denum pname) { if (isContextLost()) return 0; - long result = m_context->getVertexAttribOffset(index, pname); + GC3Dsizeiptr result = m_context->getVertexAttribOffset(index, pname); cleanupAfterGraphicsCall(false); return result; } -void WebGLRenderingContext::hint(unsigned long target, unsigned long mode) +void WebGLRenderingContext::hint(GC3Denum target, GC3Denum mode) { if (isContextLost()) return; @@ -2245,13 +2242,13 @@ void WebGLRenderingContext::hint(unsigned long target, unsigned long mode) cleanupAfterGraphicsCall(false); } -bool WebGLRenderingContext::isBuffer(WebGLBuffer* buffer) +GC3Dboolean WebGLRenderingContext::isBuffer(WebGLBuffer* buffer) { if (!buffer || isContextLost()) - return false; + return 0; if (!buffer->hasEverBeenBound()) - return false; + return 0; return m_context->isBuffer(buffer->object()); } @@ -2269,67 +2266,67 @@ bool WebGLRenderingContext::isContextLost() return m_contextLost; } -bool WebGLRenderingContext::isEnabled(unsigned long cap) +GC3Dboolean WebGLRenderingContext::isEnabled(GC3Denum cap) { if (!validateCapability(cap) || isContextLost()) - return false; + return 0; return m_context->isEnabled(cap); } -bool WebGLRenderingContext::isFramebuffer(WebGLFramebuffer* framebuffer) +GC3Dboolean WebGLRenderingContext::isFramebuffer(WebGLFramebuffer* framebuffer) { if (!framebuffer || isContextLost()) - return false; + return 0; if (!framebuffer->hasEverBeenBound()) - return false; + return 0; return m_context->isFramebuffer(framebuffer->object()); } -bool WebGLRenderingContext::isProgram(WebGLProgram* program) +GC3Dboolean WebGLRenderingContext::isProgram(WebGLProgram* program) { if (!program || isContextLost()) - return false; + return 0; return m_context->isProgram(program->object()); } -bool WebGLRenderingContext::isRenderbuffer(WebGLRenderbuffer* renderbuffer) +GC3Dboolean WebGLRenderingContext::isRenderbuffer(WebGLRenderbuffer* renderbuffer) { if (!renderbuffer || isContextLost()) - return false; + return 0; if (!renderbuffer->hasEverBeenBound()) - return false; + return 0; return m_context->isRenderbuffer(renderbuffer->object()); } -bool WebGLRenderingContext::isShader(WebGLShader* shader) +GC3Dboolean WebGLRenderingContext::isShader(WebGLShader* shader) { if (!shader || isContextLost()) - return false; + return 0; return m_context->isShader(shader->object()); } -bool WebGLRenderingContext::isTexture(WebGLTexture* texture) +GC3Dboolean WebGLRenderingContext::isTexture(WebGLTexture* texture) { if (!texture || isContextLost()) - return false; + return 0; if (!texture->hasEverBeenBound()) - return false; + return 0; return m_context->isTexture(texture->object()); } -void WebGLRenderingContext::lineWidth(float width) +void WebGLRenderingContext::lineWidth(GC3Dfloat width) { if (isContextLost()) return; - m_context->lineWidth((float) width); + m_context->lineWidth(width); cleanupAfterGraphicsCall(false); } @@ -2348,7 +2345,7 @@ void WebGLRenderingContext::linkProgram(WebGLProgram* program, ExceptionCode& ec m_context->linkProgram(objectOrZero(program)); program->increaseLinkCount(); // cache link status - int value = 0; + GC3Dint value = 0; m_context->getProgramiv(objectOrZero(program), GraphicsContext3D::LINK_STATUS, &value); program->setLinkStatus(static_cast<bool>(value)); // Need to cache link status before caching active attribute locations. @@ -2356,7 +2353,7 @@ void WebGLRenderingContext::linkProgram(WebGLProgram* program, ExceptionCode& ec cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::pixelStorei(unsigned long pname, long param) +void WebGLRenderingContext::pixelStorei(GC3Denum pname, GC3Dint param) { if (isContextLost()) return; @@ -2369,7 +2366,7 @@ void WebGLRenderingContext::pixelStorei(unsigned long pname, long param) break; case GraphicsContext3D::UNPACK_COLORSPACE_CONVERSION_WEBGL: if (param == GraphicsContext3D::BROWSER_DEFAULT_WEBGL || param == GraphicsContext3D::NONE) - m_unpackColorspaceConversion = static_cast<unsigned long>(param); + m_unpackColorspaceConversion = static_cast<GC3Denum>(param); else { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); return; @@ -2379,9 +2376,9 @@ void WebGLRenderingContext::pixelStorei(unsigned long pname, long param) case GraphicsContext3D::UNPACK_ALIGNMENT: if (param == 1 || param == 2 || param == 4 || param == 8) { if (pname == GraphicsContext3D::PACK_ALIGNMENT) - m_packAlignment = static_cast<int>(param); + m_packAlignment = param; else // GraphicsContext3D::UNPACK_ALIGNMENT: - m_unpackAlignment = static_cast<int>(param); + m_unpackAlignment = param; m_context->pixelStorei(pname, param); cleanupAfterGraphicsCall(false); } else { @@ -2395,15 +2392,15 @@ void WebGLRenderingContext::pixelStorei(unsigned long pname, long param) } } -void WebGLRenderingContext::polygonOffset(float factor, float units) +void WebGLRenderingContext::polygonOffset(GC3Dfloat factor, GC3Dfloat units) { if (isContextLost()) return; - m_context->polygonOffset((float) factor, (float) units); + m_context->polygonOffset(factor, units); cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::readPixels(long x, long y, long width, long height, unsigned long format, unsigned long type, ArrayBufferView* pixels, ExceptionCode& ec) +void WebGLRenderingContext::readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode& ec) { if (isContextLost()) return; @@ -2412,30 +2409,35 @@ void WebGLRenderingContext::readPixels(long x, long y, long width, long height, return; } // Validate input parameters. - unsigned int componentsPerPixel, bytesPerComponent; - if (!m_context->computeFormatAndTypeParameters(format, type, &componentsPerPixel, &bytesPerComponent)) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); - return; - } if (!pixels) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); return; } - if (width < 0 || height < 0) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); + switch (format) { + case GraphicsContext3D::ALPHA: + case GraphicsContext3D::RGB: + case GraphicsContext3D::RGBA: + break; + default: + m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); return; } - if (format != GraphicsContext3D::RGBA && type != GraphicsContext3D::UNSIGNED_BYTE) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); + switch (type) { + case GraphicsContext3D::UNSIGNED_BYTE: + case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: + case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: + case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: + break; + default: + m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); return; } if (format != GraphicsContext3D::RGBA || type != GraphicsContext3D::UNSIGNED_BYTE) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); + m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; } // Validate array type against pixel type. - if ((type == GraphicsContext3D::UNSIGNED_BYTE && !pixels->isUnsignedByteArray()) - || (type != GraphicsContext3D::UNSIGNED_BYTE && !pixels->isUnsignedShortArray())) { + if (!pixels->isUnsignedByteArray()) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; } @@ -2444,37 +2446,31 @@ void WebGLRenderingContext::readPixels(long x, long y, long width, long height, return; } // Calculate array size, taking into consideration of PACK_ALIGNMENT. - unsigned long bytesPerRow = componentsPerPixel * bytesPerComponent * width; - unsigned long padding = 0; - unsigned long residualBytes = bytesPerRow % m_packAlignment; - if (residualBytes) { - padding = m_packAlignment - residualBytes; - bytesPerRow += padding; - } - // The last row needs no padding. - unsigned long totalBytes = bytesPerRow * height - padding; - unsigned long num = totalBytes / bytesPerComponent; - if (pixels->byteLength() / bytesPerComponent < num) { + unsigned int totalBytesRequired; + unsigned int padding; + GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, height, m_packAlignment, &totalBytesRequired, &padding); + if (error != GraphicsContext3D::NO_ERROR) { + m_context->synthesizeGLError(error); + return; + } + if (pixels->byteLength() < totalBytesRequired) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; } void* data = pixels->baseAddress(); m_context->readPixels(x, y, width, height, format, type, data); -#if PLATFORM(CG) +#if OS(DARWIN) // FIXME: remove this section when GL driver bug on Mac is fixed, i.e., // when alpha is off, readPixels should set alpha to 255 instead of 0. - if ((format == GraphicsContext3D::ALPHA || format == GraphicsContext3D::RGBA) && !m_context->getContextAttributes().alpha) { - if (type == GraphicsContext3D::UNSIGNED_BYTE) { - unsigned char* pixels = reinterpret_cast<unsigned char*>(data); - for (long iy = 0; iy < height; ++iy) { - for (long ix = 0; ix < width; ++ix) { - pixels[componentsPerPixel - 1] = 255; - pixels += componentsPerPixel; - } - pixels += padding; + if (!m_context->getContextAttributes().alpha) { + unsigned char* pixels = reinterpret_cast<unsigned char*>(data); + for (GC3Dsizei iy = 0; iy < height; ++iy) { + for (GC3Dsizei ix = 0; ix < width; ++ix) { + pixels[3] = 255; + pixels += 4; } + pixels += padding; } - // FIXME: check whether we need to do the same with UNSIGNED_SHORT. } #endif cleanupAfterGraphicsCall(false); @@ -2488,7 +2484,7 @@ void WebGLRenderingContext::releaseShaderCompiler() cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::renderbufferStorage(unsigned long target, unsigned long internalformat, long width, long height) +void WebGLRenderingContext::renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height) { if (isContextLost()) return; @@ -2528,15 +2524,15 @@ void WebGLRenderingContext::renderbufferStorage(unsigned long target, unsigned l } } -void WebGLRenderingContext::sampleCoverage(float value, bool invert) +void WebGLRenderingContext::sampleCoverage(GC3Dfloat value, GC3Dboolean invert) { if (isContextLost()) return; - m_context->sampleCoverage((float) value, invert); + m_context->sampleCoverage(value, invert); cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::scissor(long x, long y, long width, long height) +void WebGLRenderingContext::scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) { if (isContextLost()) return; @@ -2557,7 +2553,7 @@ void WebGLRenderingContext::shaderSource(WebGLShader* shader, const String& stri cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilFunc(unsigned long func, long ref, unsigned long mask) +void WebGLRenderingContext::stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask) { if (isContextLost()) return; @@ -2571,7 +2567,7 @@ void WebGLRenderingContext::stencilFunc(unsigned long func, long ref, unsigned l cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask) +void WebGLRenderingContext::stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask) { if (isContextLost()) return; @@ -2600,7 +2596,7 @@ void WebGLRenderingContext::stencilFuncSeparate(unsigned long face, unsigned lon cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilMask(unsigned long mask) +void WebGLRenderingContext::stencilMask(GC3Duint mask) { if (isContextLost()) return; @@ -2610,7 +2606,7 @@ void WebGLRenderingContext::stencilMask(unsigned long mask) cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilMaskSeparate(unsigned long face, unsigned long mask) +void WebGLRenderingContext::stencilMaskSeparate(GC3Denum face, GC3Duint mask) { if (isContextLost()) return; @@ -2633,7 +2629,7 @@ void WebGLRenderingContext::stencilMaskSeparate(unsigned long face, unsigned lon cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilOp(unsigned long fail, unsigned long zfail, unsigned long zpass) +void WebGLRenderingContext::stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass) { if (isContextLost()) return; @@ -2641,7 +2637,7 @@ void WebGLRenderingContext::stencilOp(unsigned long fail, unsigned long zfail, u cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::stencilOpSeparate(unsigned long face, unsigned long fail, unsigned long zfail, unsigned long zpass) +void WebGLRenderingContext::stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass) { if (isContextLost()) return; @@ -2649,9 +2645,9 @@ void WebGLRenderingContext::stencilOpSeparate(unsigned long face, unsigned long cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::texImage2DBase(unsigned target, unsigned level, unsigned internalformat, - int width, int height, unsigned border, - unsigned format, unsigned type, void* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texImage2DBase(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type, void* pixels, ExceptionCode& ec) { // FIXME: For now we ignore any errors returned ec = 0; @@ -2668,7 +2664,7 @@ void WebGLRenderingContext::texImage2DBase(unsigned target, unsigned level, unsi } if (!pixels && !isResourceSafe()) { bool succeed = m_context->texImage2DResourceSafe(target, level, internalformat, width, height, - border, format, type); + border, format, type, m_unpackAlignment); if (!succeed) return; } else { @@ -2679,8 +2675,8 @@ void WebGLRenderingContext::texImage2DBase(unsigned target, unsigned level, unsi cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::texImage2DImpl(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, Image* image, +void WebGLRenderingContext::texImage2DImpl(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode& ec) { ec = 0; @@ -2697,9 +2693,9 @@ void WebGLRenderingContext::texImage2DImpl(unsigned target, unsigned level, unsi m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment); } -void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, - int width, int height, unsigned border, - unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode& ec) { if (isContextLost() || !validateTexFuncData(width, height, format, type, pixels)) return; @@ -2724,8 +2720,8 @@ void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment); } -void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, ImageData* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2743,8 +2739,8 @@ void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment); } -void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode& ec) +void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2758,8 +2754,8 @@ void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned m_unpackFlipY, m_unpackPremultiplyAlpha, ec); } -void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode& ec) +void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2792,8 +2788,8 @@ PassRefPtr<Image> WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* vid return buf->copyImage(); } -void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode& ec) +void WebGLRenderingContext::texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2804,7 +2800,7 @@ void WebGLRenderingContext::texImage2D(unsigned target, unsigned level, unsigned texImage2DImpl(target, level, internalformat, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec); } -void WebGLRenderingContext::texParameter(unsigned long target, unsigned long pname, float paramf, int parami, bool isFloat) +void WebGLRenderingContext::texParameter(GC3Denum target, GC3Denum pname, GC3Dfloat paramf, GC3Dint parami, bool isFloat) { if (isContextLost()) return; @@ -2837,19 +2833,19 @@ void WebGLRenderingContext::texParameter(unsigned long target, unsigned long pna cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::texParameterf(unsigned target, unsigned pname, float param) +void WebGLRenderingContext::texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param) { texParameter(target, pname, param, 0, true); } -void WebGLRenderingContext::texParameteri(unsigned target, unsigned pname, int param) +void WebGLRenderingContext::texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param) { texParameter(target, pname, 0, param, false); } -void WebGLRenderingContext::texSubImage2DBase(unsigned target, unsigned level, int xoffset, int yoffset, - int width, int height, - unsigned format, unsigned type, void* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2DBase(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, void* pixels, ExceptionCode& ec) { // FIXME: For now we ignore any errors returned ec = 0; @@ -2865,8 +2861,8 @@ void WebGLRenderingContext::texSubImage2DBase(unsigned target, unsigned level, i cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::texSubImage2DImpl(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, +void WebGLRenderingContext::texSubImage2DImpl(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode& ec) { ec = 0; @@ -2881,9 +2877,9 @@ void WebGLRenderingContext::texSubImage2DImpl(unsigned target, unsigned level, i format, type, data.data(), ec); } -void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - int width, int height, - unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode& ec) { if (isContextLost() || !validateTexFuncData(width, height, format, type, pixels)) return; @@ -2907,8 +2903,8 @@ void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int x m_context->pixelStorei(GraphicsContext3D::UNPACK_ALIGNMENT, m_unpackAlignment); } -void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, ImageData* pixels, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2922,8 +2918,8 @@ void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int x format, type, data.data(), ec); } -void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2937,8 +2933,8 @@ void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int x m_unpackFlipY, m_unpackPremultiplyAlpha, ec); } -void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2952,8 +2948,8 @@ void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int x m_unpackFlipY, m_unpackPremultiplyAlpha, ec); } -void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode& ec) +void WebGLRenderingContext::texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode& ec) { ec = 0; if (isContextLost()) @@ -2964,7 +2960,7 @@ void WebGLRenderingContext::texSubImage2D(unsigned target, unsigned level, int x texSubImage2DImpl(target, level, xoffset, yoffset, format, type, image.get(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec); } -void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode& ec) +void WebGLRenderingContext::uniform1f(const WebGLUniformLocation* location, GC3Dfloat x, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -2989,7 +2985,7 @@ void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, Flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 1)) @@ -2999,7 +2995,7 @@ void WebGLRenderingContext::uniform1fv(const WebGLUniformLocation* location, flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode& ec) +void WebGLRenderingContext::uniform1i(const WebGLUniformLocation* location, GC3Dint x, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3024,7 +3020,7 @@ void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, Int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 1)) @@ -3034,7 +3030,7 @@ void WebGLRenderingContext::uniform1iv(const WebGLUniformLocation* location, int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode& ec) +void WebGLRenderingContext::uniform2f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3059,7 +3055,7 @@ void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, Flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 2)) @@ -3069,7 +3065,7 @@ void WebGLRenderingContext::uniform2fv(const WebGLUniformLocation* location, flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode& ec) +void WebGLRenderingContext::uniform2i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3094,7 +3090,7 @@ void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, Int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 2)) @@ -3104,7 +3100,7 @@ void WebGLRenderingContext::uniform2iv(const WebGLUniformLocation* location, int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode& ec) +void WebGLRenderingContext::uniform3f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3129,7 +3125,7 @@ void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, Flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 3)) @@ -3139,7 +3135,7 @@ void WebGLRenderingContext::uniform3fv(const WebGLUniformLocation* location, flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode& ec) +void WebGLRenderingContext::uniform3i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, GC3Dint z, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3164,7 +3160,7 @@ void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, Int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 3)) @@ -3174,7 +3170,7 @@ void WebGLRenderingContext::uniform3iv(const WebGLUniformLocation* location, int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode& ec) +void WebGLRenderingContext::uniform4f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3199,7 +3195,7 @@ void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, Flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 4)) @@ -3209,7 +3205,7 @@ void WebGLRenderingContext::uniform4fv(const WebGLUniformLocation* location, flo cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode& ec) +void WebGLRenderingContext::uniform4i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, GC3Dint z, GC3Dint w, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !location) @@ -3234,7 +3230,7 @@ void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, Int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformParameters(location, v, size, 4)) @@ -3244,7 +3240,7 @@ void WebGLRenderingContext::uniform4iv(const WebGLUniformLocation* location, int cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, Float32Array* v, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, 4)) @@ -3253,7 +3249,7 @@ void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* locatio cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, size, 4)) @@ -3262,7 +3258,7 @@ void WebGLRenderingContext::uniformMatrix2fv(const WebGLUniformLocation* locatio cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, Float32Array* v, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, 9)) @@ -3271,7 +3267,7 @@ void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* locatio cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, size, 9)) @@ -3280,7 +3276,7 @@ void WebGLRenderingContext::uniformMatrix3fv(const WebGLUniformLocation* locatio cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, Float32Array* v, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, 16)) @@ -3289,7 +3285,7 @@ void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* locatio cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* v, int size, ExceptionCode& ec) +void WebGLRenderingContext::uniformMatrix4fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* v, GC3Dsizei size, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost() || !validateUniformMatrixParameters(location, transpose, v, size, 16)) @@ -3332,67 +3328,67 @@ void WebGLRenderingContext::validateProgram(WebGLProgram* program, ExceptionCode cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::vertexAttrib1f(unsigned long index, float v0) +void WebGLRenderingContext::vertexAttrib1f(GC3Duint index, GC3Dfloat v0) { vertexAttribfImpl(index, 1, v0, 0.0f, 0.0f, 1.0f); } -void WebGLRenderingContext::vertexAttrib1fv(unsigned long index, Float32Array* v) +void WebGLRenderingContext::vertexAttrib1fv(GC3Duint index, Float32Array* v) { vertexAttribfvImpl(index, v, 1); } -void WebGLRenderingContext::vertexAttrib1fv(unsigned long index, float* v, int size) +void WebGLRenderingContext::vertexAttrib1fv(GC3Duint index, GC3Dfloat* v, GC3Dsizei size) { vertexAttribfvImpl(index, v, size, 1); } -void WebGLRenderingContext::vertexAttrib2f(unsigned long index, float v0, float v1) +void WebGLRenderingContext::vertexAttrib2f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1) { vertexAttribfImpl(index, 2, v0, v1, 0.0f, 1.0f); } -void WebGLRenderingContext::vertexAttrib2fv(unsigned long index, Float32Array* v) +void WebGLRenderingContext::vertexAttrib2fv(GC3Duint index, Float32Array* v) { vertexAttribfvImpl(index, v, 2); } -void WebGLRenderingContext::vertexAttrib2fv(unsigned long index, float* v, int size) +void WebGLRenderingContext::vertexAttrib2fv(GC3Duint index, GC3Dfloat* v, GC3Dsizei size) { vertexAttribfvImpl(index, v, size, 2); } -void WebGLRenderingContext::vertexAttrib3f(unsigned long index, float v0, float v1, float v2) +void WebGLRenderingContext::vertexAttrib3f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2) { vertexAttribfImpl(index, 3, v0, v1, v2, 1.0f); } -void WebGLRenderingContext::vertexAttrib3fv(unsigned long index, Float32Array* v) +void WebGLRenderingContext::vertexAttrib3fv(GC3Duint index, Float32Array* v) { vertexAttribfvImpl(index, v, 3); } -void WebGLRenderingContext::vertexAttrib3fv(unsigned long index, float* v, int size) +void WebGLRenderingContext::vertexAttrib3fv(GC3Duint index, GC3Dfloat* v, GC3Dsizei size) { vertexAttribfvImpl(index, v, size, 3); } -void WebGLRenderingContext::vertexAttrib4f(unsigned long index, float v0, float v1, float v2, float v3) +void WebGLRenderingContext::vertexAttrib4f(GC3Duint index, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3) { vertexAttribfImpl(index, 4, v0, v1, v2, v3); } -void WebGLRenderingContext::vertexAttrib4fv(unsigned long index, Float32Array* v) +void WebGLRenderingContext::vertexAttrib4fv(GC3Duint index, Float32Array* v) { vertexAttribfvImpl(index, v, 4); } -void WebGLRenderingContext::vertexAttrib4fv(unsigned long index, float* v, int size) +void WebGLRenderingContext::vertexAttrib4fv(GC3Duint index, GC3Dfloat* v, GC3Dsizei size) { vertexAttribfvImpl(index, v, size, 4); } -void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size, unsigned long type, bool normalized, long stride, long offset, ExceptionCode& ec) +void WebGLRenderingContext::vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized, GC3Dsizei stride, GC3Dintptr offset, ExceptionCode& ec) { UNUSED_PARAM(ec); if (isContextLost()) @@ -3421,8 +3417,8 @@ void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size, return; } // Determine the number of elements the bound buffer can hold, given the offset, size, type and stride - long typeSize = sizeInBytes(type); - if (typeSize <= 0) { + unsigned int typeSize = sizeInBytes(type); + if (!typeSize) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); return; } @@ -3430,12 +3426,12 @@ void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size, m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return; } - long bytesPerElement = size * typeSize; + GC3Dsizei bytesPerElement = size * typeSize; if (index >= m_vertexAttribState.size()) m_vertexAttribState.resize(index + 1); - long validatedStride = stride ? stride : bytesPerElement; + GC3Dsizei validatedStride = stride ? stride : bytesPerElement; m_vertexAttribState[index].bufferBinding = m_boundArrayBuffer; m_vertexAttribState[index].bytesPerElement = bytesPerElement; @@ -3449,7 +3445,7 @@ void WebGLRenderingContext::vertexAttribPointer(unsigned long index, long size, cleanupAfterGraphicsCall(false); } -void WebGLRenderingContext::viewport(long x, long y, long width, long height) +void WebGLRenderingContext::viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height) { if (isContextLost()) return; @@ -3577,20 +3573,20 @@ WebGLShader* WebGLRenderingContext::findShader(Platform3DObject obj) return 0; } -WebGLGetInfo WebGLRenderingContext::getBooleanParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getBooleanParameter(GC3Denum pname) { - unsigned char value = 0; + GC3Dboolean value = 0; m_context->getBooleanv(pname, &value); return WebGLGetInfo(static_cast<bool>(value)); } -WebGLGetInfo WebGLRenderingContext::getBooleanArrayParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getBooleanArrayParameter(GC3Denum pname) { if (pname != GraphicsContext3D::COLOR_WRITEMASK) { notImplemented(); return WebGLGetInfo(0, 0); } - unsigned char value[4] = {0}; + GC3Dboolean value[4] = {0}; m_context->getBooleanv(pname, value); bool boolValue[4]; for (int ii = 0; ii < 4; ++ii) @@ -3598,36 +3594,36 @@ WebGLGetInfo WebGLRenderingContext::getBooleanArrayParameter(unsigned long pname return WebGLGetInfo(boolValue, 4); } -WebGLGetInfo WebGLRenderingContext::getFloatParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getFloatParameter(GC3Denum pname) { - float value = 0; + GC3Dfloat value = 0; m_context->getFloatv(pname, &value); - return WebGLGetInfo(static_cast<float>(value)); + return WebGLGetInfo(value); } -WebGLGetInfo WebGLRenderingContext::getIntParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getIntParameter(GC3Denum pname) { return getLongParameter(pname); } -WebGLGetInfo WebGLRenderingContext::getLongParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getLongParameter(GC3Denum pname) { - int value = 0; + GC3Dint value = 0; m_context->getIntegerv(pname, &value); return WebGLGetInfo(static_cast<long>(value)); } -WebGLGetInfo WebGLRenderingContext::getUnsignedLongParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getUnsignedLongParameter(GC3Denum pname) { - int value = 0; + GC3Dint value = 0; m_context->getIntegerv(pname, &value); - unsigned int uValue = static_cast<unsigned int>(value); + GC3Duint uValue = static_cast<GC3Duint>(value); return WebGLGetInfo(static_cast<unsigned long>(uValue)); } -WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(GC3Denum pname) { - float value[4] = {0}; + GC3Dfloat value[4] = {0}; m_context->getFloatv(pname, value); unsigned length = 0; switch (pname) { @@ -3646,9 +3642,9 @@ WebGLGetInfo WebGLRenderingContext::getWebGLFloatArrayParameter(unsigned long pn return WebGLGetInfo(Float32Array::create(value, length)); } -WebGLGetInfo WebGLRenderingContext::getWebGLIntArrayParameter(unsigned long pname) +WebGLGetInfo WebGLRenderingContext::getWebGLIntArrayParameter(GC3Denum pname) { - int value[4] = {0}; + GC3Dint value[4] = {0}; m_context->getIntegerv(pname, value); unsigned length = 0; switch (pname) { @@ -3722,8 +3718,8 @@ void WebGLRenderingContext::createFallbackBlackTextures1x1() m_context->bindTexture(GraphicsContext3D::TEXTURE_CUBE_MAP, 0); } -bool WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid(unsigned long texInternalFormat, - unsigned long colorBufferFormat) +bool WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid(GC3Denum texInternalFormat, + GC3Denum colorBufferFormat) { switch (colorBufferFormat) { case GraphicsContext3D::ALPHA: @@ -3741,7 +3737,7 @@ bool WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid(unsig return false; } -unsigned long WebGLRenderingContext::getBoundFramebufferColorFormat() +GC3Denum WebGLRenderingContext::getBoundFramebufferColorFormat() { if (m_framebufferBinding && m_framebufferBinding->object()) return m_framebufferBinding->getColorBufferFormat(); @@ -3764,7 +3760,7 @@ int WebGLRenderingContext::getBoundFramebufferHeight() return m_context->getInternalFramebufferSize().height(); } -WebGLTexture* WebGLRenderingContext::validateTextureBinding(unsigned long target, bool useSixEnumsForCubeMap) +WebGLTexture* WebGLRenderingContext::validateTextureBinding(GC3Denum target, bool useSixEnumsForCubeMap) { WebGLTexture* tex = 0; switch (target) { @@ -3799,7 +3795,7 @@ WebGLTexture* WebGLRenderingContext::validateTextureBinding(unsigned long target return tex; } -bool WebGLRenderingContext::validateSize(long x, long y) +bool WebGLRenderingContext::validateSize(GC3Dint x, GC3Dint y) { if (x < 0 || y < 0) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -3819,7 +3815,7 @@ bool WebGLRenderingContext::validateString(const String& string) return true; } -bool WebGLRenderingContext::validateTexFuncFormatAndType(unsigned long format, unsigned long type) +bool WebGLRenderingContext::validateTexFuncFormatAndType(GC3Denum format, GC3Denum type) { switch (format) { case GraphicsContext3D::ALPHA: @@ -3884,7 +3880,7 @@ bool WebGLRenderingContext::validateTexFuncFormatAndType(unsigned long format, u return true; } -bool WebGLRenderingContext::validateTexFuncLevel(unsigned long target, long level) +bool WebGLRenderingContext::validateTexFuncLevel(GC3Denum target, GC3Dint level) { if (level < 0) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -3914,10 +3910,10 @@ bool WebGLRenderingContext::validateTexFuncLevel(unsigned long target, long leve return true; } -bool WebGLRenderingContext::validateTexFuncParameters(unsigned long target, long level, - unsigned long internalformat, - long width, long height, long border, - unsigned long format, unsigned long type) +bool WebGLRenderingContext::validateTexFuncParameters(GC3Denum target, GC3Dint level, + GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type) { // We absolutely have to validate the format and type combination. // The texImage2D entry points taking HTMLImage, etc. will produce @@ -3966,8 +3962,8 @@ bool WebGLRenderingContext::validateTexFuncParameters(unsigned long target, long return true; } -bool WebGLRenderingContext::validateTexFuncData(long width, long height, - unsigned long format, unsigned long type, +bool WebGLRenderingContext::validateTexFuncData(GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels) { if (!pixels) @@ -4001,20 +3997,12 @@ bool WebGLRenderingContext::validateTexFuncData(long width, long height, ASSERT_NOT_REACHED(); } - unsigned int componentsPerPixel, bytesPerComponent; - if (!m_context->computeFormatAndTypeParameters(format, type, &componentsPerPixel, &bytesPerComponent)) { - m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); + unsigned int totalBytesRequired; + GC3Denum error = m_context->computeImageSizeInBytes(format, type, width, height, m_unpackAlignment, &totalBytesRequired, 0); + if (error != GraphicsContext3D::NO_ERROR) { + m_context->synthesizeGLError(error); return false; } - - if (!width || !height) - return true; - unsigned int validRowBytes = width * componentsPerPixel * bytesPerComponent; - unsigned int totalRowBytes = validRowBytes; - unsigned int remainder = validRowBytes % m_unpackAlignment; - if (remainder) - totalRowBytes += (m_unpackAlignment - remainder); - unsigned int totalBytesRequired = (height - 1) * totalRowBytes + validRowBytes; if (pixels->byteLength() < totalBytesRequired) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION); return false; @@ -4022,7 +4010,7 @@ bool WebGLRenderingContext::validateTexFuncData(long width, long height, return true; } -bool WebGLRenderingContext::validateDrawMode(unsigned long mode) +bool WebGLRenderingContext::validateDrawMode(GC3Denum mode) { switch (mode) { case GraphicsContext3D::POINTS: @@ -4048,7 +4036,7 @@ bool WebGLRenderingContext::validateStencilSettings() return true; } -bool WebGLRenderingContext::validateStencilFunc(unsigned long func) +bool WebGLRenderingContext::validateStencilFunc(GC3Denum func) { switch (func) { case GraphicsContext3D::NEVER: @@ -4072,7 +4060,7 @@ void WebGLRenderingContext::printWarningToConsole(const String& message) message, 0, canvas()->document()->url().string()); } -bool WebGLRenderingContext::validateFramebufferFuncParameters(unsigned long target, unsigned long attachment) +bool WebGLRenderingContext::validateFramebufferFuncParameters(GC3Denum target, GC3Denum attachment) { if (target != GraphicsContext3D::FRAMEBUFFER) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM); @@ -4091,7 +4079,7 @@ bool WebGLRenderingContext::validateFramebufferFuncParameters(unsigned long targ return true; } -bool WebGLRenderingContext::validateBlendEquation(unsigned long mode) +bool WebGLRenderingContext::validateBlendEquation(GC3Denum mode) { switch (mode) { case GraphicsContext3D::FUNC_ADD: @@ -4104,7 +4092,7 @@ bool WebGLRenderingContext::validateBlendEquation(unsigned long mode) } } -bool WebGLRenderingContext::validateBlendFuncFactors(unsigned long src, unsigned long dst) +bool WebGLRenderingContext::validateBlendFuncFactors(GC3Denum src, GC3Denum dst) { if (((src == GraphicsContext3D::CONSTANT_COLOR || src == GraphicsContext3D::ONE_MINUS_CONSTANT_COLOR) && (dst == GraphicsContext3D::CONSTANT_ALPHA || dst == GraphicsContext3D::ONE_MINUS_CONSTANT_ALPHA)) @@ -4116,7 +4104,7 @@ bool WebGLRenderingContext::validateBlendFuncFactors(unsigned long src, unsigned return true; } -bool WebGLRenderingContext::validateCapability(unsigned long cap) +bool WebGLRenderingContext::validateCapability(GC3Denum cap) { switch (cap) { case GraphicsContext3D::BLEND: @@ -4135,7 +4123,7 @@ bool WebGLRenderingContext::validateCapability(unsigned long cap) } } -bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, int requiredMinSize) +bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, GC3Dsizei requiredMinSize) { if (!v) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -4144,7 +4132,7 @@ bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation return validateUniformMatrixParameters(location, false, v->data(), v->length(), requiredMinSize); } -bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, int requiredMinSize) +bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, GC3Dsizei requiredMinSize) { if (!v) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -4153,12 +4141,12 @@ bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation return validateUniformMatrixParameters(location, false, v->data(), v->length(), requiredMinSize); } -bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, void* v, int size, int requiredMinSize) +bool WebGLRenderingContext::validateUniformParameters(const WebGLUniformLocation* location, void* v, GC3Dsizei size, GC3Dsizei requiredMinSize) { return validateUniformMatrixParameters(location, false, v, size, requiredMinSize); } -bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int requiredMinSize) +bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, GC3Dsizei requiredMinSize) { if (!v) { m_context->synthesizeGLError(GraphicsContext3D::INVALID_VALUE); @@ -4167,7 +4155,7 @@ bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLo return validateUniformMatrixParameters(location, transpose, v->data(), v->length(), requiredMinSize); } -bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int requiredMinSize) +bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, void* v, GC3Dsizei size, GC3Dsizei requiredMinSize) { if (!location) return false; @@ -4190,7 +4178,7 @@ bool WebGLRenderingContext::validateUniformMatrixParameters(const WebGLUniformLo return true; } -WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(unsigned long target, unsigned long usage) +WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(GC3Denum target, GC3Denum usage) { WebGLBuffer* buffer = 0; switch (target) { @@ -4218,7 +4206,7 @@ WebGLBuffer* WebGLRenderingContext::validateBufferDataParameters(unsigned long t return 0; } -void WebGLRenderingContext::vertexAttribfImpl(unsigned long index, int expectedSize, float v0, float v1, float v2, float v3) +void WebGLRenderingContext::vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3) { if (isContextLost()) return; @@ -4252,7 +4240,7 @@ void WebGLRenderingContext::vertexAttribfImpl(unsigned long index, int expectedS m_vertexAttribState[index].value[3] = v3; } -void WebGLRenderingContext::vertexAttribfvImpl(unsigned long index, Float32Array* v, int expectedSize) +void WebGLRenderingContext::vertexAttribfvImpl(GC3Duint index, Float32Array* v, GC3Dsizei expectedSize) { if (isContextLost()) return; @@ -4263,7 +4251,7 @@ void WebGLRenderingContext::vertexAttribfvImpl(unsigned long index, Float32Array vertexAttribfvImpl(index, v->data(), v->length(), expectedSize); } -void WebGLRenderingContext::vertexAttribfvImpl(unsigned long index, float* v, int size, int expectedSize) +void WebGLRenderingContext::vertexAttribfvImpl(GC3Duint index, GC3Dfloat* v, GC3Dsizei size, GC3Dsizei expectedSize) { if (isContextLost()) return; @@ -4321,21 +4309,21 @@ void WebGLRenderingContext::initVertexAttrib0() m_vertexAttrib0BufferValue[3] = 1.0f; } -bool WebGLRenderingContext::simulateVertexAttrib0(long numVertex) +bool WebGLRenderingContext::simulateVertexAttrib0(GC3Dsizei numVertex) { const VertexAttribState& state = m_vertexAttribState[0]; if (state.enabled || !m_currentProgram || !m_currentProgram->object() || !m_currentProgram->isUsingVertexAttrib0()) return false; m_context->bindBuffer(GraphicsContext3D::ARRAY_BUFFER, m_vertexAttrib0Buffer->object()); - long bufferDataSize = (numVertex + 1) * 4 * sizeof(float); + GC3Dsizeiptr bufferDataSize = (numVertex + 1) * 4 * sizeof(GC3Dfloat); if (bufferDataSize > m_vertexAttrib0BufferSize || state.value[0] != m_vertexAttrib0BufferValue[0] || state.value[1] != m_vertexAttrib0BufferValue[1] || state.value[2] != m_vertexAttrib0BufferValue[2] || state.value[3] != m_vertexAttrib0BufferValue[3]) { - OwnArrayPtr<float> bufferData(new float[(numVertex + 1) * 4]); - for (long ii = 0; ii < numVertex + 1; ++ii) { + OwnArrayPtr<GC3Dfloat> bufferData(new GC3Dfloat[(numVertex + 1) * 4]); + for (GC3Dsizei ii = 0; ii < numVertex + 1; ++ii) { bufferData[ii * 4] = state.value[0]; bufferData[ii * 4 + 1] = state.value[1]; bufferData[ii * 4 + 2] = state.value[2]; @@ -4348,7 +4336,7 @@ bool WebGLRenderingContext::simulateVertexAttrib0(long numVertex) m_vertexAttrib0BufferValue[2] = state.value[2]; m_vertexAttrib0BufferValue[3] = state.value[3]; } - m_context->vertexAttribPointer(0, 4, GraphicsContext3D::FLOAT, false, 0, 0); + m_context->vertexAttribPointer(0, 4, GraphicsContext3D::FLOAT, 0, 0, 0); return true; } diff --git a/Source/WebCore/html/canvas/WebGLRenderingContext.h b/Source/WebCore/html/canvas/WebGLRenderingContext.h index c40847f..d9b738c 100644 --- a/Source/WebCore/html/canvas/WebGLRenderingContext.h +++ b/Source/WebCore/html/canvas/WebGLRenderingContext.h @@ -68,47 +68,47 @@ public: virtual bool isAccelerated() const { return true; } virtual bool paintsIntoCanvasBuffer() const; - void activeTexture(unsigned long texture, ExceptionCode& ec); + void activeTexture(GC3Denum texture, ExceptionCode& ec); void attachShader(WebGLProgram*, WebGLShader*, ExceptionCode& ec); - void bindAttribLocation(WebGLProgram*, unsigned long index, const String& name, ExceptionCode& ec); - void bindBuffer(unsigned long target, WebGLBuffer*, ExceptionCode& ec); - void bindFramebuffer(unsigned long target, WebGLFramebuffer*, ExceptionCode& ec); - void bindRenderbuffer(unsigned long target, WebGLRenderbuffer*, ExceptionCode& ec); - void bindTexture(unsigned long target, WebGLTexture*, ExceptionCode& ec); - void blendColor(float red, float green, float blue, float alpha); - void blendEquation(unsigned long mode); - void blendEquationSeparate(unsigned long modeRGB, unsigned long modeAlpha); - void blendFunc(unsigned long sfactor, unsigned long dfactor); - void blendFuncSeparate(unsigned long srcRGB, unsigned long dstRGB, unsigned long srcAlpha, unsigned long dstAlpha); - - void bufferData(unsigned long target, int size, unsigned long usage, ExceptionCode&); - void bufferData(unsigned long target, ArrayBuffer* data, unsigned long usage, ExceptionCode&); - void bufferData(unsigned long target, ArrayBufferView* data, unsigned long usage, ExceptionCode&); - void bufferSubData(unsigned long target, long offset, ArrayBuffer* data, ExceptionCode&); - void bufferSubData(unsigned long target, long offset, ArrayBufferView* data, ExceptionCode&); - - unsigned long checkFramebufferStatus(unsigned long target); - void clear(unsigned long mask); - void clearColor(float red, float green, float blue, float alpha); - void clearDepth(float); - void clearStencil(long); - void colorMask(bool red, bool green, bool blue, bool alpha); + void bindAttribLocation(WebGLProgram*, GC3Duint index, const String& name, ExceptionCode& ec); + void bindBuffer(GC3Denum target, WebGLBuffer*, ExceptionCode& ec); + void bindFramebuffer(GC3Denum target, WebGLFramebuffer*, ExceptionCode& ec); + void bindRenderbuffer(GC3Denum target, WebGLRenderbuffer*, ExceptionCode& ec); + void bindTexture(GC3Denum target, WebGLTexture*, ExceptionCode& ec); + void blendColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat alpha); + void blendEquation(GC3Denum mode); + void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha); + void blendFunc(GC3Denum sfactor, GC3Denum dfactor); + void blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha); + + void bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage, ExceptionCode&); + void bufferData(GC3Denum target, ArrayBuffer* data, GC3Denum usage, ExceptionCode&); + void bufferData(GC3Denum target, ArrayBufferView* data, GC3Denum usage, ExceptionCode&); + void bufferSubData(GC3Denum target, GC3Dintptr offset, ArrayBuffer* data, ExceptionCode&); + void bufferSubData(GC3Denum target, GC3Dintptr offset, ArrayBufferView* data, ExceptionCode&); + + GC3Denum checkFramebufferStatus(GC3Denum target); + void clear(GC3Dbitfield mask); + void clearColor(GC3Dfloat red, GC3Dfloat green, GC3Dfloat blue, GC3Dfloat alpha); + void clearDepth(GC3Dfloat); + void clearStencil(GC3Dint); + void colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha); void compileShader(WebGLShader*, ExceptionCode& ec); - // void compressedTexImage2D(unsigned long target, long level, unsigned long internalformat, unsigned long width, unsigned long height, long border, unsigned long imageSize, const void* data); - // void compressedTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, unsigned long width, unsigned long height, unsigned long format, unsigned long imageSize, const void* data); + // void compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Dsizei imageSize, const void* data); + // void compressedTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei GC3Dsizei height, GC3Denum format, GC3Dsizei imageSize, const void* data); - void copyTexImage2D(unsigned long target, long level, unsigned long internalformat, long x, long y, long width, long height, long border); - void copyTexSubImage2D(unsigned long target, long level, long xoffset, long yoffset, long x, long y, long width, long height); + void copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border); + void copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); PassRefPtr<WebGLBuffer> createBuffer(); PassRefPtr<WebGLFramebuffer> createFramebuffer(); PassRefPtr<WebGLProgram> createProgram(); PassRefPtr<WebGLRenderbuffer> createRenderbuffer(); - PassRefPtr<WebGLShader> createShader(unsigned long type, ExceptionCode&); + PassRefPtr<WebGLShader> createShader(GC3Denum type, ExceptionCode&); PassRefPtr<WebGLTexture> createTexture(); - void cullFace(unsigned long mode); + void cullFace(GC3Denum mode); void deleteBuffer(WebGLBuffer*); void deleteFramebuffer(WebGLFramebuffer*); @@ -117,173 +117,155 @@ public: void deleteShader(WebGLShader*); void deleteTexture(WebGLTexture*); - void depthFunc(unsigned long); - void depthMask(bool); - void depthRange(float zNear, float zFar); + void depthFunc(GC3Denum); + void depthMask(GC3Dboolean); + void depthRange(GC3Dfloat zNear, GC3Dfloat zFar); void detachShader(WebGLProgram*, WebGLShader*, ExceptionCode&); - void disable(unsigned long cap); - void disableVertexAttribArray(unsigned long index, ExceptionCode&); - void drawArrays(unsigned long mode, long first, long count, ExceptionCode&); - void drawElements(unsigned long mode, long count, unsigned long type, long offset, ExceptionCode&); + void disable(GC3Denum cap); + void disableVertexAttribArray(GC3Duint index, ExceptionCode&); + void drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count, ExceptionCode&); + void drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset, ExceptionCode&); - void enable(unsigned long cap); - void enableVertexAttribArray(unsigned long index, ExceptionCode&); + void enable(GC3Denum cap); + void enableVertexAttribArray(GC3Duint index, ExceptionCode&); void finish(); void flush(); - void framebufferRenderbuffer(unsigned long target, unsigned long attachment, unsigned long renderbuffertarget, WebGLRenderbuffer*, ExceptionCode& ec); - void framebufferTexture2D(unsigned long target, unsigned long attachment, unsigned long textarget, WebGLTexture*, long level, ExceptionCode& ec); - void frontFace(unsigned long mode); - void generateMipmap(unsigned long target); - - PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, unsigned long index, ExceptionCode&); - PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, unsigned long index, ExceptionCode&); + void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, WebGLRenderbuffer*, ExceptionCode& ec); + void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, WebGLTexture*, GC3Dint level, ExceptionCode& ec); + void frontFace(GC3Denum mode); + void generateMipmap(GC3Denum target); + PassRefPtr<WebGLActiveInfo> getActiveAttrib(WebGLProgram*, GC3Duint index, ExceptionCode&); + PassRefPtr<WebGLActiveInfo> getActiveUniform(WebGLProgram*, GC3Duint index, ExceptionCode&); bool getAttachedShaders(WebGLProgram*, Vector<WebGLShader*>&, ExceptionCode&); - - int getAttribLocation(WebGLProgram*, const String& name); - - WebGLGetInfo getBufferParameter(unsigned long target, unsigned long pname, ExceptionCode&); - + GC3Dint getAttribLocation(WebGLProgram*, const String& name); + WebGLGetInfo getBufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode&); PassRefPtr<WebGLContextAttributes> getContextAttributes(); - - unsigned long getError(); - + GC3Denum getError(); WebGLExtension* getExtension(const String& name); - - WebGLGetInfo getFramebufferAttachmentParameter(unsigned long target, unsigned long attachment, unsigned long pname, ExceptionCode&); - - WebGLGetInfo getParameter(unsigned long pname, ExceptionCode&); - - WebGLGetInfo getProgramParameter(WebGLProgram*, unsigned long pname, ExceptionCode&); - + WebGLGetInfo getFramebufferAttachmentParameter(GC3Denum target, GC3Denum attachment, GC3Denum pname, ExceptionCode&); + WebGLGetInfo getParameter(GC3Denum pname, ExceptionCode&); + WebGLGetInfo getProgramParameter(WebGLProgram*, GC3Denum pname, ExceptionCode&); String getProgramInfoLog(WebGLProgram*, ExceptionCode& ec); - - WebGLGetInfo getRenderbufferParameter(unsigned long target, unsigned long pname, ExceptionCode&); - - WebGLGetInfo getShaderParameter(WebGLShader*, unsigned long pname, ExceptionCode& ec); - + WebGLGetInfo getRenderbufferParameter(GC3Denum target, GC3Denum pname, ExceptionCode&); + WebGLGetInfo getShaderParameter(WebGLShader*, GC3Denum pname, ExceptionCode& ec); String getShaderInfoLog(WebGLShader*, ExceptionCode& ec); // TBD - // void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); + // void glGetShaderPrecisionFormat (GC3Denum shadertype, GC3Denum precisiontype, GC3Dint* range, GC3Dint* precision); String getShaderSource(WebGLShader*, ExceptionCode&); - Vector<String> getSupportedExtensions(); - - WebGLGetInfo getTexParameter(unsigned long target, unsigned long pname, ExceptionCode&); - + WebGLGetInfo getTexParameter(GC3Denum target, GC3Denum pname, ExceptionCode&); WebGLGetInfo getUniform(WebGLProgram*, const WebGLUniformLocation*, ExceptionCode&); - PassRefPtr<WebGLUniformLocation> getUniformLocation(WebGLProgram*, const String&, ExceptionCode&); + WebGLGetInfo getVertexAttrib(GC3Duint index, GC3Denum pname, ExceptionCode&); + GC3Dsizeiptr getVertexAttribOffset(GC3Duint index, GC3Denum pname); - WebGLGetInfo getVertexAttrib(unsigned long index, unsigned long pname, ExceptionCode&); - - long getVertexAttribOffset(unsigned long index, unsigned long pname); - - void hint(unsigned long target, unsigned long mode); - bool isBuffer(WebGLBuffer*); + void hint(GC3Denum target, GC3Denum mode); + GC3Dboolean isBuffer(WebGLBuffer*); bool isContextLost(); - bool isEnabled(unsigned long cap); - bool isFramebuffer(WebGLFramebuffer*); - bool isProgram(WebGLProgram*); - bool isRenderbuffer(WebGLRenderbuffer*); - bool isShader(WebGLShader*); - bool isTexture(WebGLTexture*); - void lineWidth(float); + GC3Dboolean isEnabled(GC3Denum cap); + GC3Dboolean isFramebuffer(WebGLFramebuffer*); + GC3Dboolean isProgram(WebGLProgram*); + GC3Dboolean isRenderbuffer(WebGLRenderbuffer*); + GC3Dboolean isShader(WebGLShader*); + GC3Dboolean isTexture(WebGLTexture*); + + void lineWidth(GC3Dfloat); void linkProgram(WebGLProgram*, ExceptionCode&); - void pixelStorei(unsigned long pname, long param); - void polygonOffset(float factor, float units); - void readPixels(long x, long y, long width, long height, unsigned long format, unsigned long type, ArrayBufferView* pixels, ExceptionCode&); + void pixelStorei(GC3Denum pname, GC3Dint param); + void polygonOffset(GC3Dfloat factor, GC3Dfloat units); + void readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode&); void releaseShaderCompiler(); - void renderbufferStorage(unsigned long target, unsigned long internalformat, long width, long height); - void sampleCoverage(float value, bool invert); - void scissor(long x, long y, long width, long height); + void renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height); + void sampleCoverage(GC3Dfloat value, GC3Dboolean invert); + void scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); void shaderSource(WebGLShader*, const String&, ExceptionCode&); - void stencilFunc(unsigned long func, long ref, unsigned long mask); - void stencilFuncSeparate(unsigned long face, unsigned long func, long ref, unsigned long mask); - void stencilMask(unsigned long); - void stencilMaskSeparate(unsigned long face, unsigned long mask); - void stencilOp(unsigned long fail, unsigned long zfail, unsigned long zpass); - void stencilOpSeparate(unsigned long face, unsigned long fail, unsigned long zfail, unsigned long zpass); - - void texImage2D(unsigned target, unsigned level, unsigned internalformat, - int width, int height, unsigned border, - unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&); - void texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, ImageData* pixels, ExceptionCode&); - void texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&); - void texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&); - void texImage2D(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&); - - void texParameterf(unsigned target, unsigned pname, float param); - void texParameteri(unsigned target, unsigned pname, int param); - - void texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - int width, int height, - unsigned format, unsigned type, ArrayBufferView* pixels, ExceptionCode&); - void texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, ImageData* pixels, ExceptionCode&); - void texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLImageElement* image, ExceptionCode&); - void texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLCanvasElement* canvas, ExceptionCode&); - void texSubImage2D(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, HTMLVideoElement* video, ExceptionCode&); - - void uniform1f(const WebGLUniformLocation* location, float x, ExceptionCode&); + void stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask); + void stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask); + void stencilMask(GC3Duint); + void stencilMaskSeparate(GC3Denum face, GC3Duint mask); + void stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass); + void stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass); + + void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode&); + void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode&); + void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode&); + void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode&); + void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode&); + + void texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param); + void texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param); + + void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels, ExceptionCode&); + void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, ImageData* pixels, ExceptionCode&); + void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLImageElement* image, ExceptionCode&); + void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLCanvasElement* canvas, ExceptionCode&); + void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, HTMLVideoElement* video, ExceptionCode&); + + void uniform1f(const WebGLUniformLocation* location, GC3Dfloat x, ExceptionCode&); void uniform1fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&); - void uniform1fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&); - void uniform1i(const WebGLUniformLocation* location, int x, ExceptionCode&); + void uniform1fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode&); + void uniform1i(const WebGLUniformLocation* location, GC3Dint x, ExceptionCode&); void uniform1iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&); - void uniform1iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&); - void uniform2f(const WebGLUniformLocation* location, float x, float y, ExceptionCode&); + void uniform1iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode&); + void uniform2f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, ExceptionCode&); void uniform2fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&); - void uniform2fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&); - void uniform2i(const WebGLUniformLocation* location, int x, int y, ExceptionCode&); + void uniform2fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode&); + void uniform2i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, ExceptionCode&); void uniform2iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&); - void uniform2iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&); - void uniform3f(const WebGLUniformLocation* location, float x, float y, float z, ExceptionCode&); + void uniform2iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode&); + void uniform3f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, ExceptionCode&); void uniform3fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&); - void uniform3fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&); - void uniform3i(const WebGLUniformLocation* location, int x, int y, int z, ExceptionCode&); + void uniform3fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode&); + void uniform3i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, GC3Dint z, ExceptionCode&); void uniform3iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&); - void uniform3iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&); - void uniform4f(const WebGLUniformLocation* location, float x, float y, float z, float w, ExceptionCode&); + void uniform3iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode&); + void uniform4f(const WebGLUniformLocation* location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w, ExceptionCode&); void uniform4fv(const WebGLUniformLocation* location, Float32Array* v, ExceptionCode&); - void uniform4fv(const WebGLUniformLocation* location, float* v, int size, ExceptionCode&); - void uniform4i(const WebGLUniformLocation* location, int x, int y, int z, int w, ExceptionCode&); + void uniform4fv(const WebGLUniformLocation* location, GC3Dfloat* v, GC3Dsizei size, ExceptionCode&); + void uniform4i(const WebGLUniformLocation* location, GC3Dint x, GC3Dint y, GC3Dint z, GC3Dint w, ExceptionCode&); void uniform4iv(const WebGLUniformLocation* location, Int32Array* v, ExceptionCode&); - void uniform4iv(const WebGLUniformLocation* location, int* v, int size, ExceptionCode&); - void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&); - void uniformMatrix2fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&); - void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&); - void uniformMatrix3fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&); - void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, Float32Array* value, ExceptionCode&); - void uniformMatrix4fv(const WebGLUniformLocation* location, bool transpose, float* value, int size, ExceptionCode&); + void uniform4iv(const WebGLUniformLocation* location, GC3Dint* v, GC3Dsizei size, ExceptionCode&); + void uniformMatrix2fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* value, ExceptionCode&); + void uniformMatrix2fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size, ExceptionCode&); + void uniformMatrix3fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* value, ExceptionCode&); + void uniformMatrix3fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size, ExceptionCode&); + void uniformMatrix4fv(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* value, ExceptionCode&); + void uniformMatrix4fv(const WebGLUniformLocation* location, GC3Dboolean transpose, GC3Dfloat* value, GC3Dsizei size, ExceptionCode&); void useProgram(WebGLProgram*, ExceptionCode&); void validateProgram(WebGLProgram*, ExceptionCode&); - void vertexAttrib1f(unsigned long index, float x); - void vertexAttrib1fv(unsigned long index, Float32Array* values); - void vertexAttrib1fv(unsigned long index, float* values, int size); - void vertexAttrib2f(unsigned long index, float x, float y); - void vertexAttrib2fv(unsigned long index, Float32Array* values); - void vertexAttrib2fv(unsigned long index, float* values, int size); - void vertexAttrib3f(unsigned long index, float x, float y, float z); - void vertexAttrib3fv(unsigned long index, Float32Array* values); - void vertexAttrib3fv(unsigned long index, float* values, int size); - void vertexAttrib4f(unsigned long index, float x, float y, float z, float w); - void vertexAttrib4fv(unsigned long index, Float32Array* values); - void vertexAttrib4fv(unsigned long index, float* values, int size); - void vertexAttribPointer(unsigned long index, long size, unsigned long type, bool normalized, - long stride, long offset, ExceptionCode&); - - void viewport(long x, long y, long width, long height); + void vertexAttrib1f(GC3Duint index, GC3Dfloat x); + void vertexAttrib1fv(GC3Duint index, Float32Array* values); + void vertexAttrib1fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); + void vertexAttrib2f(GC3Duint index, GC3Dfloat x, GC3Dfloat y); + void vertexAttrib2fv(GC3Duint index, Float32Array* values); + void vertexAttrib2fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); + void vertexAttrib3f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z); + void vertexAttrib3fv(GC3Duint index, Float32Array* values); + void vertexAttrib3fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); + void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w); + void vertexAttrib4fv(GC3Duint index, Float32Array* values); + void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values, GC3Dsizei size); + void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized, + GC3Dsizei stride, GC3Dintptr offset, ExceptionCode&); + + void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); void forceLostContext(); void onLostContext(); @@ -338,18 +320,18 @@ public: // Helper to return the size in bytes of OpenGL data types // like GL_FLOAT, GL_INT, etc. - int sizeInBytes(int type); + unsigned int sizeInBytes(GC3Denum type); // Basic validation of count and offset against number of elements in element array buffer - bool validateElementArraySize(unsigned long count, unsigned long type, long offset); + bool validateElementArraySize(GC3Dsizei count, GC3Denum type, GC3Dintptr offset); // Conservative but quick index validation - bool validateIndexArrayConservative(unsigned long type, long& numElementsRequired); + bool validateIndexArrayConservative(GC3Denum type, int& numElementsRequired); // Precise but slow index validation -- only done if conservative checks fail - bool validateIndexArrayPrecise(unsigned long count, unsigned long type, long offset, long& numElementsRequired); + bool validateIndexArrayPrecise(GC3Dsizei count, GC3Denum type, GC3Dintptr offset, int& numElementsRequired); // If numElements <= 0, we only check if each enabled vertex attribute is bound to a buffer. - bool validateRenderingState(long numElements); + bool validateRenderingState(int numElements); bool validateWebGLObject(WebGLObject* object); @@ -401,21 +383,21 @@ public: bool enabled; RefPtr<WebGLBuffer> bufferBinding; - long bytesPerElement; - long size; - unsigned long type; + GC3Dsizei bytesPerElement; + GC3Dint size; + GC3Denum type; bool normalized; - long stride; - long originalStride; - long offset; - float value[4]; + GC3Dsizei stride; + GC3Dsizei originalStride; + GC3Dintptr offset; + GC3Dfloat value[4]; }; Vector<VertexAttribState> m_vertexAttribState; unsigned m_maxVertexAttribs; RefPtr<WebGLBuffer> m_vertexAttrib0Buffer; long m_vertexAttrib0BufferSize; - float m_vertexAttrib0BufferValue[4]; + GC3Dfloat m_vertexAttrib0BufferValue[4]; RefPtr<WebGLProgram> m_currentProgram; RefPtr<WebGLFramebuffer> m_framebufferBinding; @@ -444,23 +426,23 @@ public: }; LRUImageBufferCache m_videoCache; - int m_maxTextureSize; - int m_maxCubeMapTextureSize; - int m_maxTextureLevel; - int m_maxCubeMapTextureLevel; + GC3Dint m_maxTextureSize; + GC3Dint m_maxCubeMapTextureSize; + GC3Dint m_maxTextureLevel; + GC3Dint m_maxCubeMapTextureLevel; - int m_packAlignment; - int m_unpackAlignment; + GC3Dint m_packAlignment; + GC3Dint m_unpackAlignment; bool m_unpackFlipY; bool m_unpackPremultiplyAlpha; - unsigned long m_unpackColorspaceConversion; + GC3Denum m_unpackColorspaceConversion; bool m_contextLost; GraphicsContext3D::Attributes m_attributes; long m_stencilBits; - unsigned long m_stencilMask, m_stencilMaskBack; - long m_stencilFuncRef, m_stencilFuncRefBack; // Note that these are the user specified values, not the internal clamped value. - unsigned long m_stencilFuncMask, m_stencilFuncMaskBack; + GC3Duint m_stencilMask, m_stencilMaskBack; + GC3Dint m_stencilFuncRef, m_stencilFuncRefBack; // Note that these are the user specified values, not the internal clamped value. + GC3Duint m_stencilFuncMask, m_stencilFuncMaskBack; bool m_isGLES2Compliant; bool m_isGLES2NPOTStrict; @@ -473,26 +455,26 @@ public: RefPtr<WebKitLoseContext> m_webkitLoseContext; // Helpers for getParameter and others - WebGLGetInfo getBooleanParameter(unsigned long pname); - WebGLGetInfo getBooleanArrayParameter(unsigned long pname); - WebGLGetInfo getFloatParameter(unsigned long pname); - WebGLGetInfo getIntParameter(unsigned long pname); - WebGLGetInfo getLongParameter(unsigned long pname); - WebGLGetInfo getUnsignedLongParameter(unsigned long pname); - WebGLGetInfo getWebGLFloatArrayParameter(unsigned long pname); - WebGLGetInfo getWebGLIntArrayParameter(unsigned long pname); - - void texImage2DBase(unsigned target, unsigned level, unsigned internalformat, - int width, int height, unsigned border, - unsigned format, unsigned type, void* pixels, ExceptionCode&); - void texImage2DImpl(unsigned target, unsigned level, unsigned internalformat, - unsigned format, unsigned type, Image* image, + WebGLGetInfo getBooleanParameter(GC3Denum pname); + WebGLGetInfo getBooleanArrayParameter(GC3Denum pname); + WebGLGetInfo getFloatParameter(GC3Denum pname); + WebGLGetInfo getIntParameter(GC3Denum pname); + WebGLGetInfo getLongParameter(GC3Denum pname); + WebGLGetInfo getUnsignedLongParameter(GC3Denum pname); + WebGLGetInfo getWebGLFloatArrayParameter(GC3Denum pname); + WebGLGetInfo getWebGLIntArrayParameter(GC3Denum pname); + + void texImage2DBase(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type, void* pixels, ExceptionCode&); + void texImage2DImpl(GC3Denum target, GC3Dint level, GC3Denum internalformat, + GC3Denum format, GC3Denum type, Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode&); - void texSubImage2DBase(unsigned target, unsigned level, int xoffset, int yoffset, - int width, int height, - unsigned format, unsigned type, void* pixels, ExceptionCode&); - void texSubImage2DImpl(unsigned target, unsigned level, int xoffset, int yoffset, - unsigned format, unsigned type, + void texSubImage2DBase(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, void* pixels, ExceptionCode&); + void texSubImage2DImpl(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, + GC3Denum format, GC3Denum type, Image* image, bool flipY, bool premultiplyAlpha, ExceptionCode&); void handleNPOTTextures(bool prepareToDraw); @@ -502,11 +484,11 @@ public: // Helper function for copyTex{Sub}Image, check whether the internalformat // and the color buffer format of the current bound framebuffer combination // is valid. - bool isTexInternalFormatColorBufferCombinationValid(unsigned long texInternalFormat, - unsigned long colorBufferFormat); + bool isTexInternalFormatColorBufferCombinationValid(GC3Denum texInternalFormat, + GC3Denum colorBufferFormat); // Helper function to get the bound framebuffer's color buffer format. - unsigned long getBoundFramebufferColorFormat(); + GC3Denum getBoundFramebufferColorFormat(); // Helper function to get the bound framebuffer's width. int getBoundFramebufferWidth(); @@ -516,7 +498,7 @@ public: // Helper function to check if size is non-negative. // Generate GL error and return false for negative inputs; otherwise, return true. - bool validateSize(long x, long y); + bool validateSize(GC3Dint x, GC3Dint y); // Helper function to check if all characters in the string belong to the // ASCII subset as defined in GLSL ES 1.0 spec section 3.1. @@ -525,41 +507,41 @@ public: // Helper function to check target and texture bound to the target. // Generate GL errors and return 0 if target is invalid or texture bound is // null. Otherwise, return the texture bound to the target. - WebGLTexture* validateTextureBinding(unsigned long target, bool useSixEnumsForCubeMap); + WebGLTexture* validateTextureBinding(GC3Denum target, bool useSixEnumsForCubeMap); // Helper function to check input format/type for functions {copy}Tex{Sub}Image. // Generates GL error and returns false if parameters are invalid. - bool validateTexFuncFormatAndType(unsigned long format, unsigned long type); + bool validateTexFuncFormatAndType(GC3Denum format, GC3Denum type); // Helper function to check input level for functions {copy}Tex{Sub}Image. // Generates GL error and returns false if level is invalid. - bool validateTexFuncLevel(unsigned long target, long level); + bool validateTexFuncLevel(GC3Denum target, GC3Dint level); // Helper function to check input parameters for functions {copy}Tex{Sub}Image. // Generates GL error and returns false if parameters are invalid. - bool validateTexFuncParameters(unsigned long target, long level, - unsigned long internalformat, - long width, long height, long border, - unsigned long format, unsigned long type); + bool validateTexFuncParameters(GC3Denum target, GC3Dint level, + GC3Denum internalformat, + GC3Dsizei width, GC3Dsizei height, GC3Dint border, + GC3Denum format, GC3Denum type); // Helper function to validate that the given ArrayBufferView // is of the correct type and contains enough data for the texImage call. // Generates GL error and returns false if parameters are invalid. - bool validateTexFuncData(long width, long height, - unsigned long format, unsigned long type, + bool validateTexFuncData(GC3Dsizei width, GC3Dsizei height, + GC3Denum format, GC3Denum type, ArrayBufferView* pixels); // Helper function to validate mode for draw{Arrays/Elements}. - bool validateDrawMode(unsigned long); + bool validateDrawMode(GC3Denum); // Helper function to validate if front/back stencilMask and stencilFunc settings are the same. bool validateStencilSettings(); // Helper function to validate stencil func. - bool validateStencilFunc(unsigned long); + bool validateStencilFunc(GC3Denum); // Helper function for texParameterf and texParameteri. - void texParameter(unsigned long target, unsigned long pname, float parami, int paramf, bool isFloat); + void texParameter(GC3Denum target, GC3Denum pname, GC3Dfloat parami, GC3Dint paramf, bool isFloat); // Helper function to print warnings to console. Currently // used only to warn about use of obsolete functions. @@ -567,36 +549,36 @@ public: // Helper function to validate input parameters for framebuffer functions. // Generate GL error if parameters are illegal. - bool validateFramebufferFuncParameters(unsigned long target, unsigned long attachment); + bool validateFramebufferFuncParameters(GC3Denum target, GC3Denum attachment); // Helper function to validate blend equation mode. - bool validateBlendEquation(unsigned long); + bool validateBlendEquation(GC3Denum); // Helper function to validate blend func factors. - bool validateBlendFuncFactors(unsigned long src, unsigned long dst); + bool validateBlendFuncFactors(GC3Denum src, GC3Denum dst); // Helper function to validate a GL capability. - bool validateCapability(unsigned long); + bool validateCapability(GC3Denum); // Helper function to validate input parameters for uniform functions. - bool validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, int mod); - bool validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, int mod); - bool validateUniformParameters(const WebGLUniformLocation* location, void* v, int size, int mod); - bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, Float32Array* v, int mod); - bool validateUniformMatrixParameters(const WebGLUniformLocation* location, bool transpose, void* v, int size, int mod); + bool validateUniformParameters(const WebGLUniformLocation* location, Float32Array* v, GC3Dsizei mod); + bool validateUniformParameters(const WebGLUniformLocation* location, Int32Array* v, GC3Dsizei mod); + bool validateUniformParameters(const WebGLUniformLocation* location, void* v, GC3Dsizei size, GC3Dsizei mod); + bool validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, Float32Array* v, GC3Dsizei mod); + bool validateUniformMatrixParameters(const WebGLUniformLocation* location, GC3Dboolean transpose, void* v, GC3Dsizei size, GC3Dsizei mod); // Helper function to validate parameters for bufferData. // Return the current bound buffer to target, or 0 if parameters are invalid. - WebGLBuffer* validateBufferDataParameters(unsigned long target, unsigned long usage); + WebGLBuffer* validateBufferDataParameters(GC3Denum target, GC3Denum usage); // 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); - void vertexAttribfvImpl(unsigned long index, float* v, int size, int expectedSize); + void vertexAttribfImpl(GC3Duint index, GC3Dsizei expectedSize, GC3Dfloat v0, GC3Dfloat v1, GC3Dfloat v2, GC3Dfloat v3); + void vertexAttribfvImpl(GC3Duint index, Float32Array* v, GC3Dsizei expectedSize); + void vertexAttribfvImpl(GC3Duint index, GC3Dfloat* v, GC3Dsizei size, GC3Dsizei expectedSize); // Helpers for simulating vertexAttrib0 void initVertexAttrib0(); - bool simulateVertexAttrib0(long numVertex); + bool simulateVertexAttrib0(GC3Dsizei numVertex); void restoreStatesAfterVertexAttrib0Simulation(); friend class WebGLStateRestorer; diff --git a/Source/WebCore/html/canvas/WebGLShader.cpp b/Source/WebCore/html/canvas/WebGLShader.cpp index 4f8bf68..a07023f 100644 --- a/Source/WebCore/html/canvas/WebGLShader.cpp +++ b/Source/WebCore/html/canvas/WebGLShader.cpp @@ -33,12 +33,12 @@ namespace WebCore { -PassRefPtr<WebGLShader> WebGLShader::create(WebGLRenderingContext* ctx, GraphicsContext3D::WebGLEnumType type) +PassRefPtr<WebGLShader> WebGLShader::create(WebGLRenderingContext* ctx, GC3Denum type) { return adoptRef(new WebGLShader(ctx, type)); } -WebGLShader::WebGLShader(WebGLRenderingContext* ctx, GraphicsContext3D::WebGLEnumType type) +WebGLShader::WebGLShader(WebGLRenderingContext* ctx, GC3Denum type) : WebGLObject(ctx) , m_type(type) { diff --git a/Source/WebCore/html/canvas/WebGLShader.h b/Source/WebCore/html/canvas/WebGLShader.h index c0c41df..5deaf20 100644 --- a/Source/WebCore/html/canvas/WebGLShader.h +++ b/Source/WebCore/html/canvas/WebGLShader.h @@ -37,18 +37,18 @@ class WebGLShader : public WebGLObject { public: virtual ~WebGLShader() { deleteObject(); } - static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType); + static PassRefPtr<WebGLShader> create(WebGLRenderingContext*, GC3Denum); - GraphicsContext3D::WebGLEnumType getType() const { return m_type; } + GC3Denum getType() const { return m_type; } private: - WebGLShader(WebGLRenderingContext*, GraphicsContext3D::WebGLEnumType); + WebGLShader(WebGLRenderingContext*, GC3Denum); virtual void deleteObjectImpl(Platform3DObject); virtual bool isShader() const { return true; } - GraphicsContext3D::WebGLEnumType m_type; + GC3Denum m_type; }; } // namespace WebCore diff --git a/Source/WebCore/html/canvas/WebGLTexture.cpp b/Source/WebCore/html/canvas/WebGLTexture.cpp index 2982e51..a57500f 100644 --- a/Source/WebCore/html/canvas/WebGLTexture.cpp +++ b/Source/WebCore/html/canvas/WebGLTexture.cpp @@ -53,7 +53,7 @@ WebGLTexture::WebGLTexture(WebGLRenderingContext* ctx) setObject(context()->graphicsContext3D()->createTexture()); } -void WebGLTexture::setTarget(unsigned long target, int maxLevel) +void WebGLTexture::setTarget(GC3Denum target, GC3Dint maxLevel) { if (!object()) return; @@ -75,7 +75,7 @@ void WebGLTexture::setTarget(unsigned long target, int maxLevel) } } -void WebGLTexture::setParameteri(unsigned long pname, int param) +void WebGLTexture::setParameteri(GC3Denum pname, GC3Dint param) { if (!object() || !m_target) return; @@ -124,15 +124,15 @@ void WebGLTexture::setParameteri(unsigned long pname, int param) update(); } -void WebGLTexture::setParameterf(unsigned long pname, float param) +void WebGLTexture::setParameterf(GC3Denum pname, GC3Dfloat param) { if (!object() || !m_target) return; - int iparam = static_cast<int>(param); + GC3Dint iparam = static_cast<GC3Dint>(param); setParameteri(pname, iparam); } -void WebGLTexture::setLevelInfo(unsigned long target, int level, unsigned long internalFormat, int width, int height, unsigned long type) +void WebGLTexture::setLevelInfo(GC3Denum target, GC3Dint level, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, GC3Denum type) { if (!object() || !m_target) return; @@ -154,10 +154,10 @@ void WebGLTexture::generateMipmapLevelInfo() if (!m_isComplete) { for (size_t ii = 0; ii < m_info.size(); ++ii) { const LevelInfo& info0 = m_info[ii][0]; - int width = info0.width; - int height = info0.height; - int levelCount = computeLevelCount(width, height); - for (int level = 1; level < levelCount; ++level) { + GC3Dsizei width = info0.width; + GC3Dsizei height = info0.height; + GC3Dint levelCount = computeLevelCount(width, height); + for (GC3Dint level = 1; level < levelCount; ++level) { width = std::max(1, width >> 1); height = std::max(1, height >> 1); LevelInfo& info = m_info[ii][level]; @@ -169,7 +169,7 @@ void WebGLTexture::generateMipmapLevelInfo() m_needToUseBlackTexture = false; } -unsigned long WebGLTexture::getInternalFormat(unsigned long target, int level) const +GC3Denum WebGLTexture::getInternalFormat(GC3Denum target, GC3Dint level) const { const LevelInfo* info = getLevelInfo(target, level); if (!info) @@ -177,7 +177,7 @@ unsigned long WebGLTexture::getInternalFormat(unsigned long target, int level) c return info->internalFormat; } -unsigned long WebGLTexture::getType(unsigned long target, int level) const +GC3Denum WebGLTexture::getType(GC3Denum target, GC3Dint level) const { const LevelInfo* info = getLevelInfo(target, level); if (!info) @@ -185,7 +185,7 @@ unsigned long WebGLTexture::getType(unsigned long target, int level) const return info->type; } -int WebGLTexture::getWidth(unsigned long target, int level) const +GC3Dsizei WebGLTexture::getWidth(GC3Denum target, GC3Dint level) const { const LevelInfo* info = getLevelInfo(target, level); if (!info) @@ -193,7 +193,7 @@ int WebGLTexture::getWidth(unsigned long target, int level) const return info->width; } -int WebGLTexture::getHeight(unsigned long target, int level) const +GC3Dsizei WebGLTexture::getHeight(GC3Denum target, GC3Dint level) const { const LevelInfo* info = getLevelInfo(target, level); if (!info) @@ -201,8 +201,9 @@ int WebGLTexture::getHeight(unsigned long target, int level) const return info->height; } -bool WebGLTexture::isNPOT(unsigned width, unsigned height) +bool WebGLTexture::isNPOT(GC3Dsizei width, GC3Dsizei height) { + ASSERT(width >= 0 && height >= 0); if (!width || !height) return false; if ((width & (width - 1)) || (height & (height - 1))) @@ -229,7 +230,7 @@ void WebGLTexture::deleteObjectImpl(Platform3DObject object) context()->graphicsContext3D()->deleteTexture(object); } -int WebGLTexture::mapTargetToIndex(unsigned long target) const +int WebGLTexture::mapTargetToIndex(GC3Denum target) const { if (m_target == GraphicsContext3D::TEXTURE_2D) { if (target == GraphicsContext3D::TEXTURE_2D) @@ -268,17 +269,17 @@ bool WebGLTexture::canGenerateMipmaps() return true; } -int WebGLTexture::computeLevelCount(int width, int height) +GC3Dint WebGLTexture::computeLevelCount(GC3Dsizei width, GC3Dsizei height) { // return 1 + log2Floor(std::max(width, height)); - int n = std::max(width, height); + GC3Dsizei n = std::max(width, height); if (n <= 0) return 0; - int log = 0; - int value = n; + GC3Dint log = 0; + GC3Dsizei value = n; for (int ii = 4; ii >= 0; --ii) { int shift = (1 << ii); - int x = (value >> shift); + GC3Dsizei x = (value >> shift); if (x) { value = x; log += shift; @@ -299,7 +300,7 @@ void WebGLTexture::update() } m_isComplete = true; const LevelInfo& first = m_info[0][0]; - int levelCount = computeLevelCount(first.width, first.height); + GC3Dint levelCount = computeLevelCount(first.width, first.height); if (levelCount < 1) m_isComplete = false; else { @@ -311,9 +312,9 @@ void WebGLTexture::update() m_isComplete = false; break; } - int width = info0.width; - int height = info0.height; - for (int level = 1; level < levelCount; ++level) { + GC3Dsizei width = info0.width; + GC3Dsizei height = info0.height; + for (GC3Dint level = 1; level < levelCount; ++level) { width = std::max(1, width >> 1); height = std::max(1, height >> 1); const LevelInfo& info = m_info[ii][level]; @@ -338,14 +339,14 @@ void WebGLTexture::update() m_needToUseBlackTexture = true; } -const WebGLTexture::LevelInfo* WebGLTexture::getLevelInfo(unsigned long target, int level) const +const WebGLTexture::LevelInfo* WebGLTexture::getLevelInfo(GC3Denum target, GC3Dint level) const { if (!object() || !m_target) return 0; int targetIndex = mapTargetToIndex(target); if (targetIndex < 0 || targetIndex >= static_cast<int>(m_info.size())) return 0; - if (level < 0 || level >= static_cast<int>(m_info[targetIndex].size())) + if (level < 0 || level >= static_cast<GC3Dint>(m_info[targetIndex].size())) return 0; return &(m_info[targetIndex][level]); } diff --git a/Source/WebCore/html/canvas/WebGLTexture.h b/Source/WebCore/html/canvas/WebGLTexture.h index 419c94d..27eb8ee 100644 --- a/Source/WebCore/html/canvas/WebGLTexture.h +++ b/Source/WebCore/html/canvas/WebGLTexture.h @@ -40,25 +40,25 @@ public: static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*); - void setTarget(unsigned long target, int maxLevel); - void setParameteri(unsigned long pname, int param); - void setParameterf(unsigned long pname, float param); + void setTarget(GC3Denum target, GC3Dint maxLevel); + void setParameteri(GC3Denum pname, GC3Dint param); + void setParameterf(GC3Denum pname, GC3Dfloat param); int getMinFilter() const { return m_minFilter; } - void setLevelInfo(unsigned long target, int level, unsigned long internalFormat, int width, int height, unsigned long type); + void setLevelInfo(GC3Denum target, GC3Dint level, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, GC3Denum type); bool canGenerateMipmaps(); // Generate all level information. void generateMipmapLevelInfo(); - unsigned long getInternalFormat(unsigned long target, int level) const; - unsigned long getType(unsigned long target, int level) const; - int getWidth(unsigned long target, int level) const; - int getHeight(unsigned long target, int level) const; + GC3Denum getInternalFormat(GC3Denum target, GC3Dint level) const; + GC3Denum getType(GC3Denum target, GC3Dint level) const; + GC3Dsizei getWidth(GC3Denum target, GC3Dint level) const; + GC3Dsizei getHeight(GC3Denum target, GC3Dint level) const; // Whether width/height is NotPowerOfTwo. - static bool isNPOT(unsigned, unsigned); + static bool isNPOT(GC3Dsizei, GC3Dsizei); bool isNPOT() const; // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2). @@ -66,7 +66,7 @@ public: bool hasEverBeenBound() const { return object() && m_target; } - static int computeLevelCount(int width, int height); + static GC3Dint computeLevelCount(GC3Dsizei width, GC3Dsizei height); protected: WebGLTexture(WebGLRenderingContext*); @@ -85,7 +85,7 @@ private: { } - void setInfo(unsigned long internalFmt, int w, int h, unsigned long tp) + void setInfo(GC3Denum internalFmt, GC3Dsizei w, GC3Dsizei h, GC3Denum tp) { valid = true; internalFormat = internalFmt; @@ -95,26 +95,26 @@ private: } bool valid; - unsigned long internalFormat; - int width; - int height; - unsigned long type; + GC3Denum internalFormat; + GC3Dsizei width; + GC3Dsizei height; + GC3Denum type; }; virtual bool isTexture() const { return true; } void update(); - int mapTargetToIndex(unsigned long) const; + int mapTargetToIndex(GC3Denum) const; - const LevelInfo* getLevelInfo(unsigned long target, int level) const; + const LevelInfo* getLevelInfo(GC3Denum target, GC3Dint level) const; - unsigned long m_target; + GC3Denum m_target; - int m_minFilter; - int m_magFilter; - int m_wrapS; - int m_wrapT; + GC3Denum m_minFilter; + GC3Denum m_magFilter; + GC3Denum m_wrapS; + GC3Denum m_wrapT; Vector<Vector<LevelInfo> > m_info; diff --git a/Source/WebCore/html/canvas/WebGLUniformLocation.cpp b/Source/WebCore/html/canvas/WebGLUniformLocation.cpp index e67b09a..a8220b0 100644 --- a/Source/WebCore/html/canvas/WebGLUniformLocation.cpp +++ b/Source/WebCore/html/canvas/WebGLUniformLocation.cpp @@ -32,12 +32,12 @@ namespace WebCore { -PassRefPtr<WebGLUniformLocation> WebGLUniformLocation::create(WebGLProgram* program, long location) +PassRefPtr<WebGLUniformLocation> WebGLUniformLocation::create(WebGLProgram* program, GC3Dint location) { return adoptRef(new WebGLUniformLocation(program, location)); } -WebGLUniformLocation::WebGLUniformLocation(WebGLProgram* program, long location) +WebGLUniformLocation::WebGLUniformLocation(WebGLProgram* program, GC3Dint location) : m_program(program) , m_location(location) { @@ -54,7 +54,7 @@ WebGLProgram* WebGLUniformLocation::program() const return m_program.get(); } -long WebGLUniformLocation::location() const +GC3Dint WebGLUniformLocation::location() const { // If the program has been linked again, then this UniformLocation is no // longer valid. diff --git a/Source/WebCore/html/canvas/WebGLUniformLocation.h b/Source/WebCore/html/canvas/WebGLUniformLocation.h index f8ce699..3ef9fa8 100644 --- a/Source/WebCore/html/canvas/WebGLUniformLocation.h +++ b/Source/WebCore/html/canvas/WebGLUniformLocation.h @@ -39,19 +39,19 @@ class WebGLUniformLocation : public RefCounted<WebGLUniformLocation> { public: virtual ~WebGLUniformLocation() { } - static PassRefPtr<WebGLUniformLocation> create(WebGLProgram* program, long location); + static PassRefPtr<WebGLUniformLocation> create(WebGLProgram* program, GC3Dint location); WebGLProgram* program() const; - long location() const; + GC3Dint location() const; protected: - WebGLUniformLocation(WebGLProgram* program, long location); + WebGLUniformLocation(WebGLProgram* program, GC3Dint location); private: RefPtr<WebGLProgram> m_program; - long m_location; - unsigned long m_linkCount; + GC3Dint m_location; + unsigned m_linkCount; }; } // namespace WebCore diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp index d29d257..0402e89 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.cpp +++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp @@ -37,6 +37,7 @@ #include "Frame.h" #include "MouseEvent.h" #include "RenderSlider.h" +#include "RenderTheme.h" #if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) #include "TouchEvent.h" @@ -44,14 +45,58 @@ namespace WebCore { +// FIXME: Find a way to cascade appearance (see the layout method) and get rid of this class. +class RenderSliderThumb : public RenderBlock { +public: + RenderSliderThumb(Node*); + virtual void layout(); +}; + + +RenderSliderThumb::RenderSliderThumb(Node* node) + : RenderBlock(node) +{ +} + +void RenderSliderThumb::layout() +{ + // FIXME: Hard-coding this cascade of appearance is bad, because it's something + // that CSS usually does. We need to find a way to express this in CSS. + RenderStyle* parentStyle = parent()->style(); + if (parentStyle->appearance() == SliderVerticalPart) + style()->setAppearance(SliderThumbVerticalPart); + else if (parentStyle->appearance() == SliderHorizontalPart) + style()->setAppearance(SliderThumbHorizontalPart); + else if (parentStyle->appearance() == MediaSliderPart) + style()->setAppearance(MediaSliderThumbPart); + else if (parentStyle->appearance() == MediaVolumeSliderPart) + style()->setAppearance(MediaVolumeSliderThumbPart); + + if (style()->hasAppearance()) { + // FIXME: This should pass the style, not the renderer, to the theme. + theme()->adjustSliderThumbSize(this); + } + RenderBlock::layout(); +} + +RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle*) +{ + return new (arena) RenderSliderThumb(this); +} + void SliderThumbElement::defaultEventHandler(Event* event) { +<<<<<<< HEAD if (!event->isMouseEvent() #if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) && !event->isTouchEvent() #endif ) { ShadowBlockElement::defaultEventHandler(event); +======= + if (!event->isMouseEvent()) { + HTMLDivElement::defaultEventHandler(event); +>>>>>>> WebKit.org @ r75993 return; } @@ -126,7 +171,7 @@ void SliderThumbElement::defaultEventHandler(Event* event) } } - ShadowBlockElement::defaultEventHandler(event); + HTMLDivElement::defaultEventHandler(event); } void SliderThumbElement::detach() @@ -135,7 +180,7 @@ void SliderThumbElement::detach() if (Frame* frame = document()->frame()) frame->eventHandler()->setCapturingMouseEventsNode(0); } - ShadowBlockElement::detach(); + HTMLDivElement::detach(); } } diff --git a/Source/WebCore/html/shadow/SliderThumbElement.h b/Source/WebCore/html/shadow/SliderThumbElement.h index 8205746..7219186 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.h +++ b/Source/WebCore/html/shadow/SliderThumbElement.h @@ -33,7 +33,9 @@ #define SliderThumbElement_h #include "FloatPoint.h" -#include "ShadowElement.h" +#include "HTMLDivElement.h" +#include "HTMLNames.h" +#include "RenderStyleConstants.h" #include <wtf/Forward.h> namespace WebCore { @@ -42,34 +44,47 @@ class HTMLElement; class Event; class FloatPoint; -class SliderThumbElement : public ShadowBlockElement { +class SliderThumbElement : public HTMLDivElement { public: - static PassRefPtr<SliderThumbElement> create(HTMLElement* shadowParent); + static PassRefPtr<SliderThumbElement> create(Document*); bool inDragMode() const { return m_inDragMode; } virtual void defaultEventHandler(Event*); virtual void detach(); + virtual AtomicString shadowPseudoId() const; -private: - SliderThumbElement(HTMLElement* shadowParent); +private: + SliderThumbElement(Document*); + virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); FloatPoint m_offsetToThumb; bool m_inDragMode; }; -inline SliderThumbElement::SliderThumbElement(HTMLElement* shadowParent) - : ShadowBlockElement(shadowParent) +inline SliderThumbElement::SliderThumbElement(Document* document) + : HTMLDivElement(HTMLNames::divTag, document) , m_inDragMode(false) { } -inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(HTMLElement* shadowParent) +inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document* document) { - return adoptRef(new SliderThumbElement(shadowParent)); + return adoptRef(new SliderThumbElement(document)); } +inline AtomicString SliderThumbElement::shadowPseudoId() const +{ + DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb")); + return sliderThumb; } +inline SliderThumbElement* toSliderThumbElement(Node* node) +{ + ASSERT(!node || node->isHTMLElement()); + return static_cast<SliderThumbElement*>(node); +} + +} #endif diff --git a/Source/WebCore/inspector/CodeGeneratorInspector.pm b/Source/WebCore/inspector/CodeGeneratorInspector.pm index b8aea0e..b7be15e 100644 --- a/Source/WebCore/inspector/CodeGeneratorInspector.pm +++ b/Source/WebCore/inspector/CodeGeneratorInspector.pm @@ -20,11 +20,21 @@ $typeTransform{"CSS"} = { "header" => "InspectorCSSAgent.h", "domainAccessor" => "m_inspectorController->m_cssAgent", }; +$typeTransform{"Console"} = { + "forward" => "InspectorConsoleAgent", + "header" => "InspectorConsoleAgent.h", + "domainAccessor" => "m_inspectorController->m_consoleAgent", +}; $typeTransform{"Debugger"} = { "forward" => "InspectorDebuggerAgent", "header" => "InspectorDebuggerAgent.h", "domainAccessor" => "m_inspectorController->m_debuggerAgent", }; +$typeTransform{"BrowserDebugger"} = { + "forward" => "InspectorBrowserDebuggerAgent", + "header" => "InspectorBrowserDebuggerAgent.h", + "domainAccessor" => "m_inspectorController->m_browserDebuggerAgent", +}; $typeTransform{"Database"} = { "forward" => "InspectorDatabaseAgent", "header" => "InspectorDatabaseAgent.h", diff --git a/Source/WebCore/inspector/ConsoleMessage.cpp b/Source/WebCore/inspector/ConsoleMessage.cpp index b22a6ef..8d56a5a 100644 --- a/Source/WebCore/inspector/ConsoleMessage.cpp +++ b/Source/WebCore/inspector/ConsoleMessage.cpp @@ -82,6 +82,10 @@ ConsoleMessage::ConsoleMessage(MessageSource s, MessageType t, MessageLevel l, c { } +ConsoleMessage::~ConsoleMessage() +{ +} + void ConsoleMessage::addToFrontend(InspectorFrontend* frontend, InjectedScriptHost* injectedScriptHost) { RefPtr<InspectorObject> jsonObj = InspectorObject::create(); diff --git a/Source/WebCore/inspector/ConsoleMessage.h b/Source/WebCore/inspector/ConsoleMessage.h index 06a17d4..310aa8e 100644 --- a/Source/WebCore/inspector/ConsoleMessage.h +++ b/Source/WebCore/inspector/ConsoleMessage.h @@ -51,6 +51,7 @@ public: ConsoleMessage(MessageSource, MessageType, MessageLevel, const String& m, unsigned li, const String& u); ConsoleMessage(MessageSource, MessageType, MessageLevel, const String& m, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); ConsoleMessage(MessageSource, MessageType, MessageLevel, const String& m, const String& responseUrl, unsigned long identifier); + ~ConsoleMessage(); void addToFrontend(InspectorFrontend*, InjectedScriptHost*); void updateRepeatCountInConsole(InspectorFrontend* frontend); diff --git a/Source/WebCore/inspector/InjectedScriptHost.cpp b/Source/WebCore/inspector/InjectedScriptHost.cpp index a4a0c6f..3fd70e4 100644 --- a/Source/WebCore/inspector/InjectedScriptHost.cpp +++ b/Source/WebCore/inspector/InjectedScriptHost.cpp @@ -30,6 +30,7 @@ #include "config.h" #include "InjectedScriptHost.h" +#include "InjectedScriptSource.h" #include "InspectorDatabaseAgent.h" #include "InspectorDOMStorageAgent.h" @@ -42,6 +43,7 @@ #include "HTMLFrameOwnerElement.h" #include "InjectedScript.h" #include "InspectorClient.h" +#include "InspectorConsoleAgent.h" #include "InspectorController.h" #include "InspectorDOMAgent.h" #include "InspectorFrontend.h" @@ -82,7 +84,7 @@ InjectedScriptHost::~InjectedScriptHost() void InjectedScriptHost::clearConsoleMessages() { if (m_inspectorController) - m_inspectorController->clearConsoleMessages(); + m_inspectorController->consoleAgent()->clearConsoleMessages(); } void InjectedScriptHost::copyText(const String& text) @@ -182,6 +184,11 @@ InspectorFrontend* InjectedScriptHost::frontend() return m_inspectorController->m_frontend.get(); } +String InjectedScriptHost::injectedScriptSource() +{ + return String(reinterpret_cast<char*>(InjectedScriptSource_js), sizeof(InjectedScriptSource_js)); +} + pair<long, ScriptObject> InjectedScriptHost::injectScript(const String& source, ScriptState* scriptState) { long id = m_nextInjectedScriptId++; diff --git a/Source/WebCore/inspector/InjectedScriptHost.h b/Source/WebCore/inspector/InjectedScriptHost.h index 6b70f62..e9c09aa 100644 --- a/Source/WebCore/inspector/InjectedScriptHost.h +++ b/Source/WebCore/inspector/InjectedScriptHost.h @@ -58,9 +58,6 @@ public: ~InjectedScriptHost(); - String injectedScriptSource() { return m_injectedScriptSource; } - void setInjectedScriptSource(const String& source) { m_injectedScriptSource = source; } - InspectorController* inspectorController() { return m_inspectorController; } void disconnectController() { m_inspectorController = 0; } @@ -96,11 +93,11 @@ private: InjectedScriptHost(InspectorController* inspectorController); InspectorDOMAgent* inspectorDOMAgent(); InspectorFrontend* frontend(); + String injectedScriptSource(); ScriptObject createInjectedScript(const String& source, ScriptState* scriptState, long id); void discardInjectedScript(ScriptState*); InspectorController* m_inspectorController; - String m_injectedScriptSource; long m_nextInjectedScriptId; long m_lastWorkerId; typedef HashMap<long, InjectedScript> IdToInjectedScriptMap; diff --git a/Source/WebCore/inspector/front-end/InjectedScript.js b/Source/WebCore/inspector/InjectedScriptSource.js index fb6b796..90797fb 100644 --- a/Source/WebCore/inspector/front-end/InjectedScript.js +++ b/Source/WebCore/inspector/InjectedScriptSource.js @@ -26,7 +26,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -var injectedScriptConstructor = (function (InjectedScriptHost, inspectedWindow, injectedScriptId) { +(function (InjectedScriptHost, inspectedWindow, injectedScriptId) { var InjectedScript = function() { @@ -713,4 +713,5 @@ CommandLineAPI.prototype = { injectedScript._commandLineAPI = new CommandLineAPI(); return injectedScript; -}); +}) + diff --git a/Source/WebCore/inspector/Inspector.idl b/Source/WebCore/inspector/Inspector.idl index 7b2d7e2..6c2cc2e 100644 --- a/Source/WebCore/inspector/Inspector.idl +++ b/Source/WebCore/inspector/Inspector.idl @@ -1,6 +1,6 @@ /* * Copyright (C) 2010 Apple Inc. All rights reserved. - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -37,7 +37,6 @@ module core { /////////////////////////////////////////////////////////////////////// // HUGE FIXME: we need to expose InjectedScript methods here. Or document InjectedScript capabilities. - [domain=Inspector] void setInjectedScriptSource(in String scriptSource); [domain=Inspector] void dispatchOnInjectedScript(in long injectedScriptId, in String methodName, in String arguments, out Value result, out boolean isException); [domain=Inspector] void addScriptToEvaluateOnLoad(in String scriptSource); [domain=Inspector] void removeAllScriptsToEvaluateOnLoad(); @@ -49,6 +48,7 @@ module core { [domain=Inspector] void openInInspectedWindow(in String url); [domain=Inspector] void setSearchingForNode(in boolean enabled, out boolean newState); + [notify, domain=Inspector] void frontendReused(); [notify, domain=Inspector] void addNodesToSearchResult(out Array nodeIds); [notify, domain=Inspector] void bringToFront(); [notify, domain=Inspector] void disconnectFromBackend(); @@ -76,12 +76,12 @@ module core { // Console API /////////////////////////////////////////////////////////////////////// - [domain=Inspector] void setConsoleMessagesEnabled(in boolean enabled, out boolean newState); - [notify, domain=Inspector] void addConsoleMessage(out Object messageObj); - [notify, domain=Inspector] void updateConsoleMessageExpiredCount(out unsigned long count); - [notify, domain=Inspector] void updateConsoleMessageRepeatCount(out unsigned long count); - [domain=Inspector] void clearConsoleMessages(); - [notify, domain=Inspector] void consoleMessagesCleared(); + [domain=Console] void setConsoleMessagesEnabled(in boolean enabled, out boolean newState); + [notify, domain=Console] void addConsoleMessage(out Object messageObj); + [notify, domain=Console] void updateConsoleMessageExpiredCount(out unsigned long count); + [notify, domain=Console] void updateConsoleMessageRepeatCount(out unsigned long count); + [domain=Console] void clearConsoleMessages(); + [notify, domain=Console] void consoleMessagesCleared(); /////////////////////////////////////////////////////////////////////// // Network API @@ -186,7 +186,6 @@ module core { [notify, domain=DOM] void childNodeCountUpdated(out long id, out int newValue); [notify, domain=DOM] void childNodeInserted(out long parentId, out long prevId, out Object node); [notify, domain=DOM] void childNodeRemoved(out long parentId, out long id); - [notify, domain=DOM] void didCommitLoad(); /////////////////////////////////////////////////////////////////////// // CSS API @@ -222,14 +221,15 @@ module core { // Debugger API /////////////////////////////////////////////////////////////////////// - [domain=Inspector] void enableDebuggerFromFrontend(in boolean always); + [domain=Inspector] void enableDebugger(in boolean always); [domain=Inspector] void disableDebugger(in boolean always); + + [domain=Inspector] void setStickyBreakpoints(in Object breakpoints); + [notify, domain=Debugger] void debuggerWasEnabled(); [notify, domain=Debugger] void debuggerWasDisabled(); - [notify, domain=Debugger] void attachDebuggerWhenShown(); // FIXME: do something with this eventually. - - [notify, domain=Debugger] void parsedScriptSource(out String sourceID, out String url, out String data, out int firstLine, out int scriptWorldType); + [notify, domain=Debugger] void parsedScriptSource(out String sourceID, out String url, out int lineOffset, out int columnOffset, out int scriptWorldType); [notify, domain=Debugger] void failedToParseScriptSource(out String url, out String data, out int firstLine, out int errorLine, out String errorMessage); [domain=Debugger] void activateBreakpoints(); @@ -238,20 +238,16 @@ module core { [domain=Debugger] void setBreakpoint(in String sourceID, in unsigned int lineNumber, in String condition, in boolean enabled, out String breakpointId, out unsigned int actualLineNumber); [domain=Debugger] void removeBreakpoint(in String breakpointId); - [domain=Inspector] void setStickyBreakpoints(in Object breakpoints); // FIXME: Move to newly introduced BrowserDebugger. - - [domain=DOM] void setDOMBreakpoint(in long nodeId, in long type); // FIXME: Move to newly introduced BrowserDebugger. - [domain=DOM] void removeDOMBreakpoint(in long nodeId, in long type); // FIXME: Move to newly introduced BrowserDebugger. - - [domain=Inspector] void setEventListenerBreakpoint(in String eventName); // FIXME: Move to newly introduced BrowserDebugger. - [domain=Inspector] void removeEventListenerBreakpoint(in String eventName); // FIXME: Move to newly introduced BrowserDebugger. - - [domain=Inspector] void setXHRBreakpoint(in String url); // FIXME: Move to newly introduced BrowserDebugger. - [domain=Inspector] void removeXHRBreakpoint(in String url); // FIXME: Move to newly introduced BrowserDebugger. + [domain=BrowserDebugger] void setDOMBreakpoint(in long nodeId, in long type); + [domain=BrowserDebugger] void removeDOMBreakpoint(in long nodeId, in long type); + [domain=BrowserDebugger] void setEventListenerBreakpoint(in String eventName); + [domain=BrowserDebugger] void removeEventListenerBreakpoint(in String eventName); + [domain=BrowserDebugger] void setXHRBreakpoint(in String url); + [domain=BrowserDebugger] void removeXHRBreakpoint(in String url); - [domain=Debugger] void stepOverStatement(); // FIXME: rename to stepOver - [domain=Debugger] void stepIntoStatement(); // FIXME: rename to stepInto - [domain=Debugger] void stepOutOfFunction(); // FIXME: rename to stepOut + [domain=Debugger] void stepOver(); + [domain=Debugger] void stepInto(); + [domain=Debugger] void stepOut(); [domain=Debugger] void pause(); [notify, domain=Debugger] void pausedScript(out Object details); [domain=Debugger] void resume(); diff --git a/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp b/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp index ced61c5..1cca6fe 100644 --- a/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp +++ b/Source/WebCore/inspector/InspectorApplicationCacheAgent.cpp @@ -35,6 +35,7 @@ #include "InspectorController.h" #include "InspectorFrontend.h" #include "InspectorValues.h" +#include "NetworkStateNotifier.h" #include "Page.h" #include "ResourceResponse.h" @@ -46,18 +47,15 @@ InspectorApplicationCacheAgent::InspectorApplicationCacheAgent(InspectorControll { } -void InspectorApplicationCacheAgent::didReceiveManifestResponse(unsigned long identifier, const ResourceResponse& response) -{ - m_inspectorController->didReceiveResponse(identifier, 0, response); -} - -void InspectorApplicationCacheAgent::updateApplicationCacheStatus(ApplicationCacheHost::Status status) +void InspectorApplicationCacheAgent::updateApplicationCacheStatus(Frame* frame) { + ApplicationCacheHost::Status status = frame->loader()->documentLoader()->applicationCacheHost()->status(); m_frontend->updateApplicationCacheStatus(status); } -void InspectorApplicationCacheAgent::updateNetworkState(bool isNowOnline) +void InspectorApplicationCacheAgent::networkStateChanged() { + bool isNowOnline = networkStateNotifier().onLine(); m_frontend->updateNetworkState(isNowOnline); } diff --git a/Source/WebCore/inspector/InspectorApplicationCacheAgent.h b/Source/WebCore/inspector/InspectorApplicationCacheAgent.h index 11f10ce..3d9e494 100644 --- a/Source/WebCore/inspector/InspectorApplicationCacheAgent.h +++ b/Source/WebCore/inspector/InspectorApplicationCacheAgent.h @@ -33,6 +33,7 @@ namespace WebCore { +class Frame; class InspectorArray; class InspectorController; class InspectorFrontend; @@ -46,9 +47,8 @@ public: ~InspectorApplicationCacheAgent() { } // Backend to Frontend - void didReceiveManifestResponse(unsigned long identifier, const ResourceResponse&); - void updateApplicationCacheStatus(ApplicationCacheHost::Status); - void updateNetworkState(bool isNowOnline); + void updateApplicationCacheStatus(Frame*); + void networkStateChanged(); // From Frontend void getApplicationCaches(RefPtr<InspectorValue>* applicationCaches); diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp new file mode 100644 index 0000000..a33bacc --- /dev/null +++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp @@ -0,0 +1,325 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#include "InspectorBrowserDebuggerAgent.h" + +#if ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) + +#include "HTMLElement.h" +#include "InspectorController.h" +#include "InspectorDOMAgent.h" +#include "InspectorDebuggerAgent.h" +#include "InspectorState.h" +#include <wtf/text/CString.h> + +namespace { + +enum DOMBreakpointType { + SubtreeModified = 0, + AttributeModified, + NodeRemoved, + DOMBreakpointTypesCount +}; + +static const char* const domNativeBreakpointType = "DOM"; +static const char* const eventListenerNativeBreakpointType = "EventListener"; +static const char* const xhrNativeBreakpointType = "XHR"; + +const uint32_t inheritableDOMBreakpointTypesMask = (1 << SubtreeModified); +const int domBreakpointDerivedTypeShift = 16; + +} + +namespace WebCore { + +InspectorBrowserDebuggerAgent::InspectorBrowserDebuggerAgent(InspectorController* inspectorController) + : m_inspectorController(inspectorController) + , m_hasXHRBreakpointWithEmptyURL(false) +{ +} + +InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent() +{ +} + +void InspectorBrowserDebuggerAgent::discardBindings() +{ + m_breakpoints.clear(); +} + +void InspectorBrowserDebuggerAgent::setEventListenerBreakpoint(const String& eventName) +{ + m_eventListenerBreakpoints.add(eventName); +} + +void InspectorBrowserDebuggerAgent::removeEventListenerBreakpoint(const String& eventName) +{ + m_eventListenerBreakpoints.remove(eventName); +} + +void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node) +{ + if (m_breakpoints.size()) { + uint32_t mask = m_breakpoints.get(InspectorDOMAgent::innerParentNode(node)); + uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask; + if (inheritableTypesMask) + updateSubtreeBreakpoints(node, inheritableTypesMask, true); + } +} + +void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node) +{ + if (m_breakpoints.size()) { + // Remove subtree breakpoints. + m_breakpoints.remove(node); + Vector<Node*> stack(1, InspectorDOMAgent::innerFirstChild(node)); + do { + Node* node = stack.last(); + stack.removeLast(); + if (!node) + continue; + m_breakpoints.remove(node); + stack.append(InspectorDOMAgent::innerFirstChild(node)); + stack.append(InspectorDOMAgent::innerNextSibling(node)); + } while (!stack.isEmpty()); + } +} + +void InspectorBrowserDebuggerAgent::setDOMBreakpoint(long nodeId, long type) +{ + Node* node = m_inspectorController->m_domAgent->nodeForId(nodeId); + if (!node) + return; + + uint32_t rootBit = 1 << type; + m_breakpoints.set(node, m_breakpoints.get(node) | rootBit); + if (rootBit & inheritableDOMBreakpointTypesMask) { + for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) + updateSubtreeBreakpoints(child, rootBit, true); + } +} + +void InspectorBrowserDebuggerAgent::removeDOMBreakpoint(long nodeId, long type) +{ + Node* node = m_inspectorController->m_domAgent->nodeForId(nodeId); + if (!node) + return; + + uint32_t rootBit = 1 << type; + uint32_t mask = m_breakpoints.get(node) & ~rootBit; + if (mask) + m_breakpoints.set(node, mask); + else + m_breakpoints.remove(node); + + if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) { + for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) + updateSubtreeBreakpoints(child, rootBit, false); + } +} + +void InspectorBrowserDebuggerAgent::willInsertDOMNode(Node*, Node* parent) +{ + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + if (!debuggerAgent) + return; + + if (hasBreakpoint(parent, SubtreeModified)) { + RefPtr<InspectorObject> eventData = InspectorObject::create(); + descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get()); + eventData->setString("breakpointType", domNativeBreakpointType); + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); + } +} + +void InspectorBrowserDebuggerAgent::willRemoveDOMNode(Node* node) +{ + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + if (!debuggerAgent) + return; + + if (hasBreakpoint(node, NodeRemoved)) { + RefPtr<InspectorObject> eventData = InspectorObject::create(); + descriptionForDOMEvent(node, NodeRemoved, false, eventData.get()); + eventData->setString("breakpointType", domNativeBreakpointType); + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); + } else if (hasBreakpoint(InspectorDOMAgent::innerParentNode(node), SubtreeModified)) { + RefPtr<InspectorObject> eventData = InspectorObject::create(); + descriptionForDOMEvent(node, SubtreeModified, false, eventData.get()); + eventData->setString("breakpointType", domNativeBreakpointType); + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); + } +} + +void InspectorBrowserDebuggerAgent::willModifyDOMAttr(Element* element) +{ + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + if (!debuggerAgent) + return; + + if (hasBreakpoint(element, AttributeModified)) { + RefPtr<InspectorObject> eventData = InspectorObject::create(); + descriptionForDOMEvent(element, AttributeModified, false, eventData.get()); + eventData->setString("breakpointType", domNativeBreakpointType); + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); + } +} + +void InspectorBrowserDebuggerAgent::descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description) +{ + ASSERT(hasBreakpoint(target, breakpointType)); + + Node* breakpointOwner = target; + if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { + // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint. + // Target node may be unknown to frontend, so we need to push it first. + long targetNodeId = m_inspectorController->m_domAgent->pushNodePathToFrontend(target); + ASSERT(targetNodeId); + description->setNumber("targetNodeId", targetNodeId); + + // Find breakpoint owner node. + if (!insertion) + breakpointOwner = InspectorDOMAgent::innerParentNode(target); + ASSERT(breakpointOwner); + while (!(m_breakpoints.get(breakpointOwner) & (1 << breakpointType))) { + breakpointOwner = InspectorDOMAgent::innerParentNode(breakpointOwner); + ASSERT(breakpointOwner); + } + + if (breakpointType == SubtreeModified) + description->setBoolean("insertion", insertion); + } + + long breakpointOwnerNodeId = m_inspectorController->m_domAgent->pushNodePathToFrontend(breakpointOwner); + ASSERT(breakpointOwnerNodeId); + description->setNumber("nodeId", breakpointOwnerNodeId); + description->setNumber("type", breakpointType); +} + +bool InspectorBrowserDebuggerAgent::hasBreakpoint(Node* node, long type) +{ + uint32_t rootBit = 1 << type; + uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift; + return m_breakpoints.get(node) & (rootBit | derivedBit); +} + +void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set) +{ + uint32_t oldMask = m_breakpoints.get(node); + uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift; + uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask; + if (newMask) + m_breakpoints.set(node, newMask); + else + m_breakpoints.remove(node); + + uint32_t newRootMask = rootMask & ~newMask; + if (!newRootMask) + return; + + for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) + updateSubtreeBreakpoints(child, newRootMask, set); +} + +void InspectorBrowserDebuggerAgent::pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous) +{ + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + if (!debuggerAgent) + return; + + String fullEventName = String::format("%s:%s", categoryType.utf8().data(), eventName.utf8().data()); + if (!m_eventListenerBreakpoints.contains(fullEventName)) + return; + + RefPtr<InspectorObject> eventData = InspectorObject::create(); + eventData->setString("breakpointType", eventListenerNativeBreakpointType); + eventData->setString("eventName", fullEventName); + if (synchronous) + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); + else + debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData.release()); +} + +void InspectorBrowserDebuggerAgent::setXHRBreakpoint(const String& url) +{ + if (url.isEmpty()) + m_hasXHRBreakpointWithEmptyURL = true; + else + m_XHRBreakpoints.add(url); +} + +void InspectorBrowserDebuggerAgent::removeXHRBreakpoint(const String& url) +{ + if (url.isEmpty()) + m_hasXHRBreakpointWithEmptyURL = false; + else + m_XHRBreakpoints.remove(url); +} + +void InspectorBrowserDebuggerAgent::willSendXMLHttpRequest(const String& url) +{ + InspectorDebuggerAgent* debuggerAgent = m_inspectorController->m_debuggerAgent.get(); + if (!debuggerAgent) + return; + + String breakpointURL; + if (m_hasXHRBreakpointWithEmptyURL) + breakpointURL = ""; + else { + for (HashSet<String>::iterator it = m_XHRBreakpoints.begin(); it != m_XHRBreakpoints.end(); ++it) { + if (url.contains(*it)) { + breakpointURL = *it; + break; + } + } + } + + if (breakpointURL.isNull()) + return; + + RefPtr<InspectorObject> eventData = InspectorObject::create(); + eventData->setString("breakpointType", xhrNativeBreakpointType); + eventData->setString("breakpointURL", breakpointURL); + eventData->setString("url", url); + debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData.release()); +} + +void InspectorBrowserDebuggerAgent::clearForPageNavigation() +{ + m_eventListenerBreakpoints.clear(); + m_XHRBreakpoints.clear(); + m_hasXHRBreakpointWithEmptyURL = false; +} + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) && ENABLE(JAVASCRIPT_DEBUGGER) diff --git a/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h new file mode 100644 index 0000000..537bda1 --- /dev/null +++ b/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef InspectorBrowserDebuggerAgent_h +#define InspectorBrowserDebuggerAgent_h + +#if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) + +#include "PlatformString.h" + +#include <wtf/HashMap.h> +#include <wtf/HashSet.h> +#include <wtf/PassOwnPtr.h> +#include <wtf/RefCounted.h> +#include <wtf/text/StringHash.h> + +namespace WebCore { + +class Element; +class InspectorController; +class InspectorObject; +class Node; + +class InspectorBrowserDebuggerAgent : public Noncopyable { +public: + static PassOwnPtr<InspectorBrowserDebuggerAgent> create(InspectorController* inspectorController) + { + return adoptPtr(new InspectorBrowserDebuggerAgent(inspectorController)); + } + + virtual ~InspectorBrowserDebuggerAgent(); + + // BrowserDebugger API for InspectorFrontend + void setXHRBreakpoint(const String& url); + void removeXHRBreakpoint(const String& url); + void setEventListenerBreakpoint(const String& eventName); + void removeEventListenerBreakpoint(const String& eventName); + void setDOMBreakpoint(long nodeId, long type); + void removeDOMBreakpoint(long nodeId, long type); + + // InspectorInstrumentation API + void willInsertDOMNode(Node*, Node* parent); + void didInsertDOMNode(Node*); + void willRemoveDOMNode(Node*); + void didRemoveDOMNode(Node*); + void willModifyDOMAttr(Element*); + void willSendXMLHttpRequest(const String& url); + void pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous); + + void clearForPageNavigation(); +private: + InspectorBrowserDebuggerAgent(InspectorController*); + + void descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description); + void updateSubtreeBreakpoints(Node*, uint32_t rootMask, bool set); + bool hasBreakpoint(Node*, long type); + void discardBindings(); + + InspectorController* m_inspectorController; + HashMap<Node*, uint32_t> m_breakpoints; + HashSet<String> m_eventListenerBreakpoints; + HashSet<String> m_XHRBreakpoints; + bool m_hasXHRBreakpointWithEmptyURL; +}; + +} // namespace WebCore + +#endif // ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) + +#endif // !defined(InspectorBrowserDebuggerAgent_h) diff --git a/Source/WebCore/inspector/InspectorClient.h b/Source/WebCore/inspector/InspectorClient.h index 0c78246..3b8007e 100644 --- a/Source/WebCore/inspector/InspectorClient.h +++ b/Source/WebCore/inspector/InspectorClient.h @@ -26,7 +26,6 @@ #ifndef InspectorClient_h #define InspectorClient_h -#include "InspectorController.h" #include <wtf/Forward.h> namespace WebCore { diff --git a/Source/WebCore/inspector/InspectorConsoleAgent.cpp b/Source/WebCore/inspector/InspectorConsoleAgent.cpp new file mode 100644 index 0000000..a543cb2 --- /dev/null +++ b/Source/WebCore/inspector/InspectorConsoleAgent.cpp @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE 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 "InspectorConsoleAgent.h" + +#if ENABLE(INSPECTOR) +#include "Console.h" +#include "ConsoleMessage.h" +#include "InjectedScriptHost.h" +#include "InspectorController.h" +#include "InspectorDOMAgent.h" +#include "InspectorFrontend.h" +#include "InspectorState.h" +#include "ResourceError.h" +#include "ResourceResponse.h" +#include "ScriptArguments.h" +#include "ScriptCallFrame.h" +#include "ScriptCallStack.h" +#include <wtf/CurrentTime.h> +#include <wtf/OwnPtr.h> +#include <wtf/PassOwnPtr.h> +#include <wtf/text/StringConcatenate.h> + +namespace WebCore { + +static const unsigned maximumConsoleMessages = 1000; +static const unsigned expireConsoleMessagesStep = 100; + +InspectorConsoleAgent::InspectorConsoleAgent(InspectorController* inspectorController, InspectorState* state) + : m_inspectorController(inspectorController) + , m_state(state) + , m_frontend(0) + , m_previousMessage(0) + , m_expiredConsoleMessageCount(0) +{ +} + +InspectorConsoleAgent::~InspectorConsoleAgent() +{ + m_inspectorController = 0; +} + +void InspectorConsoleAgent::setConsoleMessagesEnabled(bool enabled, bool* newState) +{ + *newState = enabled; + setConsoleMessagesEnabled(enabled); +} + +void InspectorConsoleAgent::clearConsoleMessages() +{ + m_consoleMessages.clear(); + m_expiredConsoleMessageCount = 0; + m_previousMessage = 0; + m_inspectorController->injectedScriptHost()->releaseWrapperObjectGroup(0 /* release the group in all scripts */, "console"); + if (InspectorDOMAgent* domAgent = m_inspectorController->domAgent()) + domAgent->releaseDanglingNodes(); + if (m_frontend) + m_frontend->consoleMessagesCleared(); +} + +void InspectorConsoleAgent::reset() +{ + clearConsoleMessages(); + m_times.clear(); + m_counts.clear(); +} + +void InspectorConsoleAgent::setFrontend(InspectorFrontend* frontend) +{ + m_frontend = frontend; +} + +void InspectorConsoleAgent::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) +{ + if (!m_inspectorController->enabled()) + return; + addConsoleMessage(new ConsoleMessage(source, type, level, message, arguments, callStack)); +} + +void InspectorConsoleAgent::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID) +{ + if (!m_inspectorController->enabled()) + return; + addConsoleMessage(new ConsoleMessage(source, type, level, message, lineNumber, sourceID)); +} + +void InspectorConsoleAgent::startTiming(const String& title) +{ + // Follow Firebug's behavior of requiring a title that is not null or + // undefined for timing functions + if (title.isNull()) + return; + + m_times.add(title, currentTime() * 1000); +} + +void InspectorConsoleAgent::stopTiming(const String& title, PassRefPtr<ScriptCallStack> callStack) +{ + // Follow Firebug's behavior of requiring a title that is not null or + // undefined for timing functions + if (title.isNull()) + return; + + HashMap<String, double>::iterator it = m_times.find(title); + if (it == m_times.end()) + return; + + double startTime = it->second; + m_times.remove(it); + + double elapsed = currentTime() * 1000 - startTime; + String message = title + String::format(": %.0fms", elapsed); + const ScriptCallFrame& lastCaller = callStack->at(0); + addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lastCaller.lineNumber(), lastCaller.sourceURL()); +} + +void InspectorConsoleAgent::count(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) +{ + const ScriptCallFrame& lastCaller = callStack->at(0); + // Follow Firebug's behavior of counting with null and undefined title in + // the same bucket as no argument + String title; + arguments->getFirstArgumentAsString(title); + String identifier = makeString(title, '@', lastCaller.sourceURL(), ':', String::number(lastCaller.lineNumber())); + + HashMap<String, unsigned>::iterator it = m_counts.find(identifier); + int count; + if (it == m_counts.end()) + count = 1; + else { + count = it->second + 1; + m_counts.remove(it); + } + + m_counts.add(identifier, count); + + String message = makeString(title, ": ", String::number(count)); + addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lastCaller.lineNumber(), lastCaller.sourceURL()); +} + +void InspectorConsoleAgent::resourceRetrievedByXMLHttpRequest(const String& url, const String& sendURL, unsigned sendLineNumber) +{ + if (!m_inspectorController->enabled()) + return; + if (m_state->getBoolean(InspectorState::monitoringXHR)) + addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + url + "\".", sendLineNumber, sendURL); +} + +void InspectorConsoleAgent::didReceiveResponse(unsigned long identifier, const ResourceResponse& response) +{ + if (!m_inspectorController->enabled()) + return; + + if (response.httpStatusCode() >= 400) { + String message = makeString("Failed to load resource: the server responded with a status of ", String::number(response.httpStatusCode()), " (", response.httpStatusText(), ')'); + addConsoleMessage(new ConsoleMessage(OtherMessageSource, NetworkErrorMessageType, ErrorMessageLevel, message, response.url().string(), identifier)); + } +} + +void InspectorConsoleAgent::didFailLoading(unsigned long identifier, const ResourceError& error) +{ + if (!m_inspectorController->enabled()) + return; + + String message = "Failed to load resource"; + if (!error.localizedDescription().isEmpty()) + message += ": " + error.localizedDescription(); + addConsoleMessage(new ConsoleMessage(OtherMessageSource, NetworkErrorMessageType, ErrorMessageLevel, message, error.failingURL(), identifier)); +} + +void InspectorConsoleAgent::setConsoleMessagesEnabled(bool enabled) +{ + m_state->setBoolean(InspectorState::consoleMessagesEnabled, enabled); + if (!m_inspectorController->enabled()) + return; + if (m_expiredConsoleMessageCount) + m_frontend->updateConsoleMessageExpiredCount(m_expiredConsoleMessageCount); + unsigned messageCount = m_consoleMessages.size(); + for (unsigned i = 0; i < messageCount; ++i) + m_consoleMessages[i]->addToFrontend(m_frontend, m_inspectorController->injectedScriptHost()); +} + +void InspectorConsoleAgent::addConsoleMessage(PassOwnPtr<ConsoleMessage> consoleMessage) +{ + ASSERT(m_inspectorController->enabled()); + ASSERT_ARG(consoleMessage, consoleMessage); + + if (m_previousMessage && m_previousMessage->isEqual(consoleMessage.get())) { + m_previousMessage->incrementCount(); + if (m_state->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend) + m_previousMessage->updateRepeatCountInConsole(m_frontend); + } else { + m_previousMessage = consoleMessage.get(); + m_consoleMessages.append(consoleMessage); + if (m_state->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend) + m_previousMessage->addToFrontend(m_frontend, m_inspectorController->injectedScriptHost()); + } + + if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) { + m_expiredConsoleMessageCount += expireConsoleMessagesStep; + m_consoleMessages.remove(0, expireConsoleMessagesStep); + } +} + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) diff --git a/Source/WebCore/inspector/InspectorConsoleAgent.h b/Source/WebCore/inspector/InspectorConsoleAgent.h new file mode 100644 index 0000000..97fcb3f --- /dev/null +++ b/Source/WebCore/inspector/InspectorConsoleAgent.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 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 InspectorConsoleAgent_h +#define InspectorConsoleAgent_h + +#include "Console.h" +#include <wtf/Forward.h> +#include <wtf/HashMap.h> +#include <wtf/Noncopyable.h> +#include <wtf/text/StringHash.h> +#include <wtf/Vector.h> + +namespace WebCore { + +#if ENABLE(INSPECTOR) + +class ConsoleMessage; +class InspectorController; +class InspectorFrontend; +class InspectorState; +class ResourceError; +class ResourceResponse; +class ScriptArguments; +class ScriptCallStack; +class ScriptProfile; + +class InspectorConsoleAgent : public Noncopyable { +public: + InspectorConsoleAgent(InspectorController*, InspectorState*); + ~InspectorConsoleAgent(); + + void setConsoleMessagesEnabled(bool enabled, bool* newState); + void clearConsoleMessages(); + void reset(); + void setFrontend(InspectorFrontend*); + + void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); + void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID); + + void startTiming(const String& title); + void stopTiming(const String& title, PassRefPtr<ScriptCallStack>); + void count(PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); + + void resourceRetrievedByXMLHttpRequest(const String& url, const String& sendURL, unsigned sendLineNumber); + void didReceiveResponse(unsigned long identifier, const ResourceResponse&); + void didFailLoading(unsigned long identifier, const ResourceError&); +#if ENABLE(JAVASCRIPT_DEBUGGER) + void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL); + void addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL); +#endif + +private: + void setConsoleMessagesEnabled(bool); + void addConsoleMessage(PassOwnPtr<ConsoleMessage>); + + InspectorController* m_inspectorController; + InspectorState* m_state; + InspectorFrontend* m_frontend; + ConsoleMessage* m_previousMessage; + Vector<OwnPtr<ConsoleMessage> > m_consoleMessages; + unsigned m_expiredConsoleMessageCount; + HashMap<String, unsigned> m_counts; + HashMap<String, double> m_times; +}; + +#endif + +} // namespace WebCore + +#endif // !defined(InspectorConsoleAgent_h) diff --git a/Source/WebCore/inspector/InspectorController.cpp b/Source/WebCore/inspector/InspectorController.cpp index 7248dc9..5a139b6 100644 --- a/Source/WebCore/inspector/InspectorController.cpp +++ b/Source/WebCore/inspector/InspectorController.cpp @@ -35,11 +35,10 @@ #include "CachedResource.h" #include "CachedResourceLoader.h" #include "Chrome.h" -#include "Console.h" -#include "ConsoleMessage.h" #include "Cookie.h" #include "CookieJar.h" #include "DOMWindow.h" +#include "DOMWrapperWorld.h" #include "Document.h" #include "DocumentLoader.h" #include "Element.h" @@ -58,8 +57,10 @@ #include "InjectedScript.h" #include "InjectedScriptHost.h" #include "InspectorBackendDispatcher.h" +#include "InspectorBrowserDebuggerAgent.h" #include "InspectorCSSAgent.h" #include "InspectorClient.h" +#include "InspectorConsoleAgent.h" #include "InspectorDOMAgent.h" #include "InspectorDOMStorageResource.h" #include "InspectorDatabaseResource.h" @@ -69,6 +70,7 @@ #include "InspectorInstrumentation.h" #include "InspectorProfilerAgent.h" #include "InspectorResourceAgent.h" +#include "InspectorSettings.h" #include "InspectorState.h" #include "InspectorTimelineAgent.h" #include "InspectorValues.h" @@ -130,29 +132,20 @@ const char* const InspectorController::ConsolePanel = "console"; const char* const InspectorController::ScriptsPanel = "scripts"; const char* const InspectorController::ProfilesPanel = "profiles"; -const unsigned InspectorController::defaultAttachedHeight = 300; - -static const unsigned maximumConsoleMessages = 1000; -static const unsigned expireConsoleMessagesStep = 100; - InspectorController::InspectorController(Page* page, InspectorClient* client) : m_inspectedPage(page) , m_client(client) , m_openingFrontend(false) , m_cssAgent(new InspectorCSSAgent()) - , m_mainResourceIdentifier(0) - , m_expiredConsoleMessageCount(0) - , m_previousMessage(0) - , m_settingsLoaded(false) + , m_state(new InspectorState(client)) , m_inspectorBackendDispatcher(new InspectorBackendDispatcher(this)) , m_injectedScriptHost(InjectedScriptHost::create(this)) + , m_consoleAgent(new InspectorConsoleAgent(this, m_state.get())) #if ENABLE(JAVASCRIPT_DEBUGGER) , m_attachDebuggerWhenShown(false) - , m_hasXHRBreakpointWithEmptyURL(false) , m_profilerAgent(InspectorProfilerAgent::create(this)) #endif { - m_state = new InspectorState(client); ASSERT_ARG(page, page); ASSERT_ARG(client, client); } @@ -178,7 +171,9 @@ void InspectorController::inspectedPageDestroyed() #if ENABLE(JAVASCRIPT_DEBUGGER) m_debuggerAgent.clear(); + m_browserDebuggerAgent.clear(); #endif + ASSERT(m_inspectedPage); m_inspectedPage = 0; @@ -195,22 +190,22 @@ bool InspectorController::enabled() const bool InspectorController::inspectorStartsAttached() { - return m_state->getBoolean(InspectorState::inspectorStartsAttached); + return m_settings->getBoolean(InspectorSettings::InspectorStartsAttached); } void InspectorController::setInspectorStartsAttached(bool attached) { - m_state->setBoolean(InspectorState::inspectorStartsAttached, attached); + m_settings->setBoolean(InspectorSettings::InspectorStartsAttached, attached); } void InspectorController::setInspectorAttachedHeight(long height) { - m_state->setLong(InspectorState::inspectorAttachedHeight, height); + m_settings->setLong(InspectorSettings::InspectorAttachedHeight, height); } -int InspectorController::inspectorAttachedHeight() const +long InspectorController::inspectorAttachedHeight() const { - return m_state->getBoolean(InspectorState::inspectorAttachedHeight); + return m_settings->getLong(InspectorSettings::InspectorAttachedHeight); } bool InspectorController::searchingForNodeInPage() const @@ -230,12 +225,24 @@ void InspectorController::getInspectorState(RefPtr<InspectorObject>* state) void InspectorController::restoreInspectorStateFromCookie(const String& inspectorStateCookie) { m_state->restoreFromInspectorCookie(inspectorStateCookie); + + if (!m_frontend) { + connectFrontend(); + m_frontend->frontendReused(); + m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string()); + m_domAgent->setDocument(m_inspectedPage->mainFrame()->document()); + pushDataCollectedOffline(); + } + if (m_state->getBoolean(InspectorState::timelineProfilerEnabled)) startTimelineProfiler(); + #if ENABLE(JAVASCRIPT_DEBUGGER) + restoreDebugger(); + restoreProfiler(ProfilerRestoreResetAgent); if (m_state->getBoolean(InspectorState::userInitiatedProfiling)) startUserInitiatedProfiling(); -#endif +#endif } void InspectorController::inspect(Node* node) @@ -303,91 +310,6 @@ void InspectorController::hideHighlight() m_client->hideHighlight(); } -void InspectorController::setConsoleMessagesEnabled(bool enabled, bool* newState) -{ - *newState = enabled; - setConsoleMessagesEnabled(enabled); -} - -void InspectorController::setConsoleMessagesEnabled(bool enabled) -{ - m_state->setBoolean(InspectorState::consoleMessagesEnabled, enabled); - if (!enabled) - return; - - if (m_expiredConsoleMessageCount) - m_frontend->updateConsoleMessageExpiredCount(m_expiredConsoleMessageCount); - unsigned messageCount = m_consoleMessages.size(); - for (unsigned i = 0; i < messageCount; ++i) - m_consoleMessages[i]->addToFrontend(m_frontend.get(), m_injectedScriptHost.get()); -} - -void InspectorController::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) -{ - if (!enabled()) - return; - - addConsoleMessage(new ConsoleMessage(source, type, level, message, arguments, callStack)); -} - -void InspectorController::addMessageToConsole(MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID) -{ - if (!enabled()) - return; - - addConsoleMessage(new ConsoleMessage(source, type, level, message, lineNumber, sourceID)); -} - -void InspectorController::addConsoleMessage(PassOwnPtr<ConsoleMessage> consoleMessage) -{ - ASSERT(enabled()); - ASSERT_ARG(consoleMessage, consoleMessage); - - if (m_previousMessage && m_previousMessage->isEqual(consoleMessage.get())) { - m_previousMessage->incrementCount(); - if (m_state->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend) - m_previousMessage->updateRepeatCountInConsole(m_frontend.get()); - } else { - m_previousMessage = consoleMessage.get(); - m_consoleMessages.append(consoleMessage); - if (m_state->getBoolean(InspectorState::consoleMessagesEnabled) && m_frontend) - m_previousMessage->addToFrontend(m_frontend.get(), m_injectedScriptHost.get()); - } - - if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) { - m_expiredConsoleMessageCount += expireConsoleMessagesStep; - m_consoleMessages.remove(0, expireConsoleMessagesStep); - } -} - -void InspectorController::clearConsoleMessages() -{ - m_consoleMessages.clear(); - m_expiredConsoleMessageCount = 0; - m_previousMessage = 0; - m_injectedScriptHost->releaseWrapperObjectGroup(0 /* release the group in all scripts */, "console"); - if (m_domAgent) - m_domAgent->releaseDanglingNodes(); - if (m_frontend) - m_frontend->consoleMessagesCleared(); -} - -void InspectorController::startGroup(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack, bool collapsed) -{ - addConsoleMessage(new ConsoleMessage(JSMessageSource, collapsed ? StartGroupCollapsedMessageType : StartGroupMessageType, LogMessageLevel, "", arguments, callStack)); -} - -void InspectorController::endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL) -{ - addConsoleMessage(new ConsoleMessage(source, EndGroupMessageType, LogMessageLevel, String(), lineNumber, sourceURL)); -} - -void InspectorController::markTimeline(const String& message) -{ - if (timelineAgent()) - timelineAgent()->didMarkTimeline(message); -} - void InspectorController::mouseDidMoveOverElement(const HitTestResult& result, unsigned) { if (!enabled() || !searchingForNodeInPage()) @@ -400,18 +322,17 @@ void InspectorController::mouseDidMoveOverElement(const HitTestResult& result, u highlight(node); } -void InspectorController::handleMousePress() +bool InspectorController::handleMousePress() { - if (!enabled()) - return; - - ASSERT(searchingForNodeInPage()); - if (!m_highlightedNode) - return; + if (!enabled() || !searchingForNodeInPage()) + return false; - RefPtr<Node> node = m_highlightedNode; - setSearchingForNode(false); - inspect(node.get()); + if (m_highlightedNode) { + RefPtr<Node> node = m_highlightedNode; + setSearchingForNode(false); + inspect(node.get()); + } + return true; } void InspectorController::setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> client) @@ -420,8 +341,11 @@ void InspectorController::setInspectorFrontendClient(PassOwnPtr<InspectorFronten m_inspectorFrontendClient = client; } -void InspectorController::inspectedWindowScriptObjectCleared(Frame* frame) +void InspectorController::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { + if (world != mainThreadNormalWorld()) + return; + // If the page is supposed to serve as InspectorFrontend notify inspetor frontend // client that it's cleared so that the client can expose inspector bindings. if (m_inspectorFrontendClient && frame == m_inspectedPage->mainFrame()) @@ -461,6 +385,7 @@ void InspectorController::setMonitoringXHREnabled(bool enabled, bool* newState) { *newState = enabled; m_state->setBoolean(InspectorState::monitoringXHR, enabled); + m_settings->setBoolean(InspectorSettings::MonitoringXHREnabled, enabled); } void InspectorController::connectFrontend() @@ -484,6 +409,8 @@ void InspectorController::connectFrontend() if (m_timelineAgent) m_timelineAgent->resetFrontendProxyObject(m_frontend.get()); + m_consoleAgent->setFrontend(m_frontend.get()); + // Initialize Web Inspector title. m_frontend->inspectedURLChanged(m_inspectedPage->mainFrame()->loader()->url().string()); @@ -500,13 +427,6 @@ void InspectorController::connectFrontend() InspectorInstrumentation::frontendCreated(); } -void InspectorController::reuseFrontend() -{ - connectFrontend(); - restoreDebugger(); - restoreProfiler(ProfilerRestoreResetAgent); -} - void InspectorController::show() { if (!enabled()) @@ -574,6 +494,7 @@ void InspectorController::disconnectFrontend() m_profilerAgent->setFrontend(0); m_profilerAgent->stopUserInitiatedProfiling(true); #endif + m_consoleAgent->setFrontend(0); releaseFrontendLifetimeAgents(); m_timelineAgent.clear(); @@ -630,11 +551,24 @@ void InspectorController::populateScriptObjects() m_frontend->profilerWasEnabled(); #endif - m_domAgent->setDocument(m_inspectedPage->mainFrame()->document()); + pushDataCollectedOffline(); if (m_nodeToFocus) focusNode(); + // Dispatch pending frontend commands + for (Vector<pair<long, String> >::iterator it = m_pendingEvaluateTestCommands.begin(); it != m_pendingEvaluateTestCommands.end(); ++it) + m_frontend->evaluateForTestInFrontend((*it).first, (*it).second); + m_pendingEvaluateTestCommands.clear(); + + restoreDebugger(); + restoreProfiler(ProfilerRestoreNoAction); +} + +void InspectorController::pushDataCollectedOffline() +{ + m_domAgent->setDocument(m_inspectedPage->mainFrame()->document()); + #if ENABLE(DATABASE) DatabaseResourcesMap::iterator databasesEnd = m_databaseResources.end(); for (DatabaseResourcesMap::iterator it = m_databaseResources.begin(); it != databasesEnd; ++it) @@ -652,25 +586,15 @@ void InspectorController::populateScriptObjects() m_frontend->didCreateWorker(worker->id(), worker->url(), worker->isSharedWorker()); } #endif - - // Dispatch pending frontend commands - for (Vector<pair<long, String> >::iterator it = m_pendingEvaluateTestCommands.begin(); it != m_pendingEvaluateTestCommands.end(); ++it) - m_frontend->evaluateForTestInFrontend((*it).first, (*it).second); - m_pendingEvaluateTestCommands.clear(); - - restoreDebugger(); - restoreProfiler(ProfilerRestoreNoAction); } void InspectorController::restoreDebugger() { ASSERT(m_frontend); #if ENABLE(JAVASCRIPT_DEBUGGER) - if (InspectorDebuggerAgent::isDebuggerAlwaysEnabled()) - enableDebuggerFromFrontend(false); - else { - if (m_state->getBoolean(InspectorState::debuggerAlwaysEnabled) || m_attachDebuggerWhenShown) - enableDebugger(); + if (InspectorDebuggerAgent::isDebuggerAlwaysEnabled() || m_attachDebuggerWhenShown || m_settings->getBoolean(InspectorSettings::DebuggerAlwaysEnabled)) { + enableDebugger(false); + m_attachDebuggerWhenShown = false; } #endif } @@ -680,7 +604,7 @@ void InspectorController::restoreProfiler(ProfilerRestoreAction action) ASSERT(m_frontend); #if ENABLE(JAVASCRIPT_DEBUGGER) m_profilerAgent->setFrontend(m_frontend.get()); - if (!ScriptProfiler::isProfilerAlwaysEnabled() && m_state->getBoolean(InspectorState::profilerAlwaysEnabled)) + if (!ScriptProfiler::isProfilerAlwaysEnabled() && m_settings->getBoolean(InspectorSettings::ProfilerAlwaysEnabled)) enableProfiler(); if (action == ProfilerRestoreResetAgent) m_profilerAgent->resetState(); @@ -718,14 +642,13 @@ void InspectorController::didCommitLoad(DocumentLoader* loader) m_frontend->inspectedURLChanged(loader->url().string()); m_injectedScriptHost->discardInjectedScripts(); - clearConsoleMessages(); - - m_times.clear(); - m_counts.clear(); + m_consoleAgent->reset(); #if ENABLE(JAVASCRIPT_DEBUGGER) if (m_debuggerAgent) { m_debuggerAgent->clearForPageNavigation(); + if (m_browserDebuggerAgent) + m_browserDebuggerAgent->clearForPageNavigation(); restoreStickyBreakpoints(); } #endif @@ -754,50 +677,11 @@ void InspectorController::didCommitLoad(DocumentLoader* loader) m_domStorageResources.clear(); #endif - if (m_frontend) { - m_mainResourceIdentifier = 0; - m_frontend->didCommitLoad(); + if (m_frontend) m_domAgent->setDocument(m_inspectedPage->mainFrame()->document()); - } } } -void InspectorController::frameDetachedFromParent(Frame* rootFrame) -{ - if (!enabled()) - return; - - if (m_resourceAgent) - m_resourceAgent->frameDetachedFromParent(rootFrame); -} - -void InspectorController::didLoadResourceFromMemoryCache(DocumentLoader* loader, const CachedResource* cachedResource) -{ - if (!enabled()) - return; - - ensureSettingsLoaded(); - - if (m_resourceAgent) - m_resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource); -} - -void InspectorController::identifierForInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request) -{ - if (!enabled()) - return; - ASSERT(m_inspectedPage); - - bool isMainResource = isMainResourceLoader(loader, request.url()); - if (isMainResource) - m_mainResourceIdentifier = identifier; - - ensureSettingsLoaded(); - - if (m_resourceAgent) - m_resourceAgent->identifierForInitialRequest(identifier, request.url(), loader); -} - void InspectorController::mainResourceFiredDOMContentEvent(DocumentLoader* loader, const KURL& url) { if (!enabled() || !isMainResourceLoader(loader, url)) @@ -825,16 +709,14 @@ bool InspectorController::isMainResourceLoader(DocumentLoader* loader, const KUR return loader->frame() == m_inspectedPage->mainFrame() && requestUrl == loader->requestURL(); } -void InspectorController::willSendRequest(unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) +void InspectorController::willSendRequest(ResourceRequest& request) { if (!enabled()) return; - request.setReportLoadTiming(true); - if (m_frontend) { - // Only enable raw headers if front-end is attached, as otherwise we may lack - // permissions to fetch the headers. + // Only enable load timing and raw headers if front-end is attached, as otherwise we may produce overhead. + request.setReportLoadTiming(true); request.setReportRawHeaders(true); if (m_extraHeaders) { @@ -843,104 +725,14 @@ void InspectorController::willSendRequest(unsigned long identifier, ResourceRequ request.setHTTPHeaderField(it->first, it->second); } } - - bool isMainResource = m_mainResourceIdentifier == identifier; - if (m_timelineAgent) - m_timelineAgent->willSendResourceRequest(identifier, isMainResource, request); - - if (m_resourceAgent) - m_resourceAgent->willSendRequest(identifier, request, redirectResponse); -} - -void InspectorController::markResourceAsCached(unsigned long identifier) -{ - if (!enabled()) - return; - - if (m_resourceAgent) - m_resourceAgent->markResourceAsCached(identifier); -} - -void InspectorController::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) -{ - if (!enabled()) - return; - - if (m_resourceAgent) - m_resourceAgent->didReceiveResponse(identifier, loader, response); - - if (response.httpStatusCode() >= 400) { - String message = makeString("Failed to load resource: the server responded with a status of ", String::number(response.httpStatusCode()), " (", response.httpStatusText(), ')'); - addConsoleMessage(new ConsoleMessage(OtherMessageSource, NetworkErrorMessageType, ErrorMessageLevel, message, response.url().string(), identifier)); - } -} - -void InspectorController::didReceiveContentLength(unsigned long identifier, int lengthReceived) -{ - if (!enabled()) - return; - - if (m_resourceAgent) - m_resourceAgent->didReceiveContentLength(identifier, lengthReceived); -} - -void InspectorController::didFinishLoading(unsigned long identifier, double finishTime) -{ - if (!enabled()) - return; - - if (m_timelineAgent) - m_timelineAgent->didFinishLoadingResource(identifier, false, finishTime); - - if (m_resourceAgent) - m_resourceAgent->didFinishLoading(identifier, finishTime); -} - -void InspectorController::didFailLoading(unsigned long identifier, const ResourceError& error) -{ - if (!enabled()) - return; - - if (m_timelineAgent) - m_timelineAgent->didFinishLoadingResource(identifier, true, 0); - - String message = "Failed to load resource"; - if (!error.localizedDescription().isEmpty()) - message += ": " + error.localizedDescription(); - addConsoleMessage(new ConsoleMessage(OtherMessageSource, NetworkErrorMessageType, ErrorMessageLevel, message, error.failingURL(), identifier)); - - if (m_resourceAgent) - m_resourceAgent->didFailLoading(identifier, error); -} - -void InspectorController::resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber) -{ - if (!enabled()) - return; - - if (m_state->getBoolean(InspectorState::monitoringXHR)) - addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + url + "\".", sendLineNumber, sendURL); - - if (m_resourceAgent) - m_resourceAgent->setInitialContent(identifier, sourceString, "XHR"); -} - -void InspectorController::scriptImported(unsigned long identifier, const String& sourceString) -{ - if (!enabled()) - return; - - if (m_resourceAgent) - m_resourceAgent->setInitialContent(identifier, sourceString, "Script"); } void InspectorController::ensureSettingsLoaded() { - if (m_settingsLoaded) + if (m_settings) return; - m_settingsLoaded = true; - - m_state->loadFromSettings(); + m_settings = new InspectorSettings(m_client); + m_state->setBoolean(InspectorState::monitoringXHR, m_settings->getBoolean(InspectorSettings::MonitoringXHREnabled)); } void InspectorController::startTimelineProfiler() @@ -990,8 +782,10 @@ private: virtual void performTask(ScriptExecutionContext* scriptContext) { - if (InspectorController* inspector = scriptContext->inspectorController()) - inspector->postWorkerNotificationToFrontend(*m_worker, m_action); + if (scriptContext->isDocument()) { + if (InspectorController* inspector = static_cast<Document*>(scriptContext)->page()->inspectorController()) + inspector->postWorkerNotificationToFrontend(*m_worker, m_action); + } } private: @@ -1201,17 +995,6 @@ void InspectorController::addProfile(PassRefPtr<ScriptProfile> prpProfile, unsig m_profilerAgent->addProfile(prpProfile, lineNumber, sourceURL); } -void InspectorController::addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile> prpProfile, unsigned lineNumber, const String& sourceURL) -{ - m_profilerAgent->addProfileFinishedMessageToConsole(prpProfile, lineNumber, sourceURL); -} - -void InspectorController::addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL) -{ - m_profilerAgent->addStartProfilingMessageToConsole(title, lineNumber, sourceURL); -} - - bool InspectorController::isRecordingUserInitiatedProfile() const { return m_profilerAgent->isRecordingUserInitiatedProfile(); @@ -1246,60 +1029,61 @@ bool InspectorController::profilerEnabled() const void InspectorController::enableProfiler(bool always, bool skipRecompile) { if (always) - m_state->setBoolean(InspectorState::profilerAlwaysEnabled, true); + m_settings->setBoolean(InspectorSettings::ProfilerAlwaysEnabled, true); m_profilerAgent->enable(skipRecompile); } void InspectorController::disableProfiler(bool always) { if (always) - m_state->setBoolean(InspectorState::profilerAlwaysEnabled, false); + m_settings->setBoolean(InspectorSettings::ProfilerAlwaysEnabled, false); m_profilerAgent->disable(); } #endif #if ENABLE(JAVASCRIPT_DEBUGGER) -void InspectorController::enableDebuggerFromFrontend(bool always) +void InspectorController::showAndEnableDebugger() +{ + if (!enabled()) + return; + + if (debuggerEnabled()) + return; + + if (!m_frontend) { + m_attachDebuggerWhenShown = true; + showPanel(ScriptsPanel); + } else + enableDebugger(false); +} + +void InspectorController::enableDebugger(bool always) { ASSERT(!debuggerEnabled()); if (always) - m_state->setBoolean(InspectorState::debuggerAlwaysEnabled, true); + m_settings->setBoolean(InspectorSettings::DebuggerAlwaysEnabled, true); ASSERT(m_inspectedPage); m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend.get()); + m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this); restoreStickyBreakpoints(); m_frontend->debuggerWasEnabled(); } -void InspectorController::enableDebugger() -{ - if (!enabled()) - return; - - if (debuggerEnabled()) - return; - - if (!m_frontend) - m_attachDebuggerWhenShown = true; - else { - m_frontend->attachDebuggerWhenShown(); - m_attachDebuggerWhenShown = false; - } -} - void InspectorController::disableDebugger(bool always) { if (!enabled()) return; if (always) - m_state->setBoolean(InspectorState::debuggerAlwaysEnabled, false); + m_settings->setBoolean(InspectorSettings::DebuggerAlwaysEnabled, false); ASSERT(m_inspectedPage); m_debuggerAgent.clear(); + m_browserDebuggerAgent.clear(); m_attachDebuggerWhenShown = false; @@ -1320,10 +1104,6 @@ void InspectorController::setStickyBreakpoints(PassRefPtr<InspectorObject> break void InspectorController::restoreStickyBreakpoints() { - m_eventListenerBreakpoints.clear(); - m_XHRBreakpoints.clear(); - m_hasXHRBreakpointWithEmptyURL = false; - RefPtr<InspectorObject> allBreakpoints = m_state->getObject(InspectorState::stickyBreakpoints); KURL url = m_inspectedPage->mainFrame()->loader()->url(); url.removeFragmentIdentifier(); @@ -1352,13 +1132,14 @@ void InspectorController::restoreStickyBreakpoint(PassRefPtr<InspectorObject> br if (!condition) return; - if (type == eventListenerBreakpointType) { + if (type == eventListenerBreakpointType && m_browserDebuggerAgent) { if (!enabled) return; String eventName; - if (condition->getString("eventName", &eventName)) - setEventListenerBreakpoint(eventName); - } else if (type == javaScriptBreakpointType) { + if (!condition->getString("eventName", &eventName)) + return; + m_browserDebuggerAgent->setEventListenerBreakpoint(eventName); + } else if (type == javaScriptBreakpointType && m_debuggerAgent) { String url; if (!condition->getString("url", &url)) return; @@ -1368,70 +1149,18 @@ void InspectorController::restoreStickyBreakpoint(PassRefPtr<InspectorObject> br String javaScriptCondition; if (!condition->getString("condition", &javaScriptCondition)) return; - if (m_debuggerAgent) - m_debuggerAgent->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled); - } else if (type == xhrBreakpointType) { + m_debuggerAgent->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled); + } else if (type == xhrBreakpointType && m_browserDebuggerAgent) { if (!enabled) return; String url; - if (condition->getString("url", &url)) - setXHRBreakpoint(url); - } -} - -void InspectorController::setEventListenerBreakpoint(const String& eventName) -{ - m_eventListenerBreakpoints.add(eventName); -} - -void InspectorController::removeEventListenerBreakpoint(const String& eventName) -{ - m_eventListenerBreakpoints.remove(eventName); -} - -bool InspectorController::hasEventListenerBreakpoint(const String& eventName) -{ - return m_eventListenerBreakpoints.contains(eventName); -} - -void InspectorController::setXHRBreakpoint(const String& url) -{ - if (url.isEmpty()) - m_hasXHRBreakpointWithEmptyURL = true; - else - m_XHRBreakpoints.add(url); -} - -void InspectorController::removeXHRBreakpoint(const String& url) -{ - if (url.isEmpty()) - m_hasXHRBreakpointWithEmptyURL = false; - else - m_XHRBreakpoints.remove(url); -} - -bool InspectorController::hasXHRBreakpoint(const String& url, String* breakpointURL) -{ - if (m_hasXHRBreakpointWithEmptyURL) { - *breakpointURL = ""; - return true; - } - for (HashSet<String>::iterator it = m_XHRBreakpoints.begin(); it != m_XHRBreakpoints.end(); ++it) { - if (url.contains(*it)) { - *breakpointURL = *it; - return true; - } + if (!condition->getString("url", &url)) + return; + m_browserDebuggerAgent->setXHRBreakpoint(url); } - return false; } - #endif -void InspectorController::setInjectedScriptSource(const String& source) -{ - injectedScriptHost()->setInjectedScriptSource(source); -} - void InspectorController::dispatchOnInjectedScript(long injectedScriptId, const String& methodName, const String& arguments, RefPtr<InspectorValue>* result, bool* hadException) { if (!m_frontend) @@ -1739,42 +1468,6 @@ void InspectorController::openInInspectedWindow(const String& url) newFrame->loader()->changeLocation(mainFrame->document()->securityOrigin(), newFrame->loader()->completeURL(url), "", false, false); } -void InspectorController::count(const String& title, unsigned lineNumber, const String& sourceID) -{ - String identifier = makeString(title, '@', sourceID, ':', String::number(lineNumber)); - HashMap<String, unsigned>::iterator it = m_counts.find(identifier); - int count; - if (it == m_counts.end()) - count = 1; - else { - count = it->second + 1; - m_counts.remove(it); - } - - m_counts.add(identifier, count); - - String message = makeString(title, ": ", String::number(count)); - addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceID); -} - -void InspectorController::startTiming(const String& title) -{ - m_times.add(title, currentTime() * 1000); -} - -bool InspectorController::stopTiming(const String& title, double& elapsed) -{ - HashMap<String, double>::iterator it = m_times.find(title); - if (it == m_times.end()) - return false; - - double startTime = it->second; - m_times.remove(it); - - elapsed = currentTime() * 1000 - startTime; - return true; -} - InjectedScript InspectorController::injectedScriptForNodeId(long id) { diff --git a/Source/WebCore/inspector/InspectorController.h b/Source/WebCore/inspector/InspectorController.h index 481344d..9cddc56 100644 --- a/Source/WebCore/inspector/InspectorController.h +++ b/Source/WebCore/inspector/InspectorController.h @@ -45,8 +45,8 @@ namespace WebCore { class CachedResource; class CharacterData; -class ConsoleMessage; class Database; +class DOMWrapperWorld; class Document; class DocumentLoader; class FloatRect; @@ -57,7 +57,9 @@ class InjectedScript; class InjectedScriptHost; class InspectorArray; class InspectorBackendDispatcher; +class InspectorBrowserDebuggerAgent; class InspectorClient; +class InspectorConsoleAgent; class InspectorCSSAgent; class InspectorDOMAgent; class InspectorDOMStorageAgent; @@ -70,6 +72,7 @@ class InspectorFrontendClient; class InspectorObject; class InspectorProfilerAgent; class InspectorResourceAgent; +class InspectorSettings; class InspectorState; class InspectorStorageAgent; class InspectorTimelineAgent; @@ -141,39 +144,22 @@ public: void reuseFrontend(); void disconnectFrontend(); - void setConsoleMessagesEnabled(bool enabled, bool* newState); - void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack>); - void addMessageToConsole(MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&); - void clearConsoleMessages(); - const Vector<OwnPtr<ConsoleMessage> >& consoleMessages() const { return m_consoleMessages; } + InspectorConsoleAgent* consoleAgent() const { return m_consoleAgent.get(); } + InspectorDOMAgent* domAgent() const { return m_domAgent.get(); } bool searchingForNodeInPage() const; void mouseDidMoveOverElement(const HitTestResult&, unsigned modifierFlags); - void handleMousePress(); + bool handleMousePress(); void setInspectorFrontendClient(PassOwnPtr<InspectorFrontendClient> client); bool hasInspectorFrontendClient() const { return m_inspectorFrontendClient; } - void inspectedWindowScriptObjectCleared(Frame*); + void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*); void didCommitLoad(DocumentLoader*); - void frameDetachedFromParent(Frame*); - void didLoadResourceFromMemoryCache(DocumentLoader*, const CachedResource*); - - void identifierForInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&); - void willSendRequest(unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); - void markResourceAsCached(unsigned long identifier); - void didReceiveResponse(unsigned long identifier, DocumentLoader*, const ResourceResponse&); - void didReceiveContentLength(unsigned long identifier, int lengthReceived); - void didFinishLoading(unsigned long identifier, double finishTime); - void didFailLoading(unsigned long identifier, const ResourceError&); - void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber); - void scriptImported(unsigned long identifier, const String& sourceString); void setExtraHeaders(PassRefPtr<InspectorObject>); - void ensureSettingsLoaded(); - void startTimelineProfiler(); void stopTimelineProfiler(); InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); } @@ -217,20 +203,8 @@ public: void openInInspectedWindow(const String& url); void drawElementTitle(GraphicsContext&, const IntRect& boundingBox, const FloatRect& overlayRect, WebCore::Settings*) const; - void count(const String& title, unsigned lineNumber, const String& sourceID); - - void startTiming(const String& title); - bool stopTiming(const String& title, double& elapsed); - - void startGroup(PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack> callFrame, bool collapsed = false); - void endGroup(MessageSource source, unsigned lineNumber, const String& sourceURL); - - void markTimeline(const String& message); - #if ENABLE(JAVASCRIPT_DEBUGGER) void addProfile(PassRefPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL); - void addProfileFinishedMessageToConsole(PassRefPtr<ScriptProfile>, unsigned lineNumber, const String& sourceURL); - void addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL); bool isRecordingUserInitiatedProfile() const; String getCurrentUserInitiatedProfileName(bool incrementProfileNumber = false); void startProfiling() { startUserInitiatedProfiling(); } @@ -241,18 +215,13 @@ public: void disableProfiler(bool always = false); bool profilerEnabled() const; - void enableDebugger(); + void showAndEnableDebugger(); + void enableDebugger(bool always); void disableDebugger(bool always = false); bool debuggerEnabled() const { return m_debuggerAgent; } void resume(); void setStickyBreakpoints(PassRefPtr<InspectorObject> breakpoints); - void setEventListenerBreakpoint(const String& eventName); - void removeEventListenerBreakpoint(const String& eventName); - bool hasEventListenerBreakpoint(const String& eventName); - void setXHRBreakpoint(const String& url); - void removeXHRBreakpoint(const String& url); - bool hasXHRBreakpoint(const String& url, String* breakpointURL); #endif void setInjectedScriptSource(const String& source); @@ -272,26 +241,28 @@ public: bool inspectorStartsAttached(); void setInspectorStartsAttached(bool); void setInspectorAttachedHeight(long height); - int inspectorAttachedHeight() const; - - static const unsigned defaultAttachedHeight; + long inspectorAttachedHeight() const; private: - void getInspectorState(RefPtr<InspectorObject>* state); - void setConsoleMessagesEnabled(bool enabled); - friend class InspectorBackend; friend class InspectorBackendDispatcher; + friend class InspectorBrowserDebuggerAgent; friend class InspectorInstrumentation; friend class InjectedScriptHost; + void willSendRequest(ResourceRequest&); + + void ensureSettingsLoaded(); + + void getInspectorState(RefPtr<InspectorObject>* state); + + void populateScriptObjects(); + void pushDataCollectedOffline(); + void restoreDebugger(); enum ProfilerRestoreAction { ProfilerRestoreNoAction = 0, ProfilerRestoreResetAgent = 1 }; - - void populateScriptObjects(); - void restoreDebugger(); void restoreProfiler(ProfilerRestoreAction action); void unbindAllResources(); void setSearchingForNode(bool enabled); @@ -304,7 +275,6 @@ private: #if ENABLE(JAVASCRIPT_DEBUGGER) void toggleRecordButton(bool); - void enableDebuggerFromFrontend(bool always); void restoreStickyBreakpoints(); void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint); #endif @@ -314,8 +284,6 @@ private: void focusNode(); - void addConsoleMessage(PassOwnPtr<ConsoleMessage>); - bool isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl); void didEvaluateForTestInFrontend(long callId, const String& jsonResult); @@ -338,6 +306,7 @@ private: OwnPtr<InspectorTimelineAgent> m_timelineAgent; OwnPtr<InspectorState> m_state; + OwnPtr<InspectorSettings> m_settings; #if ENABLE(OFFLINE_WEB_APPLICATIONS) OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent; @@ -349,11 +318,6 @@ private: RefPtr<Node> m_nodeToFocus; RefPtr<InspectorResourceAgent> m_resourceAgent; - unsigned long m_mainResourceIdentifier; - Vector<OwnPtr<ConsoleMessage> > m_consoleMessages; - unsigned m_expiredConsoleMessageCount; - HashMap<String, double> m_times; - HashMap<String, unsigned> m_counts; #if ENABLE(DATABASE) typedef HashMap<int, RefPtr<InspectorDatabaseResource> > DatabaseResourcesMap; @@ -366,13 +330,9 @@ private: String m_showAfterVisible; RefPtr<Node> m_highlightedNode; - ConsoleMessage* m_previousMessage; - bool m_settingsLoaded; OwnPtr<InspectorBackendDispatcher> m_inspectorBackendDispatcher; RefPtr<InjectedScriptHost> m_injectedScriptHost; - - typedef HashMap<String, String> Settings; - mutable Settings m_settings; + OwnPtr<InspectorConsoleAgent> m_consoleAgent; Vector<pair<long, String> > m_pendingEvaluateTestCommands; Vector<String> m_scriptsToEvaluateOnLoad; @@ -380,10 +340,7 @@ private: #if ENABLE(JAVASCRIPT_DEBUGGER) bool m_attachDebuggerWhenShown; OwnPtr<InspectorDebuggerAgent> m_debuggerAgent; - - HashSet<String> m_eventListenerBreakpoints; - HashSet<String> m_XHRBreakpoints; - bool m_hasXHRBreakpointWithEmptyURL; + OwnPtr<InspectorBrowserDebuggerAgent> m_browserDebuggerAgent; OwnPtr<InspectorProfilerAgent> m_profilerAgent; #endif diff --git a/Source/WebCore/inspector/InspectorDOMAgent.cpp b/Source/WebCore/inspector/InspectorDOMAgent.cpp index e42bf2a..19ae30d 100644 --- a/Source/WebCore/inspector/InspectorDOMAgent.cpp +++ b/Source/WebCore/inspector/InspectorDOMAgent.cpp @@ -204,16 +204,6 @@ public: virtual ~MatchPlainTextJob() { } }; -enum DOMBreakpointType { - SubtreeModified = 0, - AttributeModified, - NodeRemoved, - DOMBreakpointTypesCount -}; - -const uint32_t inheritableDOMBreakpointTypesMask = (1 << SubtreeModified); -const int domBreakpointDerivedTypeShift = 16; - } InspectorDOMAgent::InspectorDOMAgent(InspectorFrontend* frontend) @@ -268,6 +258,15 @@ void InspectorDOMAgent::releaseDanglingNodes() m_danglingNodeToIdMaps.clear(); } +void InspectorDOMAgent::startListeningFrameDocument(Node* frameOwnerNode) +{ + ASSERT(frameOwnerNode->isFrameOwnerElement()); + HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(frameOwnerNode); + Document* doc = frameOwner->contentDocument(); + if (doc) + startListening(doc); +} + void InspectorDOMAgent::startListening(Document* doc) { if (m_documents.contains(doc)) @@ -395,7 +394,6 @@ void InspectorDOMAgent::discardBindings() releaseDanglingNodes(); m_childrenRequested.clear(); m_inspectedNodes.clear(); - m_breakpoints.clear(); } Node* InspectorDOMAgent::nodeForId(long id) @@ -760,101 +758,6 @@ void InspectorDOMAgent::searchCanceled() m_searchResults.clear(); } -void InspectorDOMAgent::setDOMBreakpoint(long nodeId, long type) -{ - Node* node = nodeForId(nodeId); - if (!node) - return; - - uint32_t rootBit = 1 << type; - m_breakpoints.set(node, m_breakpoints.get(node) | rootBit); - if (rootBit & inheritableDOMBreakpointTypesMask) { - for (Node* child = innerFirstChild(node); child; child = innerNextSibling(child)) - updateSubtreeBreakpoints(child, rootBit, true); - } -} - -void InspectorDOMAgent::removeDOMBreakpoint(long nodeId, long type) -{ - Node* node = nodeForId(nodeId); - if (!node) - return; - - uint32_t rootBit = 1 << type; - uint32_t mask = m_breakpoints.get(node) & ~rootBit; - if (mask) - m_breakpoints.set(node, mask); - else - m_breakpoints.remove(node); - - if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) { - for (Node* child = innerFirstChild(node); child; child = innerNextSibling(child)) - updateSubtreeBreakpoints(child, rootBit, false); - } -} - -bool InspectorDOMAgent::shouldBreakOnNodeInsertion(Node*, Node* parent, PassRefPtr<InspectorObject> details) -{ - if (hasBreakpoint(parent, SubtreeModified)) { - descriptionForDOMEvent(parent, SubtreeModified, true, details); - return true; - } - return false; -} - -bool InspectorDOMAgent::shouldBreakOnNodeRemoval(Node* node, PassRefPtr<InspectorObject> details) -{ - if (hasBreakpoint(node, NodeRemoved)) { - descriptionForDOMEvent(node, NodeRemoved, false, details); - return true; - } - if (hasBreakpoint(innerParentNode(node), SubtreeModified)) { - descriptionForDOMEvent(node, SubtreeModified, false, details); - return true; - } - return false; -} - -bool InspectorDOMAgent::shouldBreakOnAttributeModification(Element* element, PassRefPtr<InspectorObject> details) -{ - if (hasBreakpoint(element, AttributeModified)) { - descriptionForDOMEvent(element, AttributeModified, false, details); - return true; - } - return false; -} - -void InspectorDOMAgent::descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, PassRefPtr<InspectorObject> description) -{ - ASSERT(hasBreakpoint(target, breakpointType)); - - Node* breakpointOwner = target; - if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { - // For inheritable breakpoint types, target node isn't always the same as the node that owns a breakpoint. - // Target node may be unknown to frontend, so we need to push it first. - long targetNodeId = pushNodePathToFrontend(target); - ASSERT(targetNodeId); - description->setNumber("targetNodeId", targetNodeId); - - // Find breakpoint owner node. - if (!insertion) - breakpointOwner = innerParentNode(target); - ASSERT(breakpointOwner); - while (!(m_breakpoints.get(breakpointOwner) & (1 << breakpointType))) { - breakpointOwner = innerParentNode(breakpointOwner); - ASSERT(breakpointOwner); - } - - if (breakpointType == SubtreeModified) - description->setBoolean("insertion", insertion); - } - - long breakpointOwnerNodeId = m_documentNodeToIdMap.get(breakpointOwner); - ASSERT(breakpointOwnerNodeId); - description->setNumber("nodeId", breakpointOwnerNodeId); - description->setNumber("type", breakpointType); -} - String InspectorDOMAgent::documentURLString(Document* document) const { if (!document || document->url().isNull()) @@ -947,20 +850,24 @@ PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForElementAttributes(Ele PassRefPtr<InspectorArray> InspectorDOMAgent::buildArrayForContainerChildren(Node* container, int depth, NodeToIdMap* nodesMap) { RefPtr<InspectorArray> children = InspectorArray::create(); + Node* child = innerFirstChild(container); + if (depth == 0) { // Special case the_only text child. - if (innerChildNodeCount(container) == 1) { - Node *child = innerFirstChild(container); - if (child->nodeType() == Node::TEXT_NODE) - children->pushObject(buildObjectForNode(child, 0, nodesMap)); - } + if (child && child->nodeType() == Node::TEXT_NODE && !innerNextSibling(child)) + children->pushObject(buildObjectForNode(child, 0, nodesMap)); return children.release(); } else if (depth > 0) { depth--; } - for (Node *child = innerFirstChild(container); child; child = innerNextSibling(child)) + if (container->isFrameOwnerElement()) + startListeningFrameDocument(container); + + while (child) { children->pushObject(buildObjectForNode(child, depth, nodesMap)); + child = innerNextSibling(child); + } return children.release(); } @@ -987,10 +894,8 @@ Node* InspectorDOMAgent::innerFirstChild(Node* node) if (node->isFrameOwnerElement()) { HTMLFrameOwnerElement* frameOwner = static_cast<HTMLFrameOwnerElement*>(node); Document* doc = frameOwner->contentDocument(); - if (doc) { - startListening(doc); + if (doc) return doc->firstChild(); - } } node = node->firstChild(); while (isWhitespace(node)) @@ -1059,13 +964,6 @@ void InspectorDOMAgent::didInsertDOMNode(Node* node) if (isWhitespace(node)) return; - if (m_breakpoints.size()) { - uint32_t mask = m_breakpoints.get(innerParentNode(node)); - uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask; - if (inheritableTypesMask) - updateSubtreeBreakpoints(node, inheritableTypesMask, true); - } - // We could be attaching existing subtree. Forget the bindings. unbind(node, &m_documentNodeToIdMap); @@ -1092,21 +990,6 @@ void InspectorDOMAgent::didRemoveDOMNode(Node* node) if (isWhitespace(node)) return; - if (m_breakpoints.size()) { - // Remove subtree breakpoints. - m_breakpoints.remove(node); - Vector<Node*> stack(1, innerFirstChild(node)); - do { - Node* node = stack.last(); - stack.removeLast(); - if (!node) - continue; - m_breakpoints.remove(node); - stack.append(innerFirstChild(node)); - stack.append(innerNextSibling(node)); - } while (!stack.isEmpty()); - } - ContainerNode* parent = node->parentNode(); long parentId = m_documentNodeToIdMap.get(parent); // If parent is not mapped yet -> ignore the event. @@ -1146,31 +1029,6 @@ void InspectorDOMAgent::characterDataModified(CharacterData* characterData) m_frontend->characterDataModified(id, characterData->data()); } -bool InspectorDOMAgent::hasBreakpoint(Node* node, long type) -{ - uint32_t rootBit = 1 << type; - uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift; - return m_breakpoints.get(node) & (rootBit | derivedBit); -} - -void InspectorDOMAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set) -{ - uint32_t oldMask = m_breakpoints.get(node); - uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift; - uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask; - if (newMask) - m_breakpoints.set(node, newMask); - else - m_breakpoints.remove(node); - - uint32_t newRootMask = rootMask & ~newMask; - if (!newRootMask) - return; - - for (Node* child = innerFirstChild(node); child; child = innerNextSibling(child)) - updateSubtreeBreakpoints(child, newRootMask, set); -} - Node* InspectorDOMAgent::nodeForPath(const String& path) { // The path is of form "1,HTML,2,BODY,1,DIV" diff --git a/Source/WebCore/inspector/InspectorDOMAgent.h b/Source/WebCore/inspector/InspectorDOMAgent.h index 1611baa..97175fe 100644 --- a/Source/WebCore/inspector/InspectorDOMAgent.h +++ b/Source/WebCore/inspector/InspectorDOMAgent.h @@ -124,7 +124,7 @@ namespace WebCore { bool shouldBreakOnNodeRemoval(Node* node, PassRefPtr<InspectorObject> details); bool shouldBreakOnAttributeModification(Element* element, PassRefPtr<InspectorObject> details); - // Methods called from the InspectorController. + // Methods called from the InspectorInstrumentation. void setDocument(Document* document); void releaseDanglingNodes(); @@ -144,10 +144,17 @@ namespace WebCore { String documentURLString(Document* document) const; - void setDOMBreakpoint(long nodeId, long type); - void removeDOMBreakpoint(long nodeId, long type); + // 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. + static Node* innerFirstChild(Node*); + static Node* innerNextSibling(Node*); + static Node* innerPreviousSibling(Node*); + static unsigned innerChildNodeCount(Node*); + static Node* innerParentNode(Node*); + static bool isWhitespace(Node*); private: + void startListeningFrameDocument(Node* frameOwnerNode); void startListening(Document* document); void stopListening(Document* document); @@ -169,15 +176,6 @@ namespace WebCore { 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. - Node* innerFirstChild(Node* node); - Node* innerNextSibling(Node* node); - Node* innerPreviousSibling(Node* node); - unsigned innerChildNodeCount(Node* node); - Node* innerParentNode(Node* node); - bool isWhitespace(Node* node); - Document* mainFrameDocument() const; void onMatchJobsTimer(Timer<InspectorDOMAgent>*); @@ -202,7 +200,6 @@ namespace WebCore { Timer<InspectorDOMAgent> m_matchJobsTimer; HashSet<RefPtr<Node> > m_searchResults; Vector<long> m_inspectedNodes; - HashMap<Node*, uint32_t> m_breakpoints; }; #endif diff --git a/Source/WebCore/inspector/InspectorDOMStorageAgent.h b/Source/WebCore/inspector/InspectorDOMStorageAgent.h index bdfd7cb..f1d4d5c 100644 --- a/Source/WebCore/inspector/InspectorDOMStorageAgent.h +++ b/Source/WebCore/inspector/InspectorDOMStorageAgent.h @@ -36,7 +36,6 @@ namespace WebCore { class InspectorArray; -class InspectorController; class InspectorDOMStorageResource; class InspectorFrontend; class Storage; diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp index 88db3ae..36bcab8 100644 --- a/Source/WebCore/inspector/InspectorDatabaseAgent.cpp +++ b/Source/WebCore/inspector/InspectorDatabaseAgent.cpp @@ -34,9 +34,9 @@ #include "Database.h" #include "ExceptionCode.h" -#include "InspectorFrontend.h" #include "InspectorController.h" #include "InspectorDatabaseResource.h" +#include "InspectorFrontend.h" #include "InspectorValues.h" #include "SQLError.h" #include "SQLStatementCallback.h" diff --git a/Source/WebCore/inspector/InspectorDatabaseAgent.h b/Source/WebCore/inspector/InspectorDatabaseAgent.h index c73d3c8..a9e9a5d 100644 --- a/Source/WebCore/inspector/InspectorDatabaseAgent.h +++ b/Source/WebCore/inspector/InspectorDatabaseAgent.h @@ -37,7 +37,6 @@ namespace WebCore { class Database; class InspectorArray; -class InspectorController; class InspectorDatabaseResource; class InspectorFrontend; diff --git a/Source/WebCore/inspector/InspectorDebuggerAgent.cpp b/Source/WebCore/inspector/InspectorDebuggerAgent.cpp index 0046989..82c250a 100644 --- a/Source/WebCore/inspector/InspectorDebuggerAgent.cpp +++ b/Source/WebCore/inspector/InspectorDebuggerAgent.cpp @@ -152,17 +152,17 @@ void InspectorDebuggerAgent::resume() ScriptDebugServer::shared().continueProgram(); } -void InspectorDebuggerAgent::stepOverStatement() +void InspectorDebuggerAgent::stepOver() { ScriptDebugServer::shared().stepOverStatement(); } -void InspectorDebuggerAgent::stepIntoStatement() +void InspectorDebuggerAgent::stepInto() { ScriptDebugServer::shared().stepIntoStatement(); } -void InspectorDebuggerAgent::stepOutOfFunction() +void InspectorDebuggerAgent::stepOut() { ScriptDebugServer::shared().stepOutOfFunction(); } @@ -199,10 +199,10 @@ PassRefPtr<InspectorValue> InspectorDebuggerAgent::currentCallFrames() // JavaScriptDebugListener functions -void InspectorDebuggerAgent::didParseSource(const String& sourceID, const String& url, const String& data, int firstLine, ScriptWorldType worldType) +void InspectorDebuggerAgent::didParseSource(const String& sourceID, const String& url, const String& data, int lineOffset, int columnOffset, ScriptWorldType worldType) { // Don't send script content to the front end until it's really needed. - m_frontend->parsedScriptSource(sourceID, url, "", firstLine, worldType); + m_frontend->parsedScriptSource(sourceID, url, lineOffset, columnOffset, worldType); m_scriptIDToContent.set(sourceID, data); diff --git a/Source/WebCore/inspector/InspectorDebuggerAgent.h b/Source/WebCore/inspector/InspectorDebuggerAgent.h index 6e45e59..07d2ab9 100644 --- a/Source/WebCore/inspector/InspectorDebuggerAgent.h +++ b/Source/WebCore/inspector/InspectorDebuggerAgent.h @@ -73,9 +73,9 @@ public: void breakProgram(DebuggerEventType type, PassRefPtr<InspectorValue> data); void pause(); void resume(); - void stepOverStatement(); - void stepIntoStatement(); - void stepOutOfFunction(); + void stepOver(); + void stepInto(); + void stepOut(); void setPauseOnExceptionsState(long pauseState, long* newState); long pauseOnExceptionsState(); @@ -87,7 +87,7 @@ private: PassRefPtr<InspectorValue> currentCallFrames(); - virtual void didParseSource(const String& sourceID, const String& url, const String& data, int firstLine, ScriptWorldType); + virtual void didParseSource(const String& sourceID, const String& url, const String& data, int lineOffset, int columnOffset, ScriptWorldType); virtual void failedToParseSource(const String& url, const String& data, int firstLine, int errorLine, const String& errorMessage); virtual void didPause(ScriptState*); virtual void didContinue(); diff --git a/Source/WebCore/inspector/InspectorFrontendHost.cpp b/Source/WebCore/inspector/InspectorFrontendHost.cpp index 4b7e13f..342af0f 100644 --- a/Source/WebCore/inspector/InspectorFrontendHost.cpp +++ b/Source/WebCore/inspector/InspectorFrontendHost.cpp @@ -41,6 +41,7 @@ #include "FrameLoader.h" #include "HitTestResult.h" #include "HTMLFrameOwnerElement.h" +#include "InspectorController.h" #include "InspectorFrontendClient.h" #include "Page.h" #include "Pasteboard.h" diff --git a/Source/WebCore/inspector/InspectorFrontendHost.h b/Source/WebCore/inspector/InspectorFrontendHost.h index d333893..03c55a9 100644 --- a/Source/WebCore/inspector/InspectorFrontendHost.h +++ b/Source/WebCore/inspector/InspectorFrontendHost.h @@ -32,7 +32,6 @@ #include "Console.h" #include "ContextMenu.h" #include "ContextMenuProvider.h" -#include "InspectorController.h" #include "PlatformString.h" #include <wtf/RefCounted.h> @@ -46,6 +45,7 @@ class FrontendMenuProvider; class InspectorClient; class InspectorFrontendClient; class Node; +class Page; class InspectorFrontendHost : public RefCounted<InspectorFrontendHost> { diff --git a/Source/WebCore/inspector/InspectorInstrumentation.cpp b/Source/WebCore/inspector/InspectorInstrumentation.cpp index f3a73ba..aa941df 100644 --- a/Source/WebCore/inspector/InspectorInstrumentation.cpp +++ b/Source/WebCore/inspector/InspectorInstrumentation.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2010 Google Inc. All rights reserved. +* Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -34,21 +34,26 @@ #if ENABLE(INSPECTOR) #include "DOMWindow.h" +#include "Database.h" +#include "DocumentLoader.h" #include "Event.h" #include "EventContext.h" +#include "InspectorApplicationCacheAgent.h" +#include "InspectorBrowserDebuggerAgent.h" +#include "InspectorConsoleAgent.h" #include "InspectorController.h" #include "InspectorDOMAgent.h" #include "InspectorDebuggerAgent.h" +#include "InspectorProfilerAgent.h" +#include "InspectorResourceAgent.h" #include "InspectorTimelineAgent.h" +#include "ScriptArguments.h" +#include "ScriptCallStack.h" #include "XMLHttpRequest.h" #include <wtf/text/CString.h> namespace WebCore { -static const char* const domNativeBreakpointType = "DOM"; -static const char* const eventListenerNativeBreakpointType = "EventListener"; -static const char* const xhrNativeBreakpointType = "XHR"; - static const char* const listenerEventCategoryType = "listener"; static const char* const instrumentationEventCategoryType = "instrumentation"; @@ -75,20 +80,21 @@ static bool eventHasListeners(const AtomicString& eventType, DOMWindow* window, return false; } +void InspectorInstrumentation::didClearWindowObjectInWorldImpl(InspectorController* inspectorController, Frame* frame, DOMWrapperWorld* world) +{ + inspectorController->didClearWindowObjectInWorld(frame, world); +} + +void InspectorInstrumentation::inspectedPageDestroyedImpl(InspectorController* inspectorController) +{ + inspectorController->inspectedPageDestroyed(); +} + void InspectorInstrumentation::willInsertDOMNodeImpl(InspectorController* inspectorController, Node* node, Node* parent) { #if ENABLE(JAVASCRIPT_DEBUGGER) - InspectorDebuggerAgent* debuggerAgent = inspectorController->m_debuggerAgent.get(); - if (!debuggerAgent) - return; - InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get(); - if (!domAgent) - return; - RefPtr<InspectorObject> eventData = InspectorObject::create(); - if (domAgent->shouldBreakOnNodeInsertion(node, parent, eventData)) { - eventData->setString("breakpointType", domNativeBreakpointType); - debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData); - } + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->willInsertDOMNode(node, parent); #endif } @@ -96,27 +102,26 @@ void InspectorInstrumentation::didInsertDOMNodeImpl(InspectorController* inspect { if (InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get()) domAgent->didInsertDOMNode(node); +#if ENABLE(JAVASCRIPT_DEBUGGER) + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->didInsertDOMNode(node); +#endif } void InspectorInstrumentation::willRemoveDOMNodeImpl(InspectorController* inspectorController, Node* node) { #if ENABLE(JAVASCRIPT_DEBUGGER) - InspectorDebuggerAgent* debuggerAgent = inspectorController->m_debuggerAgent.get(); - if (!debuggerAgent) - return; - InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get(); - if (!domAgent) - return; - RefPtr<InspectorObject> eventData = InspectorObject::create(); - if (domAgent->shouldBreakOnNodeRemoval(node, eventData)) { - eventData->setString("breakpointType", domNativeBreakpointType); - debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData); - } + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->willRemoveDOMNode(node); #endif } void InspectorInstrumentation::didRemoveDOMNodeImpl(InspectorController* inspectorController, Node* node) { +#if ENABLE(JAVASCRIPT_DEBUGGER) + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->didRemoveDOMNode(node); +#endif if (InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get()) domAgent->didRemoveDOMNode(node); } @@ -124,17 +129,8 @@ void InspectorInstrumentation::didRemoveDOMNodeImpl(InspectorController* inspect void InspectorInstrumentation::willModifyDOMAttrImpl(InspectorController* inspectorController, Element* element) { #if ENABLE(JAVASCRIPT_DEBUGGER) - InspectorDebuggerAgent* debuggerAgent = inspectorController->m_debuggerAgent.get(); - if (!debuggerAgent) - return; - InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get(); - if (!domAgent) - return; - RefPtr<InspectorObject> eventData = InspectorObject::create(); - if (domAgent->shouldBreakOnAttributeModification(element, eventData)) { - eventData->setString("breakpointType", domNativeBreakpointType); - debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData); - } + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->willModifyDOMAttr(element); #endif } @@ -144,6 +140,16 @@ void InspectorInstrumentation::didModifyDOMAttrImpl(InspectorController* inspect domAgent->didModifyDOMAttr(element); } +void InspectorInstrumentation::mouseDidMoveOverElementImpl(InspectorController* inspectorController, const HitTestResult& result, unsigned modifierFlags) +{ + inspectorController->mouseDidMoveOverElement(result, modifierFlags); +} + +bool InspectorInstrumentation::handleMousePressImpl(InspectorController* inspectorController) +{ + return inspectorController->handleMousePress(); +} + void InspectorInstrumentation::characterDataModifiedImpl(InspectorController* inspectorController, CharacterData* characterData) { if (InspectorDOMAgent* domAgent = inspectorController->m_domAgent.get()) @@ -153,19 +159,8 @@ void InspectorInstrumentation::characterDataModifiedImpl(InspectorController* in void InspectorInstrumentation::willSendXMLHttpRequestImpl(InspectorController* inspectorController, const String& url) { #if ENABLE(JAVASCRIPT_DEBUGGER) - InspectorDebuggerAgent* debuggerAgent = inspectorController->m_debuggerAgent.get(); - if (!debuggerAgent) - return; - - String breakpointURL; - if (!inspectorController->hasXHRBreakpoint(url, &breakpointURL)) - return; - - RefPtr<InspectorObject> eventData = InspectorObject::create(); - eventData->setString("breakpointType", xhrNativeBreakpointType); - eventData->setString("breakpointURL", breakpointURL); - eventData->setString("url", url); - debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData); + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->willSendXMLHttpRequest(url); #endif } @@ -189,7 +184,6 @@ void InspectorInstrumentation::didRemoveTimerImpl(InspectorController* inspector timelineAgent->didRemoveTimer(timerId); } - InspectorInstrumentationCookie InspectorInstrumentation::willCallFunctionImpl(InspectorController* inspectorController, const String& scriptName, int scriptLine) { int timelineAgentId = 0; @@ -372,6 +366,40 @@ void InspectorInstrumentation::didRecalculateStyleImpl(const InspectorInstrument timelineAgent->didRecalculateStyle(); } +void InspectorInstrumentation::identifierForInitialRequestImpl(InspectorController* ic, unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request) +{ + if (!ic->enabled()) + return; + ic->ensureSettingsLoaded(); + + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->identifierForInitialRequest(identifier, request.url(), loader); +} + +void InspectorInstrumentation::willSendRequestImpl(InspectorController* ic, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) +{ + ic->willSendRequest(request); + if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic)) + timelineAgent->willSendResourceRequest(identifier, request); + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->willSendRequest(identifier, request, redirectResponse); +} + +void InspectorInstrumentation::markResourceAsCachedImpl(InspectorController* ic, unsigned long identifier) +{ + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->markResourceAsCached(identifier); +} + +void InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl(InspectorController* ic, DocumentLoader* loader, const CachedResource* cachedResource) +{ + if (!ic->enabled()) + return; + ic->ensureSettingsLoaded(); + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource); +} + InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceDataImpl(InspectorController* inspectorController, unsigned long identifier) { int timelineAgentId = 0; @@ -400,12 +428,73 @@ InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResp return InspectorInstrumentationCookie(inspectorController, timelineAgentId); } -void InspectorInstrumentation::didReceiveResourceResponseImpl(const InspectorInstrumentationCookie& cookie) +void InspectorInstrumentation::didReceiveResourceResponseImpl(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) { + InspectorController* ic = cookie.first; + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->didReceiveResponse(identifier, loader, response); + ic->m_consoleAgent->didReceiveResponse(identifier, response); if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(cookie)) timelineAgent->didReceiveResourceResponse(); } +void InspectorInstrumentation::didReceiveContentLengthImpl(InspectorController* ic, unsigned long identifier, int lengthReceived) +{ + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->didReceiveContentLength(identifier, lengthReceived); +} + +void InspectorInstrumentation::didFinishLoadingImpl(InspectorController* ic, unsigned long identifier, double finishTime) +{ + if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic)) + timelineAgent->didFinishLoadingResource(identifier, false, finishTime); + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->didFinishLoading(identifier, finishTime); +} + +void InspectorInstrumentation::didFailLoadingImpl(InspectorController* ic, unsigned long identifier, const ResourceError& error) +{ + ic->m_consoleAgent->didFailLoading(identifier, error); + if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(ic)) + timelineAgent->didFinishLoadingResource(identifier, true, 0); + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->didFailLoading(identifier, error); +} + +void InspectorInstrumentation::resourceRetrievedByXMLHttpRequestImpl(InspectorController* ic, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber) +{ + ic->m_consoleAgent->resourceRetrievedByXMLHttpRequest(url, sendURL, sendLineNumber); + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->setInitialContent(identifier, sourceString, "XHR"); +} + +void InspectorInstrumentation::scriptImportedImpl(InspectorController* ic, unsigned long identifier, const String& sourceString) +{ + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(ic)) + resourceAgent->setInitialContent(identifier, sourceString, "Script"); +} + +void InspectorInstrumentation::mainResourceFiredLoadEventImpl(InspectorController* inspectorController, Frame* frame, const KURL& url) +{ + inspectorController->mainResourceFiredLoadEvent(frame->loader()->documentLoader(), url); +} + +void InspectorInstrumentation::mainResourceFiredDOMContentEventImpl(InspectorController* inspectorController, Frame* frame, const KURL& url) +{ + inspectorController->mainResourceFiredDOMContentEvent(frame->loader()->documentLoader(), url); +} + +void InspectorInstrumentation::frameDetachedFromParentImpl(InspectorController* inspectorController, Frame* frame) +{ + if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorController)) + resourceAgent->frameDetachedFromParent(frame); +} + +void InspectorInstrumentation::didCommitLoadImpl(InspectorController* inspectorController, DocumentLoader* loader) +{ + inspectorController->didCommitLoad(loader); +} + InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTMLImpl(InspectorController* inspectorController, unsigned int length, unsigned int startLine) { int timelineAgentId = 0; @@ -423,6 +512,74 @@ void InspectorInstrumentation::didWriteHTMLImpl(const InspectorInstrumentationCo timelineAgent->didWriteHTML(endLine); } +void InspectorInstrumentation::addMessageToConsoleImpl(InspectorController* inspectorController, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptArguments* arguments, ScriptCallStack* callStack) +{ + inspectorController->consoleAgent()->addMessageToConsole(source, type, level, message, arguments, callStack); +} + +void InspectorInstrumentation::addMessageToConsoleImpl(InspectorController* inspectorController, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID) +{ + inspectorController->consoleAgent()->addMessageToConsole(source, type, level, message, lineNumber, sourceID); +} + +void InspectorInstrumentation::consoleCountImpl(InspectorController* inspectorController, ScriptArguments* arguments, ScriptCallStack* stack) +{ + inspectorController->consoleAgent()->count(arguments, stack); +} + +void InspectorInstrumentation::startConsoleTimingImpl(InspectorController* inspectorController, const String& title) +{ + inspectorController->consoleAgent()->startTiming(title); +} + +void InspectorInstrumentation::stopConsoleTimingImpl(InspectorController* inspectorController, const String& title, ScriptCallStack* stack) +{ + inspectorController->consoleAgent()->stopTiming(title, stack); +} + +void InspectorInstrumentation::consoleMarkTimelineImpl(InspectorController* inspectorController, ScriptArguments* arguments) +{ + if (InspectorTimelineAgent* timelineAgent = retrieveTimelineAgent(inspectorController)) { + String message; + arguments->getFirstArgumentAsString(message); + timelineAgent->didMarkTimeline(message); + } +} + +#if ENABLE(JAVASCRIPT_DEBUGGER) +void InspectorInstrumentation::addStartProfilingMessageToConsoleImpl(InspectorController* inspectorController, const String& title, unsigned lineNumber, const String& sourceURL) +{ + if (InspectorProfilerAgent* profilerAgent = inspectorController->m_profilerAgent.get()) + profilerAgent->addStartProfilingMessageToConsole(title, lineNumber, sourceURL); +} +#endif + +#if ENABLE(DATABASE) +void InspectorInstrumentation::didOpenDatabaseImpl(InspectorController* inspectorController, Database* database, const String& domain, const String& name, const String& version) +{ + inspectorController->didOpenDatabase(database, domain, name, version); +} +#endif + +#if ENABLE(DOM_STORAGE) +void InspectorInstrumentation::didUseDOMStorageImpl(InspectorController* inspectorController, StorageArea* storageArea, bool isLocalStorage, Frame* frame) +{ + inspectorController->didUseDOMStorage(storageArea, isLocalStorage, frame); +} +#endif + +#if ENABLE(WORKERS) +void InspectorInstrumentation::didCreateWorkerImpl(InspectorController* inspectorController, intptr_t id, const String& url, bool isSharedWorker) +{ + inspectorController->didCreateWorker(id, url, isSharedWorker); +} + +void InspectorInstrumentation::didDestroyWorkerImpl(InspectorController* inspectorController, intptr_t id) +{ + inspectorController->didDestroyWorker(id); +} +#endif + #if ENABLE(WEB_SOCKETS) void InspectorInstrumentation::didCreateWebSocketImpl(InspectorController* inspectorController, unsigned long identifier, const KURL& requestURL, const KURL& documentURL) { @@ -445,6 +602,20 @@ void InspectorInstrumentation::didCloseWebSocketImpl(InspectorController* inspec } #endif +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +void InspectorInstrumentation::networkStateChangedImpl(InspectorController* ic) +{ + if (InspectorApplicationCacheAgent* applicationCacheAgent = ic->applicationCacheAgent()) + applicationCacheAgent->networkStateChanged(); +} + +void InspectorInstrumentation::updateApplicationCacheStatusImpl(InspectorController* ic, Frame* frame) +{ + if (InspectorApplicationCacheAgent* applicationCacheAgent = ic->applicationCacheAgent()) + applicationCacheAgent->updateApplicationCacheStatus(frame); +} +#endif + bool InspectorInstrumentation::hasFrontend(InspectorController* inspectorController) { return inspectorController->hasFrontend(); @@ -453,19 +624,8 @@ bool InspectorInstrumentation::hasFrontend(InspectorController* inspectorControl void InspectorInstrumentation::pauseOnNativeEventIfNeeded(InspectorController* inspectorController, const String& categoryType, const String& eventName, bool synchronous) { #if ENABLE(JAVASCRIPT_DEBUGGER) - InspectorDebuggerAgent* debuggerAgent = inspectorController->m_debuggerAgent.get(); - if (!debuggerAgent) - return; - String fullEventName = String::format("%s:%s", categoryType.utf8().data(), eventName.utf8().data()); - if (!inspectorController->hasEventListenerBreakpoint(fullEventName)) - return; - RefPtr<InspectorObject> eventData = InspectorObject::create(); - eventData->setString("breakpointType", eventListenerNativeBreakpointType); - eventData->setString("eventName", fullEventName); - if (synchronous) - debuggerAgent->breakProgram(NativeBreakpointDebuggerEventType, eventData); - else - debuggerAgent->schedulePauseOnNextStatement(NativeBreakpointDebuggerEventType, eventData); + if (InspectorBrowserDebuggerAgent* browserDebuggerAgent = inspectorController->m_browserDebuggerAgent.get()) + browserDebuggerAgent->pauseOnNativeEventIfNeeded(categoryType, eventName, synchronous); #endif } @@ -490,6 +650,11 @@ InspectorTimelineAgent* InspectorInstrumentation::retrieveTimelineAgent(const In return 0; } +InspectorResourceAgent* InspectorInstrumentation::retrieveResourceAgent(InspectorController* ic) +{ + return ic->m_resourceAgent.get(); +} + } // namespace WebCore #endif // !ENABLE(INSPECTOR) diff --git a/Source/WebCore/inspector/InspectorInstrumentation.h b/Source/WebCore/inspector/InspectorInstrumentation.h index 9c69055..28867cb 100644 --- a/Source/WebCore/inspector/InspectorInstrumentation.h +++ b/Source/WebCore/inspector/InspectorInstrumentation.h @@ -31,22 +31,34 @@ #ifndef InspectorInstrumentation_h #define InspectorInstrumentation_h +#include "Console.h" #include "Frame.h" #include "Page.h" #include "ScriptExecutionContext.h" +#include <wtf/PassRefPtr.h> + namespace WebCore { class CharacterData; +class DOMWrapperWorld; +class Database; class Document; class Element; class EventContext; +class DocumentLoader; +class HitTestResult; class InspectorController; +class InspectorResourceAgent; class InspectorTimelineAgent; class KURL; class Node; class ResourceRequest; class ResourceResponse; +class ScriptArguments; +class ScriptCallStack; +class ScriptExecutionContext; +class StorageArea; class XMLHttpRequest; #if ENABLE(WEB_SOCKETS) @@ -58,6 +70,9 @@ typedef pair<InspectorController*, int> InspectorInstrumentationCookie; class InspectorInstrumentation { public: + static void didClearWindowObjectInWorld(Frame*, DOMWrapperWorld*); + static void inspectedPageDestroyed(Page*); + static void willInsertDOMNode(Document*, Node*, Node* parent); static void didInsertDOMNode(Document*, Node*); static void willRemoveDOMNode(Document*, Node*); @@ -65,6 +80,9 @@ public: static void didModifyDOMAttr(Document*, Element*); static void characterDataModified(Document*, CharacterData*); + static void mouseDidMoveOverElement(Page*, const HitTestResult&, unsigned modifierFlags); + static bool handleMousePress(Page*); + static void willSendXMLHttpRequest(ScriptExecutionContext*, const String& url); static void didScheduleResourceRequest(Document*, const String& url); static void didInstallTimer(ScriptExecutionContext*, int timerId, int timeout, bool singleShot); @@ -90,13 +108,52 @@ public: static void didPaint(const InspectorInstrumentationCookie&); static InspectorInstrumentationCookie willRecalculateStyle(Document*); static void didRecalculateStyle(const InspectorInstrumentationCookie&); + + static void identifierForInitialRequest(Frame*, unsigned long identifier, DocumentLoader*, const ResourceRequest&); + static void willSendRequest(Frame*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); + static void markResourceAsCached(Page*, unsigned long identifier); + static void didLoadResourceFromMemoryCache(Page*, DocumentLoader*, const CachedResource*); static InspectorInstrumentationCookie willReceiveResourceData(Frame*, unsigned long identifier); static void didReceiveResourceData(const InspectorInstrumentationCookie&); - static InspectorInstrumentationCookie willReceiveResourceResponse(Frame*, unsigned long identifier, const ResourceResponse& response); - static void didReceiveResourceResponse(const InspectorInstrumentationCookie&); + static InspectorInstrumentationCookie willReceiveResourceResponse(Frame*, unsigned long identifier, const ResourceResponse&); + static void didReceiveResourceResponse(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&); + static void didReceiveContentLength(Frame*, unsigned long identifier, int lengthReceived); + static void didFinishLoading(Frame*, unsigned long identifier, double finishTime); + static void didFailLoading(Frame*, unsigned long identifier, const ResourceError&); + static void resourceRetrievedByXMLHttpRequest(ScriptExecutionContext*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber); + static void scriptImported(ScriptExecutionContext*, unsigned long identifier, const String& sourceString); + static void mainResourceFiredLoadEvent(Frame*, const KURL&); + static void mainResourceFiredDOMContentEvent(Frame*, const KURL&); + static void frameDetachedFromParent(Frame*); + static void didCommitLoad(Frame*, DocumentLoader*); + static InspectorInstrumentationCookie willWriteHTML(Document*, unsigned int length, unsigned int startLine); static void didWriteHTML(const InspectorInstrumentationCookie&, unsigned int endLine); + static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, ScriptArguments*, ScriptCallStack*); + static void addMessageToConsole(Page*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String&); + static void consoleCount(Page*, ScriptArguments*, ScriptCallStack*); + static void startConsoleTiming(Page*, const String& title); + static void stopConsoleTiming(Page*, const String& title, ScriptCallStack*); + static void consoleMarkTimeline(Page*, ScriptArguments*); + +#if ENABLE(JAVASCRIPT_DEBUGGER) + static void addStartProfilingMessageToConsole(Page*, const String& title, unsigned lineNumber, const String& sourceURL); +#endif + +#if ENABLE(DATABASE) + static void didOpenDatabase(ScriptExecutionContext*, Database*, const String& domain, const String& name, const String& version); +#endif + +#if ENABLE(DOM_STORAGE) + static void didUseDOMStorage(Page*, StorageArea*, bool isLocalStorage, Frame*); +#endif + +#if ENABLE(WORKERS) + static void didCreateWorker(ScriptExecutionContext*, intptr_t id, const String& url, bool isSharedWorker); + static void didDestroyWorker(ScriptExecutionContext*, intptr_t id); +#endif + #if ENABLE(WEB_SOCKETS) static void didCreateWebSocket(ScriptExecutionContext*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL); static void willSendWebSocketHandshakeRequest(ScriptExecutionContext*, unsigned long identifier, const WebSocketHandshakeRequest&); @@ -104,6 +161,12 @@ public: static void didCloseWebSocket(ScriptExecutionContext*, unsigned long identifier); #endif + static void networkStateChanged(Page*); + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + static void updateApplicationCacheStatus(Frame*); +#endif + #if ENABLE(INSPECTOR) static void frontendCreated() { s_frontendCounter += 1; } static void frontendDeleted() { s_frontendCounter -= 1; } @@ -114,6 +177,9 @@ public: private: #if ENABLE(INSPECTOR) + static void didClearWindowObjectInWorldImpl(InspectorController*, Frame*, DOMWrapperWorld*); + static void inspectedPageDestroyedImpl(InspectorController*); + static void willInsertDOMNodeImpl(InspectorController*, Node* node, Node* parent); static void didInsertDOMNodeImpl(InspectorController*, Node*); static void willRemoveDOMNodeImpl(InspectorController*, Node*); @@ -122,6 +188,9 @@ private: static void didModifyDOMAttrImpl(InspectorController*, Element*); static void characterDataModifiedImpl(InspectorController*, CharacterData*); + static void mouseDidMoveOverElementImpl(InspectorController*, const HitTestResult&, unsigned modifierFlags); + static bool handleMousePressImpl(InspectorController*); + static void willSendXMLHttpRequestImpl(InspectorController*, const String& url); static void didScheduleResourceRequestImpl(InspectorController*, const String& url); static void didInstallTimerImpl(InspectorController*, int timerId, int timeout, bool singleShot); @@ -147,13 +216,51 @@ private: static void didPaintImpl(const InspectorInstrumentationCookie&); static InspectorInstrumentationCookie willRecalculateStyleImpl(InspectorController*); static void didRecalculateStyleImpl(const InspectorInstrumentationCookie&); + static void identifierForInitialRequestImpl(InspectorController*, unsigned long identifier, DocumentLoader*, const ResourceRequest&); + static void willSendRequestImpl(InspectorController*, unsigned long identifier, ResourceRequest&, const ResourceResponse& redirectResponse); + static void markResourceAsCachedImpl(InspectorController*, unsigned long identifier); + static void didLoadResourceFromMemoryCacheImpl(InspectorController*, DocumentLoader*, const CachedResource*); static InspectorInstrumentationCookie willReceiveResourceDataImpl(InspectorController*, unsigned long identifier); static void didReceiveResourceDataImpl(const InspectorInstrumentationCookie&); - static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorController*, unsigned long identifier, const ResourceResponse& response); - static void didReceiveResourceResponseImpl(const InspectorInstrumentationCookie&); + static InspectorInstrumentationCookie willReceiveResourceResponseImpl(InspectorController*, unsigned long identifier, const ResourceResponse&); + static void didReceiveResourceResponseImpl(const InspectorInstrumentationCookie&, unsigned long identifier, DocumentLoader*, const ResourceResponse&); + static void didReceiveContentLengthImpl(InspectorController*, unsigned long identifier, int lengthReceived); + static void didFinishLoadingImpl(InspectorController*, unsigned long identifier, double finishTime); + static void didFailLoadingImpl(InspectorController*, unsigned long identifier, const ResourceError&); + static void resourceRetrievedByXMLHttpRequestImpl(InspectorController*, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber); + static void scriptImportedImpl(InspectorController*, unsigned long identifier, const String& sourceString); + static void mainResourceFiredLoadEventImpl(InspectorController*, Frame*, const KURL&); + static void mainResourceFiredDOMContentEventImpl(InspectorController*, Frame*, const KURL&); + static void frameDetachedFromParentImpl(InspectorController*, Frame*); + static void didCommitLoadImpl(InspectorController*, DocumentLoader*); + static InspectorInstrumentationCookie willWriteHTMLImpl(InspectorController*, unsigned int length, unsigned int startLine); static void didWriteHTMLImpl(const InspectorInstrumentationCookie&, unsigned int endLine); + static void addMessageToConsoleImpl(InspectorController*, MessageSource, MessageType, MessageLevel, const String& message, ScriptArguments*, ScriptCallStack*); + static void addMessageToConsoleImpl(InspectorController*, MessageSource, MessageType, MessageLevel, const String& message, unsigned lineNumber, const String& sourceID); + static void consoleCountImpl(InspectorController*, ScriptArguments*, ScriptCallStack*); + static void startConsoleTimingImpl(InspectorController*, const String& title); + static void stopConsoleTimingImpl(InspectorController*, const String& title, ScriptCallStack*); + static void consoleMarkTimelineImpl(InspectorController*, ScriptArguments*); + +#if ENABLE(JAVASCRIPT_DEBUGGER) + static void addStartProfilingMessageToConsoleImpl(InspectorController*, const String& title, unsigned lineNumber, const String& sourceURL); +#endif + +#if ENABLE(DATABASE) + static void didOpenDatabaseImpl(InspectorController*, Database*, const String& domain, const String& name, const String& version); +#endif + +#if ENABLE(DOM_STORAGE) + static void didUseDOMStorageImpl(InspectorController*, StorageArea*, bool isLocalStorage, Frame*); +#endif + +#if ENABLE(WORKERS) + static void didCreateWorkerImpl(InspectorController*, intptr_t id, const String& url, bool isSharedWorker); + static void didDestroyWorkerImpl(InspectorController*, intptr_t id); +#endif + #if ENABLE(WEB_SOCKETS) static void didCreateWebSocketImpl(InspectorController*, unsigned long identifier, const KURL& requestURL, const KURL& documentURL); static void willSendWebSocketHandshakeRequestImpl(InspectorController*, unsigned long identifier, const WebSocketHandshakeRequest&); @@ -161,25 +268,50 @@ private: static void didCloseWebSocketImpl(InspectorController*, unsigned long identifier); #endif - static InspectorController* inspectorControllerForContext(ScriptExecutionContext*); - static InspectorController* inspectorControllerForDocument(Document*); +#if ENABLE(OFFLINE_WEB_APPLICATIONS) + static void networkStateChangedImpl(InspectorController*); + static void updateApplicationCacheStatusImpl(InspectorController*, Frame*); +#endif + static InspectorController* inspectorControllerForFrame(Frame*); + static InspectorController* inspectorControllerForContext(ScriptExecutionContext*); static InspectorController* inspectorControllerForPage(Page*); + static InspectorController* inspectorControllerWithFrontendForContext(ScriptExecutionContext*); + static InspectorController* inspectorControllerWithFrontendForDocument(Document*); + static InspectorController* inspectorControllerWithFrontendForFrame(Frame*); + static InspectorController* inspectorControllerWithFrontendForPage(Page*); static bool hasFrontend(InspectorController*); static void pauseOnNativeEventIfNeeded(InspectorController*, const String& categoryType, const String& eventName, bool synchronous); static void cancelPauseOnNativeEvent(InspectorController*); static InspectorTimelineAgent* retrieveTimelineAgent(InspectorController*); static InspectorTimelineAgent* retrieveTimelineAgent(const InspectorInstrumentationCookie&); + static InspectorResourceAgent* retrieveResourceAgent(InspectorController*); static int s_frontendCounter; #endif }; +inline void InspectorInstrumentation::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + didClearWindowObjectInWorldImpl(inspectorController, frame, world); +#endif +} + +inline void InspectorInstrumentation::inspectedPageDestroyed(Page* page) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + inspectedPageDestroyedImpl(inspectorController); +#endif +} + inline void InspectorInstrumentation::willInsertDOMNode(Document* document, Node* node, Node* parent) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) willInsertDOMNodeImpl(inspectorController, node, parent); #endif } @@ -187,7 +319,7 @@ inline void InspectorInstrumentation::willInsertDOMNode(Document* document, Node inline void InspectorInstrumentation::didInsertDOMNode(Document* document, Node* node) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) didInsertDOMNodeImpl(inspectorController, node); #endif } @@ -195,7 +327,7 @@ inline void InspectorInstrumentation::didInsertDOMNode(Document* document, Node* inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node* node) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) { + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) { willRemoveDOMNodeImpl(inspectorController, node); didRemoveDOMNodeImpl(inspectorController, node); } @@ -205,7 +337,7 @@ inline void InspectorInstrumentation::willRemoveDOMNode(Document* document, Node inline void InspectorInstrumentation::willModifyDOMAttr(Document* document, Element* element) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) willModifyDOMAttrImpl(inspectorController, element); #endif } @@ -213,15 +345,32 @@ inline void InspectorInstrumentation::willModifyDOMAttr(Document* document, Elem inline void InspectorInstrumentation::didModifyDOMAttr(Document* document, Element* element) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) didModifyDOMAttrImpl(inspectorController, element); #endif } +inline void InspectorInstrumentation::mouseDidMoveOverElement(Page* page, const HitTestResult& result, unsigned modifierFlags) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page)) + mouseDidMoveOverElementImpl(inspectorController, result, modifierFlags); +#endif +} + +inline bool InspectorInstrumentation::handleMousePress(Page* page) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page)) + return handleMousePressImpl(inspectorController); +#endif + return false; +} + inline void InspectorInstrumentation::characterDataModified(Document* document, CharacterData* characterData) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) characterDataModifiedImpl(inspectorController, characterData); #endif } @@ -229,7 +378,7 @@ inline void InspectorInstrumentation::characterDataModified(Document* document, inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionContext* context, const String& url) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) willSendXMLHttpRequestImpl(inspectorController, url); #endif } @@ -237,7 +386,7 @@ inline void InspectorInstrumentation::willSendXMLHttpRequest(ScriptExecutionCont inline void InspectorInstrumentation::didScheduleResourceRequest(Document* document, const String& url) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) didScheduleResourceRequestImpl(inspectorController, url); #endif } @@ -245,7 +394,7 @@ inline void InspectorInstrumentation::didScheduleResourceRequest(Document* docum inline void InspectorInstrumentation::didInstallTimer(ScriptExecutionContext* context, int timerId, int timeout, bool singleShot) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) didInstallTimerImpl(inspectorController, timerId, timeout, singleShot); #endif } @@ -253,7 +402,7 @@ inline void InspectorInstrumentation::didInstallTimer(ScriptExecutionContext* co inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* context, int timerId) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) didRemoveTimerImpl(inspectorController, timerId); #endif } @@ -262,7 +411,7 @@ inline void InspectorInstrumentation::didRemoveTimer(ScriptExecutionContext* con inline InspectorInstrumentationCookie InspectorInstrumentation::willCallFunction(Frame* frame, const String& scriptName, int scriptLine) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willCallFunctionImpl(inspectorController, scriptName, scriptLine); #endif return InspectorInstrumentationCookie(); @@ -279,7 +428,7 @@ inline void InspectorInstrumentation::didCallFunction(const InspectorInstrumenta inline InspectorInstrumentationCookie InspectorInstrumentation::willChangeXHRReadyState(ScriptExecutionContext* context, XMLHttpRequest* request) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) return willChangeXHRReadyStateImpl(inspectorController, request); #endif return InspectorInstrumentationCookie(); @@ -296,7 +445,7 @@ inline void InspectorInstrumentation::didChangeXHRReadyState(const InspectorInst inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEvent(Document* document, const Event& event, DOMWindow* window, Node* node, const Vector<EventContext>& ancestors) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) return willDispatchEventImpl(inspectorController, event, window, node, ancestors); #endif return InspectorInstrumentationCookie(); @@ -313,7 +462,7 @@ inline void InspectorInstrumentation::didDispatchEvent(const InspectorInstrument inline InspectorInstrumentationCookie InspectorInstrumentation::willDispatchEventOnWindow(Frame* frame, const Event& event, DOMWindow* window) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willDispatchEventOnWindowImpl(inspectorController, event, window); #endif return InspectorInstrumentationCookie(); @@ -330,7 +479,7 @@ inline void InspectorInstrumentation::didDispatchEventOnWindow(const InspectorIn inline InspectorInstrumentationCookie InspectorInstrumentation::willEvaluateScript(Frame* frame, const String& url, int lineNumber) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willEvaluateScriptImpl(inspectorController, url, lineNumber); #endif return InspectorInstrumentationCookie(); @@ -347,7 +496,7 @@ inline void InspectorInstrumentation::didEvaluateScript(const InspectorInstrumen inline InspectorInstrumentationCookie InspectorInstrumentation::willFireTimer(ScriptExecutionContext* context, int timerId) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) return willFireTimerImpl(inspectorController, timerId); #endif return InspectorInstrumentationCookie(); @@ -364,7 +513,7 @@ inline void InspectorInstrumentation::didFireTimer(const InspectorInstrumentatio inline InspectorInstrumentationCookie InspectorInstrumentation::willLayout(Frame* frame) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willLayoutImpl(inspectorController); #endif return InspectorInstrumentationCookie(); @@ -381,7 +530,7 @@ inline void InspectorInstrumentation::didLayout(const InspectorInstrumentationCo inline InspectorInstrumentationCookie InspectorInstrumentation::willLoadXHR(ScriptExecutionContext* context, XMLHttpRequest* request) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) return willLoadXHRImpl(inspectorController, request); #endif return InspectorInstrumentationCookie(); @@ -398,7 +547,7 @@ inline void InspectorInstrumentation::didLoadXHR(const InspectorInstrumentationC inline InspectorInstrumentationCookie InspectorInstrumentation::willPaint(Frame* frame, const IntRect& rect) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willPaintImpl(inspectorController, rect); #endif return InspectorInstrumentationCookie(); @@ -415,7 +564,7 @@ inline void InspectorInstrumentation::didPaint(const InspectorInstrumentationCoo inline InspectorInstrumentationCookie InspectorInstrumentation::willRecalculateStyle(Document* document) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) return willRecalculateStyleImpl(inspectorController); #endif return InspectorInstrumentationCookie(); @@ -429,10 +578,43 @@ inline void InspectorInstrumentation::didRecalculateStyle(const InspectorInstrum #endif } +inline void InspectorInstrumentation::identifierForInitialRequest(Frame* frame, unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request) +{ +#if ENABLE(INSPECTOR) + // This notification should be procecessed even in cases there is no frontend. + if (!frame) + return; + if (InspectorController* ic = inspectorControllerForPage(frame->page())) + identifierForInitialRequestImpl(ic, identifier, loader, request); +#endif +} + +inline void InspectorInstrumentation::willSendRequest(Frame* frame, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* ic = inspectorControllerWithFrontendForFrame(frame)) + willSendRequestImpl(ic, identifier, request, redirectResponse); +#endif +} + +inline void InspectorInstrumentation::markResourceAsCached(Page* page, unsigned long identifier) +{ +#if ENABLE(INSPECTOR) + markResourceAsCachedImpl(inspectorControllerForPage(page), identifier); +#endif +} + +inline void InspectorInstrumentation::didLoadResourceFromMemoryCache(Page* page, DocumentLoader* loader, const CachedResource* resource) +{ +#if ENABLE(INSPECTOR) + didLoadResourceFromMemoryCacheImpl(inspectorControllerForPage(page), loader, resource); +#endif +} + inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceData(Frame* frame, unsigned long identifier) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willReceiveResourceDataImpl(inspectorController, identifier); #endif return InspectorInstrumentationCookie(); @@ -449,24 +631,96 @@ inline void InspectorInstrumentation::didReceiveResourceData(const InspectorInst inline InspectorInstrumentationCookie InspectorInstrumentation::willReceiveResourceResponse(Frame* frame, unsigned long identifier, const ResourceResponse& response) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) return willReceiveResourceResponseImpl(inspectorController, identifier, response); #endif return InspectorInstrumentationCookie(); } -inline void InspectorInstrumentation::didReceiveResourceResponse(const InspectorInstrumentationCookie& cookie) +inline void InspectorInstrumentation::didReceiveResourceResponse(const InspectorInstrumentationCookie& cookie, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response) { #if ENABLE(INSPECTOR) if (hasFrontends() && cookie.first) - didReceiveResourceResponseImpl(cookie); + didReceiveResourceResponseImpl(cookie, identifier, loader, response); +#endif +} + +inline void InspectorInstrumentation::didReceiveContentLength(Frame* frame, unsigned long identifier, int lengthReceived) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + didReceiveContentLengthImpl(inspectorController, identifier, lengthReceived); +#endif +} + +inline void InspectorInstrumentation::didFinishLoading(Frame* frame, unsigned long identifier, double finishTime) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + didFinishLoadingImpl(inspectorController, identifier, finishTime); +#endif +} + +inline void InspectorInstrumentation::didFailLoading(Frame* frame, unsigned long identifier, const ResourceError& error) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + didFailLoadingImpl(inspectorController, identifier, error); +#endif +} + +inline void InspectorInstrumentation::resourceRetrievedByXMLHttpRequest(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForContext(context)) + resourceRetrievedByXMLHttpRequestImpl(inspectorController, identifier, sourceString, url, sendURL, sendLineNumber); +#endif +} + +inline void InspectorInstrumentation::scriptImported(ScriptExecutionContext* context, unsigned long identifier, const String& sourceString) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForContext(context)) + scriptImportedImpl(inspectorController, identifier, sourceString); +#endif +} + +inline void InspectorInstrumentation::mainResourceFiredLoadEvent(Frame* frame, const KURL& url) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + mainResourceFiredLoadEventImpl(inspectorController, frame, url); +#endif +} + +inline void InspectorInstrumentation::mainResourceFiredDOMContentEvent(Frame* frame, const KURL& url) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + mainResourceFiredDOMContentEventImpl(inspectorController, frame, url); +#endif +} + +inline void InspectorInstrumentation::frameDetachedFromParent(Frame* frame) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + frameDetachedFromParentImpl(inspectorController, frame); +#endif +} + +inline void InspectorInstrumentation::didCommitLoad(Frame* frame, DocumentLoader* loader) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForFrame(frame)) + didCommitLoadImpl(inspectorController, loader); #endif } inline InspectorInstrumentationCookie InspectorInstrumentation::willWriteHTML(Document* document, unsigned int length, unsigned int startLine) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForDocument(document)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForDocument(document)) return willWriteHTMLImpl(inspectorController, length, startLine); #endif return InspectorInstrumentationCookie(); @@ -480,11 +734,50 @@ inline void InspectorInstrumentation::didWriteHTML(const InspectorInstrumentatio #endif } +#if ENABLE(DATABASE) +inline void InspectorInstrumentation::didOpenDatabase(ScriptExecutionContext* context, Database* database, const String& domain, const String& name, const String& version) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForContext(context)) + didOpenDatabaseImpl(inspectorController, database, domain, name, version); +#endif +} +#endif + +#if ENABLE(DOM_STORAGE) +inline void InspectorInstrumentation::didUseDOMStorage(Page* page, StorageArea* storageArea, bool isLocalStorage, Frame* frame) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + didUseDOMStorageImpl(inspectorController, storageArea, isLocalStorage, frame); +#endif +} +#endif + +#if ENABLE(WORKERS) +inline void InspectorInstrumentation::didCreateWorker(ScriptExecutionContext* context, intptr_t id, const String& url, bool isSharedWorker) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) + didCreateWorkerImpl(inspectorController, id, url, isSharedWorker); +#endif +} + +inline void InspectorInstrumentation::didDestroyWorker(ScriptExecutionContext* context, intptr_t id) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) + didDestroyWorkerImpl(inspectorController, id); +#endif +} +#endif + + #if ENABLE(WEB_SOCKETS) inline void InspectorInstrumentation::didCreateWebSocket(ScriptExecutionContext* context, unsigned long identifier, const KURL& requestURL, const KURL& documentURL) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) didCreateWebSocketImpl(inspectorController, identifier, requestURL, documentURL); #endif } @@ -492,7 +785,7 @@ inline void InspectorInstrumentation::didCreateWebSocket(ScriptExecutionContext* inline void InspectorInstrumentation::willSendWebSocketHandshakeRequest(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeRequest& request) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) willSendWebSocketHandshakeRequestImpl(inspectorController, identifier, request); #endif } @@ -500,7 +793,7 @@ inline void InspectorInstrumentation::willSendWebSocketHandshakeRequest(ScriptEx inline void InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(ScriptExecutionContext* context, unsigned long identifier, const WebSocketHandshakeResponse& response) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) didReceiveWebSocketHandshakeResponseImpl(inspectorController, identifier, response); #endif } @@ -508,38 +801,135 @@ inline void InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(Scrip inline void InspectorInstrumentation::didCloseWebSocket(ScriptExecutionContext* context, unsigned long identifier) { #if ENABLE(INSPECTOR) - if (InspectorController* inspectorController = inspectorControllerForContext(context)) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForContext(context)) didCloseWebSocketImpl(inspectorController, identifier); #endif } #endif +inline void InspectorInstrumentation::networkStateChanged(Page* page) +{ +#if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page)) + networkStateChangedImpl(inspectorController); +#endif +} + +#if ENABLE(OFFLINE_WEB_APPLICATIONS) +inline void InspectorInstrumentation::updateApplicationCacheStatus(Frame* frame) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForFrame(frame)) + updateApplicationCacheStatusImpl(inspectorController, frame); +#endif +} +#endif + +inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptArguments* arguments, ScriptCallStack* callStack) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + addMessageToConsoleImpl(inspectorController, source, type, level, message, arguments, callStack); +#endif +} + +inline void InspectorInstrumentation::addMessageToConsole(Page* page, MessageSource source, MessageType type, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + addMessageToConsoleImpl(inspectorController, source, type, level, message, lineNumber, sourceID); +#endif +} + +inline void InspectorInstrumentation::consoleCount(Page* page, ScriptArguments* arguments, ScriptCallStack* stack) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + consoleCountImpl(inspectorController, arguments, stack); +#endif +} + +inline void InspectorInstrumentation::startConsoleTiming(Page* page, const String& title) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + startConsoleTimingImpl(inspectorController, title); +#endif +} + +inline void InspectorInstrumentation::stopConsoleTiming(Page* page, const String& title, ScriptCallStack* stack) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + stopConsoleTimingImpl(inspectorController, title, stack); +#endif +} + +inline void InspectorInstrumentation::consoleMarkTimeline(Page* page, ScriptArguments* arguments) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerWithFrontendForPage(page)) + consoleMarkTimelineImpl(inspectorController, arguments); +#endif +} + +#if ENABLE(JAVASCRIPT_DEBUGGER) +inline void InspectorInstrumentation::addStartProfilingMessageToConsole(Page* page, const String& title, unsigned lineNumber, const String& sourceURL) +{ +#if ENABLE(INSPECTOR) + if (InspectorController* inspectorController = inspectorControllerForPage(page)) + addStartProfilingMessageToConsoleImpl(inspectorController, title, lineNumber, sourceURL); +#endif +} +#endif + #if ENABLE(INSPECTOR) inline InspectorController* InspectorInstrumentation::inspectorControllerForContext(ScriptExecutionContext* context) { - if (hasFrontends() && context && context->isDocument()) + if (context && context->isDocument()) return inspectorControllerForPage(static_cast<Document*>(context)->page()); return 0; } -inline InspectorController* InspectorInstrumentation::inspectorControllerForDocument(Document* document) +inline InspectorController* InspectorInstrumentation::inspectorControllerForFrame(Frame* frame) +{ + if (frame) + return inspectorControllerForPage(frame->page()); + return 0; +} + +inline InspectorController* InspectorInstrumentation::inspectorControllerForPage(Page* page) +{ + if (!page) + return 0; + return page->inspectorController(); +} + +inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForContext(ScriptExecutionContext* context) +{ + if (hasFrontends() && context && context->isDocument()) + return inspectorControllerWithFrontendForPage(static_cast<Document*>(context)->page()); + return 0; +} + +inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForDocument(Document* document) { if (hasFrontends() && document) - return inspectorControllerForPage(document->page()); + return inspectorControllerWithFrontendForPage(document->page()); return 0; } -inline InspectorController* InspectorInstrumentation::inspectorControllerForFrame(Frame* frame) +inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForFrame(Frame* frame) { if (hasFrontends() && frame) - return inspectorControllerForPage(frame->page()); + return inspectorControllerWithFrontendForPage(frame->page()); return 0; } -inline InspectorController* InspectorInstrumentation::inspectorControllerForPage(Page* page) +inline InspectorController* InspectorInstrumentation::inspectorControllerWithFrontendForPage(Page* page) { if (page) { - if (InspectorController* inspectorController = page->inspectorController()) { + if (InspectorController* inspectorController = inspectorControllerForPage(page)) { if (hasFrontend(inspectorController)) return inspectorController; } diff --git a/Source/WebCore/inspector/InspectorProfilerAgent.cpp b/Source/WebCore/inspector/InspectorProfilerAgent.cpp index ac67a1a..da9b67d 100644 --- a/Source/WebCore/inspector/InspectorProfilerAgent.cpp +++ b/Source/WebCore/inspector/InspectorProfilerAgent.cpp @@ -33,6 +33,7 @@ #if ENABLE(JAVASCRIPT_DEBUGGER) && ENABLE(INSPECTOR) #include "Console.h" +#include "InspectorConsoleAgent.h" #include "InspectorController.h" #include "InspectorFrontend.h" #include "InspectorValues.h" @@ -90,13 +91,13 @@ void InspectorProfilerAgent::addProfileFinishedMessageToConsole(PassRefPtr<Scrip RefPtr<ScriptProfile> profile = prpProfile; String title = profile->title(); String message = makeString("Profile \"webkit-profile://", CPUProfileType, '/', encodeWithURLEscapeSequences(title), '#', String::number(profile->uid()), "\" finished."); - m_inspectorController->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL); + m_inspectorController->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL); } void InspectorProfilerAgent::addStartProfilingMessageToConsole(const String& title, unsigned lineNumber, const String& sourceURL) { String message = makeString("Profile \"webkit-profile://", CPUProfileType, '/', encodeWithURLEscapeSequences(title), "#0\" started."); - m_inspectorController->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL); + m_inspectorController->consoleAgent()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lineNumber, sourceURL); } PassRefPtr<InspectorObject> InspectorProfilerAgent::createProfileHeader(const ScriptProfile& profile) diff --git a/Source/WebCore/inspector/InspectorResourceAgent.cpp b/Source/WebCore/inspector/InspectorResourceAgent.cpp index 9fc562c..6779790 100644 --- a/Source/WebCore/inspector/InspectorResourceAgent.cpp +++ b/Source/WebCore/inspector/InspectorResourceAgent.cpp @@ -132,7 +132,7 @@ CachedResource* InspectorResourceAgent::cachedResource(Frame* frame, const KURL& { CachedResource* cachedResource = frame->document()->cachedResourceLoader()->cachedResource(url); if (!cachedResource) - cachedResource = cache()->resourceForURL(url); + cachedResource = memoryCache()->resourceForURL(url); return cachedResource; } diff --git a/Source/WebCore/inspector/InspectorSettings.cpp b/Source/WebCore/inspector/InspectorSettings.cpp new file mode 100644 index 0000000..3ebc3ab --- /dev/null +++ b/Source/WebCore/inspector/InspectorSettings.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "config.h" +#include "InspectorSettings.h" + +#if ENABLE(INSPECTOR) + +#include "InspectorClient.h" + +namespace WebCore { + +const char* InspectorSettings::MonitoringXHREnabled = "xhrMonitor"; +const char* InspectorSettings::ProfilerAlwaysEnabled = "profilerEnabled"; +const char* InspectorSettings::DebuggerAlwaysEnabled = "debuggerEnabled"; +const char* InspectorSettings::InspectorStartsAttached = "inspectorStartsAttached"; +const char* InspectorSettings::InspectorAttachedHeight = "inspectorAttachedHeight"; + +InspectorSettings::InspectorSettings(InspectorClient* client) + : m_client(client) +{ + registerBoolean(MonitoringXHREnabled, false); + registerBoolean(ProfilerAlwaysEnabled, false); + registerBoolean(DebuggerAlwaysEnabled, false); + registerBoolean(InspectorStartsAttached, true); + registerLong(InspectorAttachedHeight, 300); +} + +bool InspectorSettings::getBoolean(const String& name) +{ + String value; + m_client->populateSetting(name, &value); + if (value.isEmpty()) + value = m_defaultValues.get(name); + return value == "true"; +} + +void InspectorSettings::setBoolean(const String& name, bool value) +{ + m_client->storeSetting(name, value ? "true" : "false"); +} + +long InspectorSettings::getLong(const String& name) +{ + String value; + m_client->populateSetting(name, &value); + if (value.isEmpty()) + value = m_defaultValues.get(name); + return value.toInt(); +} + +void InspectorSettings::setLong(const String& name, long value) +{ + m_client->storeSetting(name, String::number(value)); +} + +void InspectorSettings::registerBoolean(const String& name, bool defaultValue) +{ + m_defaultValues.set(name, defaultValue ? "true" : "false"); +} + +void InspectorSettings::registerLong(const String& name, long defaultValue) +{ + m_defaultValues.set(name, String::number(defaultValue)); +} + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) diff --git a/Source/WebCore/inspector/InspectorSettings.h b/Source/WebCore/inspector/InspectorSettings.h new file mode 100644 index 0000000..717d11f --- /dev/null +++ b/Source/WebCore/inspector/InspectorSettings.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2011 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef InspectorSettings_h +#define InspectorSettings_h + +#if ENABLE(INSPECTOR) + +#include "PlatformString.h" + +#include <wtf/HashMap.h> +#include <wtf/text/StringHash.h> + +namespace WebCore { + +class InspectorClient; + +class InspectorSettings { +public: + static const char* MonitoringXHREnabled; + static const char* ProfilerAlwaysEnabled; + static const char* DebuggerAlwaysEnabled; + static const char* InspectorStartsAttached; + static const char* InspectorAttachedHeight; + + InspectorSettings(InspectorClient* client); + + bool getBoolean(const String& name); + void setBoolean(const String& name, bool value); + + long getLong(const String& name); + void setLong(const String& name, long value); + +private: + void registerBoolean(const String& name, bool defaultValue); + void registerLong(const String& name, long defaultValue); + + typedef HashMap<String, String> Dictionary; + Dictionary m_defaultValues; + InspectorClient* m_client; +}; + +} // namespace WebCore + +#endif // ENABLE(INSPECTOR) +#endif // !defined(InspectorSettings_h) diff --git a/Source/WebCore/inspector/InspectorState.cpp b/Source/WebCore/inspector/InspectorState.cpp index 0865648..1b74518 100644 --- a/Source/WebCore/inspector/InspectorState.cpp +++ b/Source/WebCore/inspector/InspectorState.cpp @@ -32,24 +32,22 @@ #if ENABLE(INSPECTOR) #include "InspectorClient.h" -#include "InspectorController.h" namespace WebCore { InspectorState::InspectorState(InspectorClient* client) : m_client(client) { - registerBoolean(monitoringXHR, false, "monitoringXHREnabled", "xhrMonitor"); - registerBoolean(timelineProfilerEnabled, false, "timelineProfilerEnabled", String()); - registerBoolean(searchingForNode, false, "searchingForNodeEnabled", String()); - registerBoolean(profilerAlwaysEnabled, false, String(), "profilerEnabled"); - registerBoolean(debuggerAlwaysEnabled, false, String(), "debuggerEnabled"); - registerBoolean(inspectorStartsAttached, true, String(), "InspectorStartsAttached"); - registerLong(inspectorAttachedHeight, InspectorController::defaultAttachedHeight, String(), "inspectorAttachedHeight"); - registerLong(pauseOnExceptionsState, 0, "pauseOnExceptionsState", String()); - registerBoolean(consoleMessagesEnabled, false, "consoleMessagesEnabled", String()); - registerBoolean(userInitiatedProfiling, false, "userInitiatedProfiling", String()); - registerObject(stickyBreakpoints, String(), String()); + // Pure reload state + registerBoolean(userInitiatedProfiling, false, String()); + registerBoolean(timelineProfilerEnabled, false, String()); + registerBoolean(searchingForNode, false, String()); + registerObject(stickyBreakpoints, String()); + + // Should go away + registerBoolean(consoleMessagesEnabled, false, "consoleMessagesEnabled"); + registerBoolean(monitoringXHR, false, "monitoringXHREnabled"); + registerLong(pauseOnExceptionsState, 0, "pauseOnExceptionsState"); } void InspectorState::restoreFromInspectorCookie(const String& json) @@ -82,32 +80,6 @@ PassRefPtr<InspectorObject> InspectorState::generateStateObjectForFrontend() return stateObject.release(); } -void InspectorState::loadFromSettings() -{ - for (PropertyMap::iterator i = m_properties.begin(); i != m_properties.end(); ++i) { - if (i->second.m_preferenceName.length()) { - String value; - m_client->populateSetting(i->second.m_preferenceName, &value); - switch (i->second.m_value->type()) { - case InspectorValue::TypeBoolean: - if (value.length()) - i->second.m_value = InspectorBasicValue::create(value == "true"); - break; - case InspectorValue::TypeString: - i->second.m_value = InspectorString::create(value); - break; - case InspectorValue::TypeNumber: - if (value.length()) - i->second.m_value = InspectorBasicValue::create((double)value.toInt()); - break; - default: - ASSERT(false); - break; - } - } - } -} - void InspectorState::updateCookie() { RefPtr<InspectorObject> cookieObject = InspectorObject::create(); @@ -116,13 +88,11 @@ void InspectorState::updateCookie() m_client->updateInspectorStateCookie(cookieObject->toJSONString()); } -void InspectorState::setValue(InspectorPropertyId id, PassRefPtr<InspectorValue> value, const String& stringValue) +void InspectorState::setValue(InspectorPropertyId id, PassRefPtr<InspectorValue> value) { PropertyMap::iterator i = m_properties.find(id); ASSERT(i != m_properties.end()); i->second.m_value = value; - if (i->second.m_preferenceName.length()) - m_client->storeSetting(i->second.m_preferenceName, stringValue); updateCookie(); } @@ -166,37 +136,34 @@ void InspectorState::setObject(InspectorPropertyId id, PassRefPtr<InspectorObjec ASSERT(i != m_properties.end()); Property& property = i->second; property.m_value = value; - if (property.m_preferenceName.length()) - m_client->storeSetting(property.m_preferenceName, value->toJSONString()); updateCookie(); } -void InspectorState::registerBoolean(InspectorPropertyId propertyId, bool value, const String& frontendAlias, const String& preferenceName) +void InspectorState::registerBoolean(InspectorPropertyId propertyId, bool value, const String& frontendAlias) { - m_properties.set(propertyId, Property::create(InspectorBasicValue::create(value), frontendAlias, preferenceName)); + m_properties.set(propertyId, Property::create(InspectorBasicValue::create(value), frontendAlias)); } -void InspectorState::registerString(InspectorPropertyId propertyId, const String& value, const String& frontendAlias, const String& preferenceName) +void InspectorState::registerString(InspectorPropertyId propertyId, const String& value, const String& frontendAlias) { - m_properties.set(propertyId, Property::create(InspectorString::create(value), frontendAlias, preferenceName)); + m_properties.set(propertyId, Property::create(InspectorString::create(value), frontendAlias)); } -void InspectorState::registerLong(InspectorPropertyId propertyId, long value, const String& frontendAlias, const String& preferenceName) +void InspectorState::registerLong(InspectorPropertyId propertyId, long value, const String& frontendAlias) { - m_properties.set(propertyId, Property::create(InspectorBasicValue::create((double)value), frontendAlias, preferenceName)); + m_properties.set(propertyId, Property::create(InspectorBasicValue::create((double)value), frontendAlias)); } -void InspectorState::registerObject(InspectorPropertyId propertyId, const String& frontendAlias, const String& preferenceName) +void InspectorState::registerObject(InspectorPropertyId propertyId, const String& frontendAlias) { - m_properties.set(propertyId, Property::create(InspectorObject::create(), frontendAlias, preferenceName)); + m_properties.set(propertyId, Property::create(InspectorObject::create(), frontendAlias)); } -InspectorState::Property InspectorState::Property::create(PassRefPtr<InspectorValue> value, const String& frontendAlias, const String& preferenceName) +InspectorState::Property InspectorState::Property::create(PassRefPtr<InspectorValue> value, const String& frontendAlias) { Property property; property.m_value = value; property.m_frontendAlias = frontendAlias; - property.m_preferenceName = preferenceName; return property; } diff --git a/Source/WebCore/inspector/InspectorState.h b/Source/WebCore/inspector/InspectorState.h index 4f57da7..3142c92 100644 --- a/Source/WebCore/inspector/InspectorState.h +++ b/Source/WebCore/inspector/InspectorState.h @@ -47,11 +47,6 @@ public: monitoringXHR = 1, timelineProfilerEnabled, searchingForNode, - profilerAlwaysEnabled, - debuggerAlwaysEnabled, - lastActivePanel, - inspectorStartsAttached, - inspectorAttachedHeight, pauseOnExceptionsState, consoleMessagesEnabled, userInitiatedProfiling, @@ -63,7 +58,6 @@ public: PassRefPtr<InspectorObject> generateStateObjectForFrontend(); void restoreFromInspectorCookie(const String& jsonString); - void loadFromSettings(); String getFrontendAlias(InspectorPropertyId propertyId); bool getBoolean(InspectorPropertyId propertyId); @@ -71,28 +65,27 @@ public: long getLong(InspectorPropertyId propertyId); PassRefPtr<InspectorObject> getObject(InspectorPropertyId id); - void setBoolean(InspectorPropertyId propertyId, bool value) { setValue(propertyId, InspectorBasicValue::create(value), value ? "true" : "false"); } - void setString(InspectorPropertyId propertyId, const String& value) { setValue(propertyId, InspectorString::create(value), value); } - void setLong(InspectorPropertyId propertyId, long value) { setValue(propertyId, InspectorBasicValue::create((double)value), String::number(value)); } + void setBoolean(InspectorPropertyId propertyId, bool value) { setValue(propertyId, InspectorBasicValue::create(value)); } + void setString(InspectorPropertyId propertyId, const String& value) { setValue(propertyId, InspectorString::create(value)); } + void setLong(InspectorPropertyId propertyId, long value) { setValue(propertyId, InspectorBasicValue::create((double)value)); } void setObject(InspectorPropertyId propertyId, PassRefPtr<InspectorObject> value); private: void updateCookie(); - void setValue(InspectorPropertyId propertyId, PassRefPtr<InspectorValue> value, const String& stringValue); + void setValue(InspectorPropertyId propertyId, PassRefPtr<InspectorValue> value); struct Property { - static Property create(PassRefPtr<InspectorValue> value, const String& frontendAlias, const String& preferenceName); + static Property create(PassRefPtr<InspectorValue> value, const String& frontendAlias); String m_frontendAlias; - String m_preferenceName; RefPtr<InspectorValue> m_value; }; typedef HashMap<long, Property> PropertyMap; PropertyMap m_properties; - void registerBoolean(InspectorPropertyId propertyId, bool value, const String& frontendAlias, const String& preferenceName); - void registerString(InspectorPropertyId propertyId, const String& value, const String& frontendAlias, const String& preferenceName); - void registerLong(InspectorPropertyId propertyId, long value, const String& frontendAlias, const String& preferenceName); - void registerObject(InspectorPropertyId propertyId, const String& frontendAlias, const String& preferenceName); + void registerBoolean(InspectorPropertyId propertyId, bool value, const String& frontendAlias); + void registerString(InspectorPropertyId propertyId, const String& value, const String& frontendAlias); + void registerLong(InspectorPropertyId propertyId, long value, const String& frontendAlias); + void registerObject(InspectorPropertyId propertyId, const String& frontendAlias); InspectorClient* m_client; }; diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.cpp b/Source/WebCore/inspector/InspectorTimelineAgent.cpp index 74739e1..081a5f0 100644 --- a/Source/WebCore/inspector/InspectorTimelineAgent.cpp +++ b/Source/WebCore/inspector/InspectorTimelineAgent.cpp @@ -209,12 +209,11 @@ void InspectorTimelineAgent::didScheduleResourceRequest(const String& url) addRecordToTimeline(record.release(), ScheduleResourceRequestTimelineRecordType); } -void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, bool isMainResource, - const ResourceRequest& request) +void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, const ResourceRequest& request) { pushGCEventRecords(); RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS()); - record->setObject("data", TimelineRecordFactory::createResourceSendRequestData(identifier, isMainResource, request)); + record->setObject("data", TimelineRecordFactory::createResourceSendRequestData(identifier, request)); record->setNumber("type", ResourceSendRequestTimelineRecordType); setHeapSizeStatistic(record.get()); m_frontend->addRecordToTimeline(record.release()); diff --git a/Source/WebCore/inspector/InspectorTimelineAgent.h b/Source/WebCore/inspector/InspectorTimelineAgent.h index bc1e027..33e2737 100644 --- a/Source/WebCore/inspector/InspectorTimelineAgent.h +++ b/Source/WebCore/inspector/InspectorTimelineAgent.h @@ -119,7 +119,7 @@ public: void didMarkLoadEvent(); void didScheduleResourceRequest(const String& url); - void willSendResourceRequest(unsigned long, bool isMainResource, const ResourceRequest&); + void willSendResourceRequest(unsigned long, const ResourceRequest&); void willReceiveResourceResponse(unsigned long, const ResourceResponse&); void didReceiveResourceResponse(); void didFinishLoadingResource(unsigned long, bool didFail, double finishTime); diff --git a/Source/WebCore/inspector/ScriptDebugListener.h b/Source/WebCore/inspector/ScriptDebugListener.h index 5973402..a28cabb 100644 --- a/Source/WebCore/inspector/ScriptDebugListener.h +++ b/Source/WebCore/inspector/ScriptDebugListener.h @@ -46,7 +46,7 @@ class ScriptDebugListener { public: virtual ~ScriptDebugListener() { } - virtual void didParseSource(const String& sourceID, const String& url, const String& data, int firstLine, ScriptWorldType) = 0; + virtual void didParseSource(const String& sourceID, const String& url, const String& data, int lineOffset, int columnOffset, ScriptWorldType) = 0; virtual void failedToParseSource(const String& url, const String& data, int firstLine, int errorLine, const String& errorMessage) = 0; virtual void didPause(ScriptState*) = 0; virtual void didContinue() = 0; diff --git a/Source/WebCore/inspector/TimelineRecordFactory.cpp b/Source/WebCore/inspector/TimelineRecordFactory.cpp index 7f339cd..dd7f2be 100644 --- a/Source/WebCore/inspector/TimelineRecordFactory.cpp +++ b/Source/WebCore/inspector/TimelineRecordFactory.cpp @@ -129,13 +129,12 @@ PassRefPtr<InspectorObject> TimelineRecordFactory::createScheduleResourceRequest return data.release(); } -PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceSendRequestData(unsigned long identifier, bool isMainResource, const ResourceRequest& request) +PassRefPtr<InspectorObject> TimelineRecordFactory::createResourceSendRequestData(unsigned long identifier, const ResourceRequest& request) { RefPtr<InspectorObject> data = InspectorObject::create(); data->setNumber("identifier", identifier); data->setString("url", request.url().string()); data->setString("requestMethod", request.httpMethod()); - data->setBoolean("isMainResource", isMainResource); return data.release(); } diff --git a/Source/WebCore/inspector/TimelineRecordFactory.h b/Source/WebCore/inspector/TimelineRecordFactory.h index 5d4cb77..fafeae6 100644 --- a/Source/WebCore/inspector/TimelineRecordFactory.h +++ b/Source/WebCore/inspector/TimelineRecordFactory.h @@ -64,8 +64,7 @@ namespace WebCore { static PassRefPtr<InspectorObject> createMarkTimelineData(const String&); - static PassRefPtr<InspectorObject> createResourceSendRequestData(unsigned long identifier, - bool isMainResource, const ResourceRequest&); + static PassRefPtr<InspectorObject> createResourceSendRequestData(unsigned long identifier, const ResourceRequest&); static PassRefPtr<InspectorObject> createScheduleResourceRequestData(const String&); diff --git a/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js b/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js index f5147e3..e7aa188 100644 --- a/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js +++ b/Source/WebCore/inspector/front-end/ApplicationCacheItemsView.js @@ -167,7 +167,7 @@ WebInspector.ApplicationCacheItemsView.prototype = { this._emptyMsgElement.addStyleClass("hidden"); this.deleteButton.visible = true; - var totalSizeString = Number.bytesToString(this._size, WebInspector.UIString); + var totalSizeString = Number.bytesToString(this._size); this._treeElement.subtitle = WebInspector.UIString("%s (%s)", lastPathComponent, totalSizeString); // FIXME: For Chrome, put creationTime and updateTime somewhere. @@ -223,7 +223,7 @@ WebInspector.ApplicationCacheItemsView.prototype = { var resource = this._resources[i]; data[0] = resource.name; data[1] = resource.type; - data[2] = Number.bytesToString(resource.size, WebInspector.UIString); + data[2] = Number.bytesToString(resource.size); var node = new WebInspector.DataGridNode(data); node.resource = resource; node.selectable = true; diff --git a/Source/WebCore/inspector/front-end/AuditLauncherView.js b/Source/WebCore/inspector/front-end/AuditLauncherView.js index d4bbf90..c140589 100644 --- a/Source/WebCore/inspector/front-end/AuditLauncherView.js +++ b/Source/WebCore/inspector/front-end/AuditLauncherView.js @@ -53,24 +53,6 @@ WebInspector.AuditLauncherView = function(runnerCallback) } WebInspector.AuditLauncherView.prototype = { - updateResourceTrackingState: function(isTracking) - { - if (!this._auditPresentStateLabelElement) - return; - - if (isTracking) { - this._auditPresentStateLabelElement.nodeValue = WebInspector.UIString("Audit Present State"); - this._auditPresentStateElement.disabled = false; - this._auditPresentStateElement.parentElement.removeStyleClass("disabled"); - } else { - this._resetResourceCount(); - this._auditPresentStateLabelElement.nodeValue = WebInspector.UIString("Audit Present State (Resource Tracking must be enabled)"); - this._auditPresentStateElement.disabled = true; - this._auditPresentStateElement.parentElement.addStyleClass("disabled"); - this.auditReloadedStateElement.checked = true; - } - }, - get totalResources() { return this._totalResources; @@ -100,20 +82,21 @@ WebInspector.AuditLauncherView.prototype = { _resetResourceCount: function() { this.loadedResources = 0; - - // We never receive a resourceStarted notification for the main resource - // (see InspectorController.willSendRequest()) - this.totalResources = 1; + this.totalResources = 0; }, resourceStarted: function(resource) { - ++this.totalResources; + // Ignore long-living WebSockets for the sake of progress indicator, as we won't be waiting them anyway. + if (resource.type !== WebInspector.Resource.Type.WebSocket) + ++this.totalResources; }, resourceFinished: function(resource) { - ++this.loadedResources; + // See resorceStarted for details. + if (resource.type !== WebInspector.Resource.Type.WebSocket) + ++this.loadedResources; }, reset: function() @@ -237,7 +220,7 @@ WebInspector.AuditLauncherView.prototype = { this._auditPresentStateElement.name = "audit-mode"; this._auditPresentStateElement.type = "radio"; this._auditPresentStateElement.checked = true; - this._auditPresentStateLabelElement = document.createTextNode(""); + this._auditPresentStateLabelElement = document.createTextNode(WebInspector.UIString("Audit Present State")); labelElement.appendChild(this._auditPresentStateElement); labelElement.appendChild(this._auditPresentStateLabelElement); this._buttonContainerElement.appendChild(labelElement); @@ -267,7 +250,6 @@ WebInspector.AuditLauncherView.prototype = { this._contentElement.appendChild(this._buttonContainerElement); this._selectAllClicked(this._selectAllCheckboxElement.checked); - this.updateResourceTrackingState(); this._updateButton(); this._updateResourceProgress(); }, diff --git a/Source/WebCore/inspector/front-end/AuditRules.js b/Source/WebCore/inspector/front-end/AuditRules.js index 3f79c25..7aa891f 100644 --- a/Source/WebCore/inspector/front-end/AuditRules.js +++ b/Source/WebCore/inspector/front-end/AuditRules.js @@ -92,13 +92,13 @@ WebInspector.AuditRules.GzipRule.prototype = { } var savings = 2 * size / 3; totalSavings += savings; - summary.addChild(String.sprintf("%s could save ~%s", WebInspector.AuditRuleResult.linkifyDisplayName(resource.url), Number.bytesToString(savings, WebInspector.UIString))); + summary.addChild(String.sprintf("%s could save ~%s", WebInspector.AuditRuleResult.linkifyDisplayName(resource.url), Number.bytesToString(savings))); result.violationCount++; } } if (!totalSavings) return callback(null); - summary.value = String.sprintf("Compressing the following resources with gzip could reduce their transfer size by about two thirds (~%s):", Number.bytesToString(totalSavings, WebInspector.UIString)); + summary.value = String.sprintf("Compressing the following resources with gzip could reduce their transfer size by about two thirds (~%s):", Number.bytesToString(totalSavings)); callback(result); }, @@ -966,7 +966,7 @@ WebInspector.AuditRules.CookieSizeRule.prototype = { for (var i = 0, len = sortedCookieSizes.length; i < len; ++i) { var maxCookieSize = sortedCookieSizes[i].maxCookieSize; if (maxCookieSize > this._maxBytesThreshold) - hugeCookieDomains.push(WebInspector.AuditRuleResult.resourceDomain(sortedCookieSizes[i].domain) + ": " + Number.bytesToString(maxCookieSize, WebInspector.UIString)); + hugeCookieDomains.push(WebInspector.AuditRuleResult.resourceDomain(sortedCookieSizes[i].domain) + ": " + Number.bytesToString(maxCookieSize)); } var bigAvgCookieDomains = []; @@ -975,9 +975,9 @@ WebInspector.AuditRules.CookieSizeRule.prototype = { var domain = sortedCookieSizes[i].domain; var avgCookieSize = sortedCookieSizes[i].avgCookieSize; if (avgCookieSize > this._avgBytesThreshold && avgCookieSize < this._maxBytesThreshold) - bigAvgCookieDomains.push(WebInspector.AuditRuleResult.resourceDomain(domain) + ": " + Number.bytesToString(avgCookieSize, WebInspector.UIString)); + bigAvgCookieDomains.push(WebInspector.AuditRuleResult.resourceDomain(domain) + ": " + Number.bytesToString(avgCookieSize)); } - result.addChild(String.sprintf("The average cookie size for all requests on this page is %s", Number.bytesToString(avgAllCookiesSize, WebInspector.UIString))); + result.addChild(String.sprintf("The average cookie size for all requests on this page is %s", Number.bytesToString(avgAllCookiesSize))); var message; if (hugeCookieDomains.length) { @@ -1027,7 +1027,7 @@ WebInspector.AuditRules.StaticCookielessRule.prototype = { if (badUrls.length < this._minResources) return; - var entry = result.addChild(String.sprintf("%s of cookies were sent with the following static resources. Serve these static resources from a domain that does not set cookies:", Number.bytesToString(cookieBytes, WebInspector.UIString)), true); + var entry = result.addChild(String.sprintf("%s of cookies were sent with the following static resources. Serve these static resources from a domain that does not set cookies:", Number.bytesToString(cookieBytes)), true); entry.addURLs(badUrls); result.violationCount = badUrls.length; }, diff --git a/Source/WebCore/inspector/front-end/AuditsPanel.js b/Source/WebCore/inspector/front-end/AuditsPanel.js index 096f8ce..c639f47 100644 --- a/Source/WebCore/inspector/front-end/AuditsPanel.js +++ b/Source/WebCore/inspector/front-end/AuditsPanel.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -129,9 +129,7 @@ WebInspector.AuditsPanel.prototype = { _executeAudit: function(categories, resultCallback) { - var resources = []; - for (var id in WebInspector.networkResources) - resources.push(WebInspector.networkResources[id]); + var resources = WebInspector.networkResources; var rulesRemaining = 0; for (var i = 0; i < categories.length; ++i) @@ -248,12 +246,6 @@ WebInspector.AuditsPanel.prototype = { x.show(this.viewsContainerElement); }, - show: function() - { - WebInspector.Panel.prototype.show.call(this); - this._updateLauncherViewControls(!WebInspector.panels.resources || WebInspector.panels.resources.resourceTrackingEnabled); - }, - reset: function() { this._launcherView.reset(); @@ -271,12 +263,6 @@ WebInspector.AuditsPanel.prototype = { this.viewsContainerElement.style.left = width + "px"; }, - _updateLauncherViewControls: function(isTracking) - { - if (this._launcherView) - this._launcherView.updateResourceTrackingState(isTracking); - }, - _clearButtonClicked: function() { this.auditsItemTreeElement.reveal(); diff --git a/Source/WebCore/inspector/front-end/Breakpoint.js b/Source/WebCore/inspector/front-end/Breakpoint.js index 0a888d2..e5e1768 100644 --- a/Source/WebCore/inspector/front-end/Breakpoint.js +++ b/Source/WebCore/inspector/front-end/Breakpoint.js @@ -37,7 +37,6 @@ WebInspector.Breakpoint = function(debuggerModel, breakpointId, sourceID, url, l this.sourceID = sourceID; this._enabled = enabled; this._condition = condition || ""; - this._sourceText = ""; this._hit = false; this._debuggerModel = debuggerModel; } @@ -56,17 +55,6 @@ WebInspector.Breakpoint.prototype = { WebInspector.debuggerModel.setBreakpoint(this.sourceID, this.line, enabled, this.condition); }, - get sourceText() - { - return this._sourceText; - }, - - set sourceText(text) - { - this._sourceText = text; - this.dispatchEventToListeners("label-changed"); - }, - get condition() { return this._condition; @@ -99,14 +87,19 @@ WebInspector.Breakpoint.prototype = { populateLabelElement: function(element) { - var displayName = this.url ? WebInspector.displayNameForURL(this.url) : WebInspector.UIString("(program)"); - var labelElement = document.createTextNode(displayName + ":" + this.line); - element.appendChild(labelElement); + function didGetSourceLine(text) + { + var displayName = this.url ? WebInspector.displayNameForURL(this.url) : WebInspector.UIString("(program)"); + var labelElement = document.createTextNode(displayName + ":" + this.line); + element.appendChild(labelElement); - var sourceTextElement = document.createElement("div"); - sourceTextElement.textContent = this.sourceText; - sourceTextElement.className = "source-text monospace"; - element.appendChild(sourceTextElement); + var sourceTextElement = document.createElement("div"); + sourceTextElement.textContent = text; + sourceTextElement.className = "source-text monospace"; + element.appendChild(sourceTextElement); + } + var script = this._debuggerModel.scriptForSourceID(this.sourceID); + script.sourceLine(this.line, didGetSourceLine.bind(this)); }, remove: function() diff --git a/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js b/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js index 619525c..408c5ba 100644 --- a/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js +++ b/Source/WebCore/inspector/front-end/BreakpointsSidebarPane.js @@ -265,24 +265,24 @@ WebInspector.EventListenerBreakpointsSidebarPane = function() WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, this._breakpointAdded, this); this._breakpointItems = {}; - this._createCategory("Keyboard", "listener", ["keydown", "keyup", "keypress", "textInput"]); - this._createCategory("Mouse", "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]); + this._createCategory(WebInspector.UIString("Keyboard"), "listener", ["keydown", "keyup", "keypress", "textInput"]); + this._createCategory(WebInspector.UIString("Mouse"), "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]); // FIXME: uncomment following once inspector stops being drop targer in major ports. // Otherwise, inspector page reacts on drop event and tries to load the event data. - // this._createCategory("Drag", "listener", ["drag", "drop", "dragstart", "dragend", "dragenter", "dragleave", "dragover"]); - this._createCategory("Control", "listener", ["resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]); - this._createCategory("Clipboard", "listener", ["copy", "cut", "paste", "beforecopy", "beforecut", "beforepaste"]); - this._createCategory("Load", "listener", ["load", "unload", "abort", "error"]); - this._createCategory("DOM Mutation", "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]); - this._createCategory("Device", "listener", ["deviceorientation", "devicemotion"]); - this._createCategory("Timer", "instrumentation", ["setTimer", "clearTimer", "timerFired"]); + // this._createCategory(WebInspector.UIString("Drag"), "listener", ["drag", "drop", "dragstart", "dragend", "dragenter", "dragleave", "dragover"]); + this._createCategory(WebInspector.UIString("Control"), "listener", ["resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]); + this._createCategory(WebInspector.UIString("Clipboard"), "listener", ["copy", "cut", "paste", "beforecopy", "beforecut", "beforepaste"]); + this._createCategory(WebInspector.UIString("Load"), "listener", ["load", "unload", "abort", "error"]); + this._createCategory(WebInspector.UIString("DOM Mutation"), "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]); + this._createCategory(WebInspector.UIString("Device"), "listener", ["deviceorientation", "devicemotion"]); + this._createCategory(WebInspector.UIString("Timer"), "instrumentation", ["setTimer", "clearTimer", "timerFired"]); } WebInspector.EventListenerBreakpointsSidebarPane.prototype = { _createCategory: function(name, type, eventNames) { var categoryItem = {}; - categoryItem.element = new TreeElement(WebInspector.UIString(name)); + categoryItem.element = new TreeElement(name); this.categoriesTreeOutline.appendChild(categoryItem.element); categoryItem.element.listItemElement.addStyleClass("event-category"); categoryItem.element.selectable = true; diff --git a/Source/WebCore/inspector/front-end/ConsoleView.js b/Source/WebCore/inspector/front-end/ConsoleView.js index c98552d..a40030e 100644 --- a/Source/WebCore/inspector/front-end/ConsoleView.js +++ b/Source/WebCore/inspector/front-end/ConsoleView.js @@ -97,9 +97,63 @@ WebInspector.ConsoleView = function(drawer) "node": this._formatnode, "string": this._formatstring }; + + this._registerConsoleDomainDispatcher(); } WebInspector.ConsoleView.prototype = { + _registerConsoleDomainDispatcher: function() { + var console = this; + var dispatcher = { + addConsoleMessage: function(payload) + { + var consoleMessage = new WebInspector.ConsoleMessage( + payload.source, + payload.type, + payload.level, + payload.line, + payload.url, + payload.repeatCount, + payload.message, + payload.parameters, + payload.stackTrace, + payload.requestId); + console.addMessage(consoleMessage); + }, + + updateConsoleMessageExpiredCount: function(count) + { + var message = String.sprintf(WebInspector.UIString("%d console messages are not shown."), count); + console.addMessage(WebInspector.ConsoleMessage.createTextMessage(message, WebInspector.ConsoleMessage.MessageLevel.Warning)); + }, + + updateConsoleMessageRepeatCount: function(count) + { + var msg = console.previousMessage; + var prevRepeatCount = msg.totalRepeatCount; + + if (!console.commandSincePreviousMessage) { + msg.repeatDelta = count - prevRepeatCount; + msg.repeatCount = msg.repeatCount + msg.repeatDelta; + msg.totalRepeatCount = count; + msg._updateRepeatCount(); + console._incrementErrorWarningCount(msg); + } else { + var msgCopy = new WebInspector.ConsoleMessage(msg.source, msg.type, msg.level, msg.line, msg.url, count - prevRepeatCount, msg._messageText, msg._parameters, msg._stackTrace, msg._requestId); + msgCopy.totalRepeatCount = count; + msgCopy._formatMessage(); + console.addMessage(msgCopy); + } + }, + + consoleMessagesCleared: function() + { + console.clearMessages(); + } + } + InspectorBackend.registerDomainDispatcher("Console", dispatcher); + }, + _updateFilter: function(e) { var isMac = WebInspector.isMac(); @@ -247,25 +301,6 @@ WebInspector.ConsoleView.prototype = { this._scheduleScrollIntoView(); }, - updateMessageRepeatCount: function(count) - { - var msg = this.previousMessage; - var prevRepeatCount = msg.totalRepeatCount; - - if (!this.commandSincePreviousMessage) { - msg.repeatDelta = count - prevRepeatCount; - msg.repeatCount = msg.repeatCount + msg.repeatDelta; - msg.totalRepeatCount = count; - msg._updateRepeatCount(); - this._incrementErrorWarningCount(msg); - } else { - var msgCopy = new WebInspector.ConsoleMessage(msg.source, msg.type, msg.level, msg.line, msg.url, count - prevRepeatCount, msg._messageText, msg._parameters, msg._stackTrace, msg._requestId); - msgCopy.totalRepeatCount = count; - msgCopy._formatMessage(); - this.addMessage(msgCopy); - } - }, - _incrementErrorWarningCount: function(msg) { switch (msg.level) { @@ -668,7 +703,7 @@ WebInspector.ConsoleMessage.prototype = { messageText = document.createTextNode(this._messageText); break; case WebInspector.ConsoleMessage.MessageType.NetworkError: - var resource = this._requestId && WebInspector.panels.network.resources[this._requestId]; + var resource = this._requestId && WebInspector.networkResourceById(this._requestId); if (resource) { stackTrace = resource.stackTrace; diff --git a/Source/WebCore/inspector/front-end/CookieItemsView.js b/Source/WebCore/inspector/front-end/CookieItemsView.js index 75c7f84..dc76b39 100644 --- a/Source/WebCore/inspector/front-end/CookieItemsView.js +++ b/Source/WebCore/inspector/front-end/CookieItemsView.js @@ -101,9 +101,10 @@ WebInspector.CookieItemsView.prototype = { this._emptyMsgElement.addStyleClass("hidden"); if (isAdvanced) { this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length, - Number.bytesToString(this._totalSize, WebInspector.UIString)); + Number.bytesToString(this._totalSize)); this._deleteButton.visible = true; } + this._cookiesTable.updateWidths(); }, _filterCookiesForDomain: function(allCookies) diff --git a/Source/WebCore/inspector/front-end/DOMAgent.js b/Source/WebCore/inspector/front-end/DOMAgent.js index 89822a3..e4fc7ad 100644 --- a/Source/WebCore/inspector/front-end/DOMAgent.js +++ b/Source/WebCore/inspector/front-end/DOMAgent.js @@ -300,7 +300,7 @@ WebInspector.DOMAgent = function() { this._window = new WebInspector.DOMWindow(this); this._idToDOMNode = null; this.document = null; - InspectorBackend.registerDomainDispatcher("DOM", this); + InspectorBackend.registerDomainDispatcher("DOM", new WebInspector.DOMDispatcher(this)); } WebInspector.DOMAgent.prototype = { @@ -351,7 +351,7 @@ WebInspector.DOMAgent.prototype = { elem.updateTitle(); }, - attributesUpdated: function(nodeId, attrsArray) + _attributesUpdated: function(nodeId, attrsArray) { var node = this._idToDOMNode[nodeId]; node._setAttributesPayload(attrsArray); @@ -359,7 +359,7 @@ WebInspector.DOMAgent.prototype = { this.document._fireDomEvent("DOMAttrModified", event); }, - characterDataModified: function(nodeId, newValue) + _characterDataModified: function(nodeId, newValue) { var node = this._idToDOMNode[nodeId]; node._nodeValue = newValue; @@ -373,13 +373,7 @@ WebInspector.DOMAgent.prototype = { return this._idToDOMNode[nodeId]; }, - didCommitLoad: function() - { - // Cleanup elements panel early on inspected page refresh. - this.setDocument(null); - }, - - setDocument: function(payload) + _setDocument: function(payload) { this._idToDOMNode = {}; if (payload && "id" in payload) { @@ -392,13 +386,13 @@ WebInspector.DOMAgent.prototype = { WebInspector.panels.elements.setDocument(this.document); }, - setDetachedRoot: function(payload) + _setDetachedRoot: function(payload) { var root = new WebInspector.DOMNode(this.document, payload); this._idToDOMNode[payload.id] = root; }, - setChildNodes: function(parentId, payloads) + _setChildNodes: function(parentId, payloads) { var parent = this._idToDOMNode[parentId]; parent._setChildrenPayload(payloads); @@ -415,7 +409,7 @@ WebInspector.DOMAgent.prototype = { } }, - childNodeCountUpdated: function(nodeId, newValue) + _childNodeCountUpdated: function(nodeId, newValue) { var node = this._idToDOMNode[nodeId]; node._childNodeCount = newValue; @@ -425,7 +419,7 @@ WebInspector.DOMAgent.prototype = { treeElement.hasChildren = newValue; }, - childNodeInserted: function(parentId, prevId, payload) + _childNodeInserted: function(parentId, prevId, payload) { var parent = this._idToDOMNode[parentId]; var prev = this._idToDOMNode[prevId]; @@ -435,7 +429,7 @@ WebInspector.DOMAgent.prototype = { this.document._fireDomEvent("DOMNodeInserted", event); }, - childNodeRemoved: function(parentId, nodeId) + _childNodeRemoved: function(parentId, nodeId) { var parent = this._idToDOMNode[parentId]; var node = this._idToDOMNode[nodeId]; @@ -457,31 +451,82 @@ WebInspector.DOMAgent.prototype = { } } -WebInspector.ApplicationCache = {} - -WebInspector.ApplicationCache.getApplicationCachesAsync = function(callback) +WebInspector.DOMDispatcher = function(domAgent) { - function mycallback(applicationCaches) + this._domAgent = domAgent; +} + +WebInspector.DOMDispatcher.prototype = { + setDocument: function(payload) { - // FIXME: Currently, this list only returns a single application cache. - if (applicationCaches) - callback(applicationCaches); - } + this._domAgent._setDocument(payload); + }, + + attributesUpdated: function(nodeId, attrsArray) + { + this._domAgent._attributesUpdated(nodeId, attrsArray); + }, - InspectorBackend.getApplicationCaches(mycallback); + characterDataModified: function(nodeId, newValue) + { + this._domAgent._characterDataModified(nodeId, newValue); + }, + + setChildNodes: function(parentId, payloads) + { + this._domAgent._setChildNodes(parentId, payloads); + }, + + setDetachedRoot: function(payload) + { + this._domAgent._setDetachedRoot(payload); + }, + + childNodeCountUpdated: function(nodeId, newValue) + { + this._domAgent._childNodeCountUpdated(nodeId, newValue); + }, + + childNodeInserted: function(parentId, prevId, payload) + { + this._domAgent._childNodeInserted(parentId, prevId, payload); + }, + + childNodeRemoved: function(parentId, nodeId) + { + this._domAgent._childNodeRemoved(parentId, nodeId); + } } -WebInspector.ApplicationCache.updateApplicationCacheStatus = function(status) +WebInspector.ApplicationCacheDispatcher = function() { - WebInspector.panels.resources.updateApplicationCacheStatus(status); } -WebInspector.ApplicationCache.updateNetworkState = function(isNowOnline) -{ - WebInspector.panels.resources.updateNetworkState(isNowOnline); +WebInspector.ApplicationCacheDispatcher.prototype = { + getApplicationCachesAsync: function(callback) + { + function mycallback(applicationCaches) + { + // FIXME: Currently, this list only returns a single application cache. + if (applicationCaches) + callback(applicationCaches); + } + + InspectorBackend.getApplicationCaches(mycallback); + }, + + updateApplicationCacheStatus: function(status) + { + WebInspector.panels.resources.updateApplicationCacheStatus(status); + }, + + updateNetworkState: function(isNowOnline) + { + WebInspector.panels.resources.updateNetworkState(isNowOnline); + } } -InspectorBackend.registerDomainDispatcher("ApplicationCache", WebInspector.ApplicationCache); +InspectorBackend.registerDomainDispatcher("ApplicationCache", new WebInspector.ApplicationCacheDispatcher()); WebInspector.Cookies = {} diff --git a/Source/WebCore/inspector/front-end/DOMStorage.js b/Source/WebCore/inspector/front-end/DOMStorage.js index aa14a9c..d3d2226 100644 --- a/Source/WebCore/inspector/front-end/DOMStorage.js +++ b/Source/WebCore/inspector/front-end/DOMStorage.js @@ -70,26 +70,33 @@ WebInspector.DOMStorage.prototype = { } } -WebInspector.DOMStorage.addDOMStorage = function(payload) -{ - if (!WebInspector.panels.resources) - return; - var domStorage = new WebInspector.DOMStorage( - payload.id, - payload.host, - payload.isLocalStorage); - WebInspector.panels.resources.addDOMStorage(domStorage); -} -WebInspector.DOMStorage.selectDOMStorage = function(o) +WebInspector.DOMStorageDispatcher = function() { - WebInspector.showPanel("resources"); - WebInspector.panels.resources.selectDOMStorage(o); } -WebInspector.DOMStorage.updateDOMStorage = function(storageId) -{ - WebInspector.panels.resources.updateDOMStorage(storageId); +WebInspector.DOMStorageDispatcher.prototype = { + addDOMStorage: function(payload) + { + if (!WebInspector.panels.resources) + return; + var domStorage = new WebInspector.DOMStorage( + payload.id, + payload.host, + payload.isLocalStorage); + WebInspector.panels.resources.addDOMStorage(domStorage); + }, + + selectDOMStorage: function(o) + { + WebInspector.showPanel("resources"); + WebInspector.panels.resources.selectDOMStorage(o); + }, + + updateDOMStorage: function(storageId) + { + WebInspector.panels.resources.updateDOMStorage(storageId); + } } -InspectorBackend.registerDomainDispatcher("DOMStorage", WebInspector.DOMStorage); +InspectorBackend.registerDomainDispatcher("DOMStorage", new WebInspector.DOMStorageDispatcher()); diff --git a/Source/WebCore/inspector/front-end/Database.js b/Source/WebCore/inspector/front-end/Database.js index 0b00330..faa17fa 100644 --- a/Source/WebCore/inspector/front-end/Database.js +++ b/Source/WebCore/inspector/front-end/Database.js @@ -34,8 +34,6 @@ WebInspector.Database = function(id, domain, name, version) this._version = version; } -WebInspector.Database._callbacks = {}; - WebInspector.Database.prototype = { get id() { @@ -94,50 +92,58 @@ WebInspector.Database.prototype = { onError(WebInspector.UIString("Database not found.")); return; } - WebInspector.Database._callbacks[transactionId] = {"onSuccess": onSuccess, "onError": onError}; + WebInspector.DatabaseDispatcher._callbacks[transactionId] = {"onSuccess": onSuccess, "onError": onError}; } InspectorBackend.executeSQL(this._id, query, callback); } } -WebInspector.Database.addDatabase = function(payload) +WebInspector.DatabaseDispatcher = function() { - if (!WebInspector.panels.resources) - return; - var database = new WebInspector.Database( - payload.id, - payload.domain, - payload.name, - payload.version); - WebInspector.panels.resources.addDatabase(database); } -WebInspector.Database.selectDatabase = function(o) -{ - WebInspector.showPanel("resources"); - WebInspector.panels.resources.selectDatabase(o); -} +WebInspector.DatabaseDispatcher._callbacks = {}; -WebInspector.Database.sqlTransactionSucceeded = function(transactionId, columnNames, values) -{ - if (!WebInspector.Database._callbacks[transactionId]) - return; +WebInspector.DatabaseDispatcher.prototype = { + addDatabase: function(payload) + { + if (!WebInspector.panels.resources) + return; + var database = new WebInspector.Database( + payload.id, + payload.domain, + payload.name, + payload.version); + WebInspector.panels.resources.addDatabase(database); + }, - var callback = WebInspector.Database._callbacks[transactionId].onSuccess; - delete WebInspector.Database._callbacks[transactionId]; - if (callback) - callback(columnNames, values); -} + selectDatabase: function(o) + { + WebInspector.showPanel("resources"); + WebInspector.panels.resources.selectDatabase(o); + }, -WebInspector.Database.sqlTransactionFailed = function(transactionId, errorObj) -{ - if (!WebInspector.Database._callbacks[transactionId]) - return; + sqlTransactionSucceeded: function(transactionId, columnNames, values) + { + if (!WebInspector.DatabaseDispatcher._callbacks[transactionId]) + return; + + var callback = WebInspector.DatabaseDispatcher._callbacks[transactionId].onSuccess; + delete WebInspector.DatabaseDispatcher._callbacks[transactionId]; + if (callback) + callback(columnNames, values); + }, + + sqlTransactionFailed: function(transactionId, errorObj) + { + if (!WebInspector.DatabaseDispatcher._callbacks[transactionId]) + return; - var callback = WebInspector.Database._callbacks[transactionId].onError; - delete WebInspector.Database._callbacks[transactionId]; - if (callback) - callback(errorObj); + var callback = WebInspector.DatabaseDispatcher._callbacks[transactionId].onError; + delete WebInspector.DatabaseDispatcher._callbacks[transactionId]; + if (callback) + callback(errorObj); + } } -InspectorBackend.registerDomainDispatcher("Database", WebInspector.Database); +InspectorBackend.registerDomainDispatcher("Database", new WebInspector.DatabaseDispatcher()); diff --git a/Source/WebCore/inspector/front-end/DebuggerModel.js b/Source/WebCore/inspector/front-end/DebuggerModel.js index 5ab0e2d..8f5bcf7 100644 --- a/Source/WebCore/inspector/front-end/DebuggerModel.js +++ b/Source/WebCore/inspector/front-end/DebuggerModel.js @@ -30,12 +30,12 @@ WebInspector.DebuggerModel = function() { - InspectorBackend.registerDomainDispatcher("Debugger", this); - this._paused = false; this._breakpoints = {}; this._sourceIDAndLineToBreakpointId = {}; this._scripts = {}; + + InspectorBackend.registerDomainDispatcher("Debugger", new WebInspector.DebuggerDispatcher(this)); } WebInspector.DebuggerModel.Events = { @@ -86,11 +86,6 @@ WebInspector.DebuggerModel.prototype = { this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointRemoved, breakpointId); }, - breakpointResolved: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber) - { - this._breakpointSetOnBackend(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, true); - }, - _breakpointSetOnBackend: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, restored) { var sourceIDAndLine = this._encodeSourceIDAndLine(sourceID, lineNumber); @@ -161,9 +156,7 @@ WebInspector.DebuggerModel.prototype = { return scripts; }, - // All the methods below are InspectorBackend notification handlers. - - pausedScript: function(details) + _pausedScript: function(details) { this._paused = true; if ("_continueToLineBreakpointId" in this) { @@ -182,7 +175,7 @@ WebInspector.DebuggerModel.prototype = { this._lastHitBreakpoint = breakpoint; }, - resumedScript: function() + _resumedScript: function() { this._paused = false; this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerResumed); @@ -193,9 +186,42 @@ WebInspector.DebuggerModel.prototype = { delete this._lastHitBreakpoint; }, - attachDebuggerWhenShown: function() + _parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, scriptWorldType) + { + var script = new WebInspector.Script(sourceID, sourceURL, "", lineOffset, columnOffset, undefined, undefined, scriptWorldType); + this._scripts[sourceID] = script; + this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, sourceID); + }, + + _failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage) + { + var script = new WebInspector.Script(null, sourceURL, source, startingLine, errorLine, errorMessage, undefined); + this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, script); + } +} + +WebInspector.DebuggerModel.prototype.__proto__ = WebInspector.Object.prototype; + +WebInspector.DebuggerEventTypes = { + JavaScriptPause: 0, + JavaScriptBreakpoint: 1, + NativeBreakpoint: 2 +}; + +WebInspector.DebuggerDispatcher = function(debuggerModel) +{ + this._debuggerModel = debuggerModel; +} + +WebInspector.DebuggerDispatcher.prototype = { + pausedScript: function(details) + { + this._debuggerModel._pausedScript(details); + }, + + resumedScript: function() { - WebInspector.panels.scripts.attachDebuggerWhenShown(); + this._debuggerModel._resumedScript(); }, debuggerWasEnabled: function() @@ -208,17 +234,19 @@ WebInspector.DebuggerModel.prototype = { WebInspector.panels.scripts.debuggerWasDisabled(); }, - parsedScriptSource: function(sourceID, sourceURL, source, startingLine, scriptWorldType) + parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, scriptWorldType) { - var script = new WebInspector.Script(sourceID, sourceURL, source, startingLine, undefined, undefined, scriptWorldType); - this._scripts[sourceID] = script; - this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, sourceID); + this._debuggerModel._parsedScriptSource(sourceID, sourceURL, lineOffset, columnOffset, scriptWorldType); }, failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage) { - var script = new WebInspector.Script(null, sourceURL, source, startingLine, errorLine, errorMessage, undefined); - this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, script); + this._debuggerModel._failedToParseScriptSource(sourceURL, source, startingLine, errorLine, errorMessage); + }, + + breakpointResolved: function(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber) + { + this._debuggerModel._breakpointSetOnBackend(breakpointId, sourceID, lineNumber, condition, enabled, originalLineNumber, true); }, didCreateWorker: function() @@ -233,11 +261,3 @@ WebInspector.DebuggerModel.prototype = { workersPane.removeWorker.apply(workersPane, arguments); } } - -WebInspector.DebuggerModel.prototype.__proto__ = WebInspector.Object.prototype; - -WebInspector.DebuggerEventTypes = { - JavaScriptPause: 0, - JavaScriptBreakpoint: 1, - NativeBreakpoint: 2 -}; diff --git a/Source/WebCore/inspector/front-end/ExtensionServer.js b/Source/WebCore/inspector/front-end/ExtensionServer.js index 373c855..1320efb 100644 --- a/Source/WebCore/inspector/front-end/ExtensionServer.js +++ b/Source/WebCore/inspector/front-end/ExtensionServer.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -288,7 +288,7 @@ WebInspector.ExtensionServer.prototype = { var id = message.id; var resource = null; - resource = WebInspector.networkResources[id] || WebInspector.resourceForURL(id); + resource = WebInspector.networkResourceById(id) || WebInspector.resourceForURL(id); if (!resource) return this._status.E_NOTFOUND(typeof id + ": " + id); @@ -318,7 +318,7 @@ WebInspector.ExtensionServer.prototype = { }; this._dispatchCallback(message.requestId, port, response); } - var resource = WebInspector.networkResources[message.id]; + var resource = WebInspector.networkResourceById(message.id); if (!resource) return this._status.E_NOTFOUND(message.id); resource.requestContent(onContentAvailable.bind(this)); diff --git a/Source/WebCore/inspector/front-end/FileSystemView.js b/Source/WebCore/inspector/front-end/FileSystemView.js index 14ecf46..56f21a4 100644 --- a/Source/WebCore/inspector/front-end/FileSystemView.js +++ b/Source/WebCore/inspector/front-end/FileSystemView.js @@ -28,34 +28,38 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -WebInspector.FileSystem = {} +WebInspector.FileSystemDispatcher = function() +{ +} // Keep in sync with Type in AsyncFileSystem.h -WebInspector.FileSystem.TEMPORARY = 0; -WebInspector.FileSystem.PERSISTENT = 1; +WebInspector.FileSystemDispatcher.TEMPORARY = 0; +WebInspector.FileSystemDispatcher.PERSISTENT = 1; -WebInspector.FileSystem.getFileSystemPathsAsync = function(origin) -{ - InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystem.PERSISTENT, origin); - InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystem.TEMPORARY, origin); -} +WebInspector.FileSystemDispatcher.prototype = { + getFileSystemPathsAsync: function(origin) + { + InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystemDispatcher.PERSISTENT, origin); + InspectorBackend.getFileSystemPathAsync(WebInspector.FileSystemDispatcher.TEMPORARY, origin); + }, -WebInspector.FileSystem.didGetFileSystemPath = function(root, type, origin) -{ - WebInspector.panels.resources.updateFileSystemPath(root, type, origin); -} + didGetFileSystemPath: function(root, type, origin) + { + WebInspector.panels.resources.updateFileSystemPath(root, type, origin); + }, -WebInspector.FileSystem.didGetFileSystemError = function(type, origin) -{ - WebInspector.panels.resources.updateFileSystemError(type, origin); -} + didGetFileSystemError: function(type, origin) + { + WebInspector.panels.resources.updateFileSystemError(type, origin); + }, -WebInspector.FileSystem.didGetFileSystemDisabled = function() -{ - WebInspector.panels.resources.setFileSystemDisabled(); + didGetFileSystemDisabled: function() + { + WebInspector.panels.resources.setFileSystemDisabled(); + } } -InspectorBackend.registerDomainDispatcher("FileSystem", WebInspector.FileSystem); +InspectorBackend.registerDomainDispatcher("FileSystem", new WebInspector.FileSystemDispatcher()); WebInspector.FileSystemView = function(treeElement, fileSystemOrigin) { diff --git a/Source/WebCore/inspector/front-end/HAREntry.js b/Source/WebCore/inspector/front-end/HAREntry.js index 6dfbd1b..4d690b3 100644 --- a/Source/WebCore/inspector/front-end/HAREntry.js +++ b/Source/WebCore/inspector/front-end/HAREntry.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -204,7 +204,7 @@ WebInspector.HARLog.prototype = { version: webKitVersion ? webKitVersion[1] : "n/a" }, pages: this._buildPages(), - entries: Object.keys(WebInspector.networkResources).map(this._convertResource.bind(this)) + entries: WebInspector.networkResources.map(this._convertResource.bind(this)) } }, @@ -228,11 +228,11 @@ WebInspector.HARLog.prototype = { } }, - _convertResource: function(id) + _convertResource: function(resource) { - var entry = (new WebInspector.HAREntry(WebInspector.networkResources[id])).build(); + var entry = (new WebInspector.HAREntry(resource)).build(); if (this.includeResourceIds) - entry._resourceId = id; + entry._resourceId = resource.identifier; return entry; }, diff --git a/Source/WebCore/inspector/front-end/ImageView.js b/Source/WebCore/inspector/front-end/ImageView.js index 54a16bb..917a9da 100644 --- a/Source/WebCore/inspector/front-end/ImageView.js +++ b/Source/WebCore/inspector/front-end/ImageView.js @@ -70,12 +70,7 @@ WebInspector.ImageView.prototype = { var infoListElement = document.createElement("dl"); infoListElement.className = "infoList"; - function onResourceContent(element, content) - { - imagePreviewElement.setAttribute("src", this.resource.contentURL); - } - this.resource.requestContent(onResourceContent.bind(this)); - + this.resource.populateImageSource(imagePreviewElement); function onImageLoad() { @@ -87,7 +82,7 @@ WebInspector.ImageView.prototype = { var imageProperties = [ { name: WebInspector.UIString("Dimensions"), value: WebInspector.UIString("%d × %d", imagePreviewElement.naturalWidth, imagePreviewElement.naturalHeight) }, - { name: WebInspector.UIString("File size"), value: Number.bytesToString(resourceSize, WebInspector.UIString) }, + { name: WebInspector.UIString("File size"), value: Number.bytesToString(resourceSize) }, { name: WebInspector.UIString("MIME type"), value: this.resource.mimeType } ]; @@ -100,6 +95,13 @@ WebInspector.ImageView.prototype = { dd.textContent = imageProperties[i].value; infoListElement.appendChild(dd); } + var dt = document.createElement("dt"); + dt.textContent = WebInspector.UIString("URL"); + infoListElement.appendChild(dt); + var dd = document.createElement("dd"); + dd.appendChild(WebInspector.linkifyURLAsNode(this.resource.url)); + infoListElement.appendChild(dd); + this._container.appendChild(infoListElement); } imagePreviewElement.addEventListener("load", onImageLoad.bind(this), false); diff --git a/Source/WebCore/inspector/front-end/NetworkManager.js b/Source/WebCore/inspector/front-end/NetworkManager.js index b1ec97c..a657377 100644 --- a/Source/WebCore/inspector/front-end/NetworkManager.js +++ b/Source/WebCore/inspector/front-end/NetworkManager.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009, 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,8 +30,9 @@ WebInspector.NetworkManager = function(resourceTreeModel) { - this._resourcesById = {}; + this._inflightResources = {}; this._resourceTreeModel = resourceTreeModel; + this._lastIdentifierForCachedResource = 0; InspectorBackend.registerDomainDispatcher("Network", this); } @@ -86,20 +87,21 @@ WebInspector.NetworkManager.updateResourceWithCachedResource = function(resource } WebInspector.NetworkManager.prototype = { - identifierForInitialRequest: function(identifier, url, loader, callStack) + reset: function() { - var resource = this._createResource(identifier, url, loader, callStack); - - // It is important to bind resource url early (before scripts compile). - this._resourceTreeModel.bindResourceURL(resource); + WebInspector.panels.network.clear(); + WebInspector.panels.resources.clear(); + this._resourceTreeModel.reloadCachedResources(); + }, - WebInspector.panels.network.refreshResource(resource); - WebInspector.panels.audits.resourceStarted(resource); + identifierForInitialRequest: function(identifier, url, loader, callStack) + { + this._startResource(this._resourceTreeModel.createResource(identifier, url, loader, callStack)); }, willSendRequest: function(identifier, time, request, redirectResponse) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -107,24 +109,22 @@ WebInspector.NetworkManager.prototype = { // See http/tests/misc/will-send-request-returns-null-on-redirect.html var isRedirect = !redirectResponse.isNull && request.url.length; if (isRedirect) { - resource.endTime = time; this.didReceiveResponse(identifier, time, "Other", redirectResponse); - resource = this._appendRedirect(resource.identifier, request.url); + resource = this._appendRedirect(resource.identifier, time, request.url); } WebInspector.NetworkManager.updateResourceWithRequest(resource, request); resource.startTime = time; - if (isRedirect) { - WebInspector.panels.network.refreshResource(resource); - WebInspector.panels.audits.resourceStarted(resource); - } else + if (isRedirect) + this._startResource(resource); + else WebInspector.panels.network.refreshResource(resource); }, markResourceAsCached: function(identifier) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -134,7 +134,7 @@ WebInspector.NetworkManager.prototype = { didReceiveResponse: function(identifier, time, resourceType, response) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -149,7 +149,7 @@ WebInspector.NetworkManager.prototype = { didReceiveContentLength: function(identifier, time, lengthReceived) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -161,54 +161,44 @@ WebInspector.NetworkManager.prototype = { didFinishLoading: function(identifier, finishTime) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; - resource.endTime = finishTime; - resource.finished = true; - - WebInspector.panels.network.refreshResource(resource); - WebInspector.panels.audits.resourceFinished(resource); - WebInspector.extensionServer.notifyResourceFinished(resource); - delete this._resourcesById[identifier]; + this._finishResource(resource, finishTime); }, didFailLoading: function(identifier, time, localizedDescription) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; resource.failed = true; resource.localizedFailDescription = localizedDescription; - resource.finished = true; - resource.endTime = time; - - WebInspector.panels.network.refreshResource(resource); - WebInspector.panels.audits.resourceFinished(resource); - WebInspector.extensionServer.notifyResourceFinished(resource); - delete this._resourcesById[identifier]; + this._finishResource(resource, time); }, didLoadResourceFromMemoryCache: function(time, cachedResource) { - var resource = this._createResource(null, cachedResource.url, cachedResource.loader); + var resource = this._resourceTreeModel.createResource("cached:" + ++this._lastIdentifierForCachedResource, cachedResource.url, cachedResource.loader); WebInspector.NetworkManager.updateResourceWithCachedResource(resource, cachedResource); resource.cached = true; resource.requestMethod = "GET"; - resource.startTime = resource.responseReceivedTime = resource.endTime = time; - resource.finished = true; - - WebInspector.panels.network.refreshResource(resource); - WebInspector.panels.audits.resourceStarted(resource); - WebInspector.panels.audits.resourceFinished(resource); + this._startResource(resource); + resource.startTime = resource.responseReceivedTime = time; + this._finishResource(resource, time); this._resourceTreeModel.addResourceToFrame(resource.loader.frameId, resource); }, + frameDetachedFromParent: function(frameId) + { + this._resourceTreeModel.frameDetachedFromParent(frameId); + }, + setInitialContent: function(identifier, sourceString, type) { - var resource = WebInspector.panels.network.resources[identifier]; + var resource = WebInspector.networkResourceById(identifier); if (!resource) return; @@ -226,20 +216,21 @@ WebInspector.NetworkManager.prototype = { if (mainResource) { WebInspector.mainResource = mainResource; mainResource.isMainResource = true; + WebInspector.panels.network.mainResourceChanged(); } } }, didCreateWebSocket: function(identifier, requestURL) { - var resource = this._createResource(identifier, requestURL); + var resource = this._resourceTreeModel.createResource(identifier, requestURL); resource.type = WebInspector.Resource.Type.WebSocket; - WebInspector.panels.network.refreshResource(resource); + this._startResource(resource); }, willSendWebSocketHandshakeRequest: function(identifier, time, request) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -253,7 +244,7 @@ WebInspector.NetworkManager.prototype = { didReceiveWebSocketHandshakeResponse: function(identifier, time, response) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; @@ -268,31 +259,44 @@ WebInspector.NetworkManager.prototype = { didCloseWebSocket: function(identifier, time) { - var resource = this._resourcesById[identifier]; + var resource = this._inflightResources[identifier]; if (!resource) return; - resource.endTime = time; - - WebInspector.panels.network.refreshResource(resource); + this._finishResource(resource, time); }, - _createResource: function(identifier, url, loader, callStack) + _appendRedirect: function(identifier, time, redirectURL) { - var resource = WebInspector.ResourceTreeModel.createResource(identifier, url, loader, callStack); - this._resourcesById[identifier] = resource; - return resource; + var originalResource = this._inflightResources[identifier]; + var previousRedirects = originalResource.redirects || []; + originalResource.identifier = "redirected:" + identifier + "." + previousRedirects.length; + delete originalResource.redirects; + this._finishResource(originalResource, time); + // We bound resource early, but it happened to be a redirect and won't make it through to + // the resource tree -- so unbind it. + // FIXME: we should bind upon adding to the tree only (encapsulated into ResourceTreeModel), + // Script debugger should do explicit late binding on its own. + this._resourceTreeModel.unbindResourceURL(originalResource); + + var newResource = this._resourceTreeModel.createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace); + newResource.redirects = previousRedirects.concat(originalResource); + return newResource; }, - _appendRedirect: function(identifier, redirectURL) + _startResource: function(resource, skipRefresh) { - var originalResource = this._resourcesById[identifier]; - originalResource.finished = true; - originalResource.identifier = null; + this._inflightResources[resource.identifier] = resource; + WebInspector.panels.network.appendResource(resource, skipRefresh); + WebInspector.panels.audits.resourceStarted(resource); + }, - var newResource = this._createResource(identifier, redirectURL, originalResource.loader, originalResource.stackTrace); - newResource.redirects = originalResource.redirects || []; - delete originalResource.redirects; - newResource.redirects.push(originalResource); - return newResource; + _finishResource: function(resource, finishTime) + { + resource.endTime = finishTime; + resource.finished = true; + WebInspector.panels.network.refreshResource(resource); + WebInspector.panels.audits.resourceFinished(resource); + WebInspector.extensionServer.notifyResourceFinished(resource); + delete this._inflightResources[resource.identifier]; } } diff --git a/Source/WebCore/inspector/front-end/NetworkPanel.js b/Source/WebCore/inspector/front-end/NetworkPanel.js index 7b6df8b..28cbd36 100644 --- a/Source/WebCore/inspector/front-end/NetworkPanel.js +++ b/Source/WebCore/inspector/front-end/NetworkPanel.js @@ -1,7 +1,7 @@ /* * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -38,7 +38,6 @@ WebInspector.NetworkPanel = function() this._resources = []; this._resourcesById = {}; this._resourcesByURL = {}; - this._lastIdentifier = 0; this._staleResources = []; this._resourceGridNodes = {}; this._mainResourceLoadTime = -1; @@ -733,12 +732,6 @@ WebInspector.NetworkPanel.prototype = { this._preserveLogToggle.toggled = !this._preserveLogToggle.toggled; }, - reset: function() - { - if (!this._preserveLogToggle.toggled) - this._reset(); - }, - _reset: function() { this._popoverHelper.hidePopup(); @@ -771,32 +764,34 @@ WebInspector.NetworkPanel.prototype = { get resources() { - return this._resourcesById; + return this._resources; }, - refreshResource: function(resource) + resourceById: function(id) { - if (!resource.identifier) - resource.identifier = "network:" + this._lastIdentifier++; + return this._resourcesById[id]; + }, - if (!this._resourcesById[resource.identifier]) { - this._resources.push(resource); - this._resourcesById[resource.identifier] = resource; - this._resourcesByURL[resource.url] = resource; + appendResource: function(resource) + { + this._resources.push(resource); + this._resourcesById[resource.identifier] = resource; + this._resourcesByURL[resource.url] = resource; - // Pull all the redirects of the main resource upon commit load. - if (resource.redirects) { - for (var i = 0; i < resource.redirects.length; ++i) - this.refreshResource(resource.redirects[i]); - } + // Pull all the redirects of the main resource upon commit load. + if (resource.redirects) { + for (var i = 0; i < resource.redirects.length; ++i) + this.refreshResource(resource.redirects[i]); } + this.refreshResource(resource); + }, + + refreshResource: function(resource) + { this._staleResources.push(resource); this._scheduleRefresh(); - if (!resource) - return; - var oldView = WebInspector.ResourceView.existingResourceViewForResource(resource); if (!oldView) return; @@ -809,6 +804,24 @@ WebInspector.NetworkPanel.prototype = { this.visibleView = newView; }, + clear: function() + { + if (this._preserveLogToggle.toggled) + return; + this._reset(); + }, + + mainResourceChanged: function() + { + if (this._preserveLogToggle.toggled) + return; + + this._reset(); + // Now resurrect the main resource along with all redirects that lead to it. + var resourcesToAppend = (WebInspector.mainResource.redirects || []).concat(WebInspector.mainResource); + resourcesToAppend.forEach(this.appendResource, this); + }, + canShowSourceLine: function(url, line) { return !!this._resourcesByURL[url]; @@ -978,7 +991,7 @@ WebInspector.NetworkPanel.prototype = { _contextMenu: function(event) { // createBlobURL is enabled conditionally, do not expose resource export if it's not available. - if (typeof window.createObjectURL !== "function" || !Preferences.resourceExportEnabled) + if (typeof window.webkitURL.createObjectURL !== "function" || !Preferences.resourceExportEnabled) return; var contextMenu = new WebInspector.ContextMenu(); @@ -1230,7 +1243,7 @@ WebInspector.NetworkTimeCalculator.prototype = { formatValue: function(value) { - return Number.secondsToString(value, WebInspector.UIString); + return Number.secondsToString(value); }, _lowerBound: function(resource) @@ -1254,7 +1267,7 @@ WebInspector.NetworkTransferTimeCalculator = function() WebInspector.NetworkTransferTimeCalculator.prototype = { formatValue: function(value) { - return Number.secondsToString(value, WebInspector.UIString); + return Number.secondsToString(value); }, _lowerBound: function(resource) @@ -1278,7 +1291,7 @@ WebInspector.NetworkTransferDurationCalculator = function() WebInspector.NetworkTransferDurationCalculator.prototype = { formatValue: function(value) { - return Number.secondsToString(value, WebInspector.UIString); + return Number.secondsToString(value); }, _upperBound: function(resource) @@ -1408,15 +1421,7 @@ WebInspector.NetworkDataGridNode.prototype = { if (this._resource.category === WebInspector.resourceCategories.images) { var previewImage = document.createElement("img"); previewImage.className = "image-network-icon-preview"; - - function onResourceContent() - { - previewImage.src = this._resource.contentURL; - } - if (Preferences.useDataURLForResourceImageIcons) - this._resource.requestContent(onResourceContent.bind(this)); - else - previewImage.src = this._resource.url; + this._resource.populateImageSource(previewImage); var iconElement = document.createElement("div"); iconElement.className = "icon"; diff --git a/Source/WebCore/inspector/front-end/ProfileDataGridTree.js b/Source/WebCore/inspector/front-end/ProfileDataGridTree.js index adf34f1..7988674 100644 --- a/Source/WebCore/inspector/front-end/ProfileDataGridTree.js +++ b/Source/WebCore/inspector/front-end/ProfileDataGridTree.js @@ -50,7 +50,7 @@ WebInspector.ProfileDataGridNode.prototype = { { function formatMilliseconds(time) { - return Number.secondsToString(time / 1000, WebInspector.UIString, !Preferences.samplingCPUProfiler); + return Number.secondsToString(time / 1000, !Preferences.samplingCPUProfiler); } var data = {}; diff --git a/Source/WebCore/inspector/front-end/ProfilesPanel.js b/Source/WebCore/inspector/front-end/ProfilesPanel.js index bff5be7..2e0ab28 100644 --- a/Source/WebCore/inspector/front-end/ProfilesPanel.js +++ b/Source/WebCore/inspector/front-end/ProfilesPanel.js @@ -124,7 +124,7 @@ WebInspector.ProfilesPanel = function() this._profiles = []; this._profilerEnabled = Preferences.profilerAlwaysEnabled; this._reset(); - InspectorBackend.registerDomainDispatcher("Profiler", this); + InspectorBackend.registerDomainDispatcher("Profiler", new WebInspector.ProfilerDispatcher(this)); } WebInspector.ProfilesPanel.prototype = { @@ -162,7 +162,7 @@ WebInspector.ProfilesPanel.prototype = { this._populateProfiles(); }, - profilerWasEnabled: function() + _profilerWasEnabled: function() { if (this._profilerEnabled) return; @@ -174,7 +174,7 @@ WebInspector.ProfilesPanel.prototype = { this._populateProfiles(); }, - profilerWasDisabled: function() + _profilerWasDisabled: function() { if (!this._profilerEnabled) return; @@ -183,11 +183,6 @@ WebInspector.ProfilesPanel.prototype = { this._reset(); }, - resetProfiles: function() - { - this._reset(); - }, - _reset: function() { for (var i = 0; i < this._profiles.length; ++i) @@ -262,7 +257,7 @@ WebInspector.ProfilesPanel.prototype = { return escape(text) + '/' + escape(profileTypeId); }, - addProfileHeader: function(profile) + _addProfileHeader: function(profile) { var typeId = profile.typeId; var profileType = this.getProfileType(typeId); @@ -327,7 +322,7 @@ WebInspector.ProfilesPanel.prototype = { } }, - removeProfileHeader: function(profile) + _removeProfileHeader: function(profile) { var typeId = profile.typeId; var profileType = this.getProfileType(typeId); @@ -432,7 +427,7 @@ WebInspector.ProfilesPanel.prototype = { } }, - addHeapSnapshotChunk: function(uid, chunk) + _addHeapSnapshotChunk: function(uid, chunk) { var profile = this._profilesIdMap[this._makeKey(uid, WebInspector.HeapSnapshotProfileType.TypeId)]; if (!profile || profile._loaded || !profile._is_loading) @@ -441,7 +436,7 @@ WebInspector.ProfilesPanel.prototype = { profile._json += chunk; }, - finishHeapSnapshot: function(uid) + _finishHeapSnapshot: function(uid) { var profile = this._profilesIdMap[this._makeKey(uid, WebInspector.HeapSnapshotProfileType.TypeId)]; if (!profile || profile._loaded || !profile._is_loading) @@ -600,7 +595,7 @@ WebInspector.ProfilesPanel.prototype = { var profileHeadersLength = profileHeaders.length; for (var i = 0; i < profileHeadersLength; ++i) if (!this.hasProfile(profileHeaders[i])) - WebInspector.panels.profiles.addProfileHeader(profileHeaders[i]); + this._addProfileHeader(profileHeaders[i]); } InspectorBackend.getProfileHeaders(populateCallback.bind(this)); @@ -616,22 +611,22 @@ WebInspector.ProfilesPanel.prototype = { this.resize(); }, - setRecordingProfile: function(isProfiling) + _setRecordingProfile: function(isProfiling) { this.getProfileType(WebInspector.CPUProfileType.TypeId).setRecordingProfile(isProfiling); if (this.hasTemporaryProfile(WebInspector.CPUProfileType.TypeId) !== isProfiling) { if (!this._temporaryRecordingProfile) { this._temporaryRecordingProfile = { typeId: WebInspector.CPUProfileType.TypeId, - title: WebInspector.UIString("Recording"), + title: WebInspector.UIString("Recording…"), uid: -1, isTemporary: true }; } if (isProfiling) - this.addProfileHeader(this._temporaryRecordingProfile); + this._addProfileHeader(this._temporaryRecordingProfile); else - this.removeProfileHeader(this._temporaryRecordingProfile); + this._removeProfileHeader(this._temporaryRecordingProfile); } this.updateProfileTypeButtons(); } @@ -639,6 +634,49 @@ WebInspector.ProfilesPanel.prototype = { WebInspector.ProfilesPanel.prototype.__proto__ = WebInspector.Panel.prototype; + +WebInspector.ProfilerDispatcher = function(profiler) +{ + this._profiler = profiler; +} + +WebInspector.ProfilerDispatcher.prototype = { + profilerWasEnabled: function() + { + this._profiler._profilerWasEnabled(); + }, + + profilerWasDisabled: function() + { + this._profiler._profilerWasDisabled(); + }, + + resetProfiles: function() + { + this._profiler._reset(); + }, + + addProfileHeader: function(profile) + { + this._profiler._addProfileHeader(profile); + }, + + addHeapSnapshotChunk: function(uid, chunk) + { + this._profiler._addHeapSnapshotChunk(uid, chunk); + }, + + finishHeapSnapshot: function(uid) + { + this._profiler._finishHeapSnapshot(uid); + }, + + setRecordingProfile: function(isProfiling) + { + this._profiler._setRecordingProfile(isProfiling); + } +} + WebInspector.ProfileSidebarTreeElement = function(profile, titleFormat, className) { this.profile = profile; @@ -660,7 +698,7 @@ WebInspector.ProfileSidebarTreeElement.prototype = { ondelete: function() { - this.treeOutline.panel.removeProfileHeader(this.profile); + this.treeOutline.panel._removeProfileHeader(this.profile); return true; }, @@ -720,4 +758,3 @@ WebInspector.ProfileGroupSidebarTreeElement.prototype = { } WebInspector.ProfileGroupSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; - diff --git a/Source/WebCore/inspector/front-end/Resource.js b/Source/WebCore/inspector/front-end/Resource.js index 063ca43..7340645 100644 --- a/Source/WebCore/inspector/front-end/Resource.js +++ b/Source/WebCore/inspector/front-end/Resource.js @@ -55,7 +55,27 @@ WebInspector.Resource.Type = { toUIString: function(type) { - return WebInspector.UIString(WebInspector.Resource.Type.toString(type)); + switch (type) { + case this.Document: + return WebInspector.UIString("Document"); + case this.Stylesheet: + return WebInspector.UIString("Stylesheet"); + case this.Image: + return WebInspector.UIString("Image"); + case this.Font: + return WebInspector.UIString("Font"); + case this.Script: + return WebInspector.UIString("Script"); + case this.XHR: + return WebInspector.UIString("XHR"); + case this.Media: + return WebInspector.UIString("Media"); + case this.WebSocket: + return WebInspector.UIString("WebSocket"); + case this.Other: + default: + return WebInspector.UIString("Other"); + } }, // Returns locale-independent string identifier of resource type (primarily for use in extension API). @@ -658,7 +678,20 @@ WebInspector.Resource.prototype = { this._innerRequestContent(); }, - get contentURL() + populateImageSource: function(image) + { + function onResourceContent() + { + image.src = this._contentURL(); + } + + if (Preferences.useDataURLForResourceImageIcons) + this.requestContent(onResourceContent.bind(this)); + else + image.src = this.url; + }, + + _contentURL: function() { const maxDataUrlSize = 1024 * 1024; // If resource content is not available or won't fit a data URL, fall back to using original URL. diff --git a/Source/WebCore/inspector/front-end/ResourceCookiesView.js b/Source/WebCore/inspector/front-end/ResourceCookiesView.js index e419070..b60b1b6 100644 --- a/Source/WebCore/inspector/front-end/ResourceCookiesView.js +++ b/Source/WebCore/inspector/front-end/ResourceCookiesView.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009, 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -56,10 +56,12 @@ WebInspector.ResourceCookiesView.prototype = { if (this._emptyMsgElement) this._emptyMsgElement.parentElement.removeChild(this._emptyMsgElement); - this._cookiesTable = new WebInspector.CookiesTable(null, true, true); - this._cookiesTable.addCookiesFolder(WebInspector.UIString("Request Cookies"), this._resource.requestCookies); - this._cookiesTable.addCookiesFolder(WebInspector.UIString("Response Cookies"), this._resource.responseCookies); - this.element.appendChild(this._cookiesTable.element); + if (!this._cookiesTable) { + this._cookiesTable = new WebInspector.CookiesTable(null, true, true); + this._cookiesTable.addCookiesFolder(WebInspector.UIString("Request Cookies"), this._resource.requestCookies); + this._cookiesTable.addCookiesFolder(WebInspector.UIString("Response Cookies"), this._resource.responseCookies); + this.element.appendChild(this._cookiesTable.element); + } WebInspector.View.prototype.show.call(this, parentElement); this._cookiesTable.updateWidths(); diff --git a/Source/WebCore/inspector/front-end/ResourceTreeModel.js b/Source/WebCore/inspector/front-end/ResourceTreeModel.js index 7c7b86d..b114b94 100644 --- a/Source/WebCore/inspector/front-end/ResourceTreeModel.js +++ b/Source/WebCore/inspector/front-end/ResourceTreeModel.js @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2011 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -31,25 +31,18 @@ WebInspector.ResourceTreeModel = function() { - this._resourcesByURL = {}; - this._resourcesByFrameId = {}; - this._subframes = {}; - InspectorBackend.registerDomainDispatcher("Resources", this); - InspectorBackend.cachedResources(this._processCachedResources.bind(this)); -} - -WebInspector.ResourceTreeModel.createResource = function(identifier, url, loader, stackTrace) -{ - var resource = new WebInspector.Resource(identifier, url); - resource.loader = loader; - if (loader) - resource.documentURL = loader.url; - resource.stackTrace = stackTrace; - - return resource; + this.reloadCachedResources(); } WebInspector.ResourceTreeModel.prototype = { + reloadCachedResources: function() + { + this._resourcesByURL = {}; + this._resourcesByFrameId = {}; + this._subframes = {}; + InspectorBackend.cachedResources(this._processCachedResources.bind(this)); + }, + addOrUpdateFrame: function(frame) { var tmpResource = new WebInspector.Resource(null, frame.url); @@ -175,7 +168,7 @@ WebInspector.ResourceTreeModel.prototype = { preservedResourcesForFrame.push(resource); continue; } - this._unbindResourceURL(resource); + this.unbindResourceURL(resource); } delete this._resourcesByFrameId[frameId]; @@ -201,7 +194,7 @@ WebInspector.ResourceTreeModel.prototype = { return false; }, - _unbindResourceURL: function(resource) + unbindResourceURL: function(resource) { var resourceForURL = this._resourcesByURL[resource.url]; if (!resourceForURL) @@ -226,13 +219,12 @@ WebInspector.ResourceTreeModel.prototype = { _addFramesRecursively: function(framePayload) { - var frameResource = WebInspector.ResourceTreeModel.createResource(null, framePayload.resource.url, framePayload.resource.loader); + var frameResource = this.createResource(null, framePayload.resource.url, framePayload.resource.loader); WebInspector.NetworkManager.updateResourceWithRequest(frameResource, framePayload.resource.request); WebInspector.NetworkManager.updateResourceWithResponse(frameResource, framePayload.resource.response); frameResource.type = WebInspector.Resource.Type["Document"]; frameResource.finished = true; - this.bindResourceURL(frameResource); this.addOrUpdateFrame(framePayload); this.addResourceToFrame(framePayload.id, frameResource); @@ -244,12 +236,24 @@ WebInspector.ResourceTreeModel.prototype = { for (var i = 0; i < framePayload.subresources.length; ++i) { var cachedResource = framePayload.subresources[i]; - var resource = WebInspector.ResourceTreeModel.createResource(null, cachedResource.url, cachedResource.loader); + var resource = this.createResource(null, cachedResource.url, cachedResource.loader); WebInspector.NetworkManager.updateResourceWithCachedResource(resource, cachedResource); resource.finished = true; - this.bindResourceURL(resource); this.addResourceToFrame(framePayload.id, resource); } return frameResource; + }, + + createResource: function(identifier, url, loader, stackTrace) + { + var resource = new WebInspector.Resource(identifier, url); + resource.loader = loader; + if (loader) { + resource.documentURL = loader.url; + this.bindResourceURL(resource); + } + resource.stackTrace = stackTrace; + + return resource; } } diff --git a/Source/WebCore/inspector/front-end/ResourcesPanel.js b/Source/WebCore/inspector/front-end/ResourcesPanel.js index ecb826f..d96989b 100644 --- a/Source/WebCore/inspector/front-end/ResourcesPanel.js +++ b/Source/WebCore/inspector/front-end/ResourcesPanel.js @@ -165,6 +165,12 @@ WebInspector.ResourcesPanel.prototype = { this.sidebarTree.selectedTreeElement.deselect(); }, + clear: function() + { + this.resourcesListTreeElement.removeChildren(); + this.reset(); + }, + addOrUpdateFrame: function(parentFrameId, frameId, title, subtitle) { var frameTreeElement = this._treeElementForFrameId[frameId]; @@ -1005,7 +1011,7 @@ WebInspector.FrameResourceTreeElement.prototype = { if (this._resource.category === WebInspector.resourceCategories.images) { var previewImage = document.createElement("img"); previewImage.className = "image-resource-icon-preview"; - previewImage.src = this._resource.url; + this._resource.populateImageSource(previewImage); var iconElement = document.createElement("div"); iconElement.className = "icon"; @@ -1227,7 +1233,7 @@ WebInspector.ApplicationCacheTreeElement.prototype.__proto__ = WebInspector.Base WebInspector.ResourceRevisionTreeElement = function(storagePanel, revision) { - var title = revision.timestamp ? revision.timestamp.toLocaleTimeString() : "(original)"; + var title = revision.timestamp ? revision.timestamp.toLocaleTimeString() : WebInspector.UIString("(original)"); WebInspector.BaseStorageTreeElement.call(this, storagePanel, null, title, "resource-sidebar-tree-item resources-category-" + revision.category.name); if (revision.timestamp) this.tooltip = revision.timestamp.toLocaleString(); diff --git a/Source/WebCore/inspector/front-end/Script.js b/Source/WebCore/inspector/front-end/Script.js index 184fe97..89b2121 100644 --- a/Source/WebCore/inspector/front-end/Script.js +++ b/Source/WebCore/inspector/front-end/Script.js @@ -23,12 +23,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -WebInspector.Script = function(sourceID, sourceURL, source, startingLine, errorLine, errorMessage, worldType) +WebInspector.Script = function(sourceID, sourceURL, source, lineOffset, columnOffset, errorLine, errorMessage, worldType) { this.sourceID = sourceID; this.sourceURL = sourceURL; this._source = source; - this.startingLine = startingLine; + this.lineOffset = lineOffset; + this.columnOffset = columnOffset; this.errorLine = errorLine; this.errorMessage = errorMessage; this.worldType = worldType; @@ -57,24 +58,40 @@ WebInspector.Script.WorldType = { EXTENSIONS_WORLD: 1 } -WebInspector.Script.Events = { - SourceChanged: "source-changed" -} - WebInspector.Script.prototype = { + get startingLine() + { + return this.lineOffset + 1; + }, + get linesCount() { if (!this.source) return 0; - if (this._linesCount) - return this._linesCount; - this._linesCount = 0; - var lastIndex = this.source.indexOf("\n"); - while (lastIndex !== -1) { - lastIndex = this.source.indexOf("\n", lastIndex + 1) - this._linesCount++; + if (!this._lineEndings) + this._lineEndings = this._source.findAll("\n"); + return this._lineEndings.length + 1; + }, + + sourceLine: function(lineNumber, callback) + { + function extractSourceLine() + { + lineNumber -= this.startingLine; + callback(this._source.substring(this._lineEndings[lineNumber - 1], this._lineEndings[lineNumber])); + } + + if (this._lineEndings) { + extractSourceLine.call(this); + return; } - return this._linesCount; + + function didRequestSource() + { + this._lineEndings = this._source.findAll("\n"); + extractSourceLine.call(this); + } + this.requestSource(didRequestSource.bind(this)); }, get source() @@ -85,8 +102,20 @@ WebInspector.Script.prototype = { set source(source) { this._source = source; - this.dispatchEventToListeners(WebInspector.Script.Events.SourceChanged); + }, + + requestSource: function(callback) + { + if (this._source) { + callback(this._source); + return; + } + + function didGetScriptSource(source) + { + this._source = source; + callback(this._source); + } + InspectorBackend.getScriptSource(this.sourceID, didGetScriptSource.bind(this)); } } - -WebInspector.Script.prototype.__proto__ = WebInspector.Object.prototype; diff --git a/Source/WebCore/inspector/front-end/ScriptView.js b/Source/WebCore/inspector/front-end/ScriptView.js index 39dae55..d6c1c59 100644 --- a/Source/WebCore/inspector/front-end/ScriptView.js +++ b/Source/WebCore/inspector/front-end/ScriptView.js @@ -29,70 +29,15 @@ WebInspector.ScriptView = function(script) this.element.addStyleClass("script-view"); - this.script = script; - this.script.addEventListener(WebInspector.Script.Events.SourceChanged, this._scriptSourceChanged, this); - - this._frameNeedsSetup = true; - this._sourceFrameSetup = false; - this.sourceFrame = new WebInspector.SourceFrame(this.element, [script], WebInspector.panels.scripts.canEditScripts()); + var contentProvider = new WebInspector.SourceFrameContentProviderForScript(script); + this.sourceFrame = new WebInspector.SourceFrame(this.element, contentProvider, "", WebInspector.panels.scripts.canEditScripts()); } WebInspector.ScriptView.prototype = { - show: function(parentElement) - { - WebInspector.View.prototype.show.call(this, parentElement); - this.setupSourceFrameIfNeeded(); - this.sourceFrame.visible = true; - this.resize(); - }, - - setupSourceFrameIfNeeded: function() - { - if (!this._frameNeedsSetup) - return; - delete this._frameNeedsSetup; - - this.attach(); - - if (this.script.source) - this._sourceFrameSetupFinished(); - else - InspectorBackend.getScriptSource(this.script.sourceID, this._didGetScriptSource.bind(this)); - }, - - _didGetScriptSource: function(source) - { - this.script.source = source || WebInspector.UIString("<source is not available>"); - this._sourceFrameSetupFinished(); - }, - - _sourceFrameSetupFinished: function() - { - this.sourceFrame.setContent("text/javascript", this._prependWhitespace(this.script.source)); - this._sourceFrameSetup = true; - }, - - _prependWhitespace: function(content) { - var prefix = ""; - for (var i = 0; i < this.script.startingLine - 1; ++i) - prefix += "\n"; - return prefix + content; - }, - - attach: function() - { - if (!this.element.parentNode) - document.getElementById("script-resource-views").appendChild(this.element); - }, - - _scriptSourceChanged: function(event) - { - this.sourceFrame.updateContent(this._prependWhitespace(this.script.source)); - }, - // The following methods are pulled from SourceView, since they are // generic and work with ScriptView just fine. + show: WebInspector.SourceView.prototype.show, hide: WebInspector.SourceView.prototype.hide, revealLine: WebInspector.SourceView.prototype.revealLine, highlightLine: WebInspector.SourceView.prototype.highlightLine, @@ -111,3 +56,41 @@ WebInspector.ScriptView.prototype = { } WebInspector.ScriptView.prototype.__proto__ = WebInspector.View.prototype; + + +WebInspector.SourceFrameContentProviderForScript = function(script) +{ + WebInspector.SourceFrameContentProvider.call(this); + this._script = script; +} + +WebInspector.SourceFrameContentProviderForScript.prototype = { + requestContent: function(callback) + { + if (this._script.source) { + callback("text/javascript", this._script.source); + return; + } + + function didRequestSource(content) + { + var source; + if (content) { + var prefix = ""; + for (var i = 0; i < this._script.startingLine - 1; ++i) + prefix += "\n"; + source = prefix + content; + } else + source = WebInspector.UIString("<source is not available>"); + callback("text/javascript", source); + } + this._script.requestSource(didRequestSource.bind(this)); + }, + + scripts: function() + { + return [this._script]; + } +} + +WebInspector.SourceFrameContentProviderForScript.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype; diff --git a/Source/WebCore/inspector/front-end/ScriptsPanel.js b/Source/WebCore/inspector/front-end/ScriptsPanel.js index 138bbda..32212d4 100644 --- a/Source/WebCore/inspector/front-end/ScriptsPanel.js +++ b/Source/WebCore/inspector/front-end/ScriptsPanel.js @@ -218,11 +218,6 @@ WebInspector.ScriptsPanel.prototype = { if (this.visibleView) this.visibleView.show(this.viewsContainerElement); - - if (this._attachDebuggerWhenShown) { - InspectorBackend.enableDebuggerFromFrontend(false); - delete this._attachDebuggerWhenShown; - } }, hide: function() @@ -256,9 +251,6 @@ WebInspector.ScriptsPanel.prototype = { if (resource.finished) { // Resource is finished, bind the script right away. script.resource = resource; - var view = WebInspector.ResourceView.existingResourceViewForResource(resource); - if (view && view.sourceFrame) - view.sourceFrame.addScript(script); } else { // Resource is not finished, bind the script later. if (!resource._scriptsPendingResourceLoad) { @@ -292,7 +284,7 @@ WebInspector.ScriptsPanel.prototype = { return Preferences.canEditScriptSource; }, - editScriptSource: function(editData, commitEditingCallback, cancelEditingCallback) + editScriptSource: function(editData, revertEditingCallback, cancelEditingCallback) { if (!this.canEditScripts()) return; @@ -305,7 +297,16 @@ WebInspector.ScriptsPanel.prototype = { function mycallback(success, newBodyOrErrorMessage, callFrames) { if (success) { - commitEditingCallback(newBodyOrErrorMessage); + var script = WebInspector.debuggerModel.scriptForSourceID(editData.sourceID); + script.source = newBodyOrErrorMessage; + var oldView = script._scriptView + if (oldView) { + script._scriptView = new WebInspector.ScriptView(script); + this.viewRecreated(oldView, script._scriptView); + } + if (script.resource) + script.resource.setContent(newBodyOrErrorMessage, revertEditingCallback); + if (callFrames && callFrames.length) this._debuggerPaused({ data: { callFrames: callFrames } }); } else { @@ -389,15 +390,6 @@ WebInspector.ScriptsPanel.prototype = { this._clearInterface(); }, - attachDebuggerWhenShown: function() - { - if (this.element.parentElement) { - InspectorBackend.enableDebuggerFromFrontend(false); - } else { - this._attachDebuggerWhenShown = true; - } - }, - debuggerWasEnabled: function() { if (this._debuggerEnabled) @@ -460,8 +452,8 @@ WebInspector.ScriptsPanel.prototype = { viewRecreated: function(oldView, newView) { - if (this._visibleView === oldView) - this._visibleView = newView; + if (this.visibleView === oldView) + this.visibleView = newView; }, canShowSourceLine: function(url, line) @@ -527,7 +519,6 @@ WebInspector.ScriptsPanel.prototype = { if (!this.element.parentNode) this.attach(); - view.setupSourceFrameIfNeeded(); return view.sourceFrame; }, @@ -545,10 +536,6 @@ WebInspector.ScriptsPanel.prototype = { if (!view) return null; - if (!view.setupSourceFrameIfNeeded) - return null; - - view.setupSourceFrameIfNeeded(); return view.sourceFrame; }, @@ -862,7 +849,7 @@ WebInspector.ScriptsPanel.prototype = { if (this._debuggerEnabled) InspectorBackend.disableDebugger(true); else - InspectorBackend.enableDebuggerFromFrontend(!!optionalAlways); + InspectorBackend.enableDebugger(!!optionalAlways); }, _togglePauseOnExceptions: function() @@ -892,7 +879,7 @@ WebInspector.ScriptsPanel.prototype = { this._clearInterface(); - InspectorBackend.stepOverStatement(); + InspectorBackend.stepOver(); }, _stepIntoClicked: function() @@ -902,7 +889,7 @@ WebInspector.ScriptsPanel.prototype = { this._clearInterface(); - InspectorBackend.stepIntoStatement(); + InspectorBackend.stepInto(); }, _stepOutClicked: function() @@ -912,7 +899,7 @@ WebInspector.ScriptsPanel.prototype = { this._clearInterface(); - InspectorBackend.stepOutOfFunction(); + InspectorBackend.stepOut(); }, toggleBreakpointsClicked: function() diff --git a/Source/WebCore/inspector/front-end/SourceFrame.js b/Source/WebCore/inspector/front-end/SourceFrame.js index fa8441d..af10f1e 100644 --- a/Source/WebCore/inspector/front-end/SourceFrame.js +++ b/Source/WebCore/inspector/front-end/SourceFrame.js @@ -28,12 +28,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -WebInspector.SourceFrame = function(parentElement, scripts, canEditScripts) +WebInspector.SourceFrame = function(parentElement, contentProvider, url, canEditScripts) { this._parentElement = parentElement; - this._scripts = {}; - for (var i = 0; i < scripts.length; ++i) - this._scripts[scripts[i].sourceID] = scripts[i]; + this._contentProvider = contentProvider; + this._url = url; this._canEditScripts = canEditScripts; this._textModel = new WebInspector.TextEditorModel(); @@ -43,7 +42,6 @@ WebInspector.SourceFrame = function(parentElement, scripts, canEditScripts) this._rowMessages = {}; this._messageBubbles = {}; - this._loaded = false; this._popoverObjectGroup = "popover"; } @@ -51,14 +49,18 @@ WebInspector.SourceFrame.prototype = { set visible(visible) { - this._visible = visible; - this._createViewerIfNeeded(); + if (!this._contentRequested) { + this._contentRequested = true; + this._contentProvider.requestContent(this._createTextViewer.bind(this)); + } if (visible) { if (this._textViewer && this._scrollTop) this._textViewer.element.scrollTop = this._scrollTop; if (this._textViewer && this._scrollLeft) this._textViewer.element.scrollLeft = this._scrollLeft; + if (this._textViewer) + this._textViewer.resize(); } else { this._hidePopup(); if (this._textViewer) { @@ -114,11 +116,6 @@ WebInspector.SourceFrame.prototype = { this._addMessageToSource(msg); }, - addScript: function(script) - { - this._scripts[script.sourceID] = script; - }, - clearMessages: function() { for (var line in this._messageBubbles) { @@ -139,20 +136,6 @@ WebInspector.SourceFrame.prototype = { this._textViewer.revalidateDecorationsAndPaint(); }, - setContent: function(mimeType, content, url) - { - this._loaded = true; - this._textModel.setText(null, content); - this._mimeType = mimeType; - this._url = url; - this._createViewerIfNeeded(); - }, - - updateContent: function(content) - { - this._textModel.setText(null, content); - }, - get textModel() { return this._textModel; @@ -185,10 +168,10 @@ WebInspector.SourceFrame.prototype = { delete this._lineToHighlight; }, - _createViewerIfNeeded: function() + _createTextViewer: function(mimeType, content) { - if (!this._visible || !this._loaded || this._textViewer) - return; + this._content = content; + this._textModel.setText(null, content); this._textViewer = new WebInspector.TextViewer(this._textModel, WebInspector.platform, this._url); var element = this._textViewer.element; @@ -200,7 +183,7 @@ WebInspector.SourceFrame.prototype = { this._textViewer.beginUpdates(); - this._textViewer.mimeType = this._mimeType; + this._textViewer.mimeType = mimeType; this._addExistingMessagesToSource(); this._updateExecutionLine(); this._updateDiffDecorations(); @@ -222,6 +205,11 @@ WebInspector.SourceFrame.prototype = { delete this._lineToHighlight; } + if (this._delayedFindSearchMatches) { + this._delayedFindSearchMatches(); + delete this._delayedFindSearchMatches; + } + var breakpoints = this._breakpoints(); for (var i = 0; i < breakpoints.length; ++i) this._addBreakpoint(breakpoints[i]); @@ -233,22 +221,35 @@ WebInspector.SourceFrame.prototype = { this._textViewer.editCallback = this._editLine.bind(this); }, - findSearchMatches: function(query) + findSearchMatches: function(query, finishedCallback) { - var ranges = []; + function doFindSearchMatches() + { + var ranges = []; + + // First do case-insensitive search. + var regexObject = createSearchRegex(query); + this._collectRegexMatches(regexObject, ranges); + + // Then try regex search if user knows the / / hint. + try { + if (/^\/.*\/$/.test(query)) + this._collectRegexMatches(new RegExp(query.substring(1, query.length - 1)), ranges); + } catch (e) { + // Silent catch. + } + finishedCallback(ranges); + } - // First do case-insensitive search. - var regexObject = createSearchRegex(query); - this._collectRegexMatches(regexObject, ranges); + if (this._textViewer) + doFindSearchMatches.call(this); + else + this._delayedFindSearchMatches = doFindSearchMatches.bind(this); + }, - // Then try regex search if user knows the / / hint. - try { - if (/^\/.*\/$/.test(query)) - this._collectRegexMatches(new RegExp(query.substring(1, query.length - 1)), ranges); - } catch (e) { - // Silent catch. - } - return ranges; + cancelFindSearchMatches: function() + { + delete this._delayedFindSearchMatches; }, _collectRegexMatches: function(regexObject, ranges) @@ -405,7 +406,7 @@ WebInspector.SourceFrame.prototype = { { var breakpoint = event.data; - if (breakpoint.sourceID in this._scripts) + if (breakpoint.sourceID in this._sourceIDSet()) this._addBreakpoint(breakpoint); }, @@ -418,7 +419,6 @@ WebInspector.SourceFrame.prototype = { breakpoint.addEventListener("condition-changed", this._breakpointChanged, this); breakpoint.addEventListener("removed", this._breakpointRemoved, this); - breakpoint.sourceText = this._textModel.line(breakpoint.line - 1); this._setBreakpointDecoration(breakpoint.line, breakpoint.enabled, !!breakpoint.condition); }, @@ -789,11 +789,12 @@ WebInspector.SourceFrame.prototype = { lineNumber += 1; var lines = []; - for (var i = 0; i < this._textModel.linesCount; ++i) { + var oldLines = this._content.split('\n'); + for (var i = 0; i < oldLines.length; ++i) { if (i === lineNumber - 1) lines.push(newContent); else - lines.push(this._textModel.line(i)); + lines.push(oldLines[i]); } var editData = {}; @@ -817,16 +818,7 @@ WebInspector.SourceFrame.prototype = { _doEditLine: function(editData, cancelEditingCallback) { var revertEditingCallback = this._revertEditLine.bind(this, editData); - var commitEditingCallback = this._commitEditLine.bind(this, editData, revertEditingCallback); - WebInspector.panels.scripts.editScriptSource(editData, commitEditingCallback, cancelEditingCallback); - }, - - _commitEditLine: function(editData, revertEditLineCallback, newContent) - { - var script = this._scripts[editData.sourceID]; - script.source = newContent; - if (script.resource) - script.resource.setContent(newContent, revertEditLineCallback); + WebInspector.panels.scripts.editScriptSource(editData, revertEditingCallback, cancelEditingCallback); }, _setBreakpoint: function(lineNumber, enabled, condition) @@ -841,8 +833,8 @@ WebInspector.SourceFrame.prototype = { _breakpoints: function() { - var scripts = this._scripts; - return WebInspector.debuggerModel.queryBreakpoints(function(b) { return b.sourceID in scripts; }); + var sourceIDSet = this._sourceIDSet(); + return WebInspector.debuggerModel.queryBreakpoints(function(b) { return b.sourceID in sourceIDSet; }); }, _findBreakpoint: function(lineNumber) @@ -855,15 +847,42 @@ WebInspector.SourceFrame.prototype = { { var sourceIDForLine = null; var closestStartingLine = 0; - for (var sourceID in this._scripts) { - var script = this._scripts[sourceID]; - if (script.startingLine <= lineNumber && script.startingLine >= closestStartingLine) { - closestStartingLine = script.startingLine; - sourceIDForLine = sourceID; + var scripts = this._contentProvider.scripts(); + for (var i = 0; i < scripts.length; ++i) { + var startingLine = scripts[i].startingLine; + if (startingLine <= lineNumber && startingLine >= closestStartingLine) { + closestStartingLine = startingLine; + sourceIDForLine = scripts[i].sourceID; } } return sourceIDForLine; + }, + + _sourceIDSet: function() + { + var scripts = this._contentProvider.scripts(); + var sourceIDSet = {}; + for (var i = 0; i < scripts.length; ++i) + sourceIDSet[scripts[i].sourceID] = true; + return sourceIDSet; } } WebInspector.SourceFrame.prototype.__proto__ = WebInspector.Object.prototype; + + +WebInspector.SourceFrameContentProvider = function() +{ +} + +WebInspector.SourceFrameContentProvider.prototype = { + requestContent: function(callback) + { + // Should be implemented by subclasses. + }, + + scripts: function() + { + // Should be implemented by subclasses. + } +} diff --git a/Source/WebCore/inspector/front-end/SourceView.js b/Source/WebCore/inspector/front-end/SourceView.js index 7a97db2..e78ff94 100644 --- a/Source/WebCore/inspector/front-end/SourceView.js +++ b/Source/WebCore/inspector/front-end/SourceView.js @@ -32,43 +32,29 @@ WebInspector.SourceView = function(resource) this.element.addStyleClass("source"); - var scripts = WebInspector.debuggerModel.scriptsForURL(resource.url); + var contentProvider = new WebInspector.SourceFrameContentProviderForResource(resource); var canEditScripts = WebInspector.panels.scripts.canEditScripts() && resource.type === WebInspector.Resource.Type.Script; - this.sourceFrame = new WebInspector.SourceFrame(this.element, scripts, canEditScripts); - resource.addEventListener("finished", this._resourceLoadingFinished, this); - this._frameNeedsSetup = true; -} - -// This is a map from resource.type to mime types -// found in WebInspector.SourceTokenizer.Registry. -WebInspector.SourceView.DefaultMIMETypeForResourceType = { - 0: "text/html", - 1: "text/css", - 4: "text/javascript" + this.sourceFrame = new WebInspector.SourceFrame(this.element, contentProvider, resource.url, canEditScripts); } WebInspector.SourceView.prototype = { show: function(parentElement) { - WebInspector.ResourceView.prototype.show.call(this, parentElement); - this.setupSourceFrameIfNeeded(); + WebInspector.View.prototype.show.call(this, parentElement); this.sourceFrame.visible = true; - this.resize(); }, hide: function() { this.sourceFrame.visible = false; - if (!this._frameNeedsSetup) - this.sourceFrame.clearLineHighlight(); + this.sourceFrame.clearLineHighlight(); WebInspector.View.prototype.hide.call(this); this._currentSearchResultIndex = -1; }, resize: function() { - if (this.sourceFrame) - this.sourceFrame.resize(); + this.sourceFrame.resize(); }, get scrollTop() @@ -81,42 +67,11 @@ WebInspector.SourceView.prototype = { this.sourceFrame.scrollTop = scrollTop; }, - - setupSourceFrameIfNeeded: function() - { - if (!this._frameNeedsSetup) - return; - - delete this._frameNeedsSetup; - this.resource.requestContent(this._contentLoaded.bind(this)); - }, - hasContent: function() { return true; }, - _contentLoaded: function(content) - { - var mimeType = this._canonicalMimeType(this.resource); - this.sourceFrame.setContent(mimeType, content, this.resource.url); - this._sourceFrameSetupFinished(); - }, - - _canonicalMimeType: function(resource) - { - return WebInspector.SourceView.DefaultMIMETypeForResourceType[resource.type] || resource.mimeType; - }, - - _resourceLoadingFinished: function(event) - { - this._frameNeedsSetup = true; - this._sourceFrameSetup = false; - if (this.visible) - this.setupSourceFrameIfNeeded(); - this.resource.removeEventListener("finished", this._resourceLoadingFinished, this); - }, - // The rest of the methods in this prototype need to be generic enough to work with a ScriptView. // The ScriptView prototype pulls these methods into it's prototype to avoid duplicate code. @@ -125,7 +80,7 @@ WebInspector.SourceView.prototype = { this._currentSearchResultIndex = -1; this._searchResults = []; this.sourceFrame.clearMarkedRange(); - delete this._delayedFindSearchMatches; + this.sourceFrame.cancelFindSearchMatches(); }, performSearch: function(query, finishedCallback) @@ -133,23 +88,13 @@ WebInspector.SourceView.prototype = { // Call searchCanceled since it will reset everything we need before doing a new search. this.searchCanceled(); - this._searchFinishedCallback = finishedCallback; - - function findSearchMatches(query, finishedCallback) + function didFindSearchMatches(searchResults) { - this._searchResults = this.sourceFrame.findSearchMatches(query); + this._searchResults = searchResults; if (this._searchResults) finishedCallback(this, this._searchResults.length); } - - if (!this._sourceFrameSetup) { - // The search is performed in _sourceFrameSetupFinished by calling _delayedFindSearchMatches. - this._delayedFindSearchMatches = findSearchMatches.bind(this, query, finishedCallback); - this.setupSourceFrameIfNeeded(); - return; - } - - findSearchMatches.call(this, query, finishedCallback); + this.sourceFrame.findSearchMatches(query, didFindSearchMatches.bind(this)); }, jumpToFirstSearchResult: function() @@ -198,13 +143,11 @@ WebInspector.SourceView.prototype = { revealLine: function(lineNumber) { - this.setupSourceFrameIfNeeded(); this.sourceFrame.revealLine(lineNumber); }, highlightLine: function(lineNumber) { - this.setupSourceFrameIfNeeded(); this.sourceFrame.highlightLine(lineNumber); }, @@ -225,17 +168,41 @@ WebInspector.SourceView.prototype = { return; this.sourceFrame.markAndRevealRange(foundRange); - }, + } +} + +WebInspector.SourceView.prototype.__proto__ = WebInspector.ResourceView.prototype; - _sourceFrameSetupFinished: function() + +WebInspector.SourceFrameContentProviderForResource = function(resource) +{ + WebInspector.SourceFrameContentProvider.call(this); + this._resource = resource; +} + +//This is a map from resource.type to mime types +//found in WebInspector.SourceTokenizer.Registry. +WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType = { + 0: "text/html", + 1: "text/css", + 4: "text/javascript" +} + +WebInspector.SourceFrameContentProviderForResource.prototype = { + requestContent: function(callback) { - this._sourceFrameSetup = true; - this.resize(); - if (this._delayedFindSearchMatches) { - this._delayedFindSearchMatches(); - delete this._delayedFindSearchMatches; + function contentLoaded(content) + { + var mimeType = WebInspector.SourceFrameContentProviderForResource.DefaultMIMETypeForResourceType[this._resource.type] || this._resource.mimeType; + callback(mimeType, content); } + this._resource.requestContent(contentLoaded.bind(this)); + }, + + scripts: function() + { + return WebInspector.debuggerModel.scriptsForURL(this._resource.url); } } -WebInspector.SourceView.prototype.__proto__ = WebInspector.ResourceView.prototype; +WebInspector.SourceFrameContentProviderForResource.prototype.__proto__ = WebInspector.SourceFrameContentProvider.prototype; diff --git a/Source/WebCore/inspector/front-end/TimelineOverviewPane.js b/Source/WebCore/inspector/front-end/TimelineOverviewPane.js index 55e24c5..0dac916 100644 --- a/Source/WebCore/inspector/front-end/TimelineOverviewPane.js +++ b/Source/WebCore/inspector/front-end/TimelineOverviewPane.js @@ -398,7 +398,7 @@ WebInspector.TimelineOverviewCalculator.prototype = { formatValue: function(value) { - return Number.secondsToString(value, WebInspector.UIString); + return Number.secondsToString(value); } } diff --git a/Source/WebCore/inspector/front-end/TimelinePanel.js b/Source/WebCore/inspector/front-end/TimelinePanel.js index a661b75..1d8b9c9 100644 --- a/Source/WebCore/inspector/front-end/TimelinePanel.js +++ b/Source/WebCore/inspector/front-end/TimelinePanel.js @@ -83,7 +83,7 @@ WebInspector.TimelinePanel = function() this._calculator = new WebInspector.TimelineCalculator(); this._calculator._showShortEvents = false; - var shortRecordThresholdTitle = Number.secondsToString(WebInspector.TimelinePanel.shortRecordThreshold, WebInspector.UIString); + var shortRecordThresholdTitle = Number.secondsToString(WebInspector.TimelinePanel.shortRecordThreshold); this._showShortRecordsTitleText = WebInspector.UIString("Show the records that are shorter than %s", shortRecordThresholdTitle); this._hideShortRecordsTitleText = WebInspector.UIString("Hide the records that are shorter than %s", shortRecordThresholdTitle); this._createStatusbarButtons(); @@ -99,7 +99,7 @@ WebInspector.TimelinePanel = function() this._markTimelineRecords = []; this._expandOffset = 15; - InspectorBackend.registerDomainDispatcher("Timeline", this); + InspectorBackend.registerDomainDispatcher("Timeline", new WebInspector.TimelineDispatcher(this)); } // Define row height, should be in sync with styles for timeline graphs. @@ -285,20 +285,21 @@ WebInspector.TimelinePanel.prototype = { this._scheduleRefresh(true); }, - timelineProfilerWasStarted: function() + _timelineProfilerWasStarted: function() { this.toggleTimelineButton.toggled = true; }, - timelineProfilerWasStopped: function() + _timelineProfilerWasStopped: function() { this.toggleTimelineButton.toggled = false; }, - addRecordToTimeline: function(record) + _addRecordToTimeline: function(record) { - if (record.type == WebInspector.TimelineAgent.RecordType.ResourceSendRequest && record.data.isMainResource) { - if (this._mainResourceIdentifier != record.data.identifier) { + if (record.type == WebInspector.TimelineAgent.RecordType.ResourceSendRequest) { + var isMainResource = (record.data.identifier === WebInspector.mainResource.identifier); + if (isMainResource && this._mainResourceIdentifier !== record.data.identifier) { // We are loading new main resource -> clear the panel. Check above is necessary since // there may be several resource loads with main resource marker upon redirects, redirects are reported with // the original identifier. @@ -642,6 +643,28 @@ WebInspector.TimelinePanel.prototype = { WebInspector.TimelinePanel.prototype.__proto__ = WebInspector.Panel.prototype; +WebInspector.TimelineDispatcher = function(timelinePanel) +{ + this._timelinePanel = timelinePanel; +} + +WebInspector.TimelineDispatcher.prototype = { + timelineProfilerWasStarted: function() + { + this._timelinePanel._timelineProfilerWasStarted(); + }, + + timelineProfilerWasStopped: function() + { + this._timelinePanel._timelineProfilerWasStopped(); + }, + + addRecordToTimeline: function(record) + { + this._timelinePanel._addRecordToTimeline(record); + } +} + WebInspector.TimelineCategory = function(name, title, color) { this.name = name; @@ -709,7 +732,7 @@ WebInspector.TimelineCalculator.prototype = { formatValue: function(value) { - return Number.secondsToString(value + this.minimumBoundary - this._absoluteMinimumBoundary, WebInspector.UIString); + return Number.secondsToString(value + this.minimumBoundary - this._absoluteMinimumBoundary); } } @@ -907,7 +930,7 @@ WebInspector.TimelinePanel.FormattedRecord.prototype = { label.className = "timeline-aggregated-category timeline-" + index; cell.appendChild(label); var text = document.createElement("span"); - text.textContent = Number.secondsToString(this._aggregatedStats[index] + 0.0001, WebInspector.UIString); + text.textContent = Number.secondsToString(this._aggregatedStats[index] + 0.0001); cell.appendChild(text); } return cell; @@ -918,10 +941,10 @@ WebInspector.TimelinePanel.FormattedRecord.prototype = { var contentHelper = new WebInspector.TimelinePanel.PopupContentHelper(this.title); if (this._children && this._children.length) { - contentHelper._appendTextRow(WebInspector.UIString("Self Time"), Number.secondsToString(this._selfTime + 0.0001, WebInspector.UIString)); + contentHelper._appendTextRow(WebInspector.UIString("Self Time"), Number.secondsToString(this._selfTime + 0.0001)); contentHelper._appendElementRow(WebInspector.UIString("Aggregated Time"), this._generateAggregatedInfo()); } - var text = WebInspector.UIString("%s (at %s)", Number.secondsToString(this._lastChildEndTime - this.startTime, WebInspector.UIString), + var text = WebInspector.UIString("%s (at %s)", Number.secondsToString(this._lastChildEndTime - this.startTime), calculator.formatValue(this.startTime - calculator.minimumBoundary)); contentHelper._appendTextRow(WebInspector.UIString("Duration"), text); @@ -929,14 +952,14 @@ WebInspector.TimelinePanel.FormattedRecord.prototype = { switch (this.type) { case recordTypes.GCEvent: - contentHelper._appendTextRow(WebInspector.UIString("Collected"), Number.bytesToString(this.data.usedHeapSizeDelta, WebInspector.UIString)); + contentHelper._appendTextRow(WebInspector.UIString("Collected"), Number.bytesToString(this.data.usedHeapSizeDelta)); break; case recordTypes.TimerInstall: case recordTypes.TimerFire: case recordTypes.TimerRemove: contentHelper._appendTextRow(WebInspector.UIString("Timer ID"), this.data.timerId); if (typeof this.timeout === "number") { - contentHelper._appendTextRow(WebInspector.UIString("Timeout"), Number.secondsToString(this.timeout / 1000, WebInspector.UIString)); + contentHelper._appendTextRow(WebInspector.UIString("Timeout"), Number.secondsToString(this.timeout / 1000)); contentHelper._appendTextRow(WebInspector.UIString("Repeats"), !this.singleShot); } break; @@ -977,7 +1000,7 @@ WebInspector.TimelinePanel.FormattedRecord.prototype = { contentHelper._appendLinkRow(WebInspector.UIString("Function Call"), this.data.scriptName, this.data.scriptLine); if (this.usedHeapSize) - contentHelper._appendTextRow(WebInspector.UIString("Used Heap Size"), WebInspector.UIString("%s of %s", Number.bytesToString(this.usedHeapSize, WebInspector.UIString), Number.bytesToString(this.totalHeapSize, WebInspector.UIString))); + contentHelper._appendTextRow(WebInspector.UIString("Used Heap Size"), WebInspector.UIString("%s of %s", Number.bytesToString(this.usedHeapSize), Number.bytesToString(this.totalHeapSize))); if (this.callSiteStackTrace && this.callSiteStackTrace.length) contentHelper._appendStackTrace(WebInspector.UIString("Call Site stack"), this.callSiteStackTrace); @@ -992,7 +1015,7 @@ WebInspector.TimelinePanel.FormattedRecord.prototype = { { switch (record.type) { case WebInspector.TimelineAgent.RecordType.GCEvent: - return WebInspector.UIString("%s collected", Number.bytesToString(record.data.usedHeapSizeDelta, WebInspector.UIString)); + return WebInspector.UIString("%s collected", Number.bytesToString(record.data.usedHeapSizeDelta)); case WebInspector.TimelineAgent.RecordType.TimerFire: return record.data.scriptName ? WebInspector.linkifyResourceAsNode(record.data.scriptName, "scripts", record.data.scriptLine, "", "") : record.data.timerId; case WebInspector.TimelineAgent.RecordType.FunctionCall: diff --git a/Source/WebCore/inspector/front-end/WebKit.qrc b/Source/WebCore/inspector/front-end/WebKit.qrc index c1008ad..80a6533 100644 --- a/Source/WebCore/inspector/front-end/WebKit.qrc +++ b/Source/WebCore/inspector/front-end/WebKit.qrc @@ -51,7 +51,6 @@ <file>HelpScreen.js</file> <file>ImageView.js</file> <file>InjectedFakeWorker.js</file> - <file>InjectedScript.js</file> <file>InjectedScriptAccess.js</file> <file>inspector.js</file> <file>InspectorFrontendHostStub.js</file> diff --git a/Source/WebCore/inspector/front-end/inspector.html b/Source/WebCore/inspector/front-end/inspector.html index e1590f2..44f096f 100644 --- a/Source/WebCore/inspector/front-end/inspector.html +++ b/Source/WebCore/inspector/front-end/inspector.html @@ -142,7 +142,6 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. <script type="text/javascript" src="HeapSnapshotView.js"></script> <script type="text/javascript" src="DebuggerModel.js"></script> <script type="text/javascript" src="DOMAgent.js"></script> - <script type="text/javascript" src="InjectedScript.js"></script> <script type="text/javascript" src="InjectedScriptAccess.js"></script> <script type="text/javascript" src="TimelineAgent.js"></script> <script type="text/javascript" src="TimelinePanel.js"></script> diff --git a/Source/WebCore/inspector/front-end/inspector.js b/Source/WebCore/inspector/front-end/inspector.js index 33a75d7..d8a93b1 100644 --- a/Source/WebCore/inspector/front-end/inspector.js +++ b/Source/WebCore/inspector/front-end/inspector.js @@ -443,6 +443,11 @@ var WebInspector = { return this.panels.network.resources; }, + networkResourceById: function(id) + { + return this.panels.network.resourceById(id); + }, + forAllResources: function(callback) { WebInspector.resourceTreeModel.forAllResources(callback); @@ -492,7 +497,7 @@ WebInspector.loaded = function() WebInspector.doLoadedDone = function() { - InspectorBackend.setInjectedScriptSource("(" + injectedScriptConstructor + ");"); + InspectorFrontendHost.loaded(); var platform = WebInspector.platform; document.body.addStyleClass("platform-" + platform); @@ -502,7 +507,6 @@ WebInspector.doLoadedDone = function() var port = WebInspector.port; document.body.addStyleClass("port-" + port); - InspectorFrontendHost.loaded(); WebInspector.settings = new WebInspector.Settings(); this._registerShortcuts(); @@ -618,7 +622,6 @@ WebInspector.doLoadedDone = function() { WebInspector.cssNameCompletions = new WebInspector.CSSCompletions(names); } - // As a DOMAgent method, this needs to happen after the frontend has loaded and the agent is available. InspectorBackend.getSupportedCSSProperties(propertyNamesCallback); } @@ -1175,11 +1178,6 @@ WebInspector.showPanel = function(panel) this.currentPanel = this.panels[panel]; } -WebInspector.consoleMessagesCleared = function() -{ - WebInspector.console.clearMessages(); -} - WebInspector.domContentEventFired = function(time) { this.panels.audits.mainResourceDOMContentTime = time; @@ -1237,33 +1235,6 @@ WebInspector.inspectedURLChanged = function(url) this.extensionServer.notifyInspectedURLChanged(); } -WebInspector.updateConsoleMessageExpiredCount = function(count) -{ - var message = String.sprintf(WebInspector.UIString("%d console messages are not shown."), count); - WebInspector.console.addMessage(WebInspector.ConsoleMessage.createTextMessage(message, WebInspector.ConsoleMessage.MessageLevel.Warning)); -} - -WebInspector.addConsoleMessage = function(payload) -{ - var consoleMessage = new WebInspector.ConsoleMessage( - payload.source, - payload.type, - payload.level, - payload.line, - payload.url, - payload.repeatCount, - payload.message, - payload.parameters, - payload.stackTrace, - payload.requestId); - this.console.addMessage(consoleMessage); -} - -WebInspector.updateConsoleMessageRepeatCount = function(count) -{ - this.console.updateMessageRepeatCount(count); -} - WebInspector.log = function(message, messageLevel) { // remember 'this' for setInterval() callback @@ -1681,6 +1652,12 @@ WebInspector.doPerformSearch = function(query, forceSearch, isBackwardSearch, re this.currentPanel.performSearch(query); } +WebInspector.frontendReused = function() +{ + this.networkManager.reset(); + this.reset(); +} + WebInspector.addNodesToSearchResult = function(nodeIds) { WebInspector.panels.elements.addNodesToSearchResult(nodeIds); diff --git a/Source/WebCore/inspector/front-end/utilities.js b/Source/WebCore/inspector/front-end/utilities.js index 688e080..4320ba8 100644 --- a/Source/WebCore/inspector/front-end/utilities.js +++ b/Source/WebCore/inspector/front-end/utilities.js @@ -388,6 +388,17 @@ String.prototype.hasSubstring = function(string, caseInsensitive) return this.match(new RegExp(string.escapeForRegExp(), "i")); } +String.prototype.findAll = function(string) +{ + var matches = []; + var i = this.indexOf(string); + while (i !== -1) { + matches.push(i); + i = this.indexOf(string, i + string.length); + } + return matches; +} + String.prototype.asParsedURL = function() { // RegExp groups: @@ -643,61 +654,56 @@ function parentNode(node) return node.parentNode; } -Number.millisToString = function(ms, formatterFunction, higherResolution) +Number.millisToString = function(ms, higherResolution) { - return Number.secondsToString(ms / 1000, formatterFunction, higherResolution); + return Number.secondsToString(ms / 1000, higherResolution); } -Number.secondsToString = function(seconds, formatterFunction, higherResolution) +Number.secondsToString = function(seconds, higherResolution) { - if (!formatterFunction) - formatterFunction = String.sprintf; - if (seconds === 0) return "0"; var ms = seconds * 1000; if (higherResolution && ms < 1000) - return formatterFunction("%.3fms", ms); + return WebInspector.UIString("%.3fms", ms); else if (ms < 1000) - return formatterFunction("%.0fms", ms); + return WebInspector.UIString("%.0fms", ms); if (seconds < 60) - return formatterFunction("%.2fs", seconds); + return WebInspector.UIString("%.2fs", seconds); var minutes = seconds / 60; if (minutes < 60) - return formatterFunction("%.1fmin", minutes); + return WebInspector.UIString("%.1fmin", minutes); var hours = minutes / 60; if (hours < 24) - return formatterFunction("%.1fhrs", hours); + return WebInspector.UIString("%.1fhrs", hours); var days = hours / 24; - return formatterFunction("%.1f days", days); + return WebInspector.UIString("%.1f days", days); } -Number.bytesToString = function(bytes, formatterFunction, higherResolution) +Number.bytesToString = function(bytes, higherResolution) { - if (!formatterFunction) - formatterFunction = String.sprintf; if (typeof higherResolution === "undefined") higherResolution = true; if (bytes < 1024) - return formatterFunction("%.0fB", bytes); + return WebInspector.UIString("%.0fB", bytes); var kilobytes = bytes / 1024; if (higherResolution && kilobytes < 1024) - return formatterFunction("%.2fKB", kilobytes); + return WebInspector.UIString("%.2fKB", kilobytes); else if (kilobytes < 1024) - return formatterFunction("%.0fKB", kilobytes); + return WebInspector.UIString("%.0fKB", kilobytes); var megabytes = kilobytes / 1024; if (higherResolution) - return formatterFunction("%.2fMB", megabytes); + return WebInspector.UIString("%.2fMB", megabytes); else - return formatterFunction("%.0fMB", megabytes); + return WebInspector.UIString("%.0fMB", megabytes); } Number.constrain = function(num, min, max) @@ -715,7 +721,7 @@ HTMLTextAreaElement.prototype.moveCursorToEnd = function() this.setSelectionRange(length, length); } -Array.prototype.remove = function(value, onlyFirst) +Object.defineProperty(Array.prototype, "remove", { value: function(value, onlyFirst) { if (onlyFirst) { var index = this.indexOf(value); @@ -729,15 +735,15 @@ Array.prototype.remove = function(value, onlyFirst) if (this[i] === value) this.splice(i, 1); } -} +}}); -Array.prototype.keySet = function() +Object.defineProperty(Array.prototype, "keySet", { value: function() { var keys = {}; for (var i = 0; i < this.length; ++i) keys[this[i]] = true; return keys; -} +}}); Array.diff = function(left, right) { @@ -1050,6 +1056,6 @@ function offerFileForDownload(contents) var builder = new BlobBuilder(); builder.append(contents); var blob = builder.getBlob("application/octet-stream"); - var url = window.createObjectURL(blob); + var url = window.webkitURL.createObjectURL(blob); window.open(url); } diff --git a/Source/WebCore/inspector/xxd.pl b/Source/WebCore/inspector/xxd.pl new file mode 100644 index 0000000..42cf4a2 --- /dev/null +++ b/Source/WebCore/inspector/xxd.pl @@ -0,0 +1,45 @@ +#! /usr/bin/perl
+
+# Copyright (C) 2010 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# # Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# # Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# # Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+$varname = shift;
+$fname = shift;
+$output = shift;
+
+open($input, '<', $fname) or die "Can't open file for read: $fname $!";
+$/ = undef;
+$text = <$input>;
+close($input);
+
+$text = join(', ', map('0x' . unpack("H*", $_), split(undef, $text)));
+
+open($output, '>', $output) or die "Can't open file for write: $output $!";
+print $output "unsigned char $varname\[\] = {\n$text\n};\n";
+close($output);
diff --git a/Source/WebCore/loader/CrossOriginAccessControl.h b/Source/WebCore/loader/CrossOriginAccessControl.h index c44963b..50c231e 100644 --- a/Source/WebCore/loader/CrossOriginAccessControl.h +++ b/Source/WebCore/loader/CrossOriginAccessControl.h @@ -24,6 +24,9 @@ * */ +#ifndef CrossOriginAccessControl_h +#define CrossOriginAccessControl_h + #include <wtf/Forward.h> namespace WebCore { @@ -40,3 +43,5 @@ namespace WebCore { bool passesAccessControlCheck(const ResourceResponse&, bool includeCredentials, SecurityOrigin*, String& errorDescription); } // namespace WebCore + +#endif // CrossOriginAccessControl_h diff --git a/Source/WebCore/loader/DocumentLoader.h b/Source/WebCore/loader/DocumentLoader.h index 2328160..241102d 100644 --- a/Source/WebCore/loader/DocumentLoader.h +++ b/Source/WebCore/loader/DocumentLoader.h @@ -36,6 +36,9 @@ #include "ResourceResponse.h" #include "SubstituteData.h" #include "Timer.h" +#include <wtf/HashSet.h> +#include <wtf/RefPtr.h> +#include <wtf/Vector.h> namespace WebCore { diff --git a/Source/WebCore/loader/EmptyClients.h b/Source/WebCore/loader/EmptyClients.h index a9541b3..e04d22d 100644 --- a/Source/WebCore/loader/EmptyClients.h +++ b/Source/WebCore/loader/EmptyClients.h @@ -461,6 +461,8 @@ public: virtual NSString* userVisibleString(NSURL*) { return 0; } virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector<RefPtr<ArchiveResource> >&) { return 0; }; virtual void setInsertionPasteboard(NSPasteboard*) { }; + virtual NSURL* canonicalizeURL(NSURL*) { return 0; } + virtual NSURL* canonicalizeURLString(NSString*) { return 0; } #ifdef BUILDING_ON_TIGER virtual NSArray* pasteboardTypesForSelection(Frame*) { return 0; } #endif diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp index d11399c..9c6257b 100644 --- a/Source/WebCore/loader/FrameLoader.cpp +++ b/Source/WebCore/loader/FrameLoader.cpp @@ -72,6 +72,7 @@ #include "IconDatabase.h" #include "IconLoader.h" #include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Logging.h" #include "MIMETypeRegistry.h" #include "MainResourceLoader.h" @@ -974,9 +975,16 @@ void FrameLoader::loadArchive(PassRefPtr<Archive> prpArchive) ObjectContentType FrameLoader::defaultObjectContentType(const KURL& url, const String& mimeTypeIn) { String mimeType = mimeTypeIn; + String extension = url.path().substring(url.path().reverseFind('.') + 1); + // We don't use MIMETypeRegistry::getMIMETypeForPath() because it returns "application/octet-stream" upon failure if (mimeType.isEmpty()) - mimeType = MIMETypeRegistry::getMIMETypeForExtension(url.path().substring(url.path().reverseFind('.') + 1)); + mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension); + +#if !PLATFORM(MAC) && !PLATFORM(CHROMIUM) && !PLATFORM(EFL) // Mac has no PluginDatabase, nor does Chromium or EFL + if (mimeType.isEmpty()) + mimeType = PluginDatabase::installedPlugins()->MIMETypeForExtension(extension); +#endif if (mimeType.isEmpty()) return ObjectContentFrame; // Go ahead and hope that we can display the content. @@ -2358,8 +2366,9 @@ void FrameLoader::checkLoadCompleteForThisFrame() // Check all children first. RefPtr<HistoryItem> item; if (Page* page = m_frame->page()) - if (isBackForwardLoadType(loadType()) && m_frame == page->mainFrame()) - item = history()->currentItem(); + if (isBackForwardLoadType(loadType())) + // Reset the back forward list to the last committed history item at the top level. + item = page->mainFrame()->loader()->history()->currentItem(); bool shouldReset = true; if (!(pdl->isLoadingInAPISense() && !pdl->isStopping())) { @@ -2602,10 +2611,7 @@ void FrameLoader::detachFromParent() // handlers might start a new subresource load in this frame. stopAllLoaders(); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->frameDetachedFromParent(m_frame); -#endif + InspectorInstrumentation::frameDetachedFromParent(m_frame); detachViewsAndDocumentLoader(); @@ -3071,9 +3077,7 @@ void FrameLoader::loadedResourceFromMemoryCache(const CachedResource* resource) return; if (!page->areMemoryCacheClientCallsEnabled()) { -#if ENABLE(INSPECTOR) - page->inspectorController()->didLoadResourceFromMemoryCache(m_documentLoader.get(), resource); -#endif + InspectorInstrumentation::didLoadResourceFromMemoryCache(page, m_documentLoader.get(), resource); m_documentLoader->recordMemoryCacheLoadForFutureClientNotification(resource->url()); m_documentLoader->didTellClientAboutLoad(resource->url()); return; @@ -3081,9 +3085,7 @@ void FrameLoader::loadedResourceFromMemoryCache(const CachedResource* resource) ResourceRequest request(resource->url()); if (m_client->dispatchDidLoadResourceFromMemoryCache(m_documentLoader.get(), request, resource->response(), resource->encodedSize())) { -#if ENABLE(INSPECTOR) - page->inspectorController()->didLoadResourceFromMemoryCache(m_documentLoader.get(), resource); -#endif + InspectorInstrumentation::didLoadResourceFromMemoryCache(page, m_documentLoader.get(), resource); m_documentLoader->didTellClientAboutLoad(resource->url()); return; } @@ -3091,9 +3093,7 @@ void FrameLoader::loadedResourceFromMemoryCache(const CachedResource* resource) unsigned long identifier; ResourceError error; requestFromDelegate(request, identifier, error); -#if ENABLE(INSPECTOR) - page->inspectorController()->markResourceAsCached(identifier); -#endif + InspectorInstrumentation::markResourceAsCached(page, identifier); notifier()->sendRemainingDelegateMessages(m_documentLoader.get(), identifier, resource->response(), resource->encodedSize(), error); } @@ -3399,15 +3399,7 @@ void FrameLoader::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world) m_client->dispatchDidClearWindowObjectInWorld(world); -#if ENABLE(INSPECTOR) - if (world != mainThreadNormalWorld()) - return; - - if (Page* page = m_frame->page()) { - if (InspectorController* inspector = page->inspectorController()) - inspector->inspectedWindowScriptObjectCleared(m_frame); - } -#endif + InspectorInstrumentation::didClearWindowObjectInWorld(m_frame, world); } void FrameLoader::updateSandboxFlags() @@ -3454,10 +3446,7 @@ void FrameLoader::dispatchDidCommitLoad() m_client->dispatchDidCommitLoad(); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didCommitLoad(m_documentLoader.get()); -#endif + InspectorInstrumentation::didCommitLoad(m_frame, m_documentLoader.get()); } void FrameLoader::tellClientAboutPastMemoryCacheLoads() @@ -3473,7 +3462,7 @@ void FrameLoader::tellClientAboutPastMemoryCacheLoads() size_t size = pastLoads.size(); for (size_t i = 0; i < size; ++i) { - CachedResource* resource = cache()->resourceForURL(KURL(ParsedURLString, pastLoads[i])); + CachedResource* resource = memoryCache()->resourceForURL(KURL(ParsedURLString, pastLoads[i])); // FIXME: These loads, loaded from cache, but now gone from the cache by the time // Page::setMemoryCacheClientCallsEnabled(true) is called, will not be seen by the client. @@ -3504,8 +3493,6 @@ Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadReque if (!request.frameName().isEmpty() && request.frameName() != "_blank") { Frame* frame = lookupFrame->tree()->find(request.frameName()); if (frame && openerFrame->loader()->shouldAllowNavigation(frame)) { - if (!request.resourceRequest().url().isEmpty()) - frame->loader()->loadFrameRequest(request, false, false, 0, 0, SendReferrer); if (Page* page = frame->page()) page->chrome()->focus(); created = false; diff --git a/Source/WebCore/loader/FrameLoader.h b/Source/WebCore/loader/FrameLoader.h index 95755d6..0cc1fa7 100644 --- a/Source/WebCore/loader/FrameLoader.h +++ b/Source/WebCore/loader/FrameLoader.h @@ -36,15 +36,13 @@ #include "FrameLoaderStateMachine.h" #include "FrameLoaderTypes.h" #include "HistoryController.h" -#include "NavigationScheduler.h" -#include "PolicyCallback.h" #include "PolicyChecker.h" #include "ResourceLoadNotifier.h" -#include "ResourceRequest.h" #include "SubframeLoader.h" #include "ThreadableLoader.h" #include "Timer.h" #include <wtf/Forward.h> +#include <wtf/HashSet.h> namespace WebCore { @@ -75,6 +73,7 @@ class Page; class ProtectionSpace; class ResourceError; class ResourceLoader; +class ResourceRequest; class ResourceResponse; class ScriptSourceCode; class ScriptValue; diff --git a/Source/WebCore/loader/HistoryController.cpp b/Source/WebCore/loader/HistoryController.cpp index ff733a9..dda4e56 100644 --- a/Source/WebCore/loader/HistoryController.cpp +++ b/Source/WebCore/loader/HistoryController.cpp @@ -80,6 +80,8 @@ void HistoryController::saveScrollPositionAndViewStateToItem(HistoryItem* item) return; item->setScrollPoint(m_frame->view()->scrollPosition()); + item->setPageScaleFactor(m_frame->pageScaleFactor()); + // FIXME: It would be great to work out a way to put this code in WebCore instead of calling through to the client. m_frame->loader()->client()->saveViewStateToItem(item); } @@ -114,9 +116,12 @@ void HistoryController::restoreScrollPositionAndViewState() // through to the client. It's currently used only for the PDF view on Mac. m_frame->loader()->client()->restoreViewState(); - if (FrameView* view = m_frame->view()) - if (!view->wasScrolledByUser()) + if (FrameView* view = m_frame->view()) { + if (!view->wasScrolledByUser()) { view->setScrollPosition(m_currentItem->scrollPoint()); + m_frame->scalePage(m_currentItem->pageScaleFactor(), m_currentItem->scrollPoint()); + } + } } void HistoryController::updateBackForwardListForFragmentScroll() @@ -235,6 +240,13 @@ void HistoryController::goToItem(HistoryItem* targetItem, FrameLoadType type) page->backForward()->setCurrentItem(targetItem); Settings* settings = m_frame->settings(); page->setGlobalHistoryItem((!settings || settings->privateBrowsingEnabled()) ? 0 : targetItem); + + // First set the provisional item of any frames that are not actually navigating. + // This must be done before trying to navigate the desired frame, because some + // navigations can commit immediately (such as about:blank). We must be sure that + // all frames have provisional items set before the commit. + recursiveSetProvisionalItem(targetItem, currentItem, type); + // Now that all other frames have provisional items, do the actual navigation. recursiveGoToItem(targetItem, currentItem, type); } @@ -399,9 +411,50 @@ void HistoryController::updateForCommit() ASSERT(m_provisionalItem); m_currentItem = m_provisionalItem; m_provisionalItem = 0; + + // Tell all other frames in the tree to commit their provisional items and + // restore their scroll position. We'll avoid this frame (which has already + // committed) and its children (which will be replaced). + Page* page = m_frame->page(); + ASSERT(page); + page->mainFrame()->loader()->history()->recursiveUpdateForCommit(); } } +void HistoryController::recursiveUpdateForCommit() +{ + // The frame that navigated will now have a null provisional item. + // Ignore it and its children. + if (!m_provisionalItem) + return; + + // For each frame that already had the content the item requested (based on + // (a matching URL and frame tree snapshot), just restore the scroll position. + // Save form state (works from currentItem, since m_frameLoadComplete is true) + ASSERT(m_frameLoadComplete); + saveDocumentState(); + saveScrollPositionAndViewStateToItem(m_currentItem.get()); + + if (FrameView* view = m_frame->view()) + view->setWasScrolledByUser(false); + + // Now commit the provisional item + m_frameLoadComplete = false; + m_previousItem = m_currentItem; + m_currentItem = m_provisionalItem; + m_provisionalItem = 0; + + // Restore form state (works from currentItem) + restoreDocumentState(); + + // Restore the scroll position (we choose to do this rather than going back to the anchor point) + restoreScrollPositionAndViewState(); + + // Iterate over the rest of the tree + for (Frame* child = m_frame->tree()->firstChild(); child; child = child->tree()->nextSibling()) + child->loader()->history()->recursiveUpdateForCommit(); +} + void HistoryController::updateForSameDocumentNavigation() { if (m_frame->loader()->url().isEmpty()) @@ -551,44 +604,42 @@ PassRefPtr<HistoryItem> HistoryController::createItemTree(Frame* targetFrame, bo // The general idea here is to traverse the frame tree and the item tree in parallel, // tracking whether each frame already has the content the item requests. If there is -// a match (by URL), we just restore scroll position and recurse. Otherwise we must -// reload that frame, and all its kids. -void HistoryController::recursiveGoToItem(HistoryItem* item, HistoryItem* fromItem, FrameLoadType type) +// a match, we set the provisional item and recurse. Otherwise we will reload that +// frame and all its kids in recursiveGoToItem. +void HistoryController::recursiveSetProvisionalItem(HistoryItem* item, HistoryItem* fromItem, FrameLoadType type) { ASSERT(item); ASSERT(fromItem); - // If the item we're going to is a clone of the item we're at, then do - // not load it again, and continue history traversal to its children. - // The current frame tree and the frame tree snapshot in the item have - // to match. - // Note: If item and fromItem are the same, then we need to create a new - // document. - if (item != fromItem - && item->itemSequenceNumber() == fromItem->itemSequenceNumber() - && currentFramesMatchItem(item) - && fromItem->hasSameFrames(item)) - { - // This content is good, so leave it alone and look for children that need reloading - // Save form state (works from currentItem, since m_frameLoadComplete is true) - ASSERT(m_frameLoadComplete); - saveDocumentState(); - saveScrollPositionAndViewStateToItem(m_currentItem.get()); + if (itemsAreClones(item, fromItem)) { + // Set provisional item, which will be committed in recursiveUpdateForCommit. + m_provisionalItem = item; - if (FrameView* view = m_frame->view()) - view->setWasScrolledByUser(false); + const HistoryItemVector& childItems = item->children(); - m_previousItem = m_currentItem; - m_currentItem = item; - - // Restore form state (works from currentItem) - restoreDocumentState(); - - // Restore the scroll position (we choose to do this rather than going back to the anchor point) - restoreScrollPositionAndViewState(); - + int size = childItems.size(); + for (int i = 0; i < size; ++i) { + String childFrameName = childItems[i]->target(); + HistoryItem* fromChildItem = fromItem->childItemWithTarget(childFrameName); + ASSERT(fromChildItem); + Frame* childFrame = m_frame->tree()->child(childFrameName); + ASSERT(childFrame); + childFrame->loader()->history()->recursiveSetProvisionalItem(childItems[i].get(), fromChildItem, type); + } + } +} + +// We now traverse the frame tree and item tree a second time, loading frames that +// do have the content the item requests. +void HistoryController::recursiveGoToItem(HistoryItem* item, HistoryItem* fromItem, FrameLoadType type) +{ + ASSERT(item); + ASSERT(fromItem); + + if (itemsAreClones(item, fromItem)) { + // Just iterate over the rest, looking for frames to navigate. const HistoryItemVector& childItems = item->children(); - + int size = childItems.size(); for (int i = 0; i < size; ++i) { String childFrameName = childItems[i]->target(); @@ -603,6 +654,21 @@ void HistoryController::recursiveGoToItem(HistoryItem* item, HistoryItem* fromIt } } +bool HistoryController::itemsAreClones(HistoryItem* item1, HistoryItem* item2) const +{ + // If the item we're going to is a clone of the item we're at, then we do + // not need to load it again. The current frame tree and the frame tree + // snapshot in the item have to match. + // Note: Some clients treat a navigation to the current history item as + // a reload. Thus, if item1 and item2 are the same, we need to create a + // new document and should not consider them clones. + // (See http://webkit.org/b/35532 for details.) + return item1 != item2 + && item1->itemSequenceNumber() == item2->itemSequenceNumber() + && currentFramesMatchItem(item1) + && item2->hasSameFrames(item1); +} + // Helper method that determines whether the current frame tree matches given history item's. bool HistoryController::currentFramesMatchItem(HistoryItem* item) const { diff --git a/Source/WebCore/loader/HistoryController.h b/Source/WebCore/loader/HistoryController.h index 1bf5072..9923179 100644 --- a/Source/WebCore/loader/HistoryController.h +++ b/Source/WebCore/loader/HistoryController.h @@ -87,7 +87,10 @@ private: PassRefPtr<HistoryItem> createItem(bool useOriginal); PassRefPtr<HistoryItem> createItemTree(Frame* targetFrame, bool clipAtTarget); + void recursiveSetProvisionalItem(HistoryItem*, HistoryItem*, FrameLoadType); void recursiveGoToItem(HistoryItem*, HistoryItem*, FrameLoadType); + void recursiveUpdateForCommit(); + bool itemsAreClones(HistoryItem*, HistoryItem*) const; bool currentFramesMatchItem(HistoryItem*) const; void updateBackForwardListClippedAtTarget(bool doClip); diff --git a/Source/WebCore/loader/NetscapePlugInStreamLoader.h b/Source/WebCore/loader/NetscapePlugInStreamLoader.h index 4d7d03b..8db555e 100644 --- a/Source/WebCore/loader/NetscapePlugInStreamLoader.h +++ b/Source/WebCore/loader/NetscapePlugInStreamLoader.h @@ -26,6 +26,9 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef NetscapePlugInStreamLoader_h +#define NetscapePlugInStreamLoader_h + #include "ResourceLoader.h" #include <wtf/Forward.h> @@ -68,3 +71,5 @@ namespace WebCore { }; } + +#endif // NetscapePlugInStreamLoader_h diff --git a/Source/WebCore/loader/ResourceLoadNotifier.cpp b/Source/WebCore/loader/ResourceLoadNotifier.cpp index d002ef3..c928557 100644 --- a/Source/WebCore/loader/ResourceLoadNotifier.cpp +++ b/Source/WebCore/loader/ResourceLoadNotifier.cpp @@ -35,7 +35,7 @@ #include "Frame.h" #include "FrameLoader.h" #include "FrameLoaderClient.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Page.h" #include "ProgressTracker.h" #include "ResourceLoader.h" @@ -97,20 +97,14 @@ void ResourceLoadNotifier::didFailToLoad(ResourceLoader* loader, const ResourceE if (!error.isNull()) m_frame->loader()->client()->dispatchDidFailLoading(loader->documentLoader(), loader->identifier(), error); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didFailLoading(loader->identifier(), error); -#endif + InspectorInstrumentation::didFailLoading(m_frame, loader->identifier(), error); } void ResourceLoadNotifier::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request) { m_frame->loader()->client()->assignIdentifierToInitialRequest(identifier, loader, request); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->identifierForInitialRequest(identifier, loader, request); -#endif + InspectorInstrumentation::identifierForInitialRequest(m_frame, identifier, loader, request); } void ResourceLoadNotifier::dispatchWillSendRequest(DocumentLoader* loader, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse) @@ -124,40 +118,32 @@ void ResourceLoadNotifier::dispatchWillSendRequest(DocumentLoader* loader, unsig if (!request.isNull() && oldRequestURL != request.url().string().impl()) m_frame->loader()->documentLoader()->didTellClientAboutLoad(request.url()); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->willSendRequest(identifier, request, redirectResponse); -#endif + InspectorInstrumentation::willSendRequest(m_frame, identifier, request, redirectResponse); + + // Report WebTiming for all frames. + if (loader && !request.isNull() && request.url() == loader->requestURL()) + request.setReportLoadTiming(true); } void ResourceLoadNotifier::dispatchDidReceiveResponse(DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r) { + InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(m_frame, identifier, r); m_frame->loader()->client()->dispatchDidReceiveResponse(loader, identifier, r); - -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didReceiveResponse(identifier, loader, r); -#endif + InspectorInstrumentation::didReceiveResourceResponse(cookie, identifier, loader, r); } void ResourceLoadNotifier::dispatchDidReceiveContentLength(DocumentLoader* loader, unsigned long identifier, int length) { m_frame->loader()->client()->dispatchDidReceiveContentLength(loader, identifier, length); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didReceiveContentLength(identifier, length); -#endif + InspectorInstrumentation::didReceiveContentLength(m_frame, identifier, length); } void ResourceLoadNotifier::dispatchDidFinishLoading(DocumentLoader* loader, unsigned long identifier, double finishTime) { m_frame->loader()->client()->dispatchDidFinishLoading(loader, identifier); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didFinishLoading(identifier, finishTime); -#endif + InspectorInstrumentation::didFinishLoading(m_frame, identifier, finishTime); } void ResourceLoadNotifier::dispatchTransferLoadingResourceFromPage(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request, Page* oldPage) diff --git a/Source/WebCore/loader/ResourceLoader.cpp b/Source/WebCore/loader/ResourceLoader.cpp index bc56000..85216fb 100644 --- a/Source/WebCore/loader/ResourceLoader.cpp +++ b/Source/WebCore/loader/ResourceLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2006, 2007, 2010, 2011 Apple Inc. All rights reserved. * (C) 2007 Graham Dennis (graham.dennis@gmail.com) * * Redistribution and use in source and binary forms, with or without @@ -129,14 +129,13 @@ bool ResourceLoader::init(const ResourceRequest& r) clientRequest.setFirstPartyForCookies(document->firstPartyForCookies()); } - m_request = clientRequest; - - willSendRequest(m_request, ResourceResponse()); - if (m_request.isNull()) { + willSendRequest(clientRequest, ResourceResponse()); + if (clientRequest.isNull()) { didFail(frameLoader()->cancelledError(m_request)); return false; } + m_request = clientRequest; return true; } @@ -431,9 +430,7 @@ void ResourceLoader::didReceiveResponse(ResourceHandle*, const ResourceResponse& if (documentLoader()->applicationCacheHost()->maybeLoadFallbackForResponse(this, response)) return; #endif - InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(m_frame.get(), identifier(), response); didReceiveResponse(response); - InspectorInstrumentation::didReceiveResourceResponse(cookie); } void ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int length, int lengthReceived) diff --git a/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp b/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp index 6454b90..514ef19 100644 --- a/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp +++ b/Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp @@ -40,6 +40,7 @@ #include "Frame.h" #include "FrameLoader.h" #include "FrameLoaderClient.h" +#include "InspectorInstrumentation.h" #include "MainResourceLoader.h" #include "ManifestParser.h" #include "Page.h" @@ -48,11 +49,7 @@ #include <wtf/HashMap.h> #if ENABLE(INSPECTOR) -#include "InspectorApplicationCacheAgent.h" -#include "InspectorController.h" #include "ProgressTracker.h" -#else -#include <wtf/UnusedParam.h> #endif namespace WebCore { @@ -395,30 +392,13 @@ void ApplicationCacheGroup::stopLoadingInFrame(Frame* frame) stopLoading(); } -#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 + InspectorInstrumentation::updateApplicationCacheStatus(m_frame); } void ApplicationCacheGroup::makeObsolete() @@ -429,9 +409,7 @@ void ApplicationCacheGroup::makeObsolete() m_isObsolete = true; cacheStorage().cacheGroupMadeObsolete(this); ASSERT(!m_storageID); -#if ENABLE(INSPECTOR) - inspectorUpdateApplicationCacheStatus(m_frame); -#endif + InspectorInstrumentation::updateApplicationCacheStatus(m_frame); } void ApplicationCacheGroup::update(Frame* frame, ApplicationCacheUpdateOption updateOption) @@ -496,35 +474,19 @@ PassRefPtr<ResourceHandle> ApplicationCacheGroup::createResourceHandle(const KUR // 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->firstRequest()); - ResourceResponse redirectResponse = ResourceResponse(); - inspectorController->willSendRequest(m_currentResourceIdentifier, request, redirectResponse); - } + InspectorInstrumentation::identifierForInitialRequest(m_frame, m_currentResourceIdentifier, m_frame->loader()->documentLoader(), handle->firstRequest()); + ResourceResponse redirectResponse = ResourceResponse(); + InspectorInstrumentation::willSendRequest(m_frame, 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, m_frame->loader()->documentLoader(), response); - } + DocumentLoader* loader = (handle == m_manifestHandle) ? 0 : m_frame->loader()->documentLoader(); + InspectorInstrumentationCookie cookie = InspectorInstrumentation::willReceiveResourceResponse(m_frame, m_currentResourceIdentifier, response); + InspectorInstrumentation::didReceiveResourceResponse(cookie, m_currentResourceIdentifier, loader, response); #endif if (handle == m_manifestHandle) { @@ -594,10 +556,7 @@ void ApplicationCacheGroup::didReceiveResponse(ResourceHandle* handle, const Res 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); + InspectorInstrumentation::didReceiveContentLength(m_frame, m_currentResourceIdentifier, lengthReceived); #endif if (handle == m_manifestHandle) { @@ -616,8 +575,7 @@ void ApplicationCacheGroup::didReceiveData(ResourceHandle* handle, const char* d void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle, double finishTime) { #if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) - page->inspectorController()->didFinishLoading(m_currentResourceIdentifier, finishTime); + InspectorInstrumentation::didFinishLoading(m_frame, m_currentResourceIdentifier, finishTime); #endif if (handle == m_manifestHandle) { @@ -658,10 +616,7 @@ void ApplicationCacheGroup::didFinishLoading(ResourceHandle* handle, double fini 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); + InspectorInstrumentation::didFailLoading(m_frame, m_currentResourceIdentifier, error); #endif if (handle == m_manifestHandle) { @@ -1161,9 +1116,7 @@ void ApplicationCacheGroup::postListenerTask(ApplicationCacheHost::EventID event void ApplicationCacheGroup::setUpdateStatus(UpdateStatus status) { m_updateStatus = status; -#if ENABLE(INSPECTOR) - inspectorUpdateApplicationCacheStatus(m_frame); -#endif + InspectorInstrumentation::updateApplicationCacheStatus(m_frame); } void ApplicationCacheGroup::clearStorageID() diff --git a/Source/WebCore/loader/appcache/ApplicationCacheGroup.h b/Source/WebCore/loader/appcache/ApplicationCacheGroup.h index 29d0749..2d8b83e 100644 --- a/Source/WebCore/loader/appcache/ApplicationCacheGroup.h +++ b/Source/WebCore/loader/appcache/ApplicationCacheGroup.h @@ -110,9 +110,6 @@ 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 length, int lengthReceived); virtual void didFinishLoading(ResourceHandle*, double finishTime); diff --git a/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp b/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp index ddd564e..d9575fe 100644 --- a/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp +++ b/Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp @@ -529,7 +529,7 @@ PassRefPtr<LegacyWebArchive> LegacyWebArchive::create(const String& markupString continue; } - CachedResource *cachedResource = cache()->resourceForURL(subresourceURL); + CachedResource* cachedResource = memoryCache()->resourceForURL(subresourceURL); if (cachedResource) { resource = ArchiveResource::create(cachedResource->data(), subresourceURL, cachedResource->response()); if (resource) { diff --git a/Source/WebCore/loader/cache/CachedFont.cpp b/Source/WebCore/loader/cache/CachedFont.cpp index d6967bf..fe3281e 100644 --- a/Source/WebCore/loader/cache/CachedFont.cpp +++ b/Source/WebCore/loader/cache/CachedFont.cpp @@ -137,18 +137,13 @@ bool CachedFont::ensureSVGFontData() ASSERT(m_isSVGFont); if (!m_externalSVGDocument && !errorOccurred() && !isLoading() && m_data) { m_externalSVGDocument = SVGDocument::create(0, KURL()); - m_externalSVGDocument->open(); RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml"); - m_externalSVGDocument->write(decoder->decode(m_data->data(), m_data->size())); - m_externalSVGDocument->write(decoder->flush()); - if (decoder->sawError()) { - m_externalSVGDocument.clear(); - return 0; - } - - m_externalSVGDocument->finishParsing(); - m_externalSVGDocument->close(); + + m_externalSVGDocument->setContent(decoder->decode(m_data->data(), m_data->size()) + decoder->flush()); + + if (decoder->sawError()) + m_externalSVGDocument = 0; } return m_externalSVGDocument; diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp index c550eec..7d9ce3d 100644 --- a/Source/WebCore/loader/cache/CachedImage.cpp +++ b/Source/WebCore/loader/cache/CachedImage.cpp @@ -111,7 +111,7 @@ void CachedImage::allClientsRemoved() { if (m_image && !errorOccurred()) m_image->resetAnimation(); - if (double interval = cache()->deadDecodedDataDeletionInterval()) + if (double interval = memoryCache()->deadDecodedDataDeletionInterval()) m_decodedDataDeletionTimer.startOneShot(interval); } @@ -284,7 +284,7 @@ void CachedImage::data(PassRefPtr<SharedBuffer> data, bool allDataReceived) if (m_image->isNull() || (maxDecodedImageSize > 0 && estimatedDecodedImageSize > maxDecodedImageSize)) { error(errorOccurred() ? status() : DecodeError); if (inCache()) - cache()->remove(this); + memoryCache()->remove(this); return; } diff --git a/Source/WebCore/loader/cache/CachedResource.cpp b/Source/WebCore/loader/cache/CachedResource.cpp index a9d9b0a..06b3131 100644 --- a/Source/WebCore/loader/cache/CachedResource.cpp +++ b/Source/WebCore/loader/cache/CachedResource.cpp @@ -116,7 +116,7 @@ CachedResource::~CachedResource() ASSERT(canDelete()); ASSERT(!inCache()); ASSERT(!m_deleted); - ASSERT(url().isNull() || cache()->resourceForURL(KURL(ParsedURLString, url())) != this); + ASSERT(url().isNull() || memoryCache()->resourceForURL(KURL(ParsedURLString, url())) != this); #ifndef NDEBUG m_deleted = true; cachedResourceLeakCounter.decrement(); @@ -259,7 +259,7 @@ void CachedResource::addClientToSet(CachedResourceClient* client) m_preloadResult = PreloadReferenced; } if (!hasClients() && inCache()) - cache()->addToLiveResourcesSize(this); + memoryCache()->addToLiveResourcesSize(this); m_clients.add(client); } @@ -271,8 +271,8 @@ void CachedResource::removeClient(CachedResourceClient* client) if (canDelete() && !inCache()) delete this; else if (!hasClients() && inCache()) { - cache()->removeFromLiveResourcesSize(this); - cache()->removeFromLiveDecodedResourcesList(this); + memoryCache()->removeFromLiveResourcesSize(this); + memoryCache()->removeFromLiveDecodedResourcesList(this); allClientsRemoved(); if (response().cacheControlContainsNoStore()) { // RFC2616 14.9.2: @@ -280,9 +280,9 @@ void CachedResource::removeClient(CachedResourceClient* client) // "... History buffers MAY store such responses as part of their normal operation." // We allow non-secure content to be reused in history, but we do not allow secure content to be reused. if (protocolIs(url(), "https")) - cache()->remove(this); + memoryCache()->remove(this); } else - cache()->prune(); + memoryCache()->prune(); } // This object may be dead here. } @@ -304,13 +304,13 @@ void CachedResource::setDecodedSize(unsigned size) // We have to remove explicitly before updating m_decodedSize, so that we find the correct previous // queue. if (inCache()) - cache()->removeFromLRUList(this); + memoryCache()->removeFromLRUList(this); m_decodedSize = size; if (inCache()) { // Now insert into the new LRU list. - cache()->insertInLRUList(this); + memoryCache()->insertInLRUList(this); // Insert into or remove from the live decoded list if necessary. // When inserting into the LiveDecodedResourcesList it is possible @@ -320,12 +320,12 @@ void CachedResource::setDecodedSize(unsigned size) // by access time. The weakening of the invariant does not pose // a problem. For more details please see: https://bugs.webkit.org/show_bug.cgi?id=30209 if (m_decodedSize && !m_inLiveDecodedResourcesList && hasClients()) - cache()->insertInLiveDecodedResourcesList(this); + memoryCache()->insertInLiveDecodedResourcesList(this); else if (!m_decodedSize && m_inLiveDecodedResourcesList) - cache()->removeFromLiveDecodedResourcesList(this); + memoryCache()->removeFromLiveDecodedResourcesList(this); // Update the cache's size totals. - cache()->adjustSize(hasClients(), delta); + memoryCache()->adjustSize(hasClients(), delta); } } @@ -343,16 +343,16 @@ void CachedResource::setEncodedSize(unsigned size) // We have to remove explicitly before updating m_encodedSize, so that we find the correct previous // queue. if (inCache()) - cache()->removeFromLRUList(this); + memoryCache()->removeFromLRUList(this); m_encodedSize = size; if (inCache()) { // Now insert into the new LRU list. - cache()->insertInLRUList(this); + memoryCache()->insertInLRUList(this); // Update the cache's size totals. - cache()->adjustSize(hasClients(), delta); + memoryCache()->adjustSize(hasClients(), delta); } } @@ -362,10 +362,10 @@ void CachedResource::didAccessDecodedData(double timeStamp) if (inCache()) { if (m_inLiveDecodedResourcesList) { - cache()->removeFromLiveDecodedResourcesList(this); - cache()->insertInLiveDecodedResourcesList(this); + memoryCache()->removeFromLiveDecodedResourcesList(this); + memoryCache()->insertInLiveDecodedResourcesList(this); } - cache()->prune(); + memoryCache()->prune(); } } diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.cpp b/Source/WebCore/loader/cache/CachedResourceLoader.cpp index 3fcace6..de02758 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.cpp +++ b/Source/WebCore/loader/cache/CachedResourceLoader.cpp @@ -43,8 +43,10 @@ #include "Logging.h" #include "MemoryCache.h" #include "PingLoader.h" +#include "ResourceLoadScheduler.h" #include "SecurityOrigin.h" #include "Settings.h" +#include <wtf/text/CString.h> #include <wtf/text/StringConcatenate.h> #define PRELOAD_DEBUG 0 @@ -76,8 +78,7 @@ static CachedResource* createResource(CachedResource::Type type, const KURL& url } CachedResourceLoader::CachedResourceLoader(Document* document) - : m_cache(cache()) - , m_document(document) + : m_document(document) , m_requestCount(0) #ifdef ANDROID_BLOCK_NETWORK_IMAGE , m_blockNetworkImage(false) @@ -86,7 +87,6 @@ CachedResourceLoader::CachedResourceLoader(Document* document) , m_loadFinishing(false) , m_allowStaleResources(false) { - m_cache->addCachedResourceLoader(this); } CachedResourceLoader::~CachedResourceLoader() @@ -96,7 +96,6 @@ CachedResourceLoader::~CachedResourceLoader() DocumentResourceMap::iterator end = m_documentResources.end(); for (DocumentResourceMap::iterator it = m_documentResources.begin(); it != end; ++it) it->second->setOwningCachedResourceLoader(0); - m_cache->removeCachedResourceLoader(this); // Make sure no requests still point to this CachedResourceLoader ASSERT(m_requestCount == 0); @@ -160,14 +159,14 @@ CachedCSSStyleSheet* CachedResourceLoader::requestUserCSSStyleSheet(const String { KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(KURL(KURL(), requestURL)); - if (CachedResource* existing = cache()->resourceForURL(url)) { + if (CachedResource* existing = memoryCache()->resourceForURL(url)) { if (existing->type() == CachedResource::CSSStyleSheet) return static_cast<CachedCSSStyleSheet*>(existing); - cache()->remove(existing); + memoryCache()->remove(existing); } CachedCSSStyleSheet* userSheet = new CachedCSSStyleSheet(url, charset); - bool inCache = cache()->add(userSheet); + bool inCache = memoryCache()->add(userSheet); if (!inCache) userSheet->setInCache(true); @@ -290,7 +289,7 @@ CachedResource* CachedResourceLoader::requestResource(CachedResource::Type type, return 0; } - if (cache()->disabled()) { + if (memoryCache()->disabled()) { DocumentResourceMap::iterator it = m_documentResources.find(url.string()); if (it != m_documentResources.end()) { it->second->setOwningCachedResourceLoader(0); @@ -299,21 +298,21 @@ CachedResource* CachedResourceLoader::requestResource(CachedResource::Type type, } // See if we can use an existing resource from the cache. - CachedResource* resource = cache()->resourceForURL(url); + CachedResource* resource = memoryCache()->resourceForURL(url); switch (determineRevalidationPolicy(type, forPreload, resource)) { case Load: resource = loadResource(type, url, charset, priority); break; case Reload: - cache()->remove(resource); + memoryCache()->remove(resource); resource = loadResource(type, url, charset, priority); break; case Revalidate: resource = revalidateResource(resource, priority); break; case Use: - cache()->resourceAccessed(resource); + memoryCache()->resourceAccessed(resource); notifyLoadedFromMemoryCache(resource); break; } @@ -331,7 +330,7 @@ CachedResource* CachedResourceLoader::revalidateResource(CachedResource* resourc { ASSERT(resource); ASSERT(resource->inCache()); - ASSERT(!cache()->disabled()); + ASSERT(!memoryCache()->disabled()); ASSERT(resource->canUseCacheValidator()); ASSERT(!resource->resourceToRevalidate()); @@ -341,8 +340,8 @@ CachedResource* CachedResourceLoader::revalidateResource(CachedResource* resourc LOG(ResourceLoading, "Resource %p created to revalidate %p", newResource, resource); newResource->setResourceToRevalidate(resource); - cache()->remove(resource); - cache()->add(newResource); + memoryCache()->remove(resource); + memoryCache()->add(newResource); newResource->setLoadPriority(priority); newResource->load(this); @@ -353,13 +352,13 @@ CachedResource* CachedResourceLoader::revalidateResource(CachedResource* resourc CachedResource* CachedResourceLoader::loadResource(CachedResource::Type type, const KURL& url, const String& charset, ResourceLoadPriority priority) { - ASSERT(!cache()->resourceForURL(url)); + ASSERT(!memoryCache()->resourceForURL(url)); LOG(ResourceLoading, "Loading CachedResource for '%s'.", url.string().latin1().data()); CachedResource* resource = createResource(type, url, charset); - bool inCache = cache()->add(resource); + bool inCache = memoryCache()->add(resource); // Pretend the resource is in the cache, to prevent it from being deleted during the load() call. // FIXME: CachedResource should just use normal refcounting instead. @@ -377,7 +376,7 @@ CachedResource* CachedResourceLoader::loadResource(CachedResource::Type type, co // We don't support immediate loads, but we do support immediate failure. if (resource->errorOccurred()) { if (inCache) - cache()->remove(resource); + memoryCache()->remove(resource); else delete resource; return 0; @@ -410,6 +409,16 @@ CachedResourceLoader::RevalidationPolicy CachedResourceLoader::determineRevalida if (existingResource->isPreloaded()) return Use; + // CachePolicyHistoryBuffer uses the cache no matter what. + if (cachePolicy() == CachePolicyHistoryBuffer) + return Use; + + // Don't reuse resources with Cache-control: no-store. + if (existingResource->response().cacheControlContainsNoStore()) { + LOG(ResourceLoading, "CachedResourceLoader::determineRevalidationPolicy reloading due to Cache-control: no-store."); + return Reload; + } + // Avoid loading the same resource multiple times for a single document, even if the cache policies would tell us to. if (m_validatedURLs.contains(existingResource->url())) return Use; @@ -420,10 +429,6 @@ CachedResourceLoader::RevalidationPolicy CachedResourceLoader::determineRevalida return Reload; } - // CachePolicyHistoryBuffer uses the cache no matter what. - if (cachePolicy() == CachePolicyHistoryBuffer) - return Use; - // We'll try to reload the resource if it failed last time. if (existingResource->errorOccurred()) { LOG(ResourceLoading, "CachedResourceLoader::determineRevalidationPolicye reloading due to resource being in the error state"); @@ -562,6 +567,7 @@ void CachedResourceLoader::loadDone(CachedResourceRequest* request) if (frame()) frame()->loader()->loadDone(); checkForPendingPreloads(); + resourceLoadScheduler()->servePendingRequests(); } void CachedResourceLoader::cancelRequests() @@ -671,7 +677,7 @@ void CachedResourceLoader::clearPreloads() if (res->canDelete() && !res->inCache()) delete res; else if (res->preloadResult() == CachedResource::PreloadNotReferenced) - cache()->remove(res); + memoryCache()->remove(res); } m_preloads.clear(); } @@ -715,7 +721,7 @@ void CachedResourceLoader::printPreloadStats() } if (res->errorOccurred()) - cache()->remove(res); + memoryCache()->remove(res); res->decreasePreloadCount(); } diff --git a/Source/WebCore/loader/cache/CachedResourceLoader.h b/Source/WebCore/loader/cache/CachedResourceLoader.h index 1d53976..bc351ce 100644 --- a/Source/WebCore/loader/cache/CachedResourceLoader.h +++ b/Source/WebCore/loader/cache/CachedResourceLoader.h @@ -50,7 +50,6 @@ class KURL; // The CachedResourceLoader manages the loading of scripts/images/stylesheets for a single document. class CachedResourceLoader : public Noncopyable { -friend class MemoryCache; friend class ImageLoader; public: @@ -124,7 +123,6 @@ private: void notifyLoadedFromMemoryCache(CachedResource*); bool canRequest(CachedResource::Type, const KURL&); - MemoryCache* m_cache; HashSet<String> m_validatedURLs; mutable DocumentResourceMap m_documentResources; Document* m_document; diff --git a/Source/WebCore/loader/cache/CachedResourceRequest.cpp b/Source/WebCore/loader/cache/CachedResourceRequest.cpp index 827bb8e..d5e1adf 100644 --- a/Source/WebCore/loader/cache/CachedResourceRequest.cpp +++ b/Source/WebCore/loader/cache/CachedResourceRequest.cpp @@ -122,7 +122,7 @@ PassRefPtr<CachedResourceRequest> CachedResourceRequest::load(CachedResourceLoad cachedResourceLoader->decrementRequestCount(resource); cachedResourceLoader->loadFinishing(); if (resource->resourceToRevalidate()) - cache()->revalidationFailed(resource); + memoryCache()->revalidationFailed(resource); resource->error(CachedResource::LoadError); cachedResourceLoader->loadDone(0); return 0; @@ -186,7 +186,7 @@ void CachedResourceRequest::didFail(bool cancelled) m_loader->clearClient(); if (m_resource->resourceToRevalidate()) - cache()->revalidationFailed(m_resource); + memoryCache()->revalidationFailed(m_resource); if (!cancelled) { m_cachedResourceLoader->loadFinishing(); @@ -194,7 +194,7 @@ void CachedResourceRequest::didFail(bool cancelled) } if (cancelled || !m_resource->isPreloaded()) - cache()->remove(m_resource); + memoryCache()->remove(m_resource); m_cachedResourceLoader->loadDone(this); } @@ -211,7 +211,7 @@ void CachedResourceRequest::didReceiveResponse(SubresourceLoader* loader, const m_finishing = true; // Existing resource is ok, just use it updating the expiration time. - cache()->revalidationSucceeded(m_resource, response); + memoryCache()->revalidationSucceeded(m_resource, response); if (m_cachedResourceLoader->frame()) m_cachedResourceLoader->frame()->loader()->checkCompleted(); @@ -220,7 +220,7 @@ void CachedResourceRequest::didReceiveResponse(SubresourceLoader* loader, const return; } // Did not get 304 response, continue as a regular resource load. - cache()->revalidationFailed(m_resource); + memoryCache()->revalidationFailed(m_resource); } m_resource->setResponse(response); diff --git a/Source/WebCore/loader/cache/MemoryCache.cpp b/Source/WebCore/loader/cache/MemoryCache.cpp index 930033a..c0927f8 100644 --- a/Source/WebCore/loader/cache/MemoryCache.cpp +++ b/Source/WebCore/loader/cache/MemoryCache.cpp @@ -50,7 +50,7 @@ static const double cMinDelayBeforeLiveDecodedPrune = 1; // Seconds. static const float cTargetPrunePercentage = .95f; // Percentage of capacity toward which we prune, to avoid immediately pruning again. static const double cDefaultDecodedDataDeletionInterval = 0; -MemoryCache* cache() +MemoryCache* memoryCache() { static MemoryCache* staticCache = new MemoryCache; return staticCache; @@ -346,16 +346,6 @@ void MemoryCache::evict(CachedResource* resource) delete resource; } -void MemoryCache::addCachedResourceLoader(CachedResourceLoader* cachedResourceLoader) -{ - m_cachedResourceLoaders.add(cachedResourceLoader); -} - -void MemoryCache::removeCachedResourceLoader(CachedResourceLoader* cachedResourceLoader) -{ - m_cachedResourceLoaders.remove(cachedResourceLoader); -} - static inline unsigned fastLog2(unsigned i) { unsigned log2 = 0; diff --git a/Source/WebCore/loader/cache/MemoryCache.h b/Source/WebCore/loader/cache/MemoryCache.h index dc47733..7a567ea 100644 --- a/Source/WebCore/loader/cache/MemoryCache.h +++ b/Source/WebCore/loader/cache/MemoryCache.h @@ -72,7 +72,7 @@ class KURL; class MemoryCache : public Noncopyable { public: - friend MemoryCache* cache(); + friend MemoryCache* memoryCache(); typedef HashMap<String, CachedResource*> CachedResourceMap; @@ -186,9 +186,6 @@ private: bool makeResourcePurgeable(CachedResource*); void evict(CachedResource*); - // Member variables. - HashSet<CachedResourceLoader*> m_cachedResourceLoaders; - bool m_disabled; // Whether or not the cache is enabled. bool m_pruneEnabled; bool m_inPruneDeadResources; @@ -224,7 +221,7 @@ inline bool MemoryCache::shouldMakeResourcePurgeableOnEviction() } // Function to obtain the global cache. -MemoryCache* cache(); +MemoryCache* memoryCache(); } diff --git a/Source/WebCore/manual-tests/plug-in-mutates-NSView-hierarchy-during-resize.html b/Source/WebCore/manual-tests/plug-in-mutates-NSView-hierarchy-during-resize.html new file mode 100644 index 0000000..e43e074 --- /dev/null +++ b/Source/WebCore/manual-tests/plug-in-mutates-NSView-hierarchy-during-resize.html @@ -0,0 +1,37 @@ +<style> + div { padding: 10px; margin: 8px; } + embed { width: 50px; height: 50px; } + iframe { width: 50px; height: 50px; } +</style> +<script> + var callCount = 0; + + function hideFirst() + { + if (++callCount != 2) + return; + + var target = document.getElementById("target"); + if (!target) + return; + + target.parentNode.removeChild(target); + document.body.offsetTop; + } +</script> +<p> + Test that plug-ins cannot cause the NSView hierarchy to change beneath <tt>-[NSView _invalidateGStatesForTree]</tt>. +</p> +<p> + To test, resize the browser window. Reload and repeat a few times. Each time you resize, the orange rectangle and + its contents should vanish, and the browser should not crash. +</p> +<div id="target" style="border: solid orange;"> + <embed type="application/x-webkit-test-netscape"></embed> + <iframe src=""></iframe> + <iframe src=""></iframe> + <iframe src=""></iframe> +</div> +<div style="border: solid blue;"> + <embed type="application/x-webkit-test-netscape" onsetwindow="hideFirst()"></embed> +</div> diff --git a/Source/WebCore/page/Chrome.cpp b/Source/WebCore/page/Chrome.cpp index a801065..0405408 100644 --- a/Source/WebCore/page/Chrome.cpp +++ b/Source/WebCore/page/Chrome.cpp @@ -33,7 +33,7 @@ #include "HTMLInputElement.h" #include "HTMLNames.h" #include "HitTestResult.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Page.h" #include "PageGroupLoadDeferrer.h" #include "RenderObject.h" @@ -344,10 +344,7 @@ void Chrome::mouseDidMoveOverElement(const HitTestResult& result, unsigned modif } m_client->mouseDidMoveOverElement(result, modifierFlags); -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = m_page->inspectorController()) - inspector->mouseDidMoveOverElement(result, modifierFlags); -#endif + InspectorInstrumentation::mouseDidMoveOverElement(m_page, result, modifierFlags); } void Chrome::setToolTip(const HitTestResult& result) diff --git a/Source/WebCore/page/ChromeClient.h b/Source/WebCore/page/ChromeClient.h index 0276a14..51c8959 100644 --- a/Source/WebCore/page/ChromeClient.h +++ b/Source/WebCore/page/ChromeClient.h @@ -100,6 +100,8 @@ namespace WebCore { // Frame wants to create the new Page. Also, the newly created window // should not be shown to the user until the ChromeClient of the newly // created Page has its show method called. + // The FrameLoadRequest parameter is only for ChromeClient to check if the + // request could be fulfilled. The ChromeClient should not load the request. virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&, const NavigationAction&) = 0; virtual void show() = 0; diff --git a/Source/WebCore/page/Console.cpp b/Source/WebCore/page/Console.cpp index 219647d..d4aed41 100644 --- a/Source/WebCore/page/Console.cpp +++ b/Source/WebCore/page/Console.cpp @@ -31,11 +31,11 @@ #include "Chrome.h" #include "ChromeClient.h" -#include "ConsoleMessage.h" #include "Frame.h" #include "FrameLoader.h" #include "FrameTree.h" #include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "MemoryInfo.h" #include "Page.h" #include "PageGroup.h" @@ -146,12 +146,10 @@ void Console::addMessage(MessageSource source, MessageType type, MessageLevel le if (source == JSMessageSource) page->chrome()->client()->addMessageToConsole(source, type, level, message, lineNumber, sourceURL); -#if ENABLE(INSPECTOR) if (callStack) - page->inspectorController()->addMessageToConsole(source, type, level, message, 0, callStack); + InspectorInstrumentation::addMessageToConsole(page, source, type, level, message, 0, callStack.get()); else - page->inspectorController()->addMessageToConsole(source, type, level, message, lineNumber, sourceURL); -#endif + InspectorInstrumentation::addMessageToConsole(page, source, type, level, message, lineNumber, sourceURL); if (!Console::shouldPrintExceptions()) return; @@ -189,9 +187,7 @@ void Console::addMessage(MessageType type, MessageLevel level, PassRefPtr<Script if (arguments->getFirstArgumentAsString(message)) page->chrome()->client()->addMessageToConsole(JSMessageSource, type, level, message, lastCaller.lineNumber(), lastCaller.sourceURL()); -#if ENABLE(INSPECTOR) - page->inspectorController()->addMessageToConsole(JSMessageSource, type, level, message, arguments, callStack); -#endif + InspectorInstrumentation::addMessageToConsole(page, JSMessageSource, type, level, message, arguments.get(), callStack.get()); } void Console::debug(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) @@ -250,65 +246,13 @@ void Console::assertCondition(bool condition, PassRefPtr<ScriptArguments> argume void Console::count(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - const ScriptCallFrame& lastCaller = callStack->at(0); - // Follow Firebug's behavior of counting with null and undefined title in - // the same bucket as no argument - String title; - arguments->getFirstArgumentAsString(title); - - page->inspectorController()->count(title, lastCaller.lineNumber(), lastCaller.sourceURL()); -#else - UNUSED_PARAM(callStack); -#endif + InspectorInstrumentation::consoleCount(page(), arguments.get(), callStack.get()); } void Console::markTimeline(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack>) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - String message; - arguments->getFirstArgumentAsString(message); - - page->inspectorController()->markTimeline(message); -#else - UNUSED_PARAM(arguments); -#endif -} - -#if ENABLE(WML) -String Console::lastWMLErrorMessage() const -{ -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return String(); - - const Vector<OwnPtr<ConsoleMessage> >& consoleMessages = page->inspectorController()->consoleMessages(); - if (consoleMessages.isEmpty()) - return String(); - - Vector<OwnPtr<ConsoleMessage> >::const_iterator it = consoleMessages.begin(); - const Vector<OwnPtr<ConsoleMessage> >::const_iterator end = consoleMessages.end(); - - for (; it != end; ++it) { - ConsoleMessage* message = it->get(); - if (message->source() != WMLMessageSource) - continue; - - return message->message(); - } -#endif - return String(); + InspectorInstrumentation::consoleMarkTimeline(page(), arguments.get()); } -#endif #if ENABLE(JAVASCRIPT_DEBUGGER) @@ -335,10 +279,8 @@ void Console::profile(const String& title, ScriptState* state, PassRefPtr<Script ScriptProfiler::start(state, resolvedTitle); -#if ENABLE(INSPECTOR) const ScriptCallFrame& lastCaller = callStack->at(0); - controller->addStartProfilingMessageToConsole(resolvedTitle, lastCaller.lineNumber(), lastCaller.sourceURL()); -#endif + InspectorInstrumentation::addStartProfilingMessageToConsole(page, resolvedTitle, lastCaller.lineNumber(), lastCaller.sourceURL()); } void Console::profileEnd(const String& title, ScriptState* state, PassRefPtr<ScriptCallStack> callStack) @@ -369,85 +311,27 @@ void Console::profileEnd(const String& title, ScriptState* state, PassRefPtr<Scr void Console::time(const String& title) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - // Follow Firebug's behavior of requiring a title that is not null or - // undefined for timing functions - if (title.isNull()) - return; - - page->inspectorController()->startTiming(title); -#else - UNUSED_PARAM(title); -#endif + InspectorInstrumentation::startConsoleTiming(page(), title); } void Console::timeEnd(const String& title, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack> callStack) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - // Follow Firebug's behavior of requiring a title that is not null or - // undefined for timing functions - if (title.isNull()) - return; - - double elapsed; - if (!page->inspectorController()->stopTiming(title, elapsed)) - return; - - String message = title + String::format(": %.0fms", elapsed); - - const ScriptCallFrame& lastCaller = callStack->at(0); - page->inspectorController()->addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, message, lastCaller.lineNumber(), lastCaller.sourceURL()); -#else - UNUSED_PARAM(title); - UNUSED_PARAM(callStack); -#endif + InspectorInstrumentation::stopConsoleTiming(page(), title, callStack.get()); } void Console::group(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - page->inspectorController()->startGroup(arguments, callStack); -#else - UNUSED_PARAM(arguments); - UNUSED_PARAM(callStack); -#endif + InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupMessageType, LogMessageLevel, String(), arguments.get(), callStack.get()); } void Console::groupCollapsed(PassRefPtr<ScriptArguments> arguments, PassRefPtr<ScriptCallStack> callStack) { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - page->inspectorController()->startGroup(arguments, callStack, true); -#else - UNUSED_PARAM(arguments); - UNUSED_PARAM(callStack); -#endif + InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, StartGroupCollapsedMessageType, LogMessageLevel, String(), arguments.get(), callStack.get()); } void Console::groupEnd() { -#if ENABLE(INSPECTOR) - Page* page = this->page(); - if (!page) - return; - - page->inspectorController()->endGroup(JSMessageSource, 0, String()); -#endif + InspectorInstrumentation::addMessageToConsole(page(), JSMessageSource, EndGroupMessageType, LogMessageLevel, String(), 0, String()); } bool Console::shouldCaptureFullStackTrace() const diff --git a/Source/WebCore/page/Console.h b/Source/WebCore/page/Console.h index dd692a2..ceefb38 100644 --- a/Source/WebCore/page/Console.h +++ b/Source/WebCore/page/Console.h @@ -101,9 +101,6 @@ public: void assertCondition(bool condition, PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); void count(PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); void markTimeline(PassRefPtr<ScriptArguments>, PassRefPtr<ScriptCallStack>); -#if ENABLE(WML) - String lastWMLErrorMessage() const; -#endif #if ENABLE(JAVASCRIPT_DEBUGGER) const ProfilesArray& profiles() const { return m_profiles; } void profile(const String&, ScriptState*, PassRefPtr<ScriptCallStack>); diff --git a/Source/WebCore/page/Console.idl b/Source/WebCore/page/Console.idl index 503bb91..189280d 100644 --- a/Source/WebCore/page/Console.idl +++ b/Source/WebCore/page/Console.idl @@ -42,10 +42,6 @@ module window { [CustomArgumentHandling] void count(); [CustomArgumentHandling] void markTimeline(); -#if defined(ENABLE_WML) && ENABLE_WML - [DontEnum] DOMString lastWMLErrorMessage(); -#endif - #if defined(ENABLE_JAVASCRIPT_DEBUGGER) && ENABLE_JAVASCRIPT_DEBUGGER readonly attribute [CustomGetter] Array profiles; [Custom] void profile(in DOMString title); diff --git a/Source/WebCore/page/ContextMenuController.cpp b/Source/WebCore/page/ContextMenuController.cpp index ac89db2..0909f70 100644 --- a/Source/WebCore/page/ContextMenuController.cpp +++ b/Source/WebCore/page/ContextMenuController.cpp @@ -158,9 +158,10 @@ static void openNewWindow(const KURL& urlToLoad, Frame* frame) { if (Page* oldPage = frame->page()) { FrameLoadRequest request(frame->document()->securityOrigin(), ResourceRequest(urlToLoad, frame->loader()->outgoingReferrer())); - WindowFeatures features; - if (Page* newPage = oldPage->chrome()->createWindow(frame, request, features, NavigationAction())) + if (Page* newPage = oldPage->chrome()->createWindow(frame, request, WindowFeatures(), NavigationAction())) { + newPage->mainFrame()->loader()->loadFrameRequest(request, false, false, 0, 0, SendReferrer); newPage->chrome()->show(); + } } } diff --git a/Source/WebCore/page/DOMWindow.cpp b/Source/WebCore/page/DOMWindow.cpp index be6c179..99c8fcd 100644 --- a/Source/WebCore/page/DOMWindow.cpp +++ b/Source/WebCore/page/DOMWindow.cpp @@ -43,6 +43,7 @@ #include "DOMStringList.h" #include "DOMTimer.h" #include "DOMTokenList.h" +#include "DOMURL.h" #include "Database.h" #include "DatabaseCallback.h" #include "DeviceMotionController.h" @@ -64,7 +65,6 @@ #include "History.h" #include "IDBFactory.h" #include "IDBFactoryBackendInterface.h" -#include "InspectorController.h" #include "InspectorInstrumentation.h" #include "KURL.h" #include "Location.h" @@ -627,9 +627,7 @@ Storage* DOMWindow::sessionStorage(ExceptionCode& ec) const return 0; RefPtr<StorageArea> storageArea = page->sessionStorage()->storageArea(document->securityOrigin()); -#if ENABLE(INSPECTOR) - page->inspectorController()->didUseDOMStorage(storageArea.get(), false, m_frame); -#endif + InspectorInstrumentation::didUseDOMStorage(page, storageArea.get(), false, m_frame); m_sessionStorage = Storage::create(m_frame, storageArea.release()); return m_sessionStorage.get(); @@ -657,9 +655,7 @@ Storage* DOMWindow::localStorage(ExceptionCode& ec) const return 0; RefPtr<StorageArea> storageArea = page->group().localStorage()->storageArea(document->securityOrigin()); -#if ENABLE(INSPECTOR) - page->inspectorController()->didUseDOMStorage(storageArea.get(), true, m_frame); -#endif + InspectorInstrumentation::didUseDOMStorage(page, storageArea.get(), true, m_frame); m_localStorage = Storage::create(m_frame, storageArea.release()); return m_localStorage.get(); @@ -1355,7 +1351,7 @@ void DOMWindow::scrollTo(int x, int y) const m_frame->document()->updateLayoutIgnorePendingStylesheets(); - FrameView* view = m_frame->view(); + RefPtr<FrameView> view = m_frame->view(); if (!view) return; @@ -1542,13 +1538,7 @@ void DOMWindow::dispatchLoadEvent() ownerElement->dispatchGenericEvent(ownerEvent.release()); } -#if ENABLE(INSPECTOR) - if (!frame() || !frame()->page()) - return; - - if (InspectorController* controller = frame()->page()->inspectorController()) - controller->mainResourceFiredLoadEvent(frame()->loader()->documentLoader(), url()); -#endif + InspectorInstrumentation::mainResourceFiredLoadEvent(frame(), url()); } bool DOMWindow::dispatchEvent(PassRefPtr<Event> prpEvent, PassRefPtr<EventTarget> prpTarget) @@ -1622,6 +1612,7 @@ EventTargetData* DOMWindow::ensureEventTargetData() return &m_eventTargetData; } +<<<<<<< HEAD #if ENABLE(BLOB) String DOMWindow::createObjectURL(Blob* blob) { @@ -1647,6 +1638,8 @@ void DOMWindow::clearDOMStorage() } #endif +======= +>>>>>>> WebKit.org @ r75993 void DOMWindow::setLocation(const String& urlString, DOMWindow* activeWindow, DOMWindow* firstWindow, SetLocationLocking locking) { Frame* activeFrame = activeWindow->frame(); @@ -1725,17 +1718,11 @@ Frame* DOMWindow::createWindow(const String& urlString, const AtomicString& fram { Frame* activeFrame = activeWindow->frame(); - // FIXME: It's much better for client API if a new window starts with a URL, here where we - // know what URL we are going to open. Unfortunately, this code passes the empty string - // for the URL, but there's a reason for that. Before loading we have to set up the opener, - // openedByDOM, and dialogArguments values. Also, to decide whether to use the URL we currently - // do an isInsecureScriptAccess call using the window we create, which can't be done before - // creating it. We'd have to resolve all those issues to pass the URL instead of an empty string. - // For whatever reason, Firefox uses the first frame to determine the outgoingReferrer. We replicate that behavior here. String referrer = firstFrame->loader()->outgoingReferrer(); - ResourceRequest request(KURL(), referrer); + KURL completedURL = urlString.isEmpty() ? KURL(ParsedURLString, "") : firstFrame->document()->completeURL(urlString); + ResourceRequest request(completedURL, referrer); FrameLoader::addHTTPOriginIfNeeded(request, firstFrame->loader()->outgoingOrigin()); FrameLoadRequest frameRequest(activeWindow->securityOrigin(), request, frameName); @@ -1755,8 +1742,6 @@ Frame* DOMWindow::createWindow(const String& urlString, const AtomicString& fram if (function) function(newFrame->domWindow(), functionContext); - KURL completedURL = urlString.isEmpty() ? KURL(ParsedURLString, "") : firstFrame->document()->completeURL(urlString); - if (created) newFrame->loader()->changeLocation(activeWindow->securityOrigin(), completedURL, referrer, false, false); else if (!urlString.isEmpty()) { @@ -1854,4 +1839,13 @@ void DOMWindow::showModalDialog(const String& urlString, const String& dialogFea dialogFrame->page()->chrome()->runModal(); } +#if ENABLE(BLOB) +DOMURL* DOMWindow::webkitURL() const +{ + if (!m_domURL) + m_domURL = DOMURL::create(this->scriptExecutionContext()); + return m_domURL.get(); +} +#endif + } // namespace WebCore diff --git a/Source/WebCore/page/DOMWindow.h b/Source/WebCore/page/DOMWindow.h index 8f434d6..3614627 100644 --- a/Source/WebCore/page/DOMWindow.h +++ b/Source/WebCore/page/DOMWindow.h @@ -34,12 +34,12 @@ namespace WebCore { class BarInfo; - class Blob; class CSSRuleList; class CSSStyleDeclaration; class Console; class DOMApplicationCache; class DOMSelection; + class DOMURL; class Database; class DatabaseCallback; class Document; @@ -343,8 +343,7 @@ namespace WebCore { using RefCounted<DOMWindow>::deref; #if ENABLE(BLOB) - String createObjectURL(Blob*); - void revokeObjectURL(const String&); + DOMURL* webkitURL() const; #endif #if ENABLE(DATABASE) @@ -469,6 +468,10 @@ namespace WebCore { #if ENABLE(WEB_TIMING) mutable RefPtr<Performance> m_performance; #endif + +#if ENABLE(BLOB) + mutable RefPtr<DOMURL> m_domURL; +#endif }; inline String DOMWindow::status() const diff --git a/Source/WebCore/page/DOMWindow.idl b/Source/WebCore/page/DOMWindow.idl index 5aab15e..77ffe41 100644 --- a/Source/WebCore/page/DOMWindow.idl +++ b/Source/WebCore/page/DOMWindow.idl @@ -779,10 +779,7 @@ module window { attribute [Conditional=BLOB] BlobBuilderConstructor BlobBuilder; -#if defined(ENABLE_BLOB) && ENABLE_BLOB - [ConvertNullStringTo=Undefined] DOMString createObjectURL(in Blob blob); - void revokeObjectURL(in DOMString blobURL); -#endif + readonly attribute [Conditional=BLOB] DOMURL webkitURL; #endif // defined(LANGUAGE_JAVASCRIPT) diff --git a/Source/WebCore/page/DragController.cpp b/Source/WebCore/page/DragController.cpp index d0e9a8c..7be708c 100644 --- a/Source/WebCore/page/DragController.cpp +++ b/Source/WebCore/page/DragController.cpp @@ -99,7 +99,7 @@ DragController::~DragController() m_client->dragControllerDestroyed(); } -static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragData, RefPtr<Range> context, +static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragData, Frame* frame, RefPtr<Range> context, bool allowPlainText, bool& chosePlainText) { ASSERT(dragData); @@ -108,19 +108,19 @@ static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD Document* document = context->ownerDocument(); ASSERT(document); if (document && dragData->containsCompatibleContent()) { - if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(document)) + if (PassRefPtr<DocumentFragment> fragment = dragData->asFragment(frame, context, allowPlainText, chosePlainText)) return fragment; - if (dragData->containsURL(DragData::DoNotConvertFilenames)) { + if (dragData->containsURL(frame, DragData::DoNotConvertFilenames)) { String title; - String url = dragData->asURL(DragData::DoNotConvertFilenames, &title); + String url = dragData->asURL(frame, DragData::DoNotConvertFilenames, &title); if (!url.isEmpty()) { RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::create(document); anchor->setHref(url); if (title.isEmpty()) { // Try the plain text first because the url might be normalized or escaped. if (dragData->containsPlainText()) - title = dragData->asPlainText(); + title = dragData->asPlainText(frame); if (title.isEmpty()) title = url; } @@ -135,15 +135,15 @@ static PassRefPtr<DocumentFragment> documentFragmentFromDragData(DragData* dragD } if (allowPlainText && dragData->containsPlainText()) { chosePlainText = true; - return createFragmentFromText(context.get(), dragData->asPlainText()).get(); + return createFragmentFromText(context.get(), dragData->asPlainText(frame)).get(); } return 0; } -bool DragController::dragIsMove(SelectionController* selection) +bool DragController::dragIsMove(SelectionController* selection, DragData* dragData) { - return m_documentUnderMouse == m_dragInitiator && selection->isContentEditable() && !isCopyKeyDown(); + return m_documentUnderMouse == m_dragInitiator && selection->isContentEditable() && !isCopyKeyDown(dragData); } // FIXME: This method is poorly named. We're just clearing the selection from the document this drag is exiting. @@ -214,7 +214,7 @@ bool DragController::performDrag(DragData* dragData) return false; m_client->willPerformDragDestinationAction(DragDestinationActionLoad, dragData); - m_page->mainFrame()->loader()->load(ResourceRequest(dragData->asURL()), false); + m_page->mainFrame()->loader()->load(ResourceRequest(dragData->asURL(m_page->mainFrame())), false); return true; } @@ -335,7 +335,7 @@ bool DragController::tryDocumentDrag(DragData* dragData, DragDestinationAction a } Frame* innerFrame = element->document()->frame(); - operation = dragIsMove(innerFrame->selection()) ? DragOperationMove : DragOperationCopy; + operation = dragIsMove(innerFrame->selection(), dragData) ? DragOperationMove : DragOperationCopy; return true; } // If we're not over an editable region, make sure we're clearing any prior drag cursor. @@ -372,7 +372,7 @@ static bool setSelectionToDragCaret(Frame* frame, VisibleSelection& dragCaret, R bool DragController::dispatchTextInputEventFor(Frame* innerFrame, DragData* dragData) { VisibleSelection dragCaret(m_page->dragCaretController()->selection()); - String text = dragCaret.isContentRichlyEditable() ? "" : dragData->asPlainText(); + String text = dragCaret.isContentRichlyEditable() ? "" : dragData->asPlainText(innerFrame); Node* target = innerFrame->editor()->findEventTargetFrom(dragCaret); ExceptionCode ec = 0; return target->dispatchEvent(TextEvent::createForDrop(innerFrame->domWindow(), text), ec); @@ -449,16 +449,16 @@ bool DragController::concludeEditDrag(DragData* dragData) return false; CachedResourceLoader* cachedResourceLoader = range->ownerDocument()->cachedResourceLoader(); cachedResourceLoader->setAllowStaleResources(true); - if (dragIsMove(innerFrame->selection()) || dragCaret.isContentRichlyEditable()) { + if (dragIsMove(innerFrame->selection(), dragData) || dragCaret.isContentRichlyEditable()) { bool chosePlainText = false; - RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragData, range, true, chosePlainText); + RefPtr<DocumentFragment> fragment = documentFragmentFromDragData(dragData, innerFrame, range, true, chosePlainText); if (!fragment || !innerFrame->editor()->shouldInsertFragment(fragment, range, EditorInsertActionDropped)) { cachedResourceLoader->setAllowStaleResources(false); return false; } m_client->willPerformDragDestinationAction(DragDestinationActionEdit, dragData); - if (dragIsMove(innerFrame->selection())) { + if (dragIsMove(innerFrame->selection(), dragData)) { // NSTextView behavior is to always smart delete on moving a selection, // but only to smart insert if the selection granularity is word granularity. bool smartDelete = innerFrame->editor()->smartInsertDeleteEnabled(); @@ -469,7 +469,7 @@ bool DragController::concludeEditDrag(DragData* dragData) applyCommand(ReplaceSelectionCommand::create(m_documentUnderMouse.get(), fragment, true, dragData->canSmartReplace(), chosePlainText)); } } else { - String text = dragData->asPlainText(); + String text = dragData->asPlainText(innerFrame); if (text.isEmpty() || !innerFrame->editor()->shouldInsertText(text, range.get(), EditorInsertActionDropped)) { cachedResourceLoader->setAllowStaleResources(false); return false; diff --git a/Source/WebCore/page/DragController.h b/Source/WebCore/page/DragController.h index 0e90a52..10bb5f8 100644 --- a/Source/WebCore/page/DragController.h +++ b/Source/WebCore/page/DragController.h @@ -99,8 +99,8 @@ namespace WebCore { bool tryDHTMLDrag(DragData*, DragOperation&); DragOperation dragOperation(DragData*); void cancelDrag(); - bool dragIsMove(SelectionController*); - bool isCopyKeyDown(); + bool dragIsMove(SelectionController*, DragData*); + bool isCopyKeyDown(DragData*); void mouseMovedIntoDocument(Document*); diff --git a/Source/WebCore/page/EditorClient.h b/Source/WebCore/page/EditorClient.h index 1ec0c7e..71ba3dd 100644 --- a/Source/WebCore/page/EditorClient.h +++ b/Source/WebCore/page/EditorClient.h @@ -157,6 +157,8 @@ public: virtual NSString* userVisibleString(NSURL*) = 0; virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector< RefPtr<ArchiveResource> >&) = 0; virtual void setInsertionPasteboard(NSPasteboard*) = 0; + virtual NSURL* canonicalizeURL(NSURL*) = 0; + virtual NSURL* canonicalizeURLString(NSString*) = 0; #ifdef BUILDING_ON_TIGER virtual NSArray* pasteboardTypesForSelection(Frame*) = 0; #endif diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp index a04bcf0..942f032 100644 --- a/Source/WebCore/page/EventHandler.cpp +++ b/Source/WebCore/page/EventHandler.cpp @@ -32,10 +32,12 @@ #include "Chrome.h" #include "ChromeClient.h" #include "Cursor.h" +#include "CursorList.h" #include "Document.h" #include "DragController.h" #include "Editor.h" #include "EventNames.h" +#include "EventQueue.h" #include "FloatPoint.h" #include "FloatRect.h" #include "FocusController.h" @@ -50,7 +52,7 @@ #include "HitTestRequest.h" #include "HitTestResult.h" #include "Image.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "KeyboardEvent.h" #include "MouseEvent.h" #include "MouseEventWithHitTestResults.h" @@ -1321,17 +1323,11 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) m_mousePressNode = mev.targetNode(); -#if ENABLE(INSPECTOR) - if (Page* page = m_frame->page()) { - InspectorController* inspector = page->inspectorController(); - if (inspector && inspector->enabled() && inspector->searchingForNodeInPage()) { - inspector->handleMousePress(); - invalidateClick(); - return true; - } + if (InspectorInstrumentation::handleMousePress(m_frame->page())) { + invalidateClick(); + return true; } -#endif - + Frame* subframe = subframeForHitTestResult(mev); if (subframe && passMousePressEventToSubframe(mev, subframe)) { // Start capturing future events for this frame. We only do this if we didn't clear @@ -2825,7 +2821,7 @@ void EventHandler::sendScrollEvent() { setFrameWasScrolledByUser(); if (m_frame->view() && m_frame->document()) - m_frame->document()->dispatchEvent(Event::create(eventNames().scrollEvent, true, false)); + m_frame->document()->eventQueue()->enqueueScrollEvent(m_frame->document(), EventQueue::ScrollEventDocumentTarget); } void EventHandler::setFrameWasScrolledByUser() diff --git a/Source/WebCore/page/Frame.cpp b/Source/WebCore/page/Frame.cpp index 11a86c6..4c7c6b7 100644 --- a/Source/WebCore/page/Frame.cpp +++ b/Source/WebCore/page/Frame.cpp @@ -979,6 +979,18 @@ void Frame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor } } +#if USE(ACCELERATED_COMPOSITING) +void Frame::updateContentsScale(float scale) +{ + for (Frame* child = tree()->firstChild(); child; child = child->tree()->nextSibling()) + child->updateContentsScale(scale); + + RenderView* root = contentRenderer(); + if (root && root->compositor()) + root->compositor()->updateContentsScale(scale); +} +#endif + void Frame::scalePage(float scale, const IntPoint& origin) { Document* document = this->document(); @@ -992,6 +1004,10 @@ void Frame::scalePage(float scale, const IntPoint& origin) document->recalcStyle(Node::Force); +#if USE(ACCELERATED_COMPOSITING) + updateContentsScale(scale); +#endif + if (FrameView* view = this->view()) { if (document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout()) view->layout(); diff --git a/Source/WebCore/page/Frame.h b/Source/WebCore/page/Frame.h index 4928742..a1e5c10 100644 --- a/Source/WebCore/page/Frame.h +++ b/Source/WebCore/page/Frame.h @@ -35,6 +35,7 @@ #include "EventHandler.h" #include "FrameLoader.h" #include "FrameTree.h" +#include "NavigationScheduler.h" #include "SelectionController.h" #include "ScriptController.h" #include "UserScriptTypes.h" @@ -207,6 +208,10 @@ namespace WebCore { void injectUserScriptsForWorld(DOMWrapperWorld*, const UserScriptVector&, UserScriptInjectionTime); void lifeSupportTimerFired(Timer<Frame>*); +#if USE(ACCELERATED_COMPOSITING) + void updateContentsScale(float); +#endif + HashSet<FrameDestructionObserver*> m_destructionObservers; Page* m_page; diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp index 926d943..fdf01ec 100644 --- a/Source/WebCore/page/FrameView.cpp +++ b/Source/WebCore/page/FrameView.cpp @@ -566,6 +566,24 @@ void FrameView::updateCompositingLayers() #endif } +void FrameView::syncCompositingStateForThisFrame() +{ + if (RenderView* view = m_frame->contentRenderer()) + view->compositor()->flushPendingLayerChanges(); + +#if ENABLE(FULLSCREEN_API) + // The fullScreenRenderer's graphicsLayer has been re-parented, and the above recursive syncCompositingState + // call will not cause the subtree under it to repaint. Explicitly call the syncCompositingState on + // the fullScreenRenderer's graphicsLayer here: + Document* document = m_frame->document(); + if (isDocumentRunningFullScreenAnimation(document)) { + RenderLayerBacking* backing = document->fullScreenRenderer()->layer()->backing(); + if (GraphicsLayer* fullScreenLayer = backing->graphicsLayer()) + fullScreenLayer->syncCompositingState(); + } +#endif +} + void FrameView::setNeedsOneShotDrawingSynchronization() { Page* page = frame() ? frame()->page() : 0; @@ -655,21 +673,8 @@ bool FrameView::syncCompositingStateRecursive() if (needsLayout()) return false; - if (GraphicsLayer* rootLayer = contentRenderer->compositor()->rootPlatformLayer()) - rootLayer->syncCompositingState(); + syncCompositingStateForThisFrame(); -#if ENABLE(FULLSCREEN_API) - // The fullScreenRenderer's graphicsLayer has been re-parented, and the above recursive syncCompositingState - // call will not cause the subtree under it to repaint. Explicitly call the syncCompositingState on - // the fullScreenRenderer's graphicsLayer here: - Document* document = m_frame->document(); - if (isDocumentRunningFullScreenAnimation(document)) { - RenderLayerBacking* backing = document->fullScreenRenderer()->layer()->backing(); - if (GraphicsLayer* fullScreenLayer = backing->graphicsLayer()) - fullScreenLayer->syncCompositingState(); - } -#endif - bool allSubframesSynced = true; const HashSet<RefPtr<Widget> >* viewChildren = children(); HashSet<RefPtr<Widget> >::const_iterator end = viewChildren->end(); @@ -2231,20 +2236,8 @@ void FrameView::paintContents(GraphicsContext* p, const IntRect& rect) return; #if USE(ACCELERATED_COMPOSITING) - if (!p->paintingDisabled()) { - if (GraphicsLayer* rootLayer = contentRenderer->compositor()->rootPlatformLayer()) - rootLayer->syncCompositingState(); -#if ENABLE(FULLSCREEN_API) - // The fullScreenRenderer's graphicsLayer has been re-parented, and the above recursive syncCompositingState - // call will not cause the subtree under it to repaint. Explicitly call the syncCompositingState on - // the fullScreenRenderer's graphicsLayer here: - if (isDocumentRunningFullScreenAnimation(document)) { - RenderLayerBacking* backing = document->fullScreenRenderer()->layer()->backing(); - if (GraphicsLayer* fullScreenLayer = backing->graphicsLayer()) - fullScreenLayer->syncCompositingState(); - } -#endif - } + if (!p->paintingDisabled()) + syncCompositingStateForThisFrame(); #endif PaintBehavior oldPaintBehavior = m_paintBehavior; diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h index ed45d00..bdeab90 100644 --- a/Source/WebCore/page/FrameView.h +++ b/Source/WebCore/page/FrameView.h @@ -103,6 +103,7 @@ public: #if USE(ACCELERATED_COMPOSITING) void updateCompositingLayers(); + void syncCompositingStateForThisFrame(); // Called when changes to the GraphicsLayer hierarchy have to be synchronized with // content rendered via the normal painting path. diff --git a/Source/WebCore/page/GeolocationController.cpp b/Source/WebCore/page/GeolocationController.cpp index 28d522d..764b913 100644 --- a/Source/WebCore/page/GeolocationController.cpp +++ b/Source/WebCore/page/GeolocationController.cpp @@ -41,8 +41,12 @@ GeolocationController::GeolocationController(Page* page, GeolocationClient* clie GeolocationController::~GeolocationController() { - if (m_client) + if (m_client) { + if (!m_observers.isEmpty()) + m_client->stopUpdating(); + m_client->geolocationDestroyed(); + } } void GeolocationController::addObserver(Geolocation* observer, bool enableHighAccuracy) diff --git a/Source/WebCore/page/Page.cpp b/Source/WebCore/page/Page.cpp index 5b87051..b864aa2 100644 --- a/Source/WebCore/page/Page.cpp +++ b/Source/WebCore/page/Page.cpp @@ -47,6 +47,7 @@ #include "HTMLElement.h" #include "HistoryItem.h" #include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Logging.h" #include "MediaCanStartListener.h" #include "Navigator.h" @@ -94,6 +95,7 @@ #include "GeolocationController.h" #endif +<<<<<<< HEAD #if ENABLE(INSPECTOR) && ENABLE(OFFLINE_WEB_APPLICATIONS) #include "InspectorApplicationCacheAgent.h" #endif @@ -102,6 +104,8 @@ #include "PackageNotifier.h" #endif +======= +>>>>>>> WebKit.org @ r75993 namespace WebCore { static HashSet<Page*>* allPages; @@ -114,19 +118,12 @@ 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 + InspectorInstrumentation::networkStateChanged(*it); } AtomicString eventName = networkStateNotifier().onLine() ? eventNames().onlineEvent : eventNames().offlineEvent; @@ -227,10 +224,8 @@ Page::~Page() frame->pageDestroyed(); m_editorClient->pageDestroyed(); - -#if ENABLE(INSPECTOR) - m_inspectorController->inspectedPageDestroyed(); -#endif + + InspectorInstrumentation::inspectedPageDestroyed(this); backForward()->close(); diff --git a/Source/WebCore/page/PerformanceTiming.cpp b/Source/WebCore/page/PerformanceTiming.cpp index fb8bfb7..76b410a 100644 --- a/Source/WebCore/page/PerformanceTiming.cpp +++ b/Source/WebCore/page/PerformanceTiming.cpp @@ -227,7 +227,7 @@ unsigned long long PerformanceTiming::connectEnd() const return resourceLoadTimeRelativeToAbsolute(connectEnd); } -unsigned long long PerformanceTiming::sslHandshakeStart() const +unsigned long long PerformanceTiming::secureConnectionStart() const { DocumentLoader* loader = documentLoader(); if (!loader) diff --git a/Source/WebCore/page/PerformanceTiming.h b/Source/WebCore/page/PerformanceTiming.h index 9c35672..0c37383 100644 --- a/Source/WebCore/page/PerformanceTiming.h +++ b/Source/WebCore/page/PerformanceTiming.h @@ -61,7 +61,7 @@ public: unsigned long long domainLookupEnd() const; unsigned long long connectStart() const; unsigned long long connectEnd() const; - unsigned long long sslHandshakeStart() const; + unsigned long long secureConnectionStart() const; unsigned long long requestStart() const; unsigned long long responseStart() const; unsigned long long responseEnd() const; diff --git a/Source/WebCore/page/PerformanceTiming.idl b/Source/WebCore/page/PerformanceTiming.idl index a0f08e2..dacf93b 100644 --- a/Source/WebCore/page/PerformanceTiming.idl +++ b/Source/WebCore/page/PerformanceTiming.idl @@ -42,7 +42,7 @@ module window { readonly attribute unsigned long long domainLookupEnd; readonly attribute unsigned long long connectStart; readonly attribute unsigned long long connectEnd; - readonly attribute unsigned long long sslHandshakeStart; + readonly attribute unsigned long long secureConnectionStart; readonly attribute unsigned long long requestStart; readonly attribute unsigned long long responseStart; readonly attribute unsigned long long responseEnd; diff --git a/Source/WebCore/page/PrintContext.cpp b/Source/WebCore/page/PrintContext.cpp index f051ead..e82420d 100644 --- a/Source/WebCore/page/PrintContext.cpp +++ b/Source/WebCore/page/PrintContext.cpp @@ -28,10 +28,21 @@ #include "RenderView.h" #include <wtf/text/StringConcatenate.h> -using namespace WebCore; - namespace WebCore { +// By imaging to a width a little wider than the available pixels, +// thin pages will be scaled down a little, matching the way they +// print in IE and Camino. This lets them use fewer sheets than they +// would otherwise, which is presumably why other browsers do this. +// Wide pages will be scaled down more than this. +const float printingMinimumShrinkFactor = 1.25f; + +// This number determines how small we are willing to reduce the page content +// in order to accommodate the widest line. If the page would have to be +// reduced smaller to make the widest line fit, we just clip instead (this +// behavior matches MacIE and Mozilla, at least) +const float printingMaximumShrinkFactor = 2; + PrintContext::PrintContext(Frame* frame) : m_frame(frame) , m_isPrinting(false) @@ -42,20 +53,19 @@ PrintContext::~PrintContext() { if (m_isPrinting) end(); - m_pageRects.clear(); } -int PrintContext::pageCount() const +size_t PrintContext::pageCount() const { return m_pageRects.size(); } -const IntRect& PrintContext::pageRect(int pageNumber) const +const IntRect& PrintContext::pageRect(size_t pageNumber) const { return m_pageRects[pageNumber]; } -void PrintContext::computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight) +void PrintContext::computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight, bool allowHorizontalTiling) { m_pageRects.clear(); outPageHeight = 0; @@ -73,7 +83,7 @@ void PrintContext::computePageRects(const FloatRect& printRect, float headerHeig float ratio = printRect.height() / printRect.width(); float pageWidth = view->docWidth(); - float pageHeight = pageWidth * ratio; + float pageHeight = floorf(pageWidth * ratio); outPageHeight = pageHeight; // this is the height of the page adjusted by margins pageHeight -= headerHeight + footerHeight; @@ -82,16 +92,16 @@ void PrintContext::computePageRects(const FloatRect& printRect, float headerHeig return; } - computePageRectsWithPageSizeInternal(FloatSize(pageWidth / userScaleFactor, pageHeight / userScaleFactor), false); + computePageRectsWithPageSizeInternal(FloatSize(pageWidth / userScaleFactor, pageHeight / userScaleFactor), allowHorizontalTiling); } -void PrintContext::computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalMultiPages) +void PrintContext::computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling) { m_pageRects.clear(); - computePageRectsWithPageSizeInternal(pageSizeInPixels, allowHorizontalMultiPages); + computePageRectsWithPageSizeInternal(pageSizeInPixels, allowHorizontalTiling); } -void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowHorizontalMultiPages) +void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling) { if (!m_frame->document() || !m_frame->view() || !m_frame->document()->renderer()) return; @@ -105,7 +115,7 @@ void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz unsigned pageCount = ceilf((float)docRect.height() / pageHeight); for (unsigned i = 0; i < pageCount; ++i) { - if (allowHorizontalMultiPages) { + if (allowHorizontalTiling) { for (int currentX = docRect.x(); currentX < docRect.right(); currentX += pageWidth) m_pageRects.append(IntRect(currentX, docRect.y() + i * pageHeight, pageWidth, pageHeight)); } else @@ -115,28 +125,28 @@ void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz void PrintContext::begin(float width, float height) { - ASSERT(!m_isPrinting); + // This function can be called multiple times to adjust printing parameters without going back to screen mode. m_isPrinting = true; - // By imaging to a width a little wider than the available pixels, - // thin pages will be scaled down a little, matching the way they - // print in IE and Camino. This lets them use fewer sheets than they - // would otherwise, which is presumably why other browsers do this. - // Wide pages will be scaled down more than this. - const float PrintingMinimumShrinkFactor = 1.25f; - - // This number determines how small we are willing to reduce the page content - // in order to accommodate the widest line. If the page would have to be - // reduced smaller to make the widest line fit, we just clip instead (this - // behavior matches MacIE and Mozilla, at least) - const float PrintingMaximumShrinkFactor = 2.0f; - - float minLayoutWidth = width * PrintingMinimumShrinkFactor; - float minLayoutHeight = height * PrintingMinimumShrinkFactor; - - // FIXME: This will modify the rendering of the on-screen frame. - // Could lead to flicker during printing. - m_frame->setPrinting(true, FloatSize(minLayoutWidth, minLayoutHeight), PrintingMaximumShrinkFactor / PrintingMinimumShrinkFactor, Frame::AdjustViewSize); + float minLayoutWidth = width * printingMinimumShrinkFactor; + float minLayoutHeight = height * printingMinimumShrinkFactor; + + // This changes layout, so callers need to make sure that they don't paint to screen while in printing mode. + m_frame->setPrinting(true, FloatSize(minLayoutWidth, minLayoutHeight), printingMaximumShrinkFactor / printingMinimumShrinkFactor, Frame::AdjustViewSize); +} + +float PrintContext::computeAutomaticScaleFactor(float availablePaperWidth) +{ + if (!m_frame->view()) + return 1; + + float viewWidth = m_frame->view()->contentsWidth(); + if (viewWidth < 1) + return 1; + + float maxShrinkToFitScaleFactor = 1 / printingMaximumShrinkFactor; + float shrinkToFitScaleFactor = availablePaperWidth / viewWidth; + return max(maxShrinkToFitScaleFactor, shrinkToFitScaleFactor); } void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width) @@ -152,6 +162,16 @@ void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width) ctx.restore(); } +void PrintContext::spoolRect(GraphicsContext& ctx, const IntRect& rect) +{ + ctx.save(); + ctx.scale(FloatSize(1, -1)); + ctx.translate(0, -rect.height()); + ctx.clip(rect); + m_frame->view()->paintContents(&ctx, rect); + ctx.restore(); +} + void PrintContext::end() { ASSERT(m_isPrinting); @@ -189,7 +209,7 @@ int PrintContext::pageNumberForElement(Element* element, const FloatSize& pageSi int top = box->offsetTop(); int left = box->offsetLeft(); - int pageNumber = 0; + size_t pageNumber = 0; for (; pageNumber < printContext.pageCount(); pageNumber++) { const IntRect& page = printContext.pageRect(pageNumber); if (page.x() <= left && left < page.right() && page.y() <= top && top < page.bottom()) diff --git a/Source/WebCore/page/PrintContext.h b/Source/WebCore/page/PrintContext.h index ceda892..ce2554a 100644 --- a/Source/WebCore/page/PrintContext.h +++ b/Source/WebCore/page/PrintContext.h @@ -38,23 +38,38 @@ public: PrintContext(Frame*); ~PrintContext(); - int pageCount() const; - const IntRect& pageRect(int pageNumber) const; + Frame* frame() const { return m_frame; } + + // Break up a page into rects without relayout. + // FIXME: This means that CSS page breaks won't be on page boundary if the size is different than what was passed to begin(). That's probably not always desirable. + // FIXME: Header and footer height should be applied before layout, not after. + // FIXME: The printRect argument is only used to determine page aspect ratio, it would be better to pass a FloatSize with page dimensions instead. + void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight, bool allowHorizontalTiling = false); + + // Deprecated. Page size computation is already in this class, clients shouldn't be copying it. + void computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling); + + // These are only valid after page rects are computed. + size_t pageCount() const; + const IntRect& pageRect(size_t pageNumber) const; const Vector<IntRect>& pageRects() const { return m_pageRects; } - void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight); - void computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalMultiPages); + float computeAutomaticScaleFactor(float availablePaperWidth); - // TODO: eliminate width param + // Enter print mode, updating layout for new page size. + // This function can be called multiple times to apply new print options without going back to screen mode. void begin(float width, float height = 0); - // TODO: eliminate width param + // FIXME: eliminate width argument. void spoolPage(GraphicsContext& ctx, int pageNumber, float width); + void spoolRect(GraphicsContext& ctx, const IntRect&); + + // Return to screen mode. void end(); // Used by layout tests. - static int pageNumberForElement(Element*, const FloatSize& pageSizeInPixels); + static int pageNumberForElement(Element*, const FloatSize& pageSizeInPixels); // Returns -1 if page isn't found. static String pageProperty(Frame* frame, const char* propertyName, int pageNumber); static bool isPageBoxVisible(Frame* frame, int pageNumber); static String pageSizeAndMarginsInPixels(Frame* frame, int pageNumber, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft); @@ -69,7 +84,7 @@ protected: Vector<IntRect> m_pageRects; private: - void computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowHorizontalMultiPages); + void computePageRectsWithPageSizeInternal(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling); // Used to prevent misuses of begin() and end() (e.g., call end without begin). bool m_isPrinting; diff --git a/Source/WebCore/page/SecurityOrigin.cpp b/Source/WebCore/page/SecurityOrigin.cpp index 16de640..789fdf9 100644 --- a/Source/WebCore/page/SecurityOrigin.cpp +++ b/Source/WebCore/page/SecurityOrigin.cpp @@ -299,25 +299,30 @@ bool SecurityOrigin::isAccessWhiteListed(const SecurityOrigin* targetOrigin) con } return false; } - + +bool SecurityOrigin::isAccessToURLWhiteListed(const KURL& url) const +{ + RefPtr<SecurityOrigin> targetOrigin = SecurityOrigin::create(url); + return isAccessWhiteListed(targetOrigin.get()); +} + bool SecurityOrigin::canDisplay(const KURL& url) const { + String protocol = url.protocol().lower(); + #if ENABLE(BLOB) - if (url.protocolIs(BlobURL::blobProtocol())) + // FIXME: We should generalize this check. + if (protocol == BlobURL::blobProtocol()) return canRequest(url); #endif - if (!restrictAccessToLocal()) - return true; + if (SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(protocol)) + return m_protocol == protocol || isAccessToURLWhiteListed(url); - if (!SchemeRegistry::shouldTreatURLAsLocal(url.string())) - return true; + if (restrictAccessToLocal() && SchemeRegistry::shouldTreatURLSchemeAsLocal(protocol)) + return canLoadLocalResources() || isAccessToURLWhiteListed(url); - RefPtr<SecurityOrigin> targetOrigin = SecurityOrigin::create(url); - if (isAccessWhiteListed(targetOrigin.get())) - return true; - - return canLoadLocalResources(); + return true; } void SecurityOrigin::grantLoadLocalResources() diff --git a/Source/WebCore/page/SecurityOrigin.h b/Source/WebCore/page/SecurityOrigin.h index 61f6ab8..f27c593 100644 --- a/Source/WebCore/page/SecurityOrigin.h +++ b/Source/WebCore/page/SecurityOrigin.h @@ -193,9 +193,11 @@ private: SecurityOrigin(const KURL&, SandboxFlags); explicit SecurityOrigin(const SecurityOrigin*); - bool passesFileCheck(const SecurityOrigin* other) const; + // FIXME: Rename this function to something more semantic. + bool passesFileCheck(const SecurityOrigin*) const; - bool isAccessWhiteListed(const SecurityOrigin* targetOrigin) const; + bool isAccessWhiteListed(const SecurityOrigin*) const; + bool isAccessToURLWhiteListed(const KURL&) const; SandboxFlags m_sandboxFlags; String m_protocol; diff --git a/Source/WebCore/page/android/DragControllerAndroid.cpp b/Source/WebCore/page/android/DragControllerAndroid.cpp index b20ab60..e67daaf 100644 --- a/Source/WebCore/page/android/DragControllerAndroid.cpp +++ b/Source/WebCore/page/android/DragControllerAndroid.cpp @@ -32,7 +32,7 @@ namespace WebCore { -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return false; } diff --git a/Source/WebCore/page/animation/KeyframeAnimation.cpp b/Source/WebCore/page/animation/KeyframeAnimation.cpp index a499188..5f19fe4 100644 --- a/Source/WebCore/page/animation/KeyframeAnimation.cpp +++ b/Source/WebCore/page/animation/KeyframeAnimation.cpp @@ -189,7 +189,7 @@ void KeyframeAnimation::animate(CompositeAnimation*, RenderObject*, const Render // Get the from/to styles and progress between const RenderStyle* fromStyle = 0; const RenderStyle* toStyle = 0; - double progress; + double progress = 0.0; fetchIntervalEndpointsForProperty(property, fromStyle, toStyle, progress); bool needsAnim = blendProperties(this, property, animatedStyle.get(), fromStyle, toStyle, progress); @@ -226,7 +226,7 @@ void KeyframeAnimation::getAnimatedStyle(RefPtr<RenderStyle>& animatedStyle) // Get the from/to styles and progress between const RenderStyle* fromStyle = 0; const RenderStyle* toStyle = 0; - double progress; + double progress = 0.0; fetchIntervalEndpointsForProperty(property, fromStyle, toStyle, progress); blendProperties(this, property, animatedStyle.get(), fromStyle, toStyle, progress); diff --git a/Source/WebCore/page/brew/DragControllerBrew.cpp b/Source/WebCore/page/brew/DragControllerBrew.cpp index ef89821..5878c24 100644 --- a/Source/WebCore/page/brew/DragControllerBrew.cpp +++ b/Source/WebCore/page/brew/DragControllerBrew.cpp @@ -41,7 +41,7 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return false; } diff --git a/Source/WebCore/page/chromium/DragControllerChromium.cpp b/Source/WebCore/page/chromium/DragControllerChromium.cpp index de53d19..e17972d 100644 --- a/Source/WebCore/page/chromium/DragControllerChromium.cpp +++ b/Source/WebCore/page/chromium/DragControllerChromium.cpp @@ -51,10 +51,10 @@ DragOperation DragController::dragOperation(DragData* dragData) // attached sheet If this can be determined from within WebCore // operationForDrag can be pulled into WebCore itself ASSERT(dragData); - return dragData->containsURL() && !m_didInitiateDrag ? DragOperationCopy : DragOperationNone; + return dragData->containsURL(0) && !m_didInitiateDrag ? DragOperationCopy : DragOperationNone; } -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { // FIXME: This should not be OS specific. Delegate to the embedder instead. #if OS(WINDOWS) diff --git a/Source/WebCore/page/chromium/FrameChromium.cpp b/Source/WebCore/page/chromium/FrameChromium.cpp index 15ff8b4..f6f47a6 100644 --- a/Source/WebCore/page/chromium/FrameChromium.cpp +++ b/Source/WebCore/page/chromium/FrameChromium.cpp @@ -28,6 +28,7 @@ #include "Document.h" #include "FloatRect.h" +#include "GraphicsContext.h" #include "ImageBuffer.h" #include "RenderView.h" #include "Settings.h" diff --git a/Source/WebCore/page/efl/DragControllerEfl.cpp b/Source/WebCore/page/efl/DragControllerEfl.cpp index 0c5f002..f5c0ecc 100644 --- a/Source/WebCore/page/efl/DragControllerEfl.cpp +++ b/Source/WebCore/page/efl/DragControllerEfl.cpp @@ -43,14 +43,14 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return false; } DragOperation DragController::dragOperation(DragData* dragData) { - if (dragData->containsURL()) + if (dragData->containsURL(0)) return DragOperationCopy; return DragOperationNone; diff --git a/Source/WebCore/page/gtk/DragControllerGtk.cpp b/Source/WebCore/page/gtk/DragControllerGtk.cpp index 5f9044f..29749e2 100644 --- a/Source/WebCore/page/gtk/DragControllerGtk.cpp +++ b/Source/WebCore/page/gtk/DragControllerGtk.cpp @@ -42,7 +42,7 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return false; } @@ -50,7 +50,7 @@ bool DragController::isCopyKeyDown() DragOperation DragController::dragOperation(DragData* dragData) { //FIXME: This logic is incomplete - if (dragData->containsURL()) + if (dragData->containsURL(0)) return DragOperationCopy; return DragOperationNone; diff --git a/Source/WebCore/page/haiku/DragControllerHaiku.cpp b/Source/WebCore/page/haiku/DragControllerHaiku.cpp index ef08ac2..de8ca81 100644 --- a/Source/WebCore/page/haiku/DragControllerHaiku.cpp +++ b/Source/WebCore/page/haiku/DragControllerHaiku.cpp @@ -44,7 +44,7 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { if (modifiers() & B_COMMAND_KEY) return true; diff --git a/Source/WebCore/page/mac/DragControllerMac.mm b/Source/WebCore/page/mac/DragControllerMac.mm index 05c8e09..9b61510 100644 --- a/Source/WebCore/page/mac/DragControllerMac.mm +++ b/Source/WebCore/page/mac/DragControllerMac.mm @@ -42,19 +42,19 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData* dragData) { - return [[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask; + return dragData->flags() & DragApplicationIsCopyKeyDown; } DragOperation DragController::dragOperation(DragData* dragData) { ASSERT(dragData); - if ([NSApp modalWindow] || !dragData->containsURL()) + + if ((dragData->flags() & DragApplicationIsModal) || !dragData->containsURL(m_page->mainFrame())) return DragOperationNone; - if (!m_documentUnderMouse || (![[m_page->mainFrame()->view()->getOuterView() window] attachedSheet] - && [dragData->platformData() draggingSource] != m_page->mainFrame()->view()->getOuterView())) + if (!m_documentUnderMouse || (!(dragData->flags() & (DragApplicationHasAttachedSheet | DragApplicationIsSource)))) return DragOperationCopy; return DragOperationNone; diff --git a/Source/WebCore/page/mac/FrameMac.mm b/Source/WebCore/page/mac/FrameMac.mm index d4e4098..b49fffb 100644 --- a/Source/WebCore/page/mac/FrameMac.mm +++ b/Source/WebCore/page/mac/FrameMac.mm @@ -255,50 +255,33 @@ NSString* Frame::matchLabelsAgainstElement(NSArray* labels, Element* element) NSImage* Frame::imageFromRect(NSRect rect) const { - NSView* view = m_view->documentView(); - if (!view) - return nil; - if (![view respondsToSelector:@selector(drawSingleRect:)]) - return nil; + PaintBehavior oldBehavior = m_view->paintBehavior(); + m_view->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers); - PaintBehavior oldPaintBehavior = m_view->paintBehavior(); - m_view->setPaintBehavior(oldPaintBehavior | PaintBehaviorFlattenCompositingLayers); - BEGIN_BLOCK_OBJC_EXCEPTIONS; - NSRect bounds = [view bounds]; - - // Round image rect size in window coordinate space to avoid pixel cracks at HiDPI (4622794) - rect = [view convertRect:rect toView:nil]; - rect.size.height = roundf(rect.size.height); - rect.size.width = roundf(rect.size.width); - rect = [view convertRect:rect fromView:nil]; - NSImage* resultImage = [[[NSImage alloc] initWithSize:rect.size] autorelease]; - + if (rect.size.width != 0 && rect.size.height != 0) { [resultImage setFlipped:YES]; [resultImage lockFocus]; - CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; - CGContextSaveGState(context); - CGContextTranslateCTM(context, bounds.origin.x - rect.origin.x, bounds.origin.y - rect.origin.y); - // Note: Must not call drawRect: here, because drawRect: assumes that it's called from AppKit's - // display machinery. It calls getRectsBeingDrawn:count:, which can only be called inside - // when a real AppKit display is underway. - [view drawSingleRect:rect]; + GraphicsContext graphicsContext((CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]); + graphicsContext.save(); + graphicsContext.translate(-rect.origin.x, -rect.origin.y); + m_view->paintContents(&graphicsContext, IntRect(rect)); + graphicsContext.restore(); - CGContextRestoreGState(context); [resultImage unlockFocus]; [resultImage setFlipped:NO]; } - - m_view->setPaintBehavior(oldPaintBehavior); + + m_view->setPaintBehavior(oldBehavior); return resultImage; - + END_BLOCK_OBJC_EXCEPTIONS; - m_view->setPaintBehavior(oldPaintBehavior); + m_view->setPaintBehavior(oldBehavior); return nil; } diff --git a/Source/WebCore/page/qt/DragControllerQt.cpp b/Source/WebCore/page/qt/DragControllerQt.cpp index 33815b5..cdea55b 100644 --- a/Source/WebCore/page/qt/DragControllerQt.cpp +++ b/Source/WebCore/page/qt/DragControllerQt.cpp @@ -43,7 +43,7 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return false; } @@ -51,7 +51,7 @@ bool DragController::isCopyKeyDown() DragOperation DragController::dragOperation(DragData* dragData) { //FIXME: This logic is incomplete - if (dragData->containsURL()) + if (dragData->containsURL(0)) return DragOperationCopy; return DragOperationNone; diff --git a/Source/WebCore/page/qt/FrameQt.cpp b/Source/WebCore/page/qt/FrameQt.cpp index 467592c..bb577e0 100644 --- a/Source/WebCore/page/qt/FrameQt.cpp +++ b/Source/WebCore/page/qt/FrameQt.cpp @@ -24,6 +24,7 @@ #include "config.h" #include "Frame.h" #include "FrameView.h" +#include "GraphicsContext.h" #include "Image.h" #include "ImageBuffer.h" diff --git a/Source/WebCore/page/win/DragControllerWin.cpp b/Source/WebCore/page/win/DragControllerWin.cpp index f0404ff..6b1cd3e 100644 --- a/Source/WebCore/page/win/DragControllerWin.cpp +++ b/Source/WebCore/page/win/DragControllerWin.cpp @@ -47,10 +47,10 @@ DragOperation DragController::dragOperation(DragData* dragData) //If this can be determined from within WebCore operationForDrag can be pulled into //WebCore itself ASSERT(dragData); - return dragData->containsURL() && !m_didInitiateDrag ? DragOperationCopy : DragOperationNone; + return dragData->containsURL(0) && !m_didInitiateDrag ? DragOperationCopy : DragOperationNone; } -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { return ::GetAsyncKeyState(VK_CONTROL); } diff --git a/Source/WebCore/page/wx/DragControllerWx.cpp b/Source/WebCore/page/wx/DragControllerWx.cpp index c288a01..4a4d064 100644 --- a/Source/WebCore/page/wx/DragControllerWx.cpp +++ b/Source/WebCore/page/wx/DragControllerWx.cpp @@ -43,7 +43,7 @@ const int DragController::DragIconBottomInset = 3; const float DragController::DragImageAlpha = 0.75f; -bool DragController::isCopyKeyDown() +bool DragController::isCopyKeyDown(DragData*) { notImplemented(); return false; diff --git a/Source/WebCore/platform/ContextMenuItem.h b/Source/WebCore/platform/ContextMenuItem.h index 441829f..145d795 100644 --- a/Source/WebCore/platform/ContextMenuItem.h +++ b/Source/WebCore/platform/ContextMenuItem.h @@ -42,7 +42,6 @@ class NSMenuItem; #elif PLATFORM(WIN) typedef struct tagMENUITEMINFOW MENUITEMINFO; #elif PLATFORM(GTK) -#include <GRefPtr.h> typedef struct _GtkMenuItem GtkMenuItem; #elif PLATFORM(QT) #include <QAction> @@ -288,8 +287,6 @@ namespace WebCore { #else #if PLATFORM(MAC) RetainPtr<NSMenuItem> m_platformDescription; -#elif PLATFORM(GTK) - GRefPtr<GtkMenuItem> m_platformDescription; #else PlatformMenuItemDescription m_platformDescription; #endif diff --git a/Source/WebCore/platform/DragData.cpp b/Source/WebCore/platform/DragData.cpp index 4518909..a61feab 100644 --- a/Source/WebCore/platform/DragData.cpp +++ b/Source/WebCore/platform/DragData.cpp @@ -31,13 +31,24 @@ namespace WebCore { #if !PLATFORM(MAC) DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, - DragOperation sourceOperationMask) + DragOperation sourceOperationMask, DragApplicationFlags flags) : m_clientPosition(clientPosition) , m_globalPosition(globalPosition) , m_platformDragData(data) , m_draggingSourceOperationMask(sourceOperationMask) + , m_applicationFlags(flags) { } + +DragData::DragData(const String&, const IntPoint& clientPosition, const IntPoint& globalPosition, + DragOperation sourceOperationMask, DragApplicationFlags flags) + : m_clientPosition(clientPosition) + , m_globalPosition(globalPosition) + , m_platformDragData(0) + , m_draggingSourceOperationMask(sourceOperationMask) + , m_applicationFlags(flags) +{ +} #endif } // namespace WebCore diff --git a/Source/WebCore/platform/DragData.h b/Source/WebCore/platform/DragData.h index d90a424..3bd27fc 100644 --- a/Source/WebCore/platform/DragData.h +++ b/Source/WebCore/platform/DragData.h @@ -34,12 +34,15 @@ #include <wtf/Vector.h> #if PLATFORM(MAC) +#include <wtf/RetainPtr.h> #ifdef __OBJC__ #import <Foundation/Foundation.h> #import <AppKit/NSDragging.h> typedef id <NSDraggingInfo> DragDataRef; +@class NSPasteboard; #else typedef void* DragDataRef; +class NSPasteboard; #endif #elif PLATFORM(QT) QT_BEGIN_NAMESPACE @@ -68,54 +71,61 @@ typedef void* DragDataRef; namespace WebCore { - - class Document; - class DocumentFragment; - class KURL; - -#if PLATFORM(MAC) - class PasteboardHelper; -#endif +class Frame; +class DocumentFragment; +class KURL; +class Range; + +enum DragApplicationFlags { + DragApplicationNone = 0, + DragApplicationIsModal = 1, + DragApplicationIsSource = 2, + DragApplicationHasAttachedSheet = 4, + DragApplicationIsCopyKeyDown = 8 +}; - class DragData { - public: - enum FilenameConversionPolicy { DoNotConvertFilenames, ConvertFilenames }; +class DragData { +public: + enum FilenameConversionPolicy { DoNotConvertFilenames, ConvertFilenames }; + // clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left + DragData(DragDataRef, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone); + DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation, DragApplicationFlags = DragApplicationNone); + + const IntPoint& clientPosition() const { return m_clientPosition; } + const IntPoint& globalPosition() const { return m_globalPosition; } + DragApplicationFlags flags() { return m_applicationFlags; } + DragDataRef platformData() const { return m_platformDragData; } + DragOperation draggingSourceOperationMask() const { return m_draggingSourceOperationMask; } + bool containsURL(Frame*, FilenameConversionPolicy filenamePolicy = ConvertFilenames) const; + bool containsPlainText() const; + bool containsCompatibleContent() const; + String asURL(Frame*, FilenameConversionPolicy filenamePolicy = ConvertFilenames, String* title = 0) const; + String asPlainText(Frame*) const; + void asFilenames(Vector<String>&) const; + Color asColor() const; + PassRefPtr<DocumentFragment> asFragment(Frame*, PassRefPtr<Range> context, + bool allowPlainText, bool& chosePlainText) const; + bool canSmartReplace() const; + bool containsColor() const; + bool containsFiles() const; +private: + IntPoint m_clientPosition; + IntPoint m_globalPosition; + DragDataRef m_platformDragData; + DragOperation m_draggingSourceOperationMask; + DragApplicationFlags m_applicationFlags; #if PLATFORM(MAC) - //FIXME: In the future the WebKit functions provided by the helper class should be moved into WebCore, - //after which this constructor should be removed - DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, - DragOperation operation, PasteboardHelper*); -#else - //clientPosition is taken to be the position of the drag event within the target window, with (0,0) at the top left - DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, DragOperation operation); -#endif - const IntPoint& clientPosition() const { return m_clientPosition; } - const IntPoint& globalPosition() const { return m_globalPosition; } - DragDataRef platformData() const { return m_platformDragData; } - DragOperation draggingSourceOperationMask() const { return m_draggingSourceOperationMask; } - bool containsURL(FilenameConversionPolicy filenamePolicy = ConvertFilenames) const; - bool containsPlainText() const; - bool containsCompatibleContent() const; - String asURL(FilenameConversionPolicy filenamePolicy = ConvertFilenames, String* title = 0) const; - String asPlainText() const; - void asFilenames(Vector<String>&) const; - Color asColor() const; - PassRefPtr<DocumentFragment> asFragment(Document*) const; - bool canSmartReplace() const; - bool containsColor() const; - bool containsFiles() const; - private: - IntPoint m_clientPosition; - IntPoint m_globalPosition; - DragDataRef m_platformDragData; - DragOperation m_draggingSourceOperationMask; -#if PLATFORM(MAC) - PasteboardHelper* m_pasteboardHelper; + RetainPtr<NSPasteboard> m_pasteboard; #endif }; -} //namespace WebCore +} +<<<<<<< HEAD #endif //!DragData_h +======= +#endif // !DragData_h + +>>>>>>> WebKit.org @ r75993 diff --git a/Source/WebCore/platform/FileSystem.h b/Source/WebCore/platform/FileSystem.h index 3b65d34..4f088e1 100644 --- a/Source/WebCore/platform/FileSystem.h +++ b/Source/WebCore/platform/FileSystem.h @@ -195,6 +195,7 @@ bool safeCreateFile(const String&, CFDataRef); #if PLATFORM(GTK) String filenameToString(const char*); String filenameForDisplay(const String&); +CString applicationDirectoryPath(); #endif #if PLATFORM(CHROMIUM) diff --git a/Source/WebCore/platform/Pasteboard.h b/Source/WebCore/platform/Pasteboard.h index 7c50737..78a40b3 100644 --- a/Source/WebCore/platform/Pasteboard.h +++ b/Source/WebCore/platform/Pasteboard.h @@ -88,6 +88,8 @@ public: static void writeSelection(NSPasteboard* pasteboard, Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame); static void writeURL(NSPasteboard* pasteboard, NSArray* types, const KURL& url, const String& titleStr, Frame* frame); static void writePlainText(NSPasteboard* pasteboard, const String& text); + + Pasteboard(NSPasteboard *); #endif static Pasteboard* generalPasteboard(); @@ -97,11 +99,13 @@ public: void writeImage(Node*, const KURL&, const String& title); #if PLATFORM(MAC) void writeFileWrapperAsRTFDAttachment(NSFileWrapper*); + String asURL(Frame*); #endif void clear(); bool canSmartReplace(); PassRefPtr<DocumentFragment> documentFragment(Frame*, PassRefPtr<Range>, bool allowPlainText, bool& chosePlainText); String plainText(Frame* = 0); + #if PLATFORM(QT) || PLATFORM(CHROMIUM) bool isSelectionMode() const; void setSelectionMode(bool selectionMode); @@ -110,17 +114,17 @@ public: #if PLATFORM(GTK) void setHelper(PasteboardHelper*); PasteboardHelper* helper(); + ~Pasteboard(); #endif private: Pasteboard(); - ~Pasteboard(); #if PLATFORM(MAC) - Pasteboard(NSPasteboard *); RetainPtr<NSPasteboard> m_pasteboard; PassRefPtr<DocumentFragment> documentFragmentWithImageResource(Frame* frame, PassRefPtr<ArchiveResource> resource); PassRefPtr<DocumentFragment> documentFragmentWithRtf(Frame* frame, NSString* pboardType); + NSURL *getBestURL(Frame *); #endif #if PLATFORM(WIN) diff --git a/Source/WebCore/platform/PlatformWheelEvent.h b/Source/WebCore/platform/PlatformWheelEvent.h index 6747392..1e5cd53 100644 --- a/Source/WebCore/platform/PlatformWheelEvent.h +++ b/Source/WebCore/platform/PlatformWheelEvent.h @@ -68,8 +68,22 @@ namespace WebCore { // and synthesized in other cases where platforms generate line-by-line scrolling events. // The ScrollByPageWheelEvent indicates that the wheel event should scroll an entire page. In this case WebCore's built in paging behavior is used to page // up and down (you get the same behavior as if the user was clicking in a scrollbar track to page up or page down). Page scrolling only works in the vertical direction. - enum PlatformWheelEventGranularity { ScrollByPageWheelEvent, ScrollByPixelWheelEvent }; - + enum PlatformWheelEventGranularity { + ScrollByPageWheelEvent, + ScrollByPixelWheelEvent + }; + +#if PLATFORM(MAC) + enum PlatformWheelEventPhase { + PlatformWheelEventPhaseNone = 0, + PlatformWheelEventPhaseBegan = 1 << 1, + PlatformWheelEventPhaseStationary = 1 << 2, + PlatformWheelEventPhaseChanged = 1 << 3, + PlatformWheelEventPhaseEnded = 1 << 4, + PlatformWheelEventPhaseCancelled = 1 << 5, + }; +#endif + class PlatformWheelEvent { public: PlatformWheelEvent() @@ -83,6 +97,9 @@ namespace WebCore { , m_ctrlKey(false) , m_altKey(false) , m_metaKey(false) +#if PLATFORM(MAC) + , m_phase(PlatformWheelEventPhaseNone) +#endif { } @@ -128,10 +145,14 @@ namespace WebCore { PlatformWheelEvent(const Evas_Event_Mouse_Wheel*); #endif -#if PLATFORM(MAC) && defined(__OBJC__) +#if PLATFORM(MAC) +#if defined(__OBJC__) PlatformWheelEvent(NSEvent *, NSView *windowView); #endif + PlatformWheelEventPhase phase() const { return m_phase; } +#endif + #if PLATFORM(QT) PlatformWheelEvent(QWheelEvent*); PlatformWheelEvent(QGraphicsSceneWheelEvent*); @@ -164,6 +185,9 @@ namespace WebCore { bool m_ctrlKey; bool m_altKey; bool m_metaKey; +#if PLATFORM(MAC) + PlatformWheelEventPhase m_phase; +#endif }; } // namespace WebCore diff --git a/Source/WebCore/platform/SchemeRegistry.cpp b/Source/WebCore/platform/SchemeRegistry.cpp index 58df51a..71697cb 100644 --- a/Source/WebCore/platform/SchemeRegistry.cpp +++ b/Source/WebCore/platform/SchemeRegistry.cpp @@ -45,6 +45,12 @@ static URLSchemesMap& localURLSchemes() return localSchemes; } +static URLSchemesMap& displayIsolatedURLSchemes() +{ + DEFINE_STATIC_LOCAL(URLSchemesMap, displayIsolatedSchemes, ()); + return displayIsolatedSchemes; +} + static URLSchemesMap& secureSchemes() { DEFINE_STATIC_LOCAL(URLSchemesMap, secureSchemes, ()); @@ -82,7 +88,7 @@ static URLSchemesMap& emptyDocumentSchemes() void SchemeRegistry::registerURLSchemeAsLocal(const String& scheme) { - WebCore::localURLSchemes().add(scheme); + localURLSchemes().add(scheme); } void SchemeRegistry::removeURLSchemeRegisteredAsLocal(const String& scheme) @@ -93,50 +99,19 @@ void SchemeRegistry::removeURLSchemeRegisteredAsLocal(const String& scheme) if (scheme == "applewebdata") return; #endif - WebCore::localURLSchemes().remove(scheme); -} - -const URLSchemesMap& SchemeRegistry::localURLSchemes() -{ - return WebCore::localURLSchemes(); + localURLSchemes().remove(scheme); } -bool SchemeRegistry::shouldTreatURLAsLocal(const String& url) +const URLSchemesMap& SchemeRegistry::localSchemes() { - // This avoids an allocation of another String and the HashSet contains() - // call for the file: and http: schemes. - if (url.length() >= 5) { - const UChar* s = url.characters(); - if (s[0] == 'h' && s[1] == 't' && s[2] == 't' && s[3] == 'p' && s[4] == ':') - return false; - if (s[0] == 'f' && s[1] == 'i' && s[2] == 'l' && s[3] == 'e' && s[4] == ':') - return true; - } - - size_t loc = url.find(':'); - if (loc == notFound) - return false; - - String scheme = url.left(loc); - return WebCore::localURLSchemes().contains(scheme); + return localURLSchemes(); } bool SchemeRegistry::shouldTreatURLSchemeAsLocal(const String& scheme) { - // This avoids an allocation of another String and the HashSet contains() - // call for the file: and http: schemes. - if (scheme.length() == 4) { - const UChar* s = scheme.characters(); - if (s[0] == 'h' && s[1] == 't' && s[2] == 't' && s[3] == 'p') - return false; - if (s[0] == 'f' && s[1] == 'i' && s[2] == 'l' && s[3] == 'e') - return true; - } - if (scheme.isEmpty()) return false; - - return WebCore::localURLSchemes().contains(scheme); + return localURLSchemes().contains(scheme); } void SchemeRegistry::registerURLSchemeAsNoAccess(const String& scheme) @@ -149,6 +124,16 @@ bool SchemeRegistry::shouldTreatURLSchemeAsNoAccess(const String& scheme) return schemesWithUniqueOrigins().contains(scheme); } +void SchemeRegistry::registerURLSchemeAsDisplayIsolated(const String& scheme) +{ + displayIsolatedURLSchemes().add(scheme); +} + +bool SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated(const String& scheme) +{ + return displayIsolatedURLSchemes().contains(scheme); +} + void SchemeRegistry::registerURLSchemeAsSecure(const String& scheme) { secureSchemes().add(scheme); diff --git a/Source/WebCore/platform/SchemeRegistry.h b/Source/WebCore/platform/SchemeRegistry.h index 56e3b33..530fcab 100644 --- a/Source/WebCore/platform/SchemeRegistry.h +++ b/Source/WebCore/platform/SchemeRegistry.h @@ -38,9 +38,8 @@ class SchemeRegistry { public: static void registerURLSchemeAsLocal(const String&); static void removeURLSchemeRegisteredAsLocal(const String&); - static const URLSchemesMap& localURLSchemes(); + static const URLSchemesMap& localSchemes(); - static bool shouldTreatURLAsLocal(const String&); static bool shouldTreatURLSchemeAsLocal(const String&); // Secure schemes do not trigger mixed content warnings. For example, @@ -51,7 +50,12 @@ public: static void registerURLSchemeAsNoAccess(const String&); static bool shouldTreatURLSchemeAsNoAccess(const String&); - + + // Display-isolated schemes can only be displayed (in the sense of + // SecurityOrigin::canDisplay) by documents from the same scheme. + static void registerURLSchemeAsDisplayIsolated(const String&); + static bool shouldTreatURLSchemeAsDisplayIsolated(const String&); + static void registerURLSchemeAsEmptyDocument(const String&); static bool shouldLoadURLSchemeAsEmptyDocument(const String&); }; diff --git a/Source/WebCore/platform/UUID.cpp b/Source/WebCore/platform/UUID.cpp index 5c2e076..c072f4a 100644 --- a/Source/WebCore/platform/UUID.cpp +++ b/Source/WebCore/platform/UUID.cpp @@ -39,11 +39,11 @@ #if OS(WINDOWS) #include <objbase.h> -#elif OS(DARWIN) +#elif OS(DARWIN) && PLATFORM(CF) #include <CoreFoundation/CoreFoundation.h> #elif OS(LINUX) && !PLATFORM(CHROMIUM) #include <stdio.h> -#elif OS(LINUX) && PLATFORM(CHROMIUM) +#elif (OS(LINUX) && PLATFORM(CHROMIUM)) || (OS(DARWIN) && !PLATFORM(CF)) #include <wtf/RandomNumber.h> #include <wtf/text/StringBuilder.h> #endif @@ -71,7 +71,7 @@ String createCanonicalUUIDString() String canonicalUuidStr = String(uuidStr + 1, num - 3).lower(); // remove opening and closing bracket and make it lower. ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired); return canonicalUuidStr; -#elif OS(DARWIN) +#elif OS(DARWIN) && PLATFORM(CF) CFUUIDRef uuid = CFUUIDCreate(0); CFStringRef uuidStrRef = CFUUIDCreateString(0, uuid); String uuidStr(uuidStrRef); @@ -93,7 +93,7 @@ String createCanonicalUUIDString() String canonicalUuidStr = String(uuidStr).lower(); // make it lower. ASSERT(canonicalUuidStr[uuidVersionIdentifierIndex] == uuidVersionRequired); return canonicalUuidStr; -#elif OS(LINUX) && PLATFORM(CHROMIUM) +#elif (OS(LINUX) && PLATFORM(CHROMIUM)) || (OS(DARWIN) && !PLATFORM(CF)) unsigned randomData[4]; for (size_t i = 0; i < WTF_ARRAY_LENGTH(randomData); ++i) randomData[i] = static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0)); diff --git a/Source/WebCore/platform/Widget.cpp b/Source/WebCore/platform/Widget.cpp index 77560ff..9a980c0 100644 --- a/Source/WebCore/platform/Widget.cpp +++ b/Source/WebCore/platform/Widget.cpp @@ -106,6 +106,10 @@ IntPoint Widget::convertToContainingWindow(const IntPoint& localPoint) const } #if !PLATFORM(MAC) +void Widget::setBoundsSize(const IntSize&) +{ +} + IntRect Widget::convertFromRootToContainingWindow(const Widget*, const IntRect& rect) { return rect; diff --git a/Source/WebCore/platform/Widget.h b/Source/WebCore/platform/Widget.h index 2b3a1a6..a6562ef 100644 --- a/Source/WebCore/platform/Widget.h +++ b/Source/WebCore/platform/Widget.h @@ -158,6 +158,7 @@ public: IntPoint pos() const { return frameRect().location(); } virtual void setFrameRect(const IntRect&); + virtual void setBoundsSize(const IntSize&); virtual IntRect frameRect() const; IntRect boundsRect() const { return IntRect(0, 0, width(), height()); } diff --git a/Source/WebCore/platform/android/DragDataAndroid.cpp b/Source/WebCore/platform/android/DragDataAndroid.cpp index 4e99b2c..2c341b0 100644 --- a/Source/WebCore/platform/android/DragDataAndroid.cpp +++ b/Source/WebCore/platform/android/DragDataAndroid.cpp @@ -47,7 +47,7 @@ bool DragData::containsPlainText() const return false; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { return String(); } @@ -62,18 +62,18 @@ bool DragData::containsCompatibleContent() const return false; } -bool DragData::containsURL(FilenameConversionPolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy) const { return false; } -String DragData::asURL(FilenameConversionPolicy, String*) const +String DragData::asURL(Frame*, FilenameConversionPolicy, String*) const { return String(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame*, PassRefPtr<Range>, bool, bool&) const { return 0; } diff --git a/Source/WebCore/platform/chromium/ChromiumBridge.h b/Source/WebCore/platform/chromium/ChromiumBridge.h index 56969ef..d3b8528 100644 --- a/Source/WebCore/platform/chromium/ChromiumBridge.h +++ b/Source/WebCore/platform/chromium/ChromiumBridge.h @@ -159,10 +159,6 @@ namespace WebCore { // Forms -------------------------------------------------------------- static void notifyFormStateChanged(const Document*); -#if !ENABLE(CLIENT_BASED_GEOLOCATION) - // Geolocation -------------------------------------------------------- - static GeolocationServiceBridge* createGeolocationServiceBridge(GeolocationServiceChromium*); -#endif // Databases ---------------------------------------------------------- // Returns a handle to the DB file and ooptionally a handle to its containing directory static PlatformFileHandle databaseOpenFile(const String& vfsFleName, int desiredFlags); diff --git a/Source/WebCore/platform/chromium/ClipboardUtilitiesChromium.h b/Source/WebCore/platform/chromium/ClipboardUtilitiesChromium.h index 9fdad42..3e6f92a 100644 --- a/Source/WebCore/platform/chromium/ClipboardUtilitiesChromium.h +++ b/Source/WebCore/platform/chromium/ClipboardUtilitiesChromium.h @@ -28,6 +28,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef ClipboardUtilitiesChromium_h +#define ClipboardUtilitiesChromium_h + #include <wtf/Forward.h> namespace WebCore { @@ -40,3 +43,5 @@ void replaceNewlinesWithWindowsStyleNewlines(String&); void replaceNBSPWithSpace(String&); } // namespace WebCore + +#endif // ClipboardUtilitiesChromium_h diff --git a/Source/WebCore/platform/chromium/DragDataChromium.cpp b/Source/WebCore/platform/chromium/DragDataChromium.cpp index 2b04523..8c20a00 100644 --- a/Source/WebCore/platform/chromium/DragDataChromium.cpp +++ b/Source/WebCore/platform/chromium/DragDataChromium.cpp @@ -35,6 +35,7 @@ #include "ClipboardMimeTypes.h" #include "DocumentFragment.h" #include "FileSystem.h" +#include "Frame.h" #include "KURL.h" #include "markup.h" #include "NotImplemented.h" @@ -47,13 +48,13 @@ static bool containsHTML(const ChromiumDataObject* dropData) return dropData->types().contains(mimeTypeTextHTML); } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return m_platformDragData->types().contains(mimeTypeURL) || (filenamePolicy == ConvertFilenames && m_platformDragData->containsFilenames()); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { String url; if (m_platformDragData->types().contains(mimeTypeURL)) { @@ -84,7 +85,7 @@ bool DragData::containsPlainText() const return m_platformDragData->types().contains(mimeTypeTextPlain); } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { bool ignoredSuccess; return m_platformDragData->getData(mimeTypeTextPlain, ignoredSuccess); @@ -109,13 +110,13 @@ bool DragData::canSmartReplace() const bool DragData::containsCompatibleContent() const { return containsPlainText() - || containsURL() + || containsURL(0) || containsHTML(m_platformDragData) || containsColor() || containsFiles(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const { /* * Order is richest format first. On OSX this is: @@ -137,7 +138,7 @@ PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const if (m_platformDragData->types().contains(mimeTypeTextHTML)) { bool ignoredSuccess; - RefPtr<DocumentFragment> fragment = createFragmentFromMarkup(doc, + RefPtr<DocumentFragment> fragment = createFragmentFromMarkup(frame->document(), m_platformDragData->getData(mimeTypeTextHTML, ignoredSuccess), m_platformDragData->htmlBaseUrl(), FragmentScriptingNotAllowed); return fragment.release(); } diff --git a/Source/WebCore/platform/chromium/GeolocationServiceChromium.cpp b/Source/WebCore/platform/chromium/GeolocationServiceChromium.cpp deleted file mode 100644 index c5e73ae..0000000 --- a/Source/WebCore/platform/chromium/GeolocationServiceChromium.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2010, Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "GeolocationServiceChromium.h" - -#include "ChromiumBridge.h" - -#if ENABLE(CLIENT_BASED_GEOLOCATION) -#error "This file should not be compiled when ENABLE(CLIENT_BASED_GEOLOCATION)" -#endif // ENABLE(CLIENT_BASED_GEOLOCATION) - -namespace WebCore { - -GeolocationServiceBridge::~GeolocationServiceBridge() -{ -} - -GeolocationServiceChromium::GeolocationServiceChromium(GeolocationServiceClient* c) - : GeolocationService(c), - m_geolocation(static_cast<Geolocation*>(c)), - m_geolocationServiceBridge(ChromiumBridge::createGeolocationServiceBridge(this)), - m_lastError(PositionError::create(PositionError::POSITION_UNAVAILABLE, "")) -{ -} - -void GeolocationServiceChromium::setIsAllowed(bool allowed) -{ - m_geolocation->setIsAllowed(allowed); -} - -void GeolocationServiceChromium::setLastPosition(PassRefPtr<Geoposition> geoposition) -{ - m_lastPosition = geoposition; - positionChanged(); -} - -void GeolocationServiceChromium::setLastError(int errorCode, const String& message) -{ - m_lastError = PositionError::create(static_cast<PositionError::ErrorCode>(errorCode), message); - errorOccurred(); -} - -Frame* GeolocationServiceChromium::frame() -{ - return m_geolocation->frame(); -} - -bool GeolocationServiceChromium::startUpdating(PositionOptions* options) -{ - return m_geolocationServiceBridge->startUpdating(options); -} - -void GeolocationServiceChromium::stopUpdating() -{ - return m_geolocationServiceBridge->stopUpdating(); -} - -void GeolocationServiceChromium::suspend() -{ - return m_geolocationServiceBridge->suspend(); -} - -void GeolocationServiceChromium::resume() -{ - return m_geolocationServiceBridge->resume(); -} - -Geoposition* GeolocationServiceChromium::lastPosition() const -{ - return m_lastPosition.get(); -} - -PositionError* GeolocationServiceChromium::lastError() const -{ - return m_lastError.get(); -} - -static GeolocationService* createGeolocationServiceChromium(GeolocationServiceClient* c) -{ - return new GeolocationServiceChromium(c); -} - -// Sets up the factory function for GeolocationService. -GeolocationService::FactoryFunction* GeolocationService::s_factoryFunction = &createGeolocationServiceChromium; - -} // namespace WebCore diff --git a/Source/WebCore/platform/chromium/GeolocationServiceChromium.h b/Source/WebCore/platform/chromium/GeolocationServiceChromium.h deleted file mode 100644 index 7e6f633..0000000 --- a/Source/WebCore/platform/chromium/GeolocationServiceChromium.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2010, Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef GeolocationServiceChromium_h -#define GeolocationServiceChromium_h - -#include "Geolocation.h" -#include "GeolocationService.h" -#include "Geoposition.h" -#include "PlatformString.h" -#include "PositionError.h" - -namespace WebCore { - -// Provides an interface for GeolocationServiceChromium to call into the embedder. -class GeolocationServiceBridge { -public: - virtual ~GeolocationServiceBridge(); - // Called by GeolocationServiceChromium. - virtual bool startUpdating(PositionOptions*) = 0; - virtual void stopUpdating() = 0; - virtual void suspend() = 0; - virtual void resume() = 0; - - // Called by the embedder, to identify this bridge. - virtual int getBridgeId() const = 0; - virtual void attachBridgeIfNeeded() = 0; -}; - -// This class extends GeolocationService, and uses GeolocationServiceBridge to -// call into the embedder, as well as provides a few extra methods so that the -// embedder can notify permission, position, error, etc. -class GeolocationServiceChromium : public GeolocationService { -public: - explicit GeolocationServiceChromium(GeolocationServiceClient*); - - GeolocationServiceBridge* geolocationServiceBridge() const { return m_geolocationServiceBridge.get(); } - void setIsAllowed(bool allowed); - void setLastPosition(PassRefPtr<Geoposition>); - void setLastError(int errorCode, const String& message); - Frame* frame(); - - // From GeolocationService. - virtual bool startUpdating(PositionOptions*); - virtual void stopUpdating(); - virtual void suspend(); - virtual void resume(); - virtual Geoposition* lastPosition() const; - virtual PositionError* lastError() const; - -private: - Geolocation* m_geolocation; - OwnPtr<GeolocationServiceBridge> m_geolocationServiceBridge; - RefPtr<Geoposition> m_lastPosition; - RefPtr<PositionError> m_lastError; -}; - -} // namespace WebCore - -#endif // GeolocationServiceChromium_h diff --git a/Source/WebCore/platform/chromium/PopupMenuChromium.cpp b/Source/WebCore/platform/chromium/PopupMenuChromium.cpp index 04eeb93..bb45e79 100644 --- a/Source/WebCore/platform/chromium/PopupMenuChromium.cpp +++ b/Source/WebCore/platform/chromium/PopupMenuChromium.cpp @@ -329,11 +329,8 @@ PopupContainer::~PopupContainer() removeChild(m_listBox.get()); } -void PopupContainer::showPopup(FrameView* view) +IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, const IntPoint& popupInitialCoordinate) { - // Pre-layout, our size matches the <select> dropdown control. - int selectHeight = frameRect().height(); - // Reset the max height to its default value, it will be recomputed below // if necessary. m_listBox->setMaxHeight(kMaxHeight); @@ -341,23 +338,26 @@ void PopupContainer::showPopup(FrameView* view) // Lay everything out to figure out our preferred size, then tell the view's // WidgetClient about it. It should assign us a client. layout(); + + // Assume m_listBox size is already calculated. + IntSize targetSize(m_listBox->width() + kBorderSize * 2, + m_listBox->height() + kBorderSize * 2); - m_frameView = view; + IntRect widgetRect; ChromeClientChromium* chromeClient = chromeClientChromium(); if (chromeClient) { // If the popup would extend past the bottom of the screen, open upwards // instead. - FloatRect screen = screenAvailableRect(view); - IntRect widgetRect = chromeClient->windowToScreen(frameRect()); - + FloatRect screen = screenAvailableRect(m_frameView.get()); + widgetRect = chromeClient->windowToScreen(IntRect(popupInitialCoordinate, targetSize)); if (widgetRect.bottom() > static_cast<int>(screen.bottom())) { - if (widgetRect.y() - widgetRect.height() - selectHeight > 0) { + if (widgetRect.y() - widgetRect.height() - targetControlHeight > 0) { // There is enough room to open upwards. - widgetRect.move(0, -(widgetRect.height() + selectHeight)); + widgetRect.move(0, -(widgetRect.height() + targetControlHeight)); } else { // Figure whether upwards or downwards has more room and set the // maximum number of items. - int spaceAbove = widgetRect.y() - selectHeight; + int spaceAbove = widgetRect.y() - targetControlHeight; int spaceBelow = screen.bottom() - widgetRect.y(); if (spaceAbove > spaceBelow) m_listBox->setMaxHeight(spaceAbove); @@ -368,10 +368,21 @@ void PopupContainer::showPopup(FrameView* view) widgetRect = chromeClient->windowToScreen(frameRect()); // And move upwards if necessary. if (spaceAbove > spaceBelow) - widgetRect.move(0, -(widgetRect.height() + selectHeight)); + widgetRect.move(0, -(widgetRect.height() + targetControlHeight)); } } - chromeClient->popupOpened(this, widgetRect, false); + } + return widgetRect; +} + +void PopupContainer::showPopup(FrameView* view) +{ + m_frameView = view; + + ChromeClientChromium* chromeClient = chromeClientChromium(); + if (chromeClient) { + IntRect popupRect = frameRect(); + chromeClient->popupOpened(this, layoutAndCalculateWidgetRect(popupRect.height(), popupRect.location()), false); m_popupOpen = true; } @@ -556,15 +567,24 @@ void PopupContainer::show(const IntRect& r, FrameView* v, int index) // Move it below the select widget. location.move(0, r.height()); - IntRect popupRect(location, r.size()); - setFrameRect(popupRect); + setFrameRect(IntRect(location, r.size())); showPopup(v); } -void PopupContainer::refresh() +void PopupContainer::refresh(const IntRect& targetControlRect) { + IntPoint location = m_frameView->contentsToWindow(targetControlRect.location()); + // Move it below the select widget. + location.move(0, targetControlRect.height()); + listBox()->updateFromElement(); - layout(); + // Store the original height to check if we need to request the location. + int originalHeight = height(); + IntRect widgetRect = layoutAndCalculateWidgetRect(targetControlRect.height(), location); + if (originalHeight != widgetRect.height()) + setFrameRect(widgetRect); + + invalidate(); } int PopupContainer::selectedIndex() const diff --git a/Source/WebCore/platform/chromium/PopupMenuChromium.h b/Source/WebCore/platform/chromium/PopupMenuChromium.h index ca47ccf..f326b48 100644 --- a/Source/WebCore/platform/chromium/PopupMenuChromium.h +++ b/Source/WebCore/platform/chromium/PopupMenuChromium.h @@ -168,7 +168,7 @@ public: int selectedIndex() const; // Refresh the popup values from the PopupMenuClient. - void refresh(); + void refresh(const IntRect& targetControlRect); // The menu per-item data. const WTF::Vector<PopupItem*>& popupData() const; @@ -193,6 +193,9 @@ private: // Paint the border. void paintBorder(GraphicsContext*, const IntRect&); + // Layout and calculate popup widget size and location and returns it as IntRect. + IntRect layoutAndCalculateWidgetRect(int targetControlHeight, const IntPoint& popupInitialCoordinate); + // Returns the ChromeClient of the page this popup is associated with. ChromeClientChromium* chromeClientChromium(); diff --git a/Source/WebCore/platform/efl/DragDataEfl.cpp b/Source/WebCore/platform/efl/DragDataEfl.cpp index a8458d6..b35b963 100644 --- a/Source/WebCore/platform/efl/DragDataEfl.cpp +++ b/Source/WebCore/platform/efl/DragDataEfl.cpp @@ -50,7 +50,7 @@ bool DragData::containsPlainText() const return false; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { return String(); } @@ -65,17 +65,17 @@ bool DragData::containsCompatibleContent() const return false; } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return false; } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { return String(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame*, PassRefPtr<Range>, bool, bool&) const { return 0; } diff --git a/Source/WebCore/platform/efl/PasteboardEfl.cpp b/Source/WebCore/platform/efl/PasteboardEfl.cpp index 1af5a92..77c1d90 100644 --- a/Source/WebCore/platform/efl/PasteboardEfl.cpp +++ b/Source/WebCore/platform/efl/PasteboardEfl.cpp @@ -46,11 +46,6 @@ Pasteboard::Pasteboard() notImplemented(); } -Pasteboard::~Pasteboard() -{ - notImplemented(); -} - void Pasteboard::writePlainText(const String&) { notImplemented(); diff --git a/Source/WebCore/platform/efl/RenderThemeEfl.cpp b/Source/WebCore/platform/efl/RenderThemeEfl.cpp index 7cf635f..9df12e9 100644 --- a/Source/WebCore/platform/efl/RenderThemeEfl.cpp +++ b/Source/WebCore/platform/efl/RenderThemeEfl.cpp @@ -32,6 +32,7 @@ #include "FrameView.h" #include "GraphicsContext.h" #include "NotImplemented.h" +#include "PaintInfo.h" #include "Page.h" #include "RenderBox.h" #include "RenderObject.h" diff --git a/Source/WebCore/platform/graphics/GraphicsContext.cpp b/Source/WebCore/platform/graphics/GraphicsContext.cpp index b8a6859..c9c1f63 100644 --- a/Source/WebCore/platform/graphics/GraphicsContext.cpp +++ b/Source/WebCore/platform/graphics/GraphicsContext.cpp @@ -30,6 +30,7 @@ #include "Font.h" #include "Generator.h" #include "ImageBuffer.h" +#include "IntRect.h" using namespace std; diff --git a/Source/WebCore/platform/graphics/GraphicsContext.h b/Source/WebCore/platform/graphics/GraphicsContext.h index d72cba1..a648680 100644 --- a/Source/WebCore/platform/graphics/GraphicsContext.h +++ b/Source/WebCore/platform/graphics/GraphicsContext.h @@ -32,10 +32,8 @@ #include "FloatRect.h" #include "Gradient.h" #include "Image.h" -#include "IntRect.h" #include "Path.h" #include "Pattern.h" -#include "TextDirection.h" #include <wtf/Noncopyable.h> #include <wtf/PassOwnPtr.h> @@ -129,6 +127,7 @@ namespace WebCore { class Generator; class GraphicsContextPlatformPrivate; class ImageBuffer; + class IntRect; class KURL; class SharedGraphicsContext3D; class TextRun; diff --git a/Source/WebCore/platform/graphics/GraphicsContext3D.cpp b/Source/WebCore/platform/graphics/GraphicsContext3D.cpp index 1224bce..f7c5a66 100644 --- a/Source/WebCore/platform/graphics/GraphicsContext3D.cpp +++ b/Source/WebCore/platform/graphics/GraphicsContext3D.cpp @@ -33,6 +33,7 @@ #include "ArrayBufferView.h" #include "CheckedInt.h" #include "DrawingBuffer.h" +#include "Extensions3D.h" #include "Image.h" #include "ImageData.h" @@ -43,62 +44,6 @@ namespace WebCore { namespace { - unsigned int bytesPerComponent(GC3Denum type) - { - switch (type) { - case GraphicsContext3D::UNSIGNED_BYTE: - return 1; - case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: - case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: - case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: - return 2; - case GraphicsContext3D::FLOAT: - return 4; - default: - return 1; - } - } - - unsigned int componentsPerPixel(GC3Denum format, GC3Denum type) - { - switch (type) { - case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: - case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: - case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: - case GraphicsContext3D::FLOAT: - return 1; - default: - break; - } - switch (format) { - case GraphicsContext3D::ALPHA: - case GraphicsContext3D::LUMINANCE: - return 1; - case GraphicsContext3D::LUMINANCE_ALPHA: - return 2; - case GraphicsContext3D::RGB: - return 3; - case GraphicsContext3D::RGBA: - return 4; - default: - return 4; - } - } - - // This function should only be called if width and height is non-zero and - // format/type are valid. Return 0 if overflow happens. - unsigned int imageSizeInBytes(GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type) - { - ASSERT(width > 0 && height > 0); - CheckedInt<uint32_t> checkedWidth(width); - CheckedInt<uint32_t> checkedHeight(height); - CheckedInt<uint32_t> checkedBytesPerPixel(bytesPerComponent(type) * componentsPerPixel(format, type)); - CheckedInt<uint32_t> checkedSize = checkedWidth * checkedHeight * checkedBytesPerPixel; - if (checkedSize.valid()) - return checkedSize.value(); - return 0; - } - uint8_t convertColor16LittleTo8(uint16_t value) { return value >> 8; @@ -117,17 +62,19 @@ PassRefPtr<DrawingBuffer> GraphicsContext3D::createDrawingBuffer(const IntSize& return DrawingBuffer::create(this, size); } -bool GraphicsContext3D::texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type) +bool GraphicsContext3D::texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint unpackAlignment) { + ASSERT(unpackAlignment == 1 || unpackAlignment == 2 || unpackAlignment == 4 || unpackAlignment == 8); OwnArrayPtr<unsigned char> zero; if (width > 0 && height > 0) { - unsigned int size = imageSizeInBytes(width, height, format, type); - if (!size) { - synthesizeGLError(GraphicsContext3D::INVALID_VALUE); + unsigned int size; + GC3Denum error = computeImageSizeInBytes(format, type, width, height, unpackAlignment, &size, 0); + if (error != GraphicsContext3D::NO_ERROR) { + synthesizeGLError(error); return false; } zero = adoptArrayPtr(new unsigned char[size]); - if (!zero.get()) { + if (!zero) { synthesizeGLError(GraphicsContext3D::INVALID_VALUE); return false; } @@ -155,6 +102,7 @@ bool GraphicsContext3D::computeFormatAndTypeParameters(GC3Denum format, *componentsPerPixel = 3; break; case GraphicsContext3D::RGBA: + case Extensions3D::BGRA_EXT: // GL_EXT_texture_format_BGRA8888 *componentsPerPixel = 4; break; default: @@ -162,16 +110,16 @@ bool GraphicsContext3D::computeFormatAndTypeParameters(GC3Denum format, } switch (type) { case GraphicsContext3D::UNSIGNED_BYTE: - *bytesPerComponent = sizeof(unsigned char); + *bytesPerComponent = sizeof(GC3Dubyte); break; case GraphicsContext3D::UNSIGNED_SHORT_5_6_5: case GraphicsContext3D::UNSIGNED_SHORT_4_4_4_4: case GraphicsContext3D::UNSIGNED_SHORT_5_5_5_1: *componentsPerPixel = 1; - *bytesPerComponent = sizeof(unsigned short); + *bytesPerComponent = sizeof(GC3Dushort); break; case GraphicsContext3D::FLOAT: // OES_texture_float - *bytesPerComponent = sizeof(float); + *bytesPerComponent = sizeof(GC3Dfloat); break; default: return false; @@ -179,6 +127,44 @@ bool GraphicsContext3D::computeFormatAndTypeParameters(GC3Denum format, return true; } +GC3Denum GraphicsContext3D::computeImageSizeInBytes(GC3Denum format, GC3Denum type, GC3Dsizei width, GC3Dsizei height, GC3Dint alignment, + unsigned int* imageSizeInBytes, unsigned int* paddingInBytes) +{ + ASSERT(imageSizeInBytes); + ASSERT(alignment == 1 || alignment == 2 || alignment == 4 || alignment == 8); + if (width < 0 || height < 0) + return GraphicsContext3D::INVALID_VALUE; + unsigned int bytesPerComponent, componentsPerPixel; + if (!computeFormatAndTypeParameters(format, type, &bytesPerComponent, &componentsPerPixel)) + return GraphicsContext3D::INVALID_ENUM; + if (!width || !height) { + *imageSizeInBytes = 0; + if (paddingInBytes) + *paddingInBytes = 0; + return GraphicsContext3D::NO_ERROR; + } + CheckedInt<uint32_t> checkedValue(bytesPerComponent * componentsPerPixel); + checkedValue *= width; + if (!checkedValue.valid()) + return GraphicsContext3D::INVALID_VALUE; + unsigned int validRowSize = checkedValue.value(); + unsigned int padding = 0; + unsigned int residual = validRowSize % alignment; + if (residual) { + padding = alignment - residual; + checkedValue += padding; + } + // Last row needs no padding. + checkedValue *= (height - 1); + checkedValue += validRowSize; + if (!checkedValue.valid()) + return GraphicsContext3D::INVALID_VALUE; + *imageSizeInBytes = checkedValue.value(); + if (paddingInBytes) + *paddingInBytes = padding; + return GraphicsContext3D::NO_ERROR; +} + bool GraphicsContext3D::extractImageData(Image* image, GC3Denum format, GC3Denum type, diff --git a/Source/WebCore/platform/graphics/GraphicsContext3D.h b/Source/WebCore/platform/graphics/GraphicsContext3D.h index a0d2778..10aa0d7 100644 --- a/Source/WebCore/platform/graphics/GraphicsContext3D.h +++ b/Source/WebCore/platform/graphics/GraphicsContext3D.h @@ -47,6 +47,8 @@ typedef unsigned int GC3Denum; typedef unsigned char GC3Dboolean; typedef unsigned int GC3Dbitfield; +typedef unsigned char GC3Dubyte; +typedef unsigned short GC3Dushort; typedef int GC3Dint; typedef int GC3Dsizei; typedef unsigned int GC3Duint; @@ -491,7 +493,8 @@ public: // Helper to texImage2D with pixel==0 case: pixels are initialized to 0. // Return true if no GL error is synthesized. - bool texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type); + // By default, alignment is 4, the OpenGL default setting. + bool texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint alignment = 4); bool isGLES2Compliant() const; @@ -507,6 +510,19 @@ public: unsigned int* componentsPerPixel, unsigned int* bytesPerComponent); + // Computes the image size in bytes. If paddingInBytes is not null, padding + // is also calculated in return. Returns NO_ERROR if succeed, otherwise + // return the suggested GL error indicating the cause of the failure: + // INVALID_VALUE if width/height is negative or overflow happens. + // INVALID_ENUM if format/type is illegal. + GC3Denum computeImageSizeInBytes(GC3Denum format, + GC3Denum type, + GC3Dsizei width, + GC3Dsizei height, + GC3Dint alignment, + unsigned int* imageSizeInBytes, + unsigned int* paddingInBytes); + // Extracts the contents of the given Image into the passed Vector, // packing the pixel data according to the given format and type, // and obeying the flipY, premultiplyAlpha, and ignoreGammaAndColorProfile diff --git a/Source/WebCore/platform/graphics/GraphicsLayer.h b/Source/WebCore/platform/graphics/GraphicsLayer.h index ef3c1bc..8943f6c 100644 --- a/Source/WebCore/platform/graphics/GraphicsLayer.h +++ b/Source/WebCore/platform/graphics/GraphicsLayer.h @@ -322,6 +322,11 @@ public: // For hosting this GraphicsLayer in a native layer hierarchy. virtual PlatformLayer* platformLayer() const { return 0; } + // Change the scale at which the contents are rendered. Note that contentsScale may not return + // the same value passed to setContentsScale(), because of clamping and hysteresis. + virtual float contentsScale() const { return 1; } + virtual void setContentsScale(float) { } + void dumpLayer(TextStream&, int indent = 0, LayerTreeAsTextBehavior = LayerTreeAsTextBehaviorNormal) const; int repaintCount() const { return m_repaintCount; } diff --git a/Source/WebCore/platform/graphics/ImageSource.cpp b/Source/WebCore/platform/graphics/ImageSource.cpp index 92553c5..984b7d2 100644 --- a/Source/WebCore/platform/graphics/ImageSource.cpp +++ b/Source/WebCore/platform/graphics/ImageSource.cpp @@ -130,8 +130,8 @@ NativeImagePtr ImageSource::createFrameAtIndex(size_t index) if (!m_decoder) return 0; - RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index); - if (!buffer || buffer->status() == RGBA32Buffer::FrameEmpty) + ImageFrame* buffer = m_decoder->frameBufferAtIndex(index); + if (!buffer || buffer->status() == ImageFrame::FrameEmpty) return 0; // Zero-height images can cause problems for some ports. If we have an @@ -149,8 +149,8 @@ float ImageSource::frameDurationAtIndex(size_t index) if (!m_decoder) return 0; - RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index); - if (!buffer || buffer->status() == RGBA32Buffer::FrameEmpty) + ImageFrame* buffer = m_decoder->frameBufferAtIndex(index); + if (!buffer || buffer->status() == ImageFrame::FrameEmpty) return 0; // Many annoying ads specify a 0 duration to make an image flash as quickly as possible. @@ -180,8 +180,8 @@ bool ImageSource::frameIsCompleteAtIndex(size_t index) if (!m_decoder) return false; - RGBA32Buffer* buffer = m_decoder->frameBufferAtIndex(index); - return buffer && buffer->status() == RGBA32Buffer::FrameComplete; + ImageFrame* buffer = m_decoder->frameBufferAtIndex(index); + return buffer && buffer->status() == ImageFrame::FrameComplete; } } diff --git a/Source/WebCore/platform/graphics/Pen.cpp b/Source/WebCore/platform/graphics/Pen.cpp deleted file mode 100644 index a3dcb86..0000000 --- a/Source/WebCore/platform/graphics/Pen.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2003 Apple Computer, Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "Pen.h" - -namespace WebCore { - -Pen::Pen(const Color &color, unsigned width, PenStyle style) : m_style(style), m_width(width), m_color(color) -{ -} - -const Color &Pen::color() const -{ - return m_color; -} - -unsigned Pen::width() const -{ - return m_width; -} - -Pen::PenStyle Pen::style() const -{ - return m_style; -} - -void Pen::setColor(const Color &color) -{ - m_color = color; -} - -void Pen::setWidth(unsigned width) -{ - m_width = width; -} - -void Pen::setStyle(PenStyle style) -{ - m_style = style; -} - -bool Pen::operator==(const Pen &compareTo) const -{ - return (m_width == compareTo.m_width) && - (m_style == compareTo.m_style) && - (m_color == compareTo.m_color); -} - -bool Pen::operator!=(const Pen &compareTo) const -{ - return !(*this == compareTo); -} - -} diff --git a/Source/WebCore/platform/graphics/Pen.h b/Source/WebCore/platform/graphics/Pen.h deleted file mode 100644 index cb45a2e..0000000 --- a/Source/WebCore/platform/graphics/Pen.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2003-6 Apple Computer, 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 Pen_h -#define Pen_h - -#include "Color.h" - -#if PLATFORM(WX) -class wxPen; -#endif - -namespace WebCore { - -class Pen { -public: - enum PenStyle { - NoPen, - SolidLine, - DotLine, - DashLine - }; - - Pen(const Color &c = Color::black, unsigned w = 0, PenStyle ps = SolidLine); - - const Color &color() const; - unsigned width() const; - PenStyle style() const; - - void setColor(const Color &); - void setWidth(unsigned); - void setStyle(PenStyle); - - bool operator==(const Pen &) const; - bool operator!=(const Pen &) const; - -#if PLATFORM(WX) - Pen(const wxPen&); - operator wxPen() const; -#endif - -private: - PenStyle m_style; - unsigned m_width; - Color m_color; -}; - -} - -#endif diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp index 37385c0..b72d761 100644 --- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp +++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp @@ -253,6 +253,7 @@ GraphicsLayerCA::GraphicsLayerCA(GraphicsLayerClient* client) , m_contentsLayerPurpose(NoContentsLayer) , m_contentsLayerHasBackgroundColor(false) , m_uncommittedChanges(NoChange) + , m_contentsScale(1) { m_layer = PlatformCALayer::create(PlatformCALayer::LayerTypeWebLayer, this); @@ -857,6 +858,9 @@ void GraphicsLayerCA::commitLayerChangesBeforeSublayers() if (m_uncommittedChanges & AcceleratesDrawingChanged) updateAcceleratesDrawing(); + + if (m_uncommittedChanges & ContentsScaleChanged) + updateContentsScale(); } void GraphicsLayerCA::commitLayerChangesAfterSublayers() @@ -1897,6 +1901,44 @@ GraphicsLayerCA::LayerMap* GraphicsLayerCA::animatedLayerClones(AnimatedProperty return (property == AnimatedPropertyBackgroundColor) ? m_contentsLayerClones.get() : primaryLayerClones(); } +void GraphicsLayerCA::setContentsScale(float scale) +{ + float newScale = clampedContentsScaleForScale(scale); + if (newScale == m_contentsScale) + return; + + m_contentsScale = newScale; + noteLayerPropertyChanged(ContentsScaleChanged); +} + +float GraphicsLayerCA::clampedContentsScaleForScale(float scale) const +{ + // Define some limits as a sanity check for the incoming scale value + // those too small to see. + const float maxScale = 5.0f; + const float minScale = 0.01f; + + // Avoid very slight scale changes that would be doing extra work for no benefit + const float maxAllowableDelta = 0.05f; + + // Clamp + float result = max(minScale, min(scale, maxScale)); + + // If it hasn't changed much, don't do any work + return ((fabs(result - m_contentsScale) / m_contentsScale) < maxAllowableDelta) ? m_contentsScale : result; +} + +void GraphicsLayerCA::updateContentsScale() +{ + bool needTiledLayer = requiresTiledLayer(m_size); + if (needTiledLayer != m_usingTiledLayer) + swapFromOrToTiledLayer(needTiledLayer); + + m_layer->setContentsScale(m_contentsScale); + if (drawsContent()) + m_layer->setNeedsDisplay(); +} + void GraphicsLayerCA::setDebugBackgroundColor(const Color& color) { if (color.isValid()) @@ -1950,12 +1992,11 @@ bool GraphicsLayerCA::requiresTiledLayer(const FloatSize& size) const void GraphicsLayerCA::swapFromOrToTiledLayer(bool useTiledLayer) { - if (useTiledLayer == m_usingTiledLayer) - return; - + ASSERT(useTiledLayer != m_usingTiledLayer); RefPtr<PlatformCALayer> oldLayer = m_layer; m_layer = PlatformCALayer::create(useTiledLayer ? PlatformCALayer::LayerTypeWebTiledLayer : PlatformCALayer::LayerTypeWebLayer, this); + m_layer->setContentsScale(m_contentsScale); m_usingTiledLayer = useTiledLayer; @@ -2230,6 +2271,7 @@ PassRefPtr<PlatformCALayer> GraphicsLayerCA::cloneLayer(PlatformCALayer *layer, newLayer->setDoubleSided(layer->isDoubleSided()); newLayer->setOpaque(layer->isOpaque()); newLayer->setBackgroundColor(layer->backgroundColor()); + newLayer->setContentsScale(layer->contentsScale()); if (cloneLevel == IntermediateCloneLevel) { newLayer->setOpacity(layer->opacity()); diff --git a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h index 13cbdd1..2c39c0a 100644 --- a/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h +++ b/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h @@ -56,6 +56,9 @@ public: virtual PlatformLayer* platformLayer() const; virtual PlatformCALayer* platformCALayer() const { return primaryLayer(); } + virtual float contentsScale() const { return m_contentsScale; } + virtual void setContentsScale(float); + virtual bool setChildren(const Vector<GraphicsLayer*>&); virtual void addChild(GraphicsLayer*); virtual void addChildAtIndex(GraphicsLayer*, int index); @@ -278,6 +281,7 @@ private: void updateLayerAnimations(); void updateContentsNeedsDisplay(); void updateAcceleratesDrawing(); + void updateContentsScale(); enum StructuralLayerPurpose { NoStructuralLayer = 0, @@ -320,7 +324,8 @@ private: MaskLayerChanged = 1 << 21, ReplicatedLayerChanged = 1 << 22, ContentsNeedsDisplay = 1 << 23, - AcceleratesDrawingChanged = 1 << 24 + AcceleratesDrawingChanged = 1 << 24, + ContentsScaleChanged = 1 << 25 }; typedef unsigned LayerChangeFlags; void noteLayerPropertyChanged(LayerChangeFlags flags); @@ -391,6 +396,9 @@ private: Vector<FloatRect> m_dirtyRects; LayerChangeFlags m_uncommittedChanges; + + float clampedContentsScaleForScale(float) const; + float m_contentsScale; }; } // namespace WebCore diff --git a/Source/WebCore/platform/graphics/ca/PlatformCALayer.h b/Source/WebCore/platform/graphics/ca/PlatformCALayer.h index 46f4bbf..68566b3 100644 --- a/Source/WebCore/platform/graphics/ca/PlatformCALayer.h +++ b/Source/WebCore/platform/graphics/ca/PlatformCALayer.h @@ -182,6 +182,9 @@ public: CFTimeInterval timeOffset() const; void setTimeOffset(CFTimeInterval); + + float contentsScale() const; + void setContentsScale(float); #if PLATFORM(WIN) && !defined(NDEBUG) void printTree() const; diff --git a/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm b/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm index 28460a7..2e20c3f 100644 --- a/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm +++ b/Source/WebCore/platform/graphics/ca/mac/PlatformCALayerMac.mm @@ -723,4 +723,24 @@ void PlatformCALayer::setTimeOffset(CFTimeInterval value) END_BLOCK_OBJC_EXCEPTIONS } +float PlatformCALayer::contentsScale() const +{ +#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) + return [m_layer.get() contentsScale]; +#else + return 1; +#endif +} + +void PlatformCALayer::setContentsScale(float value) +{ +#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) + BEGIN_BLOCK_OBJC_EXCEPTIONS + [m_layer.get() setContentsScale:value]; + END_BLOCK_OBJC_EXCEPTIONS +#else + UNUSED_PARAM(value); +#endif +} + #endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp index 919c3b3..66d0732 100644 --- a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp +++ b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp @@ -253,15 +253,8 @@ size_t PlatformCALayer::sublayerCount() const void PlatformCALayer::adoptSublayers(PlatformCALayer* source) { - // Make a list of the sublayers from source PlatformCALayerList sublayers; - size_t n = source->sublayerCount(); - CFArrayRef sourceSublayers = CACFLayerGetSublayers(source->platformLayer()); - - for (size_t i = 0; i < n; ++i) { - CACFLayerRef layer = static_cast<CACFLayerRef>(const_cast<void*>(CFArrayGetValueAtIndex(sourceSublayers, i))); - sublayers.append(platformCALayer(layer)); - } + intern(source)->getSublayers(sublayers); // Use setSublayers() because it properly nulls out the superlayer pointers. setSublayers(sublayers); @@ -586,6 +579,15 @@ void PlatformCALayer::setTimeOffset(CFTimeInterval value) setNeedsCommit(); } +float PlatformCALayer::contentsScale() const +{ + return 1; +} + +void PlatformCALayer::setContentsScale(float) +{ +} + #ifndef NDEBUG static void printIndent(int indent) { @@ -681,11 +683,11 @@ static void printLayer(const PlatformCALayer* layer, int indent) printIndent(indent + 1); fprintf(stderr, "(sublayers\n"); - CFArrayRef sublayers = CACFLayerGetSublayers(layer->platformLayer()); - for (int i = 0; i < n; ++i) { - PlatformCALayer* sublayer = PlatformCALayer::platformCALayer(const_cast<void*>(CFArrayGetValueAtIndex(sublayers, i))); - printLayer(sublayer, indent + 2); - } + PlatformCALayerList sublayers; + intern(layer)->getSublayers(sublayers); + ASSERT(n == sublayers.size()); + for (int i = 0; i < n; ++i) + printLayer(sublayers[i].get(), indent + 2); printIndent(indent + 1); fprintf(stderr, ")\n"); diff --git a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp index 0b7eea0..cdf90db 100644 --- a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp +++ b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp @@ -210,6 +210,27 @@ void PlatformCALayerWinInternal::setSublayers(const PlatformCALayerList& list) } } +void PlatformCALayerWinInternal::getSublayers(PlatformCALayerList& list) const +{ + CFArrayRef sublayers = CACFLayerGetSublayers(owner()->platformLayer()); + if (!sublayers) { + list.clear(); + return; + } + + size_t count = CFArrayGetCount(sublayers); + + size_t layersToSkip = 0; + if (owner()->layerType() == PlatformCALayer::LayerTypeWebTiledLayer) { + // Exclude the tile parent layer. + layersToSkip = 1; + } + + list.resize(count - layersToSkip); + for (size_t arrayIndex = layersToSkip; arrayIndex < count; ++arrayIndex) + list[arrayIndex - layersToSkip] = PlatformCALayer::platformCALayer(const_cast<void*>(CFArrayGetValueAtIndex(sublayers, arrayIndex))); +} + void PlatformCALayerWinInternal::removeAllSublayers() { CACFLayerSetSublayers(owner()->platformLayer(), 0); diff --git a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.h b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.h index 1be9d26..39ef3b3 100644 --- a/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.h +++ b/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.h @@ -52,6 +52,7 @@ public: PlatformCALayer* owner() const { return m_owner; } void setSublayers(const PlatformCALayerList&); + void getSublayers(PlatformCALayerList&) const; void removeAllSublayers(); void insertSublayer(PlatformCALayer*, size_t); size_t sublayerCount() const; diff --git a/Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h b/Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h index 1e0a846..b90bb8c 100644 --- a/Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h +++ b/Source/WebCore/platform/graphics/cairo/DrawErrorUnderline.h @@ -23,6 +23,9 @@ #if PLATFORM(CAIRO) +#ifndef DrawErrorUnderline_h +#define DrawErrorUnderline_h + #include <cairo.h> // @@ -96,4 +99,6 @@ static inline void drawErrorUnderline(cairo_t* cr, double x, double y, double wi } } +#endif // DrawErrorUnderline_h + #endif diff --git a/Source/WebCore/platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h b/Source/WebCore/platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h index 5602b6c..a0dfc8c 100644 --- a/Source/WebCore/platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h +++ b/Source/WebCore/platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h @@ -25,6 +25,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef GraphicsContextPlatformPrivateCairo_h +#define GraphicsContextPlatformPrivateCairo_h + #include "GraphicsContext.h" #include "ContextShadow.h" @@ -111,3 +114,4 @@ public: } // namespace WebCore +#endif // GraphicsContextPlatformPrivateCairo_h diff --git a/Source/WebCore/platform/graphics/cairo/PathCairo.cpp b/Source/WebCore/platform/graphics/cairo/PathCairo.cpp index 03f1d10..0113427 100644 --- a/Source/WebCore/platform/graphics/cairo/PathCairo.cpp +++ b/Source/WebCore/platform/graphics/cairo/PathCairo.cpp @@ -5,6 +5,7 @@ 2005, 2007 Apple Inc. All Rights reserved. 2007 Alp Toker <alp@atoker.com> 2008 Dirk Schulze <krit@webkit.org> + 2011 Igalia S.L. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -143,18 +144,30 @@ void Path::addBezierCurveTo(const FloatPoint& controlPoint1, const FloatPoint& c controlPoint3.x(), controlPoint3.y()); } -void Path::addArc(const FloatPoint& p, float r, float sa, float ea, bool anticlockwise) +void Path::addArc(const FloatPoint& p, float r, float startAngle, float endAngle, bool anticlockwise) { // http://bugs.webkit.org/show_bug.cgi?id=16449 // cairo_arc() functions hang or crash when passed inf as radius or start/end angle - if (!isfinite(r) || !isfinite(sa) || !isfinite(ea)) + if (!isfinite(r) || !isfinite(startAngle) || !isfinite(endAngle)) return; cairo_t* cr = platformPath()->context(); - if (anticlockwise) - cairo_arc_negative(cr, p.x(), p.y(), r, sa, ea); - else - cairo_arc(cr, p.x(), p.y(), r, sa, ea); + float sweep = endAngle - startAngle; + const float twoPI = 2 * piFloat; + if ((sweep <= -twoPI || sweep >= twoPI) + && ((anticlockwise && (endAngle < startAngle)) || (!anticlockwise && (startAngle < endAngle)))) { + if (anticlockwise) + cairo_arc_negative(cr, p.x(), p.y(), r, startAngle, startAngle - twoPI); + else + cairo_arc(cr, p.x(), p.y(), r, startAngle, startAngle + twoPI); + cairo_new_sub_path(cr); + cairo_arc(cr, p.x(), p.y(), r, endAngle, endAngle); + } else { + if (anticlockwise) + cairo_arc_negative(cr, p.x(), p.y(), r, startAngle, endAngle); + else + cairo_arc(cr, p.x(), p.y(), r, startAngle, endAngle); + } } void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius) diff --git a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp index acd912f..eddf735 100644 --- a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp +++ b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp @@ -546,21 +546,46 @@ void GraphicsContext::fillPath(const Path& path) CGContextRef context = platformContext(); - CGContextBeginPath(context); - CGContextAddPath(context, path.platformPath()); - if (m_state.fillGradient) { - CGContextSaveGState(context); - if (fillRule() == RULE_EVENODD) - CGContextEOClip(context); - else - CGContextClip(context); - CGContextConcatCTM(context, m_state.fillGradient->gradientSpaceTransform()); - m_state.fillGradient->paint(this); - CGContextRestoreGState(context); + if (hasShadow()) { + FloatRect rect = path.boundingRect(); + CGLayerRef layer = CGLayerCreateWithContext(context, CGSizeMake(rect.width(), rect.height()), 0); + CGContextRef layerContext = CGLayerGetContext(layer); + + CGContextTranslateCTM(layerContext, -rect.x(), -rect.y()); + CGContextBeginPath(layerContext); + CGContextAddPath(layerContext, path.platformPath()); + CGContextConcatCTM(layerContext, m_state.fillGradient->gradientSpaceTransform()); + + if (fillRule() == RULE_EVENODD) + CGContextEOClip(layerContext); + else + CGContextClip(layerContext); + + m_state.fillGradient->paint(layerContext); + CGContextDrawLayerAtPoint(context, CGPointMake(rect.left(), rect.top()), layer); + CGLayerRelease(layer); + } else { + CGContextBeginPath(context); + CGContextAddPath(context, path.platformPath()); + CGContextSaveGState(context); + CGContextConcatCTM(context, m_state.fillGradient->gradientSpaceTransform()); + + if (fillRule() == RULE_EVENODD) + CGContextEOClip(context); + else + CGContextClip(context); + + m_state.fillGradient->paint(this); + CGContextRestoreGState(context); + } + return; } + CGContextBeginPath(context); + CGContextAddPath(context, path.platformPath()); + if (m_state.fillPattern) applyFillPattern(); fillPathWithFillRule(context, fillRule()); diff --git a/Source/WebCore/platform/graphics/cg/GraphicsContextPlatformPrivateCG.h b/Source/WebCore/platform/graphics/cg/GraphicsContextPlatformPrivateCG.h index 1d0a99f..d4fa32e 100644 --- a/Source/WebCore/platform/graphics/cg/GraphicsContextPlatformPrivateCG.h +++ b/Source/WebCore/platform/graphics/cg/GraphicsContextPlatformPrivateCG.h @@ -23,6 +23,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef GraphicsContextPlatformPrivateCG_h +#define GraphicsContextPlatformPrivateCG_h + #include <wtf/RetainPtr.h> #include <CoreGraphics/CGContext.h> @@ -84,3 +87,5 @@ public: }; } + +#endif // GraphicsContextPlatformPrivateCG_h diff --git a/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp b/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp index 75a36e5..023d098 100644 --- a/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp +++ b/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp @@ -54,6 +54,8 @@ using namespace std; namespace WebCore { #if USE(IOSURFACE_CANVAS_BACKING_STORE) +static const int maxIOSurfaceDimension = 4096; + static RetainPtr<IOSurfaceRef> createIOSurface(const IntSize& size) { unsigned pixelFormat = 'BGRA'; @@ -110,12 +112,15 @@ ImageBuffer::ImageBuffer(const IntSize& size, ColorSpace imageColorSpace, Render , m_size(size) , m_accelerateRendering(renderingMode == Accelerated) { -#if !USE(IOSURFACE_CANVAS_BACKING_STORE) - ASSERT(renderingMode == Unaccelerated); -#endif success = false; // Make early return mean failure. if (size.width() < 0 || size.height() < 0) return; +#if USE(IOSURFACE_CANVAS_BACKING_STORE) + if (size.width() >= maxIOSurfaceDimension || size.height() >= maxIOSurfaceDimension) + m_accelerateRendering = false; +#else + ASSERT(renderingMode == Unaccelerated); +#endif unsigned bytesPerRow = size.width(); if (bytesPerRow > 0x3FFFFFFF) // Protect against overflow diff --git a/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h b/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h index 790d620..ecd57be 100644 --- a/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h +++ b/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h @@ -23,6 +23,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef PDFDocumentImage_h +#define PDFDocumentImage_h + #include "Image.h" #include "FloatRect.h" @@ -76,3 +79,5 @@ namespace WebCore { } #endif // PLATFORM(CG) + +#endif // PDFDocumentImage_h diff --git a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp index b5eda93..99159e6 100644 --- a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp +++ b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp @@ -50,7 +50,6 @@ ComplexTextController::ComplexTextController(const TextRun& run, unsigned starti , m_startingX(startingX) , m_offsetX(m_startingX) , m_run(getNormalizedTextRun(run, m_normalizedRun, m_normalizedBuffer)) - , m_iterateBackwards(m_run.rtl()) , m_wordSpacingAdjustment(0) , m_padding(0) , m_padPerWordBreak(0) @@ -140,54 +139,33 @@ void ComplexTextController::setPadding(int padding) void ComplexTextController::reset() { - if (m_iterateBackwards) - m_indexOfNextScriptRun = m_run.length() - 1; - else - m_indexOfNextScriptRun = 0; + m_indexOfNextScriptRun = 0; m_offsetX = m_startingX; } -void ComplexTextController::setBackwardsIteration(bool isBackwards) -{ - m_iterateBackwards = isBackwards; - reset(); -} - // Advance to the next script run, returning false when the end of the // TextRun has been reached. bool ComplexTextController::nextScriptRun() { - if (m_iterateBackwards) { - // In right-to-left mode we need to render the shaped glyph backwards and - // also render the script runs themselves backwards. So given a TextRun: - // AAAAAAACTTTTTTT (A = Arabic, C = Common, T = Thai) - // we render: - // TTTTTTCAAAAAAA - // (and the glyphs in each A, C and T section are backwards too) - if (!hb_utf16_script_run_prev(&m_numCodePoints, &m_item.item, m_run.characters(), m_run.length(), &m_indexOfNextScriptRun)) - return false; - m_currentFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false).fontData; - } else { - if (!hb_utf16_script_run_next(&m_numCodePoints, &m_item.item, m_run.characters(), m_run.length(), &m_indexOfNextScriptRun)) - return false; - - // It is actually wrong to consider script runs at all in this code. - // Other WebKit code (e.g. Mac) segments complex text just by finding - // the longest span of text covered by a single font. - // But we currently need to call hb_utf16_script_run_next anyway to fill - // in the harfbuzz data structures to e.g. pick the correct script's shaper. - // So we allow that to run first, then do a second pass over the range it - // found and take the largest subregion that stays within a single font. - m_currentFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false).fontData; - unsigned endOfRun; - for (endOfRun = 1; endOfRun < m_item.item.length; ++endOfRun) { - const SimpleFontData* nextFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos + endOfRun], false).fontData; - if (nextFontData != m_currentFontData) - break; - } - m_item.item.length = endOfRun; - m_indexOfNextScriptRun = m_item.item.pos + endOfRun; + if (!hb_utf16_script_run_next(&m_numCodePoints, &m_item.item, m_run.characters(), m_run.length(), &m_indexOfNextScriptRun)) + return false; + + // It is actually wrong to consider script runs at all in this code. + // Other WebKit code (e.g. Mac) segments complex text just by finding + // the longest span of text covered by a single font. + // But we currently need to call hb_utf16_script_run_next anyway to fill + // in the harfbuzz data structures to e.g. pick the correct script's shaper. + // So we allow that to run first, then do a second pass over the range it + // found and take the largest subregion that stays within a single font. + m_currentFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos], false).fontData; + unsigned endOfRun; + for (endOfRun = 1; endOfRun < m_item.item.length; ++endOfRun) { + const SimpleFontData* nextFontData = m_font->glyphDataForCharacter(m_item.string[m_item.item.pos + endOfRun], false).fontData; + if (nextFontData != m_currentFontData) + break; } + m_item.item.length = endOfRun; + m_indexOfNextScriptRun = m_item.item.pos + endOfRun; setupFontForScriptRun(); shapeGlyphs(); @@ -273,7 +251,7 @@ void ComplexTextController::shapeGlyphs() { // HB_ShapeItem() resets m_item.num_glyphs. If the previous call to // HB_ShapeItem() used less space than was available, the capacity of - // the array may be larger than the current value of m_item.num_glyphs. + // the array may be larger than the current value of m_item.num_glyphs. // So, we need to reset the num_glyphs to the capacity of the array. m_item.num_glyphs = m_glyphsArrayCapacity; resetGlyphArrays(); @@ -291,62 +269,49 @@ void ComplexTextController::shapeGlyphs() void ComplexTextController::setGlyphXPositions(bool isRTL) { + const double rtlFlip = isRTL ? -1 : 1; double position = 0; - // logClustersIndex indexes logClusters for the first (or last when - // RTL) codepoint of the current glyph. Each time we advance a glyph, - // we skip over all the codepoints that contributed to the current - // glyph. + + // logClustersIndex indexes logClusters for the first codepoint of the current glyph. + // Each time we advance a glyph, we skip over all the codepoints that contributed to the current glyph. int logClustersIndex = 0; - if (isRTL) { - logClustersIndex = m_item.num_glyphs - 1; - - // Glyphs are stored in logical order, but for layout purposes we - // always go left to right. - for (int i = m_item.num_glyphs - 1; i >= 0; --i) { - if (!m_currentFontData->isZeroWidthSpaceGlyph(m_glyphs16[i])) { - // Whitespace must be laid out in logical order, so when inserting - // spaces in RTL (but iterating in LTR order) we must insert spaces - // _before_ the next glyph. - if (static_cast<unsigned>(i + 1) >= m_item.num_glyphs || m_item.attributes[i + 1].clusterStart) - position += m_letterSpacing; - - position += determineWordBreakSpacing(logClustersIndex); - } - - m_glyphs16[i] = m_item.glyphs[i]; - double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x); - m_xPositions[i] = m_offsetX + position + offsetX; - - while (logClustersIndex > 0 && logClusters()[logClustersIndex] == i) - logClustersIndex--; - - if (!m_currentFontData->isZeroWidthSpaceGlyph(m_glyphs16[i])) - position += truncateFixedPointToInteger(m_item.advances[i]); - } - } else { - for (size_t i = 0; i < m_item.num_glyphs; ++i) { - m_glyphs16[i] = m_item.glyphs[i]; - double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x); - m_xPositions[i] = m_offsetX + position + offsetX; + // Iterate through the glyphs in logical order, flipping for RTL where necessary. + // In RTL mode all variables are positive except m_xPositions, which starts from m_offsetX and runs negative. + // It is fixed up in a second pass below. + for (size_t i = 0; i < m_item.num_glyphs; ++i) { + while (static_cast<unsigned>(logClustersIndex) < m_item.item.length && logClusters()[logClustersIndex] < i) + logClustersIndex++; - if (m_currentFontData->isZeroWidthSpaceGlyph(m_glyphs16[i])) - continue; + // If the current glyph is just after a space, add in the word spacing. + position += determineWordBreakSpacing(logClustersIndex); - double advance = truncateFixedPointToInteger(m_item.advances[i]); + m_glyphs16[i] = m_item.glyphs[i]; + double offsetX = truncateFixedPointToInteger(m_item.offsets[i].x); + double advance = truncateFixedPointToInteger(m_item.advances[i]); + if (isRTL) + offsetX -= advance; - advance += determineWordBreakSpacing(logClustersIndex); + m_xPositions[i] = m_offsetX + (position * rtlFlip) + offsetX; - if (m_item.attributes[i].clusterStart) - advance += m_letterSpacing; + if (m_currentFontData->isZeroWidthSpaceGlyph(m_glyphs16[i])) + continue; - while (static_cast<unsigned>(logClustersIndex) < m_item.item.length && logClusters()[logClustersIndex] == i) - logClustersIndex++; + // At the end of each cluster, add in the letter spacing. + if (i + 1 == m_item.num_glyphs || m_item.attributes[i + 1].clusterStart) + position += m_letterSpacing; - position += advance; - } + position += advance; } - m_pixelWidth = std::max(position, 0.0); + const double width = position; + + // Now that we've computed the total width, do another pass to fix positioning for RTL. + if (isRTL) { + for (size_t i = 0; i < m_item.num_glyphs; ++i) + m_xPositions[i] += width; + } + + m_pixelWidth = std::max(width, 0.0); m_offsetX += m_pixelWidth; } diff --git a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h index 4ebbd89..e264b99 100644 --- a/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h +++ b/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h @@ -52,9 +52,8 @@ class SimpleFontData; // only ever done with script runs since the shapers only know how to deal with // a single script. // -// After creating it, the script runs are either iterated backwards or forwards. -// It defaults to backwards for RTL and forwards otherwise (which matches the -// presentation order), however you can set it with |setBackwardsIteration|. +// Iteration is always in logical (aka reading) order. For RTL text that means +// the rightmost part of the text will be first. // // Once you have setup the object, call |nextScriptRun| to get the first script // run. This will return false when the iteration is complete. At any time you @@ -70,7 +69,6 @@ public: // WebKit uses this to justify text. void setPadding(int); void reset(); - void setBackwardsIteration(bool); // Advance to the next script run, returning false when the end of the // TextRun has been reached. bool nextScriptRun(); @@ -148,7 +146,6 @@ private: OwnPtr<TextRun> m_normalizedRun; OwnArrayPtr<UChar> m_normalizedBuffer; // A buffer for normalized run. const TextRun& m_run; - bool m_iterateBackwards; int m_wordSpacingAdjustment; // delta adjustment (pixels) for each word break. float m_padding; // pixels to be distributed over the line at word breaks. float m_padPerWordBreak; // pixels to be added to each word break. diff --git a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp b/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp index 507c227..569dff4 100644 --- a/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp +++ b/Source/WebCore/platform/graphics/chromium/DrawingBufferChromium.cpp @@ -67,9 +67,14 @@ static unsigned generateColorTexture(GraphicsContext3D* context, const IntSize& } -DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size) +DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, + const IntSize& size, + bool multisampleExtensionSupported, + bool packedDepthStencilExtensionSupported) : m_context(context) , m_size(size) + , m_multisampleExtensionSupported(multisampleExtensionSupported) + , m_packedDepthStencilExtensionSupported(packedDepthStencilExtensionSupported) , m_fbo(0) , m_colorBuffer(0) , m_depthStencilBuffer(0) @@ -85,6 +90,7 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size) m_fbo = context->createFramebuffer(); context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_fbo); m_colorBuffer = generateColorTexture(context, size); + createSecondaryBuffers(); } DrawingBuffer::~DrawingBuffer() diff --git a/Source/WebCore/platform/graphics/chromium/FontLinux.cpp b/Source/WebCore/platform/graphics/chromium/FontLinux.cpp index b256e70..f1eadf2 100644 --- a/Source/WebCore/platform/graphics/chromium/FontLinux.cpp +++ b/Source/WebCore/platform/graphics/chromium/FontLinux.cpp @@ -234,28 +234,21 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon return controller.widthOfFullRun(); } -static int glyphIndexForXPositionInScriptRun(const ComplexTextController& controller, int x) +static int glyphIndexForXPositionInScriptRun(const ComplexTextController& controller, int targetX) { - const HB_Fixed* advances = controller.advances(); - int letterSpacing = controller.letterSpacing(); - int glyphIndex; - if (controller.rtl()) { - for (glyphIndex = controller.length() - 1; glyphIndex >= 0; --glyphIndex) { - // When iterating LTR over RTL text, we must include the whitespace - // _before_ the glyph, so no + 1 here. - if (x < (static_cast<int>(controller.length()) - glyphIndex) * letterSpacing + truncateFixedPointToInteger(advances[glyphIndex])) - break; - x -= truncateFixedPointToInteger(advances[glyphIndex]); - } - } else { - for (glyphIndex = 0; static_cast<unsigned>(glyphIndex) < controller.length(); ++glyphIndex) { - if (x < (glyphIndex * letterSpacing + truncateFixedPointToInteger(advances[glyphIndex]))) - break; - x -= truncateFixedPointToInteger(advances[glyphIndex]); - } + // Iterate through the glyphs in logical order, seeing whether targetX falls between the previous + // position and halfway through the current glyph. + // FIXME: this code probably belongs in ComplexTextController. + int lastX = controller.rtl() ? controller.width() : 0; + for (int glyphIndex = 0; static_cast<unsigned>(glyphIndex) < controller.length(); ++glyphIndex) { + int advance = truncateFixedPointToInteger(controller.advances()[glyphIndex]); + int nextX = static_cast<int>(controller.xPositions()[glyphIndex]) + advance / 2; + if (std::min(nextX, lastX) <= targetX && targetX <= std::max(nextX, lastX)) + return glyphIndex; + lastX = nextX; } - return glyphIndex; + return controller.length() - 1; } // Return the code point index for the given |x| offset into the text run. @@ -345,20 +338,16 @@ FloatRect Font::selectionRectForComplexText(const TextRun& run, const FloatPoint& point, int height, int from, int to) const { - int fromX = -1, toX = -1, fromAdvance = -1, toAdvance = -1; + int fromX = -1, toX = -1; ComplexTextController controller(run, 0, this); controller.setWordSpacingAdjustment(wordSpacing()); controller.setLetterSpacingAdjustment(letterSpacing()); - // Base will point to the x offset for the current script run. Note that, in + // Base will point to the x offset for the start of the current script run. Note that, in // the LTR case, width will be 0. int base = controller.rtl() ? controller.widthOfFullRun() : 0; - const int leftEdge = base; - - // We want to enumerate the script runs in code point order in the following - // code. This call also resets |controller|. - controller.setBackwardsIteration(false); + controller.reset(); while (controller.nextScriptRun() && (fromX == -1 || toX == -1)) { // ComplexTextController will helpfully accululate the x offsets for different // script runs for us. For this code, however, we always want the x offsets @@ -374,14 +363,16 @@ FloatRect Font::selectionRectForComplexText(const TextRun& run, // position. int glyph = controller.logClusters()[from]; fromX = base + controller.xPositions()[glyph]; - fromAdvance = controller.advances()[glyph]; + if (controller.rtl()) + fromX += truncateFixedPointToInteger(controller.advances()[glyph]); } else from -= controller.numCodePoints(); if (toX == -1 && to >= 0 && static_cast<unsigned>(to) < controller.numCodePoints()) { int glyph = controller.logClusters()[to]; toX = base + controller.xPositions()[glyph]; - toAdvance = controller.advances()[glyph]; + if (controller.rtl()) + toX += truncateFixedPointToInteger(controller.advances()[glyph]); } else to -= controller.numCodePoints(); @@ -390,14 +381,11 @@ FloatRect Font::selectionRectForComplexText(const TextRun& run, } // The position in question might be just after the text. - const int rightEdge = base; + const int endEdge = base; if (fromX == -1 && !from) - fromX = leftEdge; - else if (controller.rtl()) - fromX += truncateFixedPointToInteger(fromAdvance); - + fromX = endEdge; if (toX == -1 && !to) - toX = rightEdge; + toX = endEdge; ASSERT(fromX != -1 && toX != -1); diff --git a/Source/WebCore/platform/graphics/chromium/LayerTexture.h b/Source/WebCore/platform/graphics/chromium/LayerTexture.h index 312adfa..711e687 100644 --- a/Source/WebCore/platform/graphics/chromium/LayerTexture.h +++ b/Source/WebCore/platform/graphics/chromium/LayerTexture.h @@ -48,6 +48,11 @@ public: bool isValid(const IntSize&, unsigned format); bool reserve(const IntSize&, unsigned format); void unreserve(); + bool isReserved() + { + ASSERT(m_textureManager); + return m_textureManager->isProtected(m_token); + } void bindTexture(); void framebufferTexture2D(); diff --git a/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp index 31649a4..b4b4a72 100644 --- a/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp +++ b/Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp @@ -315,12 +315,18 @@ void LayerTilerChromium::update(TilePaintInterface& painter, const IntRect& cont IntRect sourceRect = tileContentRect(i, j); const IntPoint anchor = sourceRect.location(); sourceRect.intersect(layerRectToContentRect(tile->m_dirtyLayerRect)); + if (sourceRect.isEmpty()) + continue; // Calculate tile-space rectangle to upload into. IntRect destRect(IntPoint(sourceRect.x() - anchor.x(), sourceRect.y() - anchor.y()), sourceRect.size()); + ASSERT(destRect.x() >= 0); + ASSERT(destRect.y() >= 0); // Offset from paint rectangle to this tile's dirty rectangle. IntPoint paintOffset(sourceRect.x() - paintRect.x(), sourceRect.y() - paintRect.y()); + ASSERT(paintOffset.x() >= 0); + ASSERT(paintOffset.y() >= 0); uint8_t* pixelSource; if (paintRect.width() == sourceRect.width() && !paintOffset.x()) diff --git a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp index e8b9a12..696828f 100644 --- a/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp +++ b/Source/WebCore/platform/graphics/chromium/RenderSurfaceChromium.cpp @@ -124,6 +124,9 @@ bool RenderSurfaceChromium::prepareContentsTexture() if (!m_contentsTexture) m_contentsTexture = LayerTexture::create(layerRenderer()->context(), textureManager); + if (m_contentsTexture->isReserved()) + return true; + if (!m_contentsTexture->reserve(requiredSize, GraphicsContext3D::RGBA)) { m_skipsDraw = true; return false; diff --git a/Source/WebCore/platform/graphics/chromium/TextureManager.cpp b/Source/WebCore/platform/graphics/chromium/TextureManager.cpp index 9579ef9..c4ad958 100644 --- a/Source/WebCore/platform/graphics/chromium/TextureManager.cpp +++ b/Source/WebCore/platform/graphics/chromium/TextureManager.cpp @@ -70,6 +70,11 @@ bool TextureManager::hasTexture(TextureToken token) return false; } +bool TextureManager::isProtected(TextureToken token) +{ + return token && hasTexture(token) && m_textures.get(token).isProtected; +} + void TextureManager::protectTexture(TextureToken token) { ASSERT(hasTexture(token)); diff --git a/Source/WebCore/platform/graphics/chromium/TextureManager.h b/Source/WebCore/platform/graphics/chromium/TextureManager.h index 1e850cd..4891cc7 100644 --- a/Source/WebCore/platform/graphics/chromium/TextureManager.h +++ b/Source/WebCore/platform/graphics/chromium/TextureManager.h @@ -51,6 +51,7 @@ public: void protectTexture(TextureToken); void unprotectTexture(TextureToken); + bool isProtected(TextureToken); private: TextureManager(GraphicsContext3D*, size_t memoryLimitBytes, int maxTextureSize); diff --git a/Source/WebCore/platform/graphics/filters/FEBlend.cpp b/Source/WebCore/platform/graphics/filters/FEBlend.cpp index 7eeb128..ac68266 100644 --- a/Source/WebCore/platform/graphics/filters/FEBlend.cpp +++ b/Source/WebCore/platform/graphics/filters/FEBlend.cpp @@ -28,6 +28,8 @@ #include "Filter.h" #include "FloatPoint.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> diff --git a/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp b/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp index e0b15d1..33c4467 100644 --- a/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp +++ b/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp @@ -27,6 +27,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> #include <wtf/MathExtras.h> diff --git a/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp b/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp index ca8e5d3..ab59332 100644 --- a/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp +++ b/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp @@ -28,6 +28,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> #include <wtf/MathExtras.h> diff --git a/Source/WebCore/platform/graphics/filters/FEComposite.cpp b/Source/WebCore/platform/graphics/filters/FEComposite.cpp index 80cb2b2..bc7fa80 100644 --- a/Source/WebCore/platform/graphics/filters/FEComposite.cpp +++ b/Source/WebCore/platform/graphics/filters/FEComposite.cpp @@ -28,6 +28,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> diff --git a/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp b/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp index b8f8aea..0483626 100644 --- a/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp +++ b/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp @@ -27,6 +27,8 @@ #include "FEConvolveMatrix.h" #include "Filter.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> diff --git a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp index 14d57f4..a8a825a 100644 --- a/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp +++ b/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp @@ -25,6 +25,8 @@ #include "FEDiffuseLighting.h" #include "LightSource.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp b/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp index b5151bf..88c87b7 100644 --- a/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp +++ b/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp @@ -28,6 +28,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> diff --git a/Source/WebCore/platform/graphics/filters/FEFlood.cpp b/Source/WebCore/platform/graphics/filters/FEFlood.cpp index 8bfdef8..0e0e94c 100644 --- a/Source/WebCore/platform/graphics/filters/FEFlood.cpp +++ b/Source/WebCore/platform/graphics/filters/FEFlood.cpp @@ -27,6 +27,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp b/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp index 37b5992..20fd923 100644 --- a/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp +++ b/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp @@ -29,6 +29,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> #include <wtf/MathExtras.h> diff --git a/Source/WebCore/platform/graphics/filters/FEMerge.cpp b/Source/WebCore/platform/graphics/filters/FEMerge.cpp index 4395321..4099a96 100644 --- a/Source/WebCore/platform/graphics/filters/FEMerge.cpp +++ b/Source/WebCore/platform/graphics/filters/FEMerge.cpp @@ -26,6 +26,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FEMorphology.cpp b/Source/WebCore/platform/graphics/filters/FEMorphology.cpp index 45c7edb..1eb554b 100644 --- a/Source/WebCore/platform/graphics/filters/FEMorphology.cpp +++ b/Source/WebCore/platform/graphics/filters/FEMorphology.cpp @@ -27,6 +27,8 @@ #include "FEMorphology.h" #include "Filter.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> #include <wtf/Vector.h> diff --git a/Source/WebCore/platform/graphics/filters/FEOffset.cpp b/Source/WebCore/platform/graphics/filters/FEOffset.cpp index f1d5914..99cac2d 100644 --- a/Source/WebCore/platform/graphics/filters/FEOffset.cpp +++ b/Source/WebCore/platform/graphics/filters/FEOffset.cpp @@ -28,6 +28,8 @@ #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp b/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp index d21dafd..36a6b72 100644 --- a/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp +++ b/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp @@ -25,6 +25,8 @@ #include "FESpecularLighting.h" #include "LightSource.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FETile.cpp b/Source/WebCore/platform/graphics/filters/FETile.cpp index e516c7e..1fcb71b 100644 --- a/Source/WebCore/platform/graphics/filters/FETile.cpp +++ b/Source/WebCore/platform/graphics/filters/FETile.cpp @@ -27,7 +27,9 @@ #include "Filter.h" #include "GraphicsContext.h" #include "Pattern.h" +#include "RenderTreeAsText.h" #include "SVGImageBufferTools.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FETurbulence.cpp b/Source/WebCore/platform/graphics/filters/FETurbulence.cpp index f1a159b..068acee 100644 --- a/Source/WebCore/platform/graphics/filters/FETurbulence.cpp +++ b/Source/WebCore/platform/graphics/filters/FETurbulence.cpp @@ -27,6 +27,8 @@ #include "FETurbulence.h" #include "Filter.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/ByteArray.h> #include <wtf/MathExtras.h> diff --git a/Source/WebCore/platform/graphics/filters/FilterEffect.cpp b/Source/WebCore/platform/graphics/filters/FilterEffect.cpp index 05c2a47..85154b5 100644 --- a/Source/WebCore/platform/graphics/filters/FilterEffect.cpp +++ b/Source/WebCore/platform/graphics/filters/FilterEffect.cpp @@ -24,6 +24,9 @@ #if ENABLE(FILTERS) #include "FilterEffect.h" +#include "Filter.h" +#include "ImageBuffer.h" +#include "TextStream.h" #include <wtf/ByteArray.h> namespace WebCore { diff --git a/Source/WebCore/platform/graphics/filters/FilterEffect.h b/Source/WebCore/platform/graphics/filters/FilterEffect.h index 2554d4b..062dd1b 100644 --- a/Source/WebCore/platform/graphics/filters/FilterEffect.h +++ b/Source/WebCore/platform/graphics/filters/FilterEffect.h @@ -23,13 +23,10 @@ #define FilterEffect_h #if ENABLE(FILTERS) -#include "Filter.h" #include "FloatRect.h" -#include "GraphicsContext.h" -#include "ImageBuffer.h" -#include "RenderTreeAsText.h" -#include "TextStream.h" +#include "IntRect.h" +#include <wtf/ByteArray.h> #include <wtf/PassOwnPtr.h> #include <wtf/RefCounted.h> #include <wtf/RefPtr.h> @@ -37,6 +34,11 @@ namespace WebCore { +class Filter; +class FilterEffect; +class ImageBuffer; +class TextStream; + typedef Vector<RefPtr<FilterEffect> > FilterEffectVector; enum FilterEffectType { diff --git a/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp b/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp index 2d2de00..45d74f5 100644 --- a/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp +++ b/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp @@ -23,9 +23,11 @@ #include "SourceAlpha.h" #include "Color.h" +#include "Filter.h" #include "GraphicsContext.h" #include "PlatformString.h" -#include "Filter.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/StdLibExtras.h> diff --git a/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp b/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp index 04082ad..8726bf3 100644 --- a/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp +++ b/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp @@ -22,9 +22,11 @@ #if ENABLE(FILTERS) #include "SourceGraphic.h" +#include "Filter.h" #include "GraphicsContext.h" #include "PlatformString.h" -#include "Filter.h" +#include "RenderTreeAsText.h" +#include "TextStream.h" #include <wtf/StdLibExtras.h> diff --git a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp index d2415ca..c283068 100644 --- a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp +++ b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.cpp @@ -40,14 +40,16 @@ namespace WebCore { PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, const IntSize& size) { - RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, size)); Extensions3D* extensions = context->getExtensions(); bool multisampleSupported = extensions->supports("GL_ANGLE_framebuffer_blit") && extensions->supports("GL_ANGLE_framebuffer_multisample"); if (multisampleSupported) { extensions->ensureEnabled("GL_ANGLE_framebuffer_blit"); extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample"); } - drawingBuffer->m_multisampleExtensionSupported = multisampleSupported; + bool packedDepthStencilSupported = extensions->supports("GL_OES_packed_depth_stencil"); + if (packedDepthStencilSupported) + extensions->ensureEnabled("GL_OES_packed_depth_stencil"); + RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, size, multisampleSupported, packedDepthStencilSupported)); return (drawingBuffer->m_context) ? drawingBuffer.release() : 0; } @@ -88,6 +90,24 @@ void DrawingBuffer::clear() m_context.clear(); } +void DrawingBuffer::createSecondaryBuffers() +{ + const GraphicsContext3D::Attributes& attributes = m_context->getContextAttributes(); + + // Create the stencil and depth buffer if needed + if (!multisample() && (attributes.stencil || attributes.depth)) + m_depthStencilBuffer = m_context->createRenderbuffer(); + + // create a multisample FBO + if (multisample()) { + m_multisampleFBO = m_context->createFramebuffer(); + m_context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO); + m_multisampleColorBuffer = m_context->createRenderbuffer(); + if (attributes.stencil || attributes.depth) + m_multisampleDepthStencilBuffer = m_context->createRenderbuffer(); + } +} + void DrawingBuffer::reset(const IntSize& newSize) { if (m_size == newSize) @@ -111,10 +131,13 @@ void DrawingBuffer::reset(const IntSize& newSize) if (attributes.stencil || attributes.depth) { // We don't allow the logic where stencil is required and depth is not. // See GraphicsContext3D constructor. - if (attributes.stencil && attributes.depth) - internalDepthStencilFormat = GraphicsContext3D::DEPTH_STENCIL; + + // FIXME: If packed depth/stencil is not supported, we should + // create separate renderbuffers for depth and stencil. + if (attributes.stencil && attributes.depth && m_packedDepthStencilExtensionSupported) + internalDepthStencilFormat = Extensions3D::DEPTH24_STENCIL8; else - internalDepthStencilFormat = GraphicsContext3D::DEPTH_COMPONENT; + internalDepthStencilFormat = GraphicsContext3D::DEPTH_COMPONENT16; } // resize multisample FBO @@ -150,7 +173,7 @@ void DrawingBuffer::reset(const IntSize& newSize) m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, m_colorBuffer); m_context->texImage2DResourceSafe(GraphicsContext3D::TEXTURE_2D, 0, internalColorFormat, m_size.width(), m_size.height(), 0, colorFormat, GraphicsContext3D::UNSIGNED_BYTE); - m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE, m_colorBuffer, 0); + m_context->framebufferTexture2D(GraphicsContext3D::FRAMEBUFFER, GraphicsContext3D::COLOR_ATTACHMENT0, GraphicsContext3D::TEXTURE_2D, m_colorBuffer, 0); m_context->bindTexture(GraphicsContext3D::TEXTURE_2D, 0); if (!multisample() && (attributes.stencil || attributes.depth)) { m_context->bindRenderbuffer(GraphicsContext3D::RENDERBUFFER, m_depthStencilBuffer); diff --git a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h index 9f79889..e0e0ee1 100644 --- a/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h +++ b/Source/WebCore/platform/graphics/gpu/DrawingBuffer.h @@ -63,6 +63,9 @@ public: // Clear all resources from this object, as well as context. Called when context is destroyed // to prevent invalid accesses to the resources. void clear(); + + // Create the depth/stencil and multisample buffers, if needed. + void createSecondaryBuffers(); // Copies the multisample color buffer to the normal color buffer and leaves m_fbo bound void commit(long x = 0, long y = 0, long width = -1, long height = -1); @@ -92,7 +95,7 @@ public: private: static PassRefPtr<DrawingBuffer> create(GraphicsContext3D*, const IntSize&); - DrawingBuffer(GraphicsContext3D*, const IntSize&); + DrawingBuffer(GraphicsContext3D*, const IntSize&, bool multisampleExtensionSupported, bool packedDepthStencilExtensionSupported); // Platform specific function called after reset() so each platform can do extra work if needed void didReset(); @@ -100,6 +103,7 @@ private: RefPtr<GraphicsContext3D> m_context; IntSize m_size; bool m_multisampleExtensionSupported; + bool m_packedDepthStencilExtensionSupported; Platform3DObject m_fbo; Platform3DObject m_colorBuffer; Platform3DObject m_depthStencilBuffer; diff --git a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm b/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm index 89dcb9c..601454e 100644 --- a/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm +++ b/Source/WebCore/platform/graphics/gpu/mac/DrawingBufferMac.mm @@ -36,9 +36,14 @@ namespace WebCore { -DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size) +DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, + const IntSize& size, + bool multisampleExtensionSupported, + bool packedDepthStencilExtensionSupported) : m_context(context) , m_size(size) + , m_multisampleExtensionSupported(multisampleExtensionSupported) + , m_packedDepthStencilExtensionSupported(packedDepthStencilExtensionSupported) , m_fbo(context->createFramebuffer()) , m_colorBuffer(0) , m_depthStencilBuffer(0) @@ -77,21 +82,7 @@ DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, const IntSize& size) return; } - const GraphicsContext3D::Attributes& attributes = context->getContextAttributes(); - - // Create the stencil and depth buffer if needed - if (!multisample() && (attributes.stencil || attributes.depth)) - m_depthStencilBuffer = context->createRenderbuffer(); - - // create a multisample FBO - if (multisample()) { - m_multisampleFBO = context->createFramebuffer(); - context->bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO); - m_multisampleColorBuffer = context->createRenderbuffer(); - if (attributes.stencil || attributes.depth) - m_multisampleDepthStencilBuffer = context->createRenderbuffer(); - } - + createSecondaryBuffers(); reset(size); } diff --git a/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp b/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp index d179601..a4b20be 100644 --- a/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/GStreamerGWorld.cpp @@ -43,7 +43,8 @@ gboolean gstGWorldSyncMessageCallback(GstBus* bus, GstMessage* message, gpointer GStreamerGWorld* gstGWorld = static_cast<GStreamerGWorld*>(data); - if (gst_structure_has_name(message->structure, "prepare-xwindow-id")) + if (gst_structure_has_name(message->structure, "prepare-xwindow-id") + || gst_structure_has_name(message->structure, "have-ns-view")) gstGWorld->setWindowOverlay(message); return TRUE; } diff --git a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h index f2a3ff2..d71e6d3 100644 --- a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h +++ b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindow.h @@ -25,6 +25,10 @@ #include <wtf/PassRefPtr.h> #include <wtf/RefCounted.h> +#if PLATFORM(MAC) +#include <wtf/RetainPtr.h> +#endif + typedef struct _GstMessage GstMessage; namespace WebCore { @@ -38,13 +42,22 @@ class PlatformVideoWindow : public RefCounted<PlatformVideoWindow> { void prepareForOverlay(GstMessage*); +#if !PLATFORM(MAC) PlatformWidget window() const { return m_window; } +#else + PlatformWidget window() const { return m_window.get(); } +#endif unsigned long videoWindowId() const { return m_videoWindowId; } private: unsigned long m_videoWindowId; PlatformWidget m_videoWindow; +#if !PLATFORM(MAC) PlatformWidget m_window; +#else + RetainPtr<NSView> m_window; +#endif + }; } diff --git a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm new file mode 100644 index 0000000..e98cf9b --- /dev/null +++ b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowMac.mm @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 Igalia S.L + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" +#include "PlatformVideoWindow.h" + +#if USE(GSTREAMER) + +#include <gst/gst.h> + +using namespace WebCore; + +PlatformVideoWindow::PlatformVideoWindow() +{ + m_window.adoptNS([[NSView alloc] init]); + m_videoWindowId = reinterpret_cast<unsigned long>(m_window.get()); +} + +PlatformVideoWindow::~PlatformVideoWindow() +{ + m_videoWindowId = 0; +} + +void PlatformVideoWindow::prepareForOverlay(GstMessage* message) +{ + if (gst_structure_has_name(message->structure, "have-ns-view")) { + m_videoWindow = static_cast<PlatformWidget>(g_value_get_pointer(gst_structure_get_value(message->structure, "nsview"))); + ASSERT(m_videoWindow); + [m_window.get() addSubview:m_videoWindow]; + } +} + +#endif // USE(GSTREAMER) diff --git a/Source/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp b/Source/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp index acd431d..4e17f94 100644 --- a/Source/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp +++ b/Source/WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp @@ -34,7 +34,6 @@ #include "FontData.h" #include "NotImplemented.h" #include "Path.h" -#include "Pen.h" #include <wtf/text/CString.h> #include <GraphicsDefs.h> #include <Region.h> diff --git a/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp index e237fc0..253cd84 100644 --- a/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp +++ b/Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp @@ -496,8 +496,17 @@ void GraphicsContext::fillPath(const Path& path) { QPainter* shadowPainter = shadow->beginShadowLayer(this, platformPath.controlPointRect()); if (shadowPainter) { - shadowPainter->setCompositionMode(QPainter::CompositionMode_Source); - shadowPainter->fillPath(platformPath, QColor(m_data->shadow.m_color)); + if (m_state.fillPattern) { + AffineTransform affine; + shadowPainter->setOpacity(static_cast<qreal>(shadow->m_color.alpha()) / 255); + shadowPainter->fillPath(platformPath, QBrush(m_state.fillPattern->createPlatformPattern(affine))); + } else if (m_state.fillGradient) { + QBrush brush(*m_state.fillGradient->platformGradient()); + brush.setTransform(m_state.fillGradient->gradientSpaceTransform()); + shadowPainter->setOpacity(static_cast<qreal>(shadow->m_color.alpha()) / 255); + shadowPainter->fillPath(platformPath, brush); + } else + shadowPainter->fillPath(platformPath, QColor(shadow->m_color)); shadow->endShadowLayer(this); } } else { diff --git a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp index f31844a..75fb427 100644 --- a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp +++ b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp @@ -20,6 +20,8 @@ #include "config.h" #include "GraphicsLayerQt.h" +#if !defined(QT_NO_GRAPHICSVIEW) + #include "CurrentTime.h" #include "FloatRect.h" #include "GraphicsContext.h" @@ -1375,6 +1377,7 @@ static inline qreal applyTimingFunction(const TimingFunction* timingFunction, qr // Helper functions to safely get a value out of WebCore's AnimationValue*. +#ifndef QT_NO_ANIMATION static void webkitAnimationToQtAnimationValue(const AnimationValue* animationValue, TransformOperations& transformOperations) { transformOperations = TransformOperations(); @@ -1390,7 +1393,6 @@ static void webkitAnimationToQtAnimationValue(const AnimationValue* animationVal realValue = animationValue ? static_cast<const FloatAnimationValue*>(animationValue)->value() : 0; } -#ifndef QT_NO_ANIMATION // We put a bit of the functionality in a base class to allow casting and to save some code size. class AnimationQtBase : public QAbstractAnimation { @@ -1777,3 +1779,6 @@ void GraphicsLayerQt::resumeAnimations() } #include <GraphicsLayerQt.moc> + + +#endif // QT_NO_GRAPHICSVIEW diff --git a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h index b1692d2..8027143 100644 --- a/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h +++ b/Source/WebCore/platform/graphics/qt/GraphicsLayerQt.h @@ -26,6 +26,8 @@ #include "GraphicsLayer.h" #include "GraphicsLayerClient.h" +#if !defined(QT_NO_GRAPHICSVIEW) + namespace WebCore { class GraphicsLayerQtImpl; @@ -92,4 +94,5 @@ private: }; } +#endif #endif // GraphicsLayerQt_h diff --git a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp index 2bbb9ce..71352e4 100644 --- a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp +++ b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.cpp @@ -131,7 +131,7 @@ String ImageDecoderQt::filenameExtension() const return String(m_format.constData(), m_format.length()); }; -RGBA32Buffer* ImageDecoderQt::frameBufferAtIndex(size_t index) +ImageFrame* ImageDecoderQt::frameBufferAtIndex(size_t index) { // In case the ImageDecoderQt got recreated we don't know // yet how many images we are going to have and need to @@ -145,8 +145,8 @@ RGBA32Buffer* ImageDecoderQt::frameBufferAtIndex(size_t index) if (index >= count) return 0; - RGBA32Buffer& frame = m_frameBufferCache[index]; - if (frame.status() != RGBA32Buffer::FrameComplete && m_reader) + ImageFrame& frame = m_frameBufferCache[index]; + if (frame.status() != ImageFrame::FrameComplete && m_reader) internalReadImage(index); return &frame; } @@ -185,7 +185,7 @@ void ImageDecoderQt::internalReadImage(size_t frameIndex) // Attempt to return some memory for (int i = 0; i < m_frameBufferCache.size(); ++i) { - if (m_frameBufferCache[i].status() != RGBA32Buffer::FrameComplete) + if (m_frameBufferCache[i].status() != ImageFrame::FrameComplete) return; } @@ -211,10 +211,10 @@ bool ImageDecoderQt::internalHandleCurrentImage(size_t frameIndex) return false; } - // now into the RGBA32Buffer - even if the image is not - RGBA32Buffer* const buffer = &m_frameBufferCache[frameIndex]; + // now into the ImageFrame - even if the image is not + ImageFrame* const buffer = &m_frameBufferCache[frameIndex]; buffer->setRect(m_reader->currentImageRect()); - buffer->setStatus(RGBA32Buffer::FrameComplete); + buffer->setStatus(ImageFrame::FrameComplete); buffer->setDuration(m_reader->nextImageDelay()); buffer->setPixmap(pixmap); return true; diff --git a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.h b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.h index 23fb79a..bccb5be 100644 --- a/Source/WebCore/platform/graphics/qt/ImageDecoderQt.h +++ b/Source/WebCore/platform/graphics/qt/ImageDecoderQt.h @@ -48,7 +48,7 @@ public: virtual bool isSizeAvailable(); virtual size_t frameCount(); virtual int repetitionCount() const; - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); virtual String filenameExtension() const; diff --git a/Source/WebCore/platform/graphics/qt/ImageQt.cpp b/Source/WebCore/platform/graphics/qt/ImageQt.cpp index 49afd29..58f82ef 100644 --- a/Source/WebCore/platform/graphics/qt/ImageQt.cpp +++ b/Source/WebCore/platform/graphics/qt/ImageQt.cpp @@ -68,6 +68,10 @@ static QPixmap loadResourcePixmap(const char *name) pixmap = QWebSettings::webGraphic(QWebSettings::DeleteButtonGraphic); else if (!qstrcmp(name, "inputSpeech")) pixmap = QWebSettings::webGraphic(QWebSettings::InputSpeechButtonGraphic); + else if (!qstrcmp(name, "searchCancelButton")) + pixmap = QWebSettings::webGraphic(QWebSettings::SearchCancelButtonGraphic); + else if (!qstrcmp(name, "searchCancelButtonPressed")) + pixmap = QWebSettings::webGraphic(QWebSettings::SearchCancelButtonPressedGraphic); return pixmap; } @@ -121,8 +125,30 @@ void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const if (!pixmap.hasAlpha() && p->compositionMode() == QPainter::CompositionMode_SourceOver) p->setCompositionMode(QPainter::CompositionMode_Source); - /* Translate the coordinates as phase is not in world matrix coordinate space but the tile rect origin is. */ QTransform transform(patternTransform); + + // If this would draw more than one scaled tile, we scale the pixmap first and then use the result to draw. + if (transform.type() == QTransform::TxScale) { + QRectF tileRectInTargetCoords = (transform * QTransform().translate(phase.x(), phase.y())).mapRect(tr); + + bool tileWillBePaintedOnlyOnce = tileRectInTargetCoords.contains(dr); + if (!tileWillBePaintedOnlyOnce) { + QSizeF scaledSize(float(pixmap.width()) * transform.m11(), float(pixmap.height()) * transform.m22()); + QPixmap scaledPixmap(scaledSize.toSize()); + if (pixmap.hasAlpha()) + scaledPixmap.fill(Qt::transparent); + { + QPainter painter(&scaledPixmap); + painter.setCompositionMode(QPainter::CompositionMode_Source); + painter.setRenderHints(p->renderHints()); + painter.drawPixmap(QRect(0, 0, scaledPixmap.width(), scaledPixmap.height()), pixmap); + } + pixmap = scaledPixmap; + transform = QTransform::fromTranslate(transform.dx(), transform.dy()); + } + } + + /* Translate the coordinates as phase is not in world matrix coordinate space but the tile rect origin is. */ transform *= QTransform().translate(phase.x(), phase.y()); transform.translate(tr.x(), tr.y()); diff --git a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp index dd4b6e6..be6f732 100644 --- a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp +++ b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.cpp @@ -108,7 +108,7 @@ MediaPlayerPrivateQt::MediaPlayerPrivateQt(MediaPlayer* player) , m_queuedSeek(-1) , m_preload(MediaPlayer::Auto) { - m_mediaPlayer->bind(m_videoItem); + m_mediaPlayer->setVideoOutput(m_videoItem); m_videoScene->addItem(m_videoItem); // Signal Handlers @@ -587,6 +587,22 @@ IntSize MediaPlayerPrivateQt::naturalSize() const return m_naturalSize; } +void MediaPlayerPrivateQt::removeVideoItem() +{ + m_oldNaturalSize = m_naturalSize; + m_mediaPlayer->setVideoOutput(static_cast<QGraphicsVideoItem*>(0)); + m_videoScene->removeItem(m_videoItem); +} + +void MediaPlayerPrivateQt::restoreVideoItem() +{ + m_mediaPlayer->setVideoOutput(m_videoItem); + m_videoScene->addItem(m_videoItem); + // FIXME: a qtmobility bug, need to reset the size when restore the videoitem, otherwise the size is 0 + // http://bugreports.qt.nokia.com/browse/QTMOBILITY-971 + nativeSizeChanged(QSize(m_oldNaturalSize)); +} + void MediaPlayerPrivateQt::paint(GraphicsContext* context, const IntRect& rect) { #if USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h index 93c9d1c..2621432 100644 --- a/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h +++ b/Source/WebCore/platform/graphics/qt/MediaPlayerPrivateQt.h @@ -90,7 +90,7 @@ public: void paint(GraphicsContext*, const IntRect&); - bool supportsFullscreen() const { return false; } + bool supportsFullscreen() const { return true; } #if USE(ACCELERATED_COMPOSITING) #if USE(TEXTURE_MAPPER) @@ -108,6 +108,11 @@ public: #endif virtual PlatformMedia platformMedia() const; + + QMediaPlayer* mediaPlayer() const { return m_mediaPlayer; } + void removeVideoItem(); + void restoreVideoItem(); + private slots: void mediaStatusChanged(QMediaPlayer::MediaStatus); void handleError(QMediaPlayer::Error); @@ -142,6 +147,7 @@ private: IntSize m_currentSize; IntSize m_naturalSize; + IntSize m_oldNaturalSize; bool m_isVisible; bool m_isSeeking; bool m_composited; diff --git a/Source/WebCore/platform/graphics/skia/BitmapImageSingleFrameSkia.h b/Source/WebCore/platform/graphics/skia/BitmapImageSingleFrameSkia.h index 553f203..974f126 100644 --- a/Source/WebCore/platform/graphics/skia/BitmapImageSingleFrameSkia.h +++ b/Source/WebCore/platform/graphics/skia/BitmapImageSingleFrameSkia.h @@ -82,6 +82,8 @@ private: explicit BitmapImageSingleFrameSkia(const SkBitmap&); }; +FloatRect normalizeRect(const FloatRect&); + } // namespace WebCore #endif // BitmapImageSingleFrameSkia_h diff --git a/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp b/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp index a9f6d3c..b65b5bd 100644 --- a/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp +++ b/Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp @@ -114,11 +114,12 @@ void ImageBuffer::draw(GraphicsContext* context, ColorSpace styleColorSpace, con if (context->platformContext()->canAccelerate()) { DrawingBuffer* sourceDrawingBuffer = m_data.m_platformContext.gpuCanvas()->drawingBuffer(); unsigned sourceTexture = static_cast<unsigned>(sourceDrawingBuffer->platformColorBuffer()); - FloatRect destRectFlipped(destRect); - destRectFlipped.setY(destRect.y() + destRect.height()); - destRectFlipped.setHeight(-destRect.height()); + FloatRect destRectNormalized(normalizeRect(destRect)); + FloatRect srcRectFlipped(normalizeRect(srcRect)); + srcRectFlipped.setY(m_size.height() - srcRect.y()); + srcRectFlipped.setHeight(-srcRect.height()); context->platformContext()->prepareForHardwareDraw(); - context->platformContext()->gpuCanvas()->drawTexturedRect(sourceTexture, m_size, srcRect, destRectFlipped, styleColorSpace, op); + context->platformContext()->gpuCanvas()->drawTexturedRect(sourceTexture, m_size, srcRectFlipped, destRectNormalized, styleColorSpace, op); return; } m_data.m_platformContext.syncSoftwareCanvas(); diff --git a/Source/WebCore/platform/graphics/skia/ImageSkia.cpp b/Source/WebCore/platform/graphics/skia/ImageSkia.cpp index c7fa6f4..91a4e4f 100644 --- a/Source/WebCore/platform/graphics/skia/ImageSkia.cpp +++ b/Source/WebCore/platform/graphics/skia/ImageSkia.cpp @@ -298,7 +298,7 @@ static void TransformDimensions(const SkMatrix& matrix, float srcWidth, float sr } // A helper method for translating negative width and height values. -static FloatRect normalizeRect(const FloatRect& rect) +FloatRect normalizeRect(const FloatRect& rect) { FloatRect norm = rect; if (norm.width() < 0) { diff --git a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp index cbe38aa..7abe2eb 100644 --- a/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp +++ b/Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp @@ -80,6 +80,10 @@ void MediaPlayerPrivateFullscreenWindow::createWindow(HWND parentHwnd) parentHwnd, 0, WebCore::instanceHandle(), this); ASSERT(IsWindow(m_hwnd)); +#if USE(ACCELERATED_COMPOSITING) + m_layerRenderer->setHostWindow(m_hwnd); +#endif + ::SetFocus(m_hwnd); } @@ -139,17 +143,10 @@ LRESULT MediaPlayerPrivateFullscreenWindow::wndProc(HWND hWnd, UINT message, WPA switch (message) { case WM_CREATE: m_hwnd = hWnd; -#if USE(ACCELERATED_COMPOSITING) - m_layerRenderer->setHostWindow(m_hwnd); - m_layerRenderer->createRenderer(); - if (m_rootChild) - m_layerRenderer->setNeedsDisplay(); -#endif break; case WM_DESTROY: m_hwnd = 0; #if USE(ACCELERATED_COMPOSITING) - m_layerRenderer->destroyRenderer(); m_layerRenderer->setHostWindow(0); #endif break; @@ -169,7 +166,8 @@ LRESULT MediaPlayerPrivateFullscreenWindow::wndProc(HWND hWnd, UINT message, WPA break; case WM_PAINT: #if USE(ACCELERATED_COMPOSITING) - m_layerRenderer->renderSoon(); + m_layerRenderer->paint(); + ::ValidateRect(m_hwnd, 0); #endif break; } diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayer.cpp b/Source/WebCore/platform/graphics/win/WKCACFLayer.cpp deleted file mode 100644 index a8714e3..0000000 --- a/Source/WebCore/platform/graphics/win/WKCACFLayer.cpp +++ /dev/null @@ -1,572 +0,0 @@ -/* - * Copyright (C) 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#if USE(ACCELERATED_COMPOSITING) - -#include "WKCACFLayer.h" - -#include "WKCACFLayerRenderer.h" -#include <WebKitSystemInterface/WebKitSystemInterface.h> -#include <stdio.h> -#include <wtf/CurrentTime.h> -#include <wtf/text/CString.h> - -namespace WebCore { - -using namespace std; - -#ifndef NDEBUG -void WKCACFLayer::internalCheckLayerConsistency() -{ - ASSERT(layer()); - size_t n = sublayerCount(); - for (size_t i = 0; i < n; ++i) { - // This will ASSERT in internalSublayerAtIndex if this entry doesn't have proper user data - WKCACFLayer* sublayer = internalSublayerAtIndex(i); - - // Make sure we don't have any null entries in the list - ASSERT(sublayer); - - // Make sure the each layer has a corresponding CACFLayer - ASSERT(sublayer->layer()); - } -} -#endif - -static void displayCallback(CACFLayerRef layer, CGContextRef context) -{ - ASSERT_ARG(layer, WKCACFLayer::layer(layer)); - WKCACFLayer::layer(layer)->drawInContext(context); -} - -static CFStringRef toCACFLayerType(WKCACFLayer::LayerType type) -{ - switch (type) { - case WKCACFLayer::Layer: return kCACFLayer; - case WKCACFLayer::TransformLayer: return kCACFTransformLayer; - default: return 0; - } -} - -static CFStringRef toCACFContentsGravityType(WKCACFLayer::ContentsGravityType type) -{ - switch (type) { - case WKCACFLayer::Center: return kCACFGravityCenter; - case WKCACFLayer::Top: return kCACFGravityTop; - case WKCACFLayer::Bottom: return kCACFGravityBottom; - case WKCACFLayer::Left: return kCACFGravityLeft; - case WKCACFLayer::Right: return kCACFGravityRight; - case WKCACFLayer::TopLeft: return kCACFGravityTopLeft; - case WKCACFLayer::TopRight: return kCACFGravityTopRight; - case WKCACFLayer::BottomLeft: return kCACFGravityBottomLeft; - case WKCACFLayer::BottomRight: return kCACFGravityBottomRight; - case WKCACFLayer::Resize: return kCACFGravityResize; - case WKCACFLayer::ResizeAspect: return kCACFGravityResizeAspect; - case WKCACFLayer::ResizeAspectFill: return kCACFGravityResizeAspectFill; - default: return 0; - } -} - -static WKCACFLayer::ContentsGravityType fromCACFContentsGravityType(CFStringRef string) -{ - if (CFEqual(string, kCACFGravityTop)) - return WKCACFLayer::Top; - - if (CFEqual(string, kCACFGravityBottom)) - return WKCACFLayer::Bottom; - - if (CFEqual(string, kCACFGravityLeft)) - return WKCACFLayer::Left; - - if (CFEqual(string, kCACFGravityRight)) - return WKCACFLayer::Right; - - if (CFEqual(string, kCACFGravityTopLeft)) - return WKCACFLayer::TopLeft; - - if (CFEqual(string, kCACFGravityTopRight)) - return WKCACFLayer::TopRight; - - if (CFEqual(string, kCACFGravityBottomLeft)) - return WKCACFLayer::BottomLeft; - - if (CFEqual(string, kCACFGravityBottomRight)) - return WKCACFLayer::BottomRight; - - if (CFEqual(string, kCACFGravityResize)) - return WKCACFLayer::Resize; - - if (CFEqual(string, kCACFGravityResizeAspect)) - return WKCACFLayer::ResizeAspect; - - if (CFEqual(string, kCACFGravityResizeAspectFill)) - return WKCACFLayer::ResizeAspectFill; - - return WKCACFLayer::Center; -} - -static CFStringRef toCACFFilterType(WKCACFLayer::FilterType type) -{ - switch (type) { - case WKCACFLayer::Linear: return kCACFFilterLinear; - case WKCACFLayer::Nearest: return kCACFFilterNearest; - case WKCACFLayer::Trilinear: return kCACFFilterTrilinear; - default: return 0; - } -} - -static WKCACFLayer::FilterType fromCACFFilterType(CFStringRef string) -{ - if (CFEqual(string, kCACFFilterNearest)) - return WKCACFLayer::Nearest; - - if (CFEqual(string, kCACFFilterTrilinear)) - return WKCACFLayer::Trilinear; - - return WKCACFLayer::Linear; -} - -PassRefPtr<WKCACFLayer> WKCACFLayer::create(LayerType type) -{ - if (!WKCACFLayerRenderer::acceleratedCompositingAvailable()) - return 0; - return adoptRef(new WKCACFLayer(type)); -} - -// FIXME: It might be good to have a way of ensuring that all WKCACFLayers eventually -// get destroyed in debug builds. A static counter could accomplish this pretty easily. - -WKCACFLayer::WKCACFLayer(LayerType type) - : m_layer(AdoptCF, CACFLayerCreate(toCACFLayerType(type))) - , m_layoutClient(0) - , m_needsDisplayOnBoundsChange(false) -{ - CACFLayerSetUserData(layer(), this); - CACFLayerSetDisplayCallback(layer(), displayCallback); -} - -WKCACFLayer::~WKCACFLayer() -{ - // Our superlayer should be holding a reference to us, so there should be no way for us to be destroyed while we still have a superlayer. - ASSERT(!superlayer()); - - // Get rid of the children so we don't have any dangling references around - removeAllSublayers(); - -#ifndef NDEBUG - CACFLayerSetUserData(layer(), reinterpret_cast<void*>(0xDEADBEEF)); -#else - CACFLayerSetUserData(layer(), 0); -#endif - CACFLayerSetDisplayCallback(layer(), 0); -} - -void WKCACFLayer::becomeRootLayerForContext(WKCACFContext* context) -{ - wkCACFContextSetLayer(context, layer()); - setNeedsCommit(); -} - -void WKCACFLayer::setNeedsCommit() -{ - WKCACFLayer* root = rootLayer(); - - // Call setNeedsRender on the root layer, which will cause a render to - // happen in WKCACFLayerRenderer - root->setNeedsRender(); -} - -bool WKCACFLayer::isTransformLayer() const -{ - return CACFLayerGetClass(layer()) == kCACFTransformLayer; -} - -void WKCACFLayer::addSublayer(PassRefPtr<WKCACFLayer> sublayer) -{ - insertSublayer(sublayer, sublayerCount()); -} - -void WKCACFLayer::internalInsertSublayer(PassRefPtr<WKCACFLayer> sublayer, size_t index) -{ - index = min(index, sublayerCount() + 1); - sublayer->removeFromSuperlayer(); - CACFLayerInsertSublayer(layer(), sublayer->layer(), index); - setNeedsCommit(); - checkLayerConsistency(); -} - -void WKCACFLayer::insertSublayerAboveLayer(PassRefPtr<WKCACFLayer> sublayer, const WKCACFLayer* reference) -{ - if (!reference) { - insertSublayer(sublayer, 0); - return; - } - - int referenceIndex = internalIndexOfSublayer(reference); - if (referenceIndex == -1) { - addSublayer(sublayer); - return; - } - - insertSublayer(sublayer, referenceIndex + 1); -} - -void WKCACFLayer::insertSublayerBelowLayer(PassRefPtr<WKCACFLayer> sublayer, const WKCACFLayer* reference) -{ - if (!reference) { - insertSublayer(sublayer, 0); - return; - } - - int referenceIndex = internalIndexOfSublayer(reference); - if (referenceIndex == -1) { - addSublayer(sublayer); - return; - } - - insertSublayer(sublayer, referenceIndex); -} - -void WKCACFLayer::replaceSublayer(WKCACFLayer* reference, PassRefPtr<WKCACFLayer> newLayer) -{ - ASSERT_ARG(reference, reference); - ASSERT_ARG(reference, reference->superlayer() == this); - - if (reference == newLayer) - return; - - int referenceIndex = internalIndexOfSublayer(reference); - ASSERT(referenceIndex != -1); - if (referenceIndex == -1) - return; - - reference->removeFromSuperlayer(); - - if (newLayer) { - newLayer->removeFromSuperlayer(); - insertSublayer(newLayer, referenceIndex); - } -} - -size_t WKCACFLayer::internalSublayerCount() const -{ - CFArrayRef sublayers = CACFLayerGetSublayers(layer()); - return sublayers ? CFArrayGetCount(sublayers) : 0; -} - -void WKCACFLayer::adoptSublayers(WKCACFLayer* source) -{ - // We will use setSublayers() because it properly nulls - // out the superlayer pointer. - Vector<RefPtr<WKCACFLayer> > sublayers; - size_t n = source->sublayerCount(); - - for (size_t i = 0; i < n; ++i) - sublayers.append(source->internalSublayerAtIndex(i)); - - setSublayers(sublayers); - source->checkLayerConsistency(); -} - -void WKCACFLayer::removeFromSuperlayer() -{ - WKCACFLayer* superlayer = this->superlayer(); - CACFLayerRemoveFromSuperlayer(layer()); - checkLayerConsistency(); - - if (superlayer) - superlayer->setNeedsCommit(); -} - -WKCACFLayer* WKCACFLayer::internalSublayerAtIndex(int index) const -{ - CFArrayRef sublayers = CACFLayerGetSublayers(layer()); - if (!sublayers || index < 0 || CFArrayGetCount(sublayers) <= index) - return 0; - - return layer(static_cast<CACFLayerRef>(const_cast<void*>(CFArrayGetValueAtIndex(sublayers, index)))); -} - -int WKCACFLayer::internalIndexOfSublayer(const WKCACFLayer* reference) -{ - CACFLayerRef ref = reference->layer(); - if (!ref) - return -1; - - CFArrayRef sublayers = CACFLayerGetSublayers(layer()); - if (!sublayers) - return -1; - - size_t n = CFArrayGetCount(sublayers); - - for (size_t i = 0; i < n; ++i) - if (CFArrayGetValueAtIndex(sublayers, i) == ref) - return i; - - return -1; -} - -WKCACFLayer* WKCACFLayer::ancestorOrSelfWithSuperlayer(WKCACFLayer* superlayer) const -{ - WKCACFLayer* layer = const_cast<WKCACFLayer*>(this); - for (WKCACFLayer* ancestor = this->superlayer(); ancestor; layer = ancestor, ancestor = ancestor->superlayer()) { - if (ancestor == superlayer) - return layer; - } - return 0; -} - -void WKCACFLayer::setBounds(const CGRect& rect) -{ - if (CGRectEqualToRect(rect, bounds())) - return; - - CACFLayerSetBounds(layer(), rect); - setNeedsCommit(); - - if (m_needsDisplayOnBoundsChange) - setNeedsDisplay(); - - if (m_layoutClient) - setNeedsLayout(); -} - -void WKCACFLayer::setFrame(const CGRect& rect) -{ - CGRect oldFrame = frame(); - if (CGRectEqualToRect(rect, oldFrame)) - return; - - CACFLayerSetFrame(layer(), rect); - setNeedsCommit(); - - if (m_needsDisplayOnBoundsChange && !CGSizeEqualToSize(rect.size, oldFrame.size)) - setNeedsDisplay(); - - if (m_layoutClient) - setNeedsLayout(); -} - -void WKCACFLayer::setContentsGravity(ContentsGravityType type) -{ - CACFLayerSetContentsGravity(layer(), toCACFContentsGravityType(type)); - setNeedsCommit(); -} - -WKCACFLayer::ContentsGravityType WKCACFLayer::contentsGravity() const -{ - return fromCACFContentsGravityType(CACFLayerGetContentsGravity(layer())); -} - -void WKCACFLayer::setMagnificationFilter(FilterType type) -{ - CACFLayerSetMagnificationFilter(layer(), toCACFFilterType(type)); - setNeedsCommit(); -} - -WKCACFLayer::FilterType WKCACFLayer::magnificationFilter() const -{ - return fromCACFFilterType(CACFLayerGetMagnificationFilter(layer())); -} - -void WKCACFLayer::setMinificationFilter(FilterType type) -{ - CACFLayerSetMinificationFilter(layer(), toCACFFilterType(type)); - setNeedsCommit(); -} - -WKCACFLayer::FilterType WKCACFLayer::minificationFilter() const -{ - return fromCACFFilterType(CACFLayerGetMinificationFilter(layer())); -} - -WKCACFLayer* WKCACFLayer::rootLayer() const -{ - WKCACFLayer* layer = const_cast<WKCACFLayer*>(this); - for (WKCACFLayer* superlayer = layer->superlayer(); superlayer; layer = superlayer, superlayer = superlayer->superlayer()) { } - return layer; -} - -void WKCACFLayer::internalRemoveAllSublayers() -{ - CACFLayerSetSublayers(layer(), 0); - setNeedsCommit(); -} - -void WKCACFLayer::internalSetSublayers(const Vector<RefPtr<WKCACFLayer> >& sublayers) -{ - // Remove all the current sublayers and add the passed layers - CACFLayerSetSublayers(layer(), 0); - - // Perform removeFromSuperLayer in a separate pass. CACF requires superlayer to - // be null or CACFLayerInsertSublayer silently fails. - for (size_t i = 0; i < sublayers.size(); i++) - CACFLayerRemoveFromSuperlayer(sublayers[i]->layer()); - - for (size_t i = 0; i < sublayers.size(); i++) - CACFLayerInsertSublayer(layer(), sublayers[i]->layer(), i); - - setNeedsCommit(); -} - -WKCACFLayer* WKCACFLayer::superlayer() const -{ - CACFLayerRef super = CACFLayerGetSuperlayer(layer()); - if (!super) - return 0; - return WKCACFLayer::layer(super); -} - -void WKCACFLayer::internalSetNeedsDisplay(const CGRect* dirtyRect) -{ - CACFLayerSetNeedsDisplay(layer(), dirtyRect); -} - -void WKCACFLayer::setLayoutClient(WKCACFLayerLayoutClient* layoutClient) -{ - if (layoutClient == m_layoutClient) - return; - - m_layoutClient = layoutClient; - CACFLayerSetLayoutCallback(layer(), m_layoutClient ? layoutSublayersProc : 0); -} - -void WKCACFLayer::layoutSublayersProc(CACFLayerRef caLayer) -{ - WKCACFLayer* layer = WKCACFLayer::layer(caLayer); - if (layer && layer->m_layoutClient) - layer->m_layoutClient->layoutSublayersOfLayer(layer); -} - -#ifndef NDEBUG -static void printIndent(int indent) -{ - for ( ; indent > 0; --indent) - fprintf(stderr, " "); -} - -static void printTransform(const CATransform3D& transform) -{ - fprintf(stderr, "[%g %g %g %g; %g %g %g %g; %g %g %g %g; %g %g %g %g]", - transform.m11, transform.m12, transform.m13, transform.m14, - transform.m21, transform.m22, transform.m23, transform.m24, - transform.m31, transform.m32, transform.m33, transform.m34, - transform.m41, transform.m42, transform.m43, transform.m44); -} - -void WKCACFLayer::printTree() const -{ - // Print heading info - CGRect rootBounds = bounds(); - fprintf(stderr, "\n\n** Render tree at time %g (bounds %g, %g %gx%g) **\n\n", - currentTime(), rootBounds.origin.x, rootBounds.origin.y, rootBounds.size.width, rootBounds.size.height); - - // Print layer tree from the root - printLayer(0); -} - -void WKCACFLayer::printLayer(int indent) const -{ - CGPoint layerPosition = position(); - CGPoint layerAnchorPoint = anchorPoint(); - CGRect layerBounds = bounds(); - printIndent(indent); - fprintf(stderr, "(%s [%g %g %g] [%g %g %g %g] [%g %g %g] superlayer=%p\n", - isTransformLayer() ? "transform-layer" : "layer", - layerPosition.x, layerPosition.y, zPosition(), - layerBounds.origin.x, layerBounds.origin.y, layerBounds.size.width, layerBounds.size.height, - layerAnchorPoint.x, layerAnchorPoint.y, anchorPointZ(), superlayer()); - - // Print name if needed - String layerName = name(); - if (!layerName.isEmpty()) { - printIndent(indent + 1); - fprintf(stderr, "(name %s)\n", layerName.utf8().data()); - } - - // Print masksToBounds if needed - bool layerMasksToBounds = masksToBounds(); - if (layerMasksToBounds) { - printIndent(indent + 1); - fprintf(stderr, "(masksToBounds true)\n"); - } - - // Print opacity if needed - float layerOpacity = opacity(); - if (layerOpacity != 1) { - printIndent(indent + 1); - fprintf(stderr, "(opacity %hf)\n", layerOpacity); - } - - // Print sublayerTransform if needed - CATransform3D layerTransform = sublayerTransform(); - if (!CATransform3DIsIdentity(layerTransform)) { - printIndent(indent + 1); - fprintf(stderr, "(sublayerTransform "); - printTransform(layerTransform); - fprintf(stderr, ")\n"); - } - - // Print transform if needed - layerTransform = transform(); - if (!CATransform3DIsIdentity(layerTransform)) { - printIndent(indent + 1); - fprintf(stderr, "(transform "); - printTransform(layerTransform); - fprintf(stderr, ")\n"); - } - - // Print contents if needed - CFTypeRef layerContents = contents(); - if (layerContents) { - if (CFGetTypeID(layerContents) == CGImageGetTypeID()) { - CGImageRef imageContents = static_cast<CGImageRef>(const_cast<void*>(layerContents)); - printIndent(indent + 1); - fprintf(stderr, "(contents (image [%d %d]))\n", - CGImageGetWidth(imageContents), CGImageGetHeight(imageContents)); - } - } - - // Print sublayers if needed - int n = sublayerCount(); - if (n > 0) { - printIndent(indent + 1); - fprintf(stderr, "(sublayers\n"); - for (int i = 0; i < n; ++i) - internalSublayerAtIndex(i)->printLayer(indent + 2); - - printIndent(indent + 1); - fprintf(stderr, ")\n"); - } - - printIndent(indent); - fprintf(stderr, ")\n"); -} -#endif // #ifndef NDEBUG -} - -#endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayer.h b/Source/WebCore/platform/graphics/win/WKCACFLayer.h deleted file mode 100644 index 4c6639a..0000000 --- a/Source/WebCore/platform/graphics/win/WKCACFLayer.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (C) 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE 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 WKCACFLayer_h -#define WKCACFLayer_h - -#if USE(ACCELERATED_COMPOSITING) - -#include <wtf/RefCounted.h> - -#include <QuartzCore/CACFLayer.h> -#include <QuartzCore/CACFVector.h> -#include <wtf/PassRefPtr.h> -#include <wtf/RetainPtr.h> -#include <wtf/Vector.h> -#include <wtf/text/StringHash.h> - -#include "GraphicsContext.h" -#include "PlatformString.h" -#include "TransformationMatrix.h" - -struct WKCACFContext; - -namespace WebCore { - -class WKCACFLayer; - -class WKCACFLayerLayoutClient { -public: - virtual void layoutSublayersOfLayer(WKCACFLayer*) = 0; -protected: - virtual ~WKCACFLayerLayoutClient() {} -}; - -class WKCACFLayer : public RefCounted<WKCACFLayer> { -public: - enum LayerType { Layer, TransformLayer }; - enum FilterType { Linear, Nearest, Trilinear }; - enum ContentsGravityType { Center, Top, Bottom, Left, Right, TopLeft, TopRight, - BottomLeft, BottomRight, Resize, ResizeAspect, ResizeAspectFill }; - - static PassRefPtr<WKCACFLayer> create(LayerType); - static WKCACFLayer* layer(CACFLayerRef layer) - { - ASSERT(CACFLayerGetUserData(layer) != reinterpret_cast<void*>(0xDEADBEEF)); - return static_cast<WKCACFLayer*>(CACFLayerGetUserData(layer)); - } - - virtual ~WKCACFLayer(); - - virtual void setNeedsRender() { } - - virtual void drawInContext(PlatformGraphicsContext*) { } - - void setLayoutClient(WKCACFLayerLayoutClient*); - WKCACFLayerLayoutClient* layoutClient() const { return m_layoutClient; } - void setNeedsLayout() { CACFLayerSetNeedsLayout(layer()); } - - void setNeedsDisplay(const CGRect* dirtyRect = 0) - { - internalSetNeedsDisplay(dirtyRect); - setNeedsCommit(); - } - - // Makes this layer the root when the passed context is rendered - void becomeRootLayerForContext(WKCACFContext*); - - static RetainPtr<CFTypeRef> cfValue(float value) { return RetainPtr<CFTypeRef>(AdoptCF, CFNumberCreate(0, kCFNumberFloat32Type, &value)); } - static RetainPtr<CFTypeRef> cfValue(const TransformationMatrix& value) - { - CATransform3D t; - t.m11 = value.m11(); - t.m12 = value.m12(); - t.m13 = value.m13(); - t.m14 = value.m14(); - t.m21 = value.m21(); - t.m22 = value.m22(); - t.m23 = value.m23(); - t.m24 = value.m24(); - t.m31 = value.m31(); - t.m32 = value.m32(); - t.m33 = value.m33(); - t.m34 = value.m34(); - t.m41 = value.m41(); - t.m42 = value.m42(); - t.m43 = value.m43(); - t.m44 = value.m44(); - return RetainPtr<CFTypeRef>(AdoptCF, CACFVectorCreateTransform(t)); - } - static RetainPtr<CFTypeRef> cfValue(const FloatPoint& value) - { - CGPoint p; - p.x = value.x(); p.y = value.y(); - return RetainPtr<CFTypeRef>(AdoptCF, CACFVectorCreatePoint(p)); - } - static RetainPtr<CFTypeRef> cfValue(const FloatRect& rect) - { - CGRect r; - r.origin.x = rect.x(); - r.origin.y = rect.y(); - r.size.width = rect.width(); - r.size.height = rect.height(); - CGFloat v[4] = { CGRectGetMinX(r), CGRectGetMinY(r), CGRectGetMaxX(r), CGRectGetMaxY(r) }; - return RetainPtr<CFTypeRef>(AdoptCF, CACFVectorCreate(4, v)); - } - static RetainPtr<CFTypeRef> cfValue(const Color& color) - { - return RetainPtr<CFTypeRef>(AdoptCF, CGColorCreateGenericRGB(color.red(), color.green(), color.blue(), color.alpha())); - } - - bool isTransformLayer() const; - - void addSublayer(PassRefPtr<WKCACFLayer> sublayer); - void insertSublayerAboveLayer(PassRefPtr<WKCACFLayer>, const WKCACFLayer* reference); - void insertSublayerBelowLayer(PassRefPtr<WKCACFLayer>, const WKCACFLayer* reference); - void replaceSublayer(WKCACFLayer* reference, PassRefPtr<WKCACFLayer>); - void adoptSublayers(WKCACFLayer* source); - - void removeAllSublayers() { internalRemoveAllSublayers(); } - void setSublayers(const Vector<RefPtr<WKCACFLayer> >& sublayers) - { - internalSetSublayers(sublayers); - checkLayerConsistency(); - } - - void insertSublayer(PassRefPtr<WKCACFLayer> layer, size_t index) { internalInsertSublayer(layer, index); } - - size_t sublayerCount() const { return internalSublayerCount(); } - - void removeFromSuperlayer(); - - WKCACFLayer* ancestorOrSelfWithSuperlayer(WKCACFLayer*) const; - - void setAnchorPoint(const CGPoint& p) { CACFLayerSetAnchorPoint(layer(), p); setNeedsCommit(); } - CGPoint anchorPoint() const { return CACFLayerGetAnchorPoint(layer()); } - - void setAnchorPointZ(CGFloat z) { CACFLayerSetAnchorPointZ(layer(), z); setNeedsCommit(); } - CGFloat anchorPointZ() const { return CACFLayerGetAnchorPointZ(layer()); } - - void setBackgroundColor(CGColorRef color) { CACFLayerSetBackgroundColor(layer(), color); setNeedsCommit(); } - CGColorRef backgroundColor() const { return CACFLayerGetBackgroundColor(layer()); } - - void setBorderColor(CGColorRef color) { CACFLayerSetBorderColor(layer(), color); setNeedsCommit(); } - CGColorRef borderColor() const { return CACFLayerGetBorderColor(layer()); } - - void setBorderWidth(CGFloat width) { CACFLayerSetBorderWidth(layer(), width); setNeedsCommit(); } - CGFloat borderWidth() const { return CACFLayerGetBorderWidth(layer()); } - - virtual void setBounds(const CGRect&); - CGRect bounds() const { return CACFLayerGetBounds(layer()); } - - void setContents(CFTypeRef contents) { CACFLayerSetContents(layer(), contents); setNeedsCommit(); } - CFTypeRef contents() const { return CACFLayerGetContents(layer()); } - - void setContentsRect(const CGRect& contentsRect) { CACFLayerSetContentsRect(layer(), contentsRect); setNeedsCommit(); } - CGRect contentsRect() const { return CACFLayerGetContentsRect(layer()); } - - void setContentsGravity(ContentsGravityType); - ContentsGravityType contentsGravity() const; - - void setDoubleSided(bool b) { CACFLayerSetDoubleSided(layer(), b); setNeedsCommit(); } - bool doubleSided() const { return CACFLayerIsDoubleSided(layer()); } - - void setEdgeAntialiasingMask(uint32_t mask) { CACFLayerSetEdgeAntialiasingMask(layer(), mask); setNeedsCommit(); } - uint32_t edgeAntialiasingMask() const { return CACFLayerGetEdgeAntialiasingMask(layer()); } - - virtual void setFrame(const CGRect&); - CGRect frame() const { return CACFLayerGetFrame(layer()); } - - void setHidden(bool hidden) { CACFLayerSetHidden(layer(), hidden); setNeedsCommit(); } - bool isHidden() const { return CACFLayerIsHidden(layer()); } - - void setMasksToBounds(bool b) { CACFLayerSetMasksToBounds(layer(), b); } - bool masksToBounds() const { return CACFLayerGetMasksToBounds(layer()); } - - void setMagnificationFilter(FilterType); - FilterType magnificationFilter() const; - - void setMinificationFilter(FilterType); - FilterType minificationFilter() const; - - void setMinificationFilterBias(float bias) { CACFLayerSetMinificationFilterBias(layer(), bias); } - float minificationFilterBias() const { return CACFLayerGetMinificationFilterBias(layer()); } - - void setName(const String& name) { CACFLayerSetName(layer(), RetainPtr<CFStringRef>(AdoptCF, name.createCFString()).get()); } - String name() const { return CACFLayerGetName(layer()); } - - void setNeedsDisplayOnBoundsChange(bool needsDisplay) { m_needsDisplayOnBoundsChange = needsDisplay; } - - void setOpacity(float opacity) { CACFLayerSetOpacity(layer(), opacity); setNeedsCommit(); } - float opacity() const { return CACFLayerGetOpacity(layer()); } - - void setOpaque(bool b) { CACFLayerSetOpaque(layer(), b); setNeedsCommit(); } - bool opaque() const { return CACFLayerIsOpaque(layer()); } - - void setPosition(const CGPoint& position) { CACFLayerSetPosition(layer(), position); setNeedsCommit(); } - CGPoint position() const { return CACFLayerGetPosition(layer()); } - - void setZPosition(CGFloat position) { CACFLayerSetZPosition(layer(), position); setNeedsCommit(); } - CGFloat zPosition() const { return CACFLayerGetZPosition(layer()); } - - void setSpeed(float speed) { CACFLayerSetSpeed(layer(), speed); } - CFTimeInterval speed() const { return CACFLayerGetSpeed(layer()); } - - void setTimeOffset(CFTimeInterval t) { CACFLayerSetTimeOffset(layer(), t); } - CFTimeInterval timeOffset() const { return CACFLayerGetTimeOffset(layer()); } - - WKCACFLayer* rootLayer() const; - - void setSublayerTransform(const CATransform3D& transform) { CACFLayerSetSublayerTransform(layer(), transform); setNeedsCommit(); } - CATransform3D sublayerTransform() const { return CACFLayerGetSublayerTransform(layer()); } - - WKCACFLayer* superlayer() const; - - void setTransform(const CATransform3D& transform) { CACFLayerSetTransform(layer(), transform); setNeedsCommit(); } - CATransform3D transform() const { return CACFLayerGetTransform(layer()); } - - void setGeometryFlipped(bool flipped) { CACFLayerSetGeometryFlipped(layer(), flipped); setNeedsCommit(); } - bool geometryFlipped() const { return CACFLayerIsGeometryFlipped(layer()); } - -#ifndef NDEBUG - // Print the tree from the root. Also does consistency checks - void printTree() const; -#endif - -protected: - WKCACFLayer(LayerType); - - void setNeedsCommit(); - - CACFLayerRef layer() const { return m_layer.get(); } - // This should only be called from removeFromSuperlayer. - void removeSublayer(const WKCACFLayer*); - - void checkLayerConsistency() - { -#ifndef NDEBUG - internalCheckLayerConsistency(); -#endif - } - - // Methods to be overridden for sublayer and rendering management - virtual WKCACFLayer* internalSublayerAtIndex(int) const; - - // Returns the index of the passed layer in this layer's sublayers list - // or -1 if not found - virtual int internalIndexOfSublayer(const WKCACFLayer*); - - virtual size_t internalSublayerCount() const; - virtual void internalInsertSublayer(PassRefPtr<WKCACFLayer>, size_t index); - virtual void internalRemoveAllSublayers(); - virtual void internalSetSublayers(const Vector<RefPtr<WKCACFLayer> >&); - - virtual void internalSetNeedsDisplay(const CGRect* dirtyRect); - -#ifndef NDEBUG - virtual void internalCheckLayerConsistency(); -#endif - -#ifndef NDEBUG - // Print this layer and its children to the console - void printLayer(int indent) const; -#endif - -private: - static void layoutSublayersProc(CACFLayerRef); - - RetainPtr<CACFLayerRef> m_layer; - WKCACFLayerLayoutClient* m_layoutClient; - bool m_needsDisplayOnBoundsChange; -}; - -} - -#endif // USE(ACCELERATED_COMPOSITING) - -#endif // WKCACFLayer_h diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp index 4c5e61d..7c83f86 100644 --- a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp +++ b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.cpp @@ -187,7 +187,6 @@ WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client) , m_context(wkCACFContextCreate()) , m_hostWindow(0) , m_renderTimer(this, &WKCACFLayerRenderer::renderTimerFired) - , m_backingStoreDirty(false) , m_mustResetLostDeviceBeforeRendering(false) , m_syncLayerChanges(false) { @@ -224,32 +223,33 @@ WKCACFLayerRenderer::WKCACFLayerRenderer(WKCACFLayerRendererClient* client) WKCACFLayerRenderer::~WKCACFLayerRenderer() { - destroyRenderer(); + setHostWindow(0); + WKCACFContextFlusher::shared().removeContext(m_context); wkCACFContextDestroy(m_context); } -PlatformCALayer* WKCACFLayerRenderer::rootLayer() const +void WKCACFLayerRenderer::setHostWindow(HWND window) { - return m_rootLayer.get(); -} + if (window == m_hostWindow) + return; -void WKCACFLayerRenderer::addPendingAnimatedLayer(PassRefPtr<PlatformCALayer> layer) -{ - m_pendingAnimatedLayers.add(layer); + if (m_hostWindow) + destroyRenderer(); + + m_hostWindow = window; + + if (m_hostWindow) + createRenderer(); } -void WKCACFLayerRenderer::setRootContents(CGImageRef image) +PlatformCALayer* WKCACFLayerRenderer::rootLayer() const { - ASSERT(m_rootLayer); - m_rootLayer->setContents(image); - renderSoon(); + return m_rootLayer.get(); } -void WKCACFLayerRenderer::setRootContentsAndDisplay(CGImageRef image) +void WKCACFLayerRenderer::addPendingAnimatedLayer(PassRefPtr<PlatformCALayer> layer) { - ASSERT(m_rootLayer); - m_rootLayer->setContents(image); - paint(); + m_pendingAnimatedLayers.add(layer); } void WKCACFLayerRenderer::setRootChildLayer(PlatformCALayer* layer) @@ -266,16 +266,6 @@ void WKCACFLayerRenderer::layerTreeDidChange() renderSoon(); } -void WKCACFLayerRenderer::setNeedsDisplay(bool sync) -{ - if (!m_syncLayerChanges && sync) - m_syncLayerChanges = true; - - ASSERT(m_rootLayer); - m_rootLayer->setNeedsDisplay(0); - renderSoon(); -} - bool WKCACFLayerRenderer::createRenderer() { if (m_d3dDevice || !m_mightBeAbleToCreateDeviceLater) @@ -340,7 +330,7 @@ bool WKCACFLayerRenderer::createRenderer() initD3DGeometry(); - wkCACFContextInitializeD3DDevice(m_context, m_d3dDevice.get()); + wkCACFContextSetD3DDevice(m_context, m_d3dDevice.get()); if (IsWindow(m_hostWindow)) m_rootLayer->setBounds(bounds()); @@ -352,6 +342,7 @@ void WKCACFLayerRenderer::destroyRenderer() { wkCACFContextSetLayer(m_context, m_rootLayer->platformLayer()); + wkCACFContextSetD3DDevice(m_context, 0); m_d3dDevice = 0; if (s_d3d) s_d3d->Release(); @@ -422,15 +413,6 @@ void WKCACFLayerRenderer::paint() return; } - if (m_backingStoreDirty) { - // If the backing store is still dirty when we are about to draw the - // composited content, we need to force the window to paint into the - // backing store. The paint will only paint the dirty region that - // if being tracked in WebView. - UpdateWindow(m_hostWindow); - return; - } - Vector<CGRect> dirtyRects; getDirtyRects(m_hostWindow, dirtyRects); render(dirtyRects); @@ -545,6 +527,12 @@ void WKCACFLayerRenderer::renderSoon() m_renderTimer.startOneShot(0); } +void WKCACFLayerRenderer::syncCompositingStateSoon() +{ + m_syncLayerChanges = true; + renderSoon(); +} + CGRect WKCACFLayerRenderer::bounds() const { RECT clientRect; diff --git a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h index aff1f83..02cdbdb 100644 --- a/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h +++ b/Source/WebCore/platform/graphics/win/WKCACFLayerRenderer.h @@ -54,7 +54,6 @@ class WKCACFLayerRendererClient { public: virtual ~WKCACFLayerRendererClient() { } virtual bool shouldRender() const = 0; - virtual void animationsStarted(CFTimeInterval) { } virtual void syncCompositingState() { } }; @@ -70,17 +69,12 @@ public: static bool acceleratedCompositingAvailable(); - void setRootContents(CGImageRef); - void setRootContentsAndDisplay(CGImageRef); void setRootChildLayer(PlatformCALayer*); void layerTreeDidChange(); - void setNeedsDisplay(bool sync = false); - void setHostWindow(HWND window) { m_hostWindow = window; } - void setBackingStoreDirty(bool dirty) { m_backingStoreDirty = dirty; } - bool createRenderer(); - void destroyRenderer(); + void setHostWindow(HWND); + void paint(); void resize(); - void renderSoon(); + void syncCompositingStateSoon(); protected: PlatformCALayer* rootLayer() const; @@ -89,6 +83,9 @@ protected: private: WKCACFLayerRenderer(WKCACFLayerRendererClient*); + bool createRenderer(); + void destroyRenderer(); + void renderSoon(); void renderTimerFired(Timer<WKCACFLayerRenderer>*); CGRect bounds() const; @@ -102,7 +99,6 @@ private: bool resetDevice(ResetReason); void render(const Vector<CGRect>& dirtyRects = Vector<CGRect>()); - void paint(); WKCACFLayerRendererClient* m_client; bool m_mightBeAbleToCreateDeviceLater; @@ -112,7 +108,6 @@ private: WKCACFContext* m_context; HWND m_hostWindow; Timer<WKCACFLayerRenderer> m_renderTimer; - bool m_backingStoreDirty; bool m_mustResetLostDeviceBeforeRendering; bool m_syncLayerChanges; HashSet<RefPtr<PlatformCALayer> > m_pendingAnimatedLayers; diff --git a/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp b/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp index c0b2b53..cfcc487 100644 --- a/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp +++ b/Source/WebCore/platform/graphics/wince/ImageWinCE.cpp @@ -41,7 +41,7 @@ namespace WebCore { -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { return SharedBitmap::create(m_backingStore, m_size, hasAlpha()); } diff --git a/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp b/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp index cee6aee..f1c09c5 100644 --- a/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp +++ b/Source/WebCore/platform/graphics/wx/GraphicsContextWx.cpp @@ -31,7 +31,6 @@ #include "Font.h" #include "IntRect.h" #include "NotImplemented.h" -#include "Pen.h" #include <wtf/MathExtras.h> #include <math.h> diff --git a/Source/WebCore/platform/graphics/wx/PenWx.cpp b/Source/WebCore/platform/graphics/wx/PenWx.cpp deleted file mode 100644 index 5a131e3..0000000 --- a/Source/WebCore/platform/graphics/wx/PenWx.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" -#include "Pen.h" - -#include <wx/defs.h> -#include <wx/pen.h> -#include <wx/colour.h> - -namespace WebCore { - -// Pen style conversion functions -static int penStyleToWxPenStyle(int p) -{ - if (p == Pen::SolidLine) - return wxSOLID; - if (p == Pen::DotLine) - return wxDOT; - if (p == Pen::DashLine) - return wxLONG_DASH; - if (p == Pen::NoPen) - return wxTRANSPARENT; - - return wxSOLID; -} - -static Pen::PenStyle wxPenStyleToPenStyle(int p) -{ - if (p == wxSOLID) - return Pen::SolidLine; - if (p == wxDOT) - return Pen::DotLine; - if (p == wxLONG_DASH || p == wxSHORT_DASH || p == wxDOT_DASH || p == wxUSER_DASH) - return Pen::DashLine; - if (p == wxTRANSPARENT) - return Pen::NoPen; - - return Pen::SolidLine; -} - -Pen::Pen(const wxPen& p) -{ - wxColour color = p.GetColour(); - setColor(Color(color.Red(), color.Green(), color.Blue())); - setWidth(p.GetWidth()); - setStyle(wxPenStyleToPenStyle(p.GetStyle())); -} - -Pen::operator wxPen() const -{ - return wxPen(wxColour(m_color.red(), m_color.blue(), m_color.green()), width(), penStyleToWxPenStyle(style())); -} - -} diff --git a/Source/WebCore/platform/gtk/ContextMenuGtk.cpp b/Source/WebCore/platform/gtk/ContextMenuGtk.cpp index 423959a..b34631d 100644 --- a/Source/WebCore/platform/gtk/ContextMenuGtk.cpp +++ b/Source/WebCore/platform/gtk/ContextMenuGtk.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2007 Holger Hans Peter Freyther + * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -19,6 +20,7 @@ #include "config.h" #include "ContextMenu.h" +#include "NotImplemented.h" #include <gtk/gtk.h> namespace WebCore { @@ -26,14 +28,12 @@ namespace WebCore { ContextMenu::ContextMenu() { m_platformDescription = GTK_MENU(gtk_menu_new()); - - g_object_ref_sink(G_OBJECT(m_platformDescription)); } ContextMenu::~ContextMenu() { if (m_platformDescription) - g_object_unref(m_platformDescription); + gtk_widget_destroy(GTK_WIDGET(m_platformDescription)); } void ContextMenu::appendItem(ContextMenuItem& item) @@ -50,10 +50,9 @@ void ContextMenu::setPlatformDescription(PlatformMenuDescription menu) { ASSERT(menu); if (m_platformDescription) - g_object_unref(m_platformDescription); + gtk_widget_destroy(GTK_WIDGET(m_platformDescription)); m_platformDescription = menu; - g_object_ref(m_platformDescription); } PlatformMenuDescription ContextMenu::platformDescription() const @@ -69,4 +68,12 @@ PlatformMenuDescription ContextMenu::releasePlatformDescription() return description; } +Vector<ContextMenuItem> contextMenuItemVector(const PlatformMenuDescription) +{ + notImplemented(); + + Vector<ContextMenuItem> menuItemVector; + return menuItemVector; +} + } diff --git a/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp b/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp index 4d79f13..fee7a14 100644 --- a/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp +++ b/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2007 Holger Hans Peter Freyther * Copyright (C) 2010 Igalia S.L + * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -144,28 +145,42 @@ ContextMenuItem::ContextMenuItem(ContextMenuItemType type, ContextMenuAction act m_platformDescription = GTK_MENU_ITEM(gtk_action_create_menu_item(platformAction)); g_object_unref(platformAction); - g_object_set_data(G_OBJECT(m_platformDescription.get()), WEBKIT_CONTEXT_MENU_ACTION, GINT_TO_POINTER(action)); + g_object_set_data(G_OBJECT(m_platformDescription), WEBKIT_CONTEXT_MENU_ACTION, GINT_TO_POINTER(action)); if (subMenu) setSubMenu(subMenu); } +ContextMenuItem::ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, bool, bool) +{ + // FIXME: Implement with WebKit2 ContextMenu changes. + notImplemented(); +} + +ContextMenuItem::ContextMenuItem(ContextMenuAction, const String&, bool, bool, Vector<ContextMenuItem>&) +{ + // FIXME: Implement with WebKit2 ContextMenu changes. + notImplemented(); +} + ContextMenuItem::~ContextMenuItem() { } PlatformMenuItemDescription ContextMenuItem::releasePlatformDescription() { - return m_platformDescription.leakRef(); + PlatformMenuItemDescription platformDescription = m_platformDescription; + m_platformDescription = 0; + return platformDescription; } ContextMenuItemType ContextMenuItem::type() const { - if (GTK_IS_SEPARATOR_MENU_ITEM(m_platformDescription.get())) + if (GTK_IS_SEPARATOR_MENU_ITEM(m_platformDescription)) return SeparatorType; - if (GTK_IS_CHECK_MENU_ITEM(m_platformDescription.get())) + if (GTK_IS_CHECK_MENU_ITEM(m_platformDescription)) return CheckableActionType; - if (gtk_menu_item_get_submenu(m_platformDescription.get())) + if (gtk_menu_item_get_submenu(m_platformDescription)) return SubmenuType; return ActionType; } @@ -178,48 +193,62 @@ void ContextMenuItem::setType(ContextMenuItemType type) ContextMenuAction ContextMenuItem::action() const { - return static_cast<ContextMenuAction>(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(m_platformDescription.get()), WEBKIT_CONTEXT_MENU_ACTION))); + return static_cast<ContextMenuAction>(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(m_platformDescription), WEBKIT_CONTEXT_MENU_ACTION))); } void ContextMenuItem::setAction(ContextMenuAction action) { - g_object_set_data(G_OBJECT(m_platformDescription.get()), WEBKIT_CONTEXT_MENU_ACTION, GINT_TO_POINTER(action)); + g_object_set_data(G_OBJECT(m_platformDescription), WEBKIT_CONTEXT_MENU_ACTION, GINT_TO_POINTER(action)); } String ContextMenuItem::title() const { - GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription.get())); + GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription)); return action ? String(gtk_action_get_label(action)) : String(); } void ContextMenuItem::setTitle(const String& title) { - GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription.get())); + GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription)); if (action) gtk_action_set_label(action, title.utf8().data()); } PlatformMenuDescription ContextMenuItem::platformSubMenu() const { - GtkWidget* subMenu = gtk_menu_item_get_submenu(m_platformDescription.get()); + GtkWidget* subMenu = gtk_menu_item_get_submenu(m_platformDescription); return subMenu ? GTK_MENU(subMenu) : 0; } void ContextMenuItem::setSubMenu(ContextMenu* menu) { - gtk_menu_item_set_submenu(m_platformDescription.get(), GTK_WIDGET(menu->platformDescription())); + gtk_menu_item_set_submenu(m_platformDescription, GTK_WIDGET(menu->platformDescription())); } void ContextMenuItem::setChecked(bool shouldCheck) { - GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription.get())); + GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription)); if (action && GTK_IS_TOGGLE_ACTION(action)) gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), shouldCheck); } +bool ContextMenuItem::checked() const +{ + // FIXME: Implement with WebKit2 ContextMenu changes. + notImplemented(); + return false; +} + +bool ContextMenuItem::enabled() const +{ + // FIXME: Implement with WebKit2 ContextMenu changes. + notImplemented(); + return false; +} + void ContextMenuItem::setEnabled(bool shouldEnable) { - GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription.get())); + GtkAction* action = gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription)); if (action) gtk_action_set_sensitive(action, shouldEnable); } diff --git a/Source/WebCore/platform/gtk/DragDataGtk.cpp b/Source/WebCore/platform/gtk/DragDataGtk.cpp index 42ddb16..3a1daf1 100644 --- a/Source/WebCore/platform/gtk/DragDataGtk.cpp +++ b/Source/WebCore/platform/gtk/DragDataGtk.cpp @@ -21,6 +21,7 @@ #include "ClipboardGtk.h" #include "Document.h" #include "DocumentFragment.h" +#include "Frame.h" #include "markup.h" namespace WebCore { @@ -50,7 +51,7 @@ bool DragData::containsPlainText() const return m_platformDragData->hasText(); } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { return m_platformDragData->text(); } @@ -62,15 +63,15 @@ Color DragData::asColor() const bool DragData::containsCompatibleContent() const { - return containsPlainText() || containsURL() || m_platformDragData->hasMarkup() || containsColor() || containsFiles(); + return containsPlainText() || containsURL(0) || m_platformDragData->hasMarkup() || containsColor() || containsFiles(); } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return m_platformDragData->hasURL(); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { String url(m_platformDragData->url()); if (title) @@ -79,12 +80,12 @@ String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) c } -PassRefPtr<DocumentFragment> DragData::asFragment(Document* document) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const { if (!m_platformDragData->hasMarkup()) return 0; - return createFragmentFromMarkup(document, m_platformDragData->markup(), ""); + return createFragmentFromMarkup(frame->document(), m_platformDragData->markup(), ""); } } diff --git a/Source/WebCore/platform/gtk/FileSystemGtk.cpp b/Source/WebCore/platform/gtk/FileSystemGtk.cpp index b8aa102..b3c4c9f 100644 --- a/Source/WebCore/platform/gtk/FileSystemGtk.cpp +++ b/Source/WebCore/platform/gtk/FileSystemGtk.cpp @@ -2,6 +2,7 @@ * Copyright (C) 2007, 2009 Holger Hans Peter Freyther * Copyright (C) 2008 Collabora, Ltd. * Copyright (C) 2008 Apple Inc. All rights reserved. + * Portions Copyright (c) 2010 Motorola Mobility, 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 @@ -45,10 +46,8 @@ String filenameToString(const char* filename) #if OS(WINDOWS) return String::fromUTF8(filename); #else - gchar* escapedString = g_uri_escape_string(filename, "/:", false); - String string(escapedString); - g_free(escapedString); - return string; + GOwnPtr<gchar> escapedString(g_uri_escape_string(filename, "/:", false)); + return escapedString.get(); #endif } @@ -57,10 +56,8 @@ CString fileSystemRepresentation(const String& path) #if OS(WINDOWS) return path.utf8(); #else - char* filename = g_uri_unescape_string(path.utf8().data(), 0); - CString cfilename(filename); - g_free(filename); - return cfilename; + GOwnPtr<gchar> filename(g_uri_unescape_string(path.utf8().data(), 0)); + return filename.get(); #endif } @@ -71,14 +68,11 @@ String filenameForDisplay(const String& string) return string; #else CString filename = fileSystemRepresentation(string); - gchar* display = g_filename_to_utf8(filename.data(), 0, 0, 0, 0); + GOwnPtr<gchar> display(g_filename_to_utf8(filename.data(), 0, 0, 0, 0)); if (!display) return string; - String displayString = String::fromUTF8(display); - g_free(display); - - return displayString; + return String::fromUTF8(display.get()); #endif } @@ -176,11 +170,31 @@ String pathGetFileName(const String& pathName) return pathName; CString tmpFilename = fileSystemRepresentation(pathName); - char* baseName = g_path_get_basename(tmpFilename.data()); - String fileName = String::fromUTF8(baseName); - g_free(baseName); + GOwnPtr<gchar> baseName(g_path_get_basename(tmpFilename.data())); + return String::fromUTF8(baseName.get()); +} + +CString applicationDirectoryPath() +{ +#if OS(LINUX) + // Handle the /proc filesystem case. + char pathFromProc[PATH_MAX] = {0}; + if (readlink("/proc/self/exe", pathFromProc, sizeof(pathFromProc) - 1) == -1) + return CString(); + + GOwnPtr<char> dirname(g_path_get_dirname(pathFromProc)); + return dirname.get(); +#elif OS(UNIX) + // If the above fails, check the PATH env variable. + GOwnPtr<char> currentExePath(g_find_program_in_path(g_get_prgname())); + if (!currentExePath.get()) + return CString(); - return fileName; + GOwnPtr<char> dirname(g_path_get_dirname(currentExePath.get())); + return dirname.get(); +#else + return CString(); +#endif } String directoryName(const String& path) diff --git a/Source/WebCore/platform/gtk/GRefPtrGtk.cpp b/Source/WebCore/platform/gtk/GRefPtrGtk.cpp index 6647b99..9a9d679 100644 --- a/Source/WebCore/platform/gtk/GRefPtrGtk.cpp +++ b/Source/WebCore/platform/gtk/GRefPtrGtk.cpp @@ -38,6 +38,7 @@ template <> void derefGPtr(GtkTargetList* ptr) gtk_target_list_unref(ptr); } +#ifdef GTK_API_VERSION_2 template <> GdkCursor* refGPtr(GdkCursor* ptr) { if (ptr) @@ -50,5 +51,6 @@ template <> void derefGPtr(GdkCursor* ptr) if (ptr) gdk_cursor_unref(ptr); } +#endif } diff --git a/Source/WebCore/platform/gtk/GRefPtrGtk.h b/Source/WebCore/platform/gtk/GRefPtrGtk.h index 1fb9772..a9f491f 100644 --- a/Source/WebCore/platform/gtk/GRefPtrGtk.h +++ b/Source/WebCore/platform/gtk/GRefPtrGtk.h @@ -28,8 +28,10 @@ namespace WTF { template <> GtkTargetList* refGPtr(GtkTargetList* ptr); template <> void derefGPtr(GtkTargetList* ptr); +#ifdef GTK_API_VERSION_2 template <> GdkCursor* refGPtr(GdkCursor* ptr); template <> void derefGPtr(GdkCursor* ptr); +#endif } diff --git a/Source/WebCore/platform/gtk/GtkVersioning.h b/Source/WebCore/platform/gtk/GtkVersioning.h index 11d1f8a..7e9fcd1 100644 --- a/Source/WebCore/platform/gtk/GtkVersioning.h +++ b/Source/WebCore/platform/gtk/GtkVersioning.h @@ -37,12 +37,14 @@ GdkPixbuf* gdk_pixbuf_get_from_surface(cairo_surface_t* surface, int srcX, int s int width, int height); #endif -#if !GTK_CHECK_VERSION(2, 24, 0) +#if !GTK_CHECK_VERSION(2, 23, 4) +#define gdk_pixmap_get_size gdk_drawable_get_size +#endif // GTK_CHECK_VERSION(2, 23, 4) + +#if !GTK_CHECK_VERSION(2, 23, 0) #define gdk_window_get_display(window) gdk_drawable_get_display(window) -#ifdef GDK_DISABLE_DEPRECATED #define gdk_window_get_visual gdk_drawable_get_visual -#endif -#endif // GTK_CHECK_VERSION(2, 24, 0) +#endif // GTK_CHECK_VERSION(2, 23, 0) #if !GTK_CHECK_VERSION(2, 21, 2) #define gdk_visual_get_depth(visual) (visual)->depth diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk.cpp index c194946..97c966d 100644 --- a/Source/WebCore/platform/gtk/RenderThemeGtk.cpp +++ b/Source/WebCore/platform/gtk/RenderThemeGtk.cpp @@ -33,6 +33,7 @@ #include "HTMLMediaElement.h" #include "HTMLNames.h" #include "MediaControlElements.h" +#include "PaintInfo.h" #include "RenderBox.h" #include "RenderObject.h" #include "TimeRanges.h" @@ -101,73 +102,22 @@ PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) return rt; } -static int mozGtkRefCount = 0; - RenderThemeGtk::RenderThemeGtk() - : m_gtkWindow(0) - , m_gtkContainer(0) - , m_gtkButton(0) - , m_gtkEntry(0) - , m_gtkTreeView(0) - , m_gtkVScale(0) - , m_gtkHScale(0) - , m_panelColor(Color::white) + : m_panelColor(Color::white) , m_sliderColor(Color::white) , m_sliderThumbColor(Color::white) , m_mediaIconSize(16) , m_mediaSliderHeight(14) , m_mediaSliderThumbWidth(12) , m_mediaSliderThumbHeight(12) -#ifdef GTK_API_VERSION_2 - , m_themePartsHaveRGBAColormap(true) -#endif { - - memset(&m_themeParts, 0, sizeof(GtkThemeParts)); -#ifdef GTK_API_VERSION_2 - GdkColormap* colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default()); - if (!colormap) { - m_themePartsHaveRGBAColormap = false; - colormap = gdk_screen_get_default_colormap(gdk_screen_get_default()); - } - m_themeParts.colormap = colormap; -#endif - - // Initialize the Mozilla theme drawing code. - if (!mozGtkRefCount) { - moz_gtk_init(); - moz_gtk_use_theme_parts(&m_themeParts); - } - ++mozGtkRefCount; - + platformInit(); #if ENABLE(VIDEO) initMediaColors(); initMediaButtons(); #endif } -RenderThemeGtk::~RenderThemeGtk() -{ - --mozGtkRefCount; - - if (!mozGtkRefCount) - moz_gtk_shutdown(); - - gtk_widget_destroy(m_gtkWindow); -} - -void RenderThemeGtk::getIndicatorMetrics(ControlPart part, int& indicatorSize, int& indicatorSpacing) const -{ - ASSERT(part == CheckboxPart || part == RadioPart); - if (part == CheckboxPart) { - moz_gtk_checkbox_get_metrics(&indicatorSize, &indicatorSpacing); - return; - } - - // RadioPart - moz_gtk_radio_get_metrics(&indicatorSize, &indicatorSpacing); -} - static bool supportsFocus(ControlPart appearance) { switch (appearance) { @@ -227,13 +177,13 @@ GtkTextDirection gtkTextDirection(TextDirection direction) } } -GtkStateType RenderThemeGtk::gtkIconState(RenderObject* renderObject) +static GtkStateType gtkIconState(RenderTheme* theme, RenderObject* renderObject) { - if (!isEnabled(renderObject)) + if (!theme->isEnabled(renderObject)) return GTK_STATE_INSENSITIVE; - if (isPressed(renderObject)) + if (theme->isPressed(renderObject)) return GTK_STATE_ACTIVE; - if (isHovered(renderObject)) + if (theme->isHovered(renderObject)) return GTK_STATE_PRELIGHT; return GTK_STATE_NORMAL; @@ -318,7 +268,7 @@ bool RenderThemeGtk::paintSearchFieldResultsDecoration(RenderObject* renderObjec { GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_ENTRY, GTK_STOCK_FIND, gtkTextDirection(renderObject->style()->direction()), - gtkIconState(renderObject), GTK_ICON_SIZE_MENU); + gtkIconState(this, renderObject), GTK_ICON_SIZE_MENU); paintGdkPixbuf(paintInfo.context, icon.get(), centerRectVerticallyInParentInputElement(renderObject, rect)); return false; } @@ -338,7 +288,7 @@ bool RenderThemeGtk::paintSearchFieldCancelButton(RenderObject* renderObject, co { GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_ENTRY, GTK_STOCK_CLEAR, gtkTextDirection(renderObject->style()->direction()), - gtkIconState(renderObject), GTK_ICON_SIZE_MENU); + gtkIconState(this, renderObject), GTK_ICON_SIZE_MENU); paintGdkPixbuf(paintInfo.context, icon.get(), centerRectVerticallyInParentInputElement(renderObject, rect)); return false; } @@ -438,19 +388,16 @@ String RenderThemeGtk::extraMediaControlsStyleSheet() void RenderThemeGtk::adjustMediaSliderThumbSize(RenderObject* renderObject) const { - ControlPart part = renderObject->style()->appearance(); - - if (part == MediaSliderThumbPart) { - renderObject->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed)); - renderObject->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed)); - } + ASSERT(renderObject->style()->appearance() == MediaSliderThumbPart); + renderObject->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed)); + renderObject->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed)); } bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, const char* iconName) { GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_CONTAINER, iconName, gtkTextDirection(renderObject->style()->direction()), - gtkIconState(renderObject), + gtkIconState(this, renderObject), getMediaButtonIconSize(m_mediaIconSize)); IntPoint iconPoint(rect.x() + (rect.width() - m_mediaIconSize) / 2, rect.y() + (rect.height() - m_mediaIconSize) / 2); @@ -560,6 +507,23 @@ bool RenderThemeGtk::paintMediaSliderThumb(RenderObject* o, const PaintInfo& pai return false; } +bool RenderThemeGtk::paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo& paintInfo, const IntRect& rect) +{ + GraphicsContext* context = paintInfo.context; + context->fillRect(FloatRect(rect), m_panelColor, ColorSpaceDeviceRGB); + return false; +} + +bool RenderThemeGtk::paintMediaVolumeSliderTrack(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) +{ + return paintSliderTrack(renderObject, paintInfo, rect); +} + +bool RenderThemeGtk::paintMediaVolumeSliderThumb(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) +{ + return paintSliderThumb(renderObject, paintInfo, rect); +} + String RenderThemeGtk::formatMediaControlsCurrentTime(float currentTime, float duration) const { return formatMediaControlsTime(currentTime) + " / " + formatMediaControlsTime(duration); @@ -575,20 +539,6 @@ bool RenderThemeGtk::paintMediaCurrentTime(RenderObject* renderObject, const Pai #endif #if ENABLE(PROGRESS_TAG) -double RenderThemeGtk::animationRepeatIntervalForProgressBar(RenderProgress*) const -{ - // FIXME: It doesn't look like there is a good way yet to support animated - // progress bars with the Mozilla theme drawing code. - return 0; -} - -double RenderThemeGtk::animationDurationForProgressBar(RenderProgress*) const -{ - // FIXME: It doesn't look like there is a good way yet to support animated - // progress bars with the Mozilla theme drawing code. - return 0; -} - void RenderThemeGtk::adjustProgressBarStyle(CSSStyleSelector*, RenderStyle* style, Element*) const { style->setBoxShadow(0); diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk.h b/Source/WebCore/platform/gtk/RenderThemeGtk.h index ef1df05..90113e5 100644 --- a/Source/WebCore/platform/gtk/RenderThemeGtk.h +++ b/Source/WebCore/platform/gtk/RenderThemeGtk.h @@ -29,9 +29,14 @@ #define RenderThemeGtk_h #include "GRefPtr.h" -#include "gtkdrawing.h" #include "RenderTheme.h" +#ifdef GTK_API_VERSION_2 +#include "gtkdrawing.h" +#endif + +typedef gulong GType; + namespace WebCore { class RenderThemeGtk : public RenderTheme { @@ -86,10 +91,9 @@ public: virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const; #endif - void getIndicatorMetrics(ControlPart, int& indicatorSize, int& indicatorSpacing) const; - #ifdef GTK_API_VERSION_2 GtkWidget* gtkScrollbar(); + static void getIndicatorMetrics(ControlPart, int& indicatorSize, int& indicatorSpacing); #else GtkStyleContext* gtkScrollbarStyle(); #endif @@ -152,6 +156,9 @@ protected: virtual bool paintMediaSeekForwardButton(RenderObject*, const PaintInfo&, const IntRect&); virtual bool paintMediaSliderTrack(RenderObject*, const PaintInfo&, const IntRect&); virtual bool paintMediaSliderThumb(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderContainer(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderTrack(RenderObject*, const PaintInfo&, const IntRect&); + virtual bool paintMediaVolumeSliderThumb(RenderObject*, const PaintInfo&, const IntRect&); virtual bool paintMediaCurrentTime(RenderObject*, const PaintInfo&, const IntRect&); #endif @@ -163,45 +170,41 @@ protected: #endif private: - GtkWidget* gtkButton() const; - GtkWidget* gtkEntry() const; - GtkWidget* gtkTreeView() const; - GtkWidget* gtkVScale() const; - GtkWidget* gtkHScale() const; - GtkWidget* gtkContainer() const; - - void setupWidgetAndAddToContainer(GtkWidget*, GtkWidget*) const; - GtkStateType getGtkStateType(RenderObject* object); - bool paintRenderObject(GtkThemeWidgetType, RenderObject*, GraphicsContext*, const IntRect& rect, int flags = 0); + void platformInit(); #if ENABLE(VIDEO) bool paintMediaButton(RenderObject*, GraphicsContext*, const IntRect&, const char* iconName); #endif - GtkStateType gtkIconState(RenderObject*); static void setTextInputBorders(RenderStyle*); GRefPtr<GdkPixbuf> getStockIcon(GType, const char* iconName, gint direction, gint state, gint iconSize); - mutable GtkWidget* m_gtkWindow; - mutable GtkWidget* m_gtkContainer; - mutable GtkWidget* m_gtkButton; - mutable GtkWidget* m_gtkEntry; - mutable GtkWidget* m_gtkTreeView; - mutable GtkWidget* m_gtkVScale; - mutable GtkWidget* m_gtkHScale; - mutable Color m_panelColor; mutable Color m_sliderColor; mutable Color m_sliderThumbColor; - const int m_mediaIconSize; const int m_mediaSliderHeight; const int m_mediaSliderThumbWidth; const int m_mediaSliderThumbHeight; - GtkThemeParts m_themeParts; #ifdef GTK_API_VERSION_2 + void setupWidgetAndAddToContainer(GtkWidget*, GtkWidget*) const; + bool paintRenderObject(GtkThemeWidgetType, RenderObject*, GraphicsContext*, const IntRect&, int flags = 0); + GtkThemeParts m_themeParts; + GtkWidget* gtkButton() const; + GtkWidget* gtkEntry() const; + GtkWidget* gtkTreeView() const; + GtkWidget* gtkVScale() const; + GtkWidget* gtkHScale() const; + GtkWidget* gtkContainer() const; + mutable GtkWidget* m_gtkWindow; + mutable GtkWidget* m_gtkContainer; + mutable GtkWidget* m_gtkButton; + mutable GtkWidget* m_gtkEntry; + mutable GtkWidget* m_gtkTreeView; + mutable GtkWidget* m_gtkVScale; + mutable GtkWidget* m_gtkHScale; bool m_themePartsHaveRGBAColormap; -#endif friend class WidgetRenderingContext; +#endif }; } diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp index fd391b7..e01508e 100644 --- a/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp +++ b/Source/WebCore/platform/gtk/RenderThemeGtk2.cpp @@ -32,6 +32,7 @@ #include "GtkVersioning.h" #include "HTMLNames.h" #include "MediaControlElements.h" +#include "PaintInfo.h" #include "RenderObject.h" #include "TextDirection.h" #include "UserAgentStyleSheets.h" @@ -49,6 +50,45 @@ namespace WebCore { // This is not a static method, because we want to avoid having GTK+ headers in RenderThemeGtk.h. extern GtkTextDirection gtkTextDirection(TextDirection); +static int mozGtkRefCount = 0; +void RenderThemeGtk::platformInit() +{ + m_themePartsHaveRGBAColormap = true; + m_gtkWindow = 0; + m_gtkContainer = 0; + m_gtkButton = 0; + m_gtkEntry = 0; + m_gtkTreeView = 0; + m_gtkVScale = 0; + m_gtkHScale = 0; + + memset(&m_themeParts, 0, sizeof(GtkThemeParts)); + GdkColormap* colormap = gdk_screen_get_rgba_colormap(gdk_screen_get_default()); + if (!colormap) { + m_themePartsHaveRGBAColormap = false; + colormap = gdk_screen_get_default_colormap(gdk_screen_get_default()); + } + m_themeParts.colormap = colormap; + + // Initialize the Mozilla theme drawing code. + if (!mozGtkRefCount) { + moz_gtk_init(); + moz_gtk_use_theme_parts(&m_themeParts); + } + ++mozGtkRefCount; +} + +RenderThemeGtk::~RenderThemeGtk() +{ + --mozGtkRefCount; + + if (!mozGtkRefCount) + moz_gtk_shutdown(); + + if (m_gtkWindow) + gtk_widget_destroy(m_gtkWindow); +} + #if ENABLE(VIDEO) void RenderThemeGtk::initMediaColors() { @@ -63,13 +103,13 @@ void RenderThemeGtk::adjustRepaintRect(const RenderObject*, IntRect&) { } -GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object) +static GtkStateType getGtkStateType(RenderThemeGtk* theme, RenderObject* object) { - if (!isEnabled(object) || isReadOnlyControl(object)) + if (!theme->isEnabled(object) || theme->isReadOnlyControl(object)) return GTK_STATE_INSENSITIVE; - if (isPressed(object)) + if (theme->isPressed(object)) return GTK_STATE_ACTIVE; - if (isHovered(object)) + if (theme->isHovered(object)) return GTK_STATE_PRELIGHT; return GTK_STATE_NORMAL; } @@ -102,6 +142,18 @@ bool RenderThemeGtk::paintRenderObject(GtkThemeWidgetType type, RenderObject* re gtkTextDirection(renderObject->style()->direction())); } +void RenderThemeGtk::getIndicatorMetrics(ControlPart part, int& indicatorSize, int& indicatorSpacing) +{ + ASSERT(part == CheckboxPart || part == RadioPart); + if (part == CheckboxPart) { + moz_gtk_checkbox_get_metrics(&indicatorSize, &indicatorSpacing); + return; + } + + // RadioPart + moz_gtk_radio_get_metrics(&indicatorSize, &indicatorSpacing); +} + static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, ControlPart appearance) { // The width and height are both specified, so we shouldn't change them. @@ -110,7 +162,7 @@ static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, Contr // FIXME: This is probably not correct use of indicatorSize and indicatorSpacing. gint indicatorSize, indicatorSpacing; - theme->getIndicatorMetrics(appearance, indicatorSize, indicatorSpacing); + RenderThemeGtk::getIndicatorMetrics(appearance, indicatorSize, indicatorSpacing); // Other ports hard-code this to 13, but GTK+ users tend to demand the native look. // It could be made a configuration option values other than 13 actually break site compatibility. @@ -151,7 +203,7 @@ bool RenderThemeGtk::paintButton(RenderObject* object, const PaintInfo& info, co IntRect buttonRect(IntPoint(), rect.size()); IntRect focusRect(buttonRect); - GtkStateType state = getGtkStateType(object); + GtkStateType state = getGtkStateType(this, object); gtk_widget_set_state(widget, state); gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction())); @@ -248,24 +300,24 @@ bool RenderThemeGtk::paintSliderTrack(RenderObject* object, const PaintInfo& inf return false; ControlPart part = object->style()->appearance(); - ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart); + ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart || part == MediaVolumeSliderPart); // We shrink the trough rect slightly to make room for the focus indicator. IntRect troughRect(IntPoint(), rect.size()); // This is relative to rect. GtkWidget* widget = 0; - if (part == SliderVerticalPart) { - widget = gtkVScale(); - troughRect.inflateY(-gtk_widget_get_style(widget)->ythickness); - } else { + if (part == SliderHorizontalPart) { widget = gtkHScale(); troughRect.inflateX(-gtk_widget_get_style(widget)->xthickness); + } else { + widget = gtkVScale(); + troughRect.inflateY(-gtk_widget_get_style(widget)->ythickness); } gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction())); WidgetRenderingContext widgetContext(info.context, rect); widgetContext.gtkPaintBox(troughRect, widget, GTK_STATE_ACTIVE, GTK_SHADOW_OUT, "trough"); if (isFocused(object)) - widgetContext.gtkPaintFocus(IntRect(IntPoint(), rect.size()), widget, getGtkStateType(object), "trough"); + widgetContext.gtkPaintFocus(IntRect(IntPoint(), rect.size()), widget, getGtkStateType(this, object), "trough"); return false; } @@ -276,19 +328,19 @@ bool RenderThemeGtk::paintSliderThumb(RenderObject* object, const PaintInfo& inf return false; ControlPart part = object->style()->appearance(); - ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart); + ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart || part == MediaVolumeSliderThumbPart); GtkWidget* widget = 0; const char* detail = 0; GtkOrientation orientation; - if (part == SliderThumbVerticalPart) { - widget = gtkVScale(); - detail = "vscale"; - orientation = GTK_ORIENTATION_VERTICAL; - } else { + if (part == SliderThumbHorizontalPart) { widget = gtkHScale(); detail = "hscale"; orientation = GTK_ORIENTATION_HORIZONTAL; + } else { + widget = gtkVScale(); + detail = "vscale"; + orientation = GTK_ORIENTATION_VERTICAL; } gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction())); @@ -298,7 +350,7 @@ bool RenderThemeGtk::paintSliderThumb(RenderObject* object, const PaintInfo& inf // on them. IntRect thumbRect(IntPoint(), rect.size()); WidgetRenderingContext widgetContext(info.context, rect); - widgetContext.gtkPaintSlider(thumbRect, widget, getGtkStateType(object), GTK_SHADOW_OUT, detail, orientation); + widgetContext.gtkPaintSlider(thumbRect, widget, getGtkStateType(this, object), GTK_SHADOW_OUT, detail, orientation); return false; } @@ -306,7 +358,7 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const { ControlPart part = o->style()->appearance(); #if ENABLE(VIDEO) - if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) { + if (part == MediaSliderThumbPart) { adjustMediaSliderThumbSize(o); return; } @@ -324,12 +376,26 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const o->style()->setHeight(Length(width, Fixed)); return; } - ASSERT(part == SliderThumbVerticalPart); + ASSERT(part == SliderThumbVerticalPart || part == MediaVolumeSliderThumbPart); o->style()->setWidth(Length(width, Fixed)); o->style()->setHeight(Length(length, Fixed)); } #if ENABLE(PROGRESS_TAG) +double RenderThemeGtk::animationRepeatIntervalForProgressBar(RenderProgress*) const +{ + // FIXME: It doesn't look like there is a good way yet to support animated + // progress bars with the Mozilla theme drawing code. + return 0; +} + +double RenderThemeGtk::animationDurationForProgressBar(RenderProgress*) const +{ + // FIXME: It doesn't look like there is a good way yet to support animated + // progress bars with the Mozilla theme drawing code. + return 0; +} + bool RenderThemeGtk::paintProgressBar(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { if (!renderObject->isProgress()) diff --git a/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp b/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp index 663404d..212e29d 100644 --- a/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp +++ b/Source/WebCore/platform/gtk/RenderThemeGtk3.cpp @@ -33,11 +33,11 @@ #include "HTMLNames.h" #include "MediaControlElements.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderObject.h" #include "TextDirection.h" #include "UserAgentStyleSheets.h" -#include "WidgetRenderingContext.h" -#include "gtkdrawing.h" +#include <cmath> #include <gdk/gdk.h> #include <gtk/gtk.h> @@ -47,6 +47,9 @@ namespace WebCore { +// This is the default value defined by GTK+, where it was defined as MIN_ARROW_SIZE in gtkarrow.c. +static const int minArrowSize = 15; + typedef HashMap<GType, GRefPtr<GtkStyleContext> > StyleContextMap; static StyleContextMap& styleContextMap(); @@ -90,16 +93,36 @@ static GtkStyleContext* getStyleContext(GType widgetType) return context.get(); } +GtkStyleContext* RenderThemeGtk::gtkScrollbarStyle() +{ + return getStyleContext(GTK_TYPE_SCROLLBAR); +} + // This is not a static method, because we want to avoid having GTK+ headers in RenderThemeGtk.h. extern GtkTextDirection gtkTextDirection(TextDirection); +void RenderThemeGtk::platformInit() +{ +} + +RenderThemeGtk::~RenderThemeGtk() +{ +} + +#if ENABLE(VIDEO) void RenderThemeGtk::initMediaColors() { - GtkStyle* style = gtk_widget_get_style(GTK_WIDGET(gtkContainer())); - m_panelColor = style->bg[GTK_STATE_NORMAL]; - m_sliderColor = style->bg[GTK_STATE_ACTIVE]; - m_sliderThumbColor = style->bg[GTK_STATE_SELECTED]; + GdkRGBA color; + GtkStyleContext* containerContext = getStyleContext(GTK_TYPE_CONTAINER); + + gtk_style_context_get_background_color(containerContext, GTK_STATE_FLAG_NORMAL, &color); + m_panelColor = color; + gtk_style_context_get_background_color(containerContext, GTK_STATE_FLAG_ACTIVE, &color); + m_sliderColor = color; + gtk_style_context_get_background_color(containerContext, GTK_STATE_FLAG_SELECTED, &color); + m_sliderThumbColor = color; } +#endif static void adjustRectForFocus(GtkStyleContext* context, IntRect& rect) { @@ -113,119 +136,140 @@ static void adjustRectForFocus(GtkStyleContext* context, IntRect& rect) void RenderThemeGtk::adjustRepaintRect(const RenderObject* renderObject, IntRect& rect) { GtkStyleContext* context = 0; + bool checkInteriorFocus = false; ControlPart part = renderObject->style()->appearance(); switch (part) { + case CheckboxPart: + case RadioPart: + context = getStyleContext(part == CheckboxPart ? GTK_TYPE_CHECK_BUTTON : GTK_TYPE_RADIO_BUTTON); + + gint indicatorSpacing; + gtk_style_context_get_style(context, "indicator-spacing", &indicatorSpacing, NULL); + rect.inflate(indicatorSpacing); + + return; case SliderVerticalPart: case SliderHorizontalPart: context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE); break; case ButtonPart: + case MenulistButtonPart: + case MenulistPart: context = getStyleContext(GTK_TYPE_BUTTON); - - gboolean interiorFocus; - gtk_style_context_get_style(context, "interior-focus", &interiorFocus, NULL); - if (interiorFocus) - return; - + checkInteriorFocus = true; + break; + case TextFieldPart: + case TextAreaPart: + context = getStyleContext(GTK_TYPE_ENTRY); + checkInteriorFocus = true; break; default: return; } ASSERT(context); + if (checkInteriorFocus) { + gboolean interiorFocus; + gtk_style_context_get_style(context, "interior-focus", &interiorFocus, NULL); + if (interiorFocus) + return; + } adjustRectForFocus(context, rect); } -GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object) +static void setToggleSize(GtkStyleContext* context, RenderStyle* style) { - if (!isEnabled(object) || isReadOnlyControl(object)) - return GTK_STATE_INSENSITIVE; - if (isPressed(object)) - return GTK_STATE_ACTIVE; - if (isHovered(object)) - return GTK_STATE_PRELIGHT; - return GTK_STATE_NORMAL; -} - -bool RenderThemeGtk::paintRenderObject(GtkThemeWidgetType type, RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, int flags) -{ - // Painting is disabled so just claim to have succeeded - if (context->paintingDisabled()) - return false; - - GtkWidgetState widgetState; - widgetState.active = isPressed(renderObject); - widgetState.focused = isFocused(renderObject); + // The width and height are both specified, so we shouldn't change them. + if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) + return; - // https://bugs.webkit.org/show_bug.cgi?id=18364 - // The Mozilla theme drawing code, only paints a button as pressed when it's pressed - // while hovered. Until we move away from the Mozila code, work-around the issue by - // forcing a pressed button into the hovered state. This ensures that buttons activated - // via the keyboard have the proper rendering. - widgetState.inHover = isHovered(renderObject) || (type == MOZ_GTK_BUTTON && isPressed(renderObject)); + // Other ports hard-code this to 13 which is also the default value defined by GTK+. + // GTK+ users tend to demand the native look. + // It could be made a configuration option values other than 13 actually break site compatibility. + gint indicatorSize; + gtk_style_context_get_style(context, "indicator-size", &indicatorSize, NULL); - // FIXME: Disabled does not always give the correct appearance for ReadOnly - widgetState.disabled = !isEnabled(renderObject) || isReadOnlyControl(renderObject); - widgetState.isDefault = false; - widgetState.canDefault = false; - widgetState.depressed = false; + if (style->width().isIntrinsicOrAuto()) + style->setWidth(Length(indicatorSize, Fixed)); - WidgetRenderingContext widgetContext(context, rect); - return !widgetContext.paintMozillaWidget(type, &widgetState, flags, - gtkTextDirection(renderObject->style()->direction())); + if (style->height().isAuto()) + style->setHeight(Length(indicatorSize, Fixed)); } -static void setToggleSize(const RenderThemeGtk* theme, RenderStyle* style, ControlPart appearance) +static void paintToggle(const RenderThemeGtk* theme, GType widgetType, RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - // The width and height are both specified, so we shouldn't change them. - if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto()) - return; + GtkStyleContext* context = getStyleContext(widgetType); + gtk_style_context_save(context); - // FIXME: This is probably not correct use of indicatorSize and indicatorSpacing. - gint indicatorSize, indicatorSpacing; - theme->getIndicatorMetrics(appearance, indicatorSize, indicatorSpacing); + gtk_style_context_set_direction(context, static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction()))); + gtk_style_context_add_class(context, widgetType == GTK_TYPE_CHECK_BUTTON ? GTK_STYLE_CLASS_CHECK : GTK_STYLE_CLASS_RADIO); - // Other ports hard-code this to 13, but GTK+ users tend to demand the native look. - // It could be made a configuration option values other than 13 actually break site compatibility. - int length = indicatorSize + indicatorSpacing; - if (style->width().isIntrinsicOrAuto()) - style->setWidth(Length(length, Fixed)); + guint flags = 0; + if (!theme->isEnabled(renderObject) || theme->isReadOnlyControl(renderObject)) + flags |= GTK_STATE_FLAG_INSENSITIVE; + else if (theme->isHovered(renderObject)) + flags |= GTK_STATE_FLAG_PRELIGHT; + if (theme->isIndeterminate(renderObject)) + flags |= GTK_STATE_FLAG_INCONSISTENT; + else if (theme->isChecked(renderObject)) + flags |= GTK_STATE_FLAG_ACTIVE; + if (theme->isPressed(renderObject)) + flags |= GTK_STATE_FLAG_SELECTED; + gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags)); - if (style->height().isAuto()) - style->setHeight(Length(length, Fixed)); + if (widgetType == GTK_TYPE_CHECK_BUTTON) + gtk_render_check(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + else + gtk_render_option(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + + if (theme->isFocused(renderObject)) { + IntRect indicatorRect(rect); + gint indicatorSpacing; + gtk_style_context_get_style(context, "indicator-spacing", &indicatorSpacing, NULL); + indicatorRect.inflate(indicatorSpacing); + gtk_render_focus(context, paintInfo.context->platformContext(), indicatorRect.x(), indicatorRect.y(), + indicatorRect.width(), indicatorRect.height()); + } + + gtk_style_context_restore(context); } void RenderThemeGtk::setCheckboxSize(RenderStyle* style) const { - setToggleSize(this, style, RadioPart); + setToggleSize(getStyleContext(GTK_TYPE_CHECK_BUTTON), style); } -bool RenderThemeGtk::paintCheckbox(RenderObject* object, const PaintInfo& info, const IntRect& rect) +bool RenderThemeGtk::paintCheckbox(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - return paintRenderObject(MOZ_GTK_CHECKBUTTON, object, info.context, rect, isChecked(object)); + paintToggle(this, GTK_TYPE_CHECK_BUTTON, renderObject, paintInfo, rect); + return false; } void RenderThemeGtk::setRadioSize(RenderStyle* style) const { - setToggleSize(this, style, RadioPart); + setToggleSize(getStyleContext(GTK_TYPE_RADIO_BUTTON), style); } -bool RenderThemeGtk::paintRadio(RenderObject* object, const PaintInfo& info, const IntRect& rect) +bool RenderThemeGtk::paintRadio(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - return paintRenderObject(MOZ_GTK_RADIOBUTTON, object, info.context, rect, isChecked(object)); + paintToggle(this, GTK_TYPE_RADIO_BUTTON, renderObject, paintInfo, rect); + return false; } -bool RenderThemeGtk::paintButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) +static void renderButton(RenderTheme* theme, GtkStyleContext* context, RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - GtkStyleContext* context = getStyleContext(GTK_TYPE_BUTTON); - gtk_style_context_save(context); - - gtk_style_context_set_direction(context, static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction()))); - gtk_style_context_add_class(context, GTK_STYLE_CLASS_BUTTON); - IntRect buttonRect(rect); - if (isDefault(renderObject)) { + guint flags = 0; + if (!theme->isEnabled(renderObject) || theme->isReadOnlyControl(renderObject)) + flags |= GTK_STATE_FLAG_INSENSITIVE; + else if (theme->isHovered(renderObject)) + flags |= GTK_STATE_FLAG_PRELIGHT; + if (theme->isPressed(renderObject)) + flags |= GTK_STATE_FLAG_ACTIVE; + gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags)); + + if (theme->isDefault(renderObject)) { GtkBorder* borderPtr = 0; GtkBorder border = { 1, 1, 1, 1 }; @@ -242,19 +286,10 @@ bool RenderThemeGtk::paintButton(RenderObject* renderObject, const PaintInfo& pa gtk_style_context_add_class(context, GTK_STYLE_CLASS_DEFAULT); } - guint flags = 0; - if (!isEnabled(renderObject) || isReadOnlyControl(renderObject)) - flags |= GTK_STATE_FLAG_INSENSITIVE; - else if (isHovered(renderObject)) - flags |= GTK_STATE_FLAG_PRELIGHT; - if (isPressed(renderObject)) - flags |= GTK_STATE_FLAG_ACTIVE; - gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags)); - gtk_render_background(context, paintInfo.context->platformContext(), buttonRect.x(), buttonRect.y(), buttonRect.width(), buttonRect.height()); gtk_render_frame(context, paintInfo.context->platformContext(), buttonRect.x(), buttonRect.y(), buttonRect.width(), buttonRect.height()); - if (isFocused(renderObject)) { + if (theme->isFocused(renderObject)) { gint focusWidth, focusPad; gboolean displaceFocus, interiorFocus; gtk_style_context_get_style(context, @@ -274,7 +309,7 @@ bool RenderThemeGtk::paintButton(RenderObject* renderObject, const PaintInfo& pa } else buttonRect.inflate(focusWidth + focusPad); - if (displaceFocus && isPressed(renderObject)) { + if (displaceFocus && theme->isPressed(renderObject)) { gint childDisplacementX; gint childDisplacementY; gtk_style_context_get_style(context, @@ -286,64 +321,283 @@ bool RenderThemeGtk::paintButton(RenderObject* renderObject, const PaintInfo& pa gtk_render_focus(context, paintInfo.context->platformContext(), buttonRect.x(), buttonRect.y(), buttonRect.width(), buttonRect.height()); } +} +bool RenderThemeGtk::paintButton(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) +{ + GtkStyleContext* context = getStyleContext(GTK_TYPE_BUTTON); + gtk_style_context_save(context); + + gtk_style_context_set_direction(context, static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction()))); + gtk_style_context_add_class(context, GTK_STYLE_CLASS_BUTTON); + + renderButton(this, context, renderObject, paintInfo, rect); gtk_style_context_restore(context); return false; } -static void getComboBoxPadding(RenderStyle* style, int& left, int& top, int& right, int& bottom) +static void getComboBoxMetrics(RenderStyle* style, GtkBorder& border, int& focus, int& separator) { // If this menu list button isn't drawn using the native theme, we // don't add any extra padding beyond what WebCore already uses. if (style->appearance() == NoControlPart) return; - moz_gtk_get_widget_border(MOZ_GTK_DROPDOWN, &left, &top, &right, &bottom, - gtkTextDirection(style->direction()), TRUE); + + GtkStyleContext* context = getStyleContext(GTK_TYPE_BUTTON); + gtk_style_context_save(context); + + gtk_style_context_add_class(context, GTK_STYLE_CLASS_BUTTON); + gtk_style_context_set_direction(context, static_cast<GtkTextDirection>(gtkTextDirection(style->direction()))); + + gtk_style_context_get_border(context, static_cast<GtkStateFlags>(0), &border); + + gboolean interiorFocus; + gint focusWidth, focusPad; + gtk_style_context_get_style(context, + "interior-focus", &interiorFocus, + "focus-line-width", &focusWidth, + "focus-padding", &focusPad, NULL); + focus = interiorFocus ? focusWidth + focusPad : 0; + + gtk_style_context_restore(context); + + context = getStyleContext(GTK_TYPE_SEPARATOR); + gtk_style_context_save(context); + + GtkTextDirection direction = static_cast<GtkTextDirection>(gtkTextDirection(style->direction())); + gtk_style_context_set_direction(context, direction); + gtk_style_context_add_class(context, "separator"); + + gboolean wideSeparators; + gint separatorWidth; + gtk_style_context_get_style(context, + "wide-separators", &wideSeparators, + "separator-width", &separatorWidth, + NULL); + + // GTK+ always uses border.left, regardless of text direction. See gtkseperator.c. + if (!wideSeparators) + separatorWidth = border.left; + + separator = separatorWidth; + + gtk_style_context_restore(context); } int RenderThemeGtk::popupInternalPaddingLeft(RenderStyle* style) const { - int left = 0, top = 0, right = 0, bottom = 0; - getComboBoxPadding(style, left, top, right, bottom); + GtkBorder borderWidth = { 0, 0, 0, 0 }; + int focusWidth = 0, separatorWidth = 0; + getComboBoxMetrics(style, borderWidth, focusWidth, separatorWidth); + int left = borderWidth.left + focusWidth; + if (style->direction() == RTL) + left += separatorWidth + minArrowSize; return left; } int RenderThemeGtk::popupInternalPaddingRight(RenderStyle* style) const { - int left = 0, top = 0, right = 0, bottom = 0; - getComboBoxPadding(style, left, top, right, bottom); + GtkBorder borderWidth = { 0, 0, 0, 0 }; + int focusWidth = 0, separatorWidth = 0; + getComboBoxMetrics(style, borderWidth, focusWidth, separatorWidth); + int right = borderWidth.right + focusWidth; + if (style->direction() == LTR) + right += separatorWidth + minArrowSize; return right; } int RenderThemeGtk::popupInternalPaddingTop(RenderStyle* style) const { - int left = 0, top = 0, right = 0, bottom = 0; - getComboBoxPadding(style, left, top, right, bottom); - return top; + GtkBorder borderWidth = { 0, 0, 0, 0 }; + int focusWidth = 0, separatorWidth = 0; + getComboBoxMetrics(style, borderWidth, focusWidth, separatorWidth); + return borderWidth.top + focusWidth; } int RenderThemeGtk::popupInternalPaddingBottom(RenderStyle* style) const { - int left = 0, top = 0, right = 0, bottom = 0; - getComboBoxPadding(style, left, top, right, bottom); - return bottom; + GtkBorder borderWidth = { 0, 0, 0, 0 }; + int focusWidth = 0, separatorWidth = 0; + getComboBoxMetrics(style, borderWidth, focusWidth, separatorWidth); + return borderWidth.bottom + focusWidth; } -bool RenderThemeGtk::paintMenuList(RenderObject* object, const PaintInfo& info, const IntRect& rect) +bool RenderThemeGtk::paintMenuList(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - return paintRenderObject(MOZ_GTK_DROPDOWN, object, info.context, rect); + cairo_t* cairoContext = paintInfo.context->platformContext(); + GtkTextDirection direction = static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction())); + + // Paint the button. + GtkStyleContext* buttonStyleContext = getStyleContext(GTK_TYPE_BUTTON); + gtk_style_context_save(buttonStyleContext); + gtk_style_context_set_direction(buttonStyleContext, direction); + gtk_style_context_add_class(buttonStyleContext, GTK_STYLE_CLASS_BUTTON); + renderButton(this, buttonStyleContext, renderObject, paintInfo, rect); + + // Get the inner rectangle. + gint focusWidth, focusPad; + GtkBorder* innerBorderPtr = 0; + GtkBorder innerBorder = { 1, 1, 1, 1 }; + gtk_style_context_get_style(buttonStyleContext, + "inner-border", &innerBorderPtr, + "focus-line-width", &focusWidth, + "focus-padding", &focusPad, + NULL); + if (innerBorderPtr) { + innerBorder = *innerBorderPtr; + gtk_border_free(innerBorderPtr); + } + + GtkBorder borderWidth; + GtkStateFlags state = gtk_style_context_get_state(buttonStyleContext); + gtk_style_context_get_border(buttonStyleContext, state, &borderWidth); + + focusWidth += focusPad; + IntRect innerRect(rect.x() + innerBorder.left + borderWidth.left + focusWidth, + rect.y() + innerBorder.top + borderWidth.top + focusWidth, + rect.width() - borderWidth.left - borderWidth.right - innerBorder.left - innerBorder.right - (2 * focusWidth), + rect.height() - borderWidth.top - borderWidth.bottom - innerBorder.top - innerBorder.bottom - (2 * focusWidth)); + + if (isPressed(renderObject)) { + gint childDisplacementX; + gint childDisplacementY; + gtk_style_context_get_style(buttonStyleContext, + "child-displacement-x", &childDisplacementX, + "child-displacement-y", &childDisplacementY, + NULL); + innerRect.move(childDisplacementX, childDisplacementY); + } + innerRect.setWidth(max(1, innerRect.width())); + innerRect.setHeight(max(1, innerRect.height())); + + gtk_style_context_restore(buttonStyleContext); + + // Paint the arrow. + GtkStyleContext* arrowStyleContext = getStyleContext(GTK_TYPE_ARROW); + gtk_style_context_save(arrowStyleContext); + + gtk_style_context_set_direction(arrowStyleContext, direction); + gtk_style_context_add_class(arrowStyleContext, "arrow"); + gtk_style_context_add_class(arrowStyleContext, GTK_STYLE_CLASS_BUTTON); + + gfloat arrowScaling; + gtk_style_context_get_style(arrowStyleContext, "arrow-scaling", &arrowScaling, NULL); + + IntSize arrowSize(minArrowSize, innerRect.height()); + IntPoint arrowPosition = innerRect.location(); + if (direction == GTK_TEXT_DIR_LTR) + arrowPosition.move(innerRect.width() - arrowSize.width(), 0); + + // GTK+ actually fetches the xalign and valign values from the widget, but since we + // don't have a widget here, we are just using the default xalign and valign values of 0.5. + gint extent = std::min(arrowSize.width(), arrowSize.height()) * arrowScaling; + arrowPosition.move(std::floor((arrowSize.width() - extent) / 2), std::floor((arrowSize.height() - extent) / 2)); + + gtk_style_context_set_state(arrowStyleContext, state); + gtk_render_arrow(arrowStyleContext, cairoContext, G_PI, arrowPosition.x(), arrowPosition.y(), extent); + + gtk_style_context_restore(arrowStyleContext); + + // Paint the separator if needed. + GtkStyleContext* separatorStyleContext = getStyleContext(GTK_TYPE_SEPARATOR); + gtk_style_context_save(separatorStyleContext); + + gtk_style_context_set_direction(separatorStyleContext, direction); + gtk_style_context_add_class(separatorStyleContext, "separator"); + gtk_style_context_add_class(separatorStyleContext, GTK_STYLE_CLASS_BUTTON); + + gboolean wideSeparators; + gint separatorWidth; + gtk_style_context_get_style(separatorStyleContext, + "wide-separators", &wideSeparators, + "separator-width", &separatorWidth, + NULL); + if (wideSeparators && !separatorWidth) { + gtk_style_context_restore(separatorStyleContext); + return false; + } + + gtk_style_context_set_state(separatorStyleContext, state); + IntPoint separatorPosition(arrowPosition.x(), innerRect.y()); + if (wideSeparators) { + if (direction == GTK_TEXT_DIR_LTR) + separatorPosition.move(-separatorWidth, 0); + else + separatorPosition.move(arrowSize.width(), 0); + + gtk_render_frame(separatorStyleContext, cairoContext, + separatorPosition.x(), separatorPosition.y(), + separatorWidth, innerRect.height()); + } else { + GtkBorder padding; + gtk_style_context_get_padding(separatorStyleContext, state, &padding); + GtkBorder border; + gtk_style_context_get_border(separatorStyleContext, state, &border); + + if (direction == GTK_TEXT_DIR_LTR) + separatorPosition.move(-(padding.left + border.left), 0); + else + separatorPosition.move(arrowSize.width(), 0); + + cairo_save(cairoContext); + + // An extra clip prevents the separator bleeding outside of the specified rectangle because of subpixel positioning. + cairo_rectangle(cairoContext, separatorPosition.x(), separatorPosition.y(), border.left, innerRect.height()); + cairo_clip(cairoContext); + gtk_render_line(separatorStyleContext, cairoContext, + separatorPosition.x(), separatorPosition.y(), + separatorPosition.x(), innerRect.bottom()); + cairo_restore(cairoContext); + } + + gtk_style_context_restore(separatorStyleContext); + return false; } -bool RenderThemeGtk::paintTextField(RenderObject* object, const PaintInfo& info, const IntRect& rect) +bool RenderThemeGtk::paintTextField(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { - return paintRenderObject(MOZ_GTK_ENTRY, object, info.context, rect); + GtkStyleContext* context = getStyleContext(GTK_TYPE_ENTRY); + gtk_style_context_save(context); + + gtk_style_context_set_direction(context, static_cast<GtkTextDirection>(gtkTextDirection(renderObject->style()->direction()))); + gtk_style_context_add_class(context, GTK_STYLE_CLASS_ENTRY); + + guint flags = 0; + if (!isEnabled(renderObject) || isReadOnlyControl(renderObject)) + flags |= GTK_STATE_FLAG_INSENSITIVE; + else if (isFocused(renderObject)) + flags |= GTK_STATE_FLAG_FOCUSED; + gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags)); + + gtk_render_background(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + gtk_render_frame(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + + if (isFocused(renderObject) && isEnabled(renderObject)) { + gboolean interiorFocus; + gint focusWidth, focusPad; + gtk_style_context_get_style(context, + "interior-focus", &interiorFocus, + "focus-line-width", &focusWidth, + "focus-padding", &focusPad, + NULL); + if (!interiorFocus) { + IntRect focusRect(rect); + focusRect.inflate(focusWidth + focusPad); + gtk_render_focus(context, paintInfo.context->platformContext(), + focusRect.x(), focusRect.y(), focusRect.width(), focusRect.height()); + } + } + + gtk_style_context_restore(context); + + return false; } bool RenderThemeGtk::paintSliderTrack(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { ControlPart part = renderObject->style()->appearance(); - ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart); + ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart || part == MediaVolumeSliderPart); GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE); gtk_style_context_save(context); @@ -378,7 +632,7 @@ bool RenderThemeGtk::paintSliderTrack(RenderObject* renderObject, const PaintInf bool RenderThemeGtk::paintSliderThumb(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { ControlPart part = renderObject->style()->appearance(); - ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart); + ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart || part == MediaVolumeSliderThumbPart); GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE); gtk_style_context_save(context); @@ -414,7 +668,7 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* renderObject) const { ControlPart part = renderObject->style()->appearance(); #if ENABLE(VIDEO) - if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) { + if (part == MediaSliderThumbPart) { adjustMediaSliderThumbSize(renderObject); return; } @@ -430,37 +684,73 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* renderObject) const renderObject->style()->setHeight(Length(sliderWidth, Fixed)); return; } - ASSERT(part == SliderThumbVerticalPart); + ASSERT(part == SliderThumbVerticalPart || part == MediaVolumeSliderThumbPart); renderObject->style()->setWidth(Length(sliderWidth, Fixed)); renderObject->style()->setHeight(Length(sliderLength, Fixed)); } #if ENABLE(PROGRESS_TAG) +// These values have been copied from RenderThemeChromiumSkia.cpp +static const int progressActivityBlocks = 5; +static const int progressAnimationFrames = 10; +static const double progressAnimationInterval = 0.125; +double RenderThemeGtk::animationRepeatIntervalForProgressBar(RenderProgress*) const +{ + return progressAnimationInterval; +} + +double RenderThemeGtk::animationDurationForProgressBar(RenderProgress*) const +{ + return progressAnimationInterval * progressAnimationFrames * 2; // "2" for back and forth; +} + bool RenderThemeGtk::paintProgressBar(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { if (!renderObject->isProgress()) return true; - GtkWidget* progressBarWidget = moz_gtk_get_progress_widget(); - if (!progressBarWidget) - return true; + GtkStyleContext* context = getStyleContext(GTK_TYPE_PROGRESS_BAR); + gtk_style_context_save(context); - if (paintRenderObject(MOZ_GTK_PROGRESSBAR, renderObject, paintInfo.context, rect)) - return true; + gtk_style_context_add_class(context, GTK_STYLE_CLASS_TROUGH); + + gtk_render_background(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + gtk_render_frame(context, paintInfo.context->platformContext(), rect.x(), rect.y(), rect.width(), rect.height()); + + gtk_style_context_restore(context); + + gtk_style_context_save(context); + gtk_style_context_add_class(context, GTK_STYLE_CLASS_PROGRESSBAR); - IntRect chunkRect(rect); RenderProgress* renderProgress = toRenderProgress(renderObject); - GtkStyle* style = gtk_widget_get_style(progressBarWidget); - chunkRect.setHeight(chunkRect.height() - (2 * style->ythickness)); - chunkRect.setY(chunkRect.y() + style->ythickness); - chunkRect.setWidth((chunkRect.width() - (2 * style->xthickness)) * renderProgress->position()); - if (renderObject->style()->direction() == RTL) - chunkRect.setX(rect.x() + rect.width() - chunkRect.width() - style->xthickness); - else - chunkRect.setX(chunkRect.x() + style->xthickness); + GtkBorder padding; + gtk_style_context_get_padding(context, static_cast<GtkStateFlags>(0), &padding); + IntRect progressRect(rect.x() + padding.left, rect.y() + padding.top, + rect.width() - (padding.left + padding.right), + rect.height() - (padding.top + padding.bottom)); + + if (renderProgress->isDeterminate()) { + progressRect.setWidth(progressRect.width() * renderProgress->position()); + if (renderObject->style()->direction() == RTL) + progressRect.setX(rect.x() + rect.width() - progressRect.width() - padding.right); + } else { + double animationProgress = renderProgress->animationProgress(); + + progressRect.setWidth(max(2, progressRect.width() / progressActivityBlocks)); + int movableWidth = rect.width() - progressRect.width(); + if (animationProgress < 0.5) + progressRect.setX(progressRect.x() + (animationProgress * 2 * movableWidth)); + else + progressRect.setX(progressRect.x() + ((1.0 - animationProgress) * 2 * movableWidth)); + } + + if (!progressRect.isEmpty()) + gtk_render_activity(context, paintInfo.context->platformContext(), progressRect.x(), progressRect.y(), progressRect.width(), progressRect.height()); + + gtk_style_context_restore(context); - return paintRenderObject(MOZ_GTK_PROGRESS_CHUNK, renderObject, paintInfo.context, chunkRect); + return false; } #endif @@ -558,86 +848,6 @@ Color RenderThemeGtk::systemColor(int cssValueId) const } } -static void gtkStyleSetCallback(GtkWidget* widget, GtkStyle* previous, RenderTheme* renderTheme) -{ - // FIXME: Make sure this function doesn't get called many times for a single GTK+ style change signal. - renderTheme->platformColorsDidChange(); -} - -void RenderThemeGtk::setupWidgetAndAddToContainer(GtkWidget* widget, GtkWidget* window) const -{ - gtk_container_add(GTK_CONTAINER(window), widget); - gtk_widget_realize(widget); - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE)); - - // FIXME: Perhaps this should only be called for the containing window or parent container. - g_signal_connect(widget, "style-set", G_CALLBACK(gtkStyleSetCallback), const_cast<RenderThemeGtk*>(this)); -} - -GtkWidget* RenderThemeGtk::gtkContainer() const -{ - if (m_gtkContainer) - return m_gtkContainer; - - m_gtkWindow = gtk_window_new(GTK_WINDOW_POPUP); - gtk_widget_realize(m_gtkWindow); - gtk_widget_set_name(m_gtkWindow, "MozillaGtkWidget"); - - m_gtkContainer = gtk_fixed_new(); - setupWidgetAndAddToContainer(m_gtkContainer, m_gtkWindow); - return m_gtkContainer; -} - -GtkWidget* RenderThemeGtk::gtkButton() const -{ - if (m_gtkButton) - return m_gtkButton; - m_gtkButton = gtk_button_new(); - setupWidgetAndAddToContainer(m_gtkButton, gtkContainer()); - return m_gtkButton; -} - -GtkWidget* RenderThemeGtk::gtkEntry() const -{ - if (m_gtkEntry) - return m_gtkEntry; - m_gtkEntry = gtk_entry_new(); - setupWidgetAndAddToContainer(m_gtkEntry, gtkContainer()); - return m_gtkEntry; -} - -GtkWidget* RenderThemeGtk::gtkTreeView() const -{ - if (m_gtkTreeView) - return m_gtkTreeView; - m_gtkTreeView = gtk_tree_view_new(); - setupWidgetAndAddToContainer(m_gtkTreeView, gtkContainer()); - return m_gtkTreeView; -} - -GtkWidget* RenderThemeGtk::gtkVScale() const -{ - if (m_gtkVScale) - return m_gtkVScale; - m_gtkVScale = gtk_vscale_new(0); - setupWidgetAndAddToContainer(m_gtkVScale, gtkContainer()); - return m_gtkVScale; -} - -GtkWidget* RenderThemeGtk::gtkHScale() const -{ - if (m_gtkHScale) - return m_gtkHScale; - m_gtkHScale = gtk_hscale_new(0); - setupWidgetAndAddToContainer(m_gtkHScale, gtkContainer()); - return m_gtkHScale; -} - -GtkStyleContext* RenderThemeGtk::gtkScrollbarStyle() -{ - return getStyleContext(GTK_TYPE_SCROLLBAR); -} - } // namespace WebCore #endif // !GTK_API_VERSION_2 diff --git a/Source/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp b/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp index e85c570..6d1be31 100644 --- a/Source/WebCore/platform/gtk/WidgetRenderingContextGtk2.cpp +++ b/Source/WebCore/platform/gtk/WidgetRenderingContext.cpp @@ -32,6 +32,7 @@ #include "WidgetRenderingContext.h" #include "GraphicsContext.h" +#include "GtkVersioning.h" #include "RefPtrCairo.h" #include "RenderThemeGtk.h" #include "Timer.h" @@ -107,7 +108,7 @@ WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* graphicsContext, int scratchWidth = 0; int scratchHeight = 0; if (gScratchBuffer) - gdk_drawable_get_size(gScratchBuffer, &scratchWidth, &scratchHeight); + gdk_pixmap_get_size(gScratchBuffer, &scratchWidth, &scratchHeight); // We do not need to recreate the buffer if the current buffer is large enough. if (!gScratchBuffer || scratchWidth < width || scratchHeight < height) { diff --git a/Source/WebCore/platform/gtk/WidgetRenderingContext.h b/Source/WebCore/platform/gtk/WidgetRenderingContext.h index 7334656..8b2a0e2 100644 --- a/Source/WebCore/platform/gtk/WidgetRenderingContext.h +++ b/Source/WebCore/platform/gtk/WidgetRenderingContext.h @@ -22,6 +22,8 @@ #ifndef WidgetRenderingContext_h #define WidgetRenderingContext_h +#ifdef GTK_API_VERSION_2 + #include "IntRect.h" #include "gtkdrawing.h" @@ -46,15 +48,11 @@ private: GdkRectangle m_paintRect; IntSize m_extraSpace; bool m_hadError; - -#ifdef GTK_API_VERSION_2 GdkDrawable* m_target; -#else - cairo_t* m_target; -#endif }; } -#endif +#endif // GTK_API_VERSION_2 +#endif // WidgetRenderingContext_h diff --git a/Source/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp b/Source/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp deleted file mode 100644 index 69c4af5..0000000 --- a/Source/WebCore/platform/gtk/WidgetRenderingContextGtk3.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2010 Igalia S.L. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - */ - -#include "config.h" -#include "WidgetRenderingContext.h" - -#include "GraphicsContext.h" -#include "IntRect.h" - -#ifndef GTK_API_VERSION_2 - -namespace WebCore { - -WidgetRenderingContext::WidgetRenderingContext(GraphicsContext* context, const IntRect& targetRect) - : m_graphicsContext(context) - , m_targetRect(targetRect) - , m_paintRect(targetRect) - , m_hadError(false) - , m_target(context->platformContext()) -{ -} - -WidgetRenderingContext::~WidgetRenderingContext() -{ -} - -bool WidgetRenderingContext::paintMozillaWidget(GtkThemeWidgetType type, GtkWidgetState* state, int flags, GtkTextDirection textDirection) -{ - m_hadError = moz_gtk_widget_paint(type, m_target, &m_paintRect, state, flags, textDirection) != MOZ_GTK_SUCCESS; - return !m_hadError; -} - -void WidgetRenderingContext::gtkPaintBox(const IntRect& rect, GtkWidget* widget, GtkStateType stateType, GtkShadowType shadowType, const gchar* detail) -{ - GdkRectangle paintRect = { m_paintRect.x + rect.x(), m_paintRect.y + rect.y(), rect.width(), rect.height() }; - gtk_paint_box(gtk_widget_get_style(widget), m_target, stateType, shadowType, widget, - detail, paintRect.x, paintRect.y, paintRect.width, paintRect.height); -} - -void WidgetRenderingContext::gtkPaintFocus(const IntRect& rect, GtkWidget* widget, GtkStateType stateType, const gchar* detail) -{ - GdkRectangle paintRect = { m_paintRect.x + rect.x(), m_paintRect.y + rect.y(), rect.width(), rect.height() }; - gtk_paint_focus(gtk_widget_get_style(widget), m_target, stateType, widget, - detail, paintRect.x, paintRect.y, paintRect.width, paintRect.height); -} - -void WidgetRenderingContext::gtkPaintSlider(const IntRect& rect, GtkWidget* widget, GtkStateType stateType, GtkShadowType shadowType, const gchar* detail, GtkOrientation orientation) -{ - GdkRectangle paintRect = { m_paintRect.x + rect.x(), m_paintRect.y + rect.y(), rect.width(), rect.height() }; - gtk_paint_slider(gtk_widget_get_style(widget), m_target, stateType, shadowType, widget, - detail, paintRect.x, paintRect.y, paintRect.width, paintRect.height, orientation); -} - -} - -#endif // !GTK_API_VERSION_2 diff --git a/Source/WebCore/platform/gtk/gtk3drawing.c b/Source/WebCore/platform/gtk/gtk3drawing.c deleted file mode 100644 index d3bdd56..0000000 --- a/Source/WebCore/platform/gtk/gtk3drawing.c +++ /dev/null @@ -1,1288 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2002 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Brian Ryner <bryner@brianryner.com> (Original Author) - * Pierre Chanial <p_ch@verizon.net> - * Michael Ventnor <m.ventnor@gmail.com> - * Alp Toker <alp@nuanti.com> - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -/* - * This file contains painting functions for each of the gtk2 widgets. - * Adapted from the gtkdrawing.c, and gtk+2.0 source. - */ - -#ifndef GTK_API_VERSION_2 - -#include <gdk/gdkprivate.h> -#include "gtkdrawing.h" -#include "GtkVersioning.h" -#include <math.h> -#include <string.h> - -#define XTHICKNESS(style) (style->xthickness) -#define YTHICKNESS(style) (style->ythickness) - -static GtkThemeParts *gParts = NULL; -static style_prop_t style_prop_func; -static gboolean have_arrow_scaling; -static gboolean is_initialized; - -void -moz_gtk_use_theme_parts(GtkThemeParts* parts) -{ - gParts = parts; -} - -/* Because we have such an unconventional way of drawing widgets, signal to the GTK theme engine - that they are drawing for Mozilla instead of a conventional GTK app so they can do any specific - things they may want to do. */ -static void -moz_gtk_set_widget_name(GtkWidget* widget) -{ - gtk_widget_set_name(widget, "MozillaGtkWidget"); -} - -gint -moz_gtk_enable_style_props(style_prop_t styleGetProp) -{ - style_prop_func = styleGetProp; - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_window_widget() -{ - if (!gParts->protoWindow) { - gParts->protoWindow = gtk_window_new(GTK_WINDOW_POPUP); - gtk_widget_realize(gParts->protoWindow); - moz_gtk_set_widget_name(gParts->protoWindow); - } - return MOZ_GTK_SUCCESS; -} - -static gint -setup_widget_prototype(GtkWidget* widget) -{ - ensure_window_widget(); - if (!gParts->protoLayout) { - gParts->protoLayout = gtk_fixed_new(); - gtk_container_add(GTK_CONTAINER(gParts->protoWindow), gParts->protoLayout); - } - - gtk_container_add(GTK_CONTAINER(gParts->protoLayout), widget); - gtk_widget_realize(widget); - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE)); - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_button_widget() -{ - if (!gParts->buttonWidget) { - gParts->buttonWidget = gtk_button_new_with_label("M"); - setup_widget_prototype(gParts->buttonWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_toggle_button_widget() -{ - if (!gParts->toggleButtonWidget) { - gParts->toggleButtonWidget = gtk_toggle_button_new(); - setup_widget_prototype(gParts->toggleButtonWidget); - /* toggle button must be set active to get the right style on hover. */ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gParts->toggleButtonWidget), TRUE); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_button_arrow_widget() -{ - if (!gParts->buttonArrowWidget) { - ensure_toggle_button_widget(); - - gParts->buttonArrowWidget = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); - gtk_container_add(GTK_CONTAINER(gParts->toggleButtonWidget), gParts->buttonArrowWidget); - gtk_widget_realize(gParts->buttonArrowWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_checkbox_widget() -{ - if (!gParts->checkboxWidget) { - gParts->checkboxWidget = gtk_check_button_new_with_label("M"); - setup_widget_prototype(gParts->checkboxWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_radiobutton_widget() -{ - if (!gParts->radiobuttonWidget) { - gParts->radiobuttonWidget = gtk_radio_button_new_with_label(NULL, "M"); - setup_widget_prototype(gParts->radiobuttonWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_scrollbar_widget() -{ - if (!gParts->vertScrollbarWidget) { - gParts->vertScrollbarWidget = gtk_vscrollbar_new(NULL); - setup_widget_prototype(gParts->vertScrollbarWidget); - } - if (!gParts->horizScrollbarWidget) { - gParts->horizScrollbarWidget = gtk_hscrollbar_new(NULL); - setup_widget_prototype(gParts->horizScrollbarWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_entry_widget() -{ - if (!gParts->entryWidget) { - gParts->entryWidget = gtk_entry_new(); - setup_widget_prototype(gParts->entryWidget); - } - return MOZ_GTK_SUCCESS; -} - -/* We need to have pointers to the inner widgets (button, separator, arrow) - * of the ComboBox to get the correct rendering from theme engines which - * special cases their look. Since the inner layout can change, we ask GTK - * to NULL our pointers when they are about to become invalid because the - * corresponding widgets don't exist anymore. It's the role of - * g_object_add_weak_pointer(). - * Note that if we don't find the inner widgets (which shouldn't happen), we - * fallback to use generic "non-inner" widgets, and they don't need that kind - * of weak pointer since they are explicit children of gParts->protoWindow and as - * such GTK holds a strong reference to them. */ -static void -moz_gtk_get_combo_box_inner_button(GtkWidget *widget, gpointer client_data) -{ - if (GTK_IS_TOGGLE_BUTTON(widget)) { - gParts->comboBoxButtonWidget = widget; - g_object_add_weak_pointer(G_OBJECT(widget), - (gpointer) &gParts->comboBoxButtonWidget); - gtk_widget_realize(widget); - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE)); - } -} - -static void -moz_gtk_get_combo_box_button_inner_widgets(GtkWidget *widget, - gpointer client_data) -{ - if (GTK_IS_SEPARATOR(widget)) { - gParts->comboBoxSeparatorWidget = widget; - g_object_add_weak_pointer(G_OBJECT(widget), - (gpointer) &gParts->comboBoxSeparatorWidget); - } else if (GTK_IS_ARROW(widget)) { - gParts->comboBoxArrowWidget = widget; - g_object_add_weak_pointer(G_OBJECT(widget), - (gpointer) &gParts->comboBoxArrowWidget); - } else - return; - gtk_widget_realize(widget); - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE)); -} - -static gint -ensure_combo_box_widgets() -{ - GtkWidget* buttonChild; - - if (gParts->comboBoxButtonWidget && gParts->comboBoxArrowWidget) - return MOZ_GTK_SUCCESS; - - /* Create a ComboBox if needed */ - if (!gParts->comboBoxWidget) { - gParts->comboBoxWidget = gtk_combo_box_new(); - setup_widget_prototype(gParts->comboBoxWidget); - } - - /* Get its inner Button */ - gtk_container_forall(GTK_CONTAINER(gParts->comboBoxWidget), - moz_gtk_get_combo_box_inner_button, - NULL); - - if (gParts->comboBoxButtonWidget) { - /* Get the widgets inside the Button */ - buttonChild = gtk_bin_get_child(GTK_BIN(gParts->comboBoxButtonWidget)); - if (GTK_IS_HBOX(buttonChild)) { - /* appears-as-list = FALSE, cell-view = TRUE; the button - * contains an hbox. This hbox is there because the ComboBox - * needs to place a cell renderer, a separator, and an arrow in - * the button when appears-as-list is FALSE. */ - gtk_container_forall(GTK_CONTAINER(buttonChild), - moz_gtk_get_combo_box_button_inner_widgets, - NULL); - } else if(GTK_IS_ARROW(buttonChild)) { - /* appears-as-list = TRUE, or cell-view = FALSE; - * the button only contains an arrow */ - gParts->comboBoxArrowWidget = buttonChild; - g_object_add_weak_pointer(G_OBJECT(buttonChild), (gpointer) - &gParts->comboBoxArrowWidget); - gtk_widget_realize(gParts->comboBoxArrowWidget); - g_object_set_data(G_OBJECT(gParts->comboBoxArrowWidget), - "transparent-bg-hint", GINT_TO_POINTER(TRUE)); - } - } else { - /* Shouldn't be reached with current internal gtk implementation; we - * use a generic toggle button as last resort fallback to avoid - * crashing. */ - ensure_toggle_button_widget(); - gParts->comboBoxButtonWidget = gParts->toggleButtonWidget; - } - - if (!gParts->comboBoxArrowWidget) { - /* Shouldn't be reached with current internal gtk implementation; - * we gParts->buttonArrowWidget as last resort fallback to avoid - * crashing. */ - ensure_button_arrow_widget(); - gParts->comboBoxArrowWidget = gParts->buttonArrowWidget; - } - - /* We don't test the validity of gParts->comboBoxSeparatorWidget since there - * is none when "appears-as-list" = TRUE or "cell-view" = FALSE; if it - * is invalid we just won't paint it. */ - - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_progress_widget() -{ - if (!gParts->progresWidget) { - gParts->progresWidget = gtk_progress_bar_new(); - setup_widget_prototype(gParts->progresWidget); - } - return MOZ_GTK_SUCCESS; -} - -static gint -ensure_scrolled_window_widget() -{ - if (!gParts->scrolledWindowWidget) { - gParts->scrolledWindowWidget = gtk_scrolled_window_new(NULL, NULL); - setup_widget_prototype(gParts->scrolledWindowWidget); - } - return MOZ_GTK_SUCCESS; -} - -static GtkStateType -ConvertGtkState(GtkWidgetState* state) -{ - if (state->disabled) - return GTK_STATE_INSENSITIVE; - else if (state->depressed) - return (state->inHover ? GTK_STATE_PRELIGHT : GTK_STATE_ACTIVE); - else if (state->inHover) - return (state->active ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT); - else - return GTK_STATE_NORMAL; -} - -static gint -moz_gtk_button_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, GtkReliefStyle relief, - GtkWidget* widget, GtkTextDirection direction) -{ - GtkShadowType shadow_type; - GtkStyle* style = gtk_widget_get_style(widget); - GtkStateType button_state = ConvertGtkState(state); - gint x = rect->x, y=rect->y, width=rect->width, height=rect->height; - GdkWindow* window = gtk_widget_get_window(widget); - - gboolean interior_focus; - gint focus_width, focus_pad; - - moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad); - - if (window && gdk_window_is_visible(window)) { - gdk_window_set_background_pattern(window, NULL); - } - - gtk_widget_set_state(widget, button_state); - gtk_widget_set_direction(widget, direction); - gtk_button_set_relief(GTK_BUTTON(widget), relief); - - if (!interior_focus && state->focused) { - x += focus_width + focus_pad; - y += focus_width + focus_pad; - width -= 2 * (focus_width + focus_pad); - height -= 2 * (focus_width + focus_pad); - } - - shadow_type = button_state == GTK_STATE_ACTIVE || - state->depressed ? GTK_SHADOW_IN : GTK_SHADOW_OUT; - - if (state->isDefault && relief == GTK_RELIEF_NORMAL) { - gtk_paint_box(style, cr, button_state, shadow_type, - widget, "buttondefault", x, y, width, height); - } - - if (relief != GTK_RELIEF_NONE || state->depressed || - (button_state != GTK_STATE_NORMAL && - button_state != GTK_STATE_INSENSITIVE)) { - /* the following line can trigger an assertion (Crux theme) - file ../../gdk/gdkwindow.c: line 1846 (gdk_window_clear_area): - assertion `GDK_IS_WINDOW (window)' failed */ - gtk_paint_box(style, cr, button_state, shadow_type, - widget, "button", x, y, width, height); - } - - if (state->focused) { - if (interior_focus) { - GtkStyle* style = gtk_widget_get_style(widget); - x += style->xthickness + focus_pad; - y += style->ythickness + focus_pad; - width -= 2 * (style->xthickness + focus_pad); - height -= 2 * (style->ythickness + focus_pad); - } else { - x -= focus_width + focus_pad; - y -= focus_width + focus_pad; - width += 2 * (focus_width + focus_pad); - height += 2 * (focus_width + focus_pad); - } - - gtk_paint_focus(style, cr, button_state, - widget, "button", x, y, width, height); - } - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_init() -{ - GtkWidgetClass *entry_class; - - is_initialized = TRUE; - have_arrow_scaling = (gtk_major_version > 2 || - (gtk_major_version == 2 && gtk_minor_version >= 12)); - - /* Add style property to GtkEntry. - * Adding the style property to the normal GtkEntry class means that it - * will work without issues inside GtkComboBox and for Spinbuttons. */ - entry_class = g_type_class_ref(GTK_TYPE_ENTRY); - gtk_widget_class_install_style_property(entry_class, - g_param_spec_boolean("honors-transparent-bg-hint", - "Transparent BG enabling flag", - "If TRUE, the theme is able to draw the GtkEntry on non-prefilled background.", - FALSE, - G_PARAM_READWRITE)); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing) -{ - ensure_checkbox_widget(); - - gtk_widget_style_get (gParts->checkboxWidget, - "indicator_size", indicator_size, - "indicator_spacing", indicator_spacing, - NULL); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing) -{ - ensure_radiobutton_widget(); - - gtk_widget_style_get (gParts->radiobuttonWidget, - "indicator_size", indicator_size, - "indicator_spacing", indicator_spacing, - NULL); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus, - gint* focus_width, gint* focus_pad) -{ - gtk_widget_style_get (widget, - "interior-focus", interior_focus, - "focus-line-width", focus_width, - "focus-padding", focus_pad, - NULL); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border) -{ - static const GtkBorder default_inner_border = { 1, 1, 1, 1 }; - GtkBorder *tmp_border; - - gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL); - - if (tmp_border) { - *inner_border = *tmp_border; - gtk_border_free(tmp_border); - } - else - *inner_border = default_inner_border; - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_toggle_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, gboolean selected, - gboolean inconsistent, gboolean isradio, - GtkTextDirection direction) -{ - GtkStateType state_type = ConvertGtkState(state); - GtkShadowType shadow_type = (selected)?GTK_SHADOW_IN:GTK_SHADOW_OUT; - gint indicator_size, indicator_spacing; - gint x, y, width, height; - gint focus_x, focus_y, focus_width, focus_height; - GtkWidget *w; - GtkStyle *style; - - if (isradio) { - moz_gtk_radio_get_metrics(&indicator_size, &indicator_spacing); - w = gParts->radiobuttonWidget; - } else { - moz_gtk_checkbox_get_metrics(&indicator_size, &indicator_spacing); - w = gParts->checkboxWidget; - } - - // "GetMinimumWidgetSize was ignored" - // FIXME: This assert causes a build failure in WebKitGTK+ debug - // builds, because it uses 'false' in its definition. We may want - // to force this file to be built with g++, by renaming it. - // ASSERT(rect->width == indicator_size); - - /* - * vertically center in the box, since XUL sometimes ignores our - * GetMinimumWidgetSize in the vertical dimension - */ - x = rect->x; - y = rect->y + (rect->height - indicator_size) / 2; - width = indicator_size; - height = indicator_size; - - focus_x = x - indicator_spacing; - focus_y = y - indicator_spacing; - focus_width = width + 2 * indicator_spacing; - focus_height = height + 2 * indicator_spacing; - - style = gtk_widget_get_style(w); - - gtk_widget_set_sensitive(w, !state->disabled); - gtk_widget_set_direction(w, direction); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), selected); - - if (isradio) { - gtk_paint_option(style, cr, state_type, shadow_type, - gParts->radiobuttonWidget, "radiobutton", x, y, - width, height); - if (state->focused) { - gtk_paint_focus(style, cr, GTK_STATE_ACTIVE, - gParts->radiobuttonWidget, "radiobutton", focus_x, focus_y, - focus_width, focus_height); - } - } - else { - /* - * 'indeterminate' type on checkboxes. In GTK, the shadow type - * must also be changed for the state to be drawn. - */ - if (inconsistent) { - gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gParts->checkboxWidget), TRUE); - shadow_type = GTK_SHADOW_ETCHED_IN; - } else { - gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(gParts->checkboxWidget), FALSE); - } - - gtk_paint_check(style, cr, state_type, shadow_type, - gParts->checkboxWidget, "checkbutton", x, y, width, height); - if (state->focused) { - gtk_paint_focus(style, cr, GTK_STATE_ACTIVE, - gParts->checkboxWidget, "checkbutton", focus_x, focus_y, - focus_width, focus_height); - } - } - - return MOZ_GTK_SUCCESS; -} - -static gint -calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect, - GdkRectangle* inner_rect, - GtkTextDirection direction, - gboolean ignore_focus) -{ - GtkBorder inner_border; - gboolean interior_focus; - gint focus_width, focus_pad; - GtkStyle* style; - - style = gtk_widget_get_style(button); - - /* This mirrors gtkbutton's child positioning */ - moz_gtk_button_get_inner_border(button, &inner_border); - moz_gtk_widget_get_focus(button, &interior_focus, - &focus_width, &focus_pad); - - if (ignore_focus) - focus_width = focus_pad = 0; - - inner_rect->x = rect->x + XTHICKNESS(style) + focus_width + focus_pad; - inner_rect->x += direction == GTK_TEXT_DIR_LTR ? - inner_border.left : inner_border.right; - inner_rect->y = rect->y + inner_border.top + YTHICKNESS(style) + - focus_width + focus_pad; - inner_rect->width = MAX(1, rect->width - inner_border.left - - inner_border.right - (XTHICKNESS(style) + focus_pad + focus_width) * 2); - inner_rect->height = MAX(1, rect->height - inner_border.top - - inner_border.bottom - (YTHICKNESS(style) + focus_pad + focus_width) * 2); - - return MOZ_GTK_SUCCESS; -} - - -static gint -calculate_arrow_rect(GtkWidget* arrow, GdkRectangle* rect, - GdkRectangle* arrow_rect, GtkTextDirection direction) -{ - /* defined in gtkarrow.c */ - gfloat arrow_scaling = 0.7; - gfloat xalign, xpad; - gint extent; - GtkMisc* misc = GTK_MISC(arrow); - gfloat misc_xalign, misc_yalign; - gint misc_xpad, misc_ypad; - - if (have_arrow_scaling) - gtk_widget_style_get(arrow, "arrow_scaling", &arrow_scaling, NULL); - - gtk_misc_get_padding(misc, &misc_xpad, &misc_ypad); - gtk_misc_get_alignment(misc, &misc_xalign, &misc_yalign); - - extent = MIN((rect->width - misc_xpad * 2), - (rect->height - misc_ypad * 2)) * arrow_scaling; - - xalign = direction == GTK_TEXT_DIR_LTR ? misc_xalign : 1.0 - misc_xalign; - xpad = misc_xpad + (rect->width - extent) * xalign; - - arrow_rect->x = direction == GTK_TEXT_DIR_LTR ? - floor(rect->x + xpad) : ceil(rect->x + xpad); - arrow_rect->y = floor(rect->y + misc_ypad + - ((rect->height - extent) * misc_yalign)); - - arrow_rect->width = arrow_rect->height = extent; - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_scrolled_window_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state) -{ - GtkStyle* style; - GtkAllocation allocation; - GtkWidget* widget; - - ensure_scrolled_window_widget(); - widget = gParts->scrolledWindowWidget; - - gtk_widget_get_allocation(widget, &allocation); - allocation.x = rect->x; - allocation.y = rect->y; - allocation.width = rect->width; - allocation.height = rect->height; - gtk_widget_set_allocation(widget, &allocation); - - style = gtk_widget_get_style(widget); - gtk_paint_shadow(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN, - widget, "scrolled_window", rect->x , rect->y, - rect->width, rect->height); - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_scrollbar_button_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, - GtkScrollbarButtonFlags flags, - GtkTextDirection direction) -{ - GtkStateType state_type = ConvertGtkState(state); - GtkShadowType shadow_type = (state->active) ? - GTK_SHADOW_IN : GTK_SHADOW_OUT; - GdkRectangle arrow_rect; - GtkStyle* style; - GtkWidget *scrollbar; - GtkAllocation allocation; - GtkArrowType arrow_type; - gint arrow_displacement_x, arrow_displacement_y; - const char* detail = (flags & MOZ_GTK_STEPPER_VERTICAL) ? - "vscrollbar" : "hscrollbar"; - - ensure_scrollbar_widget(); - - if (flags & MOZ_GTK_STEPPER_VERTICAL) - scrollbar = gParts->vertScrollbarWidget; - else - scrollbar = gParts->horizScrollbarWidget; - - gtk_widget_set_direction(scrollbar, direction); - - /* Some theme engines (i.e., ClearLooks) check the scrollbar's allocation - to determine where it should paint rounded corners on the buttons. - We need to trick them into drawing the buttons the way we want them. */ - - gtk_widget_get_allocation(scrollbar, &allocation); - allocation.x = rect->x; - allocation.y = rect->y; - allocation.width = rect->width; - allocation.height = rect->height; - - if (flags & MOZ_GTK_STEPPER_VERTICAL) { - allocation.height *= 5; - if (flags & MOZ_GTK_STEPPER_DOWN) { - arrow_type = GTK_ARROW_DOWN; - if (flags & MOZ_GTK_STEPPER_BOTTOM) - allocation.y -= 4 * rect->height; - else - allocation.y -= rect->height; - - } else { - arrow_type = GTK_ARROW_UP; - if (flags & MOZ_GTK_STEPPER_BOTTOM) - allocation.y -= 3 * rect->height; - } - } else { - allocation.width *= 5; - if (flags & MOZ_GTK_STEPPER_DOWN) { - arrow_type = GTK_ARROW_RIGHT; - if (flags & MOZ_GTK_STEPPER_BOTTOM) - allocation.x -= 4 * rect->width; - else - allocation.x -= rect->width; - } else { - arrow_type = GTK_ARROW_LEFT; - if (flags & MOZ_GTK_STEPPER_BOTTOM) - allocation.x -= 3 * rect->width; - } - } - - gtk_widget_set_allocation(scrollbar, &allocation); - style = gtk_widget_get_style(scrollbar); - - gtk_paint_box(style, cr, state_type, shadow_type, - scrollbar, detail, rect->x, rect->y, - rect->width, rect->height); - - arrow_rect.width = rect->width / 2; - arrow_rect.height = rect->height / 2; - arrow_rect.x = rect->x + (rect->width - arrow_rect.width) / 2; - arrow_rect.y = rect->y + (rect->height - arrow_rect.height) / 2; - - if (state_type == GTK_STATE_ACTIVE) { - gtk_widget_style_get(scrollbar, - "arrow-displacement-x", &arrow_displacement_x, - "arrow-displacement-y", &arrow_displacement_y, - NULL); - - arrow_rect.x += arrow_displacement_x; - arrow_rect.y += arrow_displacement_y; - } - - gtk_paint_arrow(style, cr, state_type, shadow_type, - scrollbar, detail, arrow_type, TRUE, arrow_rect.x, - arrow_rect.y, arrow_rect.width, arrow_rect.height); - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_scrollbar_trough_paint(GtkThemeWidgetType widget, - cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, - GtkTextDirection direction) -{ - GtkStyle* style; - GtkScrollbar *scrollbar; - - ensure_scrollbar_widget(); - - if (widget == MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL) - scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget); - else - scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); - - style = gtk_widget_get_style(GTK_WIDGET(scrollbar)); - - gtk_paint_box(style, cr, GTK_STATE_ACTIVE, GTK_SHADOW_IN, - GTK_WIDGET(scrollbar), "trough", rect->x, rect->y, - rect->width, rect->height); - - if (state->focused) { - gtk_paint_focus(style, cr, GTK_STATE_ACTIVE, - GTK_WIDGET(scrollbar), "trough", - rect->x, rect->y, rect->width, rect->height); - } - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, - cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, - GtkTextDirection direction) -{ - GtkStateType state_type = (state->inHover || state->active) ? - GTK_STATE_PRELIGHT : GTK_STATE_NORMAL; - GtkShadowType shadow_type = GTK_SHADOW_OUT; - GtkStyle* style; - GtkScrollbar *scrollbar; - GtkAdjustment *adj; - - ensure_scrollbar_widget(); - - if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) - scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget); - else - scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget); - - gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); - - /* Make sure to set the scrollbar range before painting so that - everything is drawn properly. At least the bluecurve (and - maybe other) themes don't draw the top or bottom black line - surrounding the scrollbar if the theme thinks that it's butted - up against the scrollbar arrows. Note the increases of the - clip rect below. */ - adj = gtk_range_get_adjustment(GTK_RANGE(scrollbar)); - - if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) { - gtk_adjustment_set_page_size(adj, rect->width); - } - else { - gtk_adjustment_set_page_size(adj, rect->height); - } - - gtk_adjustment_configure(adj, - state->curpos, - 0, - state->maxpos, - gtk_adjustment_get_step_increment(adj), - gtk_adjustment_get_page_increment(adj), - gtk_adjustment_get_page_size(adj)); - - style = gtk_widget_get_style(GTK_WIDGET(scrollbar)); - - gtk_paint_slider(style, cr, state_type, shadow_type, - GTK_WIDGET(scrollbar), "slider", rect->x, rect->y, - rect->width, rect->height, - (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? - GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_entry_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, GtkWidget* widget, - GtkTextDirection direction) -{ - GtkStateType bg_state = state->disabled ? - GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL; - gint x, y, width = rect->width, height = rect->height; - GtkStyle* style; - gboolean interior_focus; - gboolean theme_honors_transparency = FALSE; - gint focus_width; - - gtk_widget_set_direction(widget, direction); - - style = gtk_widget_get_style(widget); - - gtk_widget_style_get(widget, - "interior-focus", &interior_focus, - "focus-line-width", &focus_width, - "honors-transparent-bg-hint", &theme_honors_transparency, - NULL); - - /* gtkentry.c uses two windows, one for the entire widget and one for the - * text area inside it. The background of both windows is set to the "base" - * color of the new state in gtk_entry_state_changed, but only the inner - * textarea window uses gtk_paint_flat_box when exposed */ - - /* This gets us a lovely greyish disabledish look */ - gtk_widget_set_sensitive(widget, !state->disabled); - - /* GTK fills the outer widget window with the base color before drawing the widget. - * Some older themes rely on this behavior, but many themes nowadays use rounded - * corners on their widgets. While most GTK apps are blissfully unaware of this - * problem due to their use of the default window background, we render widgets on - * many kinds of backgrounds on the web. - * If the theme is able to cope with transparency, then we can skip pre-filling - * and notify the theme it will paint directly on the canvas. */ - if (theme_honors_transparency) { - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(TRUE)); - } else { - cairo_save(cr); - gdk_cairo_set_source_color(cr, (const GdkColor*)&style->base[bg_state]); - cairo_pattern_set_extend(cairo_get_source(cr), CAIRO_EXTEND_REPEAT); - cairo_fill(cr); - cairo_restore(cr); - g_object_set_data(G_OBJECT(widget), "transparent-bg-hint", GINT_TO_POINTER(FALSE)); - } - - /* Get the position of the inner window, see _gtk_entry_get_borders */ - x = XTHICKNESS(style); - y = YTHICKNESS(style); - - if (!interior_focus) { - x += focus_width; - y += focus_width; - } - - /* Simulate an expose of the inner window */ - gtk_paint_flat_box(style, cr, bg_state, GTK_SHADOW_NONE, - widget, "entry_bg", rect->x + x, - rect->y + y, rect->width - 2*x, rect->height - 2*y); - - /* Now paint the shadow and focus border. - * We do like in gtk_entry_draw_frame, we first draw the shadow, a tad - * smaller when focused if the focus is not interior, then the focus. */ - x = rect->x; - y = rect->y; - - if (state->focused && !state->disabled) { - /* This will get us the lit borders that focused textboxes enjoy on - * some themes. */ - if (!interior_focus) { - /* Indent the border a little bit if we have exterior focus - (this is what GTK does to draw native entries) */ - x += focus_width; - y += focus_width; - width -= 2 * focus_width; - height -= 2 * focus_width; - } - } - - gtk_paint_shadow(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN, - widget, "entry", x, y, width, height); - - if (state->focused && !state->disabled) { - if (!interior_focus) { - gtk_paint_focus(style, cr, GTK_STATE_NORMAL, - widget, "entry", - rect->x, rect->y, rect->width, rect->height); - } - } - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_combo_box_paint(cairo_t* cr, GdkRectangle* rect, - GtkWidgetState* state, gboolean ishtml, - GtkTextDirection direction) -{ - GdkRectangle arrow_rect, real_arrow_rect; - gint /* arrow_size, */ separator_width; - gboolean wide_separators; - GtkStateType state_type = ConvertGtkState(state); - GtkShadowType shadow_type = state->active ? GTK_SHADOW_IN : GTK_SHADOW_OUT; - GtkStyle* style; - GtkRequisition arrow_req; - - ensure_combo_box_widgets(); - - /* Also sets the direction on gParts->comboBoxButtonWidget, which is then - * inherited by the separator and arrow */ - moz_gtk_button_paint(cr, rect, state, GTK_RELIEF_NORMAL, - gParts->comboBoxButtonWidget, direction); - - calculate_button_inner_rect(gParts->comboBoxButtonWidget, - rect, &arrow_rect, direction, ishtml); - /* Now arrow_rect contains the inner rect ; we want to correct the width - * to what the arrow needs (see gtk_combo_box_size_allocate) */ - gtk_widget_get_preferred_size(gParts->comboBoxArrowWidget, &arrow_req, NULL); - if (direction == GTK_TEXT_DIR_LTR) - arrow_rect.x += arrow_rect.width - arrow_req.width; - arrow_rect.width = arrow_req.width; - - calculate_arrow_rect(gParts->comboBoxArrowWidget, - &arrow_rect, &real_arrow_rect, direction); - - style = gtk_widget_get_style(gParts->comboBoxArrowWidget); - - gtk_widget_size_allocate(gParts->comboBoxWidget, rect); - - gtk_paint_arrow(style, cr, state_type, shadow_type, - gParts->comboBoxArrowWidget, "arrow", GTK_ARROW_DOWN, TRUE, - real_arrow_rect.x, real_arrow_rect.y, - real_arrow_rect.width, real_arrow_rect.height); - - - /* If there is no separator in the theme, there's nothing left to do. */ - if (!gParts->comboBoxSeparatorWidget) - return MOZ_GTK_SUCCESS; - - style = gtk_widget_get_style(gParts->comboBoxSeparatorWidget); - - gtk_widget_style_get(gParts->comboBoxSeparatorWidget, - "wide-separators", &wide_separators, - "separator-width", &separator_width, - NULL); - - if (wide_separators) { - if (direction == GTK_TEXT_DIR_LTR) - arrow_rect.x -= separator_width; - else - arrow_rect.x += arrow_rect.width; - - gtk_paint_box(style, cr, - GTK_STATE_NORMAL, GTK_SHADOW_ETCHED_OUT, - gParts->comboBoxSeparatorWidget, "vseparator", - arrow_rect.x, arrow_rect.y, - separator_width, arrow_rect.height); - } else { - if (direction == GTK_TEXT_DIR_LTR) - arrow_rect.x -= XTHICKNESS(style); - else - arrow_rect.x += arrow_rect.width; - - gtk_paint_vline(style, cr, GTK_STATE_NORMAL, - gParts->comboBoxSeparatorWidget, "vseparator", - arrow_rect.y, arrow_rect.y + arrow_rect.height, - arrow_rect.x); - } - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_progressbar_paint(cairo_t* cr, GdkRectangle* rect, - GtkTextDirection direction) -{ - GtkStyle* style; - - ensure_progress_widget(); - gtk_widget_set_direction(gParts->progresWidget, direction); - - style = gtk_widget_get_style(gParts->progresWidget); - - gtk_paint_box(style, cr, GTK_STATE_NORMAL, GTK_SHADOW_IN, - gParts->progresWidget, "trough", rect->x, rect->y, - rect->width, rect->height); - - return MOZ_GTK_SUCCESS; -} - -static gint -moz_gtk_progress_chunk_paint(cairo_t* cr, GdkRectangle* rect, - GtkTextDirection direction) -{ - GtkStyle* style; - - ensure_progress_widget(); - gtk_widget_set_direction(gParts->progresWidget, direction); - - style = gtk_widget_get_style(gParts->progresWidget); - - gtk_paint_box(style, cr, GTK_STATE_PRELIGHT, GTK_SHADOW_OUT, - gParts->progresWidget, "bar", rect->x, rect->y, - rect->width, rect->height); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top, - gint* right, gint* bottom, GtkTextDirection direction, - gboolean inhtml) -{ - GtkWidget* w; - GtkStyle *style; - - switch (widget) { - case MOZ_GTK_BUTTON: - { - GtkBorder inner_border; - gboolean interior_focus; - gint focus_width, focus_pad; - GtkStyle *style; - - ensure_button_widget(); - *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gParts->buttonWidget)); - - /* Don't add this padding in HTML, otherwise the buttons will - become too big and stuff the layout. */ - if (!inhtml) { - moz_gtk_widget_get_focus(gParts->buttonWidget, &interior_focus, &focus_width, &focus_pad); - moz_gtk_button_get_inner_border(gParts->buttonWidget, &inner_border); - *left += focus_width + focus_pad + inner_border.left; - *right += focus_width + focus_pad + inner_border.right; - *top += focus_width + focus_pad + inner_border.top; - *bottom += focus_width + focus_pad + inner_border.bottom; - } - - style = gtk_widget_get_style(gParts->buttonWidget); - *left += style->xthickness; - *right += style->xthickness; - *top += style->ythickness; - *bottom += style->ythickness; - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_ENTRY: - ensure_entry_widget(); - w = gParts->entryWidget; - break; - case MOZ_GTK_DROPDOWN: - { - /* We need to account for the arrow on the dropdown, so text - * doesn't come too close to the arrow, or in some cases spill - * into the arrow. */ - gboolean ignored_interior_focus, wide_separators; - gint focus_width, focus_pad, separator_width; - GtkRequisition arrow_req; - GtkStyle* style; - - ensure_combo_box_widgets(); - - *left = gtk_container_get_border_width(GTK_CONTAINER(gParts->comboBoxButtonWidget)); - - if (!inhtml) { - moz_gtk_widget_get_focus(gParts->comboBoxButtonWidget, - &ignored_interior_focus, - &focus_width, &focus_pad); - *left += focus_width + focus_pad; - } - - style = gtk_widget_get_style(gParts->comboBoxButtonWidget); - *top = *left + style->ythickness; - *left += style->xthickness; - - *right = *left; *bottom = *top; - - /* If there is no separator, don't try to count its width. */ - separator_width = 0; - if (gParts->comboBoxSeparatorWidget) { - gtk_widget_style_get(gParts->comboBoxSeparatorWidget, - "wide-separators", &wide_separators, - "separator-width", &separator_width, - NULL); - - if (!wide_separators) - separator_width = - XTHICKNESS(style); - } - - gtk_widget_get_preferred_size(gParts->comboBoxArrowWidget, &arrow_req, NULL); - if (direction == GTK_TEXT_DIR_RTL) - *left += separator_width + arrow_req.width; - else - *right += separator_width + arrow_req.width; - - return MOZ_GTK_SUCCESS; - } - case MOZ_GTK_PROGRESSBAR: - ensure_progress_widget(); - w = gParts->progresWidget; - break; - /* These widgets have no borders, since they are not containers. */ - case MOZ_GTK_CHECKBUTTON: - case MOZ_GTK_RADIOBUTTON: - case MOZ_GTK_SCROLLBAR_BUTTON: - case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL: - case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL: - case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL: - case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL: - case MOZ_GTK_PROGRESS_CHUNK: - *left = *top = *right = *bottom = 0; - return MOZ_GTK_SUCCESS; - default: - g_warning("Unsupported widget type: %d", widget); - return MOZ_GTK_UNKNOWN_WIDGET; - } - - style = gtk_widget_get_style(w); - *right = *left = XTHICKNESS(style); - *bottom = *top = YTHICKNESS(style); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_get_scrollbar_metrics(MozGtkScrollbarMetrics *metrics) -{ - ensure_scrollbar_widget(); - - gtk_widget_style_get (gParts->horizScrollbarWidget, - "slider_width", &metrics->slider_width, - "trough_border", &metrics->trough_border, - "stepper_size", &metrics->stepper_size, - "stepper_spacing", &metrics->stepper_spacing, - "trough_under_steppers", &metrics->trough_under_steppers, - "has_secondary_forward_stepper", &metrics->has_secondary_forward_stepper, - "has_secondary_backward_stepper", &metrics->has_secondary_backward_stepper, - NULL); - - metrics->min_slider_size = gtk_range_get_min_slider_size(GTK_RANGE(gParts->horizScrollbarWidget)); - - return MOZ_GTK_SUCCESS; -} - -gint -moz_gtk_widget_paint(GtkThemeWidgetType widget, cairo_t* cr, - GdkRectangle* rect, GtkWidgetState* state, - gint flags, GtkTextDirection direction) -{ - switch (widget) { - case MOZ_GTK_BUTTON: - if (state->depressed) { - ensure_toggle_button_widget(); - return moz_gtk_button_paint(cr, rect, state, - (GtkReliefStyle) flags, - gParts->toggleButtonWidget, direction); - } - ensure_button_widget(); - return moz_gtk_button_paint(cr, rect, state, - (GtkReliefStyle) flags, gParts->buttonWidget, - direction); - break; - case MOZ_GTK_CHECKBUTTON: - case MOZ_GTK_RADIOBUTTON: - return moz_gtk_toggle_paint(cr, rect, state, - !!(flags & MOZ_GTK_WIDGET_CHECKED), - !!(flags & MOZ_GTK_WIDGET_INCONSISTENT), - (widget == MOZ_GTK_RADIOBUTTON), - direction); - break; - case MOZ_GTK_SCROLLBAR_BUTTON: - return moz_gtk_scrollbar_button_paint(cr, rect, state, - (GtkScrollbarButtonFlags) flags, - direction); - break; - case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL: - case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL: - return moz_gtk_scrollbar_trough_paint(widget, cr, rect, - state, direction); - break; - case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL: - case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL: - return moz_gtk_scrollbar_thumb_paint(widget, cr, rect, - state, direction); - break; - case MOZ_GTK_SCROLLED_WINDOW: - return moz_gtk_scrolled_window_paint(cr, rect, state); - break; - case MOZ_GTK_ENTRY: - ensure_entry_widget(); - return moz_gtk_entry_paint(cr, rect, state, - gParts->entryWidget, direction); - break; - case MOZ_GTK_DROPDOWN: - return moz_gtk_combo_box_paint(cr, rect, state, - (gboolean) flags, direction); - break; - case MOZ_GTK_PROGRESSBAR: - return moz_gtk_progressbar_paint(cr, rect, direction); - break; - case MOZ_GTK_PROGRESS_CHUNK: - return moz_gtk_progress_chunk_paint(cr, rect, direction); - break; - default: - g_warning("Unknown widget type: %d", widget); - } - - return MOZ_GTK_UNKNOWN_WIDGET; -} - -GtkWidget* moz_gtk_get_scrollbar_widget(void) -{ - if (!is_initialized) - return NULL; - ensure_scrollbar_widget(); - return gParts->horizScrollbarWidget; -} - -gint -moz_gtk_shutdown() -{ - GtkWidgetClass *entry_class; - entry_class = g_type_class_peek(GTK_TYPE_ENTRY); - g_type_class_unref(entry_class); - - is_initialized = FALSE; - - return MOZ_GTK_SUCCESS; -} - -void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts) -{ - if (!parts) - return; - - if (parts->protoWindow) { - gtk_widget_destroy(parts->protoWindow); - parts->protoWindow = NULL; - } -} - -GtkWidget* moz_gtk_get_progress_widget() -{ - if (!is_initialized) - return NULL; - ensure_progress_widget(); - return gParts->progresWidget; -} - -#endif // GTK_API_VERSION_2 diff --git a/Source/WebCore/platform/gtk/gtkdrawing.h b/Source/WebCore/platform/gtk/gtkdrawing.h index 9d13a07..412a1f7 100644 --- a/Source/WebCore/platform/gtk/gtkdrawing.h +++ b/Source/WebCore/platform/gtk/gtkdrawing.h @@ -81,9 +81,7 @@ typedef struct { } MozGtkScrollbarMetrics; typedef struct _GtkThemeParts { -#ifdef GTK_API_VERSION_2 GdkColormap* colormap; -#endif // GTK_API_VERSION_2 GtkWidget* protoWindow; GtkWidget* protoLayout; GtkWidget* buttonWidget; @@ -205,18 +203,11 @@ void moz_gtk_destroy_theme_parts_widgets(GtkThemeParts* parts); * flags: widget-dependant flags; see the GtkThemeWidgetType definition. * direction: the text direction, to draw the widget correctly LTR and RTL. */ -#ifdef GTK_API_VERSION_2 gint moz_gtk_widget_paint(GtkThemeWidgetType widget, GdkDrawable* drawable, GdkRectangle* rect, GdkRectangle* cliprect, GtkWidgetState* state, gint flags, GtkTextDirection direction); -#else -gint -moz_gtk_widget_paint(GtkThemeWidgetType widget, cairo_t* cr, - GdkRectangle* rect, GtkWidgetState* state, - gint flags, GtkTextDirection direction); -#endif /*** Widget metrics ***/ /** diff --git a/Source/WebCore/platform/haiku/DragDataHaiku.cpp b/Source/WebCore/platform/haiku/DragDataHaiku.cpp index 7c2dc9c..5069c6f 100644 --- a/Source/WebCore/platform/haiku/DragDataHaiku.cpp +++ b/Source/WebCore/platform/haiku/DragDataHaiku.cpp @@ -63,7 +63,7 @@ bool DragData::containsPlainText() const return false; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { notImplemented(); return String(); @@ -80,19 +80,19 @@ bool DragData::containsCompatibleContent() const return containsColor() || containsURL() || containsPlainText(); } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { notImplemented(); return false; } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { notImplemented(); return String(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame*, PassRefPtr<Range>, bool, bool&) const { notImplemented(); return 0; diff --git a/Source/WebCore/platform/image-decoders/ImageDecoder.cpp b/Source/WebCore/platform/image-decoders/ImageDecoder.cpp index 8491da9..17208b5 100644 --- a/Source/WebCore/platform/image-decoders/ImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/ImageDecoder.cpp @@ -108,7 +108,7 @@ ImageDecoder* ImageDecoder::create(const SharedBuffer& data, ImageSource::AlphaO #if !PLATFORM(SKIA) -RGBA32Buffer::RGBA32Buffer() +ImageFrame::ImageFrame() : m_hasAlpha(false) , m_status(FrameEmpty) , m_duration(0) @@ -117,7 +117,7 @@ RGBA32Buffer::RGBA32Buffer() { } -RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) +ImageFrame& ImageFrame::operator=(const ImageFrame& other) { if (this == &other) return *this; @@ -131,7 +131,7 @@ RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) return *this; } -void RGBA32Buffer::clear() +void ImageFrame::clear() { m_backingStore.clear(); m_bytes = 0; @@ -142,7 +142,7 @@ void RGBA32Buffer::clear() // later. } -void RGBA32Buffer::zeroFill() +void ImageFrame::zeroFill() { memset(m_bytes, 0, m_size.width() * m_size.height() * sizeof(PixelData)); m_hasAlpha = true; @@ -150,13 +150,13 @@ void RGBA32Buffer::zeroFill() #if !PLATFORM(CG) -void RGBA32Buffer::copyReferenceToBitmapData(const RGBA32Buffer& other) +void ImageFrame::copyReferenceToBitmapData(const ImageFrame& other) { ASSERT(this != &other); copyBitmapData(other); } -bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) +bool ImageFrame::copyBitmapData(const ImageFrame& other) { if (this == &other) return true; @@ -168,7 +168,7 @@ bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) return true; } -bool RGBA32Buffer::setSize(int newWidth, int newHeight) +bool ImageFrame::setSize(int newWidth, int newHeight) { // NOTE: This has no way to check for allocation failure if the requested // size was too big... @@ -184,32 +184,32 @@ bool RGBA32Buffer::setSize(int newWidth, int newHeight) #endif -bool RGBA32Buffer::hasAlpha() const +bool ImageFrame::hasAlpha() const { return m_hasAlpha; } -void RGBA32Buffer::setHasAlpha(bool alpha) +void ImageFrame::setHasAlpha(bool alpha) { m_hasAlpha = alpha; } -void RGBA32Buffer::setColorProfile(const ColorProfile& colorProfile) +void ImageFrame::setColorProfile(const ColorProfile& colorProfile) { m_colorProfile = colorProfile; } -void RGBA32Buffer::setStatus(FrameStatus status) +void ImageFrame::setStatus(FrameStatus status) { m_status = status; } -int RGBA32Buffer::width() const +int ImageFrame::width() const { return m_size.width(); } -int RGBA32Buffer::height() const +int ImageFrame::height() const { return m_size.height(); } diff --git a/Source/WebCore/platform/image-decoders/ImageDecoder.h b/Source/WebCore/platform/image-decoders/ImageDecoder.h index c3d73c0..13069de 100644 --- a/Source/WebCore/platform/image-decoders/ImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/ImageDecoder.h @@ -50,10 +50,10 @@ namespace WebCore { // FIXME: Do we want better encapsulation? typedef Vector<char> ColorProfile; - // The RGBA32Buffer object represents the decoded image data in RGBA32 + // The ImageFrame object represents the decoded image data in RGBA32 // format. This buffer is what all decoders write a single frame into. // Frames are then instantiated for drawing by being handed this buffer. - class RGBA32Buffer { + class ImageFrame { public: enum FrameStatus { FrameEmpty, FramePartial, FrameComplete }; enum FrameDisposalMethod { @@ -72,13 +72,13 @@ namespace WebCore { typedef unsigned PixelData; #endif - RGBA32Buffer(); + ImageFrame(); - RGBA32Buffer(const RGBA32Buffer& other) { operator=(other); } + ImageFrame(const ImageFrame& other) { operator=(other); } // For backends which refcount their data, this operator doesn't need to // create a new copy of the image data, only increase the ref count. - RGBA32Buffer& operator=(const RGBA32Buffer& other); + ImageFrame& operator=(const ImageFrame& other); // Deletes the pixel data entirely; used by ImageDecoder to save memory // when we no longer need to display a frame and only need its metadata. @@ -89,11 +89,11 @@ namespace WebCore { // Creates a new copy of the image data in |other|, so the two images // can be modified independently. Returns whether the copy succeeded. - bool copyBitmapData(const RGBA32Buffer&); + bool copyBitmapData(const ImageFrame&); // Creates a new reference to the image data in |other|. The two images // share a common backing store. - void copyReferenceToBitmapData(const RGBA32Buffer&); + void copyReferenceToBitmapData(const ImageFrame&); // Copies the pixel data at [(startX, startY), (endX, startY)) to the // same X-coordinates on each subsequent row up to but not including @@ -317,10 +317,10 @@ namespace WebCore { // The number of repetitions to perform for an animation loop. virtual int repetitionCount() const { return cAnimationNone; } - // Called to obtain the RGBA32Buffer full of decoded data for rendering. + // Called to obtain the ImageFrame full of decoded data for rendering. // The decoder plugin will decode as much of the frame as it can before // handing back the buffer. - virtual RGBA32Buffer* frameBufferAtIndex(size_t) = 0; + virtual ImageFrame* frameBufferAtIndex(size_t) = 0; // Whether or not the underlying image format even supports alpha // transparency. @@ -364,7 +364,7 @@ namespace WebCore { int scaledY(int origY, int searchStart = 0); RefPtr<SharedBuffer> m_data; // The encoded data. - Vector<RGBA32Buffer> m_frameBufferCache; + Vector<ImageFrame> m_frameBufferCache; ColorProfile m_colorProfile; bool m_scaled; Vector<int> m_scaledColumns; diff --git a/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp b/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp index 220a1ed..0d0e8a7 100644 --- a/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.cpp @@ -65,7 +65,7 @@ bool BMPImageDecoder::isSizeAvailable() return ImageDecoder::isSizeAvailable(); } -RGBA32Buffer* BMPImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* BMPImageDecoder::frameBufferAtIndex(size_t index) { if (index) return 0; @@ -75,8 +75,8 @@ RGBA32Buffer* BMPImageDecoder::frameBufferAtIndex(size_t index) m_frameBufferCache.first().setPremultiplyAlpha(m_premultiplyAlpha); } - RGBA32Buffer* buffer = &m_frameBufferCache.first(); - if (buffer->status() != RGBA32Buffer::FrameComplete) + ImageFrame* buffer = &m_frameBufferCache.first(); + if (buffer->status() != ImageFrame::FrameComplete) decode(false); return buffer; } @@ -98,7 +98,7 @@ void BMPImageDecoder::decode(bool onlySize) setFailed(); // If we're done decoding the image, we don't need the BMPImageReader // anymore. (If we failed, |m_reader| has already been cleared.) - else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == RGBA32Buffer::FrameComplete)) + else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == ImageFrame::FrameComplete)) m_reader.clear(); } diff --git a/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h b/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h index 5f4ed82..f5b9d5e 100644 --- a/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/bmp/BMPImageDecoder.h @@ -45,7 +45,7 @@ namespace WebCore { virtual String filenameExtension() const { return "bmp"; } virtual void setData(SharedBuffer*, bool allDataReceived); virtual bool isSizeAvailable(); - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid // accessing deleted memory, especially when calling this from inside // BMPImageReader! diff --git a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp index 93bedf3..1805bc7 100644 --- a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp +++ b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.cpp @@ -77,10 +77,10 @@ bool BMPImageReader::decodeBMP(bool onlySize) // Initialize the framebuffer if needed. ASSERT(m_buffer); // Parent should set this before asking us to decode! - if (m_buffer->status() == RGBA32Buffer::FrameEmpty) { + if (m_buffer->status() == ImageFrame::FrameEmpty) { if (!m_buffer->setSize(m_parent->size().width(), m_parent->size().height())) return m_parent->setFailed(); // Unable to allocate. - m_buffer->setStatus(RGBA32Buffer::FramePartial); + m_buffer->setStatus(ImageFrame::FramePartial); // setSize() calls eraseARGB(), which resets the alpha flag, so we force // it back to false here. We'll set it true below in all cases where // these 0s could actually show through. @@ -122,7 +122,7 @@ bool BMPImageReader::decodeBMP(bool onlySize) } // Done! - m_buffer->setStatus(RGBA32Buffer::FrameComplete); + m_buffer->setStatus(ImageFrame::FrameComplete); return true; } diff --git a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h index 0a6dc84..dfaa9ec 100644 --- a/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h +++ b/Source/WebCore/platform/image-decoders/bmp/BMPImageReader.h @@ -64,11 +64,11 @@ namespace WebCore { // |parent| is the decoder that owns us. // |startOffset| points to the start of the BMP within the file. - // |buffer| points at an empty RGBA32Buffer that we'll initialize and + // |buffer| points at an empty ImageFrame that we'll initialize and // fill with decoded data. BMPImageReader(ImageDecoder* parent, size_t decodedAndHeaderOffset, size_t imgDataOffset, bool usesAndMask); - void setBuffer(RGBA32Buffer* buffer) { m_buffer = buffer; } + void setBuffer(ImageFrame* buffer) { m_buffer = buffer; } void setData(SharedBuffer* data) { m_data = data; } // Does the actual decoding. If |onlySize| is true, decoding only @@ -274,7 +274,7 @@ namespace WebCore { ImageDecoder* m_parent; // The destination for the pixel data. - RGBA32Buffer* m_buffer; + ImageFrame* m_buffer; // The file to decode. RefPtr<SharedBuffer> m_data; diff --git a/Source/WebCore/platform/image-decoders/cairo/ImageDecoderCairo.cpp b/Source/WebCore/platform/image-decoders/cairo/ImageDecoderCairo.cpp index d741882..618c1d0 100644 --- a/Source/WebCore/platform/image-decoders/cairo/ImageDecoderCairo.cpp +++ b/Source/WebCore/platform/image-decoders/cairo/ImageDecoderCairo.cpp @@ -30,7 +30,7 @@ namespace WebCore { -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { return cairo_image_surface_create_for_data( reinterpret_cast<unsigned char*>(const_cast<PixelData*>( diff --git a/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp b/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp index 03b4c8f..0b90107 100644 --- a/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp +++ b/Source/WebCore/platform/image-decoders/cg/ImageDecoderCG.cpp @@ -33,22 +33,22 @@ namespace WebCore { -static RGBA32Buffer::PixelData* getPtrAsPixelData(CFMutableDataRef data) +static ImageFrame::PixelData* getPtrAsPixelData(CFMutableDataRef data) { - return data ? reinterpret_cast<RGBA32Buffer::PixelData*>(CFDataGetMutableBytePtr(data)) : 0; + return data ? reinterpret_cast<ImageFrame::PixelData*>(CFDataGetMutableBytePtr(data)) : 0; } -void RGBA32Buffer::copyReferenceToBitmapData(const RGBA32Buffer& other) +void ImageFrame::copyReferenceToBitmapData(const ImageFrame& other) { ASSERT(this != &other); m_backingStore = other.m_backingStore; m_bytes = getPtrAsPixelData(m_backingStore.get()); - // FIXME: The rest of this function seems redundant with RGBA32Buffer::copyBitmapData. + // FIXME: The rest of this function seems redundant with ImageFrame::copyBitmapData. m_size = other.m_size; setHasAlpha(other.m_hasAlpha); } -bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) +bool ImageFrame::copyBitmapData(const ImageFrame& other) { if (this == &other) return true; @@ -60,7 +60,7 @@ bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) return true; } -bool RGBA32Buffer::setSize(int newWidth, int newHeight) +bool ImageFrame::setSize(int newWidth, int newHeight) { ASSERT(!m_backingStore); size_t backingStoreSize = newWidth * newHeight * sizeof(PixelData); @@ -91,7 +91,7 @@ static CGColorSpaceRef createColorSpace(const ColorProfile& colorProfile) #endif } -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { RetainPtr<CGColorSpaceRef> colorSpace(AdoptCF, createColorSpace(m_colorProfile)); RetainPtr<CGDataProviderRef> dataProvider(AdoptCF, CGDataProviderCreateWithCFData(m_backingStore.get())); diff --git a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp index e92f264..e6de597 100644 --- a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp @@ -118,13 +118,13 @@ int GIFImageDecoder::repetitionCount() const return m_repetitionCount; } -RGBA32Buffer* GIFImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* GIFImageDecoder::frameBufferAtIndex(size_t index) { if (index >= frameCount()) return 0; - RGBA32Buffer& frame = m_frameBufferCache[index]; - if (frame.status() != RGBA32Buffer::FrameComplete) + ImageFrame& frame = m_frameBufferCache[index]; + if (frame.status() != ImageFrame::FrameComplete) decode(index + 1, GIFFullQuery); return &frame; } @@ -151,7 +151,7 @@ void GIFImageDecoder::clearFrameBufferCache(size_t clearBeforeFrame) // always use ImageSource::clear(true, ...) to completely free the memory in // this case. clearBeforeFrame = std::min(clearBeforeFrame, m_frameBufferCache.size() - 1); - const Vector<RGBA32Buffer>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame); + const Vector<ImageFrame>::iterator end(m_frameBufferCache.begin() + clearBeforeFrame); // We need to preserve frames such that: // * We don't clear |end| @@ -171,16 +171,16 @@ void GIFImageDecoder::clearFrameBufferCache(size_t clearBeforeFrame) // * If the frame is partial, we're decoding it, so don't clear it; if it // has a disposal method other than DisposeOverwritePrevious, stop // scanning, as we'll only need this frame when decoding the next one. - Vector<RGBA32Buffer>::iterator i(end); - for (; (i != m_frameBufferCache.begin()) && ((i->status() == RGBA32Buffer::FrameEmpty) || (i->disposalMethod() == RGBA32Buffer::DisposeOverwritePrevious)); --i) { - if ((i->status() == RGBA32Buffer::FrameComplete) && (i != end)) + Vector<ImageFrame>::iterator i(end); + for (; (i != m_frameBufferCache.begin()) && ((i->status() == ImageFrame::FrameEmpty) || (i->disposalMethod() == ImageFrame::DisposeOverwritePrevious)); --i) { + if ((i->status() == ImageFrame::FrameComplete) && (i != end)) i->clear(); } // Now |i| holds the last frame we need to preserve; clear prior frames. - for (Vector<RGBA32Buffer>::iterator j(m_frameBufferCache.begin()); j != i; ++j) { - ASSERT(j->status() != RGBA32Buffer::FramePartial); - if (j->status() != RGBA32Buffer::FrameEmpty) + for (Vector<ImageFrame>::iterator j(m_frameBufferCache.begin()); j != i; ++j) { + ASSERT(j->status() != ImageFrame::FramePartial); + if (j->status() != ImageFrame::FrameEmpty) j->clear(); } } @@ -220,8 +220,8 @@ bool GIFImageDecoder::haveDecodedRow(unsigned frameIndex, unsigned char* rowBuff return true; // Initialize the frame if necessary. - RGBA32Buffer& buffer = m_frameBufferCache[frameIndex]; - if ((buffer.status() == RGBA32Buffer::FrameEmpty) && !initFrameBuffer(frameIndex)) + ImageFrame& buffer = m_frameBufferCache[frameIndex]; + if ((buffer.status() == ImageFrame::FrameEmpty) && !initFrameBuffer(frameIndex)) return false; // Write one row's worth of data into the frame. @@ -251,15 +251,15 @@ bool GIFImageDecoder::haveDecodedRow(unsigned frameIndex, unsigned char* rowBuff return true; } -bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod) +bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, ImageFrame::FrameDisposalMethod disposalMethod) { // Initialize the frame if necessary. Some GIFs insert do-nothing frames, // in which case we never reach haveDecodedRow() before getting here. - RGBA32Buffer& buffer = m_frameBufferCache[frameIndex]; - if ((buffer.status() == RGBA32Buffer::FrameEmpty) && !initFrameBuffer(frameIndex)) + ImageFrame& buffer = m_frameBufferCache[frameIndex]; + if ((buffer.status() == ImageFrame::FrameEmpty) && !initFrameBuffer(frameIndex)) return false; // initFrameBuffer() has already called setFailed(). - buffer.setStatus(RGBA32Buffer::FrameComplete); + buffer.setStatus(ImageFrame::FrameComplete); buffer.setDuration(frameDuration); buffer.setDisposalMethod(disposalMethod); @@ -277,8 +277,8 @@ bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, // First skip over prior DisposeOverwritePrevious frames (since they // don't affect the start state of this frame) the same way we do in // initFrameBuffer(). - const RGBA32Buffer* prevBuffer = &m_frameBufferCache[--frameIndex]; - while (frameIndex && (prevBuffer->disposalMethod() == RGBA32Buffer::DisposeOverwritePrevious)) + const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex]; + while (frameIndex && (prevBuffer->disposalMethod() == ImageFrame::DisposeOverwritePrevious)) prevBuffer = &m_frameBufferCache[--frameIndex]; // Now, if we're at a DisposeNotSpecified or DisposeKeep frame, then @@ -289,7 +289,7 @@ bool GIFImageDecoder::frameComplete(unsigned frameIndex, unsigned frameDuration, // The only remaining case is a DisposeOverwriteBgcolor frame. If // it had no alpha, and its rect is contained in the current frame's // rect, we know the current frame has no alpha. - if ((prevBuffer->disposalMethod() == RGBA32Buffer::DisposeOverwriteBgcolor) && !prevBuffer->hasAlpha() && buffer.rect().contains(prevBuffer->rect())) + if ((prevBuffer->disposalMethod() == ImageFrame::DisposeOverwriteBgcolor) && !prevBuffer->hasAlpha() && buffer.rect().contains(prevBuffer->rect())) buffer.setHasAlpha(false); } } @@ -332,7 +332,7 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex) if (frameRect.bottom() > size().height()) frameRect.setHeight(size().height() - frameReader->y_offset); - RGBA32Buffer* const buffer = &m_frameBufferCache[frameIndex]; + ImageFrame* const buffer = &m_frameBufferCache[frameIndex]; int left = upperBoundScaledX(frameRect.x()); int right = lowerBoundScaledX(frameRect.right(), left); int top = upperBoundScaledY(frameRect.y()); @@ -352,15 +352,15 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex) // the starting state of the previous frame, so skip over them. (If the // first frame specifies this method, it will get treated like // DisposeOverwriteBgcolor below and reset to a completely empty image.) - const RGBA32Buffer* prevBuffer = &m_frameBufferCache[--frameIndex]; - RGBA32Buffer::FrameDisposalMethod prevMethod = prevBuffer->disposalMethod(); - while (frameIndex && (prevMethod == RGBA32Buffer::DisposeOverwritePrevious)) { + const ImageFrame* prevBuffer = &m_frameBufferCache[--frameIndex]; + ImageFrame::FrameDisposalMethod prevMethod = prevBuffer->disposalMethod(); + while (frameIndex && (prevMethod == ImageFrame::DisposeOverwritePrevious)) { prevBuffer = &m_frameBufferCache[--frameIndex]; prevMethod = prevBuffer->disposalMethod(); } - ASSERT(prevBuffer->status() == RGBA32Buffer::FrameComplete); + ASSERT(prevBuffer->status() == ImageFrame::FrameComplete); - if ((prevMethod == RGBA32Buffer::DisposeNotSpecified) || (prevMethod == RGBA32Buffer::DisposeKeep)) { + if ((prevMethod == ImageFrame::DisposeNotSpecified) || (prevMethod == ImageFrame::DisposeKeep)) { // Preserve the last frame as the starting state for this frame. if (!buffer->copyBitmapData(*prevBuffer)) return setFailed(); @@ -389,7 +389,7 @@ bool GIFImageDecoder::initFrameBuffer(unsigned frameIndex) } // Update our status to be partially complete. - buffer->setStatus(RGBA32Buffer::FramePartial); + buffer->setStatus(ImageFrame::FramePartial); // Reset the alpha pixel tracker for this frame. m_currentBufferSawAlpha = false; diff --git a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h index 64240d4..dd401b8 100644 --- a/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h @@ -48,7 +48,7 @@ namespace WebCore { virtual bool setSize(int width, int height); virtual size_t frameCount(); virtual int repetitionCount() const; - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid // accessing deleted memory, especially when calling this from inside // GIFImageReader! @@ -58,7 +58,7 @@ namespace WebCore { // Callbacks from the GIF reader. void decodingHalted(unsigned bytesLeft); bool haveDecodedRow(unsigned frameIndex, unsigned char* rowBuffer, unsigned char* rowEnd, unsigned rowNumber, unsigned repeatCount, bool writeTransparentPixels); - bool frameComplete(unsigned frameIndex, unsigned frameDuration, RGBA32Buffer::FrameDisposalMethod disposalMethod); + bool frameComplete(unsigned frameIndex, unsigned frameDuration, ImageFrame::FrameDisposalMethod disposalMethod); void gifComplete(); private: diff --git a/Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp b/Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp index 1e033a3..420b355 100644 --- a/Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp +++ b/Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp @@ -638,11 +638,11 @@ bool GIFImageReader::read(const unsigned char *buf, unsigned len, } // NOTE: This relies on the values in the FrameDisposalMethod enum // matching those in the GIF spec! - frame_reader->disposal_method = (WebCore::RGBA32Buffer::FrameDisposalMethod)(((*q) >> 2) & 0x7); + frame_reader->disposal_method = (WebCore::ImageFrame::FrameDisposalMethod)(((*q) >> 2) & 0x7); // Some specs say 3rd bit (value 4), other specs say value 3 // Let's choose 3 (the more popular) if (frame_reader->disposal_method == 4) - frame_reader->disposal_method = WebCore::RGBA32Buffer::DisposeOverwritePrevious; + frame_reader->disposal_method = WebCore::ImageFrame::DisposeOverwritePrevious; frame_reader->delay_time = GETINT16(q + 1) * 10; } GETN(1, gif_consume_block); diff --git a/Source/WebCore/platform/image-decoders/gif/GIFImageReader.h b/Source/WebCore/platform/image-decoders/gif/GIFImageReader.h index be5be19..b6eb943 100644 --- a/Source/WebCore/platform/image-decoders/gif/GIFImageReader.h +++ b/Source/WebCore/platform/image-decoders/gif/GIFImageReader.h @@ -101,7 +101,7 @@ struct GIFFrameReader { unsigned int x_offset, y_offset; /* With respect to "screen" origin */ unsigned int height, width; int tpixel; /* Index of transparent pixel */ - WebCore::RGBA32Buffer::FrameDisposalMethod disposal_method; /* Restore to background, leave in place, etc.*/ + WebCore::ImageFrame::FrameDisposalMethod disposal_method; /* Restore to background, leave in place, etc.*/ unsigned char *local_colormap; /* Per-image colormap */ int local_colormap_size; /* Size of local colormap array. */ @@ -130,7 +130,7 @@ struct GIFFrameReader { x_offset = y_offset = width = height = 0; tpixel = 0; - disposal_method = WebCore::RGBA32Buffer::DisposeNotSpecified; + disposal_method = WebCore::ImageFrame::DisposeNotSpecified; local_colormap = 0; local_colormap_size = 0; diff --git a/Source/WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp b/Source/WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp index 47302f7..21c0e1f 100644 --- a/Source/WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp +++ b/Source/WebCore/platform/image-decoders/haiku/ImageDecoderHaiku.cpp @@ -31,7 +31,7 @@ namespace WebCore { -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { int bytesPerRow = width() * sizeof(PixelData); OwnPtr<BBitmap> bitmap(new BBitmap(BRect(0, 0, width() - 1, height() - 1), 0, B_RGBA32, bytesPerRow)); diff --git a/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp b/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp index 92a7dcf..55e1dcb 100644 --- a/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.cpp @@ -109,14 +109,14 @@ size_t ICOImageDecoder::frameCount() return m_frameBufferCache.size(); } -RGBA32Buffer* ICOImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* ICOImageDecoder::frameBufferAtIndex(size_t index) { // Ensure |index| is valid. if (index >= frameCount()) return 0; - RGBA32Buffer* buffer = &m_frameBufferCache[index]; - if (buffer->status() != RGBA32Buffer::FrameComplete) + ImageFrame* buffer = &m_frameBufferCache[index]; + if (buffer->status() != ImageFrame::FrameComplete) decode(index, false); return buffer; } @@ -162,7 +162,7 @@ void ICOImageDecoder::decode(size_t index, bool onlySize) // If we're done decoding this frame, we don't need the BMPImageReader or // PNGImageDecoder anymore. (If we failed, these have already been // cleared.) - else if ((m_frameBufferCache.size() > index) && (m_frameBufferCache[index].status() == RGBA32Buffer::FrameComplete)) { + else if ((m_frameBufferCache.size() > index) && (m_frameBufferCache[index].status() == ImageFrame::FrameComplete)) { m_bmpReaders[index].clear(); m_pngDecoders[index].clear(); } diff --git a/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h b/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h index c2af6a3..31d91c8 100644 --- a/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/ico/ICOImageDecoder.h @@ -51,7 +51,7 @@ namespace WebCore { virtual IntSize frameSizeAtIndex(size_t) const; virtual bool setSize(unsigned width, unsigned height); virtual size_t frameCount(); - virtual RGBA32Buffer* frameBufferAtIndex(size_t); + virtual ImageFrame* frameBufferAtIndex(size_t); // CAUTION: setFailed() deletes all readers and decoders. Be careful to // avoid accessing deleted memory, especially when calling this from // inside BMPImageReader! diff --git a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp index 632d428..a255c25 100644 --- a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp @@ -425,7 +425,7 @@ bool JPEGImageDecoder::setSize(unsigned width, unsigned height) return true; } -RGBA32Buffer* JPEGImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* JPEGImageDecoder::frameBufferAtIndex(size_t index) { if (index) return 0; @@ -435,8 +435,8 @@ RGBA32Buffer* JPEGImageDecoder::frameBufferAtIndex(size_t index) m_frameBufferCache[0].setPremultiplyAlpha(m_premultiplyAlpha); } - RGBA32Buffer& frame = m_frameBufferCache[0]; - if (frame.status() != RGBA32Buffer::FrameComplete) + ImageFrame& frame = m_frameBufferCache[0]; + if (frame.status() != ImageFrame::FrameComplete) decode(false); return &frame; } @@ -453,11 +453,11 @@ bool JPEGImageDecoder::outputScanlines() return false; // Initialize the framebuffer if needed. - RGBA32Buffer& buffer = m_frameBufferCache[0]; - if (buffer.status() == RGBA32Buffer::FrameEmpty) { + ImageFrame& buffer = m_frameBufferCache[0]; + if (buffer.status() == ImageFrame::FrameEmpty) { if (!buffer.setSize(scaledSize().width(), scaledSize().height())) return setFailed(); - buffer.setStatus(RGBA32Buffer::FramePartial); + buffer.setStatus(ImageFrame::FramePartial); buffer.setHasAlpha(false); buffer.setColorProfile(m_colorProfile); @@ -513,7 +513,7 @@ void JPEGImageDecoder::jpegComplete() // Hand back an appropriately sized buffer, even if the image ended up being // empty. - m_frameBufferCache[0].setStatus(RGBA32Buffer::FrameComplete); + m_frameBufferCache[0].setStatus(ImageFrame::FrameComplete); } void JPEGImageDecoder::decode(bool onlySize) @@ -530,7 +530,7 @@ void JPEGImageDecoder::decode(bool onlySize) setFailed(); // If we're done decoding the image, we don't need the JPEGImageReader // anymore. (If we failed, |m_reader| has already been cleared.) - else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() == RGBA32Buffer::FrameComplete)) + else if (!m_frameBufferCache.isEmpty() && (m_frameBufferCache[0].status() == ImageFrame::FrameComplete)) m_reader.clear(); } diff --git a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h index 63f29ab..801f1ab 100644 --- a/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.h @@ -44,7 +44,7 @@ namespace WebCore { virtual String filenameExtension() const { return "jpg"; } virtual bool isSizeAvailable(); virtual bool setSize(unsigned width, unsigned height); - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); virtual bool supportsAlpha() const { return false; } // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid // accessing deleted memory, especially when calling this from inside diff --git a/Source/WebCore/platform/image-decoders/openvg/ImageDecoderOpenVG.cpp b/Source/WebCore/platform/image-decoders/openvg/ImageDecoderOpenVG.cpp index 061c5ab..d29317a 100644 --- a/Source/WebCore/platform/image-decoders/openvg/ImageDecoderOpenVG.cpp +++ b/Source/WebCore/platform/image-decoders/openvg/ImageDecoderOpenVG.cpp @@ -34,7 +34,7 @@ namespace WebCore { -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { static const VGImageFormat bufferFormat = VG_sARGB_8888_PRE; // Save memory by using 16-bit images for fully opaque images. diff --git a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp index 3fe4d3c..755d704 100644 --- a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp @@ -197,7 +197,7 @@ bool PNGImageDecoder::setSize(unsigned width, unsigned height) return true; } -RGBA32Buffer* PNGImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* PNGImageDecoder::frameBufferAtIndex(size_t index) { if (index) return 0; @@ -207,8 +207,8 @@ RGBA32Buffer* PNGImageDecoder::frameBufferAtIndex(size_t index) m_frameBufferCache[0].setPremultiplyAlpha(m_premultiplyAlpha); } - RGBA32Buffer& frame = m_frameBufferCache[0]; - if (frame.status() != RGBA32Buffer::FrameComplete) + ImageFrame& frame = m_frameBufferCache[0]; + if (frame.status() != ImageFrame::FrameComplete) decode(false); return &frame; } @@ -330,13 +330,13 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex, return; // Initialize the framebuffer if needed. - RGBA32Buffer& buffer = m_frameBufferCache[0]; - if (buffer.status() == RGBA32Buffer::FrameEmpty) { + ImageFrame& buffer = m_frameBufferCache[0]; + if (buffer.status() == ImageFrame::FrameEmpty) { if (!buffer.setSize(scaledSize().width(), scaledSize().height())) { longjmp(JMPBUF(m_reader->pngPtr()), 1); return; } - buffer.setStatus(RGBA32Buffer::FramePartial); + buffer.setStatus(ImageFrame::FramePartial); buffer.setHasAlpha(false); buffer.setColorProfile(m_colorProfile); @@ -410,7 +410,7 @@ void PNGImageDecoder::rowAvailable(unsigned char* rowBuffer, unsigned rowIndex, void PNGImageDecoder::pngComplete() { if (!m_frameBufferCache.isEmpty()) - m_frameBufferCache.first().setStatus(RGBA32Buffer::FrameComplete); + m_frameBufferCache.first().setStatus(ImageFrame::FrameComplete); } void PNGImageDecoder::decode(bool onlySize) diff --git a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h index 1e8902f..ec2e857 100644 --- a/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/png/PNGImageDecoder.h @@ -43,7 +43,7 @@ namespace WebCore { virtual String filenameExtension() const { return "png"; } virtual bool isSizeAvailable(); virtual bool setSize(unsigned width, unsigned height); - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); // CAUTION: setFailed() deletes |m_reader|. Be careful to avoid // accessing deleted memory, especially when calling this from inside // PNGImageReader! @@ -56,7 +56,7 @@ namespace WebCore { bool isComplete() const { - return !m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == RGBA32Buffer::FrameComplete); + return !m_frameBufferCache.isEmpty() && (m_frameBufferCache.first().status() == ImageFrame::FrameComplete); } private: diff --git a/Source/WebCore/platform/image-decoders/qt/RGBA32BufferQt.cpp b/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp index 998234f..81c22cf 100644 --- a/Source/WebCore/platform/image-decoders/qt/RGBA32BufferQt.cpp +++ b/Source/WebCore/platform/image-decoders/qt/ImageFrameQt.cpp @@ -35,7 +35,7 @@ namespace WebCore { -RGBA32Buffer::RGBA32Buffer() +ImageFrame::ImageFrame() : m_hasAlpha(false) , m_size() , m_status(FrameEmpty) @@ -44,7 +44,7 @@ RGBA32Buffer::RGBA32Buffer() { } -RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) +ImageFrame& ImageFrame::operator=(const ImageFrame& other) { if (this == &other) return *this; @@ -57,7 +57,7 @@ RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) return *this; } -void RGBA32Buffer::clear() +void ImageFrame::clear() { m_pixmap = QPixmap(); m_image = QImage(); @@ -68,7 +68,7 @@ void RGBA32Buffer::clear() // other metadata out of this frame later. } -void RGBA32Buffer::zeroFill() +void ImageFrame::zeroFill() { if (m_pixmap.isNull() && !m_image.isNull()) { m_pixmap = QPixmap(m_image.width(), m_image.height()); @@ -77,7 +77,7 @@ void RGBA32Buffer::zeroFill() m_pixmap.fill(QColor(0, 0, 0, 0)); } -bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) +bool ImageFrame::copyBitmapData(const ImageFrame& other) { if (this == &other) return true; @@ -89,7 +89,7 @@ bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) return true; } -bool RGBA32Buffer::setSize(int newWidth, int newHeight) +bool ImageFrame::setSize(int newWidth, int newHeight) { // This function should only be called once, it will leak memory // otherwise. @@ -107,7 +107,7 @@ bool RGBA32Buffer::setSize(int newWidth, int newHeight) return true; } -QPixmap* RGBA32Buffer::asNewNativeImage() const +QPixmap* ImageFrame::asNewNativeImage() const { if (m_pixmap.isNull() && !m_image.isNull()) { m_pixmap = QPixmap::fromImage(m_image); @@ -116,28 +116,28 @@ QPixmap* RGBA32Buffer::asNewNativeImage() const return new QPixmap(m_pixmap); } -bool RGBA32Buffer::hasAlpha() const +bool ImageFrame::hasAlpha() const { return m_hasAlpha; } -void RGBA32Buffer::setHasAlpha(bool alpha) +void ImageFrame::setHasAlpha(bool alpha) { m_hasAlpha = alpha; } -void RGBA32Buffer::setColorProfile(const ColorProfile& colorProfile) +void ImageFrame::setColorProfile(const ColorProfile& colorProfile) { notImplemented(); } -void RGBA32Buffer::setStatus(FrameStatus status) +void ImageFrame::setStatus(FrameStatus status) { m_status = status; } // The image must not have format 8888 pre multiplied... -void RGBA32Buffer::setPixmap(const QPixmap& pixmap) +void ImageFrame::setPixmap(const QPixmap& pixmap) { m_pixmap = pixmap; m_image = QImage(); @@ -145,12 +145,12 @@ void RGBA32Buffer::setPixmap(const QPixmap& pixmap) m_hasAlpha = pixmap.hasAlphaChannel(); } -int RGBA32Buffer::width() const +int ImageFrame::width() const { return m_size.width(); } -int RGBA32Buffer::height() const +int ImageFrame::height() const { return m_size.height(); } diff --git a/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp b/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp index 50e2106..a1c8261 100644 --- a/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp +++ b/Source/WebCore/platform/image-decoders/skia/ImageDecoderSkia.cpp @@ -34,7 +34,7 @@ namespace WebCore { -RGBA32Buffer::RGBA32Buffer() +ImageFrame::ImageFrame() : m_status(FrameEmpty) , m_duration(0) , m_disposalMethod(DisposeNotSpecified) @@ -42,7 +42,7 @@ RGBA32Buffer::RGBA32Buffer() { } -RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) +ImageFrame& ImageFrame::operator=(const ImageFrame& other) { if (this == &other) return *this; @@ -59,7 +59,7 @@ RGBA32Buffer& RGBA32Buffer::operator=(const RGBA32Buffer& other) return *this; } -void RGBA32Buffer::clear() +void ImageFrame::clear() { m_bitmap.reset(); m_status = FrameEmpty; @@ -69,12 +69,12 @@ void RGBA32Buffer::clear() // other metadata out of this frame later. } -void RGBA32Buffer::zeroFill() +void ImageFrame::zeroFill() { m_bitmap.eraseARGB(0, 0, 0, 0); } -bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) +bool ImageFrame::copyBitmapData(const ImageFrame& other) { if (this == &other) return true; @@ -84,7 +84,7 @@ bool RGBA32Buffer::copyBitmapData(const RGBA32Buffer& other) return otherBitmap.copyTo(&m_bitmap, otherBitmap.config()); } -bool RGBA32Buffer::setSize(int newWidth, int newHeight) +bool ImageFrame::setSize(int newWidth, int newHeight) { // This function should only be called once, it will leak memory // otherwise. @@ -99,7 +99,7 @@ bool RGBA32Buffer::setSize(int newWidth, int newHeight) return true; } -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { #if PLATFORM(ANDROID) return new SkBitmapRef(m_bitmap); @@ -108,34 +108,34 @@ NativeImagePtr RGBA32Buffer::asNewNativeImage() const #endif } -bool RGBA32Buffer::hasAlpha() const +bool ImageFrame::hasAlpha() const { return !m_bitmap.isOpaque(); } -void RGBA32Buffer::setHasAlpha(bool alpha) +void ImageFrame::setHasAlpha(bool alpha) { m_bitmap.setIsOpaque(!alpha); } -void RGBA32Buffer::setColorProfile(const ColorProfile& colorProfile) +void ImageFrame::setColorProfile(const ColorProfile& colorProfile) { notImplemented(); } -void RGBA32Buffer::setStatus(FrameStatus status) +void ImageFrame::setStatus(FrameStatus status) { m_status = status; if (m_status == FrameComplete) m_bitmap.setDataComplete(); // Tell the bitmap it's done. } -int RGBA32Buffer::width() const +int ImageFrame::width() const { return m_bitmap.width(); } -int RGBA32Buffer::height() const +int ImageFrame::height() const { return m_bitmap.height(); } diff --git a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp index a988d9c..8045ada 100644 --- a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp +++ b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.cpp @@ -53,7 +53,7 @@ bool WEBPImageDecoder::isSizeAvailable() return ImageDecoder::isSizeAvailable(); } -RGBA32Buffer* WEBPImageDecoder::frameBufferAtIndex(size_t index) +ImageFrame* WEBPImageDecoder::frameBufferAtIndex(size_t index) { if (index) return 0; @@ -63,8 +63,8 @@ RGBA32Buffer* WEBPImageDecoder::frameBufferAtIndex(size_t index) m_frameBufferCache[0].setPremultiplyAlpha(m_premultiplyAlpha); } - RGBA32Buffer& frame = m_frameBufferCache[0]; - if (frame.status() != RGBA32Buffer::FrameComplete) + ImageFrame& frame = m_frameBufferCache[0]; + if (frame.status() != ImageFrame::FrameComplete) decode(false); return &frame; } @@ -96,8 +96,8 @@ bool WEBPImageDecoder::decode(bool onlySize) if (!isAllDataReceived()) return true; ASSERT(!m_frameBufferCache.isEmpty()); - RGBA32Buffer& buffer = m_frameBufferCache[0]; - if (buffer.status() == RGBA32Buffer::FrameEmpty) { + ImageFrame& buffer = m_frameBufferCache[0]; + if (buffer.status() == ImageFrame::FrameEmpty) { ASSERT(width == size().width()); ASSERT(height == size().height()); if (!buffer.setSize(width, height)) @@ -114,7 +114,7 @@ bool WEBPImageDecoder::decode(bool onlySize) for (int x = 0; x < width; ++x) buffer.setRGBA(x, y, src[bytesPerPixel * x + 2], src[bytesPerPixel * x + 1], src[bytesPerPixel * x + 0], 0xff); } - buffer.setStatus(RGBA32Buffer::FrameComplete); + buffer.setStatus(ImageFrame::FrameComplete); buffer.setHasAlpha(false); buffer.setRect(IntRect(IntPoint(), size())); return true; diff --git a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h index 6cf8870..cde1bbf 100644 --- a/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h +++ b/Source/WebCore/platform/image-decoders/webp/WEBPImageDecoder.h @@ -41,7 +41,7 @@ public: virtual ~WEBPImageDecoder(); virtual String filenameExtension() const { return "vp8"; } virtual bool isSizeAvailable(); - virtual RGBA32Buffer* frameBufferAtIndex(size_t index); + virtual ImageFrame* frameBufferAtIndex(size_t index); virtual bool supportsAlpha() const { return false; } private: diff --git a/Source/WebCore/platform/image-decoders/wx/ImageDecoderWx.cpp b/Source/WebCore/platform/image-decoders/wx/ImageDecoderWx.cpp index 966eb90..9314bbe 100644 --- a/Source/WebCore/platform/image-decoders/wx/ImageDecoderWx.cpp +++ b/Source/WebCore/platform/image-decoders/wx/ImageDecoderWx.cpp @@ -37,7 +37,7 @@ namespace WebCore { -NativeImagePtr RGBA32Buffer::asNewNativeImage() const +NativeImagePtr ImageFrame::asNewNativeImage() const { wxBitmap* bmp = new wxBitmap(width(), height(), 32); diff --git a/Source/WebCore/platform/image-encoders/skia/JPEGImageEncoder.cpp b/Source/WebCore/platform/image-encoders/skia/JPEGImageEncoder.cpp index b675ab5..be3c92a 100644 --- a/Source/WebCore/platform/image-encoders/skia/JPEGImageEncoder.cpp +++ b/Source/WebCore/platform/image-encoders/skia/JPEGImageEncoder.cpp @@ -79,23 +79,12 @@ static void handleError(j_common_ptr common) longjmp(*jumpBufferPtr, -1); } -// FIXME: is alpha unpremultiplication correct, or should the alpha channel -// be ignored? See bug http://webkit.org/b/40147. -void preMultipliedBGRAtoRGB(const SkPMColor* input, unsigned int pixels, unsigned char* output) +static void preMultipliedBGRAtoRGB(const SkPMColor* input, unsigned int pixels, unsigned char* output) { - static const SkUnPreMultiply::Scale* scale = SkUnPreMultiply::GetScaleTable(); - for (; pixels-- > 0; ++input) { - const unsigned alpha = SkGetPackedA32(*input); - if ((alpha != 0) && (alpha != 255)) { - *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedR32(*input)); - *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedG32(*input)); - *output++ = SkUnPreMultiply::ApplyScale(scale[alpha], SkGetPackedB32(*input)); - } else { - *output++ = SkGetPackedR32(*input); - *output++ = SkGetPackedG32(*input); - *output++ = SkGetPackedB32(*input); - } + *output++ = SkGetPackedR32(*input); + *output++ = SkGetPackedG32(*input); + *output++ = SkGetPackedB32(*input); } } diff --git a/Source/WebCore/platform/mac/DragDataMac.mm b/Source/WebCore/platform/mac/DragDataMac.mm index 9cb4836..64376b1 100644 --- a/Source/WebCore/platform/mac/DragDataMac.mm +++ b/Source/WebCore/platform/mac/DragDataMac.mm @@ -33,41 +33,52 @@ #import "DOMDocumentFragmentInternal.h" #import "MIMETypeRegistry.h" #import "Pasteboard.h" -#import "PasteboardHelper.h" +#import "Range.h" namespace WebCore { DragData::DragData(DragDataRef data, const IntPoint& clientPosition, const IntPoint& globalPosition, - DragOperation sourceOperationMask, PasteboardHelper* pasteboardHelper) + DragOperation sourceOperationMask, DragApplicationFlags flags) : m_clientPosition(clientPosition) , m_globalPosition(globalPosition) , m_platformDragData(data) , m_draggingSourceOperationMask(sourceOperationMask) - , m_pasteboardHelper(pasteboardHelper) + , m_applicationFlags(flags) + , m_pasteboard([m_platformDragData draggingPasteboard]) +{ +} + +DragData::DragData(const String& dragStorageName, const IntPoint& clientPosition, const IntPoint& globalPosition, + DragOperation sourceOperationMask, DragApplicationFlags flags) + : m_clientPosition(clientPosition) + , m_globalPosition(globalPosition) + , m_platformDragData(0) + , m_draggingSourceOperationMask(sourceOperationMask) + , m_applicationFlags(flags) + , m_pasteboard([NSPasteboard pasteboardWithName:dragStorageName]) { - ASSERT(pasteboardHelper); } bool DragData::canSmartReplace() const { //Need to call this so that the various Pasteboard type strings are intialised Pasteboard::generalPasteboard(); - return [[[m_platformDragData draggingPasteboard] types] containsObject:WebSmartPastePboardType]; + return [[m_pasteboard.get() types] containsObject:WebSmartPastePboardType]; } bool DragData::containsColor() const { - return [[[m_platformDragData draggingPasteboard] types] containsObject:NSColorPboardType]; + return [[m_pasteboard.get() types] containsObject:NSColorPboardType]; } bool DragData::containsFiles() const { - return [[[m_platformDragData draggingPasteboard] types] containsObject:NSFilenamesPboardType]; + return [[m_pasteboard.get() types] containsObject:NSFilenamesPboardType]; } void DragData::asFilenames(Vector<String>& result) const { - NSArray *filenames = [[m_platformDragData draggingPasteboard] propertyListForType:NSFilenamesPboardType]; + NSArray *filenames = [m_pasteboard.get() propertyListForType:NSFilenamesPboardType]; NSEnumerator *fileEnumerator = [filenames objectEnumerator]; while (NSString *filename = [fileEnumerator nextObject]) @@ -76,19 +87,19 @@ void DragData::asFilenames(Vector<String>& result) const bool DragData::containsPlainText() const { - NSPasteboard *pasteboard = [m_platformDragData draggingPasteboard]; - NSArray *types = [pasteboard types]; + NSArray *types = [m_pasteboard.get() types]; return [types containsObject:NSStringPboardType] || [types containsObject:NSRTFDPboardType] || [types containsObject:NSRTFPboardType] || [types containsObject:NSFilenamesPboardType] - || [NSURL URLFromPasteboard:pasteboard]; + || [NSURL URLFromPasteboard:m_pasteboard.get()]; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame *frame) const { - return m_pasteboardHelper->plainTextFromPasteboard([m_platformDragData draggingPasteboard]); + Pasteboard pasteboard(m_pasteboard.get()); + return pasteboard.plainText(frame); } Color DragData::asColor() const @@ -98,29 +109,50 @@ Color DragData::asColor() const (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5)); } +static NSArray *insertablePasteboardTypes() +{ + static NSArray *types = nil; + if (!types) { + types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType, NSPDFPboardType, +#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) + NSPICTPboardType, +#endif + NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, kUTTypePNG, nil]; + CFRetain(types); + } + return types; +} + bool DragData::containsCompatibleContent() const { - NSPasteboard *pasteboard = [m_platformDragData draggingPasteboard]; - NSMutableSet *types = [NSMutableSet setWithArray:[pasteboard types]]; - [types intersectSet:[NSSet setWithArray:m_pasteboardHelper->insertablePasteboardTypes()]]; + NSMutableSet *types = [NSMutableSet setWithArray:[m_pasteboard.get() types]]; + [types intersectSet:[NSSet setWithArray:insertablePasteboardTypes()]]; return [types count] != 0; } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame* frame, FilenameConversionPolicy filenamePolicy) const { - return !asURL(filenamePolicy).isEmpty(); + return !asURL(frame, filenamePolicy).isEmpty(); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame* frame, FilenameConversionPolicy filenamePolicy, String* title) const { // FIXME: Use filenamePolicy. (void)filenamePolicy; - return m_pasteboardHelper->urlFromPasteboard([m_platformDragData draggingPasteboard], title); + + if (title) { + if (NSString *URLTitleString = [[m_platformDragData draggingPasteboard] stringForType:WebURLNamePboardType]) + *title = URLTitleString; + } + Pasteboard pasteboard(m_pasteboard.get()); + return pasteboard.asURL(frame); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range> range, bool allowPlainText, bool& chosePlainText) const { - return core(m_pasteboardHelper->fragmentFromPasteboard([m_platformDragData draggingPasteboard])); + Pasteboard pasteboard(m_pasteboard.get()); + + return pasteboard.documentFragment(frame, range, allowPlainText, chosePlainText); } } // namespace WebCore diff --git a/Source/WebCore/platform/mac/PasteboardMac.mm b/Source/WebCore/platform/mac/PasteboardMac.mm index 0625287..71e4046 100644 --- a/Source/WebCore/platform/mac/PasteboardMac.mm +++ b/Source/WebCore/platform/mac/PasteboardMac.mm @@ -191,7 +191,7 @@ void Pasteboard::writeSelection(NSPasteboard* pasteboard, Range* selectedRange, if ([types containsObject:NSStringPboardType]) { // Map to a plain old space because this is better for source code, other browsers do it, // and because HTML forces you to do this any time you want two spaces in a row. - String text = selectedRange->text(); + String text = frame->editor()->selectedText(); NSMutableString *s = [[[(NSString*)text copy] autorelease] mutableCopy]; NSString *NonBreakingSpaceString = [NSString stringWithCharacters:&noBreakSpace length:1]; @@ -436,7 +436,50 @@ static NSURL* uniqueURLWithRelativePart(NSString *relativePart) return URL; } + +NSURL *Pasteboard::getBestURL(Frame* frame) +{ + NSArray *types = [m_pasteboard.get() types]; + + // FIXME: using the editorClient to call into webkit, for now, since + // calling webkit_canonicalize from WebCore involves migrating a sizable amount of + // helper code that should either be done in a separate patch or figured out in another way. + + if ([types containsObject:NSURLPboardType]) { + NSURL *URLFromPasteboard = [NSURL URLFromPasteboard:m_pasteboard.get()]; + NSString *scheme = [URLFromPasteboard scheme]; + if ([scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"]) { + return frame->editor()->client()->canonicalizeURL(URLFromPasteboard); + } + } + + if ([types containsObject:NSStringPboardType]) { + NSString *URLString = [m_pasteboard.get() stringForType:NSStringPboardType]; + NSURL *URL = frame->editor()->client()->canonicalizeURLString(URLString); + if (URL) + return URL; + } + + if ([types containsObject:NSFilenamesPboardType]) { + NSArray *files = [m_pasteboard.get() propertyListForType:NSFilenamesPboardType]; + // FIXME: Maybe it makes more sense to allow multiple files and only use the first one? + if ([files count] == 1) { + NSString *file = [files objectAtIndex:0]; + BOOL isDirectory; + if ([[NSFileManager defaultManager] fileExistsAtPath:file isDirectory:&isDirectory] && isDirectory) + return nil; + return frame->editor()->client()->canonicalizeURL([NSURL fileURLWithPath:file]); + } + } + return nil; +} + +String Pasteboard::asURL(Frame* frame) +{ + return [getBestURL(frame) absoluteString]; +} + PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefPtr<Range> context, bool allowPlainText, bool& chosePlainText) { NSArray *types = [m_pasteboard.get() types]; diff --git a/Source/WebCore/platform/mac/ThemeMac.mm b/Source/WebCore/platform/mac/ThemeMac.mm index 75cbd36..e510ea7 100644 --- a/Source/WebCore/platform/mac/ThemeMac.mm +++ b/Source/WebCore/platform/mac/ThemeMac.mm @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008, 2010 Apple Inc. All Rights Reserved. + * Copyright (C) 2008, 2010, 2011 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -52,6 +52,16 @@ using namespace std; return nil; } +- (NSRect)_focusRingVisibleRect +{ + return [self visibleRect]; +} + +- (NSView *)_focusRingClipAncestor +{ + return self; +} + @end // FIXME: Default buttons really should be more like push buttons and not like buttons. diff --git a/Source/WebCore/platform/mac/WheelEventMac.mm b/Source/WebCore/platform/mac/WheelEventMac.mm index d9663b9..d4fc698 100644 --- a/Source/WebCore/platform/mac/WheelEventMac.mm +++ b/Source/WebCore/platform/mac/WheelEventMac.mm @@ -29,9 +29,31 @@ #import "PlatformMouseEvent.h" #import "Scrollbar.h" #import "WebCoreSystemInterface.h" +#import <wtf/UnusedParam.h> namespace WebCore { +static PlatformWheelEventPhase phaseForEvent(NSEvent *event) +{ +#if !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) + uint32_t phase = PlatformWheelEventPhaseNone; + if ([event momentumPhase] & NSEventPhaseBegan) + phase |= PlatformWheelEventPhaseBegan; + if ([event momentumPhase] & NSEventPhaseStationary) + phase |= PlatformWheelEventPhaseStationary; + if ([event momentumPhase] & NSEventPhaseChanged) + phase |= PlatformWheelEventPhaseChanged; + if ([event momentumPhase] & NSEventPhaseEnded) + phase |= PlatformWheelEventPhaseEnded; + if ([event momentumPhase] & NSEventPhaseCancelled) + phase |= PlatformWheelEventPhaseCancelled; + return static_cast<PlatformWheelEventPhase>(phase); +#else + UNUSED_PARAM(event); + return PlatformWheelEventPhaseNone; +#endif +} + PlatformWheelEvent::PlatformWheelEvent(NSEvent* event, NSView *windowView) : m_position(pointForEvent(event, windowView)) , m_globalPosition(globalPointForEvent(event)) @@ -41,9 +63,10 @@ PlatformWheelEvent::PlatformWheelEvent(NSEvent* event, NSView *windowView) , m_ctrlKey([event modifierFlags] & NSControlKeyMask) , m_altKey([event modifierFlags] & NSAlternateKeyMask) , m_metaKey([event modifierFlags] & NSCommandKeyMask) + , m_phase(phaseForEvent(event)) { BOOL continuous; - + wkGetWheelEventDeltas(event, &m_deltaX, &m_deltaY, &continuous); if (continuous) { m_wheelTicksX = m_deltaX / static_cast<float>(Scrollbar::pixelsPerLineStep()); diff --git a/Source/WebCore/platform/mac/WidgetMac.mm b/Source/WebCore/platform/mac/WidgetMac.mm index e8bb81d..f3c951a 100644 --- a/Source/WebCore/platform/mac/WidgetMac.mm +++ b/Source/WebCore/platform/mac/WidgetMac.mm @@ -1,5 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2006, 2008, 2010 Apple Inc. All rights reserved. + * Copyright (C) 2004, 2005, 2006, 2008, 2010, 2011 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,7 @@ #import "Chrome.h" #import "Cursor.h" #import "Document.h" +#import "FloatConversion.h" #import "Font.h" #import "Frame.h" #import "GraphicsContext.h" @@ -170,25 +171,48 @@ void Widget::setFrameRect(const IntRect& rect) m_frame = rect; BEGIN_BLOCK_OBJC_EXCEPTIONS; - NSView *v = getOuterView(); - if (!v) + NSView *outerView = getOuterView(); + if (!outerView) return; - NSRect visibleRect = [v visibleRect]; + // Take a reference to this Widget, because sending messages to outerView can invoke arbitrary + // code, which can deref it. + RefPtr<Widget> protectedThis(this); + + NSRect visibleRect = [outerView visibleRect]; NSRect f = rect; - if (!NSEqualRects(f, [v frame])) { - [v setFrame:f]; - [v setNeedsDisplay:NO]; - } else if (!NSEqualRects(visibleRect, m_data->previousVisibleRect) && [v respondsToSelector:@selector(visibleRectDidChange)]) - [v visibleRectDidChange]; + if (!NSEqualRects(f, [outerView frame])) { + [outerView setFrame:f]; + [outerView setNeedsDisplay:NO]; + } else if (!NSEqualRects(visibleRect, m_data->previousVisibleRect) && [outerView respondsToSelector:@selector(visibleRectDidChange)]) + [outerView visibleRectDidChange]; m_data->previousVisibleRect = visibleRect; END_BLOCK_OBJC_EXCEPTIONS; } -NSView* Widget::getOuterView() const +void Widget::setBoundsSize(const IntSize& size) { - NSView* view = platformWidget(); + NSSize nsSize = size; + + BEGIN_BLOCK_OBJC_EXCEPTIONS; + NSView *outerView = getOuterView(); + if (!outerView) + return; + + // Take a reference to this Widget, because sending messages to outerView can invoke arbitrary + // code, which can deref it. + RefPtr<Widget> protectedThis(this); + if (!NSEqualSizes(nsSize, [outerView bounds].size)) { + [outerView setBoundsSize:nsSize]; + [outerView setNeedsDisplay:NO]; + } + END_BLOCK_OBJC_EXCEPTIONS; +} + +NSView *Widget::getOuterView() const +{ + NSView *view = platformWidget(); // If this widget's view is a WebCoreFrameScrollView then we // resize its containing view, a WebFrameView. @@ -205,11 +229,35 @@ void Widget::paint(GraphicsContext* p, const IntRect& r) if (p->paintingDisabled()) return; NSView *view = getOuterView(); + + // Take a reference to this Widget, because sending messages to the views can invoke arbitrary + // code, which can deref it. + RefPtr<Widget> protectedThis(this); + + IntPoint transformOrigin = frameRect().location(); + AffineTransform widgetToViewTranform = makeMapBetweenRects(IntRect(IntPoint(), frameRect().size()), [view bounds]); + NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; if (currentContext == [[view window] graphicsContext] || ![currentContext isDrawingToScreen]) { // This is the common case of drawing into a window or printing. BEGIN_BLOCK_OBJC_EXCEPTIONS; - [view displayRectIgnoringOpacity:[view convertRect:r fromView:[view superview]]]; + + CGContextRef context = (CGContextRef)[currentContext graphicsPort]; + + CGContextSaveGState(context); + CGContextTranslateCTM(context, transformOrigin.x(), transformOrigin.y()); + CGContextScaleCTM(context, narrowPrecisionToFloat(widgetToViewTranform.xScale()), narrowPrecisionToFloat(widgetToViewTranform.yScale())); + CGContextTranslateCTM(context, -transformOrigin.x(), -transformOrigin.y()); + + IntRect dirtyRect = r; + dirtyRect.move(-transformOrigin.x(), -transformOrigin.y()); + if (![view isFlipped]) + dirtyRect.setY([view bounds].size.height - dirtyRect.bottom()); + + [view displayRectIgnoringOpacity:dirtyRect]; + + CGContextRestoreGState(context); + END_BLOCK_OBJC_EXCEPTIONS; } else { // This is the case of drawing into a bitmap context other than a window backing store. It gets hit beneath @@ -234,6 +282,10 @@ void Widget::paint(GraphicsContext* p, const IntRect& r) ASSERT(cgContext == [currentContext graphicsPort]); CGContextSaveGState(cgContext); + CGContextTranslateCTM(cgContext, transformOrigin.x(), transformOrigin.y()); + CGContextScaleCTM(cgContext, narrowPrecisionToFloat(widgetToViewTranform.xScale()), narrowPrecisionToFloat(widgetToViewTranform.yScale())); + CGContextTranslateCTM(cgContext, -transformOrigin.x(), -transformOrigin.y()); + NSRect viewFrame = [view frame]; NSRect viewBounds = [view bounds]; // Set up the translation and (flipped) orientation of the graphics context. In normal drawing, AppKit does it as it descends down @@ -241,13 +293,18 @@ void Widget::paint(GraphicsContext* p, const IntRect& r) CGContextTranslateCTM(cgContext, viewFrame.origin.x - viewBounds.origin.x, viewFrame.origin.y + viewFrame.size.height + viewBounds.origin.y); CGContextScaleCTM(cgContext, 1, -1); + IntRect dirtyRect = r; + dirtyRect.move(-transformOrigin.x(), -transformOrigin.y()); + if (![view isFlipped]) + dirtyRect.setY([view bounds].size.height - dirtyRect.bottom()); + BEGIN_BLOCK_OBJC_EXCEPTIONS; { #ifdef BUILDING_ON_TIGER AutodrainedPool pool; #endif NSGraphicsContext *nsContext = [NSGraphicsContext graphicsContextWithGraphicsPort:cgContext flipped:YES]; - [view displayRectIgnoringOpacity:[view convertRect:r fromView:[view superview]] inContext:nsContext]; + [view displayRectIgnoringOpacity:dirtyRect inContext:nsContext]; } END_BLOCK_OBJC_EXCEPTIONS; @@ -261,6 +318,7 @@ void Widget::paint(GraphicsContext* p, const IntRect& r) void Widget::setIsSelected(bool isSelected) { NSView *view = platformWidget(); + BEGIN_BLOCK_OBJC_EXCEPTIONS; if ([view respondsToSelector:@selector(webPlugInSetIsSelected:)]) [view webPlugInSetIsSelected:isSelected]; diff --git a/Source/WebCore/platform/mock/SpeechInputClientMock.cpp b/Source/WebCore/platform/mock/SpeechInputClientMock.cpp index 16f2825..16a7c76 100644 --- a/Source/WebCore/platform/mock/SpeechInputClientMock.cpp +++ b/Source/WebCore/platform/mock/SpeechInputClientMock.cpp @@ -72,8 +72,8 @@ void SpeechInputClientMock::stopRecording(int requestId) void SpeechInputClientMock::cancelRecognition(int requestId) { - ASSERT(requestId == m_requestId); if (m_timer.isActive()) { + ASSERT(requestId == m_requestId); m_timer.stop(); m_recording = false; m_listener->didCompleteRecognition(m_requestId); @@ -107,15 +107,20 @@ void SpeechInputClientMock::timerFired(WebCore::Timer<SpeechInputClientMock>*) } else { bool noResultsFound = false; + // We take a copy of the requestId here so that if scripts destroyed the input element + // inside one of the callbacks below, we'll still know what this session's requestId was. + int requestId = m_requestId; + m_requestId = 0; + // Empty language case must be handled separately to avoid problems with HashMap and empty keys. if (m_language.isEmpty()) { if (!m_resultsForEmptyLanguage.isEmpty()) - m_listener->setRecognitionResult(m_requestId, m_resultsForEmptyLanguage); + m_listener->setRecognitionResult(requestId, m_resultsForEmptyLanguage); else noResultsFound = true; } else { if (m_recognitionResults.contains(m_language)) - m_listener->setRecognitionResult(m_requestId, m_recognitionResults.get(m_language)); + m_listener->setRecognitionResult(requestId, m_recognitionResults.get(m_language)); else noResultsFound = true; } @@ -128,11 +133,10 @@ void SpeechInputClientMock::timerFired(WebCore::Timer<SpeechInputClientMock>*) error.append("'"); SpeechInputResultArray results; results.append(SpeechInputResult::create(error, 1.0)); - m_listener->setRecognitionResult(m_requestId, results); + m_listener->setRecognitionResult(requestId, results); } - m_listener->didCompleteRecognition(m_requestId); - m_requestId = 0; + m_listener->didCompleteRecognition(requestId); } } diff --git a/Source/WebCore/platform/network/qt/NetworkStateNotifierQt.cpp b/Source/WebCore/platform/network/qt/NetworkStateNotifierQt.cpp index 959e74a..f3e7023 100644 --- a/Source/WebCore/platform/network/qt/NetworkStateNotifierQt.cpp +++ b/Source/WebCore/platform/network/qt/NetworkStateNotifierQt.cpp @@ -91,6 +91,6 @@ void NetworkStateNotifier::setNetworkAccessAllowed(bool isAllowed) } // namespace WebCore -#endif - #include "moc_NetworkStateNotifierPrivate.cpp" + +#endif diff --git a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp index 0caeb05..e0d6e69 100644 --- a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp +++ b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.cpp @@ -25,10 +25,6 @@ #include <QNetworkCookieJar> #include <QStringList> -// Use unused variables to be able to call qRegisterMetaType statically. -static int dummyStaticVar1 = qRegisterMetaType<QFutureInterface<bool> >("QFutureInterface<bool>"); -static int dummyStaticVar2 = qRegisterMetaType<QFutureInterface<QList<QNetworkCookie> > >("QFutureInterface<QList<QNetworkCookie> >"); - namespace WebCore { QtNAMThreadSafeProxy::QtNAMThreadSafeProxy(QNetworkAccessManager *manager) @@ -37,8 +33,8 @@ QtNAMThreadSafeProxy::QtNAMThreadSafeProxy(QNetworkAccessManager *manager) moveToThread(manager->thread()); connect(this, SIGNAL(localSetCookiesRequested(const QUrl&, const QString&)), SLOT(localSetCookies(const QUrl&, const QString&))); - connect(this, SIGNAL(localCookiesForUrlRequested(QFutureInterface<QList<QNetworkCookie> >, const QUrl&)), SLOT(localCookiesForUrl(QFutureInterface<QList<QNetworkCookie> >, const QUrl&))); - connect(this, SIGNAL(localWillLoadFromCacheRequested(QFutureInterface<bool>, const QUrl&)), SLOT(localWillLoadFromCache(QFutureInterface<bool>, const QUrl&))); + connect(this, SIGNAL(localCookiesForUrlRequested(const QUrl&, bool*, QList<QNetworkCookie>*)), SLOT(localCookiesForUrl(const QUrl&, bool*, QList<QNetworkCookie>*))); + connect(this, SIGNAL(localWillLoadFromCacheRequested(const QUrl&, bool*, bool*)), SLOT(localWillLoadFromCache(const QUrl&, bool*, bool*))); } void QtNAMThreadSafeProxy::localSetCookies(const QUrl& url, const QString& cookies) @@ -54,19 +50,23 @@ void QtNAMThreadSafeProxy::localSetCookies(const QUrl& url, const QString& cooki m_manager->cookieJar()->setCookiesFromUrl(cookieList, url); } -void QtNAMThreadSafeProxy::localCookiesForUrl(QFutureInterface<QList<QNetworkCookie> > fi, const QUrl& url) +void QtNAMThreadSafeProxy::localCookiesForUrl(const QUrl& url, bool* done, QList<QNetworkCookie>* result) { - fi.reportResult(m_manager->cookieJar()->cookiesForUrl(url)); - fi.reportFinished(); + QMutexLocker lock(&m_resultMutex); + *result = m_manager->cookieJar()->cookiesForUrl(url); + *done = true; + m_resultWaitCondition.wakeAll(); } -void QtNAMThreadSafeProxy::localWillLoadFromCache(QFutureInterface<bool> fi, const QUrl& url) +void QtNAMThreadSafeProxy::localWillLoadFromCache(const QUrl& url, bool* done, bool* result) { - bool retVal = false; + QMutexLocker lock(&m_resultMutex); if (m_manager->cache()) - retVal = m_manager->cache()->metaData(url).isValid(); - - fi.reportFinished(&retVal); + *result = m_manager->cache()->metaData(url).isValid(); + else + *result = false; + *done = true; + m_resultWaitCondition.wakeAll(); } QtNetworkReplyThreadSafeProxy::QtNetworkReplyThreadSafeProxy(QNetworkAccessManager *manager) diff --git a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h index a2fa4ee..ae963cf 100644 --- a/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h +++ b/Source/WebCore/platform/network/qt/QtNAMThreadSafeProxy.h @@ -19,11 +19,11 @@ #ifndef QtNAMThreadSafeProxy_h #define QtNAMThreadSafeProxy_h -#include <QFuture> #include <QMutex> #include <QNetworkCookie> #include <QNetworkReply> #include <QObject> +#include <QWaitCondition> QT_BEGIN_NAMESPACE class QNetworkAccessManager; @@ -43,34 +43,44 @@ public: emit localSetCookiesRequested(url, cookies); } - QFuture<QList<QNetworkCookie> > cookiesForUrl(const QUrl& url) + QList<QNetworkCookie> cookiesForUrl(const QUrl& url) { - QFutureInterface<QList<QNetworkCookie> > fi; - fi.reportStarted(); - emit localCookiesForUrlRequested(fi, url); - return fi.future(); + bool done = false; + QList<QNetworkCookie> result; + emit localCookiesForUrlRequested(url, &done, &result); + + QMutexLocker lock(&m_resultMutex); + while (!done) + m_resultWaitCondition.wait(&m_resultMutex); + return result; } - QFuture<bool> willLoadFromCache(const QUrl& url) + bool willLoadFromCache(const QUrl& url) { - QFutureInterface<bool> fi; - fi.reportStarted(); - emit localWillLoadFromCacheRequested(fi, url); - return fi.future(); + bool done = false; + bool result; + emit localWillLoadFromCacheRequested(url, &done, &result); + + QMutexLocker lock(&m_resultMutex); + while (!done) + m_resultWaitCondition.wait(&m_resultMutex); + return result; } signals: - void localSetCookiesRequested(const QUrl& url, const QString& cookies); - void localCookiesForUrlRequested(QFutureInterface<QList<QNetworkCookie> > fi, const QUrl& url); - void localWillLoadFromCacheRequested(QFutureInterface<bool> fi, const QUrl& url); + void localSetCookiesRequested(const QUrl&, const QString& cookies); + void localCookiesForUrlRequested(const QUrl&, bool* done, QList<QNetworkCookie>* result); + void localWillLoadFromCacheRequested(const QUrl&, bool* done, bool* result); private slots: - void localSetCookies(const QUrl& url, const QString& cookies); - void localCookiesForUrl(QFutureInterface<QList<QNetworkCookie> > fi, const QUrl& url); - void localWillLoadFromCache(QFutureInterface<bool> fi, const QUrl& url); + void localSetCookies(const QUrl&, const QString& cookies); + void localCookiesForUrl(const QUrl&, bool* done, QList<QNetworkCookie>* result); + void localWillLoadFromCache(const QUrl&, bool* done, bool* result); private: QNetworkAccessManager* m_manager; + QMutex m_resultMutex; + QWaitCondition m_resultWaitCondition; }; diff --git a/Source/WebCore/platform/network/soup/AuthenticationChallenge.h b/Source/WebCore/platform/network/soup/AuthenticationChallenge.h index 5177f1e..492d5c2 100644 --- a/Source/WebCore/platform/network/soup/AuthenticationChallenge.h +++ b/Source/WebCore/platform/network/soup/AuthenticationChallenge.h @@ -26,6 +26,7 @@ #define AuthenticationChallenge_h #include "AuthenticationChallengeBase.h" +#include "AuthenticationClient.h" namespace WebCore { @@ -39,6 +40,10 @@ public: : AuthenticationChallengeBase(protectionSpace, proposedCredential, previousFailureCount, response, error) { } + + AuthenticationClient* authenticationClient() const { return m_authenticationClient.get(); } + + RefPtr<AuthenticationClient> m_authenticationClient; }; } diff --git a/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp b/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp index 8900b18..ebb6c5f 100644 --- a/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp +++ b/Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp @@ -215,6 +215,8 @@ static void restartedCallback(SoupMessage* msg, gpointer data) #endif } +static void contentSniffedCallback(SoupMessage*, const char*, GHashTable*, gpointer); + static void gotHeadersCallback(SoupMessage* msg, gpointer data) { // For 401, we will accumulate the resource body, and only use it @@ -235,9 +237,18 @@ static void gotHeadersCallback(SoupMessage* msg, gpointer data) // The content-sniffed callback will handle the response if WebCore // require us to sniff. - if (!handle || statusWillBeHandledBySoup(msg->status_code) || handle->shouldContentSniff()) + if (!handle || statusWillBeHandledBySoup(msg->status_code)) return; + if (handle->shouldContentSniff()) { + // Avoid MIME type sniffing if the response comes back as 304 Not Modified. + if (msg->status_code == SOUP_STATUS_NOT_MODIFIED) { + soup_message_disable_feature(msg, SOUP_TYPE_CONTENT_SNIFFER); + g_signal_handlers_disconnect_by_func(msg, reinterpret_cast<gpointer>(contentSniffedCallback), handle.get()); + } else + return; + } + ResourceHandleInternal* d = handle->getInternal(); if (d->m_cancelled) return; diff --git a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c b/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c index 195c458..2a5d995 100644 --- a/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c +++ b/Source/WebCore/platform/network/soup/cache/soup-http-input-stream.c @@ -267,7 +267,7 @@ webkit_soup_http_input_stream_got_chunk (SoupMessage *msg, SoupBuffer *chunk_buf g_warning ("webkit_soup_http_input_stream_got_chunk called again before previous chunk was processed"); /* Copy what we can into priv->caller_buffer */ - if (priv->caller_bufsize - priv->caller_nread > 0) { + if (priv->caller_bufsize > priv->caller_nread) { gsize nread = MIN (chunk_size, priv->caller_bufsize - priv->caller_nread); memcpy (priv->caller_buffer + priv->caller_nread, chunk, nread); diff --git a/Source/WebCore/platform/network/win/ProxyServerWin.cpp b/Source/WebCore/platform/network/win/ProxyServerWin.cpp new file mode 100644 index 0000000..c610e20 --- /dev/null +++ b/Source/WebCore/platform/network/win/ProxyServerWin.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2010 Brent Fulgham <bfulgham@webkit.org>. 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 "ProxyServer.h" + +namespace WebCore { + +Vector<ProxyServer> proxyServersForURL(const KURL&, const NetworkingContext*) +{ + // FIXME: Implement. + return Vector<ProxyServer>(); +} + +} // namespace WebCore diff --git a/Source/WebCore/platform/qt/CookieJarQt.cpp b/Source/WebCore/platform/qt/CookieJarQt.cpp index e5d36ba..b7ff5d1 100644 --- a/Source/WebCore/platform/qt/CookieJarQt.cpp +++ b/Source/WebCore/platform/qt/CookieJarQt.cpp @@ -30,14 +30,13 @@ #include "Cookie.h" #include "Document.h" +#include "FrameLoaderClientQt.h" #include "KURL.h" -#include "QtNAMThreadSafeProxy.h" #include "NetworkingContext.h" #include "PlatformString.h" - -#include "qwebpage.h" +#include "QtNAMThreadSafeProxy.h" #include "qwebframe.h" -#include "FrameLoaderClientQt.h" +#include "qwebpage.h" #include <QNetworkAccessManager> #include <QNetworkCookie> #include <QStringList> @@ -49,10 +48,10 @@ static QNetworkAccessManager *networkAccessManager(const Document *document) { if (!document) return 0; - Frame *frame = document->frame(); + Frame* frame = document->frame(); if (!frame) return 0; - FrameLoader *loader = frame->loader(); + FrameLoader* loader = frame->loader(); if (!loader) return 0; return loader->networkingContext()->networkAccessManager(); @@ -115,7 +114,10 @@ String cookieRequestHeaderFieldValue(const Document* document, const KURL &url) bool cookiesEnabled(const Document* document) { - return networkAccessManager(document); + if (QNetworkAccessManager* manager = networkAccessManager(document)) + return !!manager->cookieJar(); + + return false; } bool getRawCookies(const Document*, const KURL&, Vector<Cookie>& rawCookies) diff --git a/Source/WebCore/platform/qt/DragDataQt.cpp b/Source/WebCore/platform/qt/DragDataQt.cpp index 4033123..f68ad1d 100644 --- a/Source/WebCore/platform/qt/DragDataQt.cpp +++ b/Source/WebCore/platform/qt/DragDataQt.cpp @@ -28,6 +28,7 @@ #include "Document.h" #include "DocumentFragment.h" +#include "Frame.h" #include "markup.h" #include <QColor> @@ -80,7 +81,7 @@ bool DragData::containsPlainText() const return m_platformDragData->hasText() || m_platformDragData->hasUrls(); } -String DragData::asPlainText() const +String DragData::asPlainText(Frame* frame) const { if (!m_platformDragData) return String(); @@ -89,7 +90,7 @@ String DragData::asPlainText() const return text; // FIXME: Should handle rich text here - return asURL(DoNotConvertFilenames, 0); + return asURL(frame, DoNotConvertFilenames, 0); } Color DragData::asColor() const @@ -103,10 +104,10 @@ bool DragData::containsCompatibleContent() const { if (!m_platformDragData) return false; - return containsColor() || containsURL() || m_platformDragData->hasHtml() || m_platformDragData->hasText(); + return containsColor() || containsURL(0) || m_platformDragData->hasHtml() || m_platformDragData->hasText(); } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { // FIXME: Use filenamePolicy. if (!m_platformDragData) @@ -114,7 +115,7 @@ bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const return m_platformDragData->hasUrls(); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String*) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String*) const { // FIXME: Use filenamePolicy. if (!m_platformDragData) @@ -127,10 +128,10 @@ String DragData::asURL(FilenameConversionPolicy filenamePolicy, String*) const return encodeWithURLEscapeSequences(urls.first().toString()); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const { if (m_platformDragData && m_platformDragData->hasHtml()) - return createFragmentFromMarkup(doc, m_platformDragData->html(), "", FragmentScriptingNotAllowed); + return createFragmentFromMarkup(frame->document(), m_platformDragData->html(), "", FragmentScriptingNotAllowed); return 0; } diff --git a/Source/WebCore/platform/qt/PasteboardQt.cpp b/Source/WebCore/platform/qt/PasteboardQt.cpp index 1c60da0..6865fd7 100644 --- a/Source/WebCore/platform/qt/PasteboardQt.cpp +++ b/Source/WebCore/platform/qt/PasteboardQt.cpp @@ -32,13 +32,12 @@ #include "Editor.h" #include "Frame.h" #include "Image.h" -#include "markup.h" #include "RenderImage.h" - -#include <qdebug.h> +#include "markup.h" +#include <qapplication.h> #include <qclipboard.h> +#include <qdebug.h> #include <qmimedata.h> -#include <qapplication.h> #include <qurl.h> #define methodDebug() qDebug() << "PasteboardQt: " << __FUNCTION__; @@ -75,8 +74,7 @@ void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, #endif #ifndef QT_NO_CLIPBOARD - QApplication::clipboard()->setMimeData(md, m_selectionMode ? - QClipboard::Selection : QClipboard::Clipboard); + QApplication::clipboard()->setMimeData(md, m_selectionMode ? QClipboard::Selection : QClipboard::Clipboard); #endif if (canSmartCopyOrDelete) md->setData("application/vnd.qtwebkit.smartpaste", QByteArray()); @@ -94,8 +92,7 @@ bool Pasteboard::canSmartReplace() String Pasteboard::plainText(Frame*) { #ifndef QT_NO_CLIPBOARD - return QApplication::clipboard()->text(m_selectionMode ? - QClipboard::Selection : QClipboard::Clipboard); + return QApplication::clipboard()->text(m_selectionMode ? QClipboard::Selection : QClipboard::Clipboard); #else return String(); #endif @@ -136,22 +133,20 @@ void Pasteboard::writePlainText(const String& text) QString qtext = text; qtext.replace(QChar(0xa0), QLatin1Char(' ')); md->setText(qtext); - QApplication::clipboard()->setMimeData(md, m_selectionMode ? - QClipboard::Selection : QClipboard::Clipboard); + QApplication::clipboard()->setMimeData(md, m_selectionMode ? QClipboard::Selection : QClipboard::Clipboard); #endif } -void Pasteboard::writeURL(const KURL& _url, const String&, Frame*) +void Pasteboard::writeURL(const KURL& url, const String&, Frame*) { - ASSERT(!_url.isEmpty()); + ASSERT(!url.isEmpty()); #ifndef QT_NO_CLIPBOARD QMimeData* md = new QMimeData; - QString url = _url.string(); - md->setText(url); - md->setUrls(QList<QUrl>() << QUrl(url)); - QApplication::clipboard()->setMimeData(md, m_selectionMode ? - QClipboard::Selection : QClipboard::Clipboard); + QString urlString = url.string(); + md->setText(urlString); + md->setUrls(QList<QUrl>() << url); + QApplication::clipboard()->setMimeData(md, m_selectionMode ? QClipboard::Selection : QClipboard::Clipboard); #endif } diff --git a/Source/WebCore/platform/qt/PlatformMouseEventQt.cpp b/Source/WebCore/platform/qt/PlatformMouseEventQt.cpp index a8956bf..125ae52 100644 --- a/Source/WebCore/platform/qt/PlatformMouseEventQt.cpp +++ b/Source/WebCore/platform/qt/PlatformMouseEventQt.cpp @@ -34,6 +34,7 @@ namespace WebCore { +#if !defined(QT_NO_GRAPHICSVIEW) PlatformMouseEvent::PlatformMouseEvent(QGraphicsSceneMouseEvent* event, int clickCount) { m_timestamp = WTF::currentTime(); @@ -69,6 +70,7 @@ PlatformMouseEvent::PlatformMouseEvent(QGraphicsSceneMouseEvent* event, int clic m_altKey = (event->modifiers() & Qt::AltModifier); m_metaKey = (event->modifiers() & Qt::MetaModifier); } +#endif // QT_NO_GRAPHICSVIEW PlatformMouseEvent::PlatformMouseEvent(QInputEvent* event, int clickCount) { diff --git a/Source/WebCore/platform/qt/RenderThemeQt.cpp b/Source/WebCore/platform/qt/RenderThemeQt.cpp index 2cc3625..8d5cfcd 100644 --- a/Source/WebCore/platform/qt/RenderThemeQt.cpp +++ b/Source/WebCore/platform/qt/RenderThemeQt.cpp @@ -47,9 +47,11 @@ #include "QtMobileWebStyle.h" #endif #include "NotImplemented.h" +#include "PaintInfo.h" #include "Page.h" #include "QWebPageClient.h" #include "QtStyleOptionWebComboBox.h" +#include "qwebsettings.h" #include "RenderBox.h" #if ENABLE(PROGRESS_TAG) #include "RenderProgress.h" @@ -92,6 +94,15 @@ inline static void initStyleOption(QWidget *widget, QStyleOption& option) option.state = QStyle::State_Active | QStyle::State_Enabled; } } +// These values all match Safari/Win/Chromium +static const float defaultControlFontPixelSize = 13; +static const float defaultCancelButtonSize = 9; +static const float minCancelButtonSize = 5; +static const float maxCancelButtonSize = 21; +static const float defaultSearchFieldResultsDecorationSize = 13; +static const float minSearchFieldResultsDecorationSize = 9; +static const float maxSearchFieldResultsDecorationSize = 30; +static const float defaultSearchFieldResultsButtonWidth = 18; StylePainter::StylePainter(RenderThemeQt* theme, const PaintInfo& paintInfo) @@ -186,6 +197,7 @@ bool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& case PushButtonPart: case ButtonPart: case MenulistPart: + // FIXME: Need to add SearchFieldPart if it should be style-able. case TextFieldPart: case TextAreaPart: return true; @@ -201,6 +213,20 @@ int RenderThemeQt::popupInternalPaddingBottom(RenderStyle* style) const { return 1; } +#else +// Remove this when SearchFieldPart is style-able in RenderTheme::isControlStyled() +bool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& fill, const Color& backgroundColor) const +{ + switch (style->appearance()) { + case SearchFieldPart: + // Test the style to see if the UA border and background match. + return (style->border() != border + || *style->backgroundLayers() != fill + || style->visitedDependentColor(CSSPropertyBackgroundColor) != backgroundColor); + default: + return RenderTheme::isControlStyled(style, border, fill, backgroundColor); + } +} #endif // for some widget painting, we need to fallback to Windows style @@ -413,6 +439,7 @@ void RenderThemeQt::computeSizeBasedOnStyle(RenderStyle* renderStyle) const switch (renderStyle->appearance()) { case TextAreaPart: + case SearchFieldPart: case TextFieldPart: { int padding = findFrameLineWidth(style); @@ -611,6 +638,11 @@ bool RenderThemeQt::paintButton(RenderObject* o, const PaintInfo& i, const IntRe void RenderThemeQt::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const { + // Resetting the style like this leads to differences like: + // - RenderTextControl {INPUT} at (2,2) size 168x25 [bgcolor=#FFFFFF] border: (2px inset #000000)] + // + RenderTextControl {INPUT} at (2,2) size 166x26 + // in layout tests when a CSS style is applied that doesn't affect background color, border or + // padding. Just worth keeping in mind! style->setBackgroundColor(Color::transparent); style->resetBorder(); style->resetPadding(); @@ -886,28 +918,73 @@ void RenderThemeQt::adjustSliderThumbStyle(CSSStyleSelector*, RenderStyle* style bool RenderThemeQt::paintSearchField(RenderObject* o, const PaintInfo& pi, const IntRect& r) { - return true; + return paintTextField(o, pi, r); } void RenderThemeQt::adjustSearchFieldStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const { - notImplemented(); - RenderTheme::adjustSearchFieldStyle(selector, style, e); + // Resetting the style like this leads to differences like: + // - RenderTextControl {INPUT} at (2,2) size 168x25 [bgcolor=#FFFFFF] border: (2px inset #000000)] + // + RenderTextControl {INPUT} at (2,2) size 166x26 + // in layout tests when a CSS style is applied that doesn't affect background color, border or + // padding. Just worth keeping in mind! + style->setBackgroundColor(Color::transparent); + style->resetBorder(); + style->resetPadding(); + computeSizeBasedOnStyle(style); } void RenderThemeQt::adjustSearchFieldCancelButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const { - notImplemented(); - RenderTheme::adjustSearchFieldCancelButtonStyle(selector, style, e); + // Logic taken from RenderThemeChromium.cpp. + // Scale the button size based on the font size. + float fontScale = style->fontSize() / defaultControlFontPixelSize; + int cancelButtonSize = lroundf(qMin(qMax(minCancelButtonSize, defaultCancelButtonSize * fontScale), maxCancelButtonSize)); + style->setWidth(Length(cancelButtonSize, Fixed)); + style->setHeight(Length(cancelButtonSize, Fixed)); +} + +// Function taken from RenderThemeChromium.cpp +IntRect RenderThemeQt::convertToPaintingRect(RenderObject* inputRenderer, const RenderObject* partRenderer, IntRect partRect, const IntRect& localOffset) const +{ + // Compute an offset between the part renderer and the input renderer. + IntSize offsetFromInputRenderer = -(partRenderer->offsetFromAncestorContainer(inputRenderer)); + // Move the rect into partRenderer's coords. + partRect.move(offsetFromInputRenderer); + // Account for the local drawing offset. + partRect.move(localOffset.x(), localOffset.y()); + + return partRect; } bool RenderThemeQt::paintSearchFieldCancelButton(RenderObject* o, const PaintInfo& pi, const IntRect& r) { - notImplemented(); - return RenderTheme::paintSearchFieldCancelButton(o, pi, r); + // Logic copied from RenderThemeChromium.cpp. + + // Get the renderer of <input> element. + Node* input = o->node()->shadowAncestorNode(); + if (!input->renderer()->isBox()) + return false; + RenderBox* inputRenderBox = toRenderBox(input->renderer()); + IntRect inputContentBox = inputRenderBox->contentBoxRect(); + + // Make sure the scaled button stays square and will fit in its parent's box. + int cancelButtonSize = qMin(inputContentBox.width(), qMin(inputContentBox.height(), r.height())); + // Calculate cancel button's coordinates relative to the input element. + // Center the button vertically. Round up though, so if it has to be one pixel off-center, it will + // be one pixel closer to the bottom of the field. This tends to look better with the text. + IntRect cancelButtonRect(o->offsetFromAncestorContainer(inputRenderBox).width(), + inputContentBox.y() + (inputContentBox.height() - cancelButtonSize + 1) / 2, + cancelButtonSize, cancelButtonSize); + IntRect paintingRect = convertToPaintingRect(inputRenderBox, o, cancelButtonRect, r); + static Image* cancelImage = Image::loadPlatformResource("searchCancelButton").releaseRef(); + static Image* cancelPressedImage = Image::loadPlatformResource("searchCancelButtonPressed").releaseRef(); + pi.context->drawImage(isPressed(o) ? cancelPressedImage : cancelImage, + o->style()->colorSpace(), paintingRect); + return false; } void RenderThemeQt::adjustSearchFieldDecorationStyle(CSSStyleSelector* selector, RenderStyle* style, @@ -1037,7 +1114,12 @@ ControlPart RenderThemeQt::initializeCommonQStyleOptions(QStyleOption& option, R String RenderThemeQt::extraMediaControlsStyleSheet() { - return String(mediaControlsQtUserAgentStyleSheet, sizeof(mediaControlsQtUserAgentStyleSheet)); + String result = String(mediaControlsQtUserAgentStyleSheet, sizeof(mediaControlsQtUserAgentStyleSheet)); + + if (m_page && m_page->chrome()->requiresFullscreenForVideoPlayback()) + result += String(mediaControlsQtFullscreenUserAgentStyleSheet, sizeof(mediaControlsQtFullscreenUserAgentStyleSheet)); + + return result; } // Helper class to transform the painter's world matrix to the object's content area, scaled to 0,0,100,100 diff --git a/Source/WebCore/platform/qt/RenderThemeQt.h b/Source/WebCore/platform/qt/RenderThemeQt.h index c28168a..6981641 100644 --- a/Source/WebCore/platform/qt/RenderThemeQt.h +++ b/Source/WebCore/platform/qt/RenderThemeQt.h @@ -81,8 +81,8 @@ public: virtual double caretBlinkInterval() const; -#if USE(QT_MOBILE_THEME) virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const; +#if USE(QT_MOBILE_THEME) virtual int popupInternalPaddingBottom(RenderStyle*) const; #endif @@ -180,6 +180,8 @@ private: QStyle* fallbackStyle() const; + IntRect convertToPaintingRect(RenderObject* inputRenderer, const RenderObject* partRenderer, IntRect partRect, const IntRect& localOffset) const; + Page* m_page; #ifdef Q_WS_MAC diff --git a/Source/WebCore/platform/qt/WheelEventQt.cpp b/Source/WebCore/platform/qt/WheelEventQt.cpp index 57a7ebc..aa61d91 100644 --- a/Source/WebCore/platform/qt/WheelEventQt.cpp +++ b/Source/WebCore/platform/qt/WheelEventQt.cpp @@ -48,10 +48,10 @@ void PlatformWheelEvent::applyDelta(int delta, Qt::Orientation orientation) m_wheelTicksX = m_deltaX; m_wheelTicksY = m_deltaY; +#ifndef QT_NO_WHEELEVENT // Use the same single scroll step as QTextEdit // (in QTextEditPrivate::init [h,v]bar->setSingleStep) static const float cDefaultQtScrollStep = 20.f; -#ifndef QT_NO_WHEELEVENT m_deltaX *= (fullTick) ? QApplication::wheelScrollLines() * cDefaultQtScrollStep : 1; m_deltaY *= (fullTick) ? QApplication::wheelScrollLines() * cDefaultQtScrollStep : 1; #endif diff --git a/Source/WebCore/platform/win/DragDataWin.cpp b/Source/WebCore/platform/win/DragDataWin.cpp index 56345e2..906119d 100644 --- a/Source/WebCore/platform/win/DragDataWin.cpp +++ b/Source/WebCore/platform/win/DragDataWin.cpp @@ -27,6 +27,7 @@ #include "DragData.h" #include "ClipboardUtilitiesWin.h" +#include "Frame.h" #include "DocumentFragment.h" #include "PlatformString.h" #include "Markup.h" @@ -37,7 +38,7 @@ namespace WebCore { -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return SUCCEEDED(m_platformDragData->QueryGetData(urlWFormat())) || SUCCEEDED(m_platformDragData->QueryGetData(urlFormat())) @@ -46,7 +47,7 @@ bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const || SUCCEEDED(m_platformDragData->QueryGetData(filenameFormat())))); } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { bool success; return getURL(m_platformDragData, filenamePolicy, success, title); @@ -89,7 +90,7 @@ bool DragData::containsPlainText() const || SUCCEEDED(m_platformDragData->QueryGetData(plainTextFormat())); } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { bool success; return getPlainText(m_platformDragData, success); @@ -107,13 +108,13 @@ bool DragData::canSmartReplace() const bool DragData::containsCompatibleContent() const { - return containsPlainText() || containsURL() + return containsPlainText() || containsURL(0) || containsHTML(m_platformDragData) || containsFilenames(m_platformDragData) || containsColor(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const { /* * Order is richest format first. On OSX this is: @@ -126,11 +127,11 @@ PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const */ if (containsFilenames(m_platformDragData)) - if (PassRefPtr<DocumentFragment> fragment = fragmentFromFilenames(doc, m_platformDragData)) + if (PassRefPtr<DocumentFragment> fragment = fragmentFromFilenames(frame->document(), m_platformDragData)) return fragment; if (containsHTML(m_platformDragData)) - if (PassRefPtr<DocumentFragment> fragment = fragmentFromHTML(doc, m_platformDragData)) + if (PassRefPtr<DocumentFragment> fragment = fragmentFromHTML(frame->document(), m_platformDragData)) return fragment; return 0; diff --git a/Source/WebCore/platform/win/WebCoreTextRenderer.h b/Source/WebCore/platform/win/WebCoreTextRenderer.h index 7efc1f3..6deef4a 100644 --- a/Source/WebCore/platform/win/WebCoreTextRenderer.h +++ b/Source/WebCore/platform/win/WebCoreTextRenderer.h @@ -23,6 +23,9 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifndef WebCoreTextRenderer_h +#define WebCoreTextRenderer_h + #include <wtf/Forward.h> namespace WebCore { @@ -43,3 +46,5 @@ namespace WebCore { bool WebCoreAlwaysUsesComplexTextCodePath(); } // namespace WebCore + +#endif // WebCoreTextRenderer_h diff --git a/Source/WebCore/platform/wince/DragDataWinCE.cpp b/Source/WebCore/platform/wince/DragDataWinCE.cpp index 5535ea9..8f531c7 100644 --- a/Source/WebCore/platform/wince/DragDataWinCE.cpp +++ b/Source/WebCore/platform/wince/DragDataWinCE.cpp @@ -23,15 +23,16 @@ #include "DocumentFragment.h" #include "PlatformString.h" +#include "Range.h" namespace WebCore { -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return false; } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { return String(); } @@ -50,7 +51,7 @@ bool DragData::containsPlainText() const return false; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { return String(); } @@ -70,7 +71,7 @@ bool DragData::containsCompatibleContent() const return false; } -PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame* frame, PassRefPtr<Range>, bool, bool&) const { return 0; } diff --git a/Source/WebCore/platform/wx/DragDataWx.cpp b/Source/WebCore/platform/wx/DragDataWx.cpp index 35e3753..53b4219 100644 --- a/Source/WebCore/platform/wx/DragDataWx.cpp +++ b/Source/WebCore/platform/wx/DragDataWx.cpp @@ -55,7 +55,7 @@ bool DragData::containsPlainText() const return false; } -String DragData::asPlainText() const +String DragData::asPlainText(Frame*) const { return String(); } @@ -70,18 +70,18 @@ bool DragData::containsCompatibleContent() const return false; } -bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const +bool DragData::containsURL(Frame*, FilenameConversionPolicy filenamePolicy) const { return false; } -String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const +String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const { return String(); } -PassRefPtr<DocumentFragment> DragData::asFragment(Document*) const +PassRefPtr<DocumentFragment> DragData::asFragment(Frame*, PassRefPtr<Range>, bool, bool&) const { return 0; } diff --git a/Source/WebCore/platform/wx/WidgetWx.cpp b/Source/WebCore/platform/wx/WidgetWx.cpp index 9de4c3d..7591a5b 100644 --- a/Source/WebCore/platform/wx/WidgetWx.cpp +++ b/Source/WebCore/platform/wx/WidgetWx.cpp @@ -80,6 +80,10 @@ IntRect Widget::frameRect() const void Widget::setFrameRect(const IntRect& rect) { + // Take a reference to this Widget, because calling functions of the PlatformWidget can invoke arbitrary + // code, which can deref it. + RefPtr<Widget> protectedThis(this); + if (PlatformWidget widget = platformWidget()) widget->SetSize(rect); diff --git a/Source/WebCore/plugins/qt/PluginViewQt.cpp b/Source/WebCore/plugins/qt/PluginViewQt.cpp index fdbe552..6cf36e9 100644 --- a/Source/WebCore/plugins/qt/PluginViewQt.cpp +++ b/Source/WebCore/plugins/qt/PluginViewQt.cpp @@ -417,15 +417,14 @@ void setXKeyEventSpecificFields(XEvent* xEvent, KeyboardEvent* event) xEvent->xkey.keycode = keyEvent->nativeScanCode(); // We may not have a nativeScanCode() if the key event is from DRT's eventsender. In that - // case just populate the XEvent's keycode with the Qt platform-independent keycode. The only + // case fetch the XEvent's keycode from the event's text. The only // place this keycode will be used is in webkit_test_plugin_handle_event(). + // FIXME: Create Qt API so that we can set the appropriate keycode in DRT EventSender instead. if (QWebPagePrivate::drtRun && !xEvent->xkey.keycode) { QKeyEvent* qKeyEvent = keyEvent->qtEvent(); ASSERT(qKeyEvent); - if (!qKeyEvent->text().isEmpty()) - xEvent->xkey.keycode = int(qKeyEvent->text().at(0).unicode() + qKeyEvent->modifiers()); - else if (qKeyEvent->key() && (qKeyEvent->key() != Qt::Key_unknown)) - xEvent->xkey.keycode = int(qKeyEvent->key() + qKeyEvent->modifiers()); + QString keyText = qKeyEvent->text().left(1); + xEvent->xkey.keycode = XKeysymToKeycode(QX11Info::display(), XStringToKeysym(keyText.toUtf8().constData())); } xEvent->xkey.same_screen = true; diff --git a/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp b/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp index 7fca625..a14ac20 100644 --- a/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp +++ b/Source/WebCore/plugins/symbian/PluginPackageSymbian.cpp @@ -55,6 +55,7 @@ bool PluginPackage::fetchInfo() mime[1].split(UChar(','), false, exts); // <ext1,ext2,ext3,...> m_mimeToExtensions.add(mime[0], exts); // <MIME>,<ext1,ext2,ext3> + determineQuirks(mime[0]); if (mime.size() > 2) m_mimeToDescriptions.add(mime[0], mime[2]); // <MIME>,<Description> } @@ -63,6 +64,17 @@ bool PluginPackage::fetchInfo() return true; } +void PluginPackage::determineQuirks(const String& mimeType) +{ + if (mimeType == "application/x-shockwave-flash") { + PlatformModuleVersion flashTenVersion(0x000a0000); + if (compareFileVersion(flashTenVersion) >= 0) { + // Flash 10 doesn't like having a 0 window handle. + m_quirks.add(PluginQuirkDontSetNullWindowHandleOnDestroy); + } + } +} + bool PluginPackage::load() { if (m_isLoaded) { diff --git a/Source/WebCore/plugins/symbian/PluginViewSymbian.cpp b/Source/WebCore/plugins/symbian/PluginViewSymbian.cpp index b8a72b1..f3eb033 100644 --- a/Source/WebCore/plugins/symbian/PluginViewSymbian.cpp +++ b/Source/WebCore/plugins/symbian/PluginViewSymbian.cpp @@ -53,6 +53,8 @@ #include "npinterface.h" #include "npruntime_impl.h" #include "qgraphicswebview.h" +#include "qwebframe.h" +#include "qwebframe_p.h" #include "runtime_root.h" #include <QGraphicsProxyWidget> #include <QKeyEvent> @@ -63,6 +65,13 @@ #include <runtime/JSLock.h> #include <runtime/JSValue.h> +typedef void (*_qtwebkit_page_plugin_created)(QWebFrame*, void*, void*); // frame, plugin instance, plugin functions +static _qtwebkit_page_plugin_created qtwebkit_page_plugin_created = 0; +QWEBKIT_EXPORT void qtwebkit_setPluginCreatedCallback(_qtwebkit_page_plugin_created cb) +{ + qtwebkit_page_plugin_created = cb; +} + using JSC::ExecState; using JSC::Interpreter; using JSC::JSLock; @@ -278,8 +287,8 @@ void PluginView::setNPWindowIfNeeded() } else { // always call this method before painting. - m_npWindow.x = 0; - m_npWindow.y = 0; + m_npWindow.x = m_windowRect.x(); + m_npWindow.y = m_windowRect.y(); m_npWindow.clipRect.left = 0; m_npWindow.clipRect.top = 0; @@ -415,7 +424,10 @@ bool PluginView::platformStart() } updatePluginWidget(); setNPWindowIfNeeded(); - + + if (qtwebkit_page_plugin_created) + qtwebkit_page_plugin_created(QWebFramePrivate::kit(m_parentFrame.get()), m_instance, (void*)(m_plugin->pluginFuncs())); + return true; } diff --git a/Source/WebCore/rendering/CounterNode.cpp b/Source/WebCore/rendering/CounterNode.cpp index ac83d5a..fe2148a 100644 --- a/Source/WebCore/rendering/CounterNode.cpp +++ b/Source/WebCore/rendering/CounterNode.cpp @@ -247,9 +247,9 @@ static void showTreeAndMark(const CounterNode* node) root = root->parent(); for (const CounterNode* current = root; current; current = current->nextInPreOrder()) { - fwrite((current == node) ? "*" : " ", 1, 1, stderr); + fprintf(stderr, "%c", (current == node) ? '*' : ' '); for (const CounterNode* parent = current; parent && parent != root; parent = parent->parent()) - fwrite(" ", 1, 2, stderr); + fprintf(stderr, " "); fprintf(stderr, "%p %s: %d %d P:%p PS:%p NS:%p R:%p\n", current, current->actsAsReset() ? "reset____" : "increment", current->value(), current->countInParent(), current->parent(), current->previousSibling(), diff --git a/Source/WebCore/rendering/EllipsisBox.cpp b/Source/WebCore/rendering/EllipsisBox.cpp index f9c4f03..39fa205 100644 --- a/Source/WebCore/rendering/EllipsisBox.cpp +++ b/Source/WebCore/rendering/EllipsisBox.cpp @@ -23,6 +23,7 @@ #include "Document.h" #include "GraphicsContext.h" #include "HitTestResult.h" +#include "PaintInfo.h" #include "RootInlineBox.h" namespace WebCore { diff --git a/Source/WebCore/rendering/InlineBox.cpp b/Source/WebCore/rendering/InlineBox.cpp index 145096b..bbf5a748 100644 --- a/Source/WebCore/rendering/InlineBox.cpp +++ b/Source/WebCore/rendering/InlineBox.cpp @@ -22,6 +22,7 @@ #include "HitTestResult.h" #include "InlineFlowBox.h" +#include "PaintInfo.h" #include "RenderArena.h" #include "RenderBlock.h" #include "RootInlineBox.h" diff --git a/Source/WebCore/rendering/InlineFlowBox.h b/Source/WebCore/rendering/InlineFlowBox.h index 63263fd..232c3b7 100644 --- a/Source/WebCore/rendering/InlineFlowBox.h +++ b/Source/WebCore/rendering/InlineFlowBox.h @@ -23,6 +23,7 @@ #include "InlineBox.h" #include "RenderOverflow.h" +#include "ShadowData.h" namespace WebCore { diff --git a/Source/WebCore/rendering/InlineTextBox.cpp b/Source/WebCore/rendering/InlineTextBox.cpp index aa00b7f..ae5be0f 100644 --- a/Source/WebCore/rendering/InlineTextBox.cpp +++ b/Source/WebCore/rendering/InlineTextBox.cpp @@ -33,6 +33,7 @@ #include "GraphicsContext.h" #include "HitTestResult.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderArena.h" #include "RenderBlock.h" #include "RenderRubyRun.h" diff --git a/Source/WebCore/rendering/MediaControlElements.cpp b/Source/WebCore/rendering/MediaControlElements.cpp index accbf4f..1f66719 100644 --- a/Source/WebCore/rendering/MediaControlElements.cpp +++ b/Source/WebCore/rendering/MediaControlElements.cpp @@ -449,6 +449,12 @@ void MediaControlInputElement::attach() parentNode()->renderer()->addChild(renderer, sibling ? sibling->renderer() : 0); } ContainerNode::attach(); + // FIXME: Currently, MeidaControlInput circumvents the normal attachment + // and style recalc cycle and thus we need to add extra logic to be aware of + // the shadow DOM. Remove this once all media controls are transitioned to use the regular + // style calculation. + if (Node* shadowNode = shadowRoot()) + shadowNode->attach(); } void MediaControlInputElement::updateStyle() @@ -467,6 +473,13 @@ void MediaControlInputElement::updateStyle() attach(); else if (renderer()) renderer()->setStyle(style.get()); + + // FIXME: Currently, MeidaControlInput circumvents the normal attachment + // and style recalc cycle and thus we need to add extra logic to be aware of + // the shadow DOM. Remove this once all media controls are transitioned to use + // the new shadow DOM. + if (Node* shadowNode = shadowRoot()) + shadowNode->recalcStyle(Node::Force); } bool MediaControlInputElement::hitTest(const IntPoint& absPoint) diff --git a/Source/WebCore/rendering/RenderBlock.cpp b/Source/WebCore/rendering/RenderBlock.cpp index e0fe6a0..794bafc 100644 --- a/Source/WebCore/rendering/RenderBlock.cpp +++ b/Source/WebCore/rendering/RenderBlock.cpp @@ -35,6 +35,7 @@ #include "HTMLNames.h" #include "HitTestResult.h" #include "InlineTextBox.h" +#include "PaintInfo.h" #include "RenderFlexibleBox.h" #include "RenderImage.h" #include "RenderInline.h" @@ -116,6 +117,7 @@ RenderBlock::RenderBlock(Node* node) , m_positionedObjects(0) , m_rareData(0) , m_lineHeight(-1) + , m_beingDestroyed(false) { setChildrenInline(true); } @@ -150,6 +152,9 @@ RenderBlock::~RenderBlock() void RenderBlock::destroy() { + // Mark as being destroyed to avoid trouble with merges in removeChild(). + m_beingDestroyed = true; + // Make sure to destroy anonymous children first while they are still connected to the rest of the tree, so that they will // properly dirty line boxes that they are removed from. Effects that do :before/:after only on hover could crash otherwise. children()->destroyLeftoverChildren(); @@ -192,7 +197,7 @@ void RenderBlock::destroy() void RenderBlock::styleWillChange(StyleDifference diff, const RenderStyle* newStyle) { - setReplaced(newStyle->isDisplayReplacedType()); + setReplaced(newStyle->isDisplayInlineType()); if (style() && parent() && diff == StyleDifferenceLayout && style()->position() != newStyle->position()) { if (newStyle->position() == StaticPosition) @@ -930,8 +935,8 @@ static bool canMergeContiguousAnonymousBlocks(RenderObject* oldChild, RenderObje if (oldChild->documentBeingDestroyed() || oldChild->isInline() || oldChild->virtualContinuation()) return false; - if ((prev && (!prev->isAnonymousBlock() || toRenderBlock(prev)->continuation())) - || (next && (!next->isAnonymousBlock() || toRenderBlock(next)->continuation()))) + if ((prev && (!prev->isAnonymousBlock() || toRenderBlock(prev)->continuation() || toRenderBlock(prev)->beingDestroyed())) + || (next && (!next->isAnonymousBlock() || toRenderBlock(next)->continuation() || toRenderBlock(next)->beingDestroyed()))) return false; // FIXME: This check isn't required when inline run-ins can't be split into continuations. @@ -991,27 +996,12 @@ void RenderBlock::removeChild(RenderObject* oldChild) } else { // Take all the children out of the |next| block and put them in // the |prev| block. - nextBlock->moveAllChildrenTo(prevBlock, nextBlock->hasLayer() || prevBlock->hasLayer()); - - // FIXME: When we destroy nextBlock, it might happen that nextBlock's next sibling block and - // oldChild can get merged. Since oldChild is getting removed, we do not want to move - // nextBlock's next sibling block's children into it. By setting a fake continuation, - // we prevent this from happening. This is not the best approach, we should replace this - // something better later to automatically detect that oldChild is getting removed. - RenderBlock* oldChildBlock = 0; - if (oldChild->isAnonymous() && oldChild->isRenderBlock() && !toRenderBlock(oldChild)->continuation()) { - oldChildBlock = toRenderBlock(oldChild); - oldChildBlock->setContinuation(oldChildBlock); - } + nextBlock->moveAllChildrenTo(prevBlock, nextBlock->hasLayer() || prevBlock->hasLayer()); // Delete the now-empty block's lines and nuke it. nextBlock->deleteLineBoxTree(); nextBlock->destroy(); next = 0; - - // FIXME: Revert the continuation change done above. - if (oldChildBlock) - oldChildBlock->setContinuation(0); } } diff --git a/Source/WebCore/rendering/RenderBlock.h b/Source/WebCore/rendering/RenderBlock.h index bd8be2c..9529bd6 100644 --- a/Source/WebCore/rendering/RenderBlock.h +++ b/Source/WebCore/rendering/RenderBlock.h @@ -38,6 +38,7 @@ class LayoutStateMaintainer; class RenderInline; struct BidiRun; +struct PaintInfo; template <class Iterator, class Run> class BidiResolver; template <class Iterator> struct MidpointState; @@ -55,6 +56,7 @@ public: RenderObjectChildList* children() { return &m_children; } virtual void destroy(); + bool beingDestroyed() const { return m_beingDestroyed; } // These two functions are overridden for inline-block. virtual int lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const; @@ -712,7 +714,8 @@ private: RenderObjectChildList m_children; RenderLineBoxList m_lineBoxes; // All of the root line boxes created for this block flow. For example, <div>Hello<br>world.</div> will have two total lines for the <div>. - mutable int m_lineHeight; + mutable int m_lineHeight : 31; + bool m_beingDestroyed : 1; // RenderRubyBase objects need to be able to split and merge, moving their children around // (calling moveChildTo, moveAllChildrenTo, and makeChildrenNonInline). diff --git a/Source/WebCore/rendering/RenderBox.cpp b/Source/WebCore/rendering/RenderBox.cpp index 355d385..93228e1 100644 --- a/Source/WebCore/rendering/RenderBox.cpp +++ b/Source/WebCore/rendering/RenderBox.cpp @@ -39,9 +39,13 @@ #include "FloatQuad.h" #include "Frame.h" #include "Page.h" +<<<<<<< HEAD #if PLATFORM(ANDROID) #include "PlatformBridge.h" #endif +======= +#include "PaintInfo.h" +>>>>>>> WebKit.org @ r75993 #include "RenderArena.h" #include "RenderFlexibleBox.h" #include "RenderInline.h" @@ -227,26 +231,30 @@ void RenderBox::removeFloatingOrPositionedChildFromBlockLists() return; if (isFloating()) { - RenderBlock* outermostBlock = containingBlock(); - for (RenderBlock* p = outermostBlock; p && !p->isRenderView(); p = p->containingBlock()) { - if (p->containsFloat(this)) - outermostBlock = p; + RenderBlock* parentBlock = 0; + for (RenderObject* curr = parent(); curr && !curr->isRenderView(); curr = curr->parent()) { + if (curr->isRenderBlock()) { + RenderBlock* currBlock = toRenderBlock(curr); + if (currBlock->containsFloat(this)) + parentBlock = currBlock; + else + break; + } } - if (outermostBlock) { - RenderObject* parent = outermostBlock->parent(); + if (parentBlock) { + RenderObject* parent = parentBlock->parent(); if (parent && parent->isFlexibleBox()) - outermostBlock = toRenderBlock(parent); + parentBlock = toRenderBlock(parent); - outermostBlock->markAllDescendantsWithFloatsForLayout(this, false); + parentBlock->markAllDescendantsWithFloatsForLayout(this, false); } } if (isPositioned()) { - RenderObject* p; - for (p = parent(); p; p = p->parent()) { - if (p->isRenderBlock()) - toRenderBlock(p)->removePositionedObject(this); + for (RenderObject* curr = parent(); curr; curr = curr->parent()) { + if (curr->isRenderBlock()) + toRenderBlock(curr)->removePositionedObject(this); } } } diff --git a/Source/WebCore/rendering/RenderBox.h b/Source/WebCore/rendering/RenderBox.h index 53a4cfe..0a7b175 100644 --- a/Source/WebCore/rendering/RenderBox.h +++ b/Source/WebCore/rendering/RenderBox.h @@ -29,6 +29,8 @@ namespace WebCore { +struct PaintInfo; + enum LogicalWidthType { LogicalWidth, MinLogicalWidth, MaxLogicalWidth }; class RenderBox : public RenderBoxModelObject { diff --git a/Source/WebCore/rendering/RenderBoxModelObject.h b/Source/WebCore/rendering/RenderBoxModelObject.h index 98e386b..8f9f465 100644 --- a/Source/WebCore/rendering/RenderBoxModelObject.h +++ b/Source/WebCore/rendering/RenderBoxModelObject.h @@ -25,6 +25,7 @@ #define RenderBoxModelObject_h #include "RenderObject.h" +#include "ShadowData.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderButton.cpp b/Source/WebCore/rendering/RenderButton.cpp index 2642f23..4bf7c19 100644 --- a/Source/WebCore/rendering/RenderButton.cpp +++ b/Source/WebCore/rendering/RenderButton.cpp @@ -92,7 +92,6 @@ void RenderButton::styleDidChange(StyleDifference diff, const RenderStyle* oldSt m_buttonText->setStyle(style()); if (m_inner) // RenderBlock handled updating the anonymous block's style. setupInnerStyle(m_inner->style()); - setReplaced(isInline()); if (!m_default && theme()->isDefault(this)) { if (!m_timer) diff --git a/Source/WebCore/rendering/RenderEmbeddedObject.cpp b/Source/WebCore/rendering/RenderEmbeddedObject.cpp index fa31ddf..ac72fe1 100644 --- a/Source/WebCore/rendering/RenderEmbeddedObject.cpp +++ b/Source/WebCore/rendering/RenderEmbeddedObject.cpp @@ -41,6 +41,7 @@ #include "MIMETypeRegistry.h" #include "MouseEvent.h" #include "Page.h" +#include "PaintInfo.h" #include "Path.h" #include "PluginViewBase.h" #include "RenderTheme.h" diff --git a/Source/WebCore/rendering/RenderFieldset.cpp b/Source/WebCore/rendering/RenderFieldset.cpp index c83396c..8c65314 100644 --- a/Source/WebCore/rendering/RenderFieldset.cpp +++ b/Source/WebCore/rendering/RenderFieldset.cpp @@ -25,8 +25,9 @@ #include "RenderFieldset.h" #include "CSSPropertyNames.h" -#include "HTMLNames.h" #include "GraphicsContext.h" +#include "HTMLNames.h" +#include "PaintInfo.h" #if ENABLE(WML) #include "WMLNames.h" @@ -208,16 +209,4 @@ void RenderFieldset::paintMask(PaintInfo& paintInfo, int tx, int ty) paintMaskImages(paintInfo, tx, ty, w, h); } -void RenderFieldset::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) -{ - RenderBlock::styleDidChange(diff, oldStyle); - - // WinIE renders fieldsets with display:inline like they're inline-blocks. For us, - // an inline-block is just a block element with replaced set to true and inline set - // to true. Ensure that if we ended up being inline that we set our replaced flag - // so that we're treated like an inline-block. - if (isInline()) - setReplaced(true); -} - } // namespace WebCore diff --git a/Source/WebCore/rendering/RenderFieldset.h b/Source/WebCore/rendering/RenderFieldset.h index b340794..267f352 100644 --- a/Source/WebCore/rendering/RenderFieldset.h +++ b/Source/WebCore/rendering/RenderFieldset.h @@ -44,8 +44,6 @@ private: virtual bool avoidsFloats() const { return true; } virtual bool stretchesToMinIntrinsicLogicalWidth() const { return true; } - virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); - virtual void paintBoxDecorations(PaintInfo&, int tx, int ty); virtual void paintMask(PaintInfo&, int tx, int ty); }; diff --git a/Source/WebCore/rendering/RenderFileUploadControl.cpp b/Source/WebCore/rendering/RenderFileUploadControl.cpp index 3c10f43..3e4d216 100644 --- a/Source/WebCore/rendering/RenderFileUploadControl.cpp +++ b/Source/WebCore/rendering/RenderFileUploadControl.cpp @@ -32,6 +32,7 @@ #include "Icon.h" #include "LocalizedStrings.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderButton.h" #include "RenderText.h" #include "RenderTheme.h" @@ -74,8 +75,6 @@ void RenderFileUploadControl::styleDidChange(StyleDifference diff, const RenderS RenderBlock::styleDidChange(diff, oldStyle); if (m_button) m_button->renderer()->setStyle(createButtonStyle(style())); - - setReplaced(isInline()); } void RenderFileUploadControl::valueChanged() diff --git a/Source/WebCore/rendering/RenderFrameSet.cpp b/Source/WebCore/rendering/RenderFrameSet.cpp index 600d65e..06b2a7a 100644 --- a/Source/WebCore/rendering/RenderFrameSet.cpp +++ b/Source/WebCore/rendering/RenderFrameSet.cpp @@ -34,6 +34,7 @@ #include "HitTestRequest.h" #include "HitTestResult.h" #include "MouseEvent.h" +#include "PaintInfo.h" #include "RenderFrame.h" #include "RenderView.h" #include "Settings.h" diff --git a/Source/WebCore/rendering/RenderFullScreen.cpp b/Source/WebCore/rendering/RenderFullScreen.cpp index 7cd452f..cc53a6e 100644 --- a/Source/WebCore/rendering/RenderFullScreen.cpp +++ b/Source/WebCore/rendering/RenderFullScreen.cpp @@ -35,7 +35,7 @@ using namespace WebCore; void RenderFullScreen::setAnimating(bool animating) { m_isAnimating = animating; -#if ENABLE(ACCELERATED_COMPOSITING) +#if USE(ACCELERATED_COMPOSITING) if (layer()) layer()->contentChanged(RenderLayer::FullScreenChanged); #endif diff --git a/Source/WebCore/rendering/RenderFullScreen.h b/Source/WebCore/rendering/RenderFullScreen.h index 52d4ee2..30f95c1 100644 --- a/Source/WebCore/rendering/RenderFullScreen.h +++ b/Source/WebCore/rendering/RenderFullScreen.h @@ -33,7 +33,7 @@ namespace WebCore { class RenderFullScreen : public RenderFlexibleBox { public: - RenderFullScreen(Node* node) : RenderFlexibleBox(node) { setReplaced(false); setIsAnonymous(false); } + RenderFullScreen(Node* node) : RenderFlexibleBox(node) { setReplaced(false); } virtual bool isRenderFullScreen() const { return true; } virtual const char* renderName() const { return "RenderFullScreen"; } diff --git a/Source/WebCore/rendering/RenderHTMLCanvas.cpp b/Source/WebCore/rendering/RenderHTMLCanvas.cpp index 68bb536..de2a2c1 100644 --- a/Source/WebCore/rendering/RenderHTMLCanvas.cpp +++ b/Source/WebCore/rendering/RenderHTMLCanvas.cpp @@ -28,11 +28,12 @@ #include "CanvasRenderingContext.h" #include "Document.h" +#include "FrameView.h" #include "GraphicsContext.h" #include "HTMLCanvasElement.h" #include "HTMLNames.h" +#include "PaintInfo.h" #include "RenderView.h" -#include "FrameView.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderImageResource.cpp b/Source/WebCore/rendering/RenderImageResource.cpp index ea3ed2f..a943c3d 100644 --- a/Source/WebCore/rendering/RenderImageResource.cpp +++ b/Source/WebCore/rendering/RenderImageResource.cpp @@ -28,6 +28,7 @@ #include "config.h" #include "RenderImageResource.h" +#include "Image.h" #include "RenderImageResourceStyleImage.h" #include "RenderObject.h" diff --git a/Source/WebCore/rendering/RenderInputSpeech.cpp b/Source/WebCore/rendering/RenderInputSpeech.cpp index 5472025..8a1e73f 100644 --- a/Source/WebCore/rendering/RenderInputSpeech.cpp +++ b/Source/WebCore/rendering/RenderInputSpeech.cpp @@ -35,6 +35,7 @@ #include "GraphicsContext.h" #include "HTMLNames.h" +#include "PaintInfo.h" #include "RenderBox.h" #include "TextControlInnerElements.h" diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp index 5623662..3613d95 100644 --- a/Source/WebCore/rendering/RenderLayer.cpp +++ b/Source/WebCore/rendering/RenderLayer.cpp @@ -51,7 +51,7 @@ #include "Chrome.h" #include "Document.h" #include "EventHandler.h" -#include "EventNames.h" +#include "EventQueue.h" #include "FloatPoint3D.h" #include "FloatRect.h" #include "FocusController.h" @@ -1413,10 +1413,7 @@ void RenderLayer::scrollToOffset(int x, int y, bool updateScrollbars, bool repai } // Schedule the scroll DOM event. - if (view) { - if (FrameView* frameView = view->frameView()) - frameView->scheduleEvent(Event::create(eventNames().scrollEvent, false, false), renderer()->node()); - } + renderer()->node()->document()->eventQueue()->enqueueScrollEvent(renderer()->node(), EventQueue::ScrollEventElementTarget); } void RenderLayer::scrollRectToVisible(const IntRect& rect, bool scrollToAnchor, const ScrollAlignment& alignX, const ScrollAlignment& alignY) @@ -2744,7 +2741,7 @@ bool RenderLayer::hitTest(const HitTestRequest& request, HitTestResult& result) { renderer()->document()->updateLayout(); - IntRect hitTestArea = result.rectForPoint(result.point()); + IntRect hitTestArea = renderer()->view()->documentRect(); if (!request.ignoreClipping()) hitTestArea.intersect(frameVisibleRect(renderer())); @@ -3575,6 +3572,16 @@ bool RenderLayer::hasCompositedMask() const } #endif +bool RenderLayer::paintsWithTransform(PaintBehavior paintBehavior) const +{ +#if USE(ACCELERATED_COMPOSITING) + bool paintsToWindow = !isComposited() || backing()->paintingGoesToWindow(); +#else + bool paintsToWindow = true; +#endif + return transform() && ((paintBehavior & PaintBehaviorFlattenCompositingLayers) || paintsToWindow); +} + void RenderLayer::setParent(RenderLayer* parent) { if (parent == m_parent) @@ -4035,6 +4042,14 @@ void RenderLayer::updateReflectionStyle() m_reflection->setStyle(newStyle.release()); } +void RenderLayer::updateContentsScale(float scale) +{ +#if USE(ACCELERATED_COMPOSITING) + if (m_backing) + m_backing->updateContentsScale(scale); +#endif +} + } // namespace WebCore #ifndef NDEBUG diff --git a/Source/WebCore/rendering/RenderLayer.h b/Source/WebCore/rendering/RenderLayer.h index cc3b21c..8245c2f 100644 --- a/Source/WebCore/rendering/RenderLayer.h +++ b/Source/WebCore/rendering/RenderLayer.h @@ -44,6 +44,7 @@ #ifndef RenderLayer_h #define RenderLayer_h +#include "PaintInfo.h" #include "RenderBox.h" #include "ScrollBehavior.h" #include "ScrollbarClient.h" @@ -488,10 +489,7 @@ public: return isTransparent() && ((paintBehavior & PaintBehaviorFlattenCompositingLayers) || !isComposited()); } - bool paintsWithTransform(PaintBehavior paintBehavior) const - { - return transform() && ((paintBehavior & PaintBehaviorFlattenCompositingLayers) || !isComposited()); - } + bool paintsWithTransform(PaintBehavior) const; private: // The normal operator new is disallowed on all render objects. @@ -621,6 +619,8 @@ private: void setMustOverlapCompositedLayers(bool b) { m_mustOverlapCompositedLayers = b; } #endif + void updateContentsScale(float); + private: friend class RenderLayerBacking; friend class RenderLayerCompositor; diff --git a/Source/WebCore/rendering/RenderLayerBacking.cpp b/Source/WebCore/rendering/RenderLayerBacking.cpp index c430bae..8001c42 100644 --- a/Source/WebCore/rendering/RenderLayerBacking.cpp +++ b/Source/WebCore/rendering/RenderLayerBacking.cpp @@ -105,6 +105,12 @@ void RenderLayerBacking::createGraphicsLayer() m_graphicsLayer->setName(nameForLayer()); #endif // NDEBUG +#if USE(ACCELERATED_COMPOSITING) + ASSERT(renderer() && renderer()->document() && renderer()->document()->frame()); + if (Frame* frame = renderer()->document()->frame()) + m_graphicsLayer->setContentsScale(frame->pageScaleFactor()); +#endif + updateLayerOpacity(renderer()->style()); updateLayerTransform(renderer()->style()); } @@ -543,6 +549,8 @@ bool RenderLayerBacking::updateForegroundLayer(bool needsForegroundLayer) #endif m_foregroundLayer->setDrawsContent(true); m_foregroundLayer->setPaintingPhase(GraphicsLayerPaintForeground); + if (Frame* frame = renderer()->document()->frame()) + m_foregroundLayer->setContentsScale(frame->pageScaleFactor()); layerChanged = true; } } else if (m_foregroundLayer) { @@ -568,6 +576,8 @@ bool RenderLayerBacking::updateMaskLayer(bool needsMaskLayer) #endif m_maskLayer->setDrawsContent(true); m_maskLayer->setPaintingPhase(GraphicsLayerPaintMask); + if (Frame* frame = renderer()->document()->frame()) + m_maskLayer->setContentsScale(frame->pageScaleFactor()); layerChanged = true; } } else if (m_maskLayer) { @@ -933,7 +943,7 @@ FloatPoint RenderLayerBacking::contentsToGraphicsLayerCoordinates(const Graphics bool RenderLayerBacking::paintingGoesToWindow() const { if (m_owningLayer->isRootLayer()) - return !m_owningLayer->hasTransform() && (compositor()->rootLayerAttachment() != RenderLayerCompositor::RootLayerAttachedViaEnclosingIframe); + return compositor()->rootLayerAttachment() != RenderLayerCompositor::RootLayerAttachedViaEnclosingIframe; return false; } @@ -1275,7 +1285,7 @@ void RenderLayerBacking::notifyAnimationStarted(const GraphicsLayer*, double tim void RenderLayerBacking::notifySyncRequired(const GraphicsLayer*) { if (!renderer()->documentBeingDestroyed()) - compositor()->scheduleSync(); + compositor()->scheduleLayerFlush(); } // This is used for the 'freeze' API, for testing only. @@ -1361,6 +1371,18 @@ CompositingLayerType RenderLayerBacking::compositingLayerType() const return ContainerCompositingLayer; } +void RenderLayerBacking::updateContentsScale(float scale) +{ + if (m_graphicsLayer) + m_graphicsLayer->setContentsScale(scale); + + if (m_foregroundLayer) + m_foregroundLayer->setContentsScale(scale); + + if (m_maskLayer) + m_maskLayer->setContentsScale(scale); +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/rendering/RenderLayerBacking.h b/Source/WebCore/rendering/RenderLayerBacking.h index c5489f3..5c6ed12 100644 --- a/Source/WebCore/rendering/RenderLayerBacking.h +++ b/Source/WebCore/rendering/RenderLayerBacking.h @@ -139,6 +139,8 @@ public: // For informative purposes only. CompositingLayerType compositingLayerType() const; + void updateContentsScale(float); + private: void createGraphicsLayer(); void destroyGraphicsLayer(); diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp index 960aa37..15bb8ec 100644 --- a/Source/WebCore/rendering/RenderLayerCompositor.cpp +++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp @@ -176,7 +176,7 @@ void RenderLayerCompositor::setCompositingLayersNeedRebuild(bool needRebuild) m_compositingLayersNeedRebuild = needRebuild; } -void RenderLayerCompositor::scheduleSync() +void RenderLayerCompositor::scheduleLayerFlush() { Frame* frame = m_renderView->frameView()->frame(); Page* page = frame ? frame->page() : 0; @@ -186,6 +186,16 @@ void RenderLayerCompositor::scheduleSync() page->chrome()->client()->scheduleCompositingLayerSync(); } +void RenderLayerCompositor::flushPendingLayerChanges() +{ + // FIXME: FrameView::syncCompositingStateRecursive() calls this for each + // frame, so when compositing layers are connected between frames, we'll + // end up syncing subframe's layers multiple times. + // https://bugs.webkit.org/show_bug.cgi?id=52489 + if (GraphicsLayer* rootLayer = rootPlatformLayer()) + rootLayer->syncCompositingState(); +} + void RenderLayerCompositor::scheduleCompositingLayerUpdate() { if (!m_updateCompositingLayersTimer.isActive()) @@ -1171,7 +1181,12 @@ bool RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame() const return true; // On Mac, only propagate compositing if the iframe is overlapped in the parent - // document, or the parent is already compositing. + // document, or the parent is already compositing, or the main frame is scaled. + Frame* frame = m_renderView->frameView()->frame(); + Page* page = frame ? frame->page() : 0; + if (page->mainFrame()->pageScaleFactor() != 1) + return true; + RenderIFrame* iframeRenderer = toRenderIFrame(renderer); if (iframeRenderer->widget()) { ASSERT(iframeRenderer->widget()->isFrameView()); @@ -1663,6 +1678,34 @@ bool RenderLayerCompositor::layerHas3DContent(const RenderLayer* layer) const return false; } +void RenderLayerCompositor::updateContentsScale(float scale, RenderLayer* layer) +{ + if (!layer) + layer = rootRenderLayer(); + + layer->updateContentsScale(scale); + + if (layer->isStackingContext()) { + if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) { + size_t listSize = negZOrderList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, negZOrderList->at(i)); + } + + if (Vector<RenderLayer*>* posZOrderList = layer->posZOrderList()) { + size_t listSize = posZOrderList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, posZOrderList->at(i)); + } + } + + if (Vector<RenderLayer*>* normalFlowList = layer->normalFlowList()) { + size_t listSize = normalFlowList->size(); + for (size_t i = 0; i < listSize; ++i) + updateContentsScale(scale, normalFlowList->at(i)); + } +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/rendering/RenderLayerCompositor.h b/Source/WebCore/rendering/RenderLayerCompositor.h index 53a0f9a..24e182c 100644 --- a/Source/WebCore/rendering/RenderLayerCompositor.h +++ b/Source/WebCore/rendering/RenderLayerCompositor.h @@ -84,7 +84,10 @@ public: void setCompositingConsultsOverlap(bool b) { m_compositingConsultsOverlap = b; } bool compositingConsultsOverlap() const { return m_compositingConsultsOverlap; } - void scheduleSync(); + // GraphicsLayers buffer state, which gets pushed to the underlying platform layers + // at specific times. + void scheduleLayerFlush(); + void flushPendingLayerChanges(); // Rebuild the tree of compositing layers void updateCompositingLayers(CompositingUpdateType = CompositingUpdateAfterLayoutOrStyleChange, RenderLayer* updateRoot = 0); @@ -174,10 +177,12 @@ public: bool compositorShowDebugBorders() const { return m_showDebugBorders; } bool compositorShowRepaintCounter() const { return m_showRepaintCounter; } + void updateContentsScale(float, RenderLayer* = 0); + private: // GraphicsLayerClient Implementation virtual void notifyAnimationStarted(const GraphicsLayer*, double) { } - virtual void notifySyncRequired(const GraphicsLayer*) { scheduleSync(); } + virtual void notifySyncRequired(const GraphicsLayer*) { scheduleLayerFlush(); } virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect&) { } // These calls return false always. They are saying that the layers associated with this client diff --git a/Source/WebCore/rendering/RenderLineBoxList.cpp b/Source/WebCore/rendering/RenderLineBoxList.cpp index 85d7f18..1488ecc 100644 --- a/Source/WebCore/rendering/RenderLineBoxList.cpp +++ b/Source/WebCore/rendering/RenderLineBoxList.cpp @@ -31,6 +31,7 @@ #include "HitTestResult.h" #include "InlineTextBox.h" +#include "PaintInfo.h" #include "RenderArena.h" #include "RenderInline.h" #include "RenderView.h" diff --git a/Source/WebCore/rendering/RenderListBox.cpp b/Source/WebCore/rendering/RenderListBox.cpp index ed7f8ee..e6ce340 100644 --- a/Source/WebCore/rendering/RenderListBox.cpp +++ b/Source/WebCore/rendering/RenderListBox.cpp @@ -36,7 +36,7 @@ #include "CSSStyleSelector.h" #include "Document.h" #include "EventHandler.h" -#include "EventNames.h" +#include "EventQueue.h" #include "FocusController.h" #include "Frame.h" #include "FrameView.h" @@ -46,6 +46,7 @@ #include "OptionGroupElement.h" #include "OptionElement.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderScrollbar.h" #include "RenderTheme.h" #include "RenderView.h" @@ -87,12 +88,6 @@ RenderListBox::~RenderListBox() setHasVerticalScrollbar(false); } -void RenderListBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) -{ - RenderBlock::styleDidChange(diff, oldStyle); - setReplaced(isInline()); -} - void RenderListBox::updateFromElement() { if (m_optionsChanged) { @@ -545,7 +540,7 @@ void RenderListBox::valueChanged(Scrollbar*) if (newOffset != m_indexOffset) { m_indexOffset = newOffset; repaint(); - node()->dispatchEvent(Event::create(eventNames().scrollEvent, false, false)); + node()->document()->eventQueue()->enqueueScrollEvent(node(), EventQueue::ScrollEventElementTarget); } } diff --git a/Source/WebCore/rendering/RenderListBox.h b/Source/WebCore/rendering/RenderListBox.h index 1fbff0d..243fcbe 100644 --- a/Source/WebCore/rendering/RenderListBox.h +++ b/Source/WebCore/rendering/RenderListBox.h @@ -94,8 +94,6 @@ private: virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); - virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); - // ScrollbarClient interface. virtual int scrollSize(ScrollbarOrientation orientation) const; virtual void setScrollOffsetFromAnimation(const IntPoint&); diff --git a/Source/WebCore/rendering/RenderMediaControlsChromium.cpp b/Source/WebCore/rendering/RenderMediaControlsChromium.cpp index f938a52..71fca91 100644 --- a/Source/WebCore/rendering/RenderMediaControlsChromium.cpp +++ b/Source/WebCore/rendering/RenderMediaControlsChromium.cpp @@ -32,6 +32,7 @@ #include "GraphicsContext.h" #include "HTMLMediaElement.h" #include "HTMLNames.h" +#include "PaintInfo.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderMenuList.cpp b/Source/WebCore/rendering/RenderMenuList.cpp index 5ad661f..61f1084 100644 --- a/Source/WebCore/rendering/RenderMenuList.cpp +++ b/Source/WebCore/rendering/RenderMenuList.cpp @@ -123,8 +123,6 @@ void RenderMenuList::styleDidChange(StyleDifference diff, const RenderStyle* old if (m_innerBlock) // RenderBlock handled updating the anonymous block's style. adjustInnerStyle(); - setReplaced(isInline()); - bool fontChanged = !oldStyle || oldStyle->font() != style()->font(); if (fontChanged) updateOptionsWidth(); diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp index 27a53d0..670f818 100644 --- a/Source/WebCore/rendering/RenderObject.cpp +++ b/Source/WebCore/rendering/RenderObject.cpp @@ -28,8 +28,9 @@ #include "RenderObject.h" #include "AXObjectCache.h" -#include "Chrome.h" #include "CSSStyleSelector.h" +#include "Chrome.h" +#include "ContentData.h" #include "DashArray.h" #include "EditingBoundary.h" #include "FloatQuad.h" diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h index 2f443ef..cf08a0d 100644 --- a/Source/WebCore/rendering/RenderObject.h +++ b/Source/WebCore/rendering/RenderObject.h @@ -28,11 +28,10 @@ #include "AffineTransform.h" #include "CachedResourceClient.h" -#include "CSSPrimitiveValue.h" #include "Document.h" #include "Element.h" #include "FloatQuad.h" -#include "PaintInfo.h" +#include "PaintPhase.h" #include "RenderObjectChildList.h" #include "RenderStyle.h" #include "TextAffinity.h" @@ -64,6 +63,8 @@ class VisiblePosition; class RenderSVGResourceContainer; #endif +struct PaintInfo; + enum HitTestFilter { HitTestAll, HitTestSelf, diff --git a/Source/WebCore/rendering/RenderObjectChildList.cpp b/Source/WebCore/rendering/RenderObjectChildList.cpp index c7c8e44..fa4f902 100644 --- a/Source/WebCore/rendering/RenderObjectChildList.cpp +++ b/Source/WebCore/rendering/RenderObjectChildList.cpp @@ -28,6 +28,7 @@ #include "RenderObjectChildList.h" #include "AXObjectCache.h" +#include "ContentData.h" #include "RenderBlock.h" #include "RenderCounter.h" #include "RenderImage.h" diff --git a/Source/WebCore/rendering/RenderProgress.cpp b/Source/WebCore/rendering/RenderProgress.cpp index 84de6fb..4194e2b 100644 --- a/Source/WebCore/rendering/RenderProgress.cpp +++ b/Source/WebCore/rendering/RenderProgress.cpp @@ -26,6 +26,7 @@ #include "HTMLNames.h" #include "HTMLProgressElement.h" +#include "PaintInfo.h" #include "RenderTheme.h" #include "ShadowElement.h" #include <wtf/CurrentTime.h> diff --git a/Source/WebCore/rendering/RenderSVGTransformableContainer.h b/Source/WebCore/rendering/RenderSVGTransformableContainer.h deleted file mode 100644 index b49a403..0000000 --- a/Source/WebCore/rendering/RenderSVGTransformableContainer.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright (C) 2007 Eric Seidel <eric@webkit.org> - 2009 Google, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - */ - -#ifndef RenderSVGTransformableContainer_h -#define RenderSVGTransformableContainer_h - -#if ENABLE(SVG) -#include "RenderSVGContainer.h" - -namespace WebCore { - - class SVGStyledTransformableElement; - class RenderSVGTransformableContainer : public RenderSVGContainer { - public: - explicit RenderSVGTransformableContainer(SVGStyledTransformableElement*); - - virtual const AffineTransform& localToParentTransform() const { return m_localTransform; } - virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; } - - private: - virtual bool calculateLocalTransform(); - virtual AffineTransform localTransform() const { return m_localTransform; } - - bool m_needsTransformUpdate : 1; - AffineTransform m_localTransform; - }; -} - -#endif // ENABLE(SVG) -#endif // RenderSVGTransformableContainer_h diff --git a/Source/WebCore/rendering/RenderScrollbarPart.cpp b/Source/WebCore/rendering/RenderScrollbarPart.cpp index 16cc204..9cf55fc 100644 --- a/Source/WebCore/rendering/RenderScrollbarPart.cpp +++ b/Source/WebCore/rendering/RenderScrollbarPart.cpp @@ -25,6 +25,8 @@ #include "config.h" #include "RenderScrollbarPart.h" + +#include "PaintInfo.h" #include "RenderScrollbar.h" #include "RenderScrollbarTheme.h" #include "RenderView.h" diff --git a/Source/WebCore/rendering/RenderSlider.cpp b/Source/WebCore/rendering/RenderSlider.cpp index b73a1ac..b0dc0d9 100644 --- a/Source/WebCore/rendering/RenderSlider.cpp +++ b/Source/WebCore/rendering/RenderSlider.cpp @@ -22,6 +22,7 @@ #include "RenderSlider.h" #include "CSSPropertyNames.h" +#include "CSSStyleSelector.h" #include "Document.h" #include "Event.h" #include "EventHandler.h" @@ -60,8 +61,6 @@ RenderSlider::RenderSlider(HTMLInputElement* element) RenderSlider::~RenderSlider() { - if (m_thumb) - m_thumb->detach(); } int RenderSlider::baselinePosition(FontBaseline, bool /*firstLine*/, LineDirectionMode, LinePositionMode) const @@ -100,50 +99,14 @@ void RenderSlider::computePreferredLogicalWidths() setPreferredLogicalWidthsDirty(false); } -void RenderSlider::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) -{ - RenderBlock::styleDidChange(diff, oldStyle); - - if (m_thumb) - m_thumb->renderer()->setStyle(createThumbStyle(style())); - - setReplaced(isInline()); -} - -PassRefPtr<RenderStyle> RenderSlider::createThumbStyle(const RenderStyle* parentStyle) -{ - RefPtr<RenderStyle> style; - RenderStyle* pseudoStyle = getCachedPseudoStyle(SLIDER_THUMB); - if (pseudoStyle) - // We may be sharing style with another slider, but we must not share the thumb style. - style = RenderStyle::clone(pseudoStyle); - else - style = RenderStyle::create(); - - if (parentStyle) - style->inheritFrom(parentStyle); - - style->setDisplay(BLOCK); - - if (parentStyle->appearance() == SliderVerticalPart) - style->setAppearance(SliderThumbVerticalPart); - else if (parentStyle->appearance() == SliderHorizontalPart) - style->setAppearance(SliderThumbHorizontalPart); - else if (parentStyle->appearance() == MediaSliderPart) - style->setAppearance(MediaSliderThumbPart); - else if (parentStyle->appearance() == MediaVolumeSliderPart) - style->setAppearance(MediaVolumeSliderThumbPart); - - return style.release(); -} - IntRect RenderSlider::thumbRect() { - if (!m_thumb) + SliderThumbElement* thumbElement = sliderThumbElement(); + if (!thumbElement) return IntRect(); IntRect thumbRect; - RenderBox* thumb = toRenderBox(m_thumb->renderer()); + RenderBox* thumb = toRenderBox(thumbElement->renderer()); thumbRect.setWidth(thumb->style()->width().calcMinValue(contentWidth())); thumbRect.setHeight(thumb->style()->height().calcMinValue(contentHeight())); @@ -165,7 +128,8 @@ void RenderSlider::layout() { ASSERT(needsLayout()); - RenderBox* thumb = m_thumb ? toRenderBox(m_thumb->renderer()) : 0; + SliderThumbElement* thumbElement = sliderThumbElement(); + RenderBox* thumb = thumbElement ? toRenderBox(thumbElement->renderer()) : 0; IntSize baseSize(borderAndPaddingWidth(), borderAndPaddingHeight()); @@ -212,43 +176,35 @@ void RenderSlider::layout() setNeedsLayout(false); } -void RenderSlider::updateFromElement() +SliderThumbElement* RenderSlider::sliderThumbElement() const { - // Layout will take care of the thumb's size and position. - if (!m_thumb) { - m_thumb = SliderThumbElement::create(static_cast<HTMLElement*>(node())); - RefPtr<RenderStyle> thumbStyle = createThumbStyle(style()); - m_thumb->setRenderer(m_thumb->createRenderer(renderArena(), thumbStyle.get())); - m_thumb->renderer()->setStyle(thumbStyle.release()); - m_thumb->setAttached(); - m_thumb->setInDocument(); - addChild(m_thumb->renderer()); - } - setNeedsLayout(true); + return toSliderThumbElement(static_cast<Element*>(node())->shadowRoot()); } bool RenderSlider::mouseEventIsInThumb(MouseEvent* evt) { - if (!m_thumb || !m_thumb->renderer()) + SliderThumbElement* thumbElement = sliderThumbElement(); + if (!thumbElement || !thumbElement->renderer()) return false; #if ENABLE(VIDEO) if (style()->appearance() == MediaSliderPart || style()->appearance() == MediaVolumeSliderPart) { - MediaControlInputElement *sliderThumb = static_cast<MediaControlInputElement*>(m_thumb->renderer()->node()); + MediaControlInputElement* sliderThumb = static_cast<MediaControlInputElement*>(thumbElement->renderer()->node()); return sliderThumb->hitTest(evt->absoluteLocation()); } #endif - FloatPoint localPoint = m_thumb->renderBox()->absoluteToLocal(evt->absoluteLocation(), false, true); - IntRect thumbBounds = m_thumb->renderBox()->borderBoxRect(); + FloatPoint localPoint = thumbElement->renderBox()->absoluteToLocal(evt->absoluteLocation(), false, true); + IntRect thumbBounds = thumbElement->renderBox()->borderBoxRect(); return thumbBounds.contains(roundedIntPoint(localPoint)); } FloatPoint RenderSlider::mouseEventOffsetToThumb(MouseEvent* evt) { - ASSERT(m_thumb && m_thumb->renderer()); - FloatPoint localPoint = m_thumb->renderBox()->absoluteToLocal(evt->absoluteLocation(), false, true); - IntRect thumbBounds = m_thumb->renderBox()->borderBoxRect(); + SliderThumbElement* thumbElement = sliderThumbElement(); + ASSERT(thumbElement && thumbElement->renderer()); + FloatPoint localPoint = thumbElement->renderBox()->absoluteToLocal(evt->absoluteLocation(), false, true); + IntRect thumbBounds = thumbElement->renderBox()->borderBoxRect(); FloatPoint offset; offset.setX(thumbBounds.x() + thumbBounds.width() / 2 - localPoint.x()); offset.setY(thumbBounds.y() + thumbBounds.height() / 2 - localPoint.y()); @@ -257,7 +213,8 @@ FloatPoint RenderSlider::mouseEventOffsetToThumb(MouseEvent* evt) void RenderSlider::setValueForPosition(int position) { - if (!m_thumb || !m_thumb->renderer()) + SliderThumbElement* thumbElement = sliderThumbElement(); + if (!thumbElement || !thumbElement->renderer()) return; HTMLInputElement* element = static_cast<HTMLInputElement*>(node()); @@ -282,40 +239,45 @@ void RenderSlider::setValueForPosition(int position) int RenderSlider::positionForOffset(const IntPoint& p) { - if (!m_thumb || !m_thumb->renderer()) + SliderThumbElement* thumbElement = sliderThumbElement(); + if (!thumbElement || !thumbElement->renderer()) return 0; int position; if (style()->appearance() == SliderVerticalPart || style()->appearance() == MediaVolumeSliderPart) - position = p.y() - m_thumb->renderBox()->height() / 2; + position = p.y() - thumbElement->renderBox()->height() / 2; else - position = p.x() - m_thumb->renderBox()->width() / 2; + position = p.x() - thumbElement->renderBox()->width() / 2; return max(0, min(position, trackSize())); } int RenderSlider::currentPosition() { - ASSERT(m_thumb); - ASSERT(m_thumb->renderer()); + SliderThumbElement* thumbElement = sliderThumbElement(); + ASSERT(thumbElement && thumbElement->renderer()); if (style()->appearance() == SliderVerticalPart || style()->appearance() == MediaVolumeSliderPart) - return toRenderBox(m_thumb->renderer())->y() - contentBoxRect().y(); - return toRenderBox(m_thumb->renderer())->x() - contentBoxRect().x(); + return toRenderBox(thumbElement->renderer())->y() - contentBoxRect().y(); + return toRenderBox(thumbElement->renderer())->x() - contentBoxRect().x(); } int RenderSlider::trackSize() { - ASSERT(m_thumb); - ASSERT(m_thumb->renderer()); + SliderThumbElement* thumbElement = sliderThumbElement(); + ASSERT(thumbElement && thumbElement->renderer()); if (style()->appearance() == SliderVerticalPart || style()->appearance() == MediaVolumeSliderPart) - return contentHeight() - m_thumb->renderBox()->height(); - return contentWidth() - m_thumb->renderBox()->width(); + return contentHeight() - thumbElement->renderBox()->height(); + return contentWidth() - thumbElement->renderBox()->width(); } void RenderSlider::forwardEvent(Event* event) { + SliderThumbElement* thumbElement = sliderThumbElement(); + if (!thumbElement) + return; + if (event->isMouseEvent()) { MouseEvent* mouseEvent = static_cast<MouseEvent*>(event); if (event->type() == eventNames().mousedownEvent && mouseEvent->button() == LeftButton) { @@ -326,12 +288,13 @@ void RenderSlider::forwardEvent(Event* event) } } - m_thumb->defaultEventHandler(event); + thumbElement->defaultEventHandler(event); } bool RenderSlider::inDragMode() const { - return m_thumb && m_thumb->inDragMode(); + SliderThumbElement* thumbElement = sliderThumbElement(); + return thumbElement && thumbElement->inDragMode(); } } // namespace WebCore diff --git a/Source/WebCore/rendering/RenderSlider.h b/Source/WebCore/rendering/RenderSlider.h index 03779a3..5fb5921 100644 --- a/Source/WebCore/rendering/RenderSlider.h +++ b/Source/WebCore/rendering/RenderSlider.h @@ -45,8 +45,10 @@ namespace WebCore { virtual int baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const; virtual void computePreferredLogicalWidths(); virtual void layout(); - virtual void updateFromElement(); + // FIXME: Eventually, the logic of manipulating slider thumb should move to + // SliderThumbElement and accessing sliderThumbElement should not be necessary in this class. + SliderThumbElement* sliderThumbElement() const; bool mouseEventIsInThumb(MouseEvent*); FloatPoint mouseEventOffsetToThumb(MouseEvent*); @@ -56,16 +58,10 @@ namespace WebCore { int currentPosition(); - virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); - virtual bool requiresForcedStyleRecalcPropagation() const { return true; } - PassRefPtr<RenderStyle> createThumbStyle(const RenderStyle* parentStyle); - int trackSize(); - RefPtr<SliderThumbElement> m_thumb; - friend class SliderThumbElement; }; diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp index f0cc264..3fc1c72 100644 --- a/Source/WebCore/rendering/RenderTable.cpp +++ b/Source/WebCore/rendering/RenderTable.cpp @@ -27,6 +27,7 @@ #include "RenderTable.h" #include "AutoTableLayout.h" +#include "CollapsedBorderValue.h" #include "DeleteButtonController.h" #include "Document.h" #include "FixedTableLayout.h" diff --git a/Source/WebCore/rendering/RenderTable.h b/Source/WebCore/rendering/RenderTable.h index 6afb108..b9a7bad 100644 --- a/Source/WebCore/rendering/RenderTable.h +++ b/Source/WebCore/rendering/RenderTable.h @@ -31,6 +31,7 @@ namespace WebCore { +class CollapsedBorderValue; class RenderTableCol; class RenderTableCell; class RenderTableSection; diff --git a/Source/WebCore/rendering/RenderTableCell.cpp b/Source/WebCore/rendering/RenderTableCell.cpp index 0c2cf2f..8549f49 100644 --- a/Source/WebCore/rendering/RenderTableCell.cpp +++ b/Source/WebCore/rendering/RenderTableCell.cpp @@ -25,10 +25,12 @@ #include "config.h" #include "RenderTableCell.h" +#include "CollapsedBorderValue.h" #include "FloatQuad.h" #include "GraphicsContext.h" #include "HTMLNames.h" #include "HTMLTableCellElement.h" +#include "PaintInfo.h" #include "RenderTableCol.h" #include "RenderView.h" #include "TransformState.h" diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp index 5bb3ff4..595e156 100644 --- a/Source/WebCore/rendering/RenderTableRow.cpp +++ b/Source/WebCore/rendering/RenderTableRow.cpp @@ -28,6 +28,7 @@ #include "CachedImage.h" #include "Document.h" #include "HTMLNames.h" +#include "PaintInfo.h" #include "RenderTableCell.h" #include "RenderView.h" diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp index cb1276d..7aaad62 100644 --- a/Source/WebCore/rendering/RenderTableSection.cpp +++ b/Source/WebCore/rendering/RenderTableSection.cpp @@ -29,6 +29,7 @@ #include "Document.h" #include "HitTestResult.h" #include "HTMLNames.h" +#include "PaintInfo.h" #include "RenderTableCell.h" #include "RenderTableCol.h" #include "RenderTableRow.h" diff --git a/Source/WebCore/rendering/RenderTextControl.cpp b/Source/WebCore/rendering/RenderTextControl.cpp index 0192ee4..40aa4c2 100644 --- a/Source/WebCore/rendering/RenderTextControl.cpp +++ b/Source/WebCore/rendering/RenderTextControl.cpp @@ -33,6 +33,7 @@ #include "HTMLInputElement.h" #include "HTMLNames.h" #include "HitTestResult.h" +#include "Position.h" #include "RenderLayer.h" #include "RenderText.h" #include "ScrollbarTheme.h" @@ -97,8 +98,6 @@ void RenderTextControl::styleDidChange(StyleDifference diff, const RenderStyle* textBlockRenderer->style()->setWidth(Length()); setInnerTextStyle(textBlockStyle); } - - setReplaced(isInline()); } void RenderTextControl::setInnerTextStyle(PassRefPtr<RenderStyle> style) @@ -273,12 +272,49 @@ bool RenderTextControl::isSelectableElement(Node* node) const || (shadowAncestor->hasTagName(inputTag) && static_cast<HTMLInputElement*>(shadowAncestor)->isTextField())); } +static inline void setContainerAndOffsetForRange(Node* node, int offset, Node*& containerNode, int& offsetInContainer) +{ + if (node->isTextNode()) { + containerNode = node; + offsetInContainer = offset; + } else { + containerNode = node->parentNode(); + offsetInContainer = node->nodeIndex() + offset; + } +} + PassRefPtr<Range> RenderTextControl::selection(int start, int end) const { + ASSERT(start <= end); if (!m_innerText) return 0; - return Range::create(document(), m_innerText, start, m_innerText, end); + if (!m_innerText->firstChild()) + return Range::create(document(), m_innerText, 0, m_innerText, 0); + + int offset = 0; + Node* startNode = 0; + Node* endNode = 0; + for (Node* node = m_innerText->firstChild(); node; node = node->traverseNextNode(m_innerText.get())) { + ASSERT(!node->firstChild()); + ASSERT(node->isTextNode() || node->hasTagName(brTag)); + int length = node->isTextNode() ? lastOffsetInNode(node) : 1; + + if (offset <= start && start <= offset + length) + setContainerAndOffsetForRange(node, start - offset, startNode, start); + + if (offset <= end && end <= offset + length) { + setContainerAndOffsetForRange(node, end - offset, endNode, end); + break; + } + + offset += length; + } + + if (!startNode || !endNode) + return 0; + + return Range::create(document(), startNode, start, endNode, end); } VisiblePosition RenderTextControl::visiblePositionForIndex(int index) const diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp index 29538ce..b54c45b 100644 --- a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp +++ b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp @@ -671,21 +671,6 @@ void RenderTextControlSingleLine::createSubtreeIfNeeded() } } -#if ENABLE(INPUT_SPEECH) -void RenderTextControlSingleLine::speechAttributeChanged() -{ - // The inner text element of this renderer has different styles depending on whether the - // speech button is visible or not. So when the speech attribute changes, we reset the - // whole thing and recreate to get the right styles and layout. - if (m_speechButton) - m_speechButton->detach(); - setChildrenInline(true); - RenderStyle* parentStyle = m_innerBlock ? m_innerBlock->renderer()->style() : style(); - setStyle(createInnerTextStyle(parentStyle)); - updateFromElement(); -} -#endif - void RenderTextControlSingleLine::updateFromElement() { createSubtreeIfNeeded(); diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.h b/Source/WebCore/rendering/RenderTextControlSingleLine.h index 51509c0..16ce1e4 100644 --- a/Source/WebCore/rendering/RenderTextControlSingleLine.h +++ b/Source/WebCore/rendering/RenderTextControlSingleLine.h @@ -59,10 +59,6 @@ public: // Decoration width outside of the text field. int decorationWidthRight() const; -#if ENABLE(INPUT_SPEECH) - void speechAttributeChanged(); -#endif - private: int preferredDecorationWidthRight() const; virtual bool hasControlClip() const; diff --git a/Source/WebCore/rendering/RenderTheme.cpp b/Source/WebCore/rendering/RenderTheme.cpp index 538b6c6..e67ecfc 100644 --- a/Source/WebCore/rendering/RenderTheme.cpp +++ b/Source/WebCore/rendering/RenderTheme.cpp @@ -33,6 +33,7 @@ #include "HTMLNames.h" #include "MediaControlElements.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderStyle.h" #include "RenderView.h" #include "SelectionController.h" diff --git a/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp b/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp index de83ae9..90736c7 100644 --- a/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp +++ b/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp @@ -27,6 +27,7 @@ #include "CSSValueKeywords.h" #include "Color.h" +#include "PaintInfo.h" #include "PlatformThemeChromiumGtk.h" #include "RenderObject.h" #include "ScrollbarTheme.h" diff --git a/Source/WebCore/rendering/RenderThemeChromiumMac.mm b/Source/WebCore/rendering/RenderThemeChromiumMac.mm index e8ffe6c..02eb134 100644 --- a/Source/WebCore/rendering/RenderThemeChromiumMac.mm +++ b/Source/WebCore/rendering/RenderThemeChromiumMac.mm @@ -21,6 +21,7 @@ #import "config.h" #import "RenderThemeChromiumMac.h" #import "ChromiumBridge.h" +#import "PaintInfo.h" #import "RenderMediaControlsChromium.h" #import "UserAgentStyleSheets.h" #import <Carbon/Carbon.h> diff --git a/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp b/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp index 9824851..bb60c1f 100644 --- a/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp +++ b/Source/WebCore/rendering/RenderThemeChromiumSkia.cpp @@ -32,6 +32,7 @@ #include "HTMLNames.h" #include "Image.h" #include "MediaControlElements.h" +#include "PaintInfo.h" #include "PlatformContextSkia.h" #include "RenderBox.h" #include "RenderMediaControlsChromium.h" diff --git a/Source/WebCore/rendering/RenderThemeChromiumWin.cpp b/Source/WebCore/rendering/RenderThemeChromiumWin.cpp index be670ff..5b41ea2 100644 --- a/Source/WebCore/rendering/RenderThemeChromiumWin.cpp +++ b/Source/WebCore/rendering/RenderThemeChromiumWin.cpp @@ -38,6 +38,7 @@ #include "HTMLMediaElement.h" #include "HTMLNames.h" #include "MediaControlElements.h" +#include "PaintInfo.h" #include "RenderBox.h" #include "RenderProgress.h" #include "RenderSlider.h" diff --git a/Source/WebCore/rendering/RenderThemeMac.mm b/Source/WebCore/rendering/RenderThemeMac.mm index a13b4aa..0764093 100644 --- a/Source/WebCore/rendering/RenderThemeMac.mm +++ b/Source/WebCore/rendering/RenderThemeMac.mm @@ -35,6 +35,7 @@ #import "ImageBuffer.h" #import "LocalCurrentGraphicsContext.h" #import "MediaControlElements.h" +#import "PaintInfo.h" #import "RenderMedia.h" #import "RenderSlider.h" #import "RenderView.h" diff --git a/Source/WebCore/rendering/RenderThemeSafari.cpp b/Source/WebCore/rendering/RenderThemeSafari.cpp index 6d5d322..3c1dedc 100644 --- a/Source/WebCore/rendering/RenderThemeSafari.cpp +++ b/Source/WebCore/rendering/RenderThemeSafari.cpp @@ -35,6 +35,7 @@ #include "HTMLInputElement.h" #include "HTMLMediaElement.h" #include "HTMLNames.h" +#include "PaintInfo.h" #include "RenderMediaControls.h" #include "RenderSlider.h" #include "RenderView.h" diff --git a/Source/WebCore/rendering/RenderThemeWinCE.cpp b/Source/WebCore/rendering/RenderThemeWinCE.cpp index 27b8783..2c55f31 100644 --- a/Source/WebCore/rendering/RenderThemeWinCE.cpp +++ b/Source/WebCore/rendering/RenderThemeWinCE.cpp @@ -28,10 +28,11 @@ #include "CSSValueKeywords.h" #include "Document.h" #include "GraphicsContext.h" -#include "NotImplemented.h" #if ENABLE(VIDEO) #include "HTMLMediaElement.h" #endif +#include "NotImplemented.h" +#include "PaintInfo.h" #include <windows.h> diff --git a/Source/WebCore/rendering/RenderVideo.cpp b/Source/WebCore/rendering/RenderVideo.cpp index 5b82deb..0f3b551 100644 --- a/Source/WebCore/rendering/RenderVideo.cpp +++ b/Source/WebCore/rendering/RenderVideo.cpp @@ -34,6 +34,7 @@ #include "HTMLNames.h" #include "HTMLVideoElement.h" #include "MediaPlayer.h" +#include "PaintInfo.h" #include "RenderView.h" #if USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/rendering/RenderView.cpp b/Source/WebCore/rendering/RenderView.cpp index 6820e34..687ba85 100644 --- a/Source/WebCore/rendering/RenderView.cpp +++ b/Source/WebCore/rendering/RenderView.cpp @@ -147,20 +147,32 @@ void RenderView::layout() setNeedsLayout(false); } -void RenderView::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool /*useTransforms*/, TransformState& transformState) const +void RenderView::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const { // If a container was specified, and was not 0 or the RenderView, // then we should have found it by now. ASSERT_UNUSED(repaintContainer, !repaintContainer || repaintContainer == this); + if (useTransforms && shouldUseTransformFromContainer(0)) { + TransformationMatrix t; + getTransformFromContainer(0, IntSize(), t); + transformState.applyTransform(t); + } + if (fixed && m_frameView) transformState.move(m_frameView->scrollOffset()); } -void RenderView::mapAbsoluteToLocalPoint(bool fixed, bool /*useTransforms*/, TransformState& transformState) const +void RenderView::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState& transformState) const { if (fixed && m_frameView) transformState.move(-m_frameView->scrollOffset()); + + if (useTransforms && shouldUseTransformFromContainer(0)) { + TransformationMatrix t; + getTransformFromContainer(0, IntSize(), t); + transformState.applyTransform(t); + } } void RenderView::paint(PaintInfo& paintInfo, int tx, int ty) diff --git a/Source/WebCore/rendering/RenderWidget.cpp b/Source/WebCore/rendering/RenderWidget.cpp index 152bb2f..22283a0 100644 --- a/Source/WebCore/rendering/RenderWidget.cpp +++ b/Source/WebCore/rendering/RenderWidget.cpp @@ -157,9 +157,8 @@ RenderWidget::~RenderWidget() clearWidget(); } -bool RenderWidget::setWidgetGeometry(const IntRect& frame) +bool RenderWidget::setWidgetGeometry(const IntRect& frame, const IntSize& boundsSize) { - ASSERT(!widgetHierarchyUpdateSuspendCount); if (!node()) return false; @@ -175,6 +174,8 @@ bool RenderWidget::setWidgetGeometry(const IntRect& frame) RenderWidgetProtector protector(this); RefPtr<Node> protectedNode(node()); m_widget->setFrameRect(frame); + if (m_widget) // setFrameRect can run arbitrary script, which might clear m_widget. + m_widget->setBoundsSize(boundsSize); #if USE(ACCELERATED_COMPOSITING) if (hasLayer() && layer()->isComposited()) @@ -202,7 +203,7 @@ void RenderWidget::setWidget(PassRefPtr<Widget> widget) // style pointer). if (style()) { if (!needsLayout()) - setWidgetGeometry(absoluteContentBox()); + setWidgetGeometry(IntRect(localToAbsoluteQuad(FloatQuad(contentBoxRect())).boundingBox()), contentBoxRect().size()); if (style()->visibility() != VISIBLE) m_widget->hide(); else @@ -342,14 +343,9 @@ void RenderWidget::updateWidgetPosition() if (!m_widget || !node()) // Check the node in case destroy() has been called. return; - // FIXME: This doesn't work correctly with transforms. - FloatPoint absPos = localToAbsolute(); - absPos.move(borderLeft() + paddingLeft(), borderTop() + paddingTop()); - - int w = width() - borderAndPaddingWidth(); - int h = height() - borderAndPaddingHeight(); - - bool boundsChanged = setWidgetGeometry(IntRect(absPos.x(), absPos.y(), w, h)); + IntRect contentBox = contentBoxRect(); + IntRect absoluteContentBox = IntRect(localToAbsoluteQuad(FloatQuad(contentBox)).boundingBox()); + bool boundsChanged = setWidgetGeometry(absoluteContentBox, contentBox.size()); // if the frame bounds got changed, or if view needs layout (possibly indicating // content size is wrong) we have to do a layout to set the right widget size diff --git a/Source/WebCore/rendering/RenderWidget.h b/Source/WebCore/rendering/RenderWidget.h index d2ec096..5cbdfaf 100644 --- a/Source/WebCore/rendering/RenderWidget.h +++ b/Source/WebCore/rendering/RenderWidget.h @@ -70,7 +70,7 @@ private: virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); virtual void setOverlapTestResult(bool); - bool setWidgetGeometry(const IntRect&); + bool setWidgetGeometry(const IntRect&, const IntSize&); RefPtr<Widget> m_widget; RefPtr<Image> m_substituteImage; diff --git a/Source/WebCore/rendering/RenderingAllInOne.cpp b/Source/WebCore/rendering/RenderingAllInOne.cpp index 37ba704..faa3566 100644 --- a/Source/WebCore/rendering/RenderingAllInOne.cpp +++ b/Source/WebCore/rendering/RenderingAllInOne.cpp @@ -53,7 +53,6 @@ #include "RenderFieldset.cpp" #include "RenderFileUploadControl.cpp" #include "RenderFlexibleBox.cpp" -#include "RenderForeignObject.cpp" #include "RenderFrame.cpp" #include "RenderFrameBase.cpp" #include "RenderFrameSet.cpp" diff --git a/Source/WebCore/rendering/RootInlineBox.cpp b/Source/WebCore/rendering/RootInlineBox.cpp index 710224e..65130e7 100644 --- a/Source/WebCore/rendering/RootInlineBox.cpp +++ b/Source/WebCore/rendering/RootInlineBox.cpp @@ -29,6 +29,7 @@ #include "GraphicsContext.h" #include "HitTestResult.h" #include "Page.h" +#include "PaintInfo.h" #include "RenderArena.h" #include "RenderBlock.h" diff --git a/Source/WebCore/rendering/SVGResourcesCycleSolver.h b/Source/WebCore/rendering/SVGResourcesCycleSolver.h deleted file mode 100644 index e63ee63..0000000 --- a/Source/WebCore/rendering/SVGResourcesCycleSolver.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - -#ifndef SVGResourcesCycleSolver_h -#define SVGResourcesCycleSolver_h - -#if ENABLE(SVG) -#include <wtf/HashSet.h> - -namespace WebCore { - -class RenderObject; -class RenderSVGResourceContainer; -class SVGResources; - -class SVGResourcesCycleSolver : public Noncopyable { -public: - SVGResourcesCycleSolver(RenderObject*, SVGResources*); - ~SVGResourcesCycleSolver(); - - void resolveCycles(); - -private: - bool resourceContainsCycles(RenderObject*) const; - void breakCycle(RenderSVGResourceContainer*); - - RenderObject* m_renderer; - SVGResources* m_resources; - HashSet<RenderSVGResourceContainer*> m_allResources; -}; - -} - -#endif -#endif diff --git a/Source/WebCore/rendering/TextControlInnerElements.cpp b/Source/WebCore/rendering/TextControlInnerElements.cpp index d6fc7aa..5b8712d 100644 --- a/Source/WebCore/rendering/TextControlInnerElements.cpp +++ b/Source/WebCore/rendering/TextControlInnerElements.cpp @@ -383,7 +383,7 @@ inline InputFieldSpeechButtonElement::InputFieldSpeechButtonElement(HTMLElement* InputFieldSpeechButtonElement::~InputFieldSpeechButtonElement() { SpeechInput* speech = speechInput(); - if (speech) { // Could be null when page is unloading. + if (speech && m_listenerId) { // Could be null when page is unloading. if (m_state != Idle) speech->cancelRecognition(m_listenerId); speech->unregisterListener(m_listenerId); @@ -416,6 +416,7 @@ void InputFieldSpeechButtonElement::defaultEventHandler(Event* event) // remove the input element from DOM. To make sure it remains valid until we finish our work // here, we take a temporary reference. RefPtr<HTMLInputElement> holdRef(input); + RefPtr<InputFieldSpeechButtonElement> holdRefButton(this); input->focus(); input->select(); event->setDefaultHandled(); @@ -482,9 +483,14 @@ void InputFieldSpeechButtonElement::setRecognitionResult(int, const SpeechInputR // remove the input element from DOM. To make sure it remains valid until we finish our work // here, we take a temporary reference. RefPtr<HTMLInputElement> holdRef(input); + RefPtr<InputFieldSpeechButtonElement> holdRefButton(this); input->setValue(results.isEmpty() ? "" : results[0]->utterance()); input->dispatchEvent(SpeechInputEvent::create(eventNames().webkitspeechchangeEvent, results)); - renderer()->repaint(); + + // Check before accessing the renderer as the above event could have potentially turned off + // speech in the input element, hence removing this button and renderer from the hierarchy. + if (renderer()) + renderer()->repaint(); } void InputFieldSpeechButtonElement::detach() @@ -494,8 +500,12 @@ void InputFieldSpeechButtonElement::detach() frame->eventHandler()->setCapturingMouseEventsNode(0); } - if (m_state != Idle) - speechInput()->cancelRecognition(m_listenerId); + if (m_listenerId) { + if (m_state != Idle) + speechInput()->cancelRecognition(m_listenerId); + speechInput()->unregisterListener(m_listenerId); + m_listenerId = 0; + } TextControlInnerElement::detach(); } diff --git a/Source/WebCore/mathml/RenderMathMLBlock.cpp b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp index 14e7656..14e7656 100644 --- a/Source/WebCore/mathml/RenderMathMLBlock.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp diff --git a/Source/WebCore/mathml/RenderMathMLBlock.h b/Source/WebCore/rendering/mathml/RenderMathMLBlock.h index f05122a..f05122a 100644 --- a/Source/WebCore/mathml/RenderMathMLBlock.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLBlock.h diff --git a/Source/WebCore/mathml/RenderMathMLFenced.cpp b/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp index f7bbf71..f7bbf71 100644 --- a/Source/WebCore/mathml/RenderMathMLFenced.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLFenced.cpp diff --git a/Source/WebCore/mathml/RenderMathMLFenced.h b/Source/WebCore/rendering/mathml/RenderMathMLFenced.h index 64e4d90..64e4d90 100644 --- a/Source/WebCore/mathml/RenderMathMLFenced.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLFenced.h diff --git a/Source/WebCore/mathml/RenderMathMLFraction.cpp b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp index 1435be7..7117618 100644 --- a/Source/WebCore/mathml/RenderMathMLFraction.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp @@ -32,6 +32,7 @@ #include "GraphicsContext.h" #include "MathMLNames.h" +#include "PaintInfo.h" #include "RenderText.h" namespace WebCore { @@ -39,16 +40,15 @@ namespace WebCore { using namespace MathMLNames; static const double gHorizontalPad = 0.2; -static const int gLineThin = 1; -static const int gLineMedium = 3; -static const int gLineThick = 5; -static const double gFractionAlignment = 0.25; +static const double gLineThin = 0.33; +static const double gLineMedium = 1.; +static const double gLineThick = 3.; static const double gFractionBarWidth = 0.05; static const double gDenominatorPad = 0.1; RenderMathMLFraction::RenderMathMLFraction(Element* fraction) : RenderMathMLBlock(fraction) - , m_lineThickness(gLineThin) + , m_lineThickness(gLineMedium) { setChildrenInline(false); } @@ -84,7 +84,7 @@ void RenderMathMLFraction::updateFromElement() // FIXME: parse units String thickness = fraction->getAttribute(MathMLNames::linethicknessAttr); - m_lineThickness = gLineThin; + m_lineThickness = gLineMedium; if (equalIgnoringCase(thickness, "thin")) m_lineThickness = gLineThin; else if (equalIgnoringCase(thickness, "medium")) @@ -125,7 +125,7 @@ void RenderMathMLFraction::layout() // Adjust the fraction line thickness for the zoom if (lastChild() && lastChild()->isRenderBlock()) - m_lineThickness = static_cast<int>(m_lineThickness * ceil(gFractionBarWidth * style()->fontSize())); + m_lineThickness *= ceil(gFractionBarWidth * style()->fontSize()); RenderBlock::layout(); @@ -143,8 +143,8 @@ void RenderMathMLFraction::paint(PaintInfo& info, int tx, int ty) int verticalOffset = 0; // The children are always RenderMathMLBlock instances if (firstChild()->isRenderMathMLBlock()) { - int adjustForThickness = m_lineThickness > 1 ? m_lineThickness / 2 : 1; - if (m_lineThickness % 2 == 1) + int adjustForThickness = m_lineThickness > 1 ? int(m_lineThickness / 2) : 1; + if (int(m_lineThickness) % 2 == 1) adjustForThickness++; RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild()); if (numerator->isRenderMathMLRow()) @@ -171,11 +171,13 @@ int RenderMathMLFraction::baselinePosition(FontBaseline, bool firstLine, LineDir { if (firstChild() && firstChild()->isRenderMathMLBlock()) { RenderMathMLBlock* numerator = toRenderMathMLBlock(firstChild()); - // FIXME: the baseline should adjust so the fraction line aligns - // relative certain operators (e.g. aligns with the horizontal - // stroke of the plus). 1/3 of the current font size is just - // a good guess. - return numerator->offsetHeight() + style()->fontSize() / 3; + RenderStyle* refStyle = style(); + if (previousSibling()) + refStyle = previousSibling()->style(); + else if (nextSibling()) + refStyle = nextSibling()->style(); + int shift = int(ceil((refStyle->font().xHeight() + 1) / 2)); + return numerator->offsetHeight() + shift; } return RenderBlock::baselinePosition(AlphabeticBaseline, firstLine, lineDirection, linePositionMode); } diff --git a/Source/WebCore/mathml/RenderMathMLFraction.h b/Source/WebCore/rendering/mathml/RenderMathMLFraction.h index 8a3a9ed..2a03f81 100644 --- a/Source/WebCore/mathml/RenderMathMLFraction.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLFraction.h @@ -43,7 +43,7 @@ public: protected: virtual void layout(); private: - int m_lineThickness; + double m_lineThickness; }; } diff --git a/Source/WebCore/mathml/RenderMathMLMath.cpp b/Source/WebCore/rendering/mathml/RenderMathMLMath.cpp index 2b65f69..2b65f69 100644 --- a/Source/WebCore/mathml/RenderMathMLMath.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLMath.cpp diff --git a/Source/WebCore/mathml/RenderMathMLMath.h b/Source/WebCore/rendering/mathml/RenderMathMLMath.h index 26f2093..26f2093 100644 --- a/Source/WebCore/mathml/RenderMathMLMath.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLMath.h diff --git a/Source/WebCore/mathml/RenderMathMLOperator.cpp b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp index 7f039b9..7f039b9 100644 --- a/Source/WebCore/mathml/RenderMathMLOperator.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.cpp diff --git a/Source/WebCore/mathml/RenderMathMLOperator.h b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h index 6501494..6501494 100644 --- a/Source/WebCore/mathml/RenderMathMLOperator.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLOperator.h diff --git a/Source/WebCore/mathml/RenderMathMLRoot.cpp b/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp index f0a7abb..075f6ba 100644 --- a/Source/WebCore/mathml/RenderMathMLRoot.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp @@ -32,6 +32,7 @@ #include "GraphicsContext.h" #include "MathMLNames.h" +#include "PaintInfo.h" namespace WebCore { diff --git a/Source/WebCore/mathml/RenderMathMLRoot.h b/Source/WebCore/rendering/mathml/RenderMathMLRoot.h index 80f56ac..80f56ac 100644 --- a/Source/WebCore/mathml/RenderMathMLRoot.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLRoot.h diff --git a/Source/WebCore/mathml/RenderMathMLRow.cpp b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp index ad54846..ad54846 100644 --- a/Source/WebCore/mathml/RenderMathMLRow.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLRow.cpp diff --git a/Source/WebCore/mathml/RenderMathMLRow.h b/Source/WebCore/rendering/mathml/RenderMathMLRow.h index 62a0d09..62a0d09 100644 --- a/Source/WebCore/mathml/RenderMathMLRow.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLRow.h diff --git a/Source/WebCore/mathml/RenderMathMLSquareRoot.cpp b/Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.cpp index 1285acd..3f99e6d 100644 --- a/Source/WebCore/mathml/RenderMathMLSquareRoot.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.cpp @@ -32,6 +32,7 @@ #include "GraphicsContext.h" #include "MathMLNames.h" +#include "PaintInfo.h" #include "Path.h" namespace WebCore { diff --git a/Source/WebCore/mathml/RenderMathMLSquareRoot.h b/Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.h index d40b1ba..d40b1ba 100644 --- a/Source/WebCore/mathml/RenderMathMLSquareRoot.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLSquareRoot.h diff --git a/Source/WebCore/mathml/RenderMathMLSubSup.cpp b/Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp index 0ea6667..0ea6667 100644 --- a/Source/WebCore/mathml/RenderMathMLSubSup.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLSubSup.cpp diff --git a/Source/WebCore/mathml/RenderMathMLSubSup.h b/Source/WebCore/rendering/mathml/RenderMathMLSubSup.h index 7a9d310..7a9d310 100644 --- a/Source/WebCore/mathml/RenderMathMLSubSup.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLSubSup.h diff --git a/Source/WebCore/mathml/RenderMathMLUnderOver.cpp b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp index a3de697..a3de697 100644 --- a/Source/WebCore/mathml/RenderMathMLUnderOver.cpp +++ b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp diff --git a/Source/WebCore/mathml/RenderMathMLUnderOver.h b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h index fbab72a..fbab72a 100644 --- a/Source/WebCore/mathml/RenderMathMLUnderOver.h +++ b/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.h diff --git a/Source/WebCore/rendering/style/RenderStyle.cpp b/Source/WebCore/rendering/style/RenderStyle.cpp index 881818c..4665e52 100644 --- a/Source/WebCore/rendering/style/RenderStyle.cpp +++ b/Source/WebCore/rendering/style/RenderStyle.cpp @@ -22,12 +22,15 @@ #include "config.h" #include "RenderStyle.h" +#include "ContentData.h" +#include "CursorList.h" #include "CSSPropertyNames.h" #include "CSSStyleSelector.h" #include "FontSelector.h" #include "RenderArena.h" #include "RenderObject.h" #include "ScaleTransformOperation.h" +#include "ShadowData.h" #include "StyleImage.h" #include <wtf/StdLibExtras.h> #include <algorithm> diff --git a/Source/WebCore/rendering/style/RenderStyle.h b/Source/WebCore/rendering/style/RenderStyle.h index 7e61e46..14329bc 100644 --- a/Source/WebCore/rendering/style/RenderStyle.h +++ b/Source/WebCore/rendering/style/RenderStyle.h @@ -25,36 +25,24 @@ #ifndef RenderStyle_h #define RenderStyle_h -#include "TransformationMatrix.h" #include "AnimationList.h" -#include "BorderData.h" #include "BorderValue.h" -#include "CSSImageGeneratorValue.h" #include "CSSPrimitiveValue.h" #include "CSSPropertyNames.h" -#include "CSSReflectionDirection.h" -#include "CSSValueList.h" -#include "CollapsedBorderValue.h" #include "Color.h" #include "ColorSpace.h" -#include "ContentData.h" #include "CounterDirectives.h" -#include "CursorList.h" #include "DataRef.h" #include "FillLayer.h" -#include "FloatPoint.h" #include "Font.h" #include "GraphicsTypes.h" -#include "IntRect.h" #include "Length.h" #include "LengthBox.h" #include "LengthSize.h" #include "LineClampValue.h" #include "NinePieceImage.h" #include "OutlineValue.h" -#include "Pair.h" #include "RenderStyleConstants.h" -#include "ShadowData.h" #include "StyleBackgroundData.h" #include "StyleBoxData.h" #include "StyleFlexibleBoxData.h" @@ -69,7 +57,6 @@ #include "StyleVisualData.h" #include "TextDirection.h" #include "ThemeTypes.h" -#include "TimingFunction.h" #include "TransformOperations.h" #include <wtf/Forward.h> #include <wtf/OwnPtr.h> @@ -99,10 +86,17 @@ namespace WebCore { using std::max; +class BorderData; class CSSStyleSelector; -class CSSValueList; +class CounterContent; +class CursorList; +class IntRect; class Pair; +class ShadowData; class StyleImage; +class TransformationMatrix; + +struct ContentData; typedef Vector<RefPtr<RenderStyle>, 4> PseudoStyleCache; diff --git a/Source/WebCore/rendering/style/RenderStyleConstants.h b/Source/WebCore/rendering/style/RenderStyleConstants.h index 0839864..7cd4903 100644 --- a/Source/WebCore/rendering/style/RenderStyleConstants.h +++ b/Source/WebCore/rendering/style/RenderStyleConstants.h @@ -68,7 +68,7 @@ enum StyleDifferenceContextSensitiveProperty { enum PseudoId { // The order must be NOP ID, public IDs, and then internal IDs. NOPSEUDO, FIRST_LINE, FIRST_LETTER, BEFORE, AFTER, SELECTION, FIRST_LINE_INHERITED, SCROLLBAR, FILE_UPLOAD_BUTTON, INPUT_PLACEHOLDER, - SLIDER_THUMB, SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON, MEDIA_CONTROLS_PANEL, + SEARCH_CANCEL_BUTTON, SEARCH_DECORATION, SEARCH_RESULTS_DECORATION, SEARCH_RESULTS_BUTTON, MEDIA_CONTROLS_PANEL, MEDIA_CONTROLS_PLAY_BUTTON, MEDIA_CONTROLS_MUTE_BUTTON, MEDIA_CONTROLS_TIMELINE, MEDIA_CONTROLS_TIMELINE_CONTAINER, MEDIA_CONTROLS_VOLUME_SLIDER, MEDIA_CONTROLS_VOLUME_SLIDER_CONTAINER, MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON, MEDIA_CONTROLS_CURRENT_TIME_DISPLAY, MEDIA_CONTROLS_TIME_REMAINING_DISPLAY, diff --git a/Source/WebCore/rendering/style/StyleRareInheritedData.cpp b/Source/WebCore/rendering/style/StyleRareInheritedData.cpp index 6138df2..0953dae 100644 --- a/Source/WebCore/rendering/style/StyleRareInheritedData.cpp +++ b/Source/WebCore/rendering/style/StyleRareInheritedData.cpp @@ -22,8 +22,10 @@ #include "config.h" #include "StyleRareInheritedData.h" +#include "CursorList.h" #include "RenderStyle.h" #include "RenderStyleConstants.h" +#include "ShadowData.h" namespace WebCore { diff --git a/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp b/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp index 42cf966..3771f13 100644 --- a/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp +++ b/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp @@ -26,6 +26,7 @@ #include "ContentData.h" #include "RenderCounter.h" #include "RenderStyle.h" +#include "ShadowData.h" #include "StyleImage.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderSVGAllInOne.cpp b/Source/WebCore/rendering/svg/RenderSVGAllInOne.cpp index 7002747..835bce8 100644 --- a/Source/WebCore/rendering/RenderSVGAllInOne.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGAllInOne.cpp @@ -27,9 +27,12 @@ #include "RenderSVGBlock.cpp" #include "RenderSVGContainer.cpp" +#include "RenderSVGForeignObject.cpp" #include "RenderSVGGradientStop.cpp" #include "RenderSVGHiddenContainer.cpp" #include "RenderSVGImage.cpp" +#include "RenderSVGInline.cpp" +#include "RenderSVGInlineText.cpp" #include "RenderSVGModelObject.cpp" #include "RenderSVGResource.cpp" #include "RenderSVGResourceClipper.cpp" @@ -45,32 +48,28 @@ #include "RenderSVGResourceSolidColor.cpp" #include "RenderSVGRoot.cpp" #include "RenderSVGShadowTreeRootContainer.cpp" +#include "RenderSVGTSpan.cpp" +#include "RenderSVGText.cpp" +#include "RenderSVGTextPath.cpp" #include "RenderSVGTransformableContainer.cpp" #include "RenderSVGViewportContainer.cpp" #include "SVGImageBufferTools.cpp" +#include "SVGInlineFlowBox.cpp" +#include "SVGInlineTextBox.cpp" #include "SVGMarkerLayoutInfo.cpp" #include "SVGRenderSupport.cpp" #include "SVGRenderTreeAsText.cpp" #include "SVGResources.cpp" #include "SVGResourcesCache.cpp" #include "SVGResourcesCycleSolver.cpp" +#include "SVGRootInlineBox.cpp" #include "SVGShadowTreeElements.cpp" - -// FIXME: As soon as all SVG renderers live in rendering/svg, this file should be moved there as well, removing the need for the svg/ includes below. -#include "svg/RenderSVGInline.cpp" -#include "svg/RenderSVGInlineText.cpp" -#include "svg/RenderSVGTSpan.cpp" -#include "svg/RenderSVGText.cpp" -#include "svg/RenderSVGTextPath.cpp" -#include "svg/SVGInlineFlowBox.cpp" -#include "svg/SVGInlineTextBox.cpp" -#include "svg/SVGRootInlineBox.cpp" -#include "svg/SVGTextChunk.cpp" -#include "svg/SVGTextChunkBuilder.cpp" -#include "svg/SVGTextLayoutAttributes.cpp" -#include "svg/SVGTextLayoutAttributesBuilder.cpp" -#include "svg/SVGTextLayoutEngine.cpp" -#include "svg/SVGTextLayoutEngineBaseline.cpp" -#include "svg/SVGTextLayoutEngineSpacing.cpp" -#include "svg/SVGTextMetrics.cpp" -#include "svg/SVGTextQuery.cpp" +#include "SVGTextChunk.cpp" +#include "SVGTextChunkBuilder.cpp" +#include "SVGTextLayoutAttributes.cpp" +#include "SVGTextLayoutAttributesBuilder.cpp" +#include "SVGTextLayoutEngine.cpp" +#include "SVGTextLayoutEngineBaseline.cpp" +#include "SVGTextLayoutEngineSpacing.cpp" +#include "SVGTextMetrics.cpp" +#include "SVGTextQuery.cpp" diff --git a/Source/WebCore/rendering/RenderSVGBlock.cpp b/Source/WebCore/rendering/svg/RenderSVGBlock.cpp index b2d727a..ed8e24e 100644 --- a/Source/WebCore/rendering/RenderSVGBlock.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGBlock.cpp @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" @@ -59,7 +58,7 @@ void RenderSVGBlock::updateBoxModelInfoFromStyle() // Render(SVGText|ForeignObject) return 'false' on 'requiresLayer'. Fine for RenderSVGText. // // If we want to support overflow rules for <foreignObject> we can choose between two solutions: - // a) make RenderForeignObject require layers and SVG layer aware + // a) make RenderSVGForeignObject require layers and SVG layer aware // b) reactor overflow logic out of RenderLayer (as suggested by dhyatt), which is a large task // // Until this is resolved, disable overflow support. Opera/FF don't support it as well at the moment (Feb 2010). diff --git a/Source/WebCore/rendering/RenderSVGBlock.h b/Source/WebCore/rendering/svg/RenderSVGBlock.h index a9dd5db..350fdde 100644 --- a/Source/WebCore/rendering/RenderSVGBlock.h +++ b/Source/WebCore/rendering/svg/RenderSVGBlock.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGBlock_h diff --git a/Source/WebCore/rendering/RenderSVGContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGContainer.cpp index 32e0598..1897f53 100644 --- a/Source/WebCore/rendering/RenderSVGContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGContainer.cpp @@ -1,25 +1,25 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007, 2008 Rob Buis <buis@kde.org> - 2007 Eric Seidel <eric@webkit.org> - Copyright (C) 2009 Google, Inc. All rights reserved. - 2009 Dirk Schulze <krit@webkit.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007, 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. All rights reserved. + * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGContainer.h b/Source/WebCore/rendering/svg/RenderSVGContainer.h index 3bd5346..d478c49 100644 --- a/Source/WebCore/rendering/RenderSVGContainer.h +++ b/Source/WebCore/rendering/svg/RenderSVGContainer.h @@ -1,24 +1,24 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007 Rob Buis <buis@kde.org> - Copyright (C) 2009 Google, Inc. All rights reserved. - Copyright (C) 2009 Apple Inc. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. All rights reserved. + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGContainer_h #define RenderSVGContainer_h diff --git a/Source/WebCore/rendering/RenderForeignObject.cpp b/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp index f9f6988..200fab2 100644 --- a/Source/WebCore/rendering/RenderForeignObject.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp @@ -17,13 +17,12 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" #if ENABLE(SVG) && ENABLE(SVG_FOREIGN_OBJECT) -#include "RenderForeignObject.h" +#include "RenderSVGForeignObject.h" #include "GraphicsContext.h" #include "RenderSVGResource.h" @@ -35,17 +34,17 @@ namespace WebCore { -RenderForeignObject::RenderForeignObject(SVGForeignObjectElement* node) +RenderSVGForeignObject::RenderSVGForeignObject(SVGForeignObjectElement* node) : RenderSVGBlock(node) , m_needsTransformUpdate(true) { } -RenderForeignObject::~RenderForeignObject() +RenderSVGForeignObject::~RenderSVGForeignObject() { } -void RenderForeignObject::paint(PaintInfo& paintInfo, int, int) +void RenderSVGForeignObject::paint(PaintInfo& paintInfo, int, int) { if (paintInfo.context->paintingDisabled()) return; @@ -69,36 +68,36 @@ void RenderForeignObject::paint(PaintInfo& paintInfo, int, int) childPaintInfo.context->restore(); } -IntRect RenderForeignObject::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) +IntRect RenderSVGForeignObject::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) { return SVGRenderSupport::clippedOverflowRectForRepaint(this, repaintContainer); } -void RenderForeignObject::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed) +void RenderSVGForeignObject::computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect& repaintRect, bool fixed) { SVGRenderSupport::computeRectForRepaint(this, repaintContainer, repaintRect, fixed); } -const AffineTransform& RenderForeignObject::localToParentTransform() const +const AffineTransform& RenderSVGForeignObject::localToParentTransform() const { m_localToParentTransform = localTransform(); m_localToParentTransform.translate(m_viewport.x(), m_viewport.y()); return m_localToParentTransform; } -void RenderForeignObject::computeLogicalWidth() +void RenderSVGForeignObject::computeLogicalWidth() { // FIXME: Investigate in size rounding issues setWidth(static_cast<int>(roundf(m_viewport.width()))); } -void RenderForeignObject::computeLogicalHeight() +void RenderSVGForeignObject::computeLogicalHeight() { // FIXME: Investigate in size rounding issues setHeight(static_cast<int>(roundf(m_viewport.height()))); } -void RenderForeignObject::layout() +void RenderSVGForeignObject::layout() { ASSERT(needsLayout()); ASSERT(!view()->layoutStateEnabled()); // RenderSVGRoot disables layoutState for the SVG rendering tree. @@ -125,7 +124,7 @@ void RenderForeignObject::layout() // positions. A regular RenderBoxModelObject would pull this information from RenderStyle - in SVG those // properties are ignored for non <svg> elements, so we mimic what happens when specifying them through CSS. - // FIXME: Investigate in location rounding issues - only affects RenderForeignObject & RenderSVGText + // FIXME: Investigate in location rounding issues - only affects RenderSVGForeignObject & RenderSVGText setLocation(roundedIntPoint(viewportLocation)); bool layoutChanged = m_everHadLayout && selfNeedsLayout(); @@ -143,7 +142,7 @@ void RenderForeignObject::layout() repainter.repaintAfterLayout(); } -bool RenderForeignObject::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) +bool RenderSVGForeignObject::nodeAtFloatPoint(const HitTestRequest& request, HitTestResult& result, const FloatPoint& pointInParent, HitTestAction hitTestAction) { FloatPoint localPoint = localTransform().inverse().mapPoint(pointInParent); @@ -155,13 +154,13 @@ bool RenderForeignObject::nodeAtFloatPoint(const HitTestRequest& request, HitTes return RenderBlock::nodeAtPoint(request, result, roundedLocalPoint.x(), roundedLocalPoint.y(), 0, 0, hitTestAction); } -bool RenderForeignObject::nodeAtPoint(const HitTestRequest&, HitTestResult&, int, int, int, int, HitTestAction) +bool RenderSVGForeignObject::nodeAtPoint(const HitTestRequest&, HitTestResult&, int, int, int, int, HitTestAction) { ASSERT_NOT_REACHED(); return false; } -void RenderForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const +void RenderSVGForeignObject::mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed, bool useTransforms, TransformState& transformState) const { // When crawling up the hierachy starting from foreignObject child content, useTransforms may not be set to true. if (!useTransforms) diff --git a/Source/WebCore/rendering/RenderForeignObject.h b/Source/WebCore/rendering/svg/RenderSVGForeignObject.h index bdf96ce..a1cf91a 100644 --- a/Source/WebCore/rendering/RenderForeignObject.h +++ b/Source/WebCore/rendering/svg/RenderSVGForeignObject.h @@ -16,11 +16,10 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ -#ifndef RenderForeignObject_h -#define RenderForeignObject_h +#ifndef RenderSVGForeignObject_h +#define RenderSVGForeignObject_h #if ENABLE(SVG) && ENABLE(SVG_FOREIGN_OBJECT) #include "AffineTransform.h" @@ -31,12 +30,12 @@ namespace WebCore { class SVGForeignObjectElement; -class RenderForeignObject : public RenderSVGBlock { +class RenderSVGForeignObject : public RenderSVGBlock { public: - explicit RenderForeignObject(SVGForeignObjectElement*); - virtual ~RenderForeignObject(); + explicit RenderSVGForeignObject(SVGForeignObjectElement*); + virtual ~RenderSVGForeignObject(); - virtual const char* renderName() const { return "RenderForeignObject"; } + virtual const char* renderName() const { return "RenderSVGForeignObject"; } virtual void paint(PaintInfo&, int parentX, int parentY); @@ -54,10 +53,10 @@ public: virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); virtual bool isSVGForeignObject() const { return true; } - virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState& transformState) const; + virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool fixed , bool useTransforms, TransformState&) const; virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; } - private: +private: virtual void computeLogicalWidth(); virtual void computeLogicalHeight(); diff --git a/Source/WebCore/rendering/RenderSVGGradientStop.cpp b/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp index 094fc7f..46c3e2b 100644 --- a/Source/WebCore/rendering/RenderSVGGradientStop.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGGradientStop.cpp @@ -1,6 +1,4 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2007 Eric Seidel <eric@webkit.org> * * This library is free software; you can redistribute it and/or @@ -17,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGGradientStop.h b/Source/WebCore/rendering/svg/RenderSVGGradientStop.h index f06a9a5..ae90f37 100644 --- a/Source/WebCore/rendering/RenderSVGGradientStop.h +++ b/Source/WebCore/rendering/svg/RenderSVGGradientStop.h @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGGradientStop_h diff --git a/Source/WebCore/rendering/RenderSVGHiddenContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp index fb14ffe..9ddabef 100644 --- a/Source/WebCore/rendering/RenderSVGHiddenContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp @@ -1,6 +1,4 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2007 Eric Seidel <eric@webkit.org> * * This library is free software; you can redistribute it and/or @@ -17,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGHiddenContainer.h b/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h index c591a88..d35de2d 100644 --- a/Source/WebCore/rendering/RenderSVGHiddenContainer.h +++ b/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h @@ -1,6 +1,4 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2007 Eric Seidel <eric@webkit.org> * * This library is free software; you can redistribute it and/or @@ -17,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGHiddenContainer_h @@ -28,30 +25,30 @@ namespace WebCore { - class SVGStyledElement; - - // This class is for containers which are never drawn, but do need to support style - // <defs>, <linearGradient>, <radialGradient> are all good examples - class RenderSVGHiddenContainer : public RenderSVGContainer { - public: - explicit RenderSVGHiddenContainer(SVGStyledElement*); +class SVGStyledElement; - virtual const char* renderName() const { return "RenderSVGHiddenContainer"; } +// This class is for containers which are never drawn, but do need to support style +// <defs>, <linearGradient>, <radialGradient> are all good examples +class RenderSVGHiddenContainer : public RenderSVGContainer { +public: + explicit RenderSVGHiddenContainer(SVGStyledElement*); - protected: - virtual void layout(); + virtual const char* renderName() const { return "RenderSVGHiddenContainer"; } - private: - virtual bool isSVGHiddenContainer() const { return true; } - virtual bool requiresLayer() const { return false; } +protected: + virtual void layout(); - virtual void paint(PaintInfo&, int parentX, int parentY); - - virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject*) { return IntRect(); } - virtual void absoluteQuads(Vector<FloatQuad>&); +private: + virtual bool isSVGHiddenContainer() const { return true; } + virtual bool requiresLayer() const { return false; } + + virtual void paint(PaintInfo&, int parentX, int parentY); + + virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject*) { return IntRect(); } + virtual void absoluteQuads(Vector<FloatQuad>&); - virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction); - }; + virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction); +}; } #endif // ENABLE(SVG) diff --git a/Source/WebCore/rendering/RenderSVGImage.cpp b/Source/WebCore/rendering/svg/RenderSVGImage.cpp index 237dbaa..0f5a55e 100644 --- a/Source/WebCore/rendering/RenderSVGImage.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGImage.cpp @@ -1,27 +1,27 @@ /* - Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> - Copyright (C) 2006 Apple Computer, Inc. - Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> - Copyright (C) 2007, 2008, 2009 Rob Buis <buis@kde.org> - Copyright (C) 2009, Google, Inc. - Copyright (C) 2009 Dirk Schulze <krit@webkit.org> - Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> + * Copyright (C) 2006 Apple Computer, Inc. + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2007, 2008, 2009 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. + * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> + * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGImage.h b/Source/WebCore/rendering/svg/RenderSVGImage.h index 485d6ab..2c91b52 100644 --- a/Source/WebCore/rendering/RenderSVGImage.h +++ b/Source/WebCore/rendering/svg/RenderSVGImage.h @@ -1,25 +1,25 @@ /* - Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> - Copyright (C) 2006, 2009 Apple Inc. All rights reserved. - Copyright (C) 2007 Rob Buis <buis@kde.org> - Copyright (C) 2009 Google, Inc. - Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org> + * Copyright (C) 2006, 2009 Apple Inc. All rights reserved. + * Copyright (C) 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. + * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGImage_h #define RenderSVGImage_h diff --git a/Source/WebCore/rendering/svg/RenderSVGInline.cpp b/Source/WebCore/rendering/svg/RenderSVGInline.cpp index 4d0c533..543d14b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGInline.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGInline.cpp @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGInline.h b/Source/WebCore/rendering/svg/RenderSVGInline.h index d7b7e66..33d7d13 100644 --- a/Source/WebCore/rendering/svg/RenderSVGInline.h +++ b/Source/WebCore/rendering/svg/RenderSVGInline.h @@ -1,8 +1,6 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. + * Copyright (C) 2006 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 @@ -18,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGInline_h diff --git a/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp b/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp index b791f3e..91ffb5c 100644 --- a/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp @@ -19,7 +19,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGInlineText.h b/Source/WebCore/rendering/svg/RenderSVGInlineText.h index 926ec43..f5247f6 100644 --- a/Source/WebCore/rendering/svg/RenderSVGInlineText.h +++ b/Source/WebCore/rendering/svg/RenderSVGInlineText.h @@ -1,9 +1,7 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. - * (C) 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2008 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 @@ -19,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGInlineText_h diff --git a/Source/WebCore/rendering/RenderSVGModelObject.cpp b/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp index 28760a0..28760a0 100644 --- a/Source/WebCore/rendering/RenderSVGModelObject.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp diff --git a/Source/WebCore/rendering/RenderSVGModelObject.h b/Source/WebCore/rendering/svg/RenderSVGModelObject.h index fb8f89f..a04db96 100644 --- a/Source/WebCore/rendering/RenderSVGModelObject.h +++ b/Source/WebCore/rendering/svg/RenderSVGModelObject.h @@ -67,7 +67,7 @@ public: private: // This method should never be called, SVG uses a different nodeAtPoint method - bool nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int xInContainer, int yInContainer, int dxParentToContainer, int dyParentToContainer, HitTestAction hitTestAction); + bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int xInContainer, int yInContainer, int dxParentToContainer, int dyParentToContainer, HitTestAction); }; } diff --git a/Source/WebCore/rendering/svg/RenderSVGPath.cpp b/Source/WebCore/rendering/svg/RenderSVGPath.cpp index 0c8ac0c..1d9eca1 100644 --- a/Source/WebCore/rendering/svg/RenderSVGPath.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGPath.cpp @@ -1,27 +1,27 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2008 Rob Buis <buis@kde.org> - 2005, 2007 Eric Seidel <eric@webkit.org> - 2009 Google, Inc. - 2009 Dirk Schulze <krit@webkit.org> - Copyright (C) Research In Motion Limited 2010. All rights reserved. - 2009 Jeff Schiller <codedread@gmail.com> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. + * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGPath.h b/Source/WebCore/rendering/svg/RenderSVGPath.h index 41b0e51..c5c8377 100644 --- a/Source/WebCore/rendering/svg/RenderSVGPath.h +++ b/Source/WebCore/rendering/svg/RenderSVGPath.h @@ -1,25 +1,25 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005 Rob Buis <buis@kde.org> - 2005 Eric Seidel <eric@webkit.org> - 2006 Apple Computer, Inc - 2009 Google, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> + * Copyright (C) 2005 Eric Seidel <eric@webkit.org> + * Copyright (C) 2006 Apple Computer, Inc + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGPath_h #define RenderSVGPath_h diff --git a/Source/WebCore/rendering/RenderSVGResource.cpp b/Source/WebCore/rendering/svg/RenderSVGResource.cpp index f4c65d5..c0b16c5 100644 --- a/Source/WebCore/rendering/RenderSVGResource.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResource.cpp @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResource.h b/Source/WebCore/rendering/svg/RenderSVGResource.h index 6fc2dae..a67ba73 100644 --- a/Source/WebCore/rendering/RenderSVGResource.h +++ b/Source/WebCore/rendering/svg/RenderSVGResource.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResource_h diff --git a/Source/WebCore/rendering/RenderSVGResourceClipper.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp index 190c1a4..c57f8b0 100644 --- a/Source/WebCore/rendering/RenderSVGResourceClipper.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> - * 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceClipper.h b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h index 20153e9..7f862a7 100644 --- a/Source/WebCore/rendering/RenderSVGResourceClipper.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceClipper.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceClipper_h diff --git a/Source/WebCore/rendering/RenderSVGResourceContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp index fb30efd..2a8a47f 100644 --- a/Source/WebCore/rendering/RenderSVGResourceContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceContainer.cpp @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceContainer.h b/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h index 4e5e475..d98a83a 100644 --- a/Source/WebCore/rendering/RenderSVGResourceContainer.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceContainer.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceContainer_h diff --git a/Source/WebCore/rendering/RenderSVGResourceFilter.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp index 8aa9370..4ba4e0a 100644 --- a/Source/WebCore/rendering/RenderSVGResourceFilter.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp @@ -44,8 +44,9 @@ #include "SVGNames.h" #include "SVGStyledElement.h" #include "SVGUnitTypes.h" -#include <wtf/Vector.h> + #include <wtf/UnusedParam.h> +#include <wtf/Vector.h> static const float kMaxFilterSize = 5000.0f; diff --git a/Source/WebCore/rendering/RenderSVGResourceFilter.h b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h index 5950c44..f9a15ce 100644 --- a/Source/WebCore/rendering/RenderSVGResourceFilter.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilter.h @@ -1,8 +1,8 @@ /* * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> - * 2004, 2005 Rob Buis <buis@kde.org> - * 2005 Eric Seidel <eric@webkit.org> - * 2009 Dirk Schulze <krit@webkit.org> + * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> + * Copyright (C) 2005 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -19,7 +19,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceFilter_h diff --git a/Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp index bf2ef6e..fc7362e 100644 --- a/Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp @@ -28,6 +28,7 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "RenderSVGResourceFilterPrimitive.h" + #include "SVGFEImage.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.h b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h index c890ffe..f25f62e 100644 --- a/Source/WebCore/rendering/RenderSVGResourceFilterPrimitive.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.h @@ -30,8 +30,8 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "RenderSVGHiddenContainer.h" -#include "SVGFilterPrimitiveStandardAttributes.h" #include "SVGFilter.h" +#include "SVGFilterPrimitiveStandardAttributes.h" namespace WebCore { @@ -44,7 +44,7 @@ public: } // They depend on the RenderObject argument of RenderSVGResourceFilter::applyResource. - static FloatRect determineFilterPrimitiveSubregion(FilterEffect* effect, SVGFilter* filter); + static FloatRect determineFilterPrimitiveSubregion(FilterEffect*, SVGFilter*); private: virtual const char* renderName() const { return "RenderSVGResourceFilterPrimitive"; } diff --git a/Source/WebCore/rendering/RenderSVGResourceGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp index 7c383d0..5ad5d84 100644 --- a/Source/WebCore/rendering/RenderSVGResourceGradient.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h index 1c7f52d..ad40b53 100644 --- a/Source/WebCore/rendering/RenderSVGResourceGradient.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceGradient.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> - * 2008 Eric Seidel <eric@webkit.org> + * Copyright (C) 2008 Eric Seidel <eric@webkit.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceGradient_h diff --git a/Source/WebCore/rendering/RenderSVGResourceLinearGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp index ce8d69e..14dbd8c 100644 --- a/Source/WebCore/rendering/RenderSVGResourceLinearGradient.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceLinearGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h index 9e4530d..2d35418 100644 --- a/Source/WebCore/rendering/RenderSVGResourceLinearGradient.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.h @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceLinearGradient_h diff --git a/Source/WebCore/rendering/RenderSVGResourceMarker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp index 1d5663b..2a68d92 100644 --- a/Source/WebCore/rendering/RenderSVGResourceMarker.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2004, 2005, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org> - * 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2004, 2005, 2006, 2007, 2008 Rob Buis <buis@kde.org> * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceMarker.h b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.h index e41096e..fd3b5e3 100644 --- a/Source/WebCore/rendering/RenderSVGResourceMarker.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMarker.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceMarker_h diff --git a/Source/WebCore/rendering/RenderSVGResourceMasker.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp index ebbbe93..7b24248 100644 --- a/Source/WebCore/rendering/RenderSVGResourceMasker.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" @@ -39,8 +38,8 @@ #include "SVGUnitTypes.h" #include <wtf/ByteArray.h> -#include <wtf/Vector.h> #include <wtf/UnusedParam.h> +#include <wtf/Vector.h> namespace WebCore { diff --git a/Source/WebCore/rendering/RenderSVGResourceMasker.h b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h index fddecd0..0a7deb1 100644 --- a/Source/WebCore/rendering/RenderSVGResourceMasker.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceMasker.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceMasker_h diff --git a/Source/WebCore/rendering/RenderSVGResourcePattern.cpp b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp index cd64183..330a21a 100644 --- a/Source/WebCore/rendering/RenderSVGResourcePattern.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourcePattern.h b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.h index ee3fb23..a697c71 100644 --- a/Source/WebCore/rendering/RenderSVGResourcePattern.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourcePattern.h @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourcePattern_h diff --git a/Source/WebCore/rendering/RenderSVGResourceRadialGradient.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp index 300afcb..a8830fc 100644 --- a/Source/WebCore/rendering/RenderSVGResourceRadialGradient.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGResourceRadialGradient.h b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h index 6492ee3..9d37d11 100644 --- a/Source/WebCore/rendering/RenderSVGResourceRadialGradient.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.h @@ -16,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceRadialGradient_h diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp new file mode 100644 index 0000000..9f6c063 --- /dev/null +++ b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "config.h" + +#if ENABLE(SVG) +#include "RenderSVGResourceSolidColor.h" + +#include "GraphicsContext.h" +#include "RenderStyle.h" +#include "SVGRenderSupport.h" + +#if PLATFORM(SKIA) +#include "PlatformContextSkia.h" +#endif + +namespace WebCore { + +RenderSVGResourceType RenderSVGResourceSolidColor::s_resourceType = SolidColorResourceType; + +RenderSVGResourceSolidColor::RenderSVGResourceSolidColor() +{ +} + +RenderSVGResourceSolidColor::~RenderSVGResourceSolidColor() +{ +} + +bool RenderSVGResourceSolidColor::applyResource(RenderObject* object, RenderStyle* style, GraphicsContext*& context, unsigned short resourceMode) +{ + // We are NOT allowed to ASSERT(object) here, unlike all other resources. + // RenderSVGResourceSolidColor is the only resource which may be used from HTML, when rendering + // SVG Fonts for a HTML document. This will be indicated by a null RenderObject pointer. + ASSERT(context); + ASSERT(resourceMode != ApplyToDefaultMode); + + const SVGRenderStyle* svgStyle = style ? style->svgStyle() : 0; + ColorSpace colorSpace = style ? style->colorSpace() : ColorSpaceDeviceRGB; + + if (resourceMode & ApplyToFillMode) { + context->setAlpha(svgStyle ? svgStyle->fillOpacity() : 1.0f); + context->setFillColor(m_color, colorSpace); + context->setFillRule(svgStyle ? svgStyle->fillRule() : RULE_NONZERO); + + if (resourceMode & ApplyToTextMode) + context->setTextDrawingMode(TextModeFill); + } else if (resourceMode & ApplyToStrokeMode) { + context->setAlpha(svgStyle ? svgStyle->strokeOpacity() : 1.0f); + context->setStrokeColor(m_color, colorSpace); + + if (style) + SVGRenderSupport::applyStrokeStyleToContext(context, style, object); + + if (resourceMode & ApplyToTextMode) + context->setTextDrawingMode(TextModeStroke); + } + + return true; +} + +void RenderSVGResourceSolidColor::postApplyResource(RenderObject*, GraphicsContext*& context, unsigned short resourceMode, const Path* path) +{ + ASSERT(context); + ASSERT(resourceMode != ApplyToDefaultMode); + + if (path && !(resourceMode & ApplyToTextMode)) { + if (resourceMode & ApplyToFillMode) + context->fillPath(*path); + else if (resourceMode & ApplyToStrokeMode) + context->strokePath(*path); + } +} + +} + +#endif diff --git a/Source/WebCore/rendering/RenderSVGResourceSolidColor.h b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h index 72de3b2..02ceb31 100644 --- a/Source/WebCore/rendering/RenderSVGResourceSolidColor.h +++ b/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.h @@ -15,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGResourceSolidColor_h diff --git a/Source/WebCore/rendering/RenderSVGRoot.cpp b/Source/WebCore/rendering/svg/RenderSVGRoot.cpp index 215aac7..aa87b09 100644 --- a/Source/WebCore/rendering/RenderSVGRoot.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGRoot.cpp @@ -1,24 +1,24 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007, 2008, 2009 Rob Buis <buis@kde.org> - 2007 Eric Seidel <eric@webkit.org> - 2009 Google, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007, 2008, 2009 Rob Buis <buis@kde.org> + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" @@ -318,10 +318,10 @@ void RenderSVGRoot::updateCachedBoundaries() m_repaintBoundingBox.inflate(borderAndPaddingWidth()); } -bool RenderSVGRoot::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int _x, int _y, int _tx, int _ty, HitTestAction hitTestAction) +bool RenderSVGRoot::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, int x, int y, int tx, int ty, HitTestAction hitTestAction) { - IntPoint pointInContainer(_x, _y); - IntSize containerToParentOffset(_tx, _ty); + IntPoint pointInContainer(x, y); + IntSize containerToParentOffset(tx, ty); IntPoint pointInParent = pointInContainer - containerToParentOffset; IntPoint pointInBorderBox = pointInParent - parentOriginToBorderBox(); @@ -338,7 +338,7 @@ bool RenderSVGRoot::nodeAtPoint(const HitTestRequest& request, HitTestResult& re // FIXME: CSS/HTML assumes the local point is relative to the border box, right? updateHitTestResult(result, pointInBorderBox); // FIXME: nodeAtFloatPoint() doesn't handle rect-based hit tests yet. - result.addNodeToRectBasedTestResult(child->node(), _x, _y); + result.addNodeToRectBasedTestResult(child->node(), x, y); return true; } } diff --git a/Source/WebCore/rendering/RenderSVGRoot.h b/Source/WebCore/rendering/svg/RenderSVGRoot.h index 1b6aa22..7aec3f8 100644 --- a/Source/WebCore/rendering/RenderSVGRoot.h +++ b/Source/WebCore/rendering/svg/RenderSVGRoot.h @@ -1,31 +1,32 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007 Rob Buis <buis@kde.org> - Copyright (C) 2009 Google, Inc. All rights reserved. - Copyright (C) 2009 Apple Inc. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. All rights reserved. + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGRoot_h #define RenderSVGRoot_h #if ENABLE(SVG) -#include "RenderBox.h" #include "FloatRect.h" +#include "RenderBox.h" + #include "SVGRenderSupport.h" namespace WebCore { diff --git a/Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.cpp index 11b398a..5736333 100644 --- a/Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.h b/Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.h index bff2a87..cee8409 100644 --- a/Source/WebCore/rendering/RenderSVGShadowTreeRootContainer.h +++ b/Source/WebCore/rendering/svg/RenderSVGShadowTreeRootContainer.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGShadowTreeRootContainer_h #define RenderSVGShadowTreeRootContainer_h diff --git a/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp b/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp index 90ff36c..872d076 100644 --- a/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGTSpan.cpp @@ -2,7 +2,7 @@ * This file is part of the WebKit project. * * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. + * Copyright (C) 2006 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 @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGTSpan.h b/Source/WebCore/rendering/svg/RenderSVGTSpan.h index 97e0eb0..d5e2ed7 100644 --- a/Source/WebCore/rendering/svg/RenderSVGTSpan.h +++ b/Source/WebCore/rendering/svg/RenderSVGTSpan.h @@ -1,7 +1,7 @@ /* * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. - * (C) 2009 Google Inc. + * Copyright (C) 2006 Apple Computer Inc. + * Copyright (C) 2009 Google Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGTSpan_h diff --git a/Source/WebCore/rendering/svg/RenderSVGText.cpp b/Source/WebCore/rendering/svg/RenderSVGText.cpp index 01a92b0..dad0b70 100644 --- a/Source/WebCore/rendering/svg/RenderSVGText.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGText.cpp @@ -21,7 +21,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGText.h b/Source/WebCore/rendering/svg/RenderSVGText.h index deae78c..188d5fc 100644 --- a/Source/WebCore/rendering/svg/RenderSVGText.h +++ b/Source/WebCore/rendering/svg/RenderSVGText.h @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGText_h diff --git a/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp b/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp index 4ba2eeb..4712ddc 100644 --- a/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGTextPath.cpp @@ -1,6 +1,4 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * * This library is free software; you can redistribute it and/or @@ -17,7 +15,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/RenderSVGTextPath.h b/Source/WebCore/rendering/svg/RenderSVGTextPath.h index a71edf5..f1871b0 100644 --- a/Source/WebCore/rendering/svg/RenderSVGTextPath.h +++ b/Source/WebCore/rendering/svg/RenderSVGTextPath.h @@ -1,6 +1,4 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) 2009 Apple Inc. All rights reserved. * @@ -18,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef RenderSVGTextPath_h diff --git a/Source/WebCore/rendering/RenderSVGTransformableContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp index 3c91170..23aaa89 100644 --- a/Source/WebCore/rendering/RenderSVGTransformableContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.cpp @@ -1,22 +1,22 @@ /* - Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2006 Rob Buis <buis@kde.org> - 2009 Google, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. + * Copyright (C) 2004, 2005 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2006 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #include "config.h" @@ -50,7 +50,7 @@ bool RenderSVGTransformableContainer::calculateLocalTransform() return needsUpdate; FloatSize translation = static_cast<SVGShadowTreeContainerElement*>(element)->containerTranslation(); - if (translation.width() == 0 && translation.height() == 0) + if (!translation.width() && !translation.height()) return needsUpdate; // FIXME: Could optimize this case for use to avoid refetching the animatedLocalTransform() here, if only the containerTranslation() changed. diff --git a/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h b/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h new file mode 100644 index 0000000..401bfa8 --- /dev/null +++ b/Source/WebCore/rendering/svg/RenderSVGTransformableContainer.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef RenderSVGTransformableContainer_h +#define RenderSVGTransformableContainer_h + +#if ENABLE(SVG) +#include "RenderSVGContainer.h" + +namespace WebCore { + +class SVGStyledTransformableElement; +class RenderSVGTransformableContainer : public RenderSVGContainer { +public: + explicit RenderSVGTransformableContainer(SVGStyledTransformableElement*); + + virtual const AffineTransform& localToParentTransform() const { return m_localTransform; } + virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; } + +private: + virtual bool calculateLocalTransform(); + virtual AffineTransform localTransform() const { return m_localTransform; } + + bool m_needsTransformUpdate : 1; + AffineTransform m_localTransform; +}; +} + +#endif // ENABLE(SVG) +#endif // RenderSVGTransformableContainer_h diff --git a/Source/WebCore/rendering/RenderSVGViewportContainer.cpp b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp index 8031328..7f4b6f7 100644 --- a/Source/WebCore/rendering/RenderSVGViewportContainer.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp @@ -1,25 +1,24 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007 Rob Buis <buis@kde.org> - 2007 Eric Seidel <eric@webkit.org> - 2009 Google, Inc. - Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/RenderSVGViewportContainer.h b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.h index 5373ca8..66037e6 100644 --- a/Source/WebCore/rendering/RenderSVGViewportContainer.h +++ b/Source/WebCore/rendering/svg/RenderSVGViewportContainer.h @@ -1,24 +1,24 @@ /* - Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2007 Rob Buis <buis@kde.org> - 2009 Google, Inc. - Copyright (C) 2009 Apple Inc. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org> + * Copyright (C) 2009 Google, Inc. + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef RenderSVGViewportContainer_h #define RenderSVGViewportContainer_h diff --git a/Source/WebCore/rendering/SVGImageBufferTools.cpp b/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp index 2dc0a6f..f0657af 100644 --- a/Source/WebCore/rendering/SVGImageBufferTools.cpp +++ b/Source/WebCore/rendering/svg/SVGImageBufferTools.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/SVGImageBufferTools.h b/Source/WebCore/rendering/svg/SVGImageBufferTools.h index 9bcc7a4..cfb15b2 100644 --- a/Source/WebCore/rendering/SVGImageBufferTools.h +++ b/Source/WebCore/rendering/svg/SVGImageBufferTools.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGImageBufferTools_h #define SVGImageBufferTools_h diff --git a/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp b/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp index ea806c7..10735f6 100644 --- a/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp +++ b/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp @@ -1,7 +1,7 @@ /* * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2006 Apple Computer Inc. + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/SVGInlineFlowBox.h b/Source/WebCore/rendering/svg/SVGInlineFlowBox.h index 2358f2d..0e56c9f 100644 --- a/Source/WebCore/rendering/svg/SVGInlineFlowBox.h +++ b/Source/WebCore/rendering/svg/SVGInlineFlowBox.h @@ -1,8 +1,6 @@ /* - * This file is part of the WebKit project. - * * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. + * Copyright (C) 2006 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 @@ -18,7 +16,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef SVGInlineFlowBox_h diff --git a/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp b/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp index 5d0278b..f370310 100644 --- a/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp +++ b/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp @@ -1,6 +1,6 @@ /** * Copyright (C) 2007 Rob Buis <buis@kde.org> - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/SVGInlineTextBox.h b/Source/WebCore/rendering/svg/SVGInlineTextBox.h index acc5e9f..0458de0 100644 --- a/Source/WebCore/rendering/svg/SVGInlineTextBox.h +++ b/Source/WebCore/rendering/svg/SVGInlineTextBox.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2007 Rob Buis <buis@kde.org> - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef SVGInlineTextBox_h diff --git a/Source/WebCore/rendering/SVGMarkerData.h b/Source/WebCore/rendering/svg/SVGMarkerData.h index ba11e7e..57c35cd 100644 --- a/Source/WebCore/rendering/SVGMarkerData.h +++ b/Source/WebCore/rendering/svg/SVGMarkerData.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGMarkerData_h #define SVGMarkerData_h diff --git a/Source/WebCore/rendering/SVGMarkerLayoutInfo.cpp b/Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.cpp index aed756a..dea5a0c 100644 --- a/Source/WebCore/rendering/SVGMarkerLayoutInfo.cpp +++ b/Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.cpp @@ -1,25 +1,25 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> - 2004, 2005, 2008 Rob Buis <buis@kde.org> - 2005, 2007 Eric Seidel <eric@webkit.org> - 2009 Google, Inc. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2004, 2005, 2008 Rob Buis <buis@kde.org> + * Copyright (C) 2005, 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/SVGMarkerLayoutInfo.h b/Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.h index 8f59703..0eb3689 100644 --- a/Source/WebCore/rendering/SVGMarkerLayoutInfo.h +++ b/Source/WebCore/rendering/svg/SVGMarkerLayoutInfo.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGMarkerLayoutInfo_h #define SVGMarkerLayoutInfo_h diff --git a/Source/WebCore/rendering/SVGRenderSupport.cpp b/Source/WebCore/rendering/svg/SVGRenderSupport.cpp index cbde49b..bfc74f0 100644 --- a/Source/WebCore/rendering/SVGRenderSupport.cpp +++ b/Source/WebCore/rendering/svg/SVGRenderSupport.cpp @@ -1,9 +1,9 @@ /* * Copyright (C) 2007, 2008 Rob Buis <buis@kde.org> - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> - * (C) 2007 Eric Seidel <eric@webkit.org> - * (C) 2009 Google, Inc. All rights reserved. - * (C) 2009 Dirk Schulze <krit@webkit.org> + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2009 Google, Inc. All rights reserved. + * Copyright (C) 2009 Dirk Schulze <krit@webkit.org> * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -20,7 +20,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/SVGRenderSupport.h b/Source/WebCore/rendering/svg/SVGRenderSupport.h index 7814863..9e6aa5c 100644 --- a/Source/WebCore/rendering/SVGRenderSupport.h +++ b/Source/WebCore/rendering/svg/SVGRenderSupport.h @@ -1,7 +1,7 @@ /** * Copyright (C) 2007 Rob Buis <buis@kde.org> - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> - * (C) 2007 Eric Seidel <eric@webkit.org> + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2007 Eric Seidel <eric@webkit.org> * Copyright (C) 2009 Google, Inc. All rights reserved. * Copyright (C) Research In Motion Limited 2010. All rights reserved. * @@ -19,7 +19,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef SVGRenderSupport_h @@ -59,7 +58,7 @@ public: static bool pointInClippingArea(RenderObject*, const FloatPoint&); static void computeContainerBoundingBoxes(const RenderObject* container, FloatRect& objectBoundingBox, FloatRect& strokeBoundingBox, FloatRect& repaintBoundingBox); - static bool paintInfoIntersectsRepaintRect(const FloatRect& localRepaintRect, const AffineTransform& localTransform, const PaintInfo& paintInfo); + static bool paintInfoIntersectsRepaintRect(const FloatRect& localRepaintRect, const AffineTransform& localTransform, const PaintInfo&); // Important functions used by nearly all SVG renderers centralizing coordinate transformations / repaint rect calculations static IntRect clippedOverflowRectForRepaint(RenderObject*, RenderBoxModelObject* repaintContainer); @@ -70,7 +69,7 @@ public: static void applyStrokeStyleToContext(GraphicsContext*, const RenderStyle*, const RenderObject*); // FIXME: These methods do not belong here. - static const RenderSVGRoot* findTreeRootObject(const RenderObject* start); + static const RenderSVGRoot* findTreeRootObject(const RenderObject*); private: // This class is not constructable. diff --git a/Source/WebCore/rendering/SVGRenderTreeAsText.cpp b/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp index ea843c2..97e15af 100644 --- a/Source/WebCore/rendering/SVGRenderTreeAsText.cpp +++ b/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp @@ -243,15 +243,15 @@ static TextStream& operator<<(TextStream& ts, const DashArray& a) static TextStream& operator<<(TextStream& ts, LineCap style) { switch (style) { - case ButtCap: - ts << "BUTT"; - break; - case RoundCap: - ts << "ROUND"; - break; - case SquareCap: - ts << "SQUARE"; - break; + case ButtCap: + ts << "BUTT"; + break; + case RoundCap: + ts << "ROUND"; + break; + case SquareCap: + ts << "SQUARE"; + break; } return ts; } @@ -260,15 +260,15 @@ static TextStream& operator<<(TextStream& ts, LineCap style) static TextStream& operator<<(TextStream& ts, LineJoin style) { switch (style) { - case MiterJoin: - ts << "MITER"; - break; - case RoundJoin: - ts << "ROUND"; - break; - case BevelJoin: - ts << "BEVEL"; - break; + case MiterJoin: + ts << "MITER"; + break; + case RoundJoin: + ts << "ROUND"; + break; + case BevelJoin: + ts << "BEVEL"; + break; } return ts; } diff --git a/Source/WebCore/rendering/SVGRenderTreeAsText.h b/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h index 4e9ba5d..ce07a5c 100644 --- a/Source/WebCore/rendering/SVGRenderTreeAsText.h +++ b/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h @@ -32,20 +32,20 @@ namespace WebCore { - class Color; - class FloatRect; - class FloatSize; - class Node; - class RenderBlock; - class RenderImage; - class RenderObject; - class RenderSVGGradientStop; - class RenderSVGImage; - class RenderSVGPath; - class RenderSVGRoot; - class RenderText; - class AffineTransform; - class SVGUnitTypes; +class Color; +class FloatRect; +class FloatSize; +class Node; +class RenderBlock; +class RenderImage; +class RenderObject; +class RenderSVGGradientStop; +class RenderSVGImage; +class RenderSVGPath; +class RenderSVGRoot; +class RenderText; +class AffineTransform; +class SVGUnitTypes; // functions used by the main RenderTreeAsText code void write(TextStream&, const RenderSVGPath&, int indent); diff --git a/Source/WebCore/rendering/SVGResources.cpp b/Source/WebCore/rendering/svg/SVGResources.cpp index e162f83..9a2c999 100644 --- a/Source/WebCore/rendering/SVGResources.cpp +++ b/Source/WebCore/rendering/svg/SVGResources.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" #include "SVGResources.h" diff --git a/Source/WebCore/rendering/SVGResources.h b/Source/WebCore/rendering/svg/SVGResources.h index 49591cf..dd328b8 100644 --- a/Source/WebCore/rendering/SVGResources.h +++ b/Source/WebCore/rendering/svg/SVGResources.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGResources_h #define SVGResources_h diff --git a/Source/WebCore/rendering/SVGResourcesCache.cpp b/Source/WebCore/rendering/svg/SVGResourcesCache.cpp index 88cbb3a..886f76a 100644 --- a/Source/WebCore/rendering/SVGResourcesCache.cpp +++ b/Source/WebCore/rendering/svg/SVGResourcesCache.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" #include "SVGResourcesCache.h" diff --git a/Source/WebCore/rendering/SVGResourcesCache.h b/Source/WebCore/rendering/svg/SVGResourcesCache.h index 4a61570..30eaeca 100644 --- a/Source/WebCore/rendering/SVGResourcesCache.h +++ b/Source/WebCore/rendering/svg/SVGResourcesCache.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGResourcesCache_h #define SVGResourcesCache_h diff --git a/Source/WebCore/rendering/SVGResourcesCycleSolver.cpp b/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp index 8cd2e80..fa91e80 100644 --- a/Source/WebCore/rendering/SVGResourcesCycleSolver.cpp +++ b/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" #include "SVGResourcesCycleSolver.h" diff --git a/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.h b/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.h new file mode 100644 index 0000000..0653304 --- /dev/null +++ b/Source/WebCore/rendering/svg/SVGResourcesCycleSolver.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef SVGResourcesCycleSolver_h +#define SVGResourcesCycleSolver_h + +#if ENABLE(SVG) +#include <wtf/HashSet.h> + +namespace WebCore { + +class RenderObject; +class RenderSVGResourceContainer; +class SVGResources; + +class SVGResourcesCycleSolver : public Noncopyable { +public: + SVGResourcesCycleSolver(RenderObject*, SVGResources*); + ~SVGResourcesCycleSolver(); + + void resolveCycles(); + +private: + bool resourceContainsCycles(RenderObject*) const; + void breakCycle(RenderSVGResourceContainer*); + + RenderObject* m_renderer; + SVGResources* m_resources; + HashSet<RenderSVGResourceContainer*> m_allResources; +}; + +} + +#endif +#endif diff --git a/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp b/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp index 49c76de..c2289d6 100644 --- a/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp +++ b/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #include "config.h" diff --git a/Source/WebCore/rendering/svg/SVGRootInlineBox.h b/Source/WebCore/rendering/svg/SVGRootInlineBox.h index 418c289..2e073c9 100644 --- a/Source/WebCore/rendering/svg/SVGRootInlineBox.h +++ b/Source/WebCore/rendering/svg/SVGRootInlineBox.h @@ -1,7 +1,7 @@ /* * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> - * (C) 2006 Apple Computer Inc. - * (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> + * Copyright (C) 2006 Apple Computer Inc. + * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> * Copyright (C) Research In Motion Limited 2010. All rights reserved. * * This library is free software; you can redistribute it and/or @@ -18,7 +18,6 @@ * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. - * */ #ifndef SVGRootInlineBox_h diff --git a/Source/WebCore/rendering/SVGShadowTreeElements.cpp b/Source/WebCore/rendering/svg/SVGShadowTreeElements.cpp index 7c5e1a9..2d84c48 100644 --- a/Source/WebCore/rendering/SVGShadowTreeElements.cpp +++ b/Source/WebCore/rendering/svg/SVGShadowTreeElements.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" diff --git a/Source/WebCore/rendering/SVGShadowTreeElements.h b/Source/WebCore/rendering/svg/SVGShadowTreeElements.h index fe25678..3406f95 100644 --- a/Source/WebCore/rendering/SVGShadowTreeElements.h +++ b/Source/WebCore/rendering/svg/SVGShadowTreeElements.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - aint with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGShadowTreeElements_h #define SVGShadowTreeElements_h diff --git a/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp b/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp index 7060ac6..3863322 100644 --- a/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp +++ b/Source/WebCore/rendering/svg/SVGTextLayoutEngineBaseline.cpp @@ -154,8 +154,7 @@ float SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle(bool isVertica ASSERT(style); switch (isVerticalText ? style->glyphOrientationVertical() : style->glyphOrientationHorizontal()) { - case GO_AUTO: - { + case GO_AUTO: { // Spec: Fullwidth ideographic and fullwidth Latin text will be set with a glyph-orientation of 0-degrees. // Text which is not fullwidth will be set with a glyph-orientation of 90-degrees. unsigned int unicodeRange = findCharUnicodeRange(character); diff --git a/Source/WebCore/rendering/svg/SVGTextQuery.cpp b/Source/WebCore/rendering/svg/SVGTextQuery.cpp index fcc7924..42d511b 100644 --- a/Source/WebCore/rendering/svg/SVGTextQuery.cpp +++ b/Source/WebCore/rendering/svg/SVGTextQuery.cpp @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include "config.h" #include "SVGTextQuery.h" diff --git a/Source/WebCore/rendering/svg/SVGTextQuery.h b/Source/WebCore/rendering/svg/SVGTextQuery.h index 9a671f4..331dd94 100644 --- a/Source/WebCore/rendering/svg/SVGTextQuery.h +++ b/Source/WebCore/rendering/svg/SVGTextQuery.h @@ -1,21 +1,21 @@ /* - Copyright (C) Research In Motion Limited 2010. All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ + * Copyright (C) Research In Motion Limited 2010. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef SVGTextQuery_h #define SVGTextQuery_h diff --git a/Source/WebCore/storage/Database.cpp b/Source/WebCore/storage/Database.cpp index 920f75b..8ef780e 100644 --- a/Source/WebCore/storage/Database.cpp +++ b/Source/WebCore/storage/Database.cpp @@ -36,7 +36,7 @@ #include "DatabaseThread.h" #include "DatabaseTracker.h" #include "Document.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "Logging.h" #include "NotImplemented.h" #include "Page.h" @@ -106,13 +106,8 @@ PassRefPtr<Database> Database::openDatabase(ScriptExecutionContext* context, con DatabaseTracker::tracker().setDatabaseDetails(context->securityOrigin(), name, displayName, estimatedSize); context->setHasOpenDatabases(); -#if ENABLE(INSPECTOR) - if (context->isDocument()) { - Document* document = static_cast<Document*>(context); - if (Page* page = document->page()) - page->inspectorController()->didOpenDatabase(database, context->securityOrigin()->host(), name, expectedVersion); - } -#endif + + InspectorInstrumentation::didOpenDatabase(context, database.get(), context->securityOrigin()->host(), name, expectedVersion); // If it's a new database and a creation callback was provided, reset the expected // version to "" and schedule the creation callback. Because of some subtle String diff --git a/Source/WebCore/storage/IDBCursorBackendImpl.cpp b/Source/WebCore/storage/IDBCursorBackendImpl.cpp index 9b4e4f1..d75e28d 100644 --- a/Source/WebCore/storage/IDBCursorBackendImpl.cpp +++ b/Source/WebCore/storage/IDBCursorBackendImpl.cpp @@ -166,12 +166,6 @@ void IDBCursorBackendImpl::deleteFunction(PassRefPtr<IDBCallbacks> prpCallbacks, return; } - // FIXME: Check that the transaction is READ_WRITE - // if (m_transaction->mode() == IDBTransaction::READ_ONLY) { - // FIXME: We must return READ_ONLY_ERR here. Fix this when we update IDBDatabaseException to match the spec. - // ec = IDBDatabaseException::NOT_ALLOWED_ERR; - // return; - // } RefPtr<IDBKey> key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey; m_objectStore->deleteFunction(key.release(), prpCallbacks, m_transaction.get(), ec); } diff --git a/Source/WebCore/storage/IDBDatabase.idl b/Source/WebCore/storage/IDBDatabase.idl index c6edd48..7eb43e9 100644 --- a/Source/WebCore/storage/IDBDatabase.idl +++ b/Source/WebCore/storage/IDBDatabase.idl @@ -38,7 +38,7 @@ module storage { raises (IDBDatabaseException); [CallWith=ScriptExecutionContext] IDBRequest setVersion(in DOMString version) raises (IDBDatabaseException); - [CallWith=ScriptExecutionContext] IDBTransaction transaction (in [Optional] OptionsObject optionsObject) + [CallWith=ScriptExecutionContext] IDBTransaction transaction(in [Optional] OptionsObject optionsObject) raises (IDBDatabaseException); // FIXME: Implement. //void close(); diff --git a/Source/WebCore/storage/IDBDatabaseException.h b/Source/WebCore/storage/IDBDatabaseException.h index 936b05a..174fe5b 100644 --- a/Source/WebCore/storage/IDBDatabaseException.h +++ b/Source/WebCore/storage/IDBDatabaseException.h @@ -53,7 +53,8 @@ public: RECOVERABLE_ERR = IDBDatabaseExceptionOffset + 8, TRANSIENT_ERR = IDBDatabaseExceptionOffset + 9, TIMEOUT_ERR = IDBDatabaseExceptionOffset + 10, - DEADLOCK_ERR = IDBDatabaseExceptionOffset + 11 + DEADLOCK_ERR = IDBDatabaseExceptionOffset + 11, + READ_ONLY_ERR = IDBDatabaseExceptionOffset + 12 }; static int ErrorCodeToExceptionCode(int errorCode) diff --git a/Source/WebCore/storage/IDBDatabaseException.idl b/Source/WebCore/storage/IDBDatabaseException.idl index a56f4c7..9027e05 100644 --- a/Source/WebCore/storage/IDBDatabaseException.idl +++ b/Source/WebCore/storage/IDBDatabaseException.idl @@ -50,6 +50,7 @@ module storage { const unsigned short TRANSIENT_ERR = 9; const unsigned short TIMEOUT_ERR = 10; const unsigned short DEADLOCK_ERR = 11; + const unsigned short READ_ONLY_ERR = 12; }; } diff --git a/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp b/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp index 22d3b8d..396f544 100644 --- a/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp +++ b/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp @@ -179,6 +179,11 @@ static bool putIndexData(SQLiteDatabase& db, IDBKey* key, int64_t indexId, int64 void IDBObjectStoreBackendImpl::put(PassRefPtr<SerializedScriptValue> prpValue, PassRefPtr<IDBKey> prpKey, bool addOnly, PassRefPtr<IDBCallbacks> prpCallbacks, IDBTransactionBackendInterface* transactionPtr, ExceptionCode& ec) { + if (transactionPtr->mode() == IDBTransaction::READ_ONLY) { + ec = IDBDatabaseException::READ_ONLY_ERR; + return; + } + RefPtr<IDBObjectStoreBackendImpl> objectStore = this; RefPtr<SerializedScriptValue> value = prpValue; RefPtr<IDBKey> key = prpKey; @@ -277,9 +282,15 @@ void IDBObjectStoreBackendImpl::putInternal(ScriptExecutionContext*, PassRefPtr< void IDBObjectStoreBackendImpl::deleteFunction(PassRefPtr<IDBKey> prpKey, PassRefPtr<IDBCallbacks> prpCallbacks, IDBTransactionBackendInterface* transaction, ExceptionCode& ec) { + if (transaction->mode() == IDBTransaction::READ_ONLY) { + ec = IDBDatabaseException::READ_ONLY_ERR; + return; + } + RefPtr<IDBObjectStoreBackendImpl> objectStore = this; RefPtr<IDBKey> key = prpKey; RefPtr<IDBCallbacks> callbacks = prpCallbacks; + if (!transaction->scheduleTask(createCallbackTask(&IDBObjectStoreBackendImpl::deleteInternal, objectStore, key, callbacks))) ec = IDBDatabaseException::NOT_ALLOWED_ERR; } @@ -386,6 +397,11 @@ static void doDelete(SQLiteDatabase& db, const char* sql, int64_t id) void IDBObjectStoreBackendImpl::deleteIndex(const String& name, IDBTransactionBackendInterface* transaction, ExceptionCode& ec) { + if (transaction->mode() != IDBTransaction::VERSION_CHANGE) { + ec = IDBDatabaseException::NOT_ALLOWED_ERR; + return; + } + RefPtr<IDBIndexBackendImpl> index = m_indexes.get(name); if (!index) { ec = IDBDatabaseException::NOT_FOUND_ERR; diff --git a/Source/WebCore/svg/SVGElement.cpp b/Source/WebCore/svg/SVGElement.cpp index 1f5b0fa..c9efae8 100644 --- a/Source/WebCore/svg/SVGElement.cpp +++ b/Source/WebCore/svg/SVGElement.cpp @@ -38,6 +38,7 @@ #include "RegisteredEventListener.h" #include "RenderObject.h" #include "SVGCursorElement.h" +#include "SVGDocumentExtensions.h" #include "SVGElementInstance.h" #include "SVGElementRareData.h" #include "SVGNames.h" diff --git a/Source/WebCore/svg/SVGElement.h b/Source/WebCore/svg/SVGElement.h index d961c73..2c87f6e 100644 --- a/Source/WebCore/svg/SVGElement.h +++ b/Source/WebCore/svg/SVGElement.h @@ -23,7 +23,6 @@ #define SVGElement_h #if ENABLE(SVG) -#include "SVGDocumentExtensions.h" #include "SVGLocatable.h" #include "StyledElement.h" @@ -32,6 +31,7 @@ namespace WebCore { class CSSCursorImageValue; class Document; class SVGCursorElement; +class SVGDocumentExtensions; class SVGElementInstance; class SVGElementRareData; class SVGSVGElement; diff --git a/Source/WebCore/svg/SVGFEBlendElement.cpp b/Source/WebCore/svg/SVGFEBlendElement.cpp index 86299fe..4128232 100644 --- a/Source/WebCore/svg/SVGFEBlendElement.cpp +++ b/Source/WebCore/svg/SVGFEBlendElement.cpp @@ -24,6 +24,8 @@ #include "SVGFEBlendElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp index 79716fb..4c7ac0b 100644 --- a/Source/WebCore/svg/SVGFEColorMatrixElement.cpp +++ b/Source/WebCore/svg/SVGFEColorMatrixElement.cpp @@ -24,6 +24,8 @@ #include "SVGFEColorMatrixElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFEComponentTransferElement.cpp b/Source/WebCore/svg/SVGFEComponentTransferElement.cpp index 0fa98a4..243f856 100644 --- a/Source/WebCore/svg/SVGFEComponentTransferElement.cpp +++ b/Source/WebCore/svg/SVGFEComponentTransferElement.cpp @@ -24,10 +24,12 @@ #include "SVGFEComponentTransferElement.h" #include "Attr.h" +#include "FilterEffect.h" #include "SVGFEFuncAElement.h" #include "SVGFEFuncBElement.h" #include "SVGFEFuncGElement.h" #include "SVGFEFuncRElement.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFECompositeElement.cpp b/Source/WebCore/svg/SVGFECompositeElement.cpp index 1433a78..4c83d4f 100644 --- a/Source/WebCore/svg/SVGFECompositeElement.cpp +++ b/Source/WebCore/svg/SVGFECompositeElement.cpp @@ -24,6 +24,8 @@ #include "SVGFECompositeElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp index 373d508..301e351 100644 --- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp +++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp @@ -23,9 +23,11 @@ #include "SVGFEConvolveMatrixElement.h" #include "Attr.h" +#include "FilterEffect.h" #include "FloatPoint.h" #include "IntPoint.h" #include "IntSize.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGParserUtilities.h" diff --git a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h index 21826ec..87709ab 100644 --- a/Source/WebCore/svg/SVGFEConvolveMatrixElement.h +++ b/Source/WebCore/svg/SVGFEConvolveMatrixElement.h @@ -22,7 +22,9 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "FEConvolveMatrix.h" +#include "SVGAnimatedBoolean.h" #include "SVGAnimatedEnumeration.h" +#include "SVGAnimatedInteger.h" #include "SVGAnimatedNumber.h" #include "SVGAnimatedNumberList.h" #include "SVGFilterPrimitiveStandardAttributes.h" diff --git a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp index 873b831..49888da 100644 --- a/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp +++ b/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp @@ -24,9 +24,11 @@ #include "Attr.h" #include "FEDiffuseLighting.h" +#include "FilterEffect.h" #include "RenderStyle.h" #include "SVGColor.h" #include "SVGFELightElement.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGParserUtilities.h" diff --git a/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp b/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp index a363b3a..56315b6 100644 --- a/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp +++ b/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp @@ -23,6 +23,8 @@ #include "SVGFEDisplacementMapElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp b/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp index 43b6fd6..03368ac 100644 --- a/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp +++ b/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp @@ -24,6 +24,8 @@ #include "SVGFEGaussianBlurElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGParserUtilities.h" diff --git a/Source/WebCore/svg/SVGFEImageElement.h b/Source/WebCore/svg/SVGFEImageElement.h index 64d95dc..3f22805 100644 --- a/Source/WebCore/svg/SVGFEImageElement.h +++ b/Source/WebCore/svg/SVGFEImageElement.h @@ -25,6 +25,7 @@ #include "CachedResourceClient.h" #include "CachedResourceHandle.h" #include "ImageBuffer.h" +#include "SVGAnimatedBoolean.h" #include "SVGAnimatedPreserveAspectRatio.h" #include "SVGExternalResourcesRequired.h" #include "SVGFEImage.h" diff --git a/Source/WebCore/svg/SVGFEMergeElement.cpp b/Source/WebCore/svg/SVGFEMergeElement.cpp index 92f2346..8b1c753 100644 --- a/Source/WebCore/svg/SVGFEMergeElement.cpp +++ b/Source/WebCore/svg/SVGFEMergeElement.cpp @@ -23,7 +23,9 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "SVGFEMergeElement.h" +#include "FilterEffect.h" #include "SVGFEMergeNodeElement.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFEMorphologyElement.cpp b/Source/WebCore/svg/SVGFEMorphologyElement.cpp index 282c495..caf8e7b 100644 --- a/Source/WebCore/svg/SVGFEMorphologyElement.cpp +++ b/Source/WebCore/svg/SVGFEMorphologyElement.cpp @@ -23,6 +23,8 @@ #include "SVGFEMorphologyElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGParserUtilities.h" diff --git a/Source/WebCore/svg/SVGFEOffsetElement.cpp b/Source/WebCore/svg/SVGFEOffsetElement.cpp index d41e6db..2bd8aee 100644 --- a/Source/WebCore/svg/SVGFEOffsetElement.cpp +++ b/Source/WebCore/svg/SVGFEOffsetElement.cpp @@ -24,6 +24,8 @@ #include "SVGFEOffsetElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" namespace WebCore { diff --git a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp index 806d0cd..9298b3c 100644 --- a/Source/WebCore/svg/SVGFESpecularLightingElement.cpp +++ b/Source/WebCore/svg/SVGFESpecularLightingElement.cpp @@ -25,9 +25,11 @@ #include "SVGFESpecularLightingElement.h" #include "Attribute.h" +#include "FilterEffect.h" #include "RenderStyle.h" #include "SVGColor.h" #include "SVGFELightElement.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGParserUtilities.h" diff --git a/Source/WebCore/svg/SVGFETileElement.cpp b/Source/WebCore/svg/SVGFETileElement.cpp index e981482..6fc19e6 100644 --- a/Source/WebCore/svg/SVGFETileElement.cpp +++ b/Source/WebCore/svg/SVGFETileElement.cpp @@ -24,6 +24,8 @@ #include "SVGFETileElement.h" #include "Attribute.h" +#include "FilterEffect.h" +#include "SVGFilterBuilder.h" #include "SVGNames.h" #include "SVGRenderStyle.h" diff --git a/Source/WebCore/svg/SVGFETurbulenceElement.h b/Source/WebCore/svg/SVGFETurbulenceElement.h index 5e436f4..f9d86cb 100644 --- a/Source/WebCore/svg/SVGFETurbulenceElement.h +++ b/Source/WebCore/svg/SVGFETurbulenceElement.h @@ -24,6 +24,7 @@ #if ENABLE(SVG) && ENABLE(FILTERS) #include "FETurbulence.h" #include "SVGAnimatedEnumeration.h" +#include "SVGAnimatedInteger.h" #include "SVGAnimatedNumber.h" #include "SVGFilterPrimitiveStandardAttributes.h" diff --git a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp index bd717ea..00f99c5 100644 --- a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp +++ b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.cpp @@ -27,6 +27,7 @@ #include "Attribute.h" #include "FilterEffect.h" #include "RenderSVGResourceFilterPrimitive.h" +#include "SVGFilterBuilder.h" #include "SVGLength.h" #include "SVGNames.h" #include "SVGStyledElement.h" diff --git a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h index b13084b..34e19ea 100644 --- a/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h +++ b/Source/WebCore/svg/SVGFilterPrimitiveStandardAttributes.h @@ -22,11 +22,9 @@ #define SVGFilterPrimitiveStandardAttributes_h #if ENABLE(SVG) && ENABLE(FILTERS) -#include "FilterEffect.h" #include "RenderSVGResource.h" #include "SVGAnimatedLength.h" -#include "SVGFilterBuilder.h" -#include "SVGFilterElement.h" +#include "SVGAnimatedString.h" #include "SVGStyledElement.h" #include <wtf/PassRefPtr.h> @@ -34,6 +32,10 @@ namespace WebCore { +class Filter; +class FilterEffect; +class SVGFilterBuilder; + class SVGFilterPrimitiveStandardAttributes : public SVGStyledElement { public: void setStandardAttributes(bool, FilterEffect*) const; diff --git a/Source/WebCore/svg/SVGForeignObjectElement.cpp b/Source/WebCore/svg/SVGForeignObjectElement.cpp index c2fcecb..6b5cd41 100644 --- a/Source/WebCore/svg/SVGForeignObjectElement.cpp +++ b/Source/WebCore/svg/SVGForeignObjectElement.cpp @@ -25,7 +25,7 @@ #include "Attribute.h" #include "CSSPropertyNames.h" -#include "RenderForeignObject.h" +#include "RenderSVGForeignObject.h" #include "RenderSVGResource.h" #include "SVGLength.h" #include "SVGNames.h" @@ -139,7 +139,7 @@ void SVGForeignObjectElement::synchronizeProperty(const QualifiedName& attrName) RenderObject* SVGForeignObjectElement::createRenderer(RenderArena* arena, RenderStyle*) { - return new (arena) RenderForeignObject(this); + return new (arena) RenderSVGForeignObject(this); } bool SVGForeignObjectElement::childShouldCreateRenderer(Node* child) const diff --git a/Source/WebCore/svg/SVGTextContentElement.cpp b/Source/WebCore/svg/SVGTextContentElement.cpp index de75f5b..f723ecc 100644 --- a/Source/WebCore/svg/SVGTextContentElement.cpp +++ b/Source/WebCore/svg/SVGTextContentElement.cpp @@ -27,6 +27,7 @@ #include "CSSValueKeywords.h" #include "Frame.h" #include "RenderObject.h" +#include "SVGDocumentExtensions.h" #include "SVGNames.h" #include "SVGTextQuery.h" #include "SelectionController.h" diff --git a/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp b/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp index 6ed305e..d6d6f99 100644 --- a/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp +++ b/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp @@ -28,7 +28,9 @@ #include "AffineTransform.h" #include "Filter.h" #include "GraphicsContext.h" +#include "RenderTreeAsText.h" #include "SVGPreserveAspectRatio.h" +#include "TextStream.h" namespace WebCore { diff --git a/Source/WebCore/svg/graphics/filters/SVGFEImage.h b/Source/WebCore/svg/graphics/filters/SVGFEImage.h index 9ac5527..a5383cc 100644 --- a/Source/WebCore/svg/graphics/filters/SVGFEImage.h +++ b/Source/WebCore/svg/graphics/filters/SVGFEImage.h @@ -29,6 +29,8 @@ namespace WebCore { +class Image; + class FEImage : public FilterEffect { public: static PassRefPtr<FEImage> create(Filter*, RefPtr<Image>, const SVGPreserveAspectRatio&); diff --git a/Source/WebCore/websockets/WebSocketHandshake.cpp b/Source/WebCore/websockets/WebSocketHandshake.cpp index 5049098..9506ad4 100644 --- a/Source/WebCore/websockets/WebSocketHandshake.cpp +++ b/Source/WebCore/websockets/WebSocketHandshake.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2009 Google Inc. All rights reserved. + * Copyright (C) Research In Motion Limited 2011. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -427,6 +428,10 @@ KURL WebSocketHandshake::httpURLForAuthenticationAndCookies() const // statusCode and statusText will be set to -1 and a null string, respectively. int WebSocketHandshake::readStatusLine(const char* header, size_t headerLength, int& statusCode, String& statusText) { + // Arbitrary size limit to prevent the server from sending an unbounded + // amount of data with no newlines and forcing us to buffer it all. + static const int maximumLength = 1024; + statusCode = -1; statusText = String(); @@ -441,6 +446,12 @@ int WebSocketHandshake::readStatusLine(const char* header, size_t headerLength, space1 = p; else if (!space2) space2 = p; + } else if (*p == '\0') { + // The caller isn't prepared to deal with null bytes in status + // line. WebSockets specification doesn't prohibit this, but HTTP + // does, so we'll just treat this as an error. + m_context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line contains embedded null", 0, clientOrigin()); + return p + 1 - header; } else if (*p == '\n') break; } @@ -448,9 +459,9 @@ int WebSocketHandshake::readStatusLine(const char* header, size_t headerLength, return -1; // We have not received '\n' yet. const char* end = p + 1; - if (end - header > INT_MAX) { - m_context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line is too long: " + trimConsoleMessage(header, maxConsoleMessageSize + 1), 0, clientOrigin()); - return INT_MAX; + if (end - header > maximumLength) { + m_context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, "Status line is too long", 0, clientOrigin()); + return maximumLength; } int lineLength = end - header; diff --git a/Source/WebCore/wml/WMLInputElement.cpp b/Source/WebCore/wml/WMLInputElement.cpp index 2d7310a..687a387 100644 --- a/Source/WebCore/wml/WMLInputElement.cpp +++ b/Source/WebCore/wml/WMLInputElement.cpp @@ -142,7 +142,7 @@ String WMLInputElement::value() const return value; } -void WMLInputElement::setValue(const String& value, bool sendChangeEvent) +void WMLInputElement::setValue(const String& value, bool) { setFormControlValueMatchesRenderer(false); m_data.setValue(constrainValue(value)); @@ -161,7 +161,7 @@ void WMLInputElement::setValue(const String& value, bool sendChangeEvent) InputElement::notifyFormStateChanged(this); } -void WMLInputElement::setValueForUser(const String& value) +void WMLInputElement::setValueForUser(const String&) { /* InputElement class defines pure virtual function 'setValueForUser', which will be useful only in HTMLInputElement. Do nothing in 'WMLInputElement'. @@ -374,7 +374,7 @@ void WMLInputElement::initialize() if (!hasAttribute(WMLNames::emptyokAttr)) { if (m_formatMask.isEmpty() || // check if the format codes is just "*f" - (m_formatMask.length() == 2 && m_formatMask[0] == '*' && formatCodes().find(m_formatMask[1]) != -1)) + (m_formatMask.length() == 2 && m_formatMask[0] == '*' && formatCodes().find(m_formatMask[1]) != notFound)) m_isEmptyOk = true; } } @@ -389,11 +389,11 @@ String WMLInputElement::validateInputMask(const String& inputMask) for (unsigned i = 0; i < maskLength; ++i) { formatCode = inputMask[i]; - if (formatCodes().find(formatCode) == -1) { + if (formatCodes().find(formatCode) == notFound) { if (formatCode == '*' || (WTF::isASCIIDigit(formatCode) && formatCode != '0')) { // validate codes which ends with '*f' or 'nf' formatCode = inputMask[++i]; - if ((i + 1 != maskLength) || formatCodes().find(formatCode) == -1) { + if ((i + 1 != maskLength) || formatCodes().find(formatCode) == notFound) { isValid = false; break; } diff --git a/Source/WebCore/wml/WMLSelectElement.cpp b/Source/WebCore/wml/WMLSelectElement.cpp index 78749b3..a00edab 100644 --- a/Source/WebCore/wml/WMLSelectElement.cpp +++ b/Source/WebCore/wml/WMLSelectElement.cpp @@ -552,7 +552,7 @@ String WMLSelectElement::ivalue() const return parseValueSubstitutingVariableReferences(getAttribute(ivalueAttr)); } -void WMLSelectElement::listBoxSelectItem(int listIndex, bool allowMultiplySelections, bool shift, bool fireOnChangeNow) +void WMLSelectElement::listBoxSelectItem(int, bool, bool, bool) { /* Dummy implementation as listBoxSelectItem is pure virtual in SelectElement class */ } diff --git a/Source/WebCore/workers/AbstractWorker.cpp b/Source/WebCore/workers/AbstractWorker.cpp index 10bc95f..18a94b5 100644 --- a/Source/WebCore/workers/AbstractWorker.cpp +++ b/Source/WebCore/workers/AbstractWorker.cpp @@ -38,7 +38,7 @@ #include "Event.h" #include "EventException.h" #include "EventNames.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "ScriptExecutionContext.h" #include "SecurityOrigin.h" @@ -56,10 +56,7 @@ AbstractWorker::~AbstractWorker() void AbstractWorker::onDestroyWorker() { -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext() ? scriptExecutionContext()->inspectorController() : 0) - inspector->didDestroyWorker(asID()); -#endif + InspectorInstrumentation::didDestroyWorker(scriptExecutionContext(), asID()); } void AbstractWorker::contextDestroyed() diff --git a/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp b/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp index 4a8e947..3a14b62 100644 --- a/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp +++ b/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp @@ -37,7 +37,7 @@ #include "ActiveDOMObject.h" #include "CrossThreadTask.h" #include "Document.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "MessageEvent.h" #include "MessagePort.h" #include "NotImplemented.h" @@ -291,10 +291,7 @@ void SharedWorkerScriptLoader::notifyFinished() if (m_scriptLoader->failed()) m_worker->dispatchEvent(Event::create(eventNames().errorEvent, false, true)); else { -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = m_worker->scriptExecutionContext()->inspectorController()) - inspector->scriptImported(m_scriptLoader->identifier(), m_scriptLoader->script()); -#endif + InspectorInstrumentation::scriptImported(m_worker->scriptExecutionContext(), m_scriptLoader->identifier(), m_scriptLoader->script()); DefaultSharedWorkerRepository::instance().workerScriptLoaded(*m_proxy, m_worker->scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script(), m_port.release()); } m_worker->unsetPendingActivity(m_worker.get()); diff --git a/Source/WebCore/workers/SharedWorker.cpp b/Source/WebCore/workers/SharedWorker.cpp index 997f9cd..874ea64 100644 --- a/Source/WebCore/workers/SharedWorker.cpp +++ b/Source/WebCore/workers/SharedWorker.cpp @@ -35,7 +35,7 @@ #include "SharedWorker.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "KURL.h" #include "MessageChannel.h" #include "MessagePort.h" @@ -64,10 +64,7 @@ PassRefPtr<SharedWorker> SharedWorker::create(const String& url, const String& n SharedWorkerRepository::connect(worker.get(), remotePort.release(), scriptURL, name, ec); -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = context->inspectorController()) - inspector->didCreateWorker(worker->asID(), scriptURL.string(), true); -#endif + InspectorInstrumentation::didCreateWorker(context, worker->asID(), scriptURL.string(), true); return worker.release(); } diff --git a/Source/WebCore/workers/Worker.cpp b/Source/WebCore/workers/Worker.cpp index 32ec997..968352c 100644 --- a/Source/WebCore/workers/Worker.cpp +++ b/Source/WebCore/workers/Worker.cpp @@ -40,7 +40,7 @@ #include "ExceptionCode.h" #include "Frame.h" #include "FrameLoader.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "MessageEvent.h" #include "TextEncoding.h" #include "WorkerContextProxy.h" @@ -70,10 +70,7 @@ PassRefPtr<Worker> Worker::create(const String& url, ScriptExecutionContext* con // 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()); -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = context->inspectorController()) - inspector->didCreateWorker(worker->asID(), scriptURL.string(), false); -#endif + InspectorInstrumentation::didCreateWorker(context, worker->asID(), scriptURL.string(), false); return worker.release(); } @@ -135,10 +132,7 @@ void Worker::notifyFinished() dispatchEvent(Event::create(eventNames().errorEvent, false, true)); else { m_contextProxy->startWorkerContext(m_scriptLoader->url(), scriptExecutionContext()->userAgent(m_scriptLoader->url()), m_scriptLoader->script()); -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext()->inspectorController()) - inspector->scriptImported(m_scriptLoader->identifier(), m_scriptLoader->script()); -#endif + InspectorInstrumentation::scriptImported(scriptExecutionContext(), m_scriptLoader->identifier(), m_scriptLoader->script()); } m_scriptLoader = 0; diff --git a/Source/WebCore/workers/WorkerContext.cpp b/Source/WebCore/workers/WorkerContext.cpp index 345e5b7..d5d1ccc 100644 --- a/Source/WebCore/workers/WorkerContext.cpp +++ b/Source/WebCore/workers/WorkerContext.cpp @@ -38,11 +38,12 @@ #include "DatabaseSync.h" #include "DatabaseTracker.h" #include "DOMTimer.h" +#include "DOMURL.h" #include "DOMWindow.h" #include "ErrorEvent.h" #include "Event.h" #include "EventException.h" -#include "InspectorController.h" +#include "InspectorInstrumentation.h" #include "KURL.h" #include "MessagePort.h" #include "NotImplemented.h" @@ -245,10 +246,7 @@ void WorkerContext::importScripts(const Vector<String>& urls, ExceptionCode& ec) return; } -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext()->inspectorController()) - inspector->scriptImported(scriptLoader.identifier(), scriptLoader.script()); -#endif + InspectorInstrumentation::scriptImported(scriptExecutionContext(), scriptLoader.identifier(), scriptLoader.script()); ScriptValue exception; m_script->evaluate(ScriptSourceCode(scriptLoader.script(), *it), &exception); @@ -341,14 +339,11 @@ EventTargetData* WorkerContext::ensureEventTargetData() } #if ENABLE(BLOB) -String WorkerContext::createObjectURL(Blob* blob) -{ - return scriptExecutionContext()->createPublicBlobURL(blob).string(); -} - -void WorkerContext::revokeObjectURL(const String& blobURLString) +DOMURL* WorkerContext::webkitURL() const { - scriptExecutionContext()->revokePublicBlobURL(KURL(ParsedURLString, blobURLString)); + if (!m_domURL) + m_domURL = DOMURL::create(this->scriptExecutionContext()); + return m_domURL.get(); } #endif diff --git a/Source/WebCore/workers/WorkerContext.h b/Source/WebCore/workers/WorkerContext.h index 7b6c9a2..a0dbaae 100644 --- a/Source/WebCore/workers/WorkerContext.h +++ b/Source/WebCore/workers/WorkerContext.h @@ -46,6 +46,7 @@ namespace WebCore { class Blob; class DOMFileSystemSync; + class DOMURL; class Database; class DatabaseCallback; class DatabaseSync; @@ -121,8 +122,7 @@ namespace WebCore { virtual bool isJSExecutionTerminated() const; #if ENABLE(BLOB) - String createObjectURL(Blob*); - void revokeObjectURL(const String&); + DOMURL* webkitURL() const; #endif #if ENABLE(FILE_SYSTEM) @@ -186,6 +186,9 @@ namespace WebCore { #if ENABLE_NOTIFICATIONS mutable RefPtr<NotificationCenter> m_notifications; #endif +#if ENABLE(BLOB) + mutable RefPtr<DOMURL> m_domURL; +#endif bool m_closing; bool m_reportingException; EventTargetData m_eventTargetData; diff --git a/Source/WebCore/workers/WorkerContext.idl b/Source/WebCore/workers/WorkerContext.idl index 45ac5b1..ccbd964 100644 --- a/Source/WebCore/workers/WorkerContext.idl +++ b/Source/WebCore/workers/WorkerContext.idl @@ -101,10 +101,10 @@ module threads { attribute BlobBuilderConstructor BlobBuilder; attribute FileReaderConstructor FileReader; attribute FileReaderSyncConstructor FileReaderSync; - DOMString createObjectURL(in Blob blob); - void revokeObjectURL(in DOMString blobURL); #endif + readonly attribute [Conditional=BLOB] DOMURL webkitURL; + #if defined(ENABLE_FILE_SYSTEM) && ENABLE_FILE_SYSTEM const unsigned short TEMPORARY = 0; const unsigned short PERSISTENT = 1; diff --git a/Source/WebCore/workers/WorkerMessagingProxy.cpp b/Source/WebCore/workers/WorkerMessagingProxy.cpp index 10700c6..e89ccb4 100644 --- a/Source/WebCore/workers/WorkerMessagingProxy.cpp +++ b/Source/WebCore/workers/WorkerMessagingProxy.cpp @@ -38,7 +38,6 @@ #include "Document.h" #include "ErrorEvent.h" #include "ExceptionCode.h" -#include "InspectorController.h" #include "MessageEvent.h" #include "ScriptExecutionContext.h" #include "Worker.h" diff --git a/Source/WebCore/xml/DOMParser.cpp b/Source/WebCore/xml/DOMParser.cpp index e6aa3b0..c0d146c 100644 --- a/Source/WebCore/xml/DOMParser.cpp +++ b/Source/WebCore/xml/DOMParser.cpp @@ -24,20 +24,15 @@ #include "PlatformString.h" namespace WebCore { - + PassRefPtr<Document> DOMParser::parseFromString(const String& str, const String& contentType) { if (!DOMImplementation::isXMLMIMEType(contentType)) return 0; RefPtr<Document> doc = DOMImplementation::createDocument(contentType, 0, KURL(), false); - - doc->open(); - doc->write(str); - doc->finishParsing(); - doc->close(); - + doc->setContent(str); return doc.release(); } -} +} // namespace WebCore diff --git a/Source/WebCore/xml/XMLHttpRequest.cpp b/Source/WebCore/xml/XMLHttpRequest.cpp index fc7eb9e..ee9e20f 100644 --- a/Source/WebCore/xml/XMLHttpRequest.cpp +++ b/Source/WebCore/xml/XMLHttpRequest.cpp @@ -35,7 +35,6 @@ #include "EventNames.h" #include "File.h" #include "HTTPParsers.h" -#include "InspectorController.h" #include "InspectorInstrumentation.h" #include "ResourceError.h" #include "ResourceRequest.h" @@ -245,12 +244,8 @@ Document* XMLHttpRequest::responseXML(ExceptionCode& ec) m_responseXML = 0; } else { m_responseXML = Document::create(0, m_url); - m_responseXML->open(); // FIXME: Set Last-Modified. - m_responseXML->write(m_responseBuilder.toStringPreserveCapacity()); - m_responseXML->finishParsing(); - m_responseXML->close(); - + m_responseXML->setContent(m_responseBuilder.toStringPreserveCapacity()); if (!m_responseXML->wellFormed()) m_responseXML = 0; } @@ -1002,10 +997,7 @@ void XMLHttpRequest::didFinishLoading(unsigned long identifier) // FIXME: Set m_responseBlob to something here in the ResponseTypeBlob case. #endif -#if ENABLE(INSPECTOR) - if (InspectorController* inspector = scriptExecutionContext()->inspectorController()) - inspector->resourceRetrievedByXMLHttpRequest(identifier, m_responseBuilder.toStringPreserveCapacity(), m_url, m_lastSendURL, m_lastSendLineNumber); -#endif + InspectorInstrumentation::resourceRetrievedByXMLHttpRequest(scriptExecutionContext(), identifier, m_responseBuilder.toStringPreserveCapacity(), m_url, m_lastSendURL, m_lastSendLineNumber); bool hadLoader = m_loader; m_loader = 0; diff --git a/Source/WebCore/xml/XSLTProcessor.cpp b/Source/WebCore/xml/XSLTProcessor.cpp index 9b6a067..fe5f420 100644 --- a/Source/WebCore/xml/XSLTProcessor.cpp +++ b/Source/WebCore/xml/XSLTProcessor.cpp @@ -88,14 +88,11 @@ PassRefPtr<Document> XSLTProcessor::createDocumentFromSource(const String& sourc frame->setDocument(result); } - result->open(); - RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create(sourceMIMEType); decoder->setEncoding(sourceEncoding.isEmpty() ? UTF8Encoding() : TextEncoding(sourceEncoding), TextResourceDecoder::EncodingFromXMLHeader); result->setDecoder(decoder.release()); - result->write(documentSource); - result->close(); + result->setContent(documentSource); return result.release(); } |