tor-browser

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

browser_aboutdebugging_serviceworker_not_compatible.js (4003B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // This test started running during a GC and timing out on coverage platforms.
      7 // See Bug 1526153.
      8 requestLongerTimeout(2);
      9 
     10 const TEST_DATA = [
     11  {
     12    serviceWorkersEnabled: true,
     13    privateBrowsingEnabled: false,
     14    expectedMessage: false,
     15  },
     16  {
     17    serviceWorkersEnabled: false,
     18    privateBrowsingEnabled: false,
     19    expectedMessage: true,
     20  },
     21  {
     22    serviceWorkersEnabled: true,
     23    privateBrowsingEnabled: true,
     24    expectedMessage: true,
     25  },
     26  {
     27    serviceWorkersEnabled: false,
     28    privateBrowsingEnabled: true,
     29    expectedMessage: true,
     30  },
     31 ];
     32 
     33 /**
     34 * Check that the warning message for service workers is displayed if permanent private
     35 * browsing is enabled or/and if service workers are disabled.
     36 */
     37 add_task(async function testLocalRuntime() {
     38  for (const testData of TEST_DATA) {
     39    const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } =
     40      testData;
     41 
     42    info(
     43      `Test warning message on this-firefox ` +
     44        `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` +
     45        `and with privateBrowsingEnabled: ${privateBrowsingEnabled}`
     46    );
     47 
     48    await pushPref("dom.serviceWorkers.enabled", serviceWorkersEnabled);
     49    await pushPref("browser.privatebrowsing.autostart", privateBrowsingEnabled);
     50 
     51    const { document, tab, window } = await openAboutDebugging({
     52      // Even though this is a service worker test, we are not adding/removing
     53      // workers here. Since the test is really fast it can create intermittent
     54      // failures due to pending requests to update the worker list
     55      // We are updating the worker list whenever the list of processes changes
     56      // and this can happen very frequently, and it's hard to control from
     57      // DevTools.
     58      // Set enableWorkerUpdates to false to avoid intermittent failures.
     59      enableWorkerUpdates: false,
     60    });
     61    await selectThisFirefoxPage(document, window.AboutDebugging.store);
     62    assertWarningMessage(document, expectedMessage);
     63    await removeTab(tab);
     64  }
     65 });
     66 
     67 add_task(async function testRemoteRuntime() {
     68  const {
     69    remoteClientManager,
     70  } = require("resource://devtools/client/shared/remote-debugging/remote-client-manager.js");
     71 
     72  // enable USB devices mocks
     73  const mocks = new Mocks();
     74  const client = mocks.createUSBRuntime("1337id", {
     75    deviceName: "Fancy Phone",
     76    name: "Lorem ipsum",
     77  });
     78 
     79  for (const testData of TEST_DATA) {
     80    const { serviceWorkersEnabled, privateBrowsingEnabled, expectedMessage } =
     81      testData;
     82 
     83    info(
     84      `Test warning message on mocked USB runtime ` +
     85        `with serviceWorkersEnabled: ${serviceWorkersEnabled} ` +
     86        `and with privateBrowsingEnabled: ${privateBrowsingEnabled}`
     87    );
     88 
     89    client.setPreference("dom.serviceWorkers.enabled", serviceWorkersEnabled);
     90    client.setPreference(
     91      "browser.privatebrowsing.autostart",
     92      privateBrowsingEnabled
     93    );
     94 
     95    const { document, tab, window } = await openAboutDebugging({
     96      enableWorkerUpdates: false,
     97    });
     98    await selectThisFirefoxPage(document, window.AboutDebugging.store);
     99 
    100    info("Checking a USB runtime");
    101    mocks.emitUSBUpdate();
    102    await connectToRuntime("Fancy Phone", document);
    103    await waitForRuntimePage("Lorem ipsum", document);
    104 
    105    assertWarningMessage(document, expectedMessage);
    106 
    107    // We remove all clients in order to be able to simply connect to the runtime at
    108    // every iteration of the loop without checking of the runtime is already connected.
    109    info("Remove all remote clients");
    110    await remoteClientManager.removeAllClients();
    111 
    112    await removeTab(tab);
    113  }
    114 });
    115 
    116 function assertWarningMessage(doc, expectedMessage) {
    117  const hasMessage = !!doc.querySelector(".qa-service-workers-warning");
    118  Assert.strictEqual(
    119    hasMessage,
    120    expectedMessage,
    121    expectedMessage
    122      ? "Warning message is displayed"
    123      : "Warning message is not displayed"
    124  );
    125 }