tor-browser

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

browser_necko_l10n.js (3240B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /* globals do_timeout */
      7 
      8 const { HttpServer } = ChromeUtils.importESModule(
      9  "resource://testing-common/httpd.sys.mjs"
     10 );
     11 
     12 const gOverride = Cc["@mozilla.org/network/native-dns-override;1"].getService(
     13  Ci.nsINativeDNSResolverOverride
     14 );
     15 
     16 const DOMAIN_NAME = "example.com";
     17 const HTTPS_FIRST = "dom.security.https_first";
     18 
     19 let statuspanelLabel = document.getElementById("statuspanel-label");
     20 
     21 registerCleanupFunction(function () {
     22  Services.prefs.clearUserPref(HTTPS_FIRST);
     23 });
     24 
     25 function waitForStatusChange(browser, expectedMessage) {
     26  return new Promise(resolve => {
     27    let listener = {
     28      QueryInterface: ChromeUtils.generateQI([
     29        "nsIWebProgressListener",
     30        "nsISupportsWeakReference",
     31      ]),
     32 
     33      onStatusChange(webProgress, request, status, message) {
     34        info(`onStatusChange: ${message}`);
     35        // When we catch the correct message
     36        if (message === expectedMessage) {
     37          browser.webProgress.removeProgressListener(listener);
     38          resolve({ message });
     39        }
     40      },
     41      onProgressChange() {},
     42      onLocationChange() {},
     43      onSecurityChange() {},
     44      onStateChange() {},
     45      onContentBlockingEvent() {},
     46    };
     47 
     48    browser.webProgress.addProgressListener(
     49      listener,
     50      Ci.nsIWebProgress.NOTIFY_STATUS
     51    );
     52  });
     53 }
     54 
     55 add_task(async function test_domain_change() {
     56  await SpecialPowers.pushPrefEnv({
     57    set: [
     58      ["test.wait300msAfterTabSwitch", true],
     59      [HTTPS_FIRST, false],
     60    ],
     61  });
     62 
     63  gOverride.addIPOverride(DOMAIN_NAME, "127.0.0.1");
     64  let server = new HttpServer();
     65  server.start(-1);
     66  registerCleanupFunction(async () => {
     67    await server.stop();
     68    gOverride.clearOverrides();
     69  });
     70 
     71  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
     72  let serverURL = `http://${DOMAIN_NAME}:${server.identity.primaryPort}/`;
     73  server.identity.add("http", DOMAIN_NAME, server.identity.primaryPort);
     74 
     75  server.registerPathHandler("/", (request, response) => {
     76    response.processAsync();
     77    do_timeout(1000, () => {
     78      response.setStatusLine(request.httpVersion, 200, "OK");
     79      response.setHeader("Content-Type", "text/html");
     80      const BODY = `testing..`;
     81      response.bodyOutputStream.write(BODY, BODY.length);
     82      response.finish();
     83    });
     84  });
     85 
     86  await SpecialPowers.pushPrefEnv({
     87    set: [["network.proxy.no_proxies_on", DOMAIN_NAME]],
     88  });
     89 
     90  let browser = gBrowser.selectedBrowser;
     91  let expectedMessage = `Waiting for ${DOMAIN_NAME}…`;
     92  let statusPromise = waitForStatusChange(browser, expectedMessage);
     93  BrowserTestUtils.startLoadingURIString(browser, serverURL);
     94  let { message } = await statusPromise;
     95  // There's a delay in the status label being updated, so by the time the
     96  // progress listener sees waiting for, the statuspanel is still on
     97  // looking up. This may be racy.
     98  ok(
     99    statuspanelLabel.value == `Looking up ${DOMAIN_NAME}…` ||
    100      statuspanelLabel.value == `Transferring data from ${DOMAIN_NAME}…`,
    101    `statuspanel has expected value. got ${statuspanelLabel.value}`
    102  );
    103  is(message, expectedMessage, "Status message was received correctly");
    104 });