Bug 1413817 - Add a function to check detect whether have conformant Promise handling and set the flag to represent it. r?birtles
MozReview-Commit-ID: FbzaUBKQ47F
--- a/dom/animation/test/mozilla/file_restyles.html
+++ b/dom/animation/test/mozilla/file_restyles.html
@@ -106,28 +106,56 @@ function waitForPaintsAndFrame() {
}
var omtaEnabled = isOMTAEnabled();
var isAndroid = !!navigator.userAgent.includes("Android");
var isServo = isStyledByServo();
var offscreenThrottlingEnabled =
SpecialPowers.getBoolPref('dom.animations.offscreen-throttling');
+var hasConformantPromiseHandling;
function add_task_if_omta_enabled(test) {
if (!omtaEnabled) {
info(test.name + " is skipped because OMTA is disabled");
return;
}
add_task(test);
}
// We need to wait for all paints before running tests to avoid contaminations
// from styling of this document itself.
waitForAllPaints(() => {
+ // Drop this once we have the conformant Promise handling(bug 1193394).
+ add_task(async function check_conformant_promise_handling() {
+ var div = addDiv(null, { style: 'animation: background-color 100s' });
+
+ var timeAtAnimationStart;
+ var eventPromise = new Promise(resolve => {
+ div.addEventListener('animationstart', () => {
+ timeAtAnimationStart = document.timeline.currentTime;
+ resolve();
+ });
+ });
+
+ var animation = div.getAnimations()[0];
+
+ await eventPromise;
+ await waitForFrame();
+
+ // If we have the conformant Promise handling, |eventPromise| is fulfilled
+ // just after the 'animationstart' callback and Promise in waitForFrame()
+ // is also fulfilled right after requestAnimationFrame callback, so
+ // both happen on the same tick.
+ hasConformantPromiseHandling =
+ (document.timeline.currentTime == timeAtAnimationStart);
+
+ await ensureElementRemoval(div);
+ });
+
add_task(async function restyling_for_main_thread_animations() {
var div = addDiv(null, { style: 'animation: background-color 100s' });
var animation = div.getAnimations()[0];
await waitForPaintsAndFrame();
ok(!SpecialPowers.wrap(animation).isRunningOnCompositor);