<!DOCTYPE HTML> <html> <head> <title>Test that we flush before painting</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body onload="doIteration()"> <p id="display"></p> <div id="content" style="display: none"> </div> <embed type="application/x-test" id="plugin" drawmode="solid" style="width:200px; height:200px;"></embed> <pre id="test"> <script type="application/javascript"> SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("This test deals with painting and invalidation. " + "Those are tricky to detect, so we have to poll here, which means that we have to rely on flaky timeouts. " + "This special case is safe because we're only polling for events."); var iterations = 0; var plugin = document.getElementById("plugin"); var lastPaintCount; var expectedWidth; var toggle = true; function invalidationLoop() { toggle = !toggle; var color = toggle ? "8F" : "00"; plugin.setColor("FFFFFF" + color); setTimeout(invalidationLoop, 20); } invalidationLoop(); function doIteration() { lastPaintCount = window.mozPaintCount; ok(true, "Beginning iteration " + iterations + ", last paint count: " + lastPaintCount); expectedWidth = 201 + iterations; plugin.style.width = expectedWidth + "px"; checkDone(); } function checkDone() { ok(true, "Check to see if we're done: " + window.mozPaintCount); if (window.mozPaintCount == lastPaintCount) { setTimeout(checkDone, 30); return; } var utils = SpecialPowers.getDOMWindowUtils(window); is(plugin.getWidthAtLastPaint(), utils.screenPixelsPerCSSPixel*expectedWidth, "Check that we set width before painting"); ++iterations; if (iterations < 100) { doIteration(); } else { SimpleTest.finish(); } } </script> </pre> </body> </html>