<!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>[178347] releases/WebKitGTK/webkit-2.6</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/178347">178347</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-13 02:44:52 -0800 (Tue, 13 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge <a href="http://trac.webkit.org/projects/webkit/changeset/177135">r177135</a> - http://omfgdogs.info/ only animates when you resize the window
https://bugs.webkit.org/show_bug.cgi?id=139435
&lt;rdar://problem/19190493&gt;

Reviewed by Simon Fraser.

Source/WebCore:

After <a href="http://trac.webkit.org/projects/webkit/changeset/163928">r163928</a>, we would fail to animate a gif if:
- it is used as a background image of a 0-height html element
- it is used as a background image of a 0-height body element whose
  background is delegated to the root (because the root has no
  background).

This is because in such cases, shouldRepaintForImageAnimation()
should use the background rect instead of the renderer's overflow
rect to determine if the image is inside the viewport. Both cases
are addressed in this patch.

Tests: fast/images/animated-gif-body-delegated-background-image.html
       fast/images/animated-gif-body-outside-viewport.html
       fast/images/animated-gif-html-background-image.html

* rendering/RenderElement.cpp:
(WebCore::shouldRepaintForImageAnimation):
* testing/Internals.cpp:
(WebCore::Internals::hasPausedImageAnimations):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

Add layout tests to make sure a gif image is still animated if:
- It is used as a background image of a 0-height html element
- It is used as a background image of a 0-height body element that
  is delegated to the root (because the root has no background)

Also add a layout test to make sure we still stop the gif animation
if it is used as background image of a body that is outside the
viewport.

* fast/images/animated-gif-body-delegated-background-image-expected.txt: Added.
* fast/images/animated-gif-body-delegated-background-image.html: Added.
* fast/images/animated-gif-body-outside-viewport-expected.txt: Added.
* fast/images/animated-gif-body-outside-viewport.html: Added.
* fast/images/animated-gif-html-background-image-expected.txt: Added.
* fast/images/animated-gif-html-background-image.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsChangeLog">releases/WebKitGTK/webkit-2.6/LayoutTests/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit26SourceWebCoreChangeLog">releases/WebKitGTK/webkit-2.6/Source/WebCore/ChangeLog</a></li>
<li><a href="#releasesWebKitGTKwebkit26SourceWebCorerenderingRenderElementcpp">releases/WebKitGTK/webkit-2.6/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit26SourceWebCoretestingInternalscpp">releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.cpp</a></li>
<li><a href="#releasesWebKitGTKwebkit26SourceWebCoretestingInternalsh">releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.h</a></li>
<li><a href="#releasesWebKitGTKwebkit26SourceWebCoretestingInternalsidl">releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodydelegatedbackgroundimageexpectedtxt">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodydelegatedbackgroundimagehtml">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image.html</a></li>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodyoutsideviewportexpectedtxt">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodyoutsideviewporthtml">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport.html</a></li>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifhtmlbackgroundimageexpectedtxt">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image-expected.txt</a></li>
<li><a href="#releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifhtmlbackgroundimagehtml">releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="releasesWebKitGTKwebkit26LayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/LayoutTests/ChangeLog (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/ChangeLog        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/ChangeLog        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2014-12-10  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        http://omfgdogs.info/ only animates when you resize the window
+        https://bugs.webkit.org/show_bug.cgi?id=139435
+        &lt;rdar://problem/19190493&gt;
+
+        Reviewed by Simon Fraser.
+
+        Add layout tests to make sure a gif image is still animated if:
+        - It is used as a background image of a 0-height html element
+        - It is used as a background image of a 0-height body element that
+          is delegated to the root (because the root has no background)
+
+        Also add a layout test to make sure we still stop the gif animation
+        if it is used as background image of a body that is outside the
+        viewport.
+
+        * fast/images/animated-gif-body-delegated-background-image-expected.txt: Added.
+        * fast/images/animated-gif-body-delegated-background-image.html: Added.
+        * fast/images/animated-gif-body-outside-viewport-expected.txt: Added.
+        * fast/images/animated-gif-body-outside-viewport.html: Added.
+        * fast/images/animated-gif-html-background-image-expected.txt: Added.
+        * fast/images/animated-gif-html-background-image.html: Added.
+
</ins><span class="cx"> 2014-12-10  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Continuously repainting large parts of Huffington Post.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodydelegatedbackgroundimageexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image-expected.txt (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image-expected.txt        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+Make sure the background image of the body element is animated if the body has 0 height and the background is delegated to the root
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS bodyHeight is &quot;0px&quot;
+PASS isBackgroundAnimated is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodydelegatedbackgroundimagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image.html (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-delegated-background-image.html        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body style=&quot;background-image: url('resources/animated.gif'); background-repeat: repeat; height: 100%; width: 100%;&quot; onload=&quot;runTest()&quot;&gt;
+&lt;script&gt;
+// The test passes if the background image is animated.
+jsTestIsAsync = true;
+
+function checkBackgroundAnimated() {
+  isBackgroundAnimated = !internals.hasPausedImageAnimations(document.body);
+  bodyHeight = window.getComputedStyle(document.body)[&quot;height&quot;];
+  description(&quot;Make sure the background image of the body element is animated if the body has 0 height and the background is delegated to the root&quot;);
+  shouldBeEqualToString(&quot;bodyHeight&quot;, &quot;0px&quot;);
+  shouldBeTrue(&quot;isBackgroundAnimated&quot;);
+  finishJSTest();
+}
+
+function imageLoaded() {
+  setTimeout(checkBackgroundAnimated, 200);
+}
+
+function runTest() {
+  if (!window.internals)
+    return;
+
+  var img = new Image();
+  // Make sure the image is loaded before we check if it is animated.
+  img.onload = imageLoaded;
+  img.src = &quot;resources/animated.gif&quot;;
+}
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodyoutsideviewportexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport-expected.txt (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport-expected.txt        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+Make sure the background image of a body element that is outside the viewport is not animated
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS isBackgroundAnimated is false
+Scroll down so that the body becomes visible.
+PASS isBackgroundAnimated is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifbodyoutsideviewporthtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport.html (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-body-outside-viewport.html        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html style=&quot;background-color: green; width: 1600px; height: 1200px&quot;&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body style=&quot;background-image: url('resources/animated.gif'); background-repeat: repeat; position: relative; left: 0px; top: 700px; width: 200px; height: 200px&quot; onload=&quot;runTest()&quot;&gt;
+&lt;script&gt;
+jsTestIsAsync = true;
+
+function checkBackgroundAnimated() {
+  isBackgroundAnimated = !internals.hasPausedImageAnimations(document.body);
+  shouldBeTrue(&quot;isBackgroundAnimated&quot;);
+  finishJSTest();
+}
+
+function checkBackgroundNotAnimated() {
+  isBackgroundAnimated = !internals.hasPausedImageAnimations(document.body);
+  description(&quot;Make sure the background image of a body element that is outside the viewport is not animated&quot;);
+  shouldBeFalse(&quot;isBackgroundAnimated&quot;);
+
+  debug(&quot;Scroll down so that the body becomes visible.&quot;);
+  window.scrollBy(0, 600);
+  setTimeout(checkBackgroundAnimated, 0);
+}
+
+function imageLoaded() {
+  setTimeout(checkBackgroundNotAnimated, 200);
+}
+
+function runTest() {
+  if (!window.internals)
+    return;
+
+  var img = new Image();
+  // Make sure the image is loaded before we check if it is animated.
+  img.onload = imageLoaded;
+  img.src = &quot;resources/animated.gif&quot;;
+}
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifhtmlbackgroundimageexpectedtxt"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image-expected.txt (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image-expected.txt                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image-expected.txt        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+Make sure the background image of the html element is animated if the html element has 0 height
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS htmlHeight is &quot;0px&quot;
+PASS isBackgroundAnimated is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26LayoutTestsfastimagesanimatedgifhtmlbackgroundimagehtml"></a>
<div class="addfile"><h4>Added: releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image.html (0 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image.html                                (rev 0)
+++ releases/WebKitGTK/webkit-2.6/LayoutTests/fast/images/animated-gif-html-background-image.html        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html style=&quot;background-image: url('resources/animated.gif'); background-repeat: repeat; height: 0&quot;&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runTest()&quot;&gt;
+&lt;script&gt;
+jsTestIsAsync = true;
+
+function checkBackgroundAnimated() {
+  isBackgroundAnimated = !internals.hasPausedImageAnimations(document.documentElement);
+  htmlHeight = window.getComputedStyle(document.documentElement)[&quot;height&quot;];
+  description(&quot;Make sure the background image of the html element is animated if the html element has 0 height&quot;);
+  shouldBeEqualToString(&quot;htmlHeight&quot;, &quot;0px&quot;);
+  shouldBeTrue(&quot;isBackgroundAnimated&quot;);
+  finishJSTest();
+}
+
+function imageLoaded() {
+  setTimeout(checkBackgroundAnimated, 200);
+}
+
+function runTest() {
+  if (!window.internals)
+    return;
+
+  var img = new Image();
+  // Make sure the image is loaded before we check if it is animated.
+  img.onload = imageLoaded;
+  img.src = &quot;resources/animated.gif&quot;;
+}
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="releasesWebKitGTKwebkit26SourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/Source/WebCore/ChangeLog (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/Source/WebCore/ChangeLog        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/Source/WebCore/ChangeLog        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2014-12-10  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        http://omfgdogs.info/ only animates when you resize the window
+        https://bugs.webkit.org/show_bug.cgi?id=139435
+        &lt;rdar://problem/19190493&gt;
+
+        Reviewed by Simon Fraser.
+
+        After r163928, we would fail to animate a gif if:
+        - it is used as a background image of a 0-height html element
+        - it is used as a background image of a 0-height body element whose
+          background is delegated to the root (because the root has no
+          background).
+
+        This is because in such cases, shouldRepaintForImageAnimation()
+        should use the background rect instead of the renderer's overflow
+        rect to determine if the image is inside the viewport. Both cases
+        are addressed in this patch.
+
+        Tests: fast/images/animated-gif-body-delegated-background-image.html
+               fast/images/animated-gif-body-outside-viewport.html
+               fast/images/animated-gif-html-background-image.html
+
+        * rendering/RenderElement.cpp:
+        (WebCore::shouldRepaintForImageAnimation):
+        * testing/Internals.cpp:
+        (WebCore::Internals::hasPausedImageAnimations):
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
</ins><span class="cx"> 2014-12-10  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Continuously repainting large parts of Huffington Post.
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit26SourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/Source/WebCore/rendering/RenderElement.cpp (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/Source/WebCore/rendering/RenderElement.cpp        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/Source/WebCore/rendering/RenderElement.cpp        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -1303,9 +1303,24 @@
</span><span class="cx">         return false;
</span><span class="cx">     if (renderer.style().visibility() != VISIBLE)
</span><span class="cx">         return false;
</span><del>-    if (!visibleRect.intersects(renderer.absoluteBoundingBoxRect()))
</del><ins>+    if (renderer.view().frameView().isOffscreen())
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    // Use background rect if we are the root or if we are the body and the background is propagated to the root.
+    // FIXME: This is overly conservative as the image may not be a background-image, in which case it will not
+    // be propagated to the root. At this point, we unfortunately don't have access to the image anymore so we
+    // can no longer check if it is a background image.
+    bool backgroundIsPaintedByRoot = renderer.isRoot();
+    if (renderer.isBody()) {
+        // FIXME: Should share body background propagation code.
+        RenderElement* rootObject = renderer.document().documentElement() ? renderer.document().documentElement()-&gt;renderer() : nullptr;
+        backgroundIsPaintedByRoot = &amp;rootObject-&gt;rendererForRootBackground() == &amp;renderer;
+
+    }
+    LayoutRect backgroundPaintingRect = backgroundIsPaintedByRoot ? renderer.view().backgroundRect(&amp;renderer.view()) : renderer.absoluteClippedOverflowRect();
+    if (!visibleRect.intersects(enclosingIntRect(backgroundPaintingRect)))
+        return false;
+
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1314,6 +1329,9 @@
</span><span class="cx">     auto&amp; frameView = view().frameView();
</span><span class="cx">     auto visibleRect = frameView.windowToContents(frameView.windowClipRect());
</span><span class="cx">     if (!shouldRepaintForImageAnimation(*this, visibleRect)) {
</span><ins>+        // FIXME: It would be better to pass the image along with the renderer
+        // so that we can be smarter about detecting if the image is inside the
+        // viewport in repaintForPausedImageAnimationsIfNeeded().
</ins><span class="cx">         view().addRendererWithPausedImageAnimations(*this);
</span><span class="cx">         return;
</span><span class="cx">     }
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit26SourceWebCoretestingInternalscpp"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.cpp (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.cpp        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.cpp        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -537,6 +537,15 @@
</span><span class="cx">     return representation;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool Internals::hasPausedImageAnimations(Element* element, ExceptionCode&amp; ec)
+{
+    if (!element) {
+        ec = INVALID_ACCESS_ERR;
+        return false;
+    }
+    return element-&gt;renderer() &amp;&amp; element-&gt;renderer()-&gt;hasPausedImageAnimations();
+}
+
</ins><span class="cx"> PassRefPtr&lt;CSSComputedStyleDeclaration&gt; Internals::computedStyleIncludingVisitedInfo(Node* node, ExceptionCode&amp; ec) const
</span><span class="cx"> {
</span><span class="cx">     if (!node) {
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit26SourceWebCoretestingInternalsh"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.h (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.h        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.h        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx">     static void resetToConsistentState(Page*);
</span><span class="cx"> 
</span><span class="cx">     String elementRenderTreeAsText(Element*, ExceptionCode&amp;);
</span><ins>+    bool hasPausedImageAnimations(Element*, ExceptionCode&amp;);
</ins><span class="cx"> 
</span><span class="cx">     String address(Node*);
</span><span class="cx">     bool nodeNeedsStyleRecalc(Node*, ExceptionCode&amp;);
</span></span></pre></div>
<a id="releasesWebKitGTKwebkit26SourceWebCoretestingInternalsidl"></a>
<div class="modfile"><h4>Modified: releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.idl (178346 => 178347)</h4>
<pre class="diff"><span>
<span class="info">--- releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.idl        2015-01-13 10:32:39 UTC (rev 178346)
+++ releases/WebKitGTK/webkit-2.6/Source/WebCore/testing/Internals.idl        2015-01-13 10:44:52 UTC (rev 178347)
</span><span class="lines">@@ -31,6 +31,9 @@
</span><span class="cx">     [RaisesException] boolean nodeNeedsStyleRecalc(Node node);
</span><span class="cx">     DOMString description(any value);
</span><span class="cx"> 
</span><ins>+    // Animated image pausing testing.
+    [RaisesException] boolean hasPausedImageAnimations(Element element);
+
</ins><span class="cx">     [RaisesException] DOMString elementRenderTreeAsText(Element element);
</span><span class="cx">     boolean isPreloaded(DOMString url);
</span><span class="cx">     boolean isLoadingFromMemoryCache(DOMString url);
</span></span></pre>
</div>
</div>

</body>
</html>