tor-browser

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

browser_intercepted_worker_script.js (2686B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * This test tests if the service worker is able to intercept the script loading
      8 * channel of a dedicated worker.
      9 *
     10 * On success, the test will not crash.
     11 */
     12 
     13 const SAME_ORIGIN = "https://example.com";
     14 
     15 const SAME_ORIGIN_ROOT = getRootDirectory(gTestPath).replace(
     16  "chrome://mochitests/content",
     17  SAME_ORIGIN
     18 );
     19 
     20 const SW_REGISTER_URL = `${SAME_ORIGIN_ROOT}empty_with_utils.html`;
     21 const SW_SCRIPT_URL = `${SAME_ORIGIN_ROOT}simple_fetch_worker.js`;
     22 const SCRIPT_URL = `${SAME_ORIGIN_ROOT}empty.js`;
     23 
     24 async function navigateTab(aTab, aUrl) {
     25  BrowserTestUtils.startLoadingURIString(aTab.linkedBrowser, aUrl);
     26 
     27  await BrowserTestUtils.waitForLocationChange(gBrowser, aUrl).then(() =>
     28    BrowserTestUtils.browserStopped(aTab.linkedBrowser)
     29  );
     30 }
     31 
     32 async function runTest(aTestSharedWorker) {
     33  const tab = gBrowser.selectedTab;
     34 
     35  await navigateTab(tab, SW_REGISTER_URL);
     36 
     37  await SpecialPowers.spawn(
     38    tab.linkedBrowser,
     39    [SCRIPT_URL, aTestSharedWorker],
     40    async (scriptUrl, testSharedWorker) => {
     41      await new Promise(resolve => {
     42        content.navigator.serviceWorker.onmessage = e => {
     43          if (e.data == scriptUrl) {
     44            resolve();
     45          }
     46        };
     47 
     48        if (testSharedWorker) {
     49          let worker = new content.Worker(scriptUrl);
     50        } else {
     51          let worker = new content.SharedWorker(scriptUrl);
     52        }
     53      });
     54    }
     55  );
     56 
     57  ok(true, "The service worker has intercepted the script loading.");
     58 }
     59 
     60 add_task(async function setupPrefs() {
     61  await SpecialPowers.pushPrefEnv({
     62    set: [
     63      ["dom.serviceWorkers.enabled", true],
     64      ["dom.serviceWorkers.testing.enabled", true],
     65      [
     66        "network.cookie.cookieBehavior",
     67        Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER_AND_PARTITION_FOREIGN,
     68      ],
     69    ],
     70  });
     71 });
     72 
     73 add_task(async function setupBrowser() {
     74  // The tab will be used by subsequent test steps via 'gBrowser.selectedTab'.
     75  const tab = await BrowserTestUtils.openNewForegroundTab({
     76    gBrowser,
     77    opening: SW_REGISTER_URL,
     78  });
     79 
     80  registerCleanupFunction(async _ => {
     81    await navigateTab(tab, SW_REGISTER_URL);
     82 
     83    await SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
     84      await content.wrappedJSObject.unregisterAll();
     85    });
     86 
     87    BrowserTestUtils.removeTab(tab);
     88  });
     89 
     90  await SpecialPowers.spawn(
     91    tab.linkedBrowser,
     92    [SW_SCRIPT_URL],
     93    async scriptUrl => {
     94      await content.wrappedJSObject.registerAndWaitForActive(scriptUrl);
     95    }
     96  );
     97 });
     98 
     99 add_task(async function runTests() {
    100  await runTest(false);
    101  await runTest(true);
    102 });