tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mnetwerk/test/browser/browser_test_local_network_access.js | 66++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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(); +});