<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[167152] trunk/Source</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/167152">167152</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2014-04-11 14:41:28 -0700 (Fri, 11 Apr 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Support document-relative and custom-frame page overlays
https://bugs.webkit.org/show_bug.cgi?id=131560
<rdar://problem/16595556>
Reviewed by Simon Fraser.
Add "document-relative" overlays, which attach to (and scroll with) the document,
and can be given a frame rect within the document to avoid overallocation of backing store.
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::didChangeScrollOffset):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::mainFrame):
(WebKit::WebPage::mainFrameView):
(WebKit::WebPage::didChangeScrollOffsetForFrame):
* WebProcess/WebPage/WebPage.h:
Let the PageOverlayController know *which* frame scrolled, instead of "any frame".
* WebProcess/WebPage/FindController.cpp:
(WebKit::FindController::updateFindUIAfterPageScroll):
Factor out shared code.
(WebKit::FindController::willMoveToWebPage):
(WebKit::FindController::drawRect):
We can use clearRect() instead of a transparency layer and fillRect().
I've looked through all the other overlay clients I know of and none of them
depend on having a transparency layer at the overlay level.
* WebProcess/WebPage/PageOverlay.cpp:
(WebKit::PageOverlay::create):
(WebKit::PageOverlay::PageOverlay):
(WebKit::PageOverlay::bounds):
(WebKit::PageOverlay::frame):
(WebKit::PageOverlay::setFrame):
(WebKit::PageOverlay::drawRect):
Add OverlayType, which allows creation of Document or View relative overlays.
All overlays up to this point are View relative, so we default to that.
Document-relative overlays scroll with the page instead of repainting as
the page scrolls. They can also be given an explicit frame, allowing them
to be smaller than the entire document.
* WebProcess/WebPage/PageOverlay.h:
(WebKit::PageOverlay::overlayType):
(WebKit::PageOverlay::webPage):
(WebKit::PageOverlay::client): Deleted.
* WebProcess/WebPage/PageOverlayController.cpp:
(WebKit::PageOverlayController::initialize):
(WebKit::PageOverlayController::installPageOverlay):
(WebKit::PageOverlayController::uninstallPageOverlay):
(WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
(WebKit::updateOverlayGeometry):
(WebKit::PageOverlayController::setPageOverlayNeedsDisplay):
(WebKit::PageOverlayController::didChangeViewSize):
(WebKit::PageOverlayController::didChangeDocumentSize):
(WebKit::PageOverlayController::didChangeDeviceScaleFactor):
(WebKit::PageOverlayController::didScrollFrame):
(WebKit::PageOverlayController::flushPageOverlayLayers):
(WebKit::PageOverlayController::didChangeOverlayFrame):
Keep two overlay root layers - one for view-relative
and one for document-relative overlays.
Don't force synchronous scrolling if we only have document-relative overlays.
Update the overlay's position as well as its size whenever necessary.
Update document-relative overlay geometry when the document size changes.
Only explicitly flush view-relative overlays; document-relative ones
are plugged into the WebCore layer tree and flushed along with the page.
* WebProcess/WebPage/PageOverlayController.h:
(WebKit::PageOverlayController::documentOverlayRootLayer):
(WebKit::PageOverlayController::viewOverlayRootLayer):
* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
(WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged):
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
(WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
Let the PageOverlay controller know when the document size changes.
When we set up compositing, push the document overlay root layer
down into WebCore.
* WebCore.exp.in:
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::RenderLayerCompositor):
(WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
(WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer):
* rendering/RenderLayerCompositor.h:
Add the concept of a document overlay layer, which is plugged in as the
last child of the root content layer. Expose it to WebKit2.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorh">trunk/Source/WebCore/rendering/RenderLayerCompositor.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageFindControllercpp">trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagePageOverlaycpp">trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagePageOverlayh">trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagePageOverlayControllercpp">trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagePageOverlayControllerh">trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreah">trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreamm">trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacTiledCoreAnimationDrawingAreamm">trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebCore/ChangeLog        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-04-11 Tim Horton <timothy_horton@apple.com>
+
+ Support document-relative and custom-frame page overlays
+ https://bugs.webkit.org/show_bug.cgi?id=131560
+ <rdar://problem/16595556>
+
+ Reviewed by Simon Fraser.
+
+ * WebCore.exp.in:
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::RenderLayerCompositor):
+ (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
+ (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer):
+ * rendering/RenderLayerCompositor.h:
+ Add the concept of a document overlay layer, which is plugged in as the
+ last child of the root content layer. Expose it to WebKit2.
+
</ins><span class="cx"> 2014-04-09 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> Autocorrection causes ASSERT when replacing alternative string
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -868,6 +868,7 @@
</span><span class="cx"> __ZN7WebCore21NetworkStorageSession28createPrivateBrowsingSessionERKN3WTF6StringE
</span><span class="cx"> __ZN7WebCore21PlatformKeyboardEvent24disambiguateKeyDownEventENS_13PlatformEvent4TypeEb
</span><span class="cx"> __ZN7WebCore21RemoteCommandListener6createERNS_27RemoteCommandListenerClientE
</span><ins>+__ZN7WebCore21RenderLayerCompositor27setDocumentOverlayRootLayerEPNS_13GraphicsLayerE
</ins><span class="cx"> __ZN7WebCore21ResourceLoadScheduler20servePendingRequestsENS_20ResourceLoadPriorityE
</span><span class="cx"> __ZN7WebCore21ResourceLoadScheduler20servePendingRequestsEPNS0_15HostInformationENS_20ResourceLoadPriorityE
</span><span class="cx"> __ZN7WebCore21ResourceLoadScheduler21resumePendingRequestsEv
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -255,6 +255,7 @@
</span><span class="cx"> , m_isTrackingRepaints(false)
</span><span class="cx"> , m_layersWithTiledBackingCount(0)
</span><span class="cx"> , m_rootLayerAttachment(RootLayerUnattached)
</span><ins>+ , m_documentOverlayRootLayer(nullptr)
</ins><span class="cx"> , m_layerFlushTimer(this, &RenderLayerCompositor::layerFlushTimerFired)
</span><span class="cx"> , m_layerFlushThrottlingEnabled(page() && page()->progress().isMainLoadProgressing())
</span><span class="cx"> , m_layerFlushThrottlingTemporarilyDisabledForInteraction(false)
</span><span class="lines">@@ -1460,6 +1461,9 @@
</span><span class="cx">
</span><span class="cx"> childLayersOfEnclosingLayer.append(layerBacking->childForSuperlayers());
</span><span class="cx"> }
</span><ins>+
+ if (m_documentOverlayRootLayer)
+ childLayersOfEnclosingLayer.append(m_documentOverlayRootLayer);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RenderLayerCompositor::rebuildRegionCompositingLayerTree(RenderNamedFlowFragment* region, Vector<GraphicsLayer*>& childList, int depth)
</span><span class="lines">@@ -3810,4 +3814,12 @@
</span><span class="cx"> m_renderView.frameView().firePaintRelatedMilestonesIfNeeded();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderLayerCompositor::setDocumentOverlayRootLayer(GraphicsLayer* documentOverlayRootLayer)
+{
+ if (m_documentOverlayRootLayer)
+ m_documentOverlayRootLayer->removeFromParent();
+ m_documentOverlayRootLayer = documentOverlayRootLayer;
+ scheduleCompositingLayerUpdate();
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -304,6 +304,8 @@
</span><span class="cx"> void setRootExtendedBackgroundColor(const Color&);
</span><span class="cx"> Color rootExtendedBackgroundColor() const { return m_rootExtendedBackgroundColor; }
</span><span class="cx">
</span><ins>+ void setDocumentOverlayRootLayer(GraphicsLayer*);
+
</ins><span class="cx"> private:
</span><span class="cx"> class OverlapMap;
</span><span class="cx">
</span><span class="lines">@@ -506,6 +508,8 @@
</span><span class="cx"> std::unique_ptr<GraphicsLayer> m_layerForFooter;
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+ GraphicsLayer* m_documentOverlayRootLayer;
+
</ins><span class="cx"> std::unique_ptr<GraphicsLayerUpdater> m_layerUpdater; // Updates tiled layer visible area periodically while animations are running.
</span><span class="cx">
</span><span class="cx"> Timer<RenderLayerCompositor> m_layerFlushTimer;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/ChangeLog        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -1,3 +1,85 @@
</span><ins>+2014-04-11 Tim Horton <timothy_horton@apple.com>
+
+ Support document-relative and custom-frame page overlays
+ https://bugs.webkit.org/show_bug.cgi?id=131560
+ <rdar://problem/16595556>
+
+ Reviewed by Simon Fraser.
+
+ Add "document-relative" overlays, which attach to (and scroll with) the document,
+ and can be given a frame rect within the document to avoid overallocation of backing store.
+
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::mainFrame):
+ (WebKit::WebPage::mainFrameView):
+ (WebKit::WebPage::didChangeScrollOffsetForFrame):
+ * WebProcess/WebPage/WebPage.h:
+ Let the PageOverlayController know *which* frame scrolled, instead of "any frame".
+
+ * WebProcess/WebPage/FindController.cpp:
+ (WebKit::FindController::updateFindUIAfterPageScroll):
+ Factor out shared code.
+
+ (WebKit::FindController::willMoveToWebPage):
+ (WebKit::FindController::drawRect):
+ We can use clearRect() instead of a transparency layer and fillRect().
+ I've looked through all the other overlay clients I know of and none of them
+ depend on having a transparency layer at the overlay level.
+
+ * WebProcess/WebPage/PageOverlay.cpp:
+ (WebKit::PageOverlay::create):
+ (WebKit::PageOverlay::PageOverlay):
+ (WebKit::PageOverlay::bounds):
+ (WebKit::PageOverlay::frame):
+ (WebKit::PageOverlay::setFrame):
+ (WebKit::PageOverlay::drawRect):
+ Add OverlayType, which allows creation of Document or View relative overlays.
+ All overlays up to this point are View relative, so we default to that.
+ Document-relative overlays scroll with the page instead of repainting as
+ the page scrolls. They can also be given an explicit frame, allowing them
+ to be smaller than the entire document.
+
+ * WebProcess/WebPage/PageOverlay.h:
+ (WebKit::PageOverlay::overlayType):
+ (WebKit::PageOverlay::webPage):
+ (WebKit::PageOverlay::client): Deleted.
+ * WebProcess/WebPage/PageOverlayController.cpp:
+ (WebKit::PageOverlayController::initialize):
+ (WebKit::PageOverlayController::installPageOverlay):
+ (WebKit::PageOverlayController::uninstallPageOverlay):
+ (WebKit::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
+ (WebKit::updateOverlayGeometry):
+ (WebKit::PageOverlayController::setPageOverlayNeedsDisplay):
+ (WebKit::PageOverlayController::didChangeViewSize):
+ (WebKit::PageOverlayController::didChangeDocumentSize):
+ (WebKit::PageOverlayController::didChangeDeviceScaleFactor):
+ (WebKit::PageOverlayController::didScrollFrame):
+ (WebKit::PageOverlayController::flushPageOverlayLayers):
+ (WebKit::PageOverlayController::didChangeOverlayFrame):
+ Keep two overlay root layers - one for view-relative
+ and one for document-relative overlays.
+ Don't force synchronous scrolling if we only have document-relative overlays.
+ Update the overlay's position as well as its size whenever necessary.
+ Update document-relative overlay geometry when the document size changes.
+ Only explicitly flush view-relative overlays; document-relative ones
+ are plugged into the WebCore layer tree and flushed along with the page.
+
+ * WebProcess/WebPage/PageOverlayController.h:
+ (WebKit::PageOverlayController::documentOverlayRootLayer):
+ (WebKit::PageOverlayController::viewOverlayRootLayer):
+ * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
+ * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
+ (WebKit::RemoteLayerTreeDrawingArea::setRootCompositingLayer):
+ (WebKit::RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged):
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
+ (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
+ Let the PageOverlay controller know when the document size changes.
+ When we set up compositing, push the document overlay root layer
+ down into WebCore.
+
</ins><span class="cx"> 2014-04-11 Pratik Solanki <psolanki@apple.com>
</span><span class="cx">
</span><span class="cx"> [iOS WebKit2]: Share NSURLCache directory for webkit processes
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -1579,17 +1579,7 @@
</span><span class="cx"> if (!webPage)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- webPage->didChangeScrollOffsetForAnyFrame();
-
- if (!m_frame->isMainFrame())
- return;
-
- // If this is called when tearing down a FrameView, the WebCore::Frame's
- // current FrameView will be null.
- if (!m_frame->coreFrame()->view())
- return;
-
- webPage->updateMainFrameScrollOffsetPinning();
</del><ins>+ webPage->didChangeScrollOffsetForFrame(m_frame->coreFrame());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool WebFrameLoaderClient::allowScript(bool enabledPerSettings)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageFindControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/FindController.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -162,9 +162,8 @@
</span><span class="cx"> RefPtr<PageOverlay> findPageOverlay = PageOverlay::create(this);
</span><span class="cx"> m_findPageOverlay = findPageOverlay.get();
</span><span class="cx"> m_webPage->installPageOverlay(findPageOverlay.release(), PageOverlay::FadeMode::Fade);
</span><del>- m_findPageOverlay->setNeedsDisplay();
- } else
- m_findPageOverlay->setNeedsDisplay();
</del><ins>+ }
+ m_findPageOverlay->setNeedsDisplay();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -394,7 +393,7 @@
</span><span class="cx"> static const float overlayBackgroundBlue = 0.1;
</span><span class="cx"> static const float overlayBackgroundAlpha = 0.25;
</span><span class="cx">
</span><del>-void FindController::drawRect(PageOverlay* /*pageOverlay*/, GraphicsContext& graphicsContext, const IntRect& dirtyRect)
</del><ins>+void FindController::drawRect(PageOverlay*, GraphicsContext& graphicsContext, const IntRect& dirtyRect)
</ins><span class="cx"> {
</span><span class="cx"> Color overlayBackgroundColor(overlayBackgroundRed, overlayBackgroundGreen, overlayBackgroundBlue, overlayBackgroundAlpha);
</span><span class="cx">
</span><span class="lines">@@ -413,16 +412,13 @@
</span><span class="cx"> for (size_t i = 0; i < rects.size(); ++i) {
</span><span class="cx"> IntRect whiteFrameRect = rects[i];
</span><span class="cx"> whiteFrameRect.inflate(1);
</span><del>-
</del><span class="cx"> graphicsContext.fillRect(whiteFrameRect);
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- graphicsContext.setFillColor(Color::transparent, ColorSpaceSRGB);
-
</del><span class="cx"> // Clear out the holes.
</span><span class="cx"> for (size_t i = 0; i < rects.size(); ++i)
</span><del>- graphicsContext.fillRect(rects[i]);
</del><ins>+ graphicsContext.clearRect(rects[i]);
</ins><span class="cx">
</span><span class="cx"> if (!m_isShowingFindIndicator)
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagePageOverlaycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -42,12 +42,12 @@
</span><span class="cx"> static const double fadeAnimationDuration = 0.2;
</span><span class="cx"> static const double fadeAnimationFrameRate = 30;
</span><span class="cx">
</span><del>-PassRefPtr<PageOverlay> PageOverlay::create(Client* client)
</del><ins>+PassRefPtr<PageOverlay> PageOverlay::create(Client* client, OverlayType overlayType)
</ins><span class="cx"> {
</span><del>- return adoptRef(new PageOverlay(client));
</del><ins>+ return adoptRef(new PageOverlay(client, overlayType));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-PageOverlay::PageOverlay(Client* client)
</del><ins>+PageOverlay::PageOverlay(Client* client, OverlayType overlayType)
</ins><span class="cx"> : m_client(client)
</span><span class="cx"> , m_webPage(0)
</span><span class="cx"> , m_fadeAnimationTimer(RunLoop::main(), this, &PageOverlay::fadeAnimationTimerFired)
</span><span class="lines">@@ -55,6 +55,7 @@
</span><span class="cx"> , m_fadeAnimationDuration(fadeAnimationDuration)
</span><span class="cx"> , m_fadeAnimationType(NoAnimation)
</span><span class="cx"> , m_fractionFadedIn(1.0)
</span><ins>+ , m_overlayType(overlayType)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -64,20 +65,45 @@
</span><span class="cx">
</span><span class="cx"> IntRect PageOverlay::bounds() const
</span><span class="cx"> {
</span><del>- FrameView* frameView = m_webPage->corePage()->mainFrame().view();
</del><ins>+ if (!m_overrideFrame.isEmpty())
+ return IntRect(IntPoint(), m_overrideFrame.size());
</ins><span class="cx">
</span><del>- int width = frameView->width();
- int height = frameView->height();
</del><ins>+ FrameView* frameView = m_webPage->mainFrameView();
</ins><span class="cx">
</span><del>- if (!ScrollbarTheme::theme()->usesOverlayScrollbars()) {
- if (frameView->verticalScrollbar())
- width -= frameView->verticalScrollbar()->width();
- if (frameView->horizontalScrollbar())
- height -= frameView->horizontalScrollbar()->height();
- }
- return IntRect(0, 0, width, height);
</del><ins>+ switch (m_overlayType) {
+ case OverlayType::View: {
+ int width = frameView->width();
+ int height = frameView->height();
+
+ if (!ScrollbarTheme::theme()->usesOverlayScrollbars()) {
+ if (frameView->verticalScrollbar())
+ width -= frameView->verticalScrollbar()->width();
+ if (frameView->horizontalScrollbar())
+ height -= frameView->horizontalScrollbar()->height();
+ }
+ return IntRect(0, 0, width, height);
+ }
+ case OverlayType::Document:
+ return IntRect(IntPoint(), frameView->contentsSize());
+ };
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+IntRect PageOverlay::frame() const
+{
+ if (!m_overrideFrame.isEmpty())
+ return m_overrideFrame;
+
+ return bounds();
+}
+
+void PageOverlay::setFrame(IntRect frame)
+{
+ m_overrideFrame = frame;
+
+ if (m_webPage)
+ m_webPage->pageOverlayController().didChangeOverlayFrame(this);
+}
+
</ins><span class="cx"> void PageOverlay::setPage(WebPage* webPage)
</span><span class="cx"> {
</span><span class="cx"> m_client->willMoveToWebPage(this, webPage);
</span><span class="lines">@@ -108,12 +134,7 @@
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> GraphicsContextStateSaver stateSaver(graphicsContext);
</span><del>- graphicsContext.beginTransparencyLayer(1);
- graphicsContext.setCompositeOperation(CompositeCopy);
-
</del><span class="cx"> m_client->drawRect(this, graphicsContext, paintRect);
</span><del>-
- graphicsContext.endTransparencyLayer();
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool PageOverlay::mouseEvent(const WebMouseEvent& mouseEvent)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagePageOverlayh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -28,13 +28,12 @@
</span><span class="cx">
</span><span class="cx"> #include "APIObject.h"
</span><span class="cx"> #include "WKBase.h"
</span><ins>+#include <WebCore/IntRect.h>
</ins><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RunLoop.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><del>- class GraphicsContext;
- class IntPoint;
- class IntRect;
</del><ins>+class GraphicsContext;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -59,7 +58,12 @@
</span><span class="cx"> virtual WKArrayRef copyAccessibilityAttributeNames(PageOverlay*, bool /* parameterizedNames */) { return 0; }
</span><span class="cx"> };
</span><span class="cx">
</span><del>- static PassRefPtr<PageOverlay> create(Client*);
</del><ins>+ enum class OverlayType {
+ View, // Fixed to the view size; does not scale or scroll with the document, repaints on scroll.
+ Document, // Scales and scrolls with the document.
+ };
+
+ static PassRefPtr<PageOverlay> create(Client*, OverlayType = OverlayType::View);
</ins><span class="cx"> virtual ~PageOverlay();
</span><span class="cx">
</span><span class="cx"> void setPage(WebPage*);
</span><span class="lines">@@ -81,13 +85,17 @@
</span><span class="cx"> Client* client() const { return m_client; }
</span><span class="cx">
</span><span class="cx"> enum class FadeMode { DoNotFade, Fade };
</span><ins>+
+ OverlayType overlayType() { return m_overlayType; }
+
+ WebCore::IntRect bounds() const;
+ WebCore::IntRect frame() const;
+ void setFrame(WebCore::IntRect);
</ins><span class="cx">
</span><span class="cx"> protected:
</span><del>- explicit PageOverlay(Client*);
</del><ins>+ explicit PageOverlay(Client*, OverlayType);
</ins><span class="cx">
</span><span class="cx"> private:
</span><del>- WebCore::IntRect bounds() const;
-
</del><span class="cx"> void startFadeAnimation();
</span><span class="cx"> void fadeAnimationTimerFired();
</span><span class="cx">
</span><span class="lines">@@ -106,6 +114,9 @@
</span><span class="cx">
</span><span class="cx"> FadeAnimationType m_fadeAnimationType;
</span><span class="cx"> float m_fractionFadedIn;
</span><ins>+
+ OverlayType m_overlayType;
+ WebCore::IntRect m_overrideFrame;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagePageOverlayControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -29,9 +29,11 @@
</span><span class="cx"> #include "DrawingArea.h"
</span><span class="cx"> #include "PageOverlay.h"
</span><span class="cx"> #include "WebPage.h"
</span><ins>+#include <WebCore/Frame.h>
</ins><span class="cx"> #include <WebCore/FrameView.h>
</span><span class="cx"> #include <WebCore/GraphicsContext.h>
</span><span class="cx"> #include <WebCore/GraphicsLayer.h>
</span><ins>+#include <WebCore/MainFrame.h>
</ins><span class="cx"> #include <WebCore/ScrollingCoordinator.h>
</span><span class="cx"> #include <WebCore/Settings.h>
</span><span class="cx"> #include <WebCore/TiledBacking.h>
</span><span class="lines">@@ -47,17 +49,21 @@
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::initialize()
</span><span class="cx"> {
</span><del>- ASSERT(!m_rootLayer);
</del><ins>+ ASSERT(!m_documentOverlayRootLayer);
+ ASSERT(!m_viewOverlayRootLayer);
</ins><span class="cx">
</span><del>- m_rootLayer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
</del><ins>+ m_documentOverlayRootLayer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
+ m_viewOverlayRootLayer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
</ins><span class="cx"> #ifndef NDEBUG
</span><del>- m_rootLayer->setName("Page Overlay container");
</del><ins>+ m_documentOverlayRootLayer->setName("Page Overlay container (document-relative)");
+ m_viewOverlayRootLayer->setName("Page Overlay container (view-relative)");
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::installPageOverlay(PassRefPtr<PageOverlay> pageOverlay, PageOverlay::FadeMode fadeMode)
</span><span class="cx"> {
</span><del>- ASSERT(m_rootLayer);
</del><ins>+ ASSERT(m_documentOverlayRootLayer);
+ ASSERT(m_viewOverlayRootLayer);
</ins><span class="cx">
</span><span class="cx"> RefPtr<PageOverlay> overlay = pageOverlay;
</span><span class="cx">
</span><span class="lines">@@ -71,20 +77,26 @@
</span><span class="cx"> overlay->startFadeInAnimation();
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<GraphicsLayer> layer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
</span><ins>+ layer->setAnchorPoint(FloatPoint3D());
+ layer->setPosition(overlay->frame().location());
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> layer->setName("Page Overlay content");
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> updateSettingsForLayer(layer.get());
</span><del>- m_rootLayer->addChild(layer.get());
</del><ins>+
+ switch (overlay->overlayType()) {
+ case PageOverlay::OverlayType::View:
+ m_viewOverlayRootLayer->addChild(layer.get());
+ break;
+ case PageOverlay::OverlayType::Document:
+ m_documentOverlayRootLayer->addChild(layer.get());
+ break;
+ }
+
</ins><span class="cx"> m_overlayGraphicsLayers.set(overlay.get(), std::move(layer));
</span><span class="cx">
</span><del>-#if ENABLE(ASYNC_SCROLLING)
- if (Page* page = m_webPage->corePage()) {
- if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
- scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(true);
- }
-#endif
</del><ins>+ updateForceSynchronousScrollLayerPositionUpdates();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::uninstallPageOverlay(PageOverlay* overlay, PageOverlay::FadeMode fadeMode)
</span><span class="lines">@@ -102,17 +114,36 @@
</span><span class="cx"> ASSERT(overlayIndex != notFound);
</span><span class="cx"> m_pageOverlays.remove(overlayIndex);
</span><span class="cx">
</span><del>- if (!m_pageOverlays.isEmpty())
- return;
</del><ins>+ updateForceSynchronousScrollLayerPositionUpdates();
+}
</ins><span class="cx">
</span><ins>+void PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates()
+{
</ins><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><ins>+ bool forceSynchronousScrollLayerPositionUpdates = false;
+
+ for (auto& overlay : m_pageOverlays) {
+ if (overlay->overlayType() == PageOverlay::OverlayType::View)
+ forceSynchronousScrollLayerPositionUpdates = true;
+ }
+
</ins><span class="cx"> if (Page* page = m_webPage->corePage()) {
</span><span class="cx"> if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
</span><del>- scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(false);
</del><ins>+ scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(forceSynchronousScrollLayerPositionUpdates);
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+static void updateOverlayGeometry(PageOverlay* overlay, GraphicsLayer* graphicsLayer)
+{
+ if (!graphicsLayer->drawsContent())
+ return;
+
+ graphicsLayer->setPosition(overlay->frame().location());
+ graphicsLayer->setSize(overlay->frame().size());
+ graphicsLayer->setNeedsDisplay();
+}
+
</ins><span class="cx"> void PageOverlayController::setPageOverlayNeedsDisplay(PageOverlay* overlay, const WebCore::IntRect& dirtyRect)
</span><span class="cx"> {
</span><span class="cx"> GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
</span><span class="lines">@@ -121,8 +152,9 @@
</span><span class="cx">
</span><span class="cx"> if (!graphicsLayer->drawsContent()) {
</span><span class="cx"> graphicsLayer->setDrawsContent(true);
</span><del>- graphicsLayer->setSize(m_webPage->size());
</del><ins>+ updateOverlayGeometry(overlay, graphicsLayer);
</ins><span class="cx"> }
</span><ins>+
</ins><span class="cx"> graphicsLayer->setNeedsDisplayInRect(dirtyRect);
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -147,14 +179,20 @@
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::didChangeViewSize()
</span><span class="cx"> {
</span><del>- for (auto& graphicsLayer : m_overlayGraphicsLayers.values()) {
- if (!graphicsLayer->drawsContent())
- continue;
- graphicsLayer->setSize(m_webPage->size());
- graphicsLayer->setNeedsDisplay();
</del><ins>+ for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
+ if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::View)
+ updateOverlayGeometry(overlayAndLayer.key, overlayAndLayer.value.get());
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void PageOverlayController::didChangeDocumentSize()
+{
+ for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
+ if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::Document)
+ updateOverlayGeometry(overlayAndLayer.key, overlayAndLayer.value.get());
+ }
+}
+
</ins><span class="cx"> void PageOverlayController::didChangePreferences()
</span><span class="cx"> {
</span><span class="cx"> for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
</span><span class="lines">@@ -163,8 +201,11 @@
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::didChangeDeviceScaleFactor()
</span><span class="cx"> {
</span><del>- m_rootLayer->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
- invalidateAllPageOverlayLayers();
</del><ins>+ m_documentOverlayRootLayer->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
+ m_viewOverlayRootLayer->noteDeviceOrPageScaleFactorChangedIncludingDescendants();
+
+ for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
+ graphicsLayer->setNeedsDisplay();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::didChangeExposedRect()
</span><span class="lines">@@ -172,20 +213,17 @@
</span><span class="cx"> m_webPage->drawingArea()->scheduleCompositingLayerFlush();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void PageOverlayController::didScrollAnyFrame()
</del><ins>+void PageOverlayController::didScrollFrame(Frame* frame)
</ins><span class="cx"> {
</span><del>- invalidateAllPageOverlayLayers();
</del><ins>+ for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
+ if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::View || !frame->isMainFrame())
+ overlayAndLayer.value->setNeedsDisplay();
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void PageOverlayController::invalidateAllPageOverlayLayers()
-{
- for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
- graphicsLayer->setNeedsDisplay();
-}
-
</del><span class="cx"> void PageOverlayController::flushPageOverlayLayers(FloatRect visibleRect)
</span><span class="cx"> {
</span><del>- m_rootLayer->flushCompositingState(visibleRect);
</del><ins>+ m_viewOverlayRootLayer->flushCompositingState(visibleRect);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void PageOverlayController::updateSettingsForLayer(GraphicsLayer* layer)
</span><span class="lines">@@ -259,4 +297,16 @@
</span><span class="cx"> m_webPage->drawingArea()->scheduleCompositingLayerFlush();
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void PageOverlayController::didChangeOverlayFrame(PageOverlay* overlay)
+{
+ ASSERT(m_pageOverlays.contains(overlay));
+
+ GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
+
+ if (!graphicsLayer->drawsContent())
+ return;
+
+ updateOverlayGeometry(overlay, graphicsLayer);
+}
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagePageOverlayControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -33,6 +33,10 @@
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/Vector.h>
</span><span class="cx">
</span><ins>+namespace WebCore {
+class Frame;
+}
+
</ins><span class="cx"> namespace WebKit {
</span><span class="cx">
</span><span class="cx"> class WebMouseEvent;
</span><span class="lines">@@ -44,7 +48,8 @@
</span><span class="cx">
</span><span class="cx"> void initialize();
</span><span class="cx">
</span><del>- WebCore::GraphicsLayer* rootLayer() const { return m_rootLayer.get(); }
</del><ins>+ WebCore::GraphicsLayer* documentOverlayRootLayer() const { return m_documentOverlayRootLayer.get(); }
+ WebCore::GraphicsLayer* viewOverlayRootLayer() const { return m_viewOverlayRootLayer.get(); }
</ins><span class="cx">
</span><span class="cx"> void installPageOverlay(PassRefPtr<PageOverlay>, PageOverlay::FadeMode);
</span><span class="cx"> void uninstallPageOverlay(PageOverlay*, PageOverlay::FadeMode);
</span><span class="lines">@@ -54,10 +59,12 @@
</span><span class="cx"> void clearPageOverlay(PageOverlay*);
</span><span class="cx">
</span><span class="cx"> void didChangeViewSize();
</span><ins>+ void didChangeDocumentSize();
</ins><span class="cx"> void didChangePreferences();
</span><span class="cx"> void didChangeDeviceScaleFactor();
</span><span class="cx"> void didChangeExposedRect();
</span><del>- void didScrollAnyFrame();
</del><ins>+ void didScrollFrame(WebCore::Frame*);
+ void didChangeOverlayFrame(PageOverlay*);
</ins><span class="cx">
</span><span class="cx"> void flushPageOverlayLayers(WebCore::FloatRect);
</span><span class="cx">
</span><span class="lines">@@ -69,7 +76,7 @@
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> void updateSettingsForLayer(WebCore::GraphicsLayer*);
</span><del>- void invalidateAllPageOverlayLayers();
</del><ins>+ void updateForceSynchronousScrollLayerPositionUpdates();
</ins><span class="cx">
</span><span class="cx"> // WebCore::GraphicsLayerClient
</span><span class="cx"> virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double) override { }
</span><span class="lines">@@ -78,7 +85,8 @@
</span><span class="cx"> virtual float deviceScaleFactor() const override;
</span><span class="cx"> virtual void didCommitChangesForLayer(const WebCore::GraphicsLayer*) const override { }
</span><span class="cx">
</span><del>- std::unique_ptr<WebCore::GraphicsLayer> m_rootLayer;
</del><ins>+ std::unique_ptr<WebCore::GraphicsLayer> m_documentOverlayRootLayer;
+ std::unique_ptr<WebCore::GraphicsLayer> m_viewOverlayRootLayer;
</ins><span class="cx"> HashMap<PageOverlay*, std::unique_ptr<WebCore::GraphicsLayer>> m_overlayGraphicsLayers;
</span><span class="cx"> Vector<RefPtr<PageOverlay>> m_pageOverlays;
</span><span class="cx"> WebPage* m_webPage;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -3817,7 +3817,7 @@
</span><span class="cx">
</span><span class="cx"> Frame* WebPage::mainFrame() const
</span><span class="cx"> {
</span><del>- return m_page ? &m_page->mainFrame() : 0;
</del><ins>+ return m_page ? &m_page->mainFrame() : nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> FrameView* WebPage::mainFrameView() const
</span><span class="lines">@@ -3825,7 +3825,7 @@
</span><span class="cx"> if (Frame* frame = mainFrame())
</span><span class="cx"> return frame->view();
</span><span class="cx">
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebPage::setScrollingPerformanceLoggingEnabled(bool enabled)
</span><span class="lines">@@ -4506,9 +4506,19 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-void WebPage::didChangeScrollOffsetForAnyFrame()
</del><ins>+void WebPage::didChangeScrollOffsetForFrame(Frame* frame)
</ins><span class="cx"> {
</span><del>- m_pageOverlayController.didScrollAnyFrame();
</del><ins>+ m_pageOverlayController.didScrollFrame(frame);
+
+ if (!frame->isMainFrame())
+ return;
+
+ // If this is called when tearing down a FrameView, the WebCore::Frame's
+ // current FrameView will be null.
+ if (!frame->view())
+ return;
+
+ updateMainFrameScrollOffsetPinning();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -780,7 +780,7 @@
</span><span class="cx"> void handleTelephoneNumberClick(const String& number, const WebCore::IntPoint&);
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- void didChangeScrollOffsetForAnyFrame();
</del><ins>+ void didChangeScrollOffsetForFrame(WebCore::Frame*);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> WebPage(uint64_t pageID, const WebPageCreationParameters&);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -81,6 +81,8 @@
</span><span class="cx"> virtual void setDeviceScaleFactor(float) override;
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+ virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) override;
+
</ins><span class="cx"> void updateScrolledExposedRect();
</span><span class="cx">
</span><span class="cx"> void layerFlushTimerFired(WebCore::Timer<RemoteLayerTreeDrawingArea>*);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> #import <WebCore/Frame.h>
</span><span class="cx"> #import <WebCore/FrameView.h>
</span><span class="cx"> #import <WebCore/MainFrame.h>
</span><ins>+#import <WebCore/RenderLayerCompositor.h>
+#import <WebCore/RenderView.h>
</ins><span class="cx"> #import <WebCore/Settings.h>
</span><span class="cx"> #import <WebCore/TiledBacking.h>
</span><span class="cx">
</span><span class="lines">@@ -89,9 +91,11 @@
</span><span class="cx"> Vector<GraphicsLayer *> children;
</span><span class="cx"> if (rootLayer) {
</span><span class="cx"> children.append(rootLayer);
</span><del>- children.append(m_webPage->pageOverlayController().rootLayer());
</del><ins>+ children.append(m_webPage->pageOverlayController().viewOverlayRootLayer());
</ins><span class="cx"> }
</span><span class="cx"> m_rootLayer->setChildren(children);
</span><ins>+
+ m_webPage->mainFrameView()->renderView()->compositor().setDocumentOverlayRootLayer(m_webPage->pageOverlayController().documentOverlayRootLayer());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RemoteLayerTreeDrawingArea::updateGeometry(const IntSize& viewSize, const IntSize& layerPosition)
</span><span class="lines">@@ -293,4 +297,9 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RemoteLayerTreeDrawingArea::mainFrameContentSizeChanged(const IntSize&)
+{
+ m_webPage->pageOverlayController().didChangeDocumentSize();
+}
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacTiledCoreAnimationDrawingAreamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (167151 => 167152)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm        2014-04-11 21:35:17 UTC (rev 167151)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm        2014-04-11 21:41:28 UTC (rev 167152)
</span><span class="lines">@@ -201,6 +201,8 @@
</span><span class="cx">
</span><span class="cx"> void TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged(const IntSize&)
</span><span class="cx"> {
</span><ins>+ m_webPage->pageOverlayController().didChangeDocumentSize();
+
</ins><span class="cx"> if (!m_webPage->minimumLayoutSize().width())
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -445,8 +447,10 @@
</span><span class="cx"> [CATransaction begin];
</span><span class="cx"> [CATransaction setDisableActions:YES];
</span><span class="cx">
</span><del>- [m_hostingLayer setSublayers:layer ? @[ layer, m_webPage->pageOverlayController().rootLayer()->platformLayer() ] : @[ ]];
</del><ins>+ [m_hostingLayer setSublayers:layer ? @[ layer, m_webPage->pageOverlayController().viewOverlayRootLayer()->platformLayer() ] : @[ ]];
</ins><span class="cx">
</span><ins>+ m_webPage->mainFrameView()->renderView()->compositor().setDocumentOverlayRootLayer(m_webPage->pageOverlayController().documentOverlayRootLayer());
+
</ins><span class="cx"> bool hadRootLayer = !!m_rootLayer;
</span><span class="cx"> m_rootLayer = layer;
</span><span class="cx"> [m_rootLayer setSublayerTransform:m_transform];
</span></span></pre>
</div>
</div>
</body>
</html>