Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '18.04' && processor == 'x86_64' && debug && http3 OR os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && debug && http3
- Manifest: devtools/client/netmonitor/test/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Test that top-level net monitor error boundary catches child errors.
*/
add_task(async function () {
await pushPref("devtools.netmonitor.persistlog", true);
const { monitor } = await initNetMonitor(SIMPLE_URL, {
requestCount: 1,
});
const { store, windowRequire, document } = monitor.panelWin;
const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
store.dispatch(Actions.batchEnable(false));
// Intentionally damage the store to cause a child component error
const state = store.getState();
// Do NOT nullify state.ui as it is used by the App.js component which is not
// wrapped in the AppErrorBoundary component.
// Do NOT nullify state.requests as it will just bypass rendering the requests
// list.
// requestBlocking should make the RequestListContent.js component throw when
// rendering the new request sent right after.
// In general, this test is very much linked to the specific implementation of
// the components and might break if said implementation changes.
state.requestBlocking = null;
await SpecialPowers.spawn(gBrowser.selectedBrowser, [SIMPLE_URL], url => {
content.fetch(url);
});
// Wait for the panel to fall back to the error UI
const errorPanel = await waitUntil(() =>
document.querySelector(".app-error-panel")
);
is(errorPanel, !undefined);
return teardown(monitor);
});