tor-browser

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

browser_networkobserver.js (2251B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const TEST_URL = URL_ROOT + "doc_network-observer.html";
      7 const REQUEST_URL =
      8  URL_ROOT + `sjs_network-observer-test-server.sjs?sts=200&fmt=html`;
      9 
     10 // Check that the NetworkObserver can detect basic requests and calls the
     11 // onNetworkEvent callback when expected.
     12 add_task(async function testSingleRequest() {
     13  await addTab(TEST_URL);
     14 
     15  const onNetworkEvents = waitForNetworkEvents(REQUEST_URL, 1);
     16  await SpecialPowers.spawn(
     17    gBrowser.selectedBrowser,
     18    [REQUEST_URL],
     19    async _url => {
     20      await content.wrappedJSObject.fetch(_url);
     21    }
     22  );
     23 
     24  const events = await onNetworkEvents;
     25  is(events.length, 1, "Received the expected number of network events");
     26 });
     27 
     28 add_task(async function testMultipleRequests() {
     29  await addTab(TEST_URL);
     30  const EXPECTED_REQUESTS_COUNT = 5;
     31 
     32  const onNetworkEvents = waitForNetworkEvents(
     33    REQUEST_URL,
     34    EXPECTED_REQUESTS_COUNT
     35  );
     36  await SpecialPowers.spawn(
     37    gBrowser.selectedBrowser,
     38    [REQUEST_URL, EXPECTED_REQUESTS_COUNT],
     39    async (_url, _count) => {
     40      const requests = [];
     41      for (let i = 0; i < _count; i++) {
     42        requests.push(content.wrappedJSObject.fetch(_url));
     43      }
     44      await Promise.all(requests);
     45    }
     46  );
     47 
     48  const events = await onNetworkEvents;
     49  is(
     50    events.length,
     51    EXPECTED_REQUESTS_COUNT,
     52    "Received the expected number of network events"
     53  );
     54 });
     55 
     56 add_task(async function testOnNetworkEventArguments() {
     57  await addTab(TEST_URL);
     58 
     59  const onNetworkEvent = new Promise(resolve => {
     60    const networkObserver = new NetworkObserver({
     61      ignoreChannelFunction: () => false,
     62      onNetworkEvent: (...args) => {
     63        resolve(args);
     64        return createNetworkEventOwner();
     65      },
     66    });
     67    registerCleanupFunction(() => networkObserver.destroy());
     68  });
     69 
     70  await SpecialPowers.spawn(gBrowser.selectedBrowser, [REQUEST_URL], _url => {
     71    content.wrappedJSObject.fetch(_url);
     72  });
     73 
     74  const args = await onNetworkEvent;
     75  is(args.length, 2, "Received two arguments");
     76  is(typeof args[0], "object", "First argument is an object");
     77  ok(args[1] instanceof Ci.nsIChannel, "Second argument is a channel");
     78 });