<!DOCTYPE HTML> <html> <head> <title>Tests for MozAfterPaint</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript" src="plugin-utils.js"></script> <script type="application/javascript"> setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED); </script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"> <embed type="application/x-test" width="100" height="100" id="p" drawmode="solid" color="FF00FF00"></embed> </p> <div id="content" style="display: none"> </div> <pre id="test"> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("untriaged"); var initialPaintCount, afterPaintCount; var color = 0; function onAfterPaint () { afterPaintCount += 1; } function startTest() { setTimeout(function () { afterPaintCount = 0; initialPaintCount = window.mozPaintCount; window.addEventListener("MozAfterPaint", onAfterPaint, true); doBackgroundFlicker(); }, 500); } document.addEventListener("DOMContentLoaded", startTest, true); // Unfortunately we cannot reliably assert that mozPaintCount and afterPaintCount increment perfectly // in sync, because they can diverge in the presence of OS-triggered paints or system load. // Instead, wait for a minimum number of afterPaint events to at least ensure that they are being fired. const minimumAfterPaintsToPass = 10; function doPluginFlicker() { ok(true, "Plugin color iteration " + color + ", afterpaint count: " + afterPaintCount + ", mozpaint count: " + window.mozPaintCount); if (afterPaintCount >= minimumAfterPaintsToPass) { ok(true, "afterPaintCount incremented enough from plugin color changes."); SimpleTest.finish(); return; } color = (color + 1) % 256; var str = color.toString(16); if (str.length < 2) { str = "0" + str; } str = "FF" + str + str + str; document.getElementById("p").setColor(str); setTimeout(doPluginFlicker, 0); } function doBackgroundFlicker() { ok(true, "Background color iteration " + color + ", afterpaint count: " + afterPaintCount + ", mozpaint count: " + window.mozPaintCount); if (afterPaintCount >= minimumAfterPaintsToPass) { ok(true, "afterPaintCount incremented enough from background color changes."); afterPaintCount = 0; initialPaintCount = window.mozPaintCount; doPluginFlicker(); return; } color = (color + 1) % 256; document.body.style.backgroundColor = "rgb(" + color + "," + color + "," + color + ")"; setTimeout(doBackgroundFlicker, 0); } </script> </pre> <div style="height:4000px"></div> <a id="first" href="http://www.mozilla.org/">first<br>link</a> <a id="second" href="http://www.mozilla.org/">second link</a> <a id="third" href="http://www.mozilla.org/">third<br>link</a> <div style="height:4000px"></div> </body> </html>