<!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>[180115] 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/180115">180115</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2015-02-14 14:56:11 -0800 (Sat, 14 Feb 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION: Page opens with enlarged font after visiting PDF, navigating back, 
then doing a process swap
https://bugs.webkit.org/show_bug.cgi?id=141584
-and corresponding-
rdar://problem/18167729

Reviewed by Tim Horton.

This patch keeps the plugin zoom/scale factors separate from page zoom/scale 
factors in the UI process since they are used for slightly different purposes for 
plugins (i.e., PDFs) than they are for normal pages. Keeping track of the right 
factor for the right type of document will ensure that we don’t use the wrong one.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::pageZoomFactor):
(WebKit::WebPageProxy::pageScaleFactor):
(WebKit::WebPageProxy::pluginScaleFactorDidChange):
(WebKit::WebPageProxy::pluginZoomFactorDidChange):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::pageZoomFactorDidChange): Deleted.
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::pageZoomFactor): Deleted.
(WebKit::WebPageProxy::pageScaleFactor): Deleted.
* UIProcess/WebPageProxy.messages.in:
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::setPageScaleFactor):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</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="#trunkSourceWebKit2WebProcessPluginsPluginViewcpp">trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (180114 => 180115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-02-14 21:52:34 UTC (rev 180114)
+++ trunk/Source/WebKit2/ChangeLog        2015-02-14 22:56:11 UTC (rev 180115)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2015-02-14  Beth Dakin  &lt;bdakin@apple.com&gt;
+
+        REGRESSION: Page opens with enlarged font after visiting PDF, navigating back, 
+        then doing a process swap
+        https://bugs.webkit.org/show_bug.cgi?id=141584
+        -and corresponding-
+        rdar://problem/18167729
+
+        Reviewed by Tim Horton.
+
+        This patch keeps the plugin zoom/scale factors separate from page zoom/scale 
+        factors in the UI process since they are used for slightly different purposes for 
+        plugins (i.e., PDFs) than they are for normal pages. Keeping track of the right 
+        factor for the right type of document will ensure that we don’t use the wrong one.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy):
+        (WebKit::WebPageProxy::pageZoomFactor):
+        (WebKit::WebPageProxy::pageScaleFactor):
+        (WebKit::WebPageProxy::pluginScaleFactorDidChange):
+        (WebKit::WebPageProxy::pluginZoomFactorDidChange):
+        (WebKit::WebPageProxy::didCommitLoadForFrame):
+        (WebKit::WebPageProxy::pageZoomFactorDidChange): Deleted.
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::pageZoomFactor): Deleted.
+        (WebKit::WebPageProxy::pageScaleFactor): Deleted.
+        * UIProcess/WebPageProxy.messages.in:
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::setPageScaleFactor):
+
</ins><span class="cx"> 2015-02-14  Brian J. Burg  &lt;burg@cs.washington.edu&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION(r179573): Web Inspector toolbar is completely messed up on Mavericks
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (180114 => 180115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-02-14 21:52:34 UTC (rev 180114)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-02-14 22:56:11 UTC (rev 180115)
</span><span class="lines">@@ -307,6 +307,8 @@
</span><span class="cx">     , m_textZoomFactor(1)
</span><span class="cx">     , m_pageZoomFactor(1)
</span><span class="cx">     , m_pageScaleFactor(1)
</span><ins>+    , m_pluginZoomFactor(1)
+    , m_pluginScaleFactor(1)
</ins><span class="cx">     , m_intrinsicDeviceScaleFactor(1)
</span><span class="cx">     , m_customDeviceScaleFactor(0)
</span><span class="cx">     , m_topContentInset(0)
</span><span class="lines">@@ -2129,6 +2131,24 @@
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::SetPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor), m_pageID); 
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+double WebPageProxy::pageZoomFactor() const
+{
+    // Zoom factor for non-PDF pages persists across page loads. We maintain a separate member variable for PDF
+    // zoom which ensures that we don't use the PDF zoom for a normal page.
+    if (m_mainFrame &amp;&amp; m_mainFrame-&gt;isDisplayingPDFDocument())
+        return m_pluginZoomFactor;
+    return m_pageZoomFactor;
+}
+
+double WebPageProxy::pageScaleFactor() const
+{
+    // PDF documents use zoom and scale factors to size themselves appropriately in the window. We store them
+    // separately but decide which to return based on the main frame.
+    if (m_mainFrame &amp;&amp; m_mainFrame-&gt;isDisplayingPDFDocument())
+        return m_pluginScaleFactor;
+    return m_pageScaleFactor;
+}
+
</ins><span class="cx"> void WebPageProxy::scalePage(double scale, const IntPoint&amp; origin)
</span><span class="cx"> {
</span><span class="cx">     if (!isValid())
</span><span class="lines">@@ -2389,11 +2409,16 @@
</span><span class="cx">     m_pageScaleFactor = scaleFactor;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::pageZoomFactorDidChange(double zoomFactor)
</del><ins>+void WebPageProxy::pluginScaleFactorDidChange(double pluginScaleFactor)
</ins><span class="cx"> {
</span><del>-    m_pageZoomFactor = zoomFactor;
</del><ins>+    m_pluginScaleFactor = pluginScaleFactor;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::pluginZoomFactorDidChange(double pluginZoomFactor)
+{
+    m_pluginZoomFactor = pluginZoomFactor;
+}
+
</ins><span class="cx"> void WebPageProxy::findStringMatches(const String&amp; string, FindOptions options, unsigned maxMatchCount)
</span><span class="cx"> {
</span><span class="cx">     if (string.isEmpty()) {
</span><span class="lines">@@ -2811,8 +2836,10 @@
</span><span class="cx">     // WebPageProxy's cache of the value can get out of sync (e.g. in the case where a
</span><span class="cx">     // plugin is handling page scaling itself) so we should reset it to the default
</span><span class="cx">     // for standard main frame loads.
</span><del>-    if (frame-&gt;isMainFrame() &amp;&amp; static_cast&lt;FrameLoadType&gt;(opaqueFrameLoadType) == FrameLoadType::Standard)
</del><ins>+    if (frame-&gt;isMainFrame() &amp;&amp; static_cast&lt;FrameLoadType&gt;(opaqueFrameLoadType) == FrameLoadType::Standard) {
</ins><span class="cx">         m_pageScaleFactor = 1;
</span><ins>+        m_pluginScaleFactor = 1;
+    }
</ins><span class="cx"> 
</span><span class="cx">     m_pageLoadState.commitChanges();
</span><span class="cx">     if (m_navigationClient) {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (180114 => 180115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-02-14 21:52:34 UTC (rev 180114)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2015-02-14 22:56:11 UTC (rev 180115)
</span><span class="lines">@@ -617,13 +617,13 @@
</span><span class="cx">     bool supportsTextZoom() const;
</span><span class="cx">     double textZoomFactor() const { return m_textZoomFactor; }
</span><span class="cx">     void setTextZoomFactor(double);
</span><del>-    double pageZoomFactor() const { return m_pageZoomFactor; }
</del><ins>+    double pageZoomFactor() const;
</ins><span class="cx">     void setPageZoomFactor(double);
</span><span class="cx">     void setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor);
</span><span class="cx"> 
</span><span class="cx">     void scalePage(double scale, const WebCore::IntPoint&amp; origin);
</span><span class="cx">     void scalePageInViewCoordinates(double scale, const WebCore::IntPoint&amp; centerInViewCoordinates);
</span><del>-    double pageScaleFactor() const { return m_pageScaleFactor; }
</del><ins>+    double pageScaleFactor() const;
</ins><span class="cx"> 
</span><span class="cx">     float deviceScaleFactor() const;
</span><span class="cx">     void setIntrinsicDeviceScaleFactor(float);
</span><span class="lines">@@ -696,7 +696,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     void pageScaleFactorDidChange(double);
</span><del>-    void pageZoomFactorDidChange(double);
</del><ins>+    void pluginScaleFactorDidChange(double);
+    void pluginZoomFactorDidChange(double);
</ins><span class="cx"> 
</span><span class="cx">     // Find.
</span><span class="cx">     void findString(const String&amp;, FindOptions, unsigned maxMatchCount);
</span><span class="lines">@@ -1484,6 +1485,8 @@
</span><span class="cx">     double m_textZoomFactor;
</span><span class="cx">     double m_pageZoomFactor;
</span><span class="cx">     double m_pageScaleFactor;
</span><ins>+    double m_pluginZoomFactor;
+    double m_pluginScaleFactor;
</ins><span class="cx">     float m_intrinsicDeviceScaleFactor;
</span><span class="cx">     float m_customDeviceScaleFactor;
</span><span class="cx">     float m_topContentInset;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (180114 => 180115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-02-14 21:52:34 UTC (rev 180114)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2015-02-14 22:56:11 UTC (rev 180115)
</span><span class="lines">@@ -194,7 +194,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     PageScaleFactorDidChange(double scaleFactor)
</span><del>-    PageZoomFactorDidChange(double zoomFactor)
</del><ins>+    PluginScaleFactorDidChange(double zoomFactor)
+    PluginZoomFactorDidChange(double zoomFactor)
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(GTK)
</span><span class="cx">     # Support for GTK+ platform keybindings
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessPluginsPluginViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (180114 => 180115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp        2015-02-14 21:52:34 UTC (rev 180114)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp        2015-02-14 22:56:11 UTC (rev 180115)
</span><span class="lines">@@ -483,8 +483,8 @@
</span><span class="cx"> void PluginView::setPageScaleFactor(double scaleFactor, IntPoint)
</span><span class="cx"> {
</span><span class="cx">     m_pageScaleFactor = scaleFactor;
</span><del>-    m_webPage-&gt;send(Messages::WebPageProxy::PageScaleFactorDidChange(scaleFactor));
-    m_webPage-&gt;send(Messages::WebPageProxy::PageZoomFactorDidChange(scaleFactor));
</del><ins>+    m_webPage-&gt;send(Messages::WebPageProxy::PluginScaleFactorDidChange(scaleFactor));
+    m_webPage-&gt;send(Messages::WebPageProxy::PluginZoomFactorDidChange(scaleFactor));
</ins><span class="cx">     pageScaleFactorDidChange();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>