summaryrefslogtreecommitdiffstats
path: root/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs')
-rw-r--r--browser/tools/mozscreenshots/mozscreenshots/extension/configurations/ControlCenter.sys.mjs320
1 files changed, 320 insertions, 0 deletions
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));
+}