diff options
Diffstat (limited to 'layout/base/tests/chrome')
43 files changed, 2380 insertions, 0 deletions
diff --git a/layout/base/tests/chrome/animated.gif b/layout/base/tests/chrome/animated.gif Binary files differnew file mode 100644 index 000000000..b2895487b --- /dev/null +++ b/layout/base/tests/chrome/animated.gif diff --git a/layout/base/tests/chrome/blue-32x32.png b/layout/base/tests/chrome/blue-32x32.png Binary files differnew file mode 100644 index 000000000..deefd19b2 --- /dev/null +++ b/layout/base/tests/chrome/blue-32x32.png diff --git a/layout/base/tests/chrome/bug1041200_window.html b/layout/base/tests/chrome/bug1041200_window.html new file mode 100644 index 000000000..e098e1d92 --- /dev/null +++ b/layout/base/tests/chrome/bug1041200_window.html @@ -0,0 +1,45 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for Bug 1041200</title> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> +</head> +<body> +<iframe style="width:700px; height:500px; margin-top:200px;" id="ourFrame"></iframe> +<script> +var SpecialPowers = window.opener.wrappedJSObject.SpecialPowers; +var SimpleTest = window.opener.wrappedJSObject.SimpleTest; +var ok = window.opener.wrappedJSObject.ok; +var info = window.opener.wrappedJSObject.info; + +var viewer = + SpecialPowers.wrap(ourFrame).contentWindow + .QueryInterface(SpecialPowers.Ci.nsIInterfaceRequestor) + .getInterface(SpecialPowers.Ci.nsIWebNavigation) + .QueryInterface(SpecialPowers.Ci.nsIDocShell) + .contentViewer; +viewer.fullZoom = 2; + +SimpleTest.waitForExplicitFinish(); + +window.onload = function() { + window.waitForAllPaintsFlushed(function () { + // Supply random key to ensure load actually happens + ourFrame.src = "data:text/html,<body onload='parent.childLoaded()' style='background:lime'><p>Hello<p>Hello<p>Hello<p>Hello<p>Hello<p>" + Math.random(); + }, document.getElementById("ourFrame").contentDocument); +}; + +window.childLoaded = function() { + setTimeout(function() { + window.waitForAllPaintsFlushed(function(x1, y1, x2, y2) { + ok(x2 - x1 >= 700 && y2 - y1 >= 500, + "expected to see invalidate of entire frame, got " + [x1,y1,x2,y2].join(',')); + SimpleTest.finish(); + window.close(); + }); + }, 0); +}; +</script> + diff --git a/layout/base/tests/chrome/bug495648.rdf b/layout/base/tests/chrome/bug495648.rdf new file mode 100644 index 000000000..b7045aa70 --- /dev/null +++ b/layout/base/tests/chrome/bug495648.rdf @@ -0,0 +1,214 @@ +<?xml version="1.0"?> +<RDF:RDF xmlns:NS1="http://sitedelta.schierla.de/SD-rdf#" + xmlns:NC="http://home.netscape.com/NC-rdf#" + xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=19&btnG=Suche&meta=" + NC:name="19 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Bag RDF:about="urn:root:bag"> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=1&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=2&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=3&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=4&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=5&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=6&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=7&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=8&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=9&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=10&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=11&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=12&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=13&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=14&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=15&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=16&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=17&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=18&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=19&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=20&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=21&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=22&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=23&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=24&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=25&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=26&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=27&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=28&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=29&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=30&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=31&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=32&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=33&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=34&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=35&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=36&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=37&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=38&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=39&btnG=Suche&meta="/> + <RDF:li RDF:resource="http://www.google.de/search?hl=de&q=40&btnG=Suche&meta="/> + </RDF:Bag> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=2&btnG=Suche&meta=" + NC:name="2 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=12&btnG=Suche&meta=" + NC:name="12 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=5&btnG=Suche&meta=" + NC:name="5 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=6&btnG=Suche&meta=" + NC:name="6 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=22&btnG=Suche&meta=" + NC:name="22 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=17&btnG=Suche&meta=" + NC:name="17 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="urn:root"> + <NC:links RDF:resource="urn:root:bag"/> + </RDF:Description> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=8&btnG=Suche&meta=" + NC:name="8 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=1&btnG=Suche&meta=" + NC:name="1 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=16&btnG=Suche&meta=" + NC:name="16 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=21&btnG=Suche&meta=" + NC:name="21 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=20&btnG=Suche&meta=" + NC:name="20 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=9&btnG=Suche&meta=" + NC:name="9 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=11&btnG=Suche&meta=" + NC:name="11 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=14&btnG=Suche&meta=" + NC:name="14 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=23&btnG=Suche&meta=" + NC:name="23 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=24&btnG=Suche&meta=" + NC:name="24 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=18&btnG=Suche&meta=" + NC:name="18 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www0.pafnet.de/user/322033" + NC:name="pafnet - You2_xD" + NS1:nextScan="1243707104073" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=3&btnG=Suche&meta=" + NC:name="3 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=7&btnG=Suche&meta=" + NC:name="7 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=15&btnG=Suche&meta=" + NC:name="15 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=4&btnG=Suche&meta=" + NC:name="4 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=13&btnG=Suche&meta=" + NC:name="13 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=10&btnG=Suche&meta=" + NC:name="10 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=25&btnG=Suche&meta=" + NC:name="25 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=26&btnG=Suche&meta=" + NC:name="26 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=27&btnG=Suche&meta=" + NC:name="27 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=28&btnG=Suche&meta=" + NC:name="28 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=29&btnG=Suche&meta=" + NC:name="29 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=30&btnG=Suche&meta=" + NC:name="30 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=31&btnG=Suche&meta=" + NC:name="31 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=32&btnG=Suche&meta=" + NC:name="32 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=33&btnG=Suche&meta=" + NC:name="33 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=34&btnG=Suche&meta=" + NC:name="34 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=35&btnG=Suche&meta=" + NC:name="35 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=36&btnG=Suche&meta=" + NC:name="36 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=37&btnG=Suche&meta=" + NC:name="37 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=38&btnG=Suche&meta=" + NC:name="38 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=39&btnG=Suche&meta=" + NC:name="39 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> + <RDF:Description RDF:about="http://www.google.de/search?hl=de&q=40&btnG=Suche&meta=" + NC:name="40 - Google-Suche" + NS1:nextScan="0" + NS1:status="0" /> +</RDF:RDF> diff --git a/layout/base/tests/chrome/bug551434_childframe.html b/layout/base/tests/chrome/bug551434_childframe.html new file mode 100644 index 000000000..3d7bd6c13 --- /dev/null +++ b/layout/base/tests/chrome/bug551434_childframe.html @@ -0,0 +1,4 @@ +<script> +var gKeyDownChild = 0, gKeyPressChild = 0, gKeyUpChild = 0; +</script> +<input id='i4' onkeydown="gKeyDownChild++" onkeypress="gKeyPressChild++" onkeyup="gKeyUpChild++; this.parentNode.removeChild(this);"> diff --git a/layout/base/tests/chrome/chrome.ini b/layout/base/tests/chrome/chrome.ini new file mode 100644 index 000000000..2f6ca0ba8 --- /dev/null +++ b/layout/base/tests/chrome/chrome.ini @@ -0,0 +1,49 @@ +[DEFAULT] +skip-if = os == 'android' +support-files = + animated.gif + blue-32x32.png + bug495648.rdf + bug551434_childframe.html + chrome_content_integration_window.xul + chrome_over_plugin_window.xul + default_background_window.xul + dialog_with_positioning_window.xul + no_clip_iframe_subdoc.html + no_clip_iframe_window.xul + printpreview_bug396024_helper.xul + printpreview_bug482976_helper.xul + printpreview_helper.xul + file_bug1018265.xul + +[test_bug396367-1.html] +[test_bug396367-2.html] +[test_bug420499.xul] +[test_bug458898.html] +[test_bug495648.xul] +[test_bug504311.xul] +[test_bug514660.xul] +[test_bug533845.xul] +[test_bug551434.html] +[test_bug708062.html] +[test_bug812817.xul] +[test_bug847890_paintFlashing.html] +[test_bug1018265.xul] +[test_bug1041200.xul] +support-files=bug1041200_window.html +[test_chrome_content_integration.xul] +[test_chrome_over_plugin.xul] +[test_default_background.xul] +[test_dialog_with_positioning.html] +tags = openwindow +[test_fixed_bg_scrolling_repaints.html] +[test_leaf_layers_partition_browser_window.xul] +skip-if = (!debug) || (toolkit == "cocoa") || (os == "linux") # Disabled on Mac and Linux because of Bug 992311 +[test_no_clip_iframe.xul] +[test_prerendered_transforms.html] +[test_printpreview.xul] +skip-if = os == "linux" && bits == 32 # Disabled on Linux32 for bug 1278957 +[test_printpreview_bug396024.xul] +[test_printpreview_bug482976.xul] +[test_scrolling_repaints.html] +[test_will_change.html] diff --git a/layout/base/tests/chrome/chrome_content_integration_window.xul b/layout/base/tests/chrome/chrome_content_integration_window.xul new file mode 100644 index 000000000..23cd21e6e --- /dev/null +++ b/layout/base/tests/chrome/chrome_content_integration_window.xul @@ -0,0 +1,45 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<window title="Content/chrome integration subwindow" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="runTests()" + style="background:black; -moz-appearance:none;"> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + + <stack style="height:300px; width:200px;"> + <!-- the bottom 100px is a strip of black that should be vixible through the content iframe --> + <vbox style="background:pink; border-bottom:100px solid black"/> + <!-- the middle 100px is a strip of black in the content iframe --> + <!-- the bottom 100px of the iframe is transparent, the top 100px is yellow --> + <iframe type="content" style="border:none;" + transparent="transparent" + src="data:text/html,<div style='position:absolute;left:0;top:0;width:100%;height:100px;background:yellow;border-bottom:100px solid black'>"/> + <!-- the top 100px is a strip of black above the content iframe --> + <vbox style="border-top:100px solid black;"/> + </stack> + + <script type="application/javascript"> + <![CDATA[ + var imports = [ "SimpleTest", "is", "isnot", "ok", "SpecialPowers" ]; + for (var name of imports) { + window[name] = window.opener.wrappedJSObject[name]; + } + + function runTests() { + var testCanvas = snapshotWindow(window); + + var refCanvas = snapshotWindow(window); + var ctx = refCanvas.getContext('2d'); + ctx.fillStyle = "black"; + ctx.fillRect(0, 0, refCanvas.width, refCanvas.height); + + var comparison = compareSnapshots(testCanvas, refCanvas, true); + ok(comparison[0], "Rendering OK, got " + comparison[1] + ", expected " + comparison[2]); + + var tester = window.SimpleTest; + window.close(); + tester.finish(); + } + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/chrome_over_plugin_window.xul b/layout/base/tests/chrome/chrome_over_plugin_window.xul new file mode 100644 index 000000000..54c18fd56 --- /dev/null +++ b/layout/base/tests/chrome/chrome_over_plugin_window.xul @@ -0,0 +1,62 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<window title="Content/chrome integration subwindow" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="runTests()">\ + <!-- We're mainly testing that a) translucent chrome elements cause the plugin to be clipped away and + b) translucent content elements do NOT cause the plugin to be clipped away --> + <stack style="height:100px; width:150px;"> + <iframe type="content" style="border:none;" id="f" + src="data:text/html,<embed id='e' type='application/x-test' wmode='window' + style='position:absolute;left:0;top:0;width:100px;height:100px'></embed> + <div style='position:absolute;left:0;top:80px;width:100px;height:10px;background:rgba(0,0,128,0.5)'></div> + <div style='position:absolute;left:0;top:90px;width:100px;height:10px;background:blue'></div> + "/> + <vbox> + <vbox style="height:25px; background:yellow;"/> <!-- plugin should be covered here --> + <vbox style="height:25px; background:rgba(0,128,0,0.5);"/> <!-- plugin should be covered here --> + <vbox style="height:50px;"/> <!-- plugin should be visible here --> + </vbox> + </stack> + + <script type="application/javascript"> + <![CDATA[ + var imports = [ "SimpleTest", "is", "isnot", "ok", "todo" ]; + for (var name of imports) { + window[name] = window.opener.wrappedJSObject[name]; + } + + var plugin; + function waitForPaint() { + if (plugin.getPaintCount() < 1) { + setTimeout(waitForPaint, 0); + return; + } + + if (plugin.hasWidget()) { + is(plugin.getClipRegionRectCount(), 1, "plugin clip rect count"); + var left = plugin.getEdge(0); + var top = plugin.getEdge(1); + is(plugin.getClipRegionRectEdge(0,0) - left, 0, "plugin clip rect left"); + // our two vboxes with backgrounds should cause the top of the plugin to be clipped + is(plugin.getClipRegionRectEdge(0,1) - top, 50, "plugin clip rect top"); + is(plugin.getClipRegionRectEdge(0,2) - left, 100, "plugin clip rect right"); + // of the two content DIVs, the first one should not cause the plugin to be clipped because + // it's transparent. The second one should cause the plugin to be clipped. + is(plugin.getClipRegionRectEdge(0,3) - top, 90, "plugin clip rect bottom"); + } else { + todo(false, "Test only tests windowed plugins"); + } + + var tester = window.SimpleTest; + window.close(); + tester.finish(); + } + + function runTests() { + plugin = document.getElementById("f").contentDocument.getElementById("e").wrappedJSObject; + waitForPaint(); + } + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/default_background_window.xul b/layout/base/tests/chrome/default_background_window.xul new file mode 100644 index 000000000..110dd8c15 --- /dev/null +++ b/layout/base/tests/chrome/default_background_window.xul @@ -0,0 +1,60 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="runTests()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" + src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + + <iframe type="content" id="f" src="about:blank" style="border:1px solid black;"/> + + <script type="application/javascript"> + <![CDATA[ + SimpleTest.waitForExplicitFinish(); + + var imports = [ "SimpleTest", "is", "isnot", "ok" ]; + for (var name of imports) { + window[name] = window.opener.wrappedJSObject[name]; + } + + function snapshot(win) { + var el = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + el.width = win.innerWidth; + el.height = win.innerHeight; + + var ctx = el.getContext("2d"); + ctx.drawWindow(win, 0, 0, + win.innerWidth, win.innerHeight, + "rgba(0,0,0,0)", 0); + return el; + } + + var color = '#2468AC'; + var prefs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + prefs.setCharPref('browser.display.background_color', color); + + function runTests() { + var f = document.getElementById("f"); + + var testCanvas = snapshot(f.contentWindow); + prefs.clearUserPref('browser.display.background_color'); + + var refCanvas = snapshot(f.contentWindow); + var ctx = refCanvas.getContext('2d'); + ctx.fillStyle = color; + ctx.fillRect(0, 0, refCanvas.width, refCanvas.height); + + var comparison = compareSnapshots(testCanvas, refCanvas, true); + ok(comparison[0], "Rendering OK, got " + comparison[1] + ", expected " + comparison[2]); + + var tester = window.SimpleTest; + window.close(); + tester.finish(); + } + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/dialog_with_positioning_window.xul b/layout/base/tests/chrome/dialog_with_positioning_window.xul new file mode 100644 index 000000000..6b94fefdf --- /dev/null +++ b/layout/base/tests/chrome/dialog_with_positioning_window.xul @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="setTimeout(runTest, 0)"> + <vbox> + <text value="powered by example.com" style="padding: 16px;"/> + </vbox> + <hbox id="t" style="position: fixed; right: 16px; bottom: 16px;"> + <button label="OK"/> + </hbox> +<script><![CDATA[ +var SimpleTest = window.opener.wrappedJSObject.SimpleTest; +var SpecialPowers = window.opener.wrappedJSObject.SpecialPowers; +var is = window.opener.wrappedJSObject.is; +var ok = window.opener.wrappedJSObject.ok; + +// We run this off a setTimeout from onload, because the XUL window +// only does its intrinsic-height layout after the load event has +// finished +function runTest() { + var t = document.getElementById("t"); + var tBottom = t.getBoundingClientRect().bottom; + is(tBottom, document.documentElement.getBoundingClientRect().bottom - 16, + "check fixed-pos element t bottom positioned correctly"); + ok(tBottom < 200, "fixed-pos element t bottom must be sane, less than 200 (got " + tBottom + ")"); + window.close(); + SimpleTest.finish(); +} +]]></script> +</window> diff --git a/layout/base/tests/chrome/file_bug1018265.xul b/layout/base/tests/chrome/file_bug1018265.xul new file mode 100644 index 000000000..91944c5b4 --- /dev/null +++ b/layout/base/tests/chrome/file_bug1018265.xul @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet type="text/css" href="/tests/SimpleTest/test.css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1018265 +--> +<window title="Mozilla Bug 1018265" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="setTimeout(run, 0);"> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + + /** Test for Bug 1018265 **/ + + var testcontent = null; + + function run() { + testcontent = document.getElementById("testcontent"); + shouldHaveTwoNonHiddenContentViewers(); + testcontent.setAttribute("src", "foobarpage"); + setTimeout(errorPageLoaded, 2500) + } + + function errorPageLoaded() { + testcontent.addEventListener("pageshow", didGoBack, true); + setTimeout("testcontent.contentWindow.history.back();", 0); + } + + function didGoBack(e) { + testcontent.removeEventListener("pageshow", didGoBack, true); + shouldHaveTwoNonHiddenContentViewers(); + opener.done(); + window.close(); + } + + function getContentViewer(win) { + return win.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIDocShell).contentViewer; + } + + function shouldHaveTwoNonHiddenContentViewers() { + opener.is(getContentViewer(testcontent.contentWindow).isHidden, false, "Top level ContentViewer should not be hidden."); + opener.is(getContentViewer(testcontent.contentWindow.frames[0]).isHidden, false, " Iframe's ContentViewer should not be hidden."); + } + ]]> + </script> + + <browser type="content" id="testcontent" flex="1" src="data:text/html,<iframe></iframe>"/> +</window> diff --git a/layout/base/tests/chrome/no_clip_iframe_subdoc.html b/layout/base/tests/chrome/no_clip_iframe_subdoc.html new file mode 100644 index 000000000..b00b48be6 --- /dev/null +++ b/layout/base/tests/chrome/no_clip_iframe_subdoc.html @@ -0,0 +1,7 @@ +<!DOCTYPE HTML> +<html> +<body style="margin:0; background:lime;"> +<div id="d" style="position:relative; top:-50px; width:150px; height:250px; background:yellow;"></div> +<div id="p" style="margin-top:-50px; width:150px; height:50px;"></div> +</body> +</html> diff --git a/layout/base/tests/chrome/no_clip_iframe_window.xul b/layout/base/tests/chrome/no_clip_iframe_window.xul new file mode 100644 index 000000000..960477e9e --- /dev/null +++ b/layout/base/tests/chrome/no_clip_iframe_window.xul @@ -0,0 +1,96 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="runTests()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" + src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> + + <div id="container" xmlns="http://www.w3.org/1999/xhtml" style="height:400px; overflow:auto; background:gray"> + <div style="height:0"> + <iframe type="content" id="f" src="no_clip_iframe_subdoc.html" + style="margin-top:50px; border:1px solid black; width:100px; height:100px;"/> + </div> + <div id="ref" style="background:gray;"> + <div style="border:1px solid black; margin-top:50px; width:100px; height:100px;"> + <div id="ref-d" style="background:lime; height:250px; width:150px;"> + <div style="position:relative; top:-50px; width:150px; height:100%; background:yellow;"/> + </div> + </div> + </div> + </div> + <vbox flex="1"/> + + <script type="application/javascript"> + <![CDATA[ + var imports = [ "SimpleTest", "is", "isnot", "ok", "onerror" ]; + for (var name of imports) { + window[name] = window.opener.wrappedJSObject[name]; + } + + SimpleTest.waitForExplicitFinish(); + + var Ci = Components.interfaces; + var frame = document.getElementById("f"); + var fl = frame.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader; + is(fl.clipSubdocument, true, "clipSubdocument should default to true"); + fl.clipSubdocument = false; + is(fl.clipSubdocument, false, "clipSubdocument should have been set to false"); + + function runTests() { + var ref = document.getElementById("ref"); + frame.contentWindow.scrollTo(0,0); + + ref.style.visibility = "hidden"; + var testCanvas = snapshotWindow(window); + ref.style.visibility = ""; + var refCanvas = snapshotWindow(window); + var comparison = compareSnapshots(testCanvas, refCanvas, true); + ok(comparison[0], "Basic overflow drawing; got " + comparison[1] + ", expected " + comparison[2]); + + document.getElementById("container").style.height = "200px"; + ref.style.visibility = "hidden"; + testCanvas = snapshotWindow(window); + ref.style.visibility = ""; + refCanvas = snapshotWindow(window); + comparison = compareSnapshots(testCanvas, refCanvas, true); + ok(comparison[0], "Drawing with vertical scrollbar to show overflow area computation; got " + + comparison[1] + ", expected " + comparison[2]); + + frame.contentDocument.getElementById("d").style.height = "350px"; + document.getElementById("ref-d").style.height = "350px"; + ref.style.visibility = "hidden"; + testCanvas = snapshotWindow(window); + ref.style.visibility = ""; + refCanvas = snapshotWindow(window); + comparison = compareSnapshots(testCanvas, refCanvas, true); + ok(comparison[0], "testing dynamic overflow area change affecting scrollbar; got " + + comparison[1] + ", expected " + comparison[2]); + + // Now do invalidation tests + ref.style.visibility = "hidden"; + document.getElementById("container").style.height = "400px"; + waitForAllPaintsFlushed(function() { + frame.contentWindow.scrollTo(0,80); + waitForAllPaintsFlushed(function(x1, y1, x2, y2) { + ok(x1 <= 1 && x2 >= 151 && y1 <= 0 && y2 >= 400, + "Entire scrolled region is painted: " + x1 + "," + y1 + "," + x2 + "," + y2); + frame.contentDocument.getElementById("p").style.background = "cyan"; + waitForAllPaintsFlushed(function(x1, y1, x2, y2) { + ok(x1 <= 1 && x2 >= 151 && y1 <= 271 && y2 >= 320, + "Entire updated region is painted: " + x1 + "," + y1 + "," + x2 + "," + y2); + + var tester = window.SimpleTest; + window.close(); + tester.finish(); + }, frame.contentDocument); + }); + }); + } + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/printpreview_bug396024_helper.xul b/layout/base/tests/chrome/printpreview_bug396024_helper.xul new file mode 100644 index 000000000..8fe2609f5 --- /dev/null +++ b/layout/base/tests/chrome/printpreview_bug396024_helper.xul @@ -0,0 +1,123 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=396024 +--> +<window title="Mozilla Bug 396024" onload="run()" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> +<iframe id="i" src="about:blank" type="content"></iframe> +<iframe src="about:blank" type="content"></iframe> +<script type="application/javascript"> +<![CDATA[ +var is = window.opener.wrappedJSObject.is; +var ok = window.opener.wrappedJSObject.ok; +var todo = window.opener.wrappedJSObject.todo; +var SimpleTest = window.opener.wrappedJSObject.SimpleTest; +var gWbp; +function printpreview() { + gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + var listener = { + onLocationChange: function(webProgress, request, location, flags) { }, + onProgressChange: function(webProgress, request, curSelfProgress, + maxSelfProgress, curTotalProgress, + maxTotalProgress) { }, + onSecurityChange: function(webProgress, request, state) { }, + onStateChange: function(webProgress, request, stateFlags, status) { }, + onStatusChange: function(webProgress, request, status, message) { }, + QueryInterface: function(iid) { + if (iid.equals(Components.interfaces.nsIWebProgressListener) || + iid.equals(Components.interfaces.nsISupportsWeakReference)) + return this; + throw Components.results.NS_NOINTERFACE; + } + } + var prefs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + prefs.setBoolPref('print.show_print_progress', false); + //XXX I would have thought this would work, instead I'm forced to use prefs service + gWbp.globalPrintSettings.showPrintProgress = false; + gWbp.printPreview(gWbp.globalPrintSettings, window.frames[0], listener); + prefs.clearUserPref('print.show_print_progress'); +} + +function exitprintpreview() { + window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint).exitPrintPreview(); +} + +function finish() { + SimpleTest.finish(); + window.close(); +} + +function run() +{ +/** Test for Bug 396024 **/ + var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + + try { + Components.classes["@mozilla.org/gfx/printerenumerator;1"] + .getService(Components.interfaces.nsIPrinterEnumerator); + } catch(e) { + todo(false, "Test skipped on MacOSX, as the print preview code doesn't work there"); + finish(); + return; + } + + if (printService.defaultPrinterName != '') { + printpreview(); + ok(gWbp.doingPrintPreview, "Should be doing print preview"); + exitprintpreview(); + ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore1"); + printpreview(); + setTimeout(run2, 0) + } else { + todo(false, "No printer seems installed on this machine, that is necessary for this test"); + finish(); + } +} + +function run2() { + var loadhandler = function() { + document.getElementById("i").removeEventListener("load", arguments.callee, true); + setTimeout(run3, 0); + }; + document.getElementById("i").addEventListener("load", loadhandler, true); + window.frames[0].location.reload(); +} + +function run3() { + gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + ok(gWbp.doingPrintPreview, "Should be doing print preview"); + exitprintpreview(); + setTimeout(run4, 0); +} + +function run4() { + var i = document.getElementById("i"); + var x = i.parentNode.removeChild(i); + var loadhandler = function() { + document.getElementById("i").removeEventListener("load", loadhandler, true); + setTimeout(run5, 0); + }; + x.addEventListener("load", loadhandler, true); + document.documentElement.getBoundingClientRect(); + document.documentElement.appendChild(x); + gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore2"); +} + +function run5() { + //XXX this shouldn't be necessary, see bug 405555 + printpreview(); + exitprintpreview(); + finish(); //should not have crashed after all of this +} +]]></script> +</window> diff --git a/layout/base/tests/chrome/printpreview_bug482976_helper.xul b/layout/base/tests/chrome/printpreview_bug482976_helper.xul new file mode 100644 index 000000000..34c2d658e --- /dev/null +++ b/layout/base/tests/chrome/printpreview_bug482976_helper.xul @@ -0,0 +1,82 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482976 +--> +<window title="Mozilla Bug 482976" onload="run1()" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> +<iframe src="about:blank" type="content"></iframe> +<iframe src="about:blank" type="content"></iframe> +<script type="application/javascript"> +<![CDATA[ +var is = window.opener.wrappedJSObject.is; +var ok = window.opener.wrappedJSObject.ok; +var todo = window.opener.wrappedJSObject.todo; +var SimpleTest = window.opener.wrappedJSObject.SimpleTest; +var gWbp; +function printpreview() { + gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + var listener = { + onLocationChange: function(webProgress, request, location, flags) { }, + onProgressChange: function(webProgress, request, curSelfProgress, + maxSelfProgress, curTotalProgress, + maxTotalProgress) { }, + onSecurityChange: function(webProgress, request, state) { }, + onStateChange: function(webProgress, request, stateFlags, status) { }, + onStatusChange: function(webProgress, request, status, message) { }, + QueryInterface: function(iid) { + if (iid.equals(Components.interfaces.nsIWebProgessListener) || + iid.equals(Components.interfaces.nsISupportsWeakReference)) + return this; + throw Components.results.NS_NOINTERFACE; + } + } + var prefs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + prefs.setBoolPref('print.show_print_progress', false); + //XXX I would have thought this would work, instead I'm forced to use prefs service + gWbp.globalPrintSettings.showPrintProgress = false; + gWbp.printPreview(gWbp.globalPrintSettings, window.frames[0], listener); + prefs.clearUserPref('print.show_print_progress'); +} + +function exitprintpreview() { + window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint).exitPrintPreview(); +} + +function finish() { + SimpleTest.finish(); + window.close(); +} + +function run1() +{ +/** Test for Bug 482976 **/ + var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + + try { + Components.classes["@mozilla.org/gfx/printerenumerator;1"] + .getService(Components.interfaces.nsIPrinterEnumerator); + } catch(e) { + todo(false, "Test skipped on MacOSX, as the print preview code doesn't work there"); + finish(); + return; + } + + if (printService.defaultPrinterName != '') { + printpreview(); + ok(gWbp.doingPrintPreview, "Should be doing print preview"); + exitprintpreview(); + ok(!gWbp.doingPrintPreview, "Should not be doing print preview anymore"); + } else { + todo(false, "No printer seems installed on this machine, that is necessary for this test"); + } + finish(); +} +]]></script> +</window> diff --git a/layout/base/tests/chrome/printpreview_helper.xul b/layout/base/tests/chrome/printpreview_helper.xul new file mode 100644 index 000000000..96d835b9a --- /dev/null +++ b/layout/base/tests/chrome/printpreview_helper.xul @@ -0,0 +1,274 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window onload="runTests()" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> +<iframe height="200" width="600" type="content"></iframe> +<iframe height="200" width="600" type="content"></iframe> +<script type="application/javascript"> +<![CDATA[ +var is = window.opener.wrappedJSObject.is; +var isnot = window.opener.wrappedJSObject.isnot; +var ok = window.opener.wrappedJSObject.ok; +var todo = window.opener.wrappedJSObject.todo; +var SimpleTest = window.opener.wrappedJSObject.SimpleTest; +var gWbp; +var ctx1; +var ctx2; +var counter = 0; + +var file = Components.classes["@mozilla.org/file/directory_service;1"] + .getService(Components.interfaces.nsIProperties) + .get("TmpD", Components.interfaces.nsILocalFile); +filePath = file.path; + +function printpreview() { + gWbp = window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint); + var listener = { + onLocationChange: function(webProgress, request, location, flags) { }, + onProgressChange: function(webProgress, request, curSelfProgress, + maxSelfProgress, curTotalProgress, + maxTotalProgress) { }, + onSecurityChange: function(webProgress, request, state) { }, + onStateChange: function(webProgress, request, stateFlags, status) { }, + onStatusChange: function(webProgress, request, status, message) { }, + QueryInterface: function(iid) { + if (iid.equals(Components.interfaces.nsIWebProgressListener) || + iid.equals(Components.interfaces.nsISupportsWeakReference)) + return this; + throw Components.results.NS_NOINTERFACE; + } + } + var prefs = Components.classes["@mozilla.org/preferences-service;1"] + .getService(Components.interfaces.nsIPrefBranch); + prefs.setBoolPref('print.show_print_progress', false); + //XXX I would have thought this would work, instead I'm forced to use prefs service + gWbp.globalPrintSettings.showPrintProgress = false; + var before = 0; + var after = 0; + function beforeprint() { ++before; } + function afterprint() { ++after; } + window.frames[0].addEventListener("beforeprint", beforeprint, true); + window.frames[0].addEventListener("afterprint", afterprint, true); + gWbp.printPreview(gWbp.globalPrintSettings, window.frames[0], listener); + is(before, 1, "Should have called beforeprint listener!"); + is(after, 1, "Should have called afterprint listener!"); + window.frames[0].removeEventListener("beforeprint", beforeprint, true); + window.frames[0].removeEventListener("afterprint", afterprint, true); + prefs.clearUserPref('print.show_print_progress'); +} + +function exitprintpreview() { + window.frames[1].QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebBrowserPrint).exitPrintPreview(); +} + +function finish() { + SimpleTest.finish(); + window.close(); +} + +function runTests() +{ + var printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"] + .getService(Components.interfaces.nsIPrintSettingsService); + + try { + Components.classes["@mozilla.org/gfx/printerenumerator;1"] + .getService(Components.interfaces.nsIPrinterEnumerator); + } catch(e) { + todo(false, "Test skipped on MacOSX, as the print preview code doesn't work there"); + finish(); + return; + } + + if (printService.defaultPrinterName != '') { + startTest1(); + } else { + todo(false, "No printer seems installed on this machine, that is necessary for this test"); + finish(); + } +} + +function compareCanvases() { + return window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIDOMWindowUtils) + .compareCanvases(document.getElementsByTagName("canvas")[0], + document.getElementsByTagName("canvas")[1], + {}) == 0; +} + +function addHTMLContent(parent) { + var n = parent.ownerDocument.createElement("div"); + parent.appendChild(n); + var s = "<iframe width='500' height='40' src='data:text/plain,ThisIsAnIframeCreatedDuringPrintPreview'></iframe>"; + s += "<table>"; + for (var i = 1; i < 501; ++i) { + s += "<tr><td>Cell A" + i + "</td><td>Cell B" + i + "</td><td>Cell C" + i + "</td></tr>"; + } + s += "</table>"; + n.innerHTML = s; +} + +function startTest1() { + ctx1 = document.getElementsByTagName("canvas")[0].getContext("2d"); + ctx2 = document.getElementsByTagName("canvas")[1].getContext("2d"); + window.frames[0].document.body.innerHTML = "<div> </div><div>" + counter + " timers</div><div> </div>"; + + // Note this timeout is needed so that we can check that timers run + // after print preview, but not during it. + window.frames[0].wrappedJSObject.counter = counter; + window.frames[0].counterTimeout = "document.body.firstChild.nextSibling.innerHTML = ++counter + ' timers';" + + "window.setTimeout(counterTimeout, 0);"; + window.frames[0].setTimeout(window.frames[0].counterTimeout, 0); + window.frames[0].document.body.firstChild.innerHTML = "Print preview"; + + printpreview(); + ctx1.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(256,256,256)"); + window.frames[0].document.body.firstChild.innerHTML = "Galley presentation"; + + // Add some elements. + addHTMLContent(window.frames[0].document.body.lastChild); + // Delete them. + window.frames[0].document.body.lastChild.innerHTML = ""; + // And readd. + addHTMLContent(window.frames[0].document.body.lastChild); + + setTimeout(finalizeTest1, 1000); +} + +function finalizeTest1() { + ctx2.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(256,256,256)"); + exitprintpreview(); + ok(compareCanvases(), "Canvas should be the same!"); + counter = window.frames[0].counter; + // This timeout is needed so that we can check that timers do run after + // print preview. + setTimeout(runTest2, 1000); +} + +function runTest2() { + isnot(window.frames[0].document.body.firstChild.nextSibling.textContent, "0 timers", "Timers should have run!"); + isnot(window.frames[0].counter, 0, "Timers should have run!"); + counter = window.frames[0].counter; + window.frames[0].counterTimeout = ""; + setTimeout(runTest3, 0); +} + +var elementIndex = 0; +var compareEmptyElement = true; +var emptyFormElements = + ["<input type='text'>", + "<input type='password'>", + "<input type='file'>", + "<input type='button'>", + "<input type='submit'>", + "<input type='reset'>", + "<input type='checkbox'>", + "<input type='radio'>", + "<select></select>", + "<select size='5'></select>", + "<textarea></textarea>"]; + +var formElements = + ["<input type='text' value='text'>", + "<input type='password' value='password'>", + "<input type='file' value='" + filePath + "'>", + "<input type='button' value='button'>", + "<input type='submit' value='submit button'>", + "<input type='reset' value='reset button'>", + "<input type='checkbox' checked>", + "<input type='radio' checked>", + "<select><option>option1</option></select>", + "<select size='5'><option>1</option><option>2</option><option>3</option></select>", + "<textarea value='textarea'>textarea</textarea>"]; + +function runTest3() { + if (compareEmptyElement) { + var currentIndex = elementIndex; + ++elementIndex; + if (elementIndex >= emptyFormElements.length) { + elementIndex = 0; + compareEmptyElement = false; + } + compareFormElementPrint(emptyFormElements[currentIndex], emptyFormElements[currentIndex], true); + return; + } else if (elementIndex < emptyFormElements.length) { + var currentIndex = elementIndex; + ++elementIndex; + compareFormElementPrint(emptyFormElements[currentIndex], formElements[currentIndex], false); + return; + } + + setTimeout(runTest4, 0) +} + +function compareFormElementPrint(el1, el2, equals) { + window.frames[0].document.body.innerHTML = el1; + window.frames[0].document.body.firstChild.value = + window.frames[0].document.body.firstChild.getAttribute('value'); + printpreview(); + ctx1.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(256,256,256)"); + exitprintpreview(); + window.frames[0].document.body.innerHTML = el2; + window.frames[0].document.body.firstChild.value = + window.frames[0].document.body.firstChild.getAttribute('value'); + printpreview(); + ctx2.drawWindow(window.frames[1], 0, 0, 400, 400, "rgb(256,256,256)"); + exitprintpreview(); + is(compareCanvases(), equals, + "Comparing print preview didn't succeed [" + el1 + " : " + el2 + "]"); + setTimeout(runTest3, 100); +} + +// This is a crash test for bug 539060. +function runTest4() { + window.frames[0].document.body.innerHTML = + "<iframe style='display: none;' src='data:text/html,<iframe>'></iframe>"; + setTimeout(runTest4end, 500); +} + +function runTest4end() { + printpreview(); + exitprintpreview(); + + runTest5(); +} + +// This is a crash test for bug 595337 +function runTest5() { + window.frames[0].document.body.innerHTML = + '<iframe style="position: fixed; visibility: hidden; bottom: 10em;"></iframe>' + + '<input contenteditable="true" style="display: table; page-break-before: left; width: 10000px;">'; + printpreview(); + exitprintpreview(); + + setTimeout(runTest6, 0); +} + +// Crash test for bug 878037 +function runTest6() { + window.frames[0].document.body.innerHTML = + '<style> li { list-style-image: url("animated.gif"); } </style>' + + '<li>Firefox will crash if you try and print this page</li>'; + + setTimeout(runTest6end, 500); +} + +function runTest6end() { + printpreview(); + exitprintpreview(); + + finish(); +} + +]]></script> +<table style="border: 1px solid black;" xmlns="http://www.w3.org/1999/xhtml"> +<tr><th>Print preview canvas 1</th><th>Print preview canvas 2</th></tr> +<tr> +<td><canvas height="400" width="400"></canvas></td> +<td><canvas height="400" width="400"></canvas></td> +</tr></table> +</window> diff --git a/layout/base/tests/chrome/test_bug1018265.xul b/layout/base/tests/chrome/test_bug1018265.xul new file mode 100644 index 000000000..5787be72c --- /dev/null +++ b/layout/base/tests/chrome/test_bug1018265.xul @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1018265 +--> +<window title="Mozilla Bug 1018265" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="run()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + + /** Test for Bug 1018265 **/ + + SimpleTest.waitForExplicitFinish(); + + function run() { + window.open("file_bug1018265.xul", "contentViewerTest", "chrome,width=100,height=100"); + } + + function done() { + ok(true, "done"); + setTimeout("SimpleTest.finish()", 0); + } + ]]> + </script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1018265" + target="_blank">Mozilla Bug 1018265</a> + </body> +</window> diff --git a/layout/base/tests/chrome/test_bug1041200.xul b/layout/base/tests/chrome/test_bug1041200.xul new file mode 100644 index 000000000..e85349697 --- /dev/null +++ b/layout/base/tests/chrome/test_bug1041200.xul @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + </body> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + SimpleTest.waitForExplicitFinish(); + // Run the test in a separate window so that the test runs as a chrome + // window + window.open("bug1041200_window.html", "bug1041200", + "chrome,width=800,height=800"); + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/test_bug396367-1.html b/layout/base/tests/chrome/test_bug396367-1.html new file mode 100644 index 000000000..bf24161ca --- /dev/null +++ b/layout/base/tests/chrome/test_bug396367-1.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=396367 +--> +<head> + <title>Test for Bug 396367</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <script> + SimpleTest.waitForExplicitFinish(); + + function finish() { + ok(true, "didn't crash"); + var docviewer = getdocviewer(); + docviewer.textZoom = 1; + SimpleTest.finish(); + } + + function getdocviewer() { + var navigator1 = top.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation); + var docShell = navigator1.QueryInterface(Components.interfaces.nsIDocShell); + var docviewer = docShell.contentViewer; + return docviewer; + } + </script> +</head> +<body> + +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=396367">Mozilla Bug 396367</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> + +<input> +<script>document.body.setAttribute('style', 'display: -moz-box; overflow: scroll;');</script> +<script> +var docviewer = getdocviewer(); +docviewer.textZoom=Math.floor(10*Math.random())/4+0.2; +document.documentElement.offsetHeight; +setTimeout(finish, 0); +</script> + + +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_bug396367-2.html b/layout/base/tests/chrome/test_bug396367-2.html new file mode 100644 index 000000000..94f218a0d --- /dev/null +++ b/layout/base/tests/chrome/test_bug396367-2.html @@ -0,0 +1,56 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=396367 +--> +<head> + <title>Test for Bug 396367</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <style>select::after { content:"m"; }</style> + <script> + SimpleTest.waitForExplicitFinish(); + + function finish() { + ok(true, "didn't crash"); + var docviewer = getdocviewer(); + docviewer.textZoom = 1; + SimpleTest.finish(); + } + + function getdocviewer() { + var navigator1 = top.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation); + var docShell = navigator1.QueryInterface(Components.interfaces.nsIDocShell); + var docviewer = docShell.contentViewer; + return docviewer; + } + </script> +</head> +<body> + +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=396367">Mozilla Bug 396367</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> + +<div style="overflow: scroll; float: left;"> + +<select></select> + +<li style="display: table-cell;"> + +<script> +var docviewer = getdocviewer(); +docviewer.textZoom=Math.floor(10*Math.random())/4+0.2; +document.documentElement.offsetHeight; +setTimeout(finish, 0); +</script> +</li> +</div> + + +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_bug420499.xul b/layout/base/tests/chrome/test_bug420499.xul new file mode 100644 index 000000000..fb20c417a --- /dev/null +++ b/layout/base/tests/chrome/test_bug420499.xul @@ -0,0 +1,129 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=420499 +--> +<window title="Mozilla Bug 420499" onload="setTimeout(focusInput, 500);" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + + + + <menu id="menu" label="Menu"> + <menupopup id="file-popup"> + <!-- <textbox id="some-text" maxlength="10" value="some text"/> --> + <menu label="submenu"> + <menupopup id="file-popup-inner"> + + <menuitem label="Item1"/> + <menuitem label="Item2"/> + <textbox id="some-text" maxlength="10" value="some more text"/> + </menupopup> + </menu> + <menuitem label="Item3"/> + <menuitem label="Item4"/> + </menupopup> + </menu> + + <popupset> + <popup id="contextmenu"> + <menuitem label="Cut"/> + <menuitem label="Copy"/> + <menuitem label="Paste"/> + </popup> + <tooltip id="tooltip" orient="vertical"> + <description value="This is a tooltip"/> + </tooltip> + </popupset> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml" bgcolor="white"> + + <p id="par1">Paragraph 1</p> + <p id="par2">Paragraph 2</p> + <p id="par3">Paragraph 3</p> + <p id="par4">Paragraph 4</p> + <p id="par5">Paragraph 5</p> + + <input type="text" id="text-input" maxlength="10" value="some more text"/> <br /> + + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=420499" + target="_blank">Mozilla Bug 420499</a> + </body> + + <!-- test code goes here --> + <script type="application/javascript"><![CDATA[ + + /** Test for Bug 420499 **/ + SimpleTest.waitForExplicitFinish(); + + function getSelectionController() { + return document.docShell + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsISelectionDisplay) + .QueryInterface(Components.interfaces.nsISelectionController); + } + + function isCaretVisible() { + window.QueryInterface(Components.interfaces.nsIInterfaceRequestor); + var docShell = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShell); + var selCon = docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsISelectionDisplay) + .QueryInterface(Components.interfaces.nsISelectionController); + return selCon.caretVisible; + } + + function focusInput() { + ok(!isCaretVisible(), "Caret shouldn't be visible"); + $("text-input").focus(); + ok(isCaretVisible(), "Caret should be visible when input focused"); + window.addEventListener("popupshown", popupMenuShownHandler, false); + $("menu").open = true; + } + + function popupMenuShownHandler() { + window.removeEventListener("popupshown", popupMenuShownHandler, false); + ok(!isCaretVisible(), "Caret shouldn't be visible when menu open"); + window.addEventListener("popuphidden", ensureParagraphFocused, false); + $("menu").open = false; + } + + function ensureParagraphFocused() { + window.removeEventListener("popuphidden", ensureParagraphFocused, false); + ok(isCaretVisible(), "Caret should have returned to previous focus"); + window.addEventListener("popupshown", popupMenuShownHandler2, false); + $("contextmenu").openPopup($('text-input'), "topleft" , -1 , -1 , true, true); + } + + function popupMenuShownHandler2() { + window.removeEventListener("popupshown", popupMenuShownHandler2, false); + ok(isCaretVisible(), "Caret should be visible when context menu open"); + window.addEventListener("popuphidden", ensureParagraphFocused2, false); + document.getElementById("contextmenu").hidePopup(); + } + + function ensureParagraphFocused2() { + window.removeEventListener("popuphidden", ensureParagraphFocused2, false); + ok(isCaretVisible(), "Caret should still be visible"); + window.addEventListener("popupshown", tooltipShownHandler, false); + $("tooltip").openPopup($('text-input'), "topleft" , -1 , -1 , false, true); + } + + function tooltipShownHandler() { + window.removeEventListener("popupshown", tooltipShownHandler, false); + ok(isCaretVisible(), "Caret should be visible when tooltip is visible"); + window.addEventListener("popuphidden", ensureParagraphFocused3, false); + document.getElementById("tooltip").hidePopup(); + } + + function ensureParagraphFocused3() { + window.removeEventListener("popuphidden", ensureParagraphFocused2, false); + ok(isCaretVisible(), "Caret should still be visible"); + SimpleTest.finish(); + } + ]]></script> +</window> diff --git a/layout/base/tests/chrome/test_bug458898.html b/layout/base/tests/chrome/test_bug458898.html new file mode 100644 index 000000000..90261b4ce --- /dev/null +++ b/layout/base/tests/chrome/test_bug458898.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=458898 +--> +<head> + <title>Test for Bug 458898</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=458898">Mozilla Bug 458898</a> +<p id="display"></p> +<div id="content" style="display: none"> +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); +var win = window.openDialog("data:text/html,<div style='height:200px; width:100px;'>"); + +function loaded() { + var disableWindowResizePref = "dom.disable_window_move_resize"; + SpecialPowers.pushPrefEnv({"set":[[disableWindowResizePref, false]]}, function() { + win.sizeToContent(); + ok(win.innerWidth >= 100, "innerWidth: " + win.innerWidth + " >= 100 ?"); + ok(win.innerHeight >= 200, "innerHeight: " + win.innerHeight + " >= 200 ?"); + win.close(); + SimpleTest.finish(); + }); +} + +win.addEventListener("load", loaded, false); + +</script> +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_bug495648.xul b/layout/base/tests/chrome/test_bug495648.xul new file mode 100644 index 000000000..186417a0d --- /dev/null +++ b/layout/base/tests/chrome/test_bug495648.xul @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=495648 +--> +<window title="Mozilla Bug 495648" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=495648" + target="_blank">Mozilla Bug 495648</a> + </body> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + SimpleTest.expectAssertions(15, 24); + + /** Test for Bug 495648 **/ + var uri = window.location.href.replace(/test_bug495648.xul/, "bug495648.rdf"); + + function doTest() { + var list = document.getElementById('l'); + var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); + var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); + var rdf = rdfService.GetDataSourceBlocking(uri); + list.database.AddDataSource(rdf); + list.builder.rebuild(); + is(list.itemCount, 40, "Unexpected item count"); + SimpleTest.finish(); + } + + SimpleTest.waitForExplicitFinish(); + addLoadEvent(doTest); + + ]]> + </script> +<listbox flex="1" id="l" seltype="multiple" datasources="rdf:null" ref="urn:root" sortResource="http://home.netscape.com/NC-rdf#name" sortDirection="ascending"> +<template> +<rule><conditions><content uri="?uri" /><triple subject="?uri" predicate="http://home.netscape.com/NC-rdf#links" object="?links" /><member container="?links" child="?child" /><triple subject="?child" predicate="http://home.netscape.com/NC-rdf#name" object="?name" /></conditions><bindings><binding subject="?child" predicate="http://sitedelta.schierla.de/SD-rdf#status" object="?status" /></bindings><action><listitem label="?name" class="listitem-iconic" status="?status" uri="?child" /></action></rule> +</template> +</listbox> +</window> diff --git a/layout/base/tests/chrome/test_bug504311.xul b/layout/base/tests/chrome/test_bug504311.xul new file mode 100644 index 000000000..1b640fdd8 --- /dev/null +++ b/layout/base/tests/chrome/test_bug504311.xul @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=504311 +--> +<window title="Mozilla Bug 504311" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="doTest()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=504311" + target="_blank">Mozilla Bug 504311</a> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); + +function doTest() +{ + var tb = document.getElementById("tb01"); + var inputField = tb.inputField; + var editor = inputField.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor; + editor = editor.QueryInterface(Components.interfaces.nsIPlaintextEditor); + editor.wrapWidth = -1; + + ok(true, "Didn't crash"); + SimpleTest.finish(); +} +]]></script> +<textbox id="tb01" multiline="true"/> +</window> diff --git a/layout/base/tests/chrome/test_bug514660.xul b/layout/base/tests/chrome/test_bug514660.xul new file mode 100644 index 000000000..e7c504bcf --- /dev/null +++ b/layout/base/tests/chrome/test_bug514660.xul @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=514660 +--> +<window title="Mozilla Bug 504311" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="doTest()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=514660" + target="_blank">Mozilla Bug 514660</a> +<textarea></textarea> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); + +function doTest() +{ + var viewer = window + .QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIWebNavigation) + .QueryInterface(Components.interfaces.nsIDocShell) + .contentViewer; + viewer.authorStyleDisabled = true; + + document.documentElement.getBoundingClientRect(); + ok(true, "Didn't crash"); + + viewer.authorStyleDisabled = false; + + SimpleTest.finish(); +} +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_bug533845.xul b/layout/base/tests/chrome/test_bug533845.xul new file mode 100644 index 000000000..2cee7af05 --- /dev/null +++ b/layout/base/tests/chrome/test_bug533845.xul @@ -0,0 +1,44 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=533845 +--> +<window title="Mozilla Bug 533845" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="doTest()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<panel id="panel" width="50" height="50" onpopupshown="continueTest()"> + <iframe type="content" id="contentFrame" src="data:text/html,<html><body onclick='document.body.textContent=1'>This is a panel!</body></html>" width="500" height="500"/> +</panel> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=533845" + target="_blank">Mozilla Bug 533845</a> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); + +function doTest() { + document.getElementById('panel').showPopup(); +} + +function continueTest() { + var ifrwindow = document.getElementById("contentFrame").contentWindow; + ifrwindow.focus(); + var utils = ifrwindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIDOMWindowUtils); + var rect = ifrwindow.document.body.getBoundingClientRect(); + var x = rect.left + (rect.width/2); + var y = rect.top + (rect.height/2); + utils.sendMouseEvent("mousedown", x, y, 0, 1, 0); + utils.sendMouseEvent("mouseup", x, y, 0, 1, 0); + is(ifrwindow.document.body.textContent, "1", "Should have got a click event!"); + SimpleTest.finish(); +} + +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_bug551434.html b/layout/base/tests/chrome/test_bug551434.html new file mode 100644 index 000000000..10691c53a --- /dev/null +++ b/layout/base/tests/chrome/test_bug551434.html @@ -0,0 +1,97 @@ +<html> +<head> + <title>Test for Bug 551434</title> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" /> +</head> +<body> +</div> +<pre id="test"> +<input id="i1" onkeydown="gKeyDown1++; $('i2').focus();" onkeypress="gKeyPress1++;" onkeyup="gKeyUp1++;"/> +<input id="i2" onkeydown="gKeyDown2++;" onkeypress="gKeyPress2++;" onkeyup="gKeyUp2++;"/> + +<input id="i3" onkeydown="gKeyDown3++; frames[0].document.getElementById('i4').focus();" + onkeypress="gKeyPress3++;" onkeyup="gKeyUp3++;"/> +<iframe id="iframe" src="http://example.org/chrome/layout/base/tests/chrome/bug551434_childframe.html"></iframe> + +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +var gKeyDown1 = 0, gKeyPress1 = 0, gKeyUp1 = 0; +var gKeyDown2 = 0, gKeyPress2 = 0, gKeyUp2 = 0; +var gKeyDown3 = 0, gKeyPress3 = 0, gKeyUp3 = 0; + +function runTest() +{ + $("i1").focus(); + + // key events should not be retargeted when the focus changes to an + // element in the same document. + synthesizeKey("a", { type: "keydown", code: "KeyA", keyCode: KeyboardEvent.DOM_VK_B }); + is(document.activeElement, $("i2"), "input 2 in focused"); + + synthesizeKey("a", { type: "keyup", code: "KeyA", keyCode: KeyboardEvent.DOM_VK_B }); + + is(gKeyDown1, 1, "keydown on input 1"); + is(gKeyPress1, 0, "keypress on input 1"); + is(gKeyUp1, 0, "keyup on input 1"); + is(gKeyDown2, 0, "keydown on input 2"); + is(gKeyPress2, 1, "keypress on input 2"); + is(gKeyUp2, 1, "keyup on input 2"); + + is($("i1").value, "", "input 1 value"); + is($("i2").value, "a", "input 2 value"); + + // key events should however be retargeted when the focus changes to an + // element in the a content document from a chrome document. + $("i3").focus(); + + var childWinObj = frames[0].wrappedJSObject; + + synthesizeKey("b", { code: "KeyB", keyCode: KeyboardEvent.DOM_VK_B }); + is(gKeyDown3, 1, "keydown on input 3"); + is(gKeyPress3, 1, "keypress on input 3"); + is(gKeyUp3, 1, "keyup on input 3"); + is(childWinObj.gKeyDownChild, 0, "keydown on input 4"); + is(childWinObj.gKeyPressChild, 0, "keypress on input 4"); + is(childWinObj.gKeyUpChild, 0, "keyup on input 4"); + + var i4 = frames[0].document.getElementById("i4"); + is($("i3").value, "b", "input 3 value"); + is(i4.value, "", "input 4 value"); + + is(document.activeElement, $("iframe"), "parent focus"); + is(frames[0].document.activeElement, i4, "child focus"); + + // key events should also be retargeted when the focus changes to an + // element in a chrome document from a content document. + i4.addEventListener("keydown", () => $("i3").focus(), false); + + synthesizeKey("c", { code: "KeyC", keyCode: KeyboardEvent.DOM_VK_C }); + + is(gKeyDown3, 1, "keydown on input 3"); + is(gKeyPress3, 1, "keypress on input 3"); + is(gKeyUp3, 1, "keyup on input 3"); + is(childWinObj.gKeyDownChild, 1, "keydown on input 4"); + is(childWinObj.gKeyPressChild, 1, "keypress on input 4"); + is(childWinObj.gKeyUpChild, 1, "keyup on input 4"); + + is($("i3").value, "b", "input 3 value"); + is(i4.value, "c", "input 4 value"); + + is(document.activeElement, $("i3"), "parent focus"); + + SimpleTest.finish(); +} + +SimpleTest.waitForFocus(runTest); + +</script> +</pre> +</body> +</html> + diff --git a/layout/base/tests/chrome/test_bug708062.html b/layout/base/tests/chrome/test_bug708062.html new file mode 100644 index 000000000..dcf4481ea --- /dev/null +++ b/layout/base/tests/chrome/test_bug708062.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=708062 +--> +<head> + <title>Test for Bug 708062</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body onload="doTest()"> + +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=708062">Mozilla Bug 708062</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<iframe id="f" style="width:100px;" + src="data:text/html,A<div id='d' style='position:fixed;width:170px;top:0;right:0;height:1px;background:yellow;'>"></iframe> +<pre id="test"> + +<script> +function isBoundingClientRect(e, r, msg) { + var BCR = e.getBoundingClientRect(); + is([BCR.left, BCR.top, BCR.right, BCR.bottom].join(','), r, msg); +} + +function doTest() { + var f = document.getElementById('f'); + + var navigator1 = f.contentWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation); + var docShell = navigator1.QueryInterface(Components.interfaces.nsIDocShell); + var docviewer = docShell.contentViewer; + + var d = f.contentDocument.getElementById('d'); + + isBoundingClientRect(d, "-70,0,100,1", "initial rect"); + docviewer.fullZoom = 2; + isBoundingClientRect(d, "-120,0,50,1", "after zooming in"); + docviewer.fullZoom = 1; + isBoundingClientRect(d, "-70,0,100,1", "after zooming back out"); + SimpleTest.finish(); +} +</script> +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_bug812817.xul b/layout/base/tests/chrome/test_bug812817.xul new file mode 100644 index 000000000..d9e1d59ed --- /dev/null +++ b/layout/base/tests/chrome/test_bug812817.xul @@ -0,0 +1,38 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=812817 +--> +<window title="Mozilla Bug 812817" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + onload="doTest()"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<panel id="panel" width="200" height="200" onpopupshown="continueTest()"> +</panel> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=812817" + target="_blank">Mozilla Bug 812817</a> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); + +var panel = document.getElementById('panel'); +function doTest() { + panel.openPopup(null, '', 500, 500, false, false, null); +} + +function continueTest() { + panel.style.background = "url(blue-32x32.png)"; + setTimeout(function() { + ok(true, "Didn't crash"); + SimpleTest.finish(); + }, 50); +} + +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_bug847890_paintFlashing.html b/layout/base/tests/chrome/test_bug847890_paintFlashing.html new file mode 100644 index 000000000..9653e48d9 --- /dev/null +++ b/layout/base/tests/chrome/test_bug847890_paintFlashing.html @@ -0,0 +1,31 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Tests for paint flashing</title> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/WindowSnapshot.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> + + <script type="application/javascript"> + SimpleTest.waitForExplicitFinish(); + function startTest() { + waitForAllPaintsFlushed(function () { + var before = snapshotWindow(window, false); + SpecialPowers.getDOMWindowUtils(window).paintFlashing = true; + document.body.innerHTML = "bar"; + waitForAllPaintsFlushed(function () { + document.body.innerHTML = "foo"; + waitForAllPaintsFlushed(function () { + var after = snapshotWindow(window, false); + ok(compareSnapshots(before, after, false)[0], "windows are different"); + SpecialPowers.getDOMWindowUtils(window).paintFlashing = false; + SimpleTest.finish(); + }); + }); + }); + } + </script> +</head> +<body onload="startTest()">foo</body> +</html> diff --git a/layout/base/tests/chrome/test_chrome_content_integration.xul b/layout/base/tests/chrome/test_chrome_content_integration.xul new file mode 100644 index 000000000..94878447a --- /dev/null +++ b/layout/base/tests/chrome/test_chrome_content_integration.xul @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" + src="chrome://mochikit/content/chrome-harness.js"></script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + </body> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + SimpleTest.waitForExplicitFinish(); + // Run the test in a separate window so that the test runs as a chrome + // window + var root = getRootDirectory(window.location.href); + window.open(root + "chrome_content_integration_window.xul", "chrome_content_integration", + "chrome,width=200,height=300"); + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/test_chrome_over_plugin.xul b/layout/base/tests/chrome/test_chrome_over_plugin.xul new file mode 100644 index 000000000..9d352bdfa --- /dev/null +++ b/layout/base/tests/chrome/test_chrome_over_plugin.xul @@ -0,0 +1,24 @@ +<?xml version="1.0"?>
+<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+ type="text/css"?>
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+ <!-- test results are displayed in the html:body -->
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ </body>
+
+ <!-- test code goes here -->
+ <script type="application/javascript">
+ <![CDATA[
+ SimpleTest.waitForExplicitFinish();
+ // Run the test in a separate window so that the test runs as a chrome
+ // window
+ SpecialPowers.setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
+ var w = window.open("chrome_over_plugin_window.xul", "chrome_over_plugin",
+ "chrome,width=200,height=300");
+ ]]>
+ </script>
+</window>
diff --git a/layout/base/tests/chrome/test_default_background.xul b/layout/base/tests/chrome/test_default_background.xul new file mode 100644 index 000000000..e278e58b6 --- /dev/null +++ b/layout/base/tests/chrome/test_default_background.xul @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + </body> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + SimpleTest.waitForExplicitFinish(); + // Run the test in a separate window so that the test runs as a chrome + // window + window.open("default_background_window.xul", "default_background", + "chrome,width=200,height=300"); + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/test_dialog_with_positioning.html b/layout/base/tests/chrome/test_dialog_with_positioning.html new file mode 100644 index 000000000..048197a42 --- /dev/null +++ b/layout/base/tests/chrome/test_dialog_with_positioning.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test positioning of fixed-pos/abs-pos elements in a XUL dialog</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body> +<pre id="test"> +<script type="application/javascript"> +SimpleTest.waitForExplicitFinish(); + +var root = getRootDirectory(window.location.href); +window.openDialog(root + "dialog_with_positioning_window.xul", "dialog_with_positioning", + "dialog,chrome"); +</script> +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_fixed_bg_scrolling_repaints.html b/layout/base/tests/chrome/test_fixed_bg_scrolling_repaints.html new file mode 100644 index 000000000..0cd9b9abb --- /dev/null +++ b/layout/base/tests/chrome/test_fixed_bg_scrolling_repaints.html @@ -0,0 +1,41 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test that we don't get unnecessary repaints with fixed backgrounds</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<!-- Need a timeout here to allow paint unsuppression before we start the test --> +<body onload="setTimeout(startTest,0)" style="background:url(blue-32x32.png) top left no-repeat fixed; background-size: 100px 2000px; overflow:hidden;"> +<div style="height: 2048px"></div> + +<pre id="test"> +<script type="application/javascript"> +SimpleTest.waitForExplicitFinish(); + +var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor). + getInterface(Components.interfaces.nsIDOMWindowUtils); + +function startTest() { + // Do a scroll to ensure we trigger activity heuristics. + document.documentElement.scrollTop = 1; + waitForAllPaintsFlushed(function () { + document.documentElement.scrollTop = 0; + waitForAllPaintsFlushed(function () { + // Clear paint state and scroll down + utils.checkAndClearPaintedState(document.documentElement); + document.documentElement.scrollTop = 100; + waitForAllPaintsFlushed(function () { + // Make sure nothing painted + var painted = utils.checkAndClearPaintedState(document.documentElement); + is(painted, false, "Fixed background should not have been painted when scrolled"); + SimpleTest.finish(); + }); + }); + }); +} +</script> +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul new file mode 100644 index 000000000..c3cce54e5 --- /dev/null +++ b/layout/base/tests/chrome/test_leaf_layers_partition_browser_window.xul @@ -0,0 +1,114 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + </body> + + <!-- test code goes here --> + <script type="application/javascript"> + <![CDATA[ + SimpleTest.waitForExplicitFinish(); + + var winLowerThanVista = navigator.platform.indexOf("Win") == 0; + if (winLowerThanVista) { + var version = Components.classes["@mozilla.org/system-info;1"] + .getService(Components.interfaces.nsIPropertyBag2) + .getProperty("version"); + winLowerThanVista = parseFloat(version) < 6.0; + } + + var tests = [{maximize: false}, {maximize: true}]; + var testIndex = 0; + var win; + + function testInfo() { + return tests[testIndex].maximize ? " (maximized)" : " (non-maximized)"; + } + + function doTest(evt) { + var initialCount = win.mozPaintCount; + + function nextStep() { + if (win.mozPaintCount == initialCount || win.isMozAfterPaintPending) { + SimpleTest.info("Waiting for mozPaintCount (= " + initialCount + ") to increase" + testInfo()); + // Do not use SimpleTest.executeSoon() here: give a little more time. + setTimeout(nextStep, 100); + return; + } + + isnot(win.mozPaintCount, initialCount, "mozPaintCount has increased" + testInfo()); + + function testLeafLayersPartitionWindow() { + var success = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor) + .getInterface(Components.interfaces.nsIDOMWindowUtils) + .leafLayersPartitionWindow(); + // "[leafLayersPartitionWindow()] Always returns true in non-DEBUG builds." + // To prevent random failures on Windows, try to run this again after a timeout. + if (!success && navigator.platform.indexOf("Win") >= 0) { + setTimeout(testLeafLayersPartitionWindow, 100); + return; + } + ok(success, + "Leaf layers should form a non-overlapping partition of the browser window" + testInfo() + + (success ? "" : ". [Set MOZ_DUMP_PAINT_LIST=1 env var to investigate.]")); + + win.close(); + ++testIndex; + nextTest(); + } + testLeafLayersPartitionWindow(); + } + + if (tests[testIndex].maximize) { + function resizeListener() { + win.removeEventListener("resize", resizeListener, true); + // We want a paint after resize. + initialCount = win.mozPaintCount; + SimpleTest.executeSoon(nextStep); + } + win.addEventListener("resize", resizeListener, true); + SimpleTest.info("Maximizing test " + testIndex + " window" + testInfo()); + Components.classes["@mozilla.org/appshell/window-mediator;1"] + .getService(Components.interfaces.nsIWindowMediator) + .getMostRecentWindow("navigator:browser") + .maximize(); + } else { + SimpleTest.executeSoon(nextStep); + } + } + + function nextTest() { + if (testIndex >= tests.length) { + SimpleTest.finish(); + return; + } + + if (winLowerThanVista && !tests[testIndex].maximize) { + ok(true, "Skipping non-maximized test " + testIndex + " on winLowerThanVista since the resizer causes overlapping layers"); + ++testIndex; + nextTest(); + return; + } + + window.focus(); + // Run the test in a separate window so we get a clean browser window. + win = window.open("data:text/html,<html style='overflow:scroll'>", + "", "scrollbars=yes,toolbar,menubar,width=500,height=500"); + setTimeout(setupWindow, 0); + } + + function setupWindow() { + win.addEventListener("load", doTest, false); + win.focus(); + } + + nextTest(); + ]]> + </script> +</window> diff --git a/layout/base/tests/chrome/test_no_clip_iframe.xul b/layout/base/tests/chrome/test_no_clip_iframe.xul new file mode 100644 index 000000000..b8e74d8ea --- /dev/null +++ b/layout/base/tests/chrome/test_no_clip_iframe.xul @@ -0,0 +1,23 @@ +<?xml version="1.0"?>
+<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+ type="text/css"?>
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+ <!-- test results are displayed in the html:body -->
+ <body xmlns="http://www.w3.org/1999/xhtml">
+ </body>
+
+ <!-- test code goes here -->
+ <script type="application/javascript">
+ <![CDATA[
+ SimpleTest.waitForExplicitFinish();
+ // Run the test in a separate window so that the test runs as a chrome
+ // window
+ window.open("no_clip_iframe_window.xul", "no_clip_iframe",
+ "chrome,width=200,height=400");
+ ]]>
+ </script>
+</window>
diff --git a/layout/base/tests/chrome/test_prerendered_transforms.html b/layout/base/tests/chrome/test_prerendered_transforms.html new file mode 100644 index 000000000..86893303a --- /dev/null +++ b/layout/base/tests/chrome/test_prerendered_transforms.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test that active transformed elements coming into view are prerendered so we don't have to redraw constantly</title>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script>
+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+</head>
+<body onload="startTest()">
+<div>
+<div id="t" style="position:absolute; left:0; top:500px; -moz-transform: translatex(-100px); width:200px; height:100px; background:yellow;">
+ <div style="text-align:right">Hello</div>
+ <div style="text-align:left">Kitty</div>
+</div>
+</div>
+<pre id="test">
+<script type="application/javascript">
+SimpleTest.waitForExplicitFinish();
+
+var t = document.getElementById("t");
+var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
+ getInterface(Components.interfaces.nsIDOMWindowUtils);
+
+function startTest() {
+ // Do a couple of transform changes to ensure we've triggered activity heuristics
+ waitForAllPaintsFlushed(function () {
+ t.style.MozTransform = "translatex(-75px)";
+ waitForAllPaintsFlushed(function () {
+ t.style.MozTransform = "translatex(-50px)";
+ waitForAllPaintsFlushed(function () {
+ // Clear paint state now and move again.
+ utils.checkAndClearPaintedState(t);
+ // Don't move to 0 since that might trigger some special case that turns off transforms.
+ t.style.MozTransform = "translatex(-1px)";
+ waitForAllPaintsFlushed(function () {
+ var painted = utils.checkAndClearPaintedState(t);
+ is(painted, false, "Transformed element should not have been painted");
+ SimpleTest.finish();
+ });
+ });
+ });
+ });
+}
+</script>
+</pre>
+</body>
+</html>
diff --git a/layout/base/tests/chrome/test_printpreview.xul b/layout/base/tests/chrome/test_printpreview.xul new file mode 100644 index 000000000..6a63791f2 --- /dev/null +++ b/layout/base/tests/chrome/test_printpreview.xul @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<body xmlns="http://www.w3.org/1999/xhtml"> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); +window.open("printpreview_helper.xul", "printpreview", "chrome,width=100,height=100"); +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_printpreview_bug396024.xul b/layout/base/tests/chrome/test_printpreview_bug396024.xul new file mode 100644 index 000000000..eb086d35a --- /dev/null +++ b/layout/base/tests/chrome/test_printpreview_bug396024.xul @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=396024 +--> +<window title="Mozilla Bug 369024" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=396024" + target="_blank">Mozilla Bug 396024</a> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); +window.open("printpreview_bug396024_helper.xul", "bug396024", "chrome,width=100,height=100"); +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_printpreview_bug482976.xul b/layout/base/tests/chrome/test_printpreview_bug482976.xul new file mode 100644 index 000000000..52918d5ba --- /dev/null +++ b/layout/base/tests/chrome/test_printpreview_bug482976.xul @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/css" href="chrome://global/skin"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" + type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=482976 +--> +<window title="Mozilla Bug 482976" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" + src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> +<body xmlns="http://www.w3.org/1999/xhtml"> +<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=482976" + target="_blank">Mozilla Bug 482976</a> +</body> + <!-- test code goes here --> +<script type="application/javascript"> +<![CDATA[ +SimpleTest.waitForExplicitFinish(); +window.open("printpreview_bug482976_helper.xul", "bug482976", "chrome,width=100,height=100"); +]]></script> +</window> diff --git a/layout/base/tests/chrome/test_scrolling_repaints.html b/layout/base/tests/chrome/test_scrolling_repaints.html new file mode 100644 index 000000000..ff62aa5db --- /dev/null +++ b/layout/base/tests/chrome/test_scrolling_repaints.html @@ -0,0 +1,49 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test that we don't get unnecessary repaints due to subpixel shifts</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<!-- Need a timeout here to allow paint unsuppression before we start the test --> +<body onload="setTimeout(startTest,0)"> +<div id="t" style="width:400px; height:100px; background:yellow; overflow:hidden"> + <div style="height:40px;"></div> + <div id="e" style="height:30px; background:lime"></div> + <div style="height:60.4px; background:pink"></div> +</div> +<pre id="test"> +<script type="application/javascript"> +SimpleTest.waitForExplicitFinish(); + +var t = document.getElementById("t"); +var e = document.getElementById("e"); +var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor). + getInterface(Components.interfaces.nsIDOMWindowUtils); + +function startTest() { + // Do a scroll to ensure we trigger activity heuristics. + waitForAllPaintsFlushed(function () { + t.scrollTop = 5; + // Scroll down as far as we can, to put our rendering layer at a subpixel offset within the layer + waitForAllPaintsFlushed(function () { + t.scrollTop = 1000; + waitForAllPaintsFlushed(function () { + // Clear paint state now and scroll again. + utils.checkAndClearPaintedState(e); + // scroll up a little bit. This should not cause anything to be repainted. + t.scrollTop = t.scrollTop - 10; + waitForAllPaintsFlushed(function () { + var painted = utils.checkAndClearPaintedState(e); + is(painted, false, "Fully-visible scrolled element should not have been painted"); + SimpleTest.finish(); + }); + }); + }); + }); +} +</script> +</pre> +</body> +</html> diff --git a/layout/base/tests/chrome/test_will_change.html b/layout/base/tests/chrome/test_will_change.html new file mode 100644 index 000000000..fb8122b0b --- /dev/null +++ b/layout/base/tests/chrome/test_will_change.html @@ -0,0 +1,99 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Tests for MozAfterPaint</title> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> + <style> + #checkOpacityRepaint { + will-change: opacity; + } + #checkTransformRepaint { + will-change: transform; + } + div { + width: 100px; + height: 100px; + background: radial-gradient(ellipse at center, #87e0fd 0%,#53cbf1 40%,#05abe0 100%); + } + </style> +</head> +<body> + <div id="checkRepaint"> + Check repaint without will-change + </div> + <div id="checkOpacityRepaint"> + Check repaint with will-change + </div> + <div id="checkTransformRepaint"> + Check repaint with will-change + </div> +</body> +<script> + +var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor). + getInterface(Components.interfaces.nsIDOMWindowUtils); + +var initialPaintCount = 0; + +function test_checkRepaint(next) { + var element = document.getElementById("checkRepaint"); + waitForAllPaintsFlushed(function () { + utils.checkAndClearPaintedState(element); + element.style.opacity = "0.5"; + waitForAllPaintsFlushed(function () { + var painted = utils.checkAndClearPaintedState(element); + // *** We check that this repaints because the test is relying + // on this property. If this is broken then this test wont + // be reliable check for will-change. + is(painted, true, "element should have been painted"); + next(); + }); + }); +} + +function test_checkOpacityRepaint(next) { + var element = document.getElementById("checkOpacityRepaint"); + waitForAllPaintsFlushed(function () { + utils.checkAndClearPaintedState(element); + element.style.opacity = "0.5"; + waitForAllPaintsFlushed(function () { + var painted = utils.checkAndClearPaintedState(element); + // BasicLayers' heuristics are so that even with will-change:opacity, + // we can still have repaints. + if (utils.layerManagerType != "Basic") { + is(painted, false, "will-change checkOpacityRepaint element should not have been painted"); + } + next(); + }); + }); +} + +function test_checkTransformRepaint(next) { + var element = document.getElementById("checkTransformRepaint"); + waitForAllPaintsFlushed(function () { + utils.checkAndClearPaintedState(element); + element.style.transform = "translateY(-5px)"; + waitForAllPaintsFlushed(function () { + var painted = utils.checkAndClearPaintedState(element); + // BasicLayers' heuristics are so that even with will-change:transform, + // we can still have repaints. + if (utils.layerManagerType != "Basic") { + is(painted, false, "will-change checkTransformRepaint element should not have been painted"); + } + next(); + }); + }); +} + +SimpleTest.waitForExplicitFinish(); +test_checkRepaint(function(){ + test_checkOpacityRepaint(function(){ + test_checkTransformRepaint(function(){ + SimpleTest.finish(); + }); + }); +}); + +</script> +</html> |