commit f1f744222035cb8d47f4ae732a33612cd6055693
parent dd61404c06992e657fe4ff23f52648407081bdae
Author: smayya <smayya@mozilla.com>
Date: Mon, 15 Dec 2025 05:47:14 +0000
Bug 2002810 - add test to verify LNA prompt timeout. r=necko-reviewers,valentin
Differential Revision: https://phabricator.services.mozilla.com/D274582
Diffstat:
1 file changed, 66 insertions(+), 0 deletions(-)
diff --git a/netwerk/test/browser/browser_test_local_network_access.js b/netwerk/test/browser/browser_test_local_network_access.js
@@ -537,3 +537,69 @@ add_task(async function test_lna_websocket_preference() {
await SpecialPowers.popPrefEnv();
});
+
+add_task(async function test_lna_prompt_timeout() {
+ info("Testing LNA permission prompt timeout");
+
+ // Set up a short timeout for testing (1 second instead of 5 minutes)
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["network.lna.address_space.public.override", "127.0.0.1:4443"],
+ ["network.lna.prompt.timeout", 1000], // 1 second timeout for testing
+ ],
+ });
+
+ try {
+ const testType = "fetch";
+ const rand = Math.random();
+
+ info("Triggering LNA prompt that will timeout");
+
+ // Set up observer to verify request fails with LNA denied status
+ const promise = observeAndCheck(
+ testType,
+ rand,
+ Cr.NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED,
+ "LNA request should fail after prompt timeout"
+ );
+
+ // Open tab that will trigger LNA prompt
+ const tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ `${baseURL}page_with_non_trackers.html?test=${testType}&rand=${rand}`
+ );
+
+ // Wait for LNA permission prompt to appear
+ await BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
+ info("LNA permission prompt appeared");
+
+ // Verify prompt is visible
+ let popup = PopupNotifications.getNotification(
+ "localhost",
+ tab.linkedBrowser
+ );
+ ok(popup, "LNA permission prompt should be visible");
+
+ // Do NOT click any button - let it timeout
+ info("Waiting for prompt to timeout (1 second)...");
+
+ // Wait for timeout + a small buffer to ensure timeout has fired
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ await new Promise(resolve => setTimeout(resolve, 1500));
+
+ // Verify prompt has been dismissed
+ popup = PopupNotifications.getNotification("localhost", tab.linkedBrowser);
+ ok(!popup, "LNA permission prompt should be dismissed after timeout");
+
+ // Wait for the network request to complete with denial status
+ await promise;
+
+ gBrowser.removeTab(tab);
+
+ info("LNA prompt timeout test completed successfully");
+ } catch (error) {
+ ok(false, `LNA prompt timeout test failed: ${error.message}`);
+ }
+
+ await SpecialPowers.popPrefEnv();
+});