<!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>[188011] trunk/Source/WebKit2</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/188011">188011</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2015-08-05 18:06:14 -0700 (Wed, 05 Aug 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>PDFPlugins are clipped in link previews (and remain so when opened)
https://bugs.webkit.org/show_bug.cgi?id=147708
&lt;rdar://problem/22055130&gt;

Reviewed by Simon Fraser.

* UIProcess/API/mac/WKView.mm:
(-[WKView initWithFrame:processPool:configuration:webView:]):
(-[WKView _supportsArbitraryLayoutModes]):
(-[WKView _didCommitLoadForMainFrame]):
(-[WKView _setLayoutMode:]):
(-[WKView _setViewScale:]):
Avoid using any layout mode other than &quot;ViewSize&quot; for main frame PluginDocuments,
because they will often end up behaving incorrectly (especially with PDFPlugin,
which is even more special in that it takes over application of page scale).

Save any incoming changes to the viewScale and layoutMode, and re-apply
them once we load something in the main frame that is *not* a PluginDocument.

* UIProcess/API/mac/WKViewInternal.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::scalePage):
Make sure to reset WebCore's page scale if the main frame contains a 
PluginDocument that takes care of page scale itself.

(WebKit::WebPage::didCommitLoad):
Do the same thing as what we do in WKView _didCommitLoadForMainFrame,
but without the UI process round-trip, to avoid an ugly flash.

* UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::didCommitLoad):
* UIProcess/WebFrameProxy.h:
(WebKit::WebFrameProxy::containsPluginDocument):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didCommitLoadForFrame):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* UIProcess/mac/PageClientImpl.mm:
(WebKit::PageClientImpl::didCommitLoadForMainFrame):
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
Plumb and keep track of whether the main frame contains a PluginDocument or not.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPImacWKViewmm">trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPImacWKViewInternalh">trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxycpp">trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebFrameProxyh">trunk/Source/WebKit2/UIProcess/WebFrameProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacPageClientImplmm">trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/ChangeLog        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -1,3 +1,48 @@
</span><ins>+2015-08-05  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        PDFPlugins are clipped in link previews (and remain so when opened)
+        https://bugs.webkit.org/show_bug.cgi?id=147708
+        &lt;rdar://problem/22055130&gt;
+
+        Reviewed by Simon Fraser.
+
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView initWithFrame:processPool:configuration:webView:]):
+        (-[WKView _supportsArbitraryLayoutModes]):
+        (-[WKView _didCommitLoadForMainFrame]):
+        (-[WKView _setLayoutMode:]):
+        (-[WKView _setViewScale:]):
+        Avoid using any layout mode other than &quot;ViewSize&quot; for main frame PluginDocuments,
+        because they will often end up behaving incorrectly (especially with PDFPlugin,
+        which is even more special in that it takes over application of page scale).
+
+        Save any incoming changes to the viewScale and layoutMode, and re-apply
+        them once we load something in the main frame that is *not* a PluginDocument.
+
+        * UIProcess/API/mac/WKViewInternal.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::scalePage):
+        Make sure to reset WebCore's page scale if the main frame contains a 
+        PluginDocument that takes care of page scale itself.
+
+        (WebKit::WebPage::didCommitLoad):
+        Do the same thing as what we do in WKView _didCommitLoadForMainFrame,
+        but without the UI process round-trip, to avoid an ugly flash.
+
+        * UIProcess/WebFrameProxy.cpp:
+        (WebKit::WebFrameProxy::didCommitLoad):
+        * UIProcess/WebFrameProxy.h:
+        (WebKit::WebFrameProxy::containsPluginDocument):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::didCommitLoadForFrame):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * UIProcess/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::didCommitLoadForMainFrame):
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDidCommitLoad):
+        Plumb and keep track of whether the main frame contains a PluginDocument or not.
+
</ins><span class="cx"> 2015-08-05  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, roll out http://trac.webkit.org/changeset/187972.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPImacWKViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -264,6 +264,8 @@
</span><span class="cx">     BOOL _allowsLinkPreview;
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;WKViewLayoutStrategy&gt; _layoutStrategy;
</span><ins>+    WKLayoutMode _lastRequestedLayoutMode;
+    float _lastRequestedViewScale;
</ins><span class="cx">     CGSize _minimumViewSize;
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;CALayer&gt; _rootLayer;
</span><span class="lines">@@ -3776,6 +3778,8 @@
</span><span class="cx">     _data-&gt;_clipsToVisibleRect = NO;
</span><span class="cx">     _data-&gt;_useContentPreparationRectForVisibleRect = NO;
</span><span class="cx">     _data-&gt;_windowOcclusionDetectionEnabled = YES;
</span><ins>+    _data-&gt;_lastRequestedLayoutMode = kWKLayoutModeViewSize;
+    _data-&gt;_lastRequestedViewScale = 1;
</ins><span class="cx"> 
</span><span class="cx">     _data-&gt;_windowVisibilityObserver = adoptNS([[WKWindowVisibilityObserver alloc] initWithView:self]);
</span><span class="cx"> 
</span><span class="lines">@@ -3894,6 +3898,41 @@
</span><span class="cx">         _data-&gt;_gestureController-&gt;didFirstVisuallyNonEmptyLayoutForMainFrame();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+- (BOOL)_supportsArbitraryLayoutModes
+{
+    WebPageProxy* page = _data-&gt;_page.get();
+    if (!page)
+        return YES;
+    WebFrameProxy* frame = page-&gt;mainFrame();
+    if (!frame)
+        return YES;
+
+    // If we have a plugin document in the main frame, avoid using custom WKLayoutModes
+    // and fall back to the defaults, because there's a good chance that it won't work (e.g. with PDFPlugin).
+    if (frame-&gt;containsPluginDocument())
+        return NO;
+
+    return YES;
+}
+
+- (void)_didCommitLoadForMainFrame
+{
+    if (![self _supportsArbitraryLayoutModes]) {
+        WKLayoutMode oldRequestedLayoutMode = _data-&gt;_lastRequestedLayoutMode;
+        float oldRequestedViewScale = _data-&gt;_lastRequestedViewScale;
+        [self _setViewScale:1];
+        [self _setLayoutMode:kWKLayoutModeViewSize];
+
+        // The 'last requested' parameters will have been overwritten by setting them above, but we don't
+        // want this to count as a request (only changes from the client count), so reset them.
+        _data-&gt;_lastRequestedLayoutMode = oldRequestedLayoutMode;
+        _data-&gt;_lastRequestedViewScale = oldRequestedViewScale;
+    } else if (_data-&gt;_lastRequestedLayoutMode != [_data-&gt;_layoutStrategy layoutMode]) {
+        [self _setViewScale:_data-&gt;_lastRequestedViewScale];
+        [self _setLayoutMode:_data-&gt;_lastRequestedLayoutMode];
+    }
+}
+
</ins><span class="cx"> - (void)_didFinishLoadForMainFrame
</span><span class="cx"> {
</span><span class="cx">     if (_data-&gt;_gestureController)
</span><span class="lines">@@ -4302,6 +4341,11 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_setLayoutMode:(WKLayoutMode)layoutMode
</span><span class="cx"> {
</span><ins>+    _data-&gt;_lastRequestedLayoutMode = layoutMode;
+
+    if (![self _supportsArbitraryLayoutModes] &amp;&amp; layoutMode != kWKLayoutModeViewSize)
+        return;
+
</ins><span class="cx">     if (layoutMode == [_data-&gt;_layoutStrategy layoutMode])
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -4326,6 +4370,11 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)_setViewScale:(CGFloat)viewScale
</span><span class="cx"> {
</span><ins>+    _data-&gt;_lastRequestedViewScale = viewScale;
+
+    if (![self _supportsArbitraryLayoutModes] &amp;&amp; viewScale != 1)
+        return;
+
</ins><span class="cx">     if (viewScale &lt;= 0 || isnan(viewScale) || isinf(viewScale))
</span><span class="cx">         [NSException raise:NSInvalidArgumentException format:@&quot;View scale should be a positive number&quot;];
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPImacWKViewInternalh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -119,6 +119,7 @@
</span><span class="cx"> - (BOOL)_suppressVisibilityUpdates;
</span><span class="cx"> 
</span><span class="cx"> - (void)_didFirstVisuallyNonEmptyLayoutForMainFrame;
</span><ins>+- (void)_didCommitLoadForMainFrame;
</ins><span class="cx"> - (void)_didFinishLoadForMainFrame;
</span><span class="cx"> - (void)_didFailLoadForMainFrame;
</span><span class="cx"> - (void)_didSameDocumentNavigationForMainFrame:(WebKit::SameDocumentNavigationType)type;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.cpp        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -144,7 +144,7 @@
</span><span class="cx">     m_frameLoadState.didFailProvisionalLoad();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebFrameProxy::didCommitLoad(const String&amp; contentType, WebCertificateInfo&amp; certificateInfo)
</del><ins>+void WebFrameProxy::didCommitLoad(const String&amp; contentType, WebCertificateInfo&amp; certificateInfo, bool containsPluginDocument)
</ins><span class="cx"> {
</span><span class="cx">     m_frameLoadState.didCommitLoad();
</span><span class="cx"> 
</span><span class="lines">@@ -152,6 +152,7 @@
</span><span class="cx">     m_MIMEType = contentType;
</span><span class="cx">     m_isFrameSet = false;
</span><span class="cx">     m_certificateInfo = &amp;certificateInfo;
</span><ins>+    m_containsPluginDocument = containsPluginDocument;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebFrameProxy::didFinishLoad()
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebFrameProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebFrameProxy.h (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebFrameProxy.h        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/WebFrameProxy.h        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -88,6 +88,7 @@
</span><span class="cx">     const String&amp; unreachableURL() const { return m_frameLoadState.unreachableURL(); }
</span><span class="cx"> 
</span><span class="cx">     const String&amp; mimeType() const { return m_MIMEType; }
</span><ins>+    bool containsPluginDocument() const { return m_containsPluginDocument; }
</ins><span class="cx"> 
</span><span class="cx">     const String&amp; title() const { return m_title; }
</span><span class="cx"> 
</span><span class="lines">@@ -108,7 +109,7 @@
</span><span class="cx">     void didStartProvisionalLoad(const String&amp; url);
</span><span class="cx">     void didReceiveServerRedirectForProvisionalLoad(const String&amp; url);
</span><span class="cx">     void didFailProvisionalLoad();
</span><del>-    void didCommitLoad(const String&amp; contentType, WebCertificateInfo&amp;);
</del><ins>+    void didCommitLoad(const String&amp; contentType, WebCertificateInfo&amp;, bool containsPluginDocument);
</ins><span class="cx">     void didFinishLoad();
</span><span class="cx">     void didFailLoad();
</span><span class="cx">     void didSameDocumentNavigation(const String&amp;); // eg. anchor navigation, session state change.
</span><span class="lines">@@ -134,6 +135,7 @@
</span><span class="cx">     String m_MIMEType;
</span><span class="cx">     String m_title;
</span><span class="cx">     bool m_isFrameSet;
</span><ins>+    bool m_containsPluginDocument { false };
</ins><span class="cx">     RefPtr&lt;WebCertificateInfo&gt; m_certificateInfo;
</span><span class="cx">     RefPtr&lt;WebFrameListenerProxy&gt; m_activeListener;
</span><span class="cx">     uint64_t m_frameID;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -2964,7 +2964,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; mimeType, bool frameHasCustomContentProvider, uint32_t opaqueFrameLoadType, const WebCore::CertificateInfo&amp; certificateInfo, const UserData&amp; userData)
</del><ins>+void WebPageProxy::didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; mimeType, bool frameHasCustomContentProvider, uint32_t opaqueFrameLoadType, const WebCore::CertificateInfo&amp; certificateInfo, bool containsPluginDocument, const UserData&amp; userData)
</ins><span class="cx"> {
</span><span class="cx">     PageClientProtector protector(m_pageClient);
</span><span class="cx"> 
</span><span class="lines">@@ -3001,7 +3001,7 @@
</span><span class="cx"> 
</span><span class="cx">     clearLoadDependentCallbacks();
</span><span class="cx"> 
</span><del>-    frame-&gt;didCommitLoad(mimeType, webCertificateInfo);
</del><ins>+    frame-&gt;didCommitLoad(mimeType, webCertificateInfo, containsPluginDocument);
</ins><span class="cx"> 
</span><span class="cx">     if (frame-&gt;isMainFrame()) {
</span><span class="cx">         m_mainFrameHasCustomContentProvider = frameHasCustomContentProvider;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -1125,7 +1125,7 @@
</span><span class="cx">     void didReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp;, const UserData&amp;);
</span><span class="cx">     void didChangeProvisionalURLForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; url);
</span><span class="cx">     void didFailProvisionalLoadForFrame(uint64_t frameID, const SecurityOriginData&amp; frameSecurityOrigin, uint64_t navigationID, const String&amp; provisionalURL, const WebCore::ResourceError&amp;, const UserData&amp;);
</span><del>-    void didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; mimeType, bool frameHasCustomContentProvider, uint32_t frameLoadType, const WebCore::CertificateInfo&amp;, const UserData&amp;);
</del><ins>+    void didCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, const String&amp; mimeType, bool frameHasCustomContentProvider, uint32_t frameLoadType, const WebCore::CertificateInfo&amp;, bool containsPluginDocument, const UserData&amp;);
</ins><span class="cx">     void didFinishDocumentLoadForFrame(uint64_t frameID, uint64_t navigationID, const UserData&amp;);
</span><span class="cx">     void didFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, const UserData&amp;);
</span><span class="cx">     void didFailLoadForFrame(uint64_t frameID, uint64_t navigationID, const WebCore::ResourceError&amp;, const UserData&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -130,7 +130,7 @@
</span><span class="cx">     DidReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, uint64_t navigationID, String url, WebKit::UserData userData)
</span><span class="cx">     DidChangeProvisionalURLForFrame(uint64_t frameID, uint64_t navigationID, String url)
</span><span class="cx">     DidFailProvisionalLoadForFrame(uint64_t frameID, struct WebKit::SecurityOriginData frameSecurityOrigin, uint64_t navigationID, String provisionalURL, WebCore::ResourceError error, WebKit::UserData userData)
</span><del>-    DidCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, String mimeType, bool hasCustomContentProvider, uint32_t loadType, WebCore::CertificateInfo certificateInfo, WebKit::UserData userData)
</del><ins>+    DidCommitLoadForFrame(uint64_t frameID, uint64_t navigationID, String mimeType, bool hasCustomContentProvider, uint32_t loadType, WebCore::CertificateInfo certificateInfo, bool containsPluginDocument, WebKit::UserData userData)
</ins><span class="cx">     DidFailLoadForFrame(uint64_t frameID, uint64_t navigationID, WebCore::ResourceError error, WebKit::UserData userData)
</span><span class="cx">     DidFinishDocumentLoadForFrame(uint64_t frameID, uint64_t navigationID, WebKit::UserData userData)
</span><span class="cx">     DidFinishLoadForFrame(uint64_t frameID, uint64_t navigationID, WebKit::UserData userData)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacPageClientImplmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -311,6 +311,7 @@
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::didCommitLoadForMainFrame(const String&amp; mimeType, bool useCustomContentProvider)
</span><span class="cx"> {
</span><ins>+    [m_wkView _didCommitLoadForMainFrame];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::didFinishLoadingDataForCustomContentProvider(const String&amp; suggestedFilename, const IPC::DataReference&amp; dataReference)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebFrameLoaderClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -464,7 +464,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Notify the UIProcess.
</span><span class="cx"> 
</span><del>-    webPage-&gt;send(Messages::WebPageProxy::DidCommitLoadForFrame(m_frame-&gt;frameID(), documentLoader.navigationID(), documentLoader.response().mimeType(), m_frameHasCustomContentProvider, static_cast&lt;uint32_t&gt;(m_frame-&gt;coreFrame()-&gt;loader().loadType()), documentLoader.response().certificateInfo(), UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
</del><ins>+    webPage-&gt;send(Messages::WebPageProxy::DidCommitLoadForFrame(m_frame-&gt;frameID(), documentLoader.navigationID(), documentLoader.response().mimeType(), m_frameHasCustomContentProvider, static_cast&lt;uint32_t&gt;(m_frame-&gt;coreFrame()-&gt;loader().loadType()), documentLoader.response().certificateInfo(), m_frame-&gt;coreFrame()-&gt;document()-&gt;isPluginDocument(), UserData(WebProcess::singleton().transformObjectsToHandles(userData.get()).get())));
</ins><span class="cx">     webPage-&gt;didCommitLoad(m_frame);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (188010 => 188011)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-08-06 00:26:43 UTC (rev 188010)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2015-08-06 01:06:14 UTC (rev 188011)
</span><span class="lines">@@ -1416,6 +1416,14 @@
</span><span class="cx"> #endif
</span><span class="cx">     PluginView* pluginView = pluginViewForFrame(&amp;m_page-&gt;mainFrame());
</span><span class="cx">     if (pluginView &amp;&amp; pluginView-&gt;handlesPageScaleFactor()) {
</span><ins>+        // If the main-frame plugin wants to handle the page scale factor, make sure to reset WebCore's page scale.
+        // Otherwise, we can end up with an immutable but non-1 page scale applied by WebCore on top of whatever the plugin does.
+        if (m_page-&gt;pageScaleFactor() != 1) {
+            m_page-&gt;setPageScaleFactor(1, origin);
+            for (auto* pluginView : m_pluginViews)
+                pluginView-&gt;pageScaleFactorDidChange();
+        }
+
</ins><span class="cx">         pluginView-&gt;setPageScaleFactor(totalScale, origin);
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="lines">@@ -4661,6 +4669,17 @@
</span><span class="cx">     if (frame-&gt;coreFrame()-&gt;loader().loadType() == FrameLoadType::Standard) {
</span><span class="cx">         Page* page = frame-&gt;coreFrame()-&gt;page();
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
+        // As a very special case, we disable non-default layout modes in WKView for main-frame PluginDocuments.
+        // Ideally we would only worry about this in WKView or the WKViewLayoutStrategies, but if we allow
+        // a round-trip to the UI process, you'll see the wrong scale temporarily. So, we reset it here, and then
+        // again later from the UI process.
+        if (frame-&gt;coreFrame()-&gt;document()-&gt;isPluginDocument()) {
+            scaleView(1);
+            setUseFixedLayout(false);
+        }
+#endif
+
</ins><span class="cx">         if (page &amp;&amp; page-&gt;pageScaleFactor() != 1)
</span><span class="cx">             scalePage(1, IntPoint());
</span><span class="cx">     }
</span></span></pre>
</div>
</div>

</body>
</html>