summaryrefslogtreecommitdiffstats
path: root/devtools/shared/network-observer/test/browser/browser_networkobserver.js
blob: 8f81ef6f865d832e761bd91ea45dde6e0718cbff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const TEST_URL = URL_ROOT + "doc_network-observer.html";
const REQUEST_URL =
  URL_ROOT + `sjs_network-observer-test-server.sjs?sts=200&fmt=html`;

// Check that the NetworkObserver can detect basic requests and calls the
// onNetworkEvent callback when expected.
add_task(async function testSingleRequest() {
  await addTab(TEST_URL);

  const onNetworkEvents = waitForNetworkEvents(REQUEST_URL, 1);
  await SpecialPowers.spawn(gBrowser.selectedBrowser, [REQUEST_URL], _url => {
    content.wrappedJSObject.fetch(_url);
  });

  const events = await onNetworkEvents;
  is(events.length, 1, "Received the expected number of network events");
});

add_task(async function testMultipleRequests() {
  await addTab(TEST_URL);
  const EXPECTED_REQUESTS_COUNT = 5;

  const onNetworkEvents = waitForNetworkEvents(
    REQUEST_URL,
    EXPECTED_REQUESTS_COUNT
  );
  await SpecialPowers.spawn(
    gBrowser.selectedBrowser,
    [REQUEST_URL, EXPECTED_REQUESTS_COUNT],
    (_url, _count) => {
      for (let i = 0; i < _count; i++) {
        content.wrappedJSObject.fetch(_url);
      }
    }
  );

  const events = await onNetworkEvents;
  is(
    events.length,
    EXPECTED_REQUESTS_COUNT,
    "Received the expected number of network events"
  );
});

add_task(async function testOnNetworkEventArguments() {
  await addTab(TEST_URL);

  const onNetworkEvent = new Promise(resolve => {
    const networkObserver = new NetworkObserver({
      ignoreChannelFunction: () => false,
      onNetworkEvent: (...args) => {
        resolve(args);
        return createNetworkEventOwner();
      },
    });
    registerCleanupFunction(() => networkObserver.destroy());
  });

  await SpecialPowers.spawn(gBrowser.selectedBrowser, [REQUEST_URL], _url => {
    content.wrappedJSObject.fetch(_url);
  });

  const args = await onNetworkEvent;
  is(args.length, 2, "Received two arguments");
  is(typeof args[0], "object", "First argument is an object");
  ok(args[1] instanceof Ci.nsIChannel, "Second argument is a channel");
});