summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js')
-rw-r--r--gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js134
1 files changed, 134 insertions, 0 deletions
diff --git a/gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js b/gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js
new file mode 100644
index 0000000000..8fdd20887a
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/browser_test_animations_without_apz_sampler.js
@@ -0,0 +1,134 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+Services.scriptloader.loadSubScript(
+ "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head.js",
+ this
+);
+Services.scriptloader.loadSubScript(
+ "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head_browserAction.js",
+ this
+);
+
+add_task(async () => {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_action: {
+ default_popup: "popup.html",
+ browser_style: true,
+ },
+ },
+
+ files: {
+ "popup.html": `
+ <html>
+ <head>
+ <meta charset="utf-8">
+ <style>
+ #target {
+ width: 100px;
+ height: 50px;
+ background: green;
+ }
+ #target2 {
+ width: 100px;
+ height: 50px;
+ background: green;
+ }
+ </style>
+ </head>
+ <body>
+ <div id="target"></div>
+ <div id="target2"></div>
+ </body>
+ </html>`,
+ },
+ });
+
+ await extension.startup();
+
+ async function takeSnapshot(browserWin, callback) {
+ let browser = await openBrowserActionPanel(extension, browserWin, true);
+
+ if (callback) {
+ await SpecialPowers.spawn(browser, [], callback);
+ }
+
+ // Ensure there's no pending paint requests.
+ // The below code is a simplified version of promiseAllPaintsDone in
+ // paint_listener.js.
+ await SpecialPowers.spawn(browser, [], async () => {
+ return new Promise(resolve => {
+ function waitForPaints() {
+ // Wait until paint suppression has ended
+ if (SpecialPowers.DOMWindowUtils.paintingSuppressed) {
+ dump`waiting for paint suppression to end...`;
+ content.window.setTimeout(waitForPaints, 0);
+ return;
+ }
+
+ if (SpecialPowers.DOMWindowUtils.isMozAfterPaintPending) {
+ dump`waiting for paint...`;
+ content.window.addEventListener("MozAfterPaint", waitForPaints, {
+ once: true,
+ });
+ return;
+ }
+ resolve();
+ }
+ waitForPaints();
+ });
+ });
+
+ const snapshot = await SpecialPowers.spawn(browser, [], async () => {
+ return SpecialPowers.snapshotWindowWithOptions(
+ content.window,
+ undefined /* use the default rect */,
+ undefined /* use the default bgcolor */,
+ { DRAWWINDOW_DRAW_VIEW: true } /* to capture scrollbars */
+ )
+ .toDataURL()
+ .toString();
+ });
+
+ const popup = getBrowserActionPopup(extension, browserWin);
+ await closeBrowserAction(extension, browserWin);
+ is(popup.state, "closed", "browserAction popup has been closed");
+
+ return snapshot;
+ }
+
+ // Test without apz sampler.
+ await SpecialPowers.pushPrefEnv({ set: [["apz.popups.enabled", false]] });
+
+ // Reference
+ const newWin = await BrowserTestUtils.openNewBrowserWindow();
+ const reference = await takeSnapshot(newWin);
+ await BrowserTestUtils.closeWindow(newWin);
+
+ // Test target
+ const testWin = await BrowserTestUtils.openNewBrowserWindow();
+ const result = await takeSnapshot(testWin, async () => {
+ let div = content.window.document.getElementById("target");
+ const anim = div.animate({ opacity: [1, 0.5] }, 10);
+ await anim.finished;
+ const anim2 = div.animate(
+ { transform: ["translateX(10px)", "translateX(20px)"] },
+ 10
+ );
+ await anim2.finished;
+
+ let div2 = content.window.document.getElementById("target2");
+ const anim3 = div2.animate(
+ { transform: ["translateX(10px)", "translateX(20px)"] },
+ 10
+ );
+ await anim3.finished;
+ });
+ await BrowserTestUtils.closeWindow(testWin);
+
+ is(result, reference, "The omta property value should be reset");
+
+ await extension.unload();
+});