tor-browser

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

test_notification_serviceworker_openWindow_nested.html (3548B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=1172870
      5 -->
      6 <head>
      7  <title>Bug 1172870 - Test clients.openWindow</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <script type="text/javascript" src="/tests/dom/notification/test/mochitest/MockAlertsService.js"></script>
     10  <script type="text/javascript" src="/tests/dom/notification/test/mochitest/NotificationTest.js"></script>
     11  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     12 </head>
     13 <body>
     14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1172870">Bug 1172870</a>
     15 <p id="display"></p>
     16 <div id="content" style="display: none">
     17 </div>
     18 <pre id="test">
     19 </pre>
     20 <script src="/tests/dom/serviceworkers/test/utils.js"></script>
     21 <script type="text/javascript">
     22  SimpleTest.requestFlakyTimeout("Mock alert service dispatches show and click events.");
     23 
     24  async function setup(ctx) {
     25    await MockAlertsService.register();
     26    await MockAlertsService.enableAutoClick();
     27 
     28    const swr = await navigator.serviceWorker.register("openWindow.serviceworker.js", {scope: "./"});
     29    ok(swr, "Registration successful");
     30    ctx.registration = swr;
     31    return await waitForState(swr.installing, 'activated', ctx);
     32  }
     33 
     34  function setupMessageHandler(ctx) {
     35    return new Promise(res => {
     36      navigator.serviceWorker.onmessage = function(event) {
     37        navigator.serviceWorker.onmessage = null;
     38        for (const data of event.data) {
     39          ok(data.result, data.message);
     40        }
     41        res(ctx);
     42      }
     43    });
     44  }
     45 
     46  function testPopupNotAllowed(ctx) {
     47    var p = setupMessageHandler(ctx);
     48    ok(ctx.registration.active, "Worker is active.");
     49    ctx.registration.active.postMessage("testNoPopup");
     50 
     51    return p;
     52  }
     53 
     54  function testPopupAllowed(ctx) {
     55    var p = setupMessageHandler(ctx);
     56    ctx.registration.showNotification("testPopup");
     57 
     58    return p;
     59  }
     60 
     61  function checkNumberOfWindows(ctx) {
     62    return new Promise(res => {
     63      navigator.serviceWorker.onmessage = function(event) {
     64        navigator.serviceWorker.onmessage = null;
     65        for (const data of event.data) {
     66          ok(data.result, data.message);
     67        }
     68        res(ctx);
     69      }
     70      ctx.registration.active.postMessage("CHECK_NUMBER_OF_WINDOWS");
     71    });
     72  }
     73 
     74  async function clear(ctx) {
     75    const result = await ctx.registration.unregister();
     76    ctx.registration = null;
     77    ok(result, "Unregister was successful.");
     78  }
     79 
     80  async function runTest() {
     81    try {
     82      const ctx = await setup({});
     83      // Permission to allow popups persists for some time after a notification
     84      // click event, so the order here is important.
     85      await NotificationTest.allowNotifications();
     86      await testPopupNotAllowed(ctx);
     87      await testPopupAllowed(ctx);
     88      await checkNumberOfWindows(ctx);
     89      await clear(ctx);
     90    } catch (e) {
     91      ok(false, "Some test failed with error " + e);
     92    } finally {
     93      SimpleTest.finish();
     94    }
     95  }
     96 
     97  SimpleTest.waitForExplicitFinish();
     98  SpecialPowers.pushPrefEnv({"set": [
     99    ["dom.serviceWorkers.exemptFromPerDomainMax", true],
    100    ["dom.serviceWorkers.enabled", true],
    101    ["dom.serviceWorkers.testing.enabled", true],
    102    ["dom.webnotifications.disable_open_click_delay", 1000],
    103    ["dom.serviceWorkers.idle_timeout", 299999],
    104    ["dom.serviceWorkers.idle_extended_timeout", 299999],
    105    ["dom.securecontext.allowlist", "mochi.test,example.com"],
    106    ["network.cookie.cookieBehavior", 0], // XXX: Doesn't work with dFPI
    107  ]}, runTest);
    108 </script>
    109 </body>
    110 </html>