tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_test_animations_without_apz_sampler.js (3954B)


      1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set sts=2 sw=2 et tw=80: */
      3 "use strict";
      4 
      5 Services.scriptloader.loadSubScript(
      6  "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head.js",
      7  this
      8 );
      9 Services.scriptloader.loadSubScript(
     10  "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head_browserAction.js",
     11  this
     12 );
     13 
     14 add_task(async () => {
     15  let extension = ExtensionTestUtils.loadExtension({
     16    manifest: {
     17      browser_action: {
     18        default_popup: "popup.html",
     19        browser_style: true,
     20      },
     21    },
     22 
     23    files: {
     24      "popup.html": `
     25        <html>
     26          <head>
     27            <meta charset="utf-8">
     28            <style>
     29              #target {
     30                width: 100px;
     31                height: 50px;
     32                background: green;
     33              }
     34              #target2 {
     35                width: 100px;
     36                height: 50px;
     37                background: green;
     38              }
     39            </style>
     40          </head>
     41          <body>
     42            <div id="target"></div>
     43            <div id="target2"></div>
     44          </body>
     45        </html>`,
     46    },
     47  });
     48 
     49  await extension.startup();
     50 
     51  async function takeSnapshot(browserWin, callback) {
     52    let browser = await openBrowserActionPanel(extension, browserWin, true);
     53 
     54    if (callback) {
     55      await SpecialPowers.spawn(browser, [], callback);
     56    }
     57 
     58    // Ensure there's no pending paint requests.
     59    // The below code is a simplified version of promiseAllPaintsDone in
     60    // paint_listener.js.
     61    await SpecialPowers.spawn(browser, [], async () => {
     62      return new Promise(resolve => {
     63        function waitForPaints() {
     64          // Wait until paint suppression has ended
     65          if (SpecialPowers.DOMWindowUtils.paintingSuppressed) {
     66            dump`waiting for paint suppression to end...`;
     67            content.window.setTimeout(waitForPaints, 0);
     68            return;
     69          }
     70 
     71          if (SpecialPowers.DOMWindowUtils.isMozAfterPaintPending) {
     72            dump`waiting for paint...`;
     73            content.window.addEventListener("MozAfterPaint", waitForPaints, {
     74              once: true,
     75            });
     76            return;
     77          }
     78          resolve();
     79        }
     80        waitForPaints();
     81      });
     82    });
     83 
     84    const snapshot = await SpecialPowers.spawn(browser, [], async () => {
     85      return SpecialPowers.snapshotWindowWithOptions(
     86        content.window,
     87        undefined /* use the default rect */,
     88        undefined /* use the default bgcolor */,
     89        { DRAWWINDOW_DRAW_VIEW: true } /* to capture scrollbars */
     90      )
     91        .toDataURL()
     92        .toString();
     93    });
     94 
     95    const popup = getBrowserActionPopup(extension, browserWin);
     96    await closeBrowserAction(extension, browserWin);
     97    is(popup.state, "closed", "browserAction popup has been closed");
     98 
     99    return snapshot;
    100  }
    101 
    102  // Test without apz sampler.
    103  await SpecialPowers.pushPrefEnv({ set: [["apz.popups.enabled", false]] });
    104 
    105  // Reference
    106  const newWin = await BrowserTestUtils.openNewBrowserWindow();
    107  const reference = await takeSnapshot(newWin);
    108  await BrowserTestUtils.closeWindow(newWin);
    109 
    110  // Test target
    111  const testWin = await BrowserTestUtils.openNewBrowserWindow();
    112  const result = await takeSnapshot(testWin, async () => {
    113    let div = content.window.document.getElementById("target");
    114    const anim = div.animate({ opacity: [1, 0.5] }, 10);
    115    await anim.finished;
    116    const anim2 = div.animate(
    117      { transform: ["translateX(10px)", "translateX(20px)"] },
    118      10
    119    );
    120    await anim2.finished;
    121 
    122    let div2 = content.window.document.getElementById("target2");
    123    const anim3 = div2.animate(
    124      { transform: ["translateX(10px)", "translateX(20px)"] },
    125      10
    126    );
    127    await anim3.finished;
    128  });
    129  await BrowserTestUtils.closeWindow(testWin);
    130 
    131  is(result, reference, "The omta property value should be reset");
    132 
    133  await extension.unload();
    134 });