gecko-dev/dom/plugins/test/mochitest/test_painting.html
Ehsan Akhgari 09a262787c Bug 649012 - Fail mochitest-plains which use flaky timeouts (setTimeout(x) for x > 0); r=ted
We are white-listing the existing set of tests that use setTimeout
like this.  Hopefully these tests will be investigated and fixed
in the future, so that we can narrow down the white-list.

This check is only turned on for mochitest-plain for now.
2014-12-11 13:34:40 -05:00

122 lines
2.9 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test for windowless plugin invalidation and expose events in clips</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<style>
div#container {
position: relative;
height: 30px;
background: blue;
}
div#clip {
overflow:hidden;
position:absolute;
left: 10.3px;
top: 9.7px;
width: 10px;
height: 0px;
background: red;
}
embed {
position:absolute;
}
embed#paint-waiter {
top: 0px;
left: 0px;
width: 1px;
height: 0px;
}
embed#clipped {
left: -5.3px;
top: -4.7px;
width: 20px;
height: 20px;
}
</style>
</head>
<body onload="initialize()">
<script type="application/javascript" src="utils.js"></script>
<script type="application/javascript">
SimpleTest.waitForExplicitFinish();
SimpleTest.requestFlakyTimeout("untriaged");
setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED);
var paint_waiter;
var clip;
var clipped;
function initialize() {
paint_waiter = document.getElementById("paint-waiter");
clip = document.getElementById("clip");
clipped = document.getElementById("clipped");
waitForPaint(show);
}
function show() {
paintCountIs(clipped, 0, "fully clipped plugin not painted");
clip.style.height = "10px";
// Capturing an image (as in a reftest) would force a repaint and use
// different paths for the image surface, so instead check the plugin's
// paint count.
waitForPaint(invalidate);
}
function invalidate() {
paintCountIs(clipped, 1, "partially clipped plugin painted once");
clipped.setColor("FF00FF00"); // plugin invalidates
waitForPaint(done);
}
function done() {
paintCountIs(clipped, 2, "painted after invalidate");
SimpleTest.finish();
}
function waitForPaint(func) {
paint_waiter.last_paint_count = paint_waiter.getPaintCount();
// Ensure the waiter has had a style change, so that this will
// change its size and cause a paint.
paint_waiter.style.backgroundColor = paint_waiter.style.backgroundColor == "blue" ? "yellow" : "blue";
var flush = paint_waiter.offsetHeight;
paint_waiter.style.height = "1px";
waitForPaintHelper(func);
}
function waitForPaintHelper(func) {
if (paint_waiter.getPaintCount() != paint_waiter.last_paint_count) {
// hide the paint waiter
paint_waiter.style.height = "0px";
setTimeout(func, 0);
return;
}
setTimeout(function() { waitForPaintHelper(func); }, 1000);
}
</script>
<p id="display"></p>
<div id="container">
<embed id="paint-waiter" type="application/x-test"/>
<div id="clip">
<embed id="clipped" type="application/x-test"
drawmode="solid" color="FF808080"/>
</div>
</div>
<div id="content" style="display: none">
</div>
<pre id="test">
</pre>
</body>
</html>