Bug 518777. When drawing the canvas background color for drawWindow, adjust CanvasArea because it is relative to the frame itself. r=roc
authorTimothy Nikkel <tnikkel@gmail.com>
Mon, 28 Sep 2009 20:40:24 -0500
changeset 33260 790211c5a8ddbc5c34e4728e1745520a93946d7b
parent 33259 21d443acefc521162c272cee0c420a313e4eb2da
child 33261 1deff8db43525a0d0caefaa9e23bec7922e349ae
push idunknown
push userunknown
push dateunknown
reviewersroc
bugs518777
milestone1.9.3a1pre
Bug 518777. When drawing the canvas background color for drawWindow, adjust CanvasArea because it is relative to the frame itself. r=roc
layout/base/nsPresShell.cpp
layout/base/tests/Makefile.in
layout/base/tests/test_bug518777.html
--- a/layout/base/nsPresShell.cpp
+++ b/layout/base/nsPresShell.cpp
@@ -5299,17 +5299,18 @@ PresShell::RenderDocument(const nsRect& 
         GetRootScrollFrameAsScrollable();
       nsPoint pos = rootScrollableFrame->GetScrollPosition();
       rect.MoveBy(-pos);
       builder.SetIgnoreScrollFrame(rootScrollFrame);
 
       CanvasFrame* canvasFrame =
         do_QueryFrame(rootScrollableFrame->GetScrolledFrame());
       if (canvasFrame) {
-        canvasArea = canvasFrame->CanvasArea();
+        canvasArea =
+          canvasFrame->CanvasArea() + builder.ToReferenceFrame(canvasFrame);
       }
     }
 
     builder.SetBackgroundOnly(PR_FALSE);
     builder.SetSyncDecodeImages(PR_TRUE);
     builder.EnterPresShell(rootFrame, rect);
 
     // Add the canvas background color.
--- a/layout/base/tests/Makefile.in
+++ b/layout/base/tests/Makefile.in
@@ -76,16 +76,17 @@ DEFINES += -D_IMPL_NS_LAYOUT
 		test_bug465448.xul \
 		test_bug469170.html \
 		test_bug471126.html \
 		test_bug435293-scale.html \
 		test_bug435293-interaction.html \
 		test_bug435293-skew.html \
 		test_bug495648.xul \
 		test_bug514127.html \
+		test_bug518777.html \
 		test_scrolling.html \
 		$(NULL)
 # test_bug396024.html is currently disabled because it interacts badly with
 # the "You can't print-preview while the page is loading" dialog.
 # (See bug 407080)
 
 # Tests for bugs 441782 and 467672 don't pass reliably on Windows, because of bug 469208
 ifeq (,$(filter windows,$(MOZ_WIDGET_TOOLKIT)))
copy from layout/base/tests/test_bug514127.html
copy to layout/base/tests/test_bug518777.html
--- a/layout/base/tests/test_bug514127.html
+++ b/layout/base/tests/test_bug518777.html
@@ -1,50 +1,52 @@
 <!DOCTYPE HTML>
 <html>
 <!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=514127
+https://bugzilla.mozilla.org/show_bug.cgi?id=518777
 -->
 <head>
-  <title>Test for Bug 514127</title>
+  <title>Test for Bug 518777</title>
   <script type="application/javascript" src="/MochiKit/packed.js"></script>
   <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
 </head>
 <body>
-<p><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=514127">Mozilla Bug 514127</a></p>
+<p><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=518777">Mozilla Bug 518777</a></p>
 
 <!--
 iframe source is
-<html><body style='background: rgb(0,0,255); width: 100px; height: 50100px;'></body></html>
+<html><body onload='window.scrollTo(0,99999999); document.documentElement.offsetWidth; window.parent.dotest();' style='background: rgb(0,0,255); width: 100px; height: 50100px;'></body></html>
 -->
 <iframe id="source" width="50" height="50"
-       src="data:text/html,%3Chtml%3E%3Cbody%20style%3D%27background%3A%20rgb%280%2C0%2C255%29%3B%20width%3A%20100px%3B%20height%3A%2050100px%3B%27%3E%3C%2Fbody%3E%3C%2Fhtml%3E"></iframe>
+       src="data:text/html,%3Chtml%3E%3Cbody%20onload%3D%27window.scrollTo%280%2C99999999%29%3B%20document.documentElement.offsetWidth%3B%20window.parent.dotest%28%29%3B%27%20style%3D%27background%3A%20rgb%280%2C0%2C255%29%3B%20width%3A%20100px%3B%20height%3A%2050100px%3B%27%3E%3C%2Fbody%3E%3C%2Fhtml%3E"></iframe>
 <canvas id="scratch" width="50" height="50"></canvas>
 
 <pre id="test">
 <script type="application/javascript">
 
-/** Test for Bug 514127 **/
-
-netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+/** Test for Bug 518777 **/
 
-var canvas = document.getElementById('scratch');
-var source = document.getElementById('source').contentWindow;
-var context = canvas.getContext("2d");
+function dotest() {
+  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+
+  var canvas = document.getElementById('scratch');
+  var source = document.getElementById('source').contentWindow;
+  var context = canvas.getContext("2d");
 
-context.clearRect(0, 0, canvas.width, canvas.height);
-context.drawWindow(source, 25, 50000, canvas.width, canvas.height,
-                   "transparent");
+  context.clearRect(0, 0, canvas.width, canvas.height);
+  context.drawWindow(source, 25, 25, canvas.width, canvas.height,
+                     "transparent");
 
-var data = context.getImageData(0, 0, canvas.width, canvas.height).data;
-var failed = false;
-for (var i = 0; i < data.length; i+=4) {
-  if (data[i] != 0 || data[i+1] != 0 || data[i+2] != 255 || data[i+3] != 255) {
-    failed = true;
-    break;
+  var data = context.getImageData(0, 0, canvas.width, canvas.height).data;
+  var failed = false;
+  for (var i = 0; i < data.length; i+=4) {
+    if (data[i] != 0 || data[i+1] != 0 || data[i+2] != 255 || data[i+3] != 255) {
+      failed = true;
+      break;
+    }
   }
+  ok(!failed, "all pixels blue");
 }
-ok(!failed, "all pixels blue");
 </script>
 </pre>
 </body>
 </html>