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 });