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();
});
// Test that telemetry is recorded when LNA prompt is shown
// and not incremented for subsequent requests with cached permission
add_task(async function test_lna_prompt_telemetry() {
await restorePermissions();
// Reset telemetry
Services.fog.testResetFOG();
await SpecialPowers.pushPrefEnv({
set: [["network.lna.address_space.public.override", "127.0.0.1:4443"]],
});
const rand1 = Math.random();
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
`${LNA_BASE_URL}page_with_non_trackers.html?test=fetch&rand=${rand1}`
);
// Wait for the prompt to appear
await BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
// Verify telemetry was recorded
let metricValue =
await Glean.networking.localNetworkAccessPromptsShown.localhost.testGetValue();
is(
metricValue,
1,
"Should record telemetry when loopback-network prompt is shown"
);
// Grant permission
clickDoorhangerButton(
PROMPT_ALLOW_BUTTON,
gBrowser.selectedBrowser,
"loopback-network"
);
// Wait for permission to be saved
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(resolve => setTimeout(resolve, 300));
// Make a second request in the same tab with cached permission
const rand2 = Math.random();
const promise = observeAndCheck(
"fetch",
rand2,
Cr.NS_OK,
"Second request should succeed without prompt"
);
await SpecialPowers.spawn(tab.linkedBrowser, [rand2], async rand => {
await content.fetch(`http://localhost:21555/?type=fetch&rand=${rand}`);
});
await promise;
// Verify telemetry was not incremented
metricValue =
await Glean.networking.localNetworkAccessPromptsShown.localhost.testGetValue();
is(
metricValue,
1,
"Telemetry should not increment for requests with cached permission"
);
gBrowser.removeTab(tab);
await SpecialPowers.popPrefEnv();
});
// Test that telemetry is recorded when user denies LNA prompt
// and not incremented for subsequent requests with temporary deny permission
add_task(async function test_lna_prompt_telemetry_deny() {
await restorePermissions();
// Reset telemetry
Services.fog.testResetFOG();
await SpecialPowers.pushPrefEnv({
set: [["network.lna.address_space.public.override", "127.0.0.1:4443"]],
});
const rand1 = Math.random();
const promise1 = observeAndCheck(
"fetch",
rand1,
Cr.NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED,
"First request should be denied"
);
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
`${LNA_BASE_URL}page_with_non_trackers.html?test=fetch&rand=${rand1}`
);
// Wait for the prompt to appear
await BrowserTestUtils.waitForEvent(PopupNotifications.panel, "popupshown");
// Verify telemetry was recorded
let metricValue =
await Glean.networking.localNetworkAccessPromptsShown.localhost.testGetValue();
is(
metricValue,
1,
"Should record telemetry when loopback-network prompt is shown"
);
// Deny permission
clickDoorhangerButton(
PROMPT_NOT_NOW_BUTTON,
gBrowser.selectedBrowser,
"loopback-network"
);
await promise1;
// Wait for permission to be saved
// eslint-disable-next-line mozilla/no-arbitrary-setTimeout
await new Promise(resolve => setTimeout(resolve, 300));
// Make a second request - should be auto-denied without showing prompt
// because a temporary deny permission was saved
const rand2 = Math.random();
const promise2 = observeAndCheck(
"fetch",
rand2,
Cr.NS_ERROR_LOCAL_NETWORK_ACCESS_DENIED,
"Second request should be auto-denied with temporary permission"
);
await SpecialPowers.spawn(tab.linkedBrowser, [rand2], async rand => {
await content
.fetch(`http://localhost:21555/?type=fetch&rand=${rand}`)
.catch(() => {});
});
await promise2;
// Verify telemetry was not incremented (no prompt shown with temporary deny)
metricValue =
await Glean.networking.localNetworkAccessPromptsShown.localhost.testGetValue();
is(
metricValue,
1,
"Telemetry should not increment for requests with temporary deny permission"
);
gBrowser.removeTab(tab);
await SpecialPowers.popPrefEnv();
});