From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/pageinfo/browser_pageinfo_permissions.js | 258 +++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 browser/base/content/test/pageinfo/browser_pageinfo_permissions.js (limited to 'browser/base/content/test/pageinfo/browser_pageinfo_permissions.js') diff --git a/browser/base/content/test/pageinfo/browser_pageinfo_permissions.js b/browser/base/content/test/pageinfo/browser_pageinfo_permissions.js new file mode 100644 index 0000000000..7e3e83b60d --- /dev/null +++ b/browser/base/content/test/pageinfo/browser_pageinfo_permissions.js @@ -0,0 +1,258 @@ +const { PermissionTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/PermissionTestUtils.sys.mjs" +); + +const TEST_ORIGIN = "https://example.com"; +const TEST_ORIGIN_CERT_ERROR = "https://expired.example.com"; +const LOW_TLS_VERSION = "https://tls1.example.com/"; + +async function testPermissions(defaultPermission) { + await BrowserTestUtils.withNewTab(TEST_ORIGIN, async function (browser) { + let pageInfo = BrowserPageInfo(TEST_ORIGIN, "permTab"); + await BrowserTestUtils.waitForEvent(pageInfo, "load"); + + let defaultCheckbox = await TestUtils.waitForCondition(() => + pageInfo.document.getElementById("geoDef") + ); + let radioGroup = pageInfo.document.getElementById("geoRadioGroup"); + let defaultRadioButton = pageInfo.document.getElementById( + "geo#" + defaultPermission + ); + let blockRadioButton = pageInfo.document.getElementById("geo#2"); + + ok(defaultCheckbox.checked, "The default checkbox should be checked."); + + PermissionTestUtils.add( + gBrowser.currentURI, + "geo", + Services.perms.DENY_ACTION + ); + + ok(!defaultCheckbox.checked, "The default checkbox should not be checked."); + + defaultCheckbox.checked = true; + defaultCheckbox.dispatchEvent(new Event("command")); + + ok( + !PermissionTestUtils.getPermissionObject(gBrowser.currentURI, "geo"), + "Checking the default checkbox should reset the permission." + ); + + defaultCheckbox.checked = false; + defaultCheckbox.dispatchEvent(new Event("command")); + + ok( + !PermissionTestUtils.getPermissionObject(gBrowser.currentURI, "geo"), + "Unchecking the default checkbox should pick the default permission." + ); + is( + radioGroup.selectedItem, + defaultRadioButton, + "The unknown radio button should be selected." + ); + + radioGroup.selectedItem = blockRadioButton; + blockRadioButton.dispatchEvent(new Event("command")); + + is( + PermissionTestUtils.getPermissionObject(gBrowser.currentURI, "geo") + .capability, + Services.perms.DENY_ACTION, + "Selecting a value in the radio group should set the corresponding permission" + ); + + radioGroup.selectedItem = defaultRadioButton; + defaultRadioButton.dispatchEvent(new Event("command")); + + ok( + !PermissionTestUtils.getPermissionObject(gBrowser.currentURI, "geo"), + "Selecting the default value should reset the permission." + ); + ok(defaultCheckbox.checked, "The default checkbox should be checked."); + + pageInfo.close(); + PermissionTestUtils.remove(gBrowser.currentURI, "geo"); + }); +} + +// Test displaying website permissions on certificate error pages. +add_task(async function test_CertificateError() { + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab( + gBrowser, + TEST_ORIGIN_CERT_ERROR + ); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + await pageLoaded; + + let pageInfo = BrowserPageInfo(TEST_ORIGIN_CERT_ERROR, "permTab"); + await BrowserTestUtils.waitForEvent(pageInfo, "load"); + let permissionTab = pageInfo.document.getElementById("permTab"); + await TestUtils.waitForCondition( + () => BrowserTestUtils.is_visible(permissionTab), + "Permission tab should be visible." + ); + + let hostText = pageInfo.document.getElementById("hostText"); + let permList = pageInfo.document.getElementById("permList"); + let excludedPermissions = pageInfo.window.getExcludedPermissions(); + let permissions = SitePermissions.listPermissions().filter( + p => + SitePermissions.getPermissionLabel(p) != null && + !excludedPermissions.includes(p) + ); + + await TestUtils.waitForCondition( + () => hostText.value === browser.currentURI.displayPrePath, + `Value of owner should be "${browser.currentURI.displayPrePath}" instead got "${hostText.value}".` + ); + + await TestUtils.waitForCondition( + () => permList.childElementCount === permissions.length, + `Value of verifier should be ${permissions.length}, instead got ${permList.childElementCount}.` + ); + + pageInfo.close(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +// Test displaying website permissions on network error pages. +add_task(async function test_NetworkError() { + // Setup for TLS error + Services.prefs.setIntPref("security.tls.version.max", 3); + Services.prefs.setIntPref("security.tls.version.min", 3); + + let browser; + let pageLoaded; + await BrowserTestUtils.openNewForegroundTab( + gBrowser, + () => { + gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, LOW_TLS_VERSION); + browser = gBrowser.selectedBrowser; + pageLoaded = BrowserTestUtils.waitForErrorPage(browser); + }, + false + ); + + await pageLoaded; + + let pageInfo = BrowserPageInfo(LOW_TLS_VERSION, "permTab"); + await BrowserTestUtils.waitForEvent(pageInfo, "load"); + let permissionTab = pageInfo.document.getElementById("permTab"); + await TestUtils.waitForCondition( + () => BrowserTestUtils.is_visible(permissionTab), + "Permission tab should be visible." + ); + + let hostText = pageInfo.document.getElementById("hostText"); + let permList = pageInfo.document.getElementById("permList"); + let excludedPermissions = pageInfo.window.getExcludedPermissions(); + let permissions = SitePermissions.listPermissions().filter( + p => + SitePermissions.getPermissionLabel(p) != null && + !excludedPermissions.includes(p) + ); + + await TestUtils.waitForCondition( + () => hostText.value === browser.currentURI.displayPrePath, + `Value of host should be should be "${browser.currentURI.displayPrePath}" instead got "${hostText.value}".` + ); + + await TestUtils.waitForCondition( + () => permList.childElementCount === permissions.length, + `Value of permissions list should be ${permissions.length}, instead got ${permList.childElementCount}.` + ); + + pageInfo.close(); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +// Test some standard operations in the permission tab. +add_task(async function test_geo_permission() { + await testPermissions(Services.perms.UNKNOWN_ACTION); +}); + +// Test some standard operations in the permission tab, falling back to a custom +// default permission instead of UNKNOWN. +add_task(async function test_default_geo_permission() { + await SpecialPowers.pushPrefEnv({ + set: [["permissions.default.geo", SitePermissions.ALLOW]], + }); + await testPermissions(Services.perms.ALLOW_ACTION); +}); + +// Test special behavior for cookie permissions. +add_task(async function test_cookie_permission() { + await BrowserTestUtils.withNewTab(TEST_ORIGIN, async function (browser) { + let pageInfo = BrowserPageInfo(TEST_ORIGIN, "permTab"); + await BrowserTestUtils.waitForEvent(pageInfo, "load"); + + let defaultCheckbox = await TestUtils.waitForCondition(() => + pageInfo.document.getElementById("cookieDef") + ); + let radioGroup = pageInfo.document.getElementById("cookieRadioGroup"); + let allowRadioButton = pageInfo.document.getElementById("cookie#1"); + let blockRadioButton = pageInfo.document.getElementById("cookie#2"); + + ok(defaultCheckbox.checked, "The default checkbox should be checked."); + + defaultCheckbox.checked = false; + defaultCheckbox.dispatchEvent(new Event("command")); + + is( + PermissionTestUtils.testPermission(gBrowser.currentURI, "cookie"), + SitePermissions.ALLOW, + "Unchecking the default checkbox should pick the default permission." + ); + is( + radioGroup.selectedItem, + allowRadioButton, + "The unknown radio button should be selected." + ); + + radioGroup.selectedItem = blockRadioButton; + blockRadioButton.dispatchEvent(new Event("command")); + + is( + PermissionTestUtils.testPermission(gBrowser.currentURI, "cookie"), + SitePermissions.BLOCK, + "Selecting a value in the radio group should set the corresponding permission" + ); + + radioGroup.selectedItem = allowRadioButton; + allowRadioButton.dispatchEvent(new Event("command")); + + is( + PermissionTestUtils.testPermission(gBrowser.currentURI, "cookie"), + SitePermissions.ALLOW, + "Selecting a value in the radio group should set the corresponding permission" + ); + ok(!defaultCheckbox.checked, "The default checkbox should not be checked."); + + defaultCheckbox.checked = true; + defaultCheckbox.dispatchEvent(new Event("command")); + + is( + PermissionTestUtils.testPermission(gBrowser.currentURI, "cookie"), + SitePermissions.UNKNOWN, + "Checking the default checkbox should reset the permission." + ); + is( + radioGroup.selectedItem, + null, + "For cookies, no item should be selected when the checkbox is checked." + ); + + pageInfo.close(); + PermissionTestUtils.remove(gBrowser.currentURI, "cookie"); + }); +}); -- cgit v1.2.3