<!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>[168572] 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/168572">168572</a></dd>
<dt>Author</dt> <dd>benjamin@webkit.org</dd>
<dt>Date</dt> <dd>2014-05-09 22:14:24 -0700 (Fri, 09 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS][WK2] Fix bugs exposed by <a href="http://trac.webkit.org/projects/webkit/changeset/168556">r168556</a>
https://bugs.webkit.org/show_bug.cgi?id=132768

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2014-05-09
Reviewed by Ryosuke Niwa.

Fix two bugs exposed by <a href="http://trac.webkit.org/projects/webkit/changeset/168556">r168556</a>.
1) We were only changing the page scale factor when the scale was not adjusted by live
   resize. The idea was that the scale would either be the same (responsive content)
   or that it would be defined by the next viewContentRectUpdate.

   Now that we also send resize and scroll events, we must always update the scale since
   it affects some APIs observable from JavaScript (like scrolling bounds).

2) Internally, Page's scaleFactor is stored as a float and not double. The rounding error
   were causing us to send DynamicViewportUpdateChangedTarget() in cases were there is no change
   of target.

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::withinEpsilon):
(WebKit::WebPage::dynamicViewportSizeUpdate):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm">trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (168571 => 168572)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-10 04:51:49 UTC (rev 168571)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-10 05:14:24 UTC (rev 168572)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-05-09  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [iOS][WK2] Fix bugs exposed by r168556
+        https://bugs.webkit.org/show_bug.cgi?id=132768
+
+        Reviewed by Ryosuke Niwa.
+
+        Fix two bugs exposed by r168556.
+        1) We were only changing the page scale factor when the scale was not adjusted by live
+           resize. The idea was that the scale would either be the same (responsive content)
+           or that it would be defined by the next viewContentRectUpdate.
+
+           Now that we also send resize and scroll events, we must always update the scale since
+           it affects some APIs observable from JavaScript (like scrolling bounds).
+
+        2) Internally, Page's scaleFactor is stored as a float and not double. The rounding error
+           were causing us to send DynamicViewportUpdateChangedTarget() in cases were there is no change
+           of target.
+
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::withinEpsilon):
+        (WebKit::WebPage::dynamicViewportSizeUpdate):
+
</ins><span class="cx"> 2014-05-09  Ryuan Choi  &lt;ryuan.choi@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL][WK2] Close icondatabase when EwkFaviconDatabase is destroyed
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (168571 => 168572)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-05-10 04:51:49 UTC (rev 168571)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-05-10 05:14:24 UTC (rev 168572)
</span><span class="lines">@@ -1891,6 +1891,11 @@
</span><span class="cx">     viewportConfigurationChanged();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool withinEpsilon(float a, float b)
+{
+    return fabs(a - b) &lt; std::numeric_limits&lt;float&gt;::epsilon();
+}
+
</ins><span class="cx"> void WebPage::dynamicViewportSizeUpdate(const FloatSize&amp; minimumLayoutSize, const FloatRect&amp; targetExposedContentRect, const FloatRect&amp; targetUnobscuredRect, const WebCore::FloatRect&amp; targetUnobscuredRectInScrollViewCoordinates, double targetScale)
</span><span class="cx"> {
</span><span class="cx">     TemporaryChange&lt;bool&gt; dynamicSizeUpdateGuard(m_inDynamicSizeUpdate, true);
</span><span class="lines">@@ -2031,15 +2036,14 @@
</span><span class="cx">     frameView.setUnobscuredContentRect(roundedUnobscuredContentRect);
</span><span class="cx">     m_drawingArea-&gt;setExposedContentRect(newExposedContentRect);
</span><span class="cx"> 
</span><del>-    if (scale == targetScale)
-        scalePage(scale, roundedUnobscuredContentRect.location());
</del><ins>+    scalePage(scale, roundedUnobscuredContentRect.location());
</ins><span class="cx"> 
</span><span class="cx">     FloatSize unobscuredContentRectSizeInContentCoordinates = newUnobscuredContentRect.size();
</span><span class="cx">     unobscuredContentRectSizeInContentCoordinates.scale(scale);
</span><span class="cx">     frameView.setCustomSizeForResizeEvent(expandedIntSize(unobscuredContentRectSizeInContentCoordinates));
</span><span class="cx">     frameView.setScrollOffset(roundedUnobscuredContentRect.location());
</span><span class="cx"> 
</span><del>-    if (pageScaleFactor() != targetScale || roundedIntPoint(targetUnobscuredRect.location()) != frameView.scrollPosition())
</del><ins>+    if (!withinEpsilon(pageScaleFactor(), targetScale) || roundedIntPoint(targetUnobscuredRect.location()) != frameView.scrollPosition())
</ins><span class="cx">         send(Messages::WebPageProxy::DynamicViewportUpdateChangedTarget(pageScaleFactor(), frameView.scrollPosition()));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>