Bug 1206858 - Ensure that multiple concurrent calls to waitForAllPaints are handled properly. r=mattwoodrow

This commit is contained in:
Kartikaya Gupta 2015-09-22 09:01:08 -04:00
parent c6a38c51fb
commit 6e3587499b

View File

@ -1,6 +1,6 @@
(function() { (function() {
var accumulatedRect = null; var accumulatedRect = null;
var onpaint = function() {}; var onpaint = new Array();
var debug = false; var debug = false;
const FlushModes = { const FlushModes = {
FLUSH: 0, FLUSH: 0,
@ -24,7 +24,9 @@
Math.max(accumulatedRect[2], eventRect[2]), Math.max(accumulatedRect[2], eventRect[2]),
Math.max(accumulatedRect[3], eventRect[3]) ] Math.max(accumulatedRect[3], eventRect[3]) ]
: eventRect; : eventRect;
onpaint(); while (onpaint.length > 0) {
window.setTimeout(onpaint.pop(), 0);
}
} }
window.addEventListener("MozAfterPaint", paintListener, false); window.addEventListener("MozAfterPaint", paintListener, false);
@ -35,7 +37,6 @@
if (debug) { if (debug) {
dump("waiting for paint suppression to end...\n"); dump("waiting for paint suppression to end...\n");
} }
onpaint = function() {};
window.setTimeout(function() { window.setTimeout(function() {
waitForPaints(callback, subdoc, flushMode); waitForPaints(callback, subdoc, flushMode);
}, 0); }, 0);
@ -56,8 +57,8 @@
if (debug) { if (debug) {
dump("waiting for paint...\n"); dump("waiting for paint...\n");
} }
onpaint = onpaint.push(
function() { waitForPaints(callback, subdoc, FlushModes.NOFLUSH); }; function() { waitForPaints(callback, subdoc, FlushModes.NOFLUSH); });
if (utils.isTestControllingRefreshes) { if (utils.isTestControllingRefreshes) {
utils.advanceTimeAndRefresh(0); utils.advanceTimeAndRefresh(0);
} }
@ -69,7 +70,6 @@
} }
var result = accumulatedRect || [ 0, 0, 0, 0 ]; var result = accumulatedRect || [ 0, 0, 0, 0 ];
accumulatedRect = null; accumulatedRect = null;
onpaint = function() {};
callback.apply(null, result); callback.apply(null, result);
} }