From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser_ext_addon_debugging_netmonitor.js | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_addon_debugging_netmonitor.js (limited to 'browser/components/extensions/test/browser/browser_ext_addon_debugging_netmonitor.js') diff --git a/browser/components/extensions/test/browser/browser_ext_addon_debugging_netmonitor.js b/browser/components/extensions/test/browser/browser_ext_addon_debugging_netmonitor.js new file mode 100644 index 0000000000..f436a19657 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_addon_debugging_netmonitor.js @@ -0,0 +1,116 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +const { require } = ChromeUtils.importESModule( + "resource://devtools/shared/loader/Loader.sys.mjs" +); + +const { gDevTools } = require("devtools/client/framework/devtools"); + +async function setupToolboxTest(extensionId) { + const toolbox = await gDevTools.showToolboxForWebExtension(extensionId); + + async function waitFor(condition) { + while (!condition()) { + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await new Promise(done => window.setTimeout(done, 1000)); + } + } + + const netmonitor = await toolbox.selectTool("netmonitor"); + + const expectedURL = "http://mochi.test:8888/?test_netmonitor=1"; + + // Call a function defined in the target extension to make it + // fetch from an expected http url. + await toolbox.commands.scriptCommand.execute( + `doFetchHTTPRequest("${expectedURL}");` + ); + + await waitFor(() => { + return !netmonitor.panelWin.document.querySelector( + ".request-list-empty-notice" + ); + }); + + let { store } = netmonitor.panelWin; + + // NOTE: we need to filter the requests to the ones that we expect until + // the network monitor is not yet filtering out the requests that are not + // coming from an extension window or a descendent of an extension window, + // in both oop and non-oop extension mode (filed as Bug 1442621). + function filterRequest(request) { + return request.url === expectedURL; + } + + let requests; + + await waitFor(() => { + requests = Array.from(store.getState().requests.requests.values()).filter( + filterRequest + ); + + return !!requests.length; + }); + + // Call a function defined in the target extension to make assertions + // on the network requests collected by the netmonitor panel. + await toolbox.commands.scriptCommand.execute( + `testNetworkRequestReceived(${JSON.stringify(requests)});` + ); + + await toolbox.destroy(); +} + +add_task(async function test_addon_debugging_netmonitor_panel() { + const EXTENSION_ID = "test-monitor-panel@mozilla"; + + function background() { + let expectedURL; + window.doFetchHTTPRequest = async function (urlToFetch) { + expectedURL = urlToFetch; + await fetch(urlToFetch); + }; + window.testNetworkRequestReceived = async function (requests) { + browser.test.log( + "Addon Debugging Netmonitor panel collected requests: " + + JSON.stringify(requests) + ); + browser.test.assertEq(1, requests.length, "Got one request logged"); + browser.test.assertEq("GET", requests[0].method, "Got a GET request"); + browser.test.assertEq( + expectedURL, + requests[0].url, + "Got the expected request url" + ); + + browser.test.notifyPass("netmonitor_request_logged"); + }; + browser.test.sendMessage("ready"); + } + + let extension = ExtensionTestUtils.loadExtension({ + background, + useAddonManager: "temporary", + manifest: { + permissions: ["http://mochi.test/"], + browser_specific_settings: { + gecko: { id: EXTENSION_ID }, + }, + }, + }); + + await extension.startup(); + await extension.awaitMessage("ready"); + + const onToolboxClose = setupToolboxTest(EXTENSION_ID); + await Promise.all([ + extension.awaitFinish("netmonitor_request_logged"), + onToolboxClose, + ]); + + info("Addon Toolbox closed"); + + await extension.unload(); +}); -- cgit v1.2.3