Bug 1790368 - [devtools] Expose the nsIChannel in NetworkObserver's onNetworkEvent r=bomsy

We need to expose the nsIChannel in order to retrieve all the information needed by BiDi

Differential Revision: https://phabricator.services.mozilla.com/D164147
This commit is contained in:
Julian Descottes
2022-12-16 10:53:49 +00:00
parent 5b28ff1e4c
commit 37fd0fe97b
2 changed files with 32 additions and 6 deletions

View File

@@ -86,11 +86,13 @@ const HTTP_DOWNLOAD_ACTIVITIES = [
* This function will be called for every detected channel to decide if it
* should be monitored or not.
* @param {Function(NetworkEvent): owner} options.onNetworkEvent
* This method is invoked once for every new network request with a single
* "networkEvent" argument, which is an object created by
* NetworkUtils:createNetworkEvent, containing initial network request
* information as an argument.
* onNetworkEvent() must return an "owner" object which holds several add*()
* This method is invoked once for every new network request with two
* arguments:
* - {Object} networkEvent: object created by NetworkUtils:createNetworkEvent,
* containing initial network request information as an argument.
* - {nsIChannel} channel: the channel for which the request was detected
*
* `onNetworkEvent()` must return an "owner" object which holds several add*()
* methods which are used to add further network request/response information.
*/
export class NetworkObserver {
@@ -722,7 +724,7 @@ export class NetworkObserver {
httpActivity.isXHR = event.isXHR;
httpActivity.private = event.private;
httpActivity.fromServiceWorker = fromServiceWorker;
httpActivity.owner = this.#onNetworkEvent(event);
httpActivity.owner = this.#onNetworkEvent(event, channel);
// Bug 1489217 - Avoid watching for response content for blocked or in-progress requests
// as it can't be observed and would throw if we try.

View File

@@ -46,3 +46,27 @@ add_task(async function testMultipleRequests() {
"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.sendRequest(_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");
});