diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_jsterm_block_command.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_jsterm_block_command.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_jsterm_block_command.js b/devtools/client/webconsole/test/browser/browser_jsterm_block_command.js new file mode 100644 index 0000000000..c774f9ae6e --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_jsterm_block_command.js @@ -0,0 +1,103 @@ +"use strict"; + +const TEST_URI = + "https://example.com/browser/devtools/client/webconsole/" + + "test/browser/test-block-action.html"; +const TIMEOUT = "TIMEOUT"; + +add_task(async function () { + const hud = await openNewTabAndConsole(TEST_URI); + + ok(hud, "web console opened"); + + const filter = "test-block-action-style.css"; + const blockCommand = `:block ${filter}`; + const unblockCommand = `:unblock ${filter}`; + + info("Before blocking"); + await tryFetching(); + const resp1 = await waitFor(() => findConsoleAPIMessage(hud, "successful")); + ok(resp1, "the request was not blocked"); + info(`Execute the :block command and try to do execute a network request`); + await executeAndWaitForMessageByType( + hud, + blockCommand, + "are now blocked", + ".console-api" + ); + await tryFetching(); + + const resp2 = await waitFor(() => findConsoleAPIMessage(hud, "blocked")); + ok(resp2, "the request was blocked as expected"); + + info("Open netmonitor check the blocked filter is registered in its state"); + const { panelWin } = await openNetMonitor(); + const nmStore = panelWin.store; + nmStore.dispatch(panelWin.actions.toggleRequestBlockingPanel()); + //await waitForTime(1e7); + // wait until the blockedUrls property is populated + await waitFor(() => !!nmStore.getState().requestBlocking.blockedUrls.length); + const netMonitorState1 = nmStore.getState(); + is( + netMonitorState1.requestBlocking.blockedUrls[0].url, + filter, + "blocked request shows up in netmonitor state" + ); + + info("Switch back to the console"); + await hud.toolbox.selectTool("webconsole"); + + // :unblock + await executeAndWaitForMessageByType( + hud, + unblockCommand, + "Removed blocking", + ".console-api" + ); + info("After unblocking"); + + const netMonitorState2 = nmStore.getState(); + is( + netMonitorState2.requestBlocking.blockedUrls.length, + 0, + "unblocked request should not be in netmonitor state" + ); + + await tryFetching(); + + const resp3 = await waitFor(() => findConsoleAPIMessage(hud, "successful")); + ok(resp3, "the request was not blocked"); +}); + +async function tryFetching() { + await SpecialPowers.spawn( + gBrowser.selectedBrowser, + [TIMEOUT], + async function (timeoutStr) { + const win = content.wrappedJSObject; + const FETCH_URI = + "https://example.com/browser/devtools/client/webconsole/" + + "test/browser/test-block-action-style.css"; + const timeout = new Promise(res => + win.setTimeout(() => res(timeoutStr), 1000) + ); + const fetchPromise = win.fetch(FETCH_URI); + + try { + const resp = await Promise.race([fetchPromise, timeout]); + if (typeof resp === "object") { + // Request Promise + win.console.log("the request was successful"); + } else if (resp === timeoutStr) { + // Timeout + win.console.log("the request was blocked"); + } else { + win.console.error("Unkown response"); + } + } catch { + // NetworkError + win.console.log("the request was blocked"); + } + } + ); +} |