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 --- .../extension/configurations/ControlCenter.sys.mjs | 320 +++++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs (limited to 'browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs') diff --git a/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs b/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs new file mode 100644 index 0000000000..2ada0e831c --- /dev/null +++ b/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs @@ -0,0 +1,320 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs"; +import { BrowserTestUtils } from "resource://testing-common/BrowserTestUtils.sys.mjs"; +import { setTimeout } from "resource://gre/modules/Timer.sys.mjs"; +import { UrlClassifierTestUtils } from "resource://testing-common/UrlClassifierTestUtils.sys.mjs"; + +import { SitePermissions } from "resource:///modules/SitePermissions.sys.mjs"; + +const { NetUtil } = ChromeUtils.import("resource://gre/modules/NetUtil.jsm"); + +const CC_SELECTORS = ["#identity-popup", "#urlbar-input-container"]; +const PP_SELECTORS = ["#protections-popup", "#urlbar-input-container"]; + +const RESOURCE_PATH = + "browser/browser/tools/mozscreenshots/mozscreenshots/extension/mozscreenshots/browser/resources/lib/controlCenter"; +const HTTP_PAGE = "http://example.com/"; +const HTTPS_PAGE = "https://example.com/"; +const PERMISSIONS_PAGE = "https://test1.example.com/"; +const HTTP_PASSWORD_PAGE = `http://test2.example.org/${RESOURCE_PATH}/password.html`; +const MIXED_CONTENT_URL = `https://example.com/${RESOURCE_PATH}/mixed.html`; +const MIXED_ACTIVE_CONTENT_URL = `https://example.com/${RESOURCE_PATH}/mixed_active.html`; +const MIXED_PASSIVE_CONTENT_URL = `https://example.com/${RESOURCE_PATH}/mixed_passive.html`; +const TRACKING_PAGE = `http://tracking.example.org/${RESOURCE_PATH}/tracking.html`; + +export var ControlCenter = { + init(libDir) {}, + + configurations: { + about: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage("about:rights"); + await openIdentityPopup(); + }, + }, + + localFile: { + // This selector is different so we can exclude the changing file: path + selectors: ["#identity-popup-security-button"], + async applyConfig() { + let channel = NetUtil.newChannel({ + uri: "resource://mozscreenshots/lib/mozscreenshots.html", + loadUsingSystemPrincipal: true, + }); + channel = channel.QueryInterface(Ci.nsIFileChannel); + let browserWindow = + Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + BrowserTestUtils.loadURIString( + gBrowser.selectedBrowser, + channel.file.path + ); + await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); + await openIdentityPopup(); + }, + }, + + http: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTP_PAGE); + await openIdentityPopup(); + }, + }, + + httpSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTP_PAGE); + await openIdentityPopup(true); + }, + }, + + https: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTPS_PAGE); + await openIdentityPopup(); + }, + }, + + httpsSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTPS_PAGE); + await openIdentityPopup(true); + }, + }, + + singlePermission: { + selectors: CC_SELECTORS, + async applyConfig() { + let principal = + Services.scriptSecurityManager.createContentPrincipalFromOrigin( + PERMISSIONS_PAGE + ); + SitePermissions.setForPrincipal( + principal, + "camera", + SitePermissions.ALLOW + ); + + await loadPage(PERMISSIONS_PAGE); + await openIdentityPopup(); + }, + }, + + allPermissions: { + selectors: CC_SELECTORS, + async applyConfig() { + // TODO: (Bug 1330601) Rewrite this to consider temporary (TAB) permission states. + // There are 2 possible non-default permission states, so we alternate between them. + let states = [SitePermissions.ALLOW, SitePermissions.BLOCK]; + let principal = + Services.scriptSecurityManager.createContentPrincipalFromOrigin( + PERMISSIONS_PAGE + ); + SitePermissions.listPermissions().forEach(function (permission, index) { + SitePermissions.setForPrincipal( + principal, + permission, + states[index % 2] + ); + }); + + await loadPage(PERMISSIONS_PAGE); + await openIdentityPopup(); + }, + }, + + mixed: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_CONTENT_URL); + await openIdentityPopup(); + }, + }, + + mixedSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_CONTENT_URL); + await openIdentityPopup(true); + }, + }, + + mixedPassive: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_PASSIVE_CONTENT_URL); + await openIdentityPopup(); + }, + }, + + mixedPassiveSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_PASSIVE_CONTENT_URL); + await openIdentityPopup(true); + }, + }, + + mixedActive: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_ACTIVE_CONTENT_URL); + await openIdentityPopup(); + }, + }, + + mixedActiveSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(MIXED_ACTIVE_CONTENT_URL); + await openIdentityPopup(true); + }, + }, + + mixedActiveUnblocked: { + selectors: CC_SELECTORS, + async applyConfig() { + let browserWindow = + Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + await loadPage(MIXED_ACTIVE_CONTENT_URL); + gBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection(); + await BrowserTestUtils.browserLoaded( + gBrowser.selectedBrowser, + false, + MIXED_ACTIVE_CONTENT_URL + ); + await openIdentityPopup(); + }, + }, + + mixedActiveUnblockedSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + let browserWindow = + Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + await loadPage(MIXED_ACTIVE_CONTENT_URL); + gBrowser.ownerGlobal.gIdentityHandler.disableMixedContentProtection(); + await BrowserTestUtils.browserLoaded( + gBrowser.selectedBrowser, + false, + MIXED_ACTIVE_CONTENT_URL + ); + await openIdentityPopup(true); + }, + }, + + httpPassword: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTP_PASSWORD_PAGE); + await openIdentityPopup(); + }, + }, + + httpPasswordSubView: { + selectors: CC_SELECTORS, + async applyConfig() { + await loadPage(HTTP_PASSWORD_PAGE); + await openIdentityPopup(true); + }, + }, + + trackingProtectionNoElements: { + selectors: PP_SELECTORS, + async applyConfig() { + Services.prefs.setBoolPref("privacy.trackingprotection.enabled", true); + + await loadPage(HTTP_PAGE); + await openProtectionsPopup(); + }, + }, + + trackingProtectionEnabled: { + selectors: PP_SELECTORS, + async applyConfig() { + Services.prefs.setBoolPref("privacy.trackingprotection.enabled", true); + await UrlClassifierTestUtils.addTestTrackers(); + + await loadPage(TRACKING_PAGE); + await openProtectionsPopup(); + }, + }, + + trackingProtectionDisabled: { + selectors: PP_SELECTORS, + async applyConfig() { + let browserWindow = + Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + Services.prefs.setBoolPref("privacy.trackingprotection.enabled", true); + await UrlClassifierTestUtils.addTestTrackers(); + + await loadPage(TRACKING_PAGE); + + // unblock the page + let loaded = BrowserTestUtils.browserLoaded( + gBrowser.selectedBrowser, + false, + TRACKING_PAGE + ); + gBrowser.ownerGlobal.gProtectionsHandler.disableForCurrentPage(); + await loaded; + await openProtectionsPopup(); + }, + }, + }, +}; + +async function loadPage(url) { + let browserWindow = Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + BrowserTestUtils.loadURIString(gBrowser.selectedBrowser, url); + await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, false, url); +} + +async function openIdentityPopup(expand) { + let browserWindow = Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + let { gIdentityHandler } = gBrowser.ownerGlobal; + // Ensure the popup is available, if it's never been opened. + gIdentityHandler._initializePopup(); + gIdentityHandler._identityPopup.hidePopup(); + // Disable the popup shadow on OSX until we have figured out bug 1425253. + if (AppConstants.platform == "macosx") { + gIdentityHandler._identityPopup.classList.add("no-shadow"); + } + gIdentityHandler._identityIconBox.click(); + if (expand) { + // give some time for opening to avoid weird style issues + await new Promise(c => setTimeout(c, 500)); + gIdentityHandler._identityPopup + .querySelector("#identity-popup-security-button") + .click(); + } +} + +async function openProtectionsPopup() { + let browserWindow = Services.wm.getMostRecentWindow("navigator:browser"); + let gBrowser = browserWindow.gBrowser; + let { gProtectionsHandler } = gBrowser.ownerGlobal; + // Force initializing the popup; we can't add classes otherwise. + gProtectionsHandler._initializePopup(); + gProtectionsHandler._protectionsPopup.hidePopup(); + // Disable the popup shadow on OSX until we have figured out bug 1425253. + if (AppConstants.platform == "macosx") { + gProtectionsHandler._protectionsPopup.classList.add("no-shadow"); + } + gProtectionsHandler.showProtectionsPopup(); + // Wait for any animation. + await new Promise(_ => setTimeout(_, 500)); +} -- cgit v1.2.3