tor-browser

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

test_remote_settings_utils_telemetry.js (2438B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const { TelemetryController } = ChromeUtils.importESModule(
      7  "resource://gre/modules/TelemetryController.sys.mjs"
      8 );
      9 
     10 const server = new HttpServer();
     11 server.start(-1);
     12 registerCleanupFunction(() => server.stop(() => {}));
     13 const SERVER_BASE_URL = `http://localhost:${server.identity.primaryPort}`;
     14 
     15 const proxyServer = new HttpServer();
     16 proxyServer.start(-1);
     17 const PROXY_PORT = proxyServer.identity.primaryPort;
     18 proxyServer.stop();
     19 
     20 server.registerPathHandler("/destination", (request, response) => {
     21  response.setStatusLine(null, 412);
     22 });
     23 
     24 async function assertTelemetryEvents(expectedEvents) {
     25  await TelemetryTestUtils.assertEvents(expectedEvents, {
     26    category: "service_request",
     27    method: "bypass",
     28  });
     29 }
     30 
     31 add_setup(async () => {
     32  await TelemetryController.testSetup();
     33 });
     34 
     35 add_task(async function test_telemetry() {
     36  const DESTINATION_URL = `${SERVER_BASE_URL}/destination`;
     37 
     38  {
     39    let res = await Utils.fetch(DESTINATION_URL);
     40    Assert.equal(res.status, 412, "fetch without proxy succeeded");
     41  }
     42  await assertTelemetryEvents([]);
     43 
     44  Services.prefs.setIntPref("network.proxy.type", 1);
     45  Services.prefs.setStringPref("network.proxy.http", "127.0.0.1");
     46  Services.prefs.setIntPref("network.proxy.http_port", PROXY_PORT);
     47  Services.prefs.setBoolPref("network.proxy.allow_hijacking_localhost", true);
     48 
     49  {
     50    let res = await Utils.fetch(DESTINATION_URL);
     51    Assert.equal(res.status, 412, "fetch with broken proxy succeeded");
     52  }
     53  // Note: failover handled by HttpChannel, hence no failover here.
     54  await assertTelemetryEvents([]);
     55 
     56  // Disable HttpChannel failover in favor of Utils.fetch's implementation.
     57  Services.prefs.setBoolPref("network.proxy.failover_direct", false);
     58  {
     59    let res = await Utils.fetch(DESTINATION_URL);
     60    Assert.equal(res.status, 412, "fetch succeeded with bypassProxy feature");
     61  }
     62  await assertTelemetryEvents([
     63    {
     64      category: "service_request",
     65      method: "bypass",
     66      object: "proxy_info",
     67      value: "remote-settings",
     68      extra: {
     69        source: "prefs",
     70        type: "manual",
     71      },
     72    },
     73  ]);
     74 
     75  Services.prefs.setBoolPref("network.proxy.allow_bypass", false);
     76  await Assert.rejects(
     77    Utils.fetch(DESTINATION_URL),
     78    /NetworkError/,
     79    "Request without failover fails"
     80  );
     81  await assertTelemetryEvents([]);
     82 });