<!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>[168203] 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/168203">168203</a></dd>
<dt>Author</dt> <dd>benjamin@webkit.org</dd>
<dt>Date</dt> <dd>2014-05-02 15:54:27 -0700 (Fri, 02 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS][WK2] More animation madness for when the extendedBackground is modified in an animation block
https://bugs.webkit.org/show_bug.cgi?id=132497

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2014-05-02
Reviewed by Beth Dakin.

* UIProcess/API/Cocoa/WKWebView.mm:
(updateTopAndBottomExtendedBackgroundExclusionIfNecessary):
Do not early return when _extendedBackgroundExclusionInsets.left is empty. That way, if executed in an animation block,
the top of bottom view will animate from their current size to an empty width.

When creating the layer, set up their height without animation. Otherwise it is possible to see the height animating
while the left inset is animating.

(-[WKWebView _setExtendedBackgroundExclusionInsets:]):
When replacing the scrollview, make sure the frame and color are not animated. Otherwise the transition between
scrollView and _mainExtendedBackgroundView can be visible if _setExtendedBackgroundExclusionInsets: is invoked
in an animation block.

(-[WKWebView _endAnimatedResize]):
Nuke the top and bottom insets when possible. [WKWebView _endAnimatedResize] is unfrequent, so it is a good opportunity
to free the memory.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (168202 => 168203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-02 22:47:38 UTC (rev 168202)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-02 22:54:27 UTC (rev 168203)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2014-05-02  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [iOS][WK2] More animation madness for when the extendedBackground is modified in an animation block
+        https://bugs.webkit.org/show_bug.cgi?id=132497
+
+        Reviewed by Beth Dakin.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (updateTopAndBottomExtendedBackgroundExclusionIfNecessary):
+        Do not early return when _extendedBackgroundExclusionInsets.left is empty. That way, if executed in an animation block,
+        the top of bottom view will animate from their current size to an empty width.
+
+        When creating the layer, set up their height without animation. Otherwise it is possible to see the height animating
+        while the left inset is animating.
+
+        (-[WKWebView _setExtendedBackgroundExclusionInsets:]):
+        When replacing the scrollview, make sure the frame and color are not animated. Otherwise the transition between
+        scrollView and _mainExtendedBackgroundView can be visible if _setExtendedBackgroundExclusionInsets: is invoked
+        in an animation block.
+
+        (-[WKWebView _endAnimatedResize]):
+        Nuke the top and bottom insets when possible. [WKWebView _endAnimatedResize] is unfrequent, so it is a good opportunity
+        to free the memory.
+
</ins><span class="cx"> 2014-05-02  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove Blob contentDisposition handling
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebViewmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (168202 => 168203)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-05-02 22:47:38 UTC (rev 168202)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm        2014-05-02 22:54:27 UTC (rev 168203)
</span><span class="lines">@@ -1298,15 +1298,15 @@
</span><span class="cx"> 
</span><span class="cx"> static void updateTopAndBottomExtendedBackgroundExclusionIfNecessary(WKWebView* webView)
</span><span class="cx"> {
</span><del>-    if (!webView-&gt;_extendedBackgroundExclusionInsets.left)
-        return;
-
</del><span class="cx">     if (webView-&gt;_obscuredInsets.top &amp;&amp; !webView-&gt;_extendedBackgroundExclusionInsets.top) {
</span><span class="cx">         if (!webView-&gt;_extendedBackgroundLayerTopInset) {
</span><span class="cx">             RetainPtr&lt;UIView&gt; backgroundView = adoptNS([[UIView alloc] init]);
</span><span class="cx">             [backgroundView setBackgroundColor:webView-&gt;_mainExtendedBackgroundView.backgroundColor];
</span><span class="cx">             [webView insertSubview:backgroundView.get() belowSubview:webView-&gt;_scrollView.get()];
</span><span class="cx">             webView-&gt;_extendedBackgroundLayerTopInset = backgroundView.get();
</span><ins>+            [UIView performWithoutAnimation: ^{
+                [webView-&gt;_extendedBackgroundLayerTopInset setFrame:CGRectMake(0, 0, 0, webView-&gt;_obscuredInsets.top)];
+            }];
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         [webView-&gt;_extendedBackgroundLayerTopInset setFrame:CGRectMake(0, 0, webView-&gt;_extendedBackgroundExclusionInsets.left, webView-&gt;_obscuredInsets.top)];
</span><span class="lines">@@ -1317,6 +1317,9 @@
</span><span class="cx">             [backgroundView setBackgroundColor:webView-&gt;_mainExtendedBackgroundView.backgroundColor];
</span><span class="cx">             [webView insertSubview:backgroundView.get() belowSubview:webView-&gt;_scrollView.get()];
</span><span class="cx">             webView-&gt;_extendedBackgroundLayerBottomInset = backgroundView.get();
</span><ins>+            [UIView performWithoutAnimation: ^{
+                [webView-&gt;_extendedBackgroundLayerBottomInset setFrame:CGRectMake(0, webView.bounds.size.height - webView-&gt;_obscuredInsets.bottom, 0, webView-&gt;_obscuredInsets.bottom)];
+            }];
</ins><span class="cx">         }
</span><span class="cx">         [webView-&gt;_extendedBackgroundLayerBottomInset setFrame:CGRectMake(0, webView.bounds.size.height - webView-&gt;_obscuredInsets.bottom, webView-&gt;_extendedBackgroundExclusionInsets.left, webView-&gt;_obscuredInsets.bottom)];
</span><span class="cx">     }
</span><span class="lines">@@ -1354,15 +1357,17 @@
</span><span class="cx">     if (UIEdgeInsetsEqualToEdgeInsets(extendedBackgroundExclusionInsets, _extendedBackgroundExclusionInsets))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    CGRect bounds = self.bounds;
</ins><span class="cx">     if (_mainExtendedBackgroundView == _scrollView) {
</span><del>-        RetainPtr&lt;UIView&gt; backgroundView = adoptNS([[UIView alloc] init]);
-        _mainExtendedBackgroundView = backgroundView.get();
-        _mainExtendedBackgroundView.backgroundColor = [_scrollView backgroundColor];
-        [self insertSubview:_mainExtendedBackgroundView belowSubview:_scrollView.get()];
-        [_scrollView setBackgroundColor:nil];
</del><ins>+        [UIView performWithoutAnimation: ^{
+            RetainPtr&lt;UIView&gt; backgroundView = adoptNS([[UIView alloc] initWithFrame:bounds]);
+            _mainExtendedBackgroundView = backgroundView.get();
+            _mainExtendedBackgroundView.backgroundColor = [_scrollView backgroundColor];
+            [self insertSubview:_mainExtendedBackgroundView belowSubview:_scrollView.get()];
+            [_scrollView setBackgroundColor:nil];
+        }];
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    CGRect bounds = self.bounds;
</del><span class="cx">     _extendedBackgroundExclusionInsets = extendedBackgroundExclusionInsets;
</span><span class="cx">     _mainExtendedBackgroundView.frame = UIEdgeInsetsInsetRect(bounds, _extendedBackgroundExclusionInsets);
</span><span class="cx"> 
</span><span class="lines">@@ -1489,8 +1494,16 @@
</span><span class="cx">         _resizeAnimationView = nil;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    _isAnimatingResize = NO;
</ins><span class="cx">     _resizeAnimationTransformAdjustments = CATransform3DIdentity;
</span><del>-    _isAnimatingResize = NO;
</del><ins>+
+    if (!_extendedBackgroundExclusionInsets.left) {
+        [_extendedBackgroundLayerTopInset removeFromSuperview];
+        _extendedBackgroundLayerTopInset = nil;
+        [_extendedBackgroundLayerBottomInset removeFromSuperview];
+        _extendedBackgroundLayerBottomInset = nil;
+    }
+
</ins><span class="cx">     [self _updateVisibleContentRects];
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>