Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: netwerk/test/browser/browser.toml
"use strict";
Services.scriptloader.loadSubScript(
new URL("head_local_network_access.js", gTestPath).href,
this
);
add_setup(async function () {
await setupLnaPrefs();
await setupLnaServer();
});
requestLongerTimeout(4);
add_task(async function test_lna_prompt_behavior() {
// Non-LNA test: no prompt expected
for (const test of testCases) {
const rand = Math.random();
await runSingleTestCase(
test,
rand,
test.allowStatus,
`Non-LNA test for ${test.type}`
);
}
// Public -> Local test (loopback-network permission)
Services.prefs.setCharPref(
"network.lna.address_space.public.override",
"127.0.0.1:4443"
);
for (const test of testCases) {
await runPromptedLnaTest(test, "public", "loopback-network");
}
// Public -> Private (local-network permission)
Services.prefs.setCharPref(
"network.lna.address_space.private.override",
"127.0.0.1:21555"
);
for (const test of testCases) {
await runPromptedLnaTest(test, "private", "local-network");
}
Services.prefs.clearUserPref("network.lna.address_space.public.override");
Services.prefs.clearUserPref("network.lna.address_space.private.override");
});
add_task(async function test_lna_cancellation_during_prompt() {
info("Testing LNA cancellation during permission prompt");
// Disable RCWN but enable caching for this test
await SpecialPowers.pushPrefEnv({
set: [
["network.http.rcwn.enabled", false],
["browser.cache.disk.enable", true],
["browser.cache.memory.enable", true],
["network.lna.address_space.public.override", "127.0.0.1:4443"],
],
});
const testType = "fetch";
const rand1 = Math.random();
// Test 1: Cancel request during LNA prompt and verify proper cleanup
info(
"Step 1: Making request that will trigger LNA prompt, then cancelling it"
);
// Open tab and wait for LNA prompt
const tab1 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
`${LNA_BASE_URL}page_with_non_trackers.html?test=${testType}&rand=${rand1}`
);
// Wait for the LNA permission prompt to appear
await BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
info("LNA permission prompt appeared");
gBrowser.removeTab(tab1);
// Navigate to a new URL (which should cancel the pending request)
const tab2 = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
`${LNA_BASE_URL}page_with_non_trackers.html?test=${testType}&rand=${rand1}`
);
info("Navigated to new URL, request should be cancelled");
// Wait for the navigation to complete
await BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
clickDoorhangerButton(
PROMPT_ALLOW_BUTTON,
gBrowser.selectedBrowser,
"loopback-network"
);
// Close the first tab now that we're done with it
gBrowser.removeTab(tab2);
// The main test objective is complete - we verified that cancellation
// during LNA prompt works without hanging channels. The navigation
// completed successfully, which means our fix is working correctly.
info(
"Test completed successfully - cancellation during LNA prompt handled correctly"
);
await SpecialPowers.popPrefEnv();
});