зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1693803 - [remote] Use a shared RecommendedPreferences module for remote protocols r=webdriver-reviewers,whimboo
Depends on D119072 Differential Revision: https://phabricator.services.mozilla.com/D119073
This commit is contained in:
Родитель
138814b073
Коммит
29d8d69939
|
@ -14,9 +14,24 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
Services: "resource://gre/modules/Services.jsm",
|
||||
|
||||
JSONHandler: "chrome://remote/content/cdp/JSONHandler.jsm",
|
||||
RecommendedPreferences:
|
||||
"chrome://remote/content/shared/RecommendedPreferences.jsm",
|
||||
TargetList: "chrome://remote/content/cdp/targets/TargetList.jsm",
|
||||
});
|
||||
|
||||
// Map of CDP-specific preferences that should be set via
|
||||
// RecommendedPreferences.
|
||||
const RECOMMENDED_PREFS = new Map([
|
||||
// Prevent various error message on the console
|
||||
// jest-puppeteer asserts that no error message is emitted by the console
|
||||
[
|
||||
"browser.contentblocking.features.standard",
|
||||
"-tp,tpPrivate,cookieBehavior0,-cm,-fp",
|
||||
],
|
||||
// Accept all cookies (see behavior definitions in nsICookieService.idl)
|
||||
["network.cookie.cookieBehavior", 0],
|
||||
]);
|
||||
|
||||
/**
|
||||
* Entry class for the Chrome DevTools Protocol support.
|
||||
*
|
||||
|
@ -44,6 +59,8 @@ class CDP {
|
|||
this.targetList.on("target-destroyed", (eventName, target) => {
|
||||
this.server.registerPathHandler(target.path, null);
|
||||
});
|
||||
|
||||
RecommendedPreferences.applyPreferences(RECOMMENDED_PREFS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,5 +84,6 @@ class CDP {
|
|||
*/
|
||||
stop() {
|
||||
this.targetList.destructor();
|
||||
RecommendedPreferences.restorePreferences(RECOMMENDED_PREFS);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
var EXPORTED_SYMBOLS = ["RecommendedPreferences"];
|
||||
|
||||
const RecommendedPreferences = new Map([
|
||||
// Disable automatically upgrading Firefox
|
||||
//
|
||||
// Note: This preference should have already been set by the client when
|
||||
// creating the profile. But if not and to absolutely make sure that updates
|
||||
// of Firefox aren't downloaded and applied, enforce its presence.
|
||||
["app.update.disabledForTesting", true],
|
||||
|
||||
// Do not warn on quitting Firefox
|
||||
["browser.warnOnQuit", false],
|
||||
|
||||
// Allow the application to have focus even when it runs in the background.
|
||||
["focusmanager.testmode", true],
|
||||
|
||||
// Avoid breaking odd-runs of firefox because of it running in safe mode.
|
||||
// Firefox will run in safe mode alsmost on every even/odd runs as
|
||||
// Puppeteer may very easily shutdown Firefox process brutaly and force
|
||||
// it to run in safe mode in the next run.
|
||||
["toolkit.startup.max_resumed_crashes", -1],
|
||||
|
||||
// Prevent various error message on the console
|
||||
// jest-puppeteer asserts that no error message is emitted by the console
|
||||
[
|
||||
"browser.contentblocking.features.standard",
|
||||
"-tp,tpPrivate,cookieBehavior0,-cm,-fp",
|
||||
],
|
||||
["network.cookie.cookieBehavior", 0],
|
||||
]);
|
|
@ -9,7 +9,6 @@ remote.jar:
|
|||
content/cdp/Error.jsm (Error.jsm)
|
||||
content/cdp/JSONHandler.jsm (JSONHandler.jsm)
|
||||
content/cdp/Protocol.jsm (Protocol.jsm)
|
||||
content/cdp/RecommendedPreferences.jsm (RecommendedPreferences.jsm)
|
||||
content/cdp/StreamRegistry.jsm (StreamRegistry.jsm)
|
||||
# domains
|
||||
content/cdp/domains/ContentProcessDomain.jsm (domains/ContentProcessDomain.jsm)
|
||||
|
|
|
@ -17,8 +17,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
HttpServer: "chrome://remote/content/server/HTTPD.jsm",
|
||||
Log: "chrome://remote/content/shared/Log.jsm",
|
||||
Preferences: "resource://gre/modules/Preferences.jsm",
|
||||
RecommendedPreferences:
|
||||
"chrome://remote/content/cdp/RecommendedPreferences.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
|
||||
|
@ -36,8 +34,6 @@ class RemoteAgentClass {
|
|||
this.cdp = null;
|
||||
this.server = null;
|
||||
|
||||
this.alteredPrefs = new Set();
|
||||
|
||||
const protocols = Services.prefs.getIntPref(PREF_ACTIVE_PROTOCOLS);
|
||||
if (protocols < 1 || protocols > 3) {
|
||||
throw Error(`Invalid remote protocol identifier: ${protocols}`);
|
||||
|
@ -86,16 +82,6 @@ class RemoteAgentClass {
|
|||
port = -1;
|
||||
}
|
||||
|
||||
for (let [k, v] of RecommendedPreferences) {
|
||||
if (!Preferences.isSet(k)) {
|
||||
logger.debug(`Setting recommended pref ${k} to ${v}`);
|
||||
Preferences.set(k, v);
|
||||
this.alteredPrefs.add(k);
|
||||
}
|
||||
}
|
||||
|
||||
Services.obs.addObserver(this, "quit-application");
|
||||
|
||||
this.server = new HttpServer();
|
||||
|
||||
if ((this.activeProtocols & CDP_ACTIVE) === CDP_ACTIVE) {
|
||||
|
@ -118,8 +104,6 @@ class RemoteAgentClass {
|
|||
|
||||
close() {
|
||||
try {
|
||||
this.resetPreferences();
|
||||
|
||||
// Stop the CDP support before stopping the server.
|
||||
// Otherwise the HTTP server will fail to stop.
|
||||
this.cdp?.stop();
|
||||
|
@ -138,24 +122,6 @@ class RemoteAgentClass {
|
|||
return Promise.resolve();
|
||||
}
|
||||
|
||||
observe(subject, topic, data) {
|
||||
if (topic === "quit-application") {
|
||||
// Cleanup preferences on quit-application, since `close` can be closed
|
||||
// too late to properly cleanup preferences.
|
||||
this.resetPreferences();
|
||||
}
|
||||
}
|
||||
|
||||
resetPreferences() {
|
||||
Services.obs.removeObserver(this, "quit-application");
|
||||
|
||||
for (let k of this.alteredPrefs) {
|
||||
logger.debug(`Resetting recommended pref ${k}`);
|
||||
Preferences.reset(k);
|
||||
}
|
||||
this.alteredPrefs.clear();
|
||||
}
|
||||
|
||||
get scheme() {
|
||||
if (!this.server) {
|
||||
return null;
|
||||
|
|
|
@ -16,6 +16,8 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
|||
Log: "chrome://remote/content/shared/Log.jsm",
|
||||
MarionettePrefs: "chrome://remote/content/marionette/prefs.js",
|
||||
Preferences: "resource://gre/modules/Preferences.jsm",
|
||||
RecommendedPreferences:
|
||||
"chrome://remote/content/shared/RecommendedPreferences.jsm",
|
||||
TCPListener: "chrome://remote/content/marionette/server.js",
|
||||
});
|
||||
|
||||
|
@ -53,234 +55,11 @@ const ENV_ENABLED = "MOZ_MARIONETTE";
|
|||
// pref being set to 4444.
|
||||
const ENV_PRESERVE_PREFS = "MOZ_MARIONETTE_PREF_STATE_ACROSS_RESTARTS";
|
||||
|
||||
// ALL CHANGES TO THIS LIST MUST HAVE REVIEW FROM A MARIONETTE PEER!
|
||||
//
|
||||
// Marionette sets preferences recommended for automation when it starts,
|
||||
// unless marionette.prefs.recommended has been set to false.
|
||||
//
|
||||
// All prefs as added here have immediate effect, and don't require a restart
|
||||
// nor have to be set in the profile before the application starts. If such a
|
||||
// latter preference has to be added, it needs to be done for the client like
|
||||
// Marionette client (geckoinstance.py), or geckodriver (prefs.rs).
|
||||
//
|
||||
// Note: Clients do not always use the latest version of the application. As
|
||||
// such backward compatibility has to be ensured at least for the last three
|
||||
// releases.
|
||||
// Map of Marionette-specific preferences that should be set via
|
||||
// RecommendedPreferences.
|
||||
const RECOMMENDED_PREFS = new Map([
|
||||
// Make sure Shield doesn't hit the network.
|
||||
["app.normandy.api_url", ""],
|
||||
|
||||
// Disable automatically upgrading Firefox
|
||||
//
|
||||
// Note: This preference should have already been set by the client when
|
||||
// creating the profile. But if not and to absolutely make sure that updates
|
||||
// of Firefox aren't downloaded and applied, enforce its presence.
|
||||
["app.update.disabledForTesting", true],
|
||||
|
||||
// Increase the APZ content response timeout in tests to 1 minute.
|
||||
// This is to accommodate the fact that test environments tends to be
|
||||
// slower than production environments (with the b2g emulator being
|
||||
// the slowest of them all), resulting in the production timeout value
|
||||
// sometimes being exceeded and causing false-positive test failures.
|
||||
//
|
||||
// (bug 1176798, bug 1177018, bug 1210465)
|
||||
["apz.content_response_timeout", 60000],
|
||||
|
||||
// Don't show the content blocking introduction panel.
|
||||
// We use a larger number than the default 22 to have some buffer
|
||||
// This can be removed once Firefox 69 and 68 ESR and are no longer supported.
|
||||
["browser.contentblocking.introCount", 99],
|
||||
|
||||
// Indicate that the download panel has been shown once so that
|
||||
// whichever download test runs first doesn't show the popup
|
||||
// inconsistently.
|
||||
["browser.download.panel.shown", true],
|
||||
|
||||
// Always display a blank page
|
||||
["browser.newtabpage.enabled", false],
|
||||
|
||||
// Background thumbnails in particular cause grief, and disabling
|
||||
// thumbnails in general cannot hurt
|
||||
["browser.pagethumbnails.capturing_disabled", true],
|
||||
|
||||
// Disable safebrowsing components.
|
||||
//
|
||||
// These should also be set in the profile prior to starting Firefox,
|
||||
// as it is picked up at runtime.
|
||||
["browser.safebrowsing.blockedURIs.enabled", false],
|
||||
["browser.safebrowsing.downloads.enabled", false],
|
||||
["browser.safebrowsing.passwords.enabled", false],
|
||||
["browser.safebrowsing.malware.enabled", false],
|
||||
["browser.safebrowsing.phishing.enabled", false],
|
||||
|
||||
// Disable updates to search engines.
|
||||
//
|
||||
// Should be set in profile.
|
||||
["browser.search.update", false],
|
||||
|
||||
// Do not restore the last open set of tabs if the browser has crashed
|
||||
["browser.sessionstore.resume_from_crash", false],
|
||||
|
||||
// Don't check for the default web browser during startup.
|
||||
//
|
||||
// These should also be set in the profile prior to starting Firefox,
|
||||
// as it is picked up at runtime.
|
||||
["browser.shell.checkDefaultBrowser", false],
|
||||
|
||||
// Do not redirect user when a milstone upgrade of Firefox is detected
|
||||
["browser.startup.homepage_override.mstone", "ignore"],
|
||||
|
||||
// Do not close the window when the last tab gets closed
|
||||
["browser.tabs.closeWindowWithLastTab", false],
|
||||
|
||||
// Do not allow background tabs to be zombified on Android, otherwise for
|
||||
// tests that open additional tabs, the test harness tab itself might get
|
||||
// unloaded
|
||||
["browser.tabs.disableBackgroundZombification", false],
|
||||
|
||||
// Bug 1557457: Disable because modal dialogs might not appear in Firefox
|
||||
["browser.tabs.remote.separatePrivilegedContentProcess", false],
|
||||
|
||||
// Don't unload tabs when available memory is running low
|
||||
["browser.tabs.unloadOnLowMemory", false],
|
||||
|
||||
// Do not warn when closing all open tabs
|
||||
["browser.tabs.warnOnClose", false],
|
||||
|
||||
// Do not warn when closing all other open tabs
|
||||
["browser.tabs.warnOnCloseOtherTabs", false],
|
||||
|
||||
// Do not warn when multiple tabs will be opened
|
||||
["browser.tabs.warnOnOpen", false],
|
||||
|
||||
// Don't show the Bookmarks Toolbar on any tab (the above pref that
|
||||
// disables the New Tab Page ends up showing the toolbar on about:blank).
|
||||
["browser.toolbars.bookmarks.visibility", "never"],
|
||||
|
||||
// Disable first run splash page on Windows 10
|
||||
["browser.usedOnWindows10.introURL", ""],
|
||||
|
||||
// Disable the UI tour.
|
||||
//
|
||||
// Should be set in profile.
|
||||
["browser.uitour.enabled", false],
|
||||
|
||||
// Turn off search suggestions in the location bar so as not to trigger
|
||||
// network connections.
|
||||
["browser.urlbar.suggest.searches", false],
|
||||
|
||||
// Do not warn on quitting Firefox
|
||||
["browser.warnOnQuit", false],
|
||||
|
||||
// Do not show datareporting policy notifications which can
|
||||
// interfere with tests
|
||||
[
|
||||
"datareporting.healthreport.documentServerURI",
|
||||
"http://%(server)s/dummy/healthreport/",
|
||||
],
|
||||
["datareporting.healthreport.logging.consoleEnabled", false],
|
||||
["datareporting.healthreport.service.enabled", false],
|
||||
["datareporting.healthreport.service.firstRun", false],
|
||||
["datareporting.healthreport.uploadEnabled", false],
|
||||
["datareporting.policy.dataSubmissionEnabled", false],
|
||||
["datareporting.policy.dataSubmissionPolicyAccepted", false],
|
||||
["datareporting.policy.dataSubmissionPolicyBypassNotification", true],
|
||||
|
||||
// Automatically unload beforeunload alerts
|
||||
["dom.disable_beforeunload", true],
|
||||
|
||||
// Disable popup-blocker
|
||||
["dom.disable_open_during_load", false],
|
||||
|
||||
// Enabling the support for File object creation in the content process
|
||||
["dom.file.createInChild", true],
|
||||
|
||||
// Disable the ProcessHangMonitor
|
||||
["dom.ipc.reportProcessHangs", false],
|
||||
|
||||
// Disable slow script dialogues
|
||||
["dom.max_chrome_script_run_time", 0],
|
||||
["dom.max_script_run_time", 0],
|
||||
|
||||
// DOM Push
|
||||
["dom.push.connection.enabled", false],
|
||||
|
||||
// Only load extensions from the application and user profile
|
||||
// AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
|
||||
//
|
||||
// Should be set in profile.
|
||||
["extensions.autoDisableScopes", 0],
|
||||
["extensions.enabledScopes", 5],
|
||||
|
||||
// Disable metadata caching for installed add-ons by default
|
||||
["extensions.getAddons.cache.enabled", false],
|
||||
|
||||
// Disable installing any distribution extensions or add-ons.
|
||||
// Should be set in profile.
|
||||
["extensions.installDistroAddons", false],
|
||||
|
||||
// Turn off extension updates so they do not bother tests
|
||||
["extensions.update.enabled", false],
|
||||
["extensions.update.notifyUser", false],
|
||||
|
||||
// Make sure opening about:addons will not hit the network
|
||||
["extensions.getAddons.discovery.api_url", "data:, "],
|
||||
|
||||
// Allow the application to have focus even it runs in the background
|
||||
["focusmanager.testmode", true],
|
||||
|
||||
// Disable useragent updates
|
||||
["general.useragent.updates.enabled", false],
|
||||
|
||||
// Always use network provider for geolocation tests so we bypass the
|
||||
// macOS dialog raised by the corelocation provider
|
||||
["geo.provider.testing", true],
|
||||
|
||||
// Do not scan Wifi
|
||||
["geo.wifi.scan", false],
|
||||
|
||||
// Do not prompt with long usernames or passwords in URLs
|
||||
["network.http.phishy-userpass-length", 255],
|
||||
|
||||
// Do not prompt for temporary redirects
|
||||
["network.http.prompt-temp-redirect", false],
|
||||
|
||||
// Do not automatically switch between offline and online
|
||||
["network.manage-offline-status", false],
|
||||
|
||||
// Make sure SNTP requests do not hit the network
|
||||
["network.sntp.pools", "%(server)s"],
|
||||
|
||||
// Privacy and Tracking Protection
|
||||
["privacy.trackingprotection.enabled", false],
|
||||
|
||||
// Don't do network connections for mitm priming
|
||||
["security.certerrors.mitm.priming.enabled", false],
|
||||
|
||||
// Local documents have access to all other local documents,
|
||||
// including directory listings
|
||||
["security.fileuri.strict_origin_policy", false],
|
||||
|
||||
// Tests do not wait for the notification button security delay
|
||||
["security.notification_enable_delay", 0],
|
||||
|
||||
// Ensure blocklist updates do not hit the network
|
||||
["services.settings.server", "http://%(server)s/dummy/blocklist/"],
|
||||
|
||||
// Do not automatically fill sign-in forms with known usernames and
|
||||
// passwords
|
||||
["signon.autofillForms", false],
|
||||
|
||||
// Disable password capture, so that tests that include forms are not
|
||||
// influenced by the presence of the persistent doorhanger notification
|
||||
["signon.rememberSignons", false],
|
||||
|
||||
// Disable first-run welcome page
|
||||
["startup.homepage_welcome_url", "about:blank"],
|
||||
["startup.homepage_welcome_url.additional", ""],
|
||||
|
||||
// Prevent starting into safe mode after application crashes
|
||||
["toolkit.startup.max_resumed_crashes", -1],
|
||||
]);
|
||||
|
||||
const isRemote =
|
||||
|
@ -298,8 +77,6 @@ class MarionetteParentProcess {
|
|||
// and that we are ready to start the Marionette server
|
||||
this.finalUIStartup = false;
|
||||
|
||||
this.alteredPrefs = new Set();
|
||||
|
||||
// Initially set the enabled state based on the environment variable.
|
||||
this.enabled = env.exists(ENV_ENABLED);
|
||||
|
||||
|
@ -486,13 +263,7 @@ class MarionetteParentProcess {
|
|||
logger.trace(`All scripts recorded.`);
|
||||
|
||||
if (MarionettePrefs.recommendedPrefs) {
|
||||
for (let [k, v] of RECOMMENDED_PREFS) {
|
||||
if (!Preferences.isSet(k)) {
|
||||
logger.debug(`Setting recommended pref ${k} to ${v}`);
|
||||
Preferences.set(k, v);
|
||||
this.alteredPrefs.add(k);
|
||||
}
|
||||
}
|
||||
RecommendedPreferences.applyPreferences(RECOMMENDED_PREFS);
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -514,12 +285,6 @@ class MarionetteParentProcess {
|
|||
}
|
||||
|
||||
uninit() {
|
||||
for (let k of this.alteredPrefs) {
|
||||
logger.debug(`Resetting recommended pref ${k}`);
|
||||
Preferences.reset(k);
|
||||
}
|
||||
this.alteredPrefs.clear();
|
||||
|
||||
if (this.running) {
|
||||
this.server.stop();
|
||||
Services.obs.notifyObservers(this, NOTIFY_LISTENING);
|
||||
|
|
|
@ -14,6 +14,7 @@ remote.jar:
|
|||
# shared modules (all protocols)
|
||||
content/shared/Format.jsm (shared/Format.jsm)
|
||||
content/shared/Log.jsm (shared/Log.jsm)
|
||||
content/shared/RecommendedPreferences.jsm (shared/RecommendedPreferences.jsm)
|
||||
content/shared/Sync.jsm (shared/Sync.jsm)
|
||||
content/shared/TabManager.jsm (shared/TabManager.jsm)
|
||||
content/shared/WebSocketConnection.jsm (shared/WebSocketConnection.jsm)
|
||||
|
|
|
@ -0,0 +1,314 @@
|
|||
/* 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/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const EXPORTED_SYMBOLS = ["RecommendedPreferences"];
|
||||
|
||||
const { XPCOMUtils } = ChromeUtils.import(
|
||||
"resource://gre/modules/XPCOMUtils.jsm"
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
Preferences: "resource://gre/modules/Preferences.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
|
||||
Log: "chrome://remote/content/shared/Log.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "logger", () => Log.get());
|
||||
|
||||
// Ensure we are in the parent process.
|
||||
if (Services.appinfo.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
|
||||
throw new Error(
|
||||
"RecommendedPreferences should only be loaded in the parent process"
|
||||
);
|
||||
}
|
||||
|
||||
// ALL CHANGES TO THIS LIST MUST HAVE REVIEW FROM A WEBDRIVER PEER!
|
||||
//
|
||||
// For Marionette, preferences are set for automation when it starts,
|
||||
// unless marionette.prefs.recommended has been set to false.
|
||||
//
|
||||
// All prefs listed here have immediate effect, and don't require a restart
|
||||
// nor have to be set in the profile before the application starts. If such a
|
||||
// latter preference has to be added, it needs to be done for the client like
|
||||
// Marionette client (geckoinstance.py), or geckodriver (prefs.rs).
|
||||
//
|
||||
// Note: Clients do not always use the latest version of the application. As
|
||||
// such backward compatibility has to be ensured at least for the last three
|
||||
// releases.
|
||||
const COMMON_PREFERENCES = new Map([
|
||||
// Make sure Shield doesn't hit the network.
|
||||
["app.normandy.api_url", ""],
|
||||
|
||||
// Disable automatically upgrading Firefox
|
||||
//
|
||||
// Note: This preference should have already been set by the client when
|
||||
// creating the profile. But if not and to absolutely make sure that updates
|
||||
// of Firefox aren't downloaded and applied, enforce its presence.
|
||||
["app.update.disabledForTesting", true],
|
||||
|
||||
// Increase the APZ content response timeout in tests to 1 minute.
|
||||
// This is to accommodate the fact that test environments tends to be
|
||||
// slower than production environments (with the b2g emulator being
|
||||
// the slowest of them all), resulting in the production timeout value
|
||||
// sometimes being exceeded and causing false-positive test failures.
|
||||
//
|
||||
// (bug 1176798, bug 1177018, bug 1210465)
|
||||
["apz.content_response_timeout", 60000],
|
||||
|
||||
// Don't show the content blocking introduction panel.
|
||||
// We use a larger number than the default 22 to have some buffer
|
||||
// This can be removed once Firefox 69 and 68 ESR and are no longer supported.
|
||||
["browser.contentblocking.introCount", 99],
|
||||
|
||||
// Indicate that the download panel has been shown once so that
|
||||
// whichever download test runs first doesn't show the popup
|
||||
// inconsistently.
|
||||
["browser.download.panel.shown", true],
|
||||
|
||||
// Always display a blank page
|
||||
["browser.newtabpage.enabled", false],
|
||||
|
||||
// Background thumbnails in particular cause grief, and disabling
|
||||
// thumbnails in general cannot hurt
|
||||
["browser.pagethumbnails.capturing_disabled", true],
|
||||
|
||||
// Disable safebrowsing components.
|
||||
//
|
||||
// These should also be set in the profile prior to starting Firefox,
|
||||
// as it is picked up at runtime.
|
||||
["browser.safebrowsing.blockedURIs.enabled", false],
|
||||
["browser.safebrowsing.downloads.enabled", false],
|
||||
["browser.safebrowsing.passwords.enabled", false],
|
||||
["browser.safebrowsing.malware.enabled", false],
|
||||
["browser.safebrowsing.phishing.enabled", false],
|
||||
|
||||
// Disable updates to search engines.
|
||||
//
|
||||
// Should be set in profile.
|
||||
["browser.search.update", false],
|
||||
|
||||
// Do not restore the last open set of tabs if the browser has crashed
|
||||
["browser.sessionstore.resume_from_crash", false],
|
||||
|
||||
// Don't check for the default web browser during startup.
|
||||
//
|
||||
// These should also be set in the profile prior to starting Firefox,
|
||||
// as it is picked up at runtime.
|
||||
["browser.shell.checkDefaultBrowser", false],
|
||||
|
||||
// Do not redirect user when a milstone upgrade of Firefox is detected
|
||||
["browser.startup.homepage_override.mstone", "ignore"],
|
||||
|
||||
// Do not close the window when the last tab gets closed
|
||||
["browser.tabs.closeWindowWithLastTab", false],
|
||||
|
||||
// Do not allow background tabs to be zombified on Android, otherwise for
|
||||
// tests that open additional tabs, the test harness tab itself might get
|
||||
// unloaded
|
||||
["browser.tabs.disableBackgroundZombification", false],
|
||||
|
||||
// Bug 1557457: Disable because modal dialogs might not appear in Firefox
|
||||
["browser.tabs.remote.separatePrivilegedContentProcess", false],
|
||||
|
||||
// Don't unload tabs when available memory is running low
|
||||
["browser.tabs.unloadOnLowMemory", false],
|
||||
|
||||
// Do not warn when closing all open tabs
|
||||
["browser.tabs.warnOnClose", false],
|
||||
|
||||
// Do not warn when closing all other open tabs
|
||||
["browser.tabs.warnOnCloseOtherTabs", false],
|
||||
|
||||
// Do not warn when multiple tabs will be opened
|
||||
["browser.tabs.warnOnOpen", false],
|
||||
|
||||
// Don't show the Bookmarks Toolbar on any tab (the above pref that
|
||||
// disables the New Tab Page ends up showing the toolbar on about:blank).
|
||||
["browser.toolbars.bookmarks.visibility", "never"],
|
||||
|
||||
// Disable first run splash page on Windows 10
|
||||
["browser.usedOnWindows10.introURL", ""],
|
||||
|
||||
// Disable the UI tour.
|
||||
//
|
||||
// Should be set in profile.
|
||||
["browser.uitour.enabled", false],
|
||||
|
||||
// Turn off search suggestions in the location bar so as not to trigger
|
||||
// network connections.
|
||||
["browser.urlbar.suggest.searches", false],
|
||||
|
||||
// Do not warn on quitting Firefox
|
||||
["browser.warnOnQuit", false],
|
||||
|
||||
// Do not show datareporting policy notifications which can
|
||||
// interfere with tests
|
||||
[
|
||||
"datareporting.healthreport.documentServerURI",
|
||||
"http://%(server)s/dummy/healthreport/",
|
||||
],
|
||||
["datareporting.healthreport.logging.consoleEnabled", false],
|
||||
["datareporting.healthreport.service.enabled", false],
|
||||
["datareporting.healthreport.service.firstRun", false],
|
||||
["datareporting.healthreport.uploadEnabled", false],
|
||||
["datareporting.policy.dataSubmissionEnabled", false],
|
||||
["datareporting.policy.dataSubmissionPolicyAccepted", false],
|
||||
["datareporting.policy.dataSubmissionPolicyBypassNotification", true],
|
||||
|
||||
// Disable popup-blocker
|
||||
["dom.disable_open_during_load", false],
|
||||
|
||||
// Enabling the support for File object creation in the content process
|
||||
["dom.file.createInChild", true],
|
||||
|
||||
// Disable the ProcessHangMonitor
|
||||
["dom.ipc.reportProcessHangs", false],
|
||||
|
||||
// Disable slow script dialogues
|
||||
["dom.max_chrome_script_run_time", 0],
|
||||
["dom.max_script_run_time", 0],
|
||||
|
||||
// DOM Push
|
||||
["dom.push.connection.enabled", false],
|
||||
|
||||
// Only load extensions from the application and user profile
|
||||
// AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
|
||||
//
|
||||
// Should be set in profile.
|
||||
["extensions.autoDisableScopes", 0],
|
||||
["extensions.enabledScopes", 5],
|
||||
|
||||
// Disable metadata caching for installed add-ons by default
|
||||
["extensions.getAddons.cache.enabled", false],
|
||||
|
||||
// Disable installing any distribution extensions or add-ons.
|
||||
// Should be set in profile.
|
||||
["extensions.installDistroAddons", false],
|
||||
|
||||
// Turn off extension updates so they do not bother tests
|
||||
["extensions.update.enabled", false],
|
||||
["extensions.update.notifyUser", false],
|
||||
|
||||
// Make sure opening about:addons will not hit the network
|
||||
["extensions.getAddons.discovery.api_url", "data:, "],
|
||||
|
||||
// Allow the application to have focus even it runs in the background
|
||||
["focusmanager.testmode", true],
|
||||
|
||||
// Disable useragent updates
|
||||
["general.useragent.updates.enabled", false],
|
||||
|
||||
// Always use network provider for geolocation tests so we bypass the
|
||||
// macOS dialog raised by the corelocation provider
|
||||
["geo.provider.testing", true],
|
||||
|
||||
// Do not scan Wifi
|
||||
["geo.wifi.scan", false],
|
||||
|
||||
// Do not prompt with long usernames or passwords in URLs
|
||||
["network.http.phishy-userpass-length", 255],
|
||||
|
||||
// Do not prompt for temporary redirects
|
||||
["network.http.prompt-temp-redirect", false],
|
||||
|
||||
// Do not automatically switch between offline and online
|
||||
["network.manage-offline-status", false],
|
||||
|
||||
// Make sure SNTP requests do not hit the network
|
||||
["network.sntp.pools", "%(server)s"],
|
||||
|
||||
// Privacy and Tracking Protection
|
||||
["privacy.trackingprotection.enabled", false],
|
||||
|
||||
// Don't do network connections for mitm priming
|
||||
["security.certerrors.mitm.priming.enabled", false],
|
||||
|
||||
// Local documents have access to all other local documents,
|
||||
// including directory listings
|
||||
["security.fileuri.strict_origin_policy", false],
|
||||
|
||||
// Tests do not wait for the notification button security delay
|
||||
["security.notification_enable_delay", 0],
|
||||
|
||||
// Ensure blocklist updates do not hit the network
|
||||
["services.settings.server", "http://%(server)s/dummy/blocklist/"],
|
||||
|
||||
// Do not automatically fill sign-in forms with known usernames and
|
||||
// passwords
|
||||
["signon.autofillForms", false],
|
||||
|
||||
// Disable password capture, so that tests that include forms are not
|
||||
// influenced by the presence of the persistent doorhanger notification
|
||||
["signon.rememberSignons", false],
|
||||
|
||||
// Disable first-run welcome page
|
||||
["startup.homepage_welcome_url", "about:blank"],
|
||||
["startup.homepage_welcome_url.additional", ""],
|
||||
|
||||
// Prevent starting into safe mode after application crashes
|
||||
["toolkit.startup.max_resumed_crashes", -1],
|
||||
]);
|
||||
|
||||
const RecommendedPreferences = {
|
||||
alteredPrefs: new Set(),
|
||||
|
||||
/**
|
||||
* Apply the provided map of preferences.
|
||||
* They will be automatically reset on application shutdown.
|
||||
*
|
||||
* @param {Map} preferences
|
||||
* Map of preference key to preference value.
|
||||
*/
|
||||
applyPreferences(preferences) {
|
||||
for (const [k, v] of preferences) {
|
||||
if (!Preferences.isSet(k)) {
|
||||
logger.debug(`Setting recommended pref ${k} to ${v}`);
|
||||
Preferences.set(k, v);
|
||||
|
||||
// Keep track all the altered preferences to restore them on
|
||||
// quit-application.
|
||||
this.alteredPrefs.add(k);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
init() {
|
||||
// Apply common recommended preferences on module initialization.
|
||||
this.applyPreferences(COMMON_PREFERENCES);
|
||||
Services.obs.addObserver(this, "quit-application");
|
||||
},
|
||||
|
||||
observe(subject, topic) {
|
||||
if (topic === "quit-application") {
|
||||
Services.obs.removeObserver(this, "quit-application");
|
||||
this.restoreAllPreferences();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Restore all the altered preferences.
|
||||
*/
|
||||
restoreAllPreferences() {
|
||||
this.restorePreferences(this.alteredPrefs);
|
||||
},
|
||||
|
||||
/**
|
||||
* Restore provided preferences.
|
||||
*
|
||||
* @param {Map} preferences
|
||||
* Map of preferences that should be restored.
|
||||
*/
|
||||
restorePreferences(preferences) {
|
||||
for (const k of preferences.keys()) {
|
||||
logger.debug(`Resetting recommended pref ${k}`);
|
||||
Preferences.reset(k);
|
||||
this.alteredPrefs.delete(k);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
RecommendedPreferences.init();
|
|
@ -0,0 +1,68 @@
|
|||
/* 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/. */
|
||||
|
||||
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
const { Log } = ChromeUtils.import("chrome://remote/content/shared/Log.jsm");
|
||||
const logger = Log.get();
|
||||
|
||||
const COMMON_PREF = "toolkit.startup.max_resumed_crashes";
|
||||
|
||||
const MARIONETTE_PREF = "dom.disable_beforeunload";
|
||||
const MARIONETTE_RECOMMENDED_PREFS = new Map([[MARIONETTE_PREF, true]]);
|
||||
|
||||
const CDP_PREF = "browser.contentblocking.features.standard";
|
||||
const CDP_RECOMMENDED_PREFS = new Map([
|
||||
[CDP_PREF, "-tp,tpPrivate,cookieBehavior0,-cm,-fp"],
|
||||
]);
|
||||
|
||||
add_task(async function test_RecommendedPreferences() {
|
||||
info("Check initial values for the test preferences");
|
||||
checkPreferences({ cdp: false, common: false, marionette: false });
|
||||
|
||||
info("Common preferences will be applied on load");
|
||||
const { RecommendedPreferences } = ChromeUtils.import(
|
||||
"chrome://remote/content/shared/RecommendedPreferences.jsm"
|
||||
);
|
||||
checkPreferences({ cdp: false, common: true, marionette: false });
|
||||
|
||||
info("Apply recommended preferences for a marionette client");
|
||||
RecommendedPreferences.applyPreferences(MARIONETTE_RECOMMENDED_PREFS);
|
||||
checkPreferences({ cdp: false, common: true, marionette: true });
|
||||
|
||||
info("Apply recommended preferences for a cdp client");
|
||||
RecommendedPreferences.applyPreferences(CDP_RECOMMENDED_PREFS);
|
||||
checkPreferences({ cdp: true, common: true, marionette: true });
|
||||
|
||||
info("Restore marionette preferences");
|
||||
RecommendedPreferences.restorePreferences(MARIONETTE_RECOMMENDED_PREFS);
|
||||
checkPreferences({ cdp: true, common: true, marionette: false });
|
||||
|
||||
info("Restore cdp preferences");
|
||||
RecommendedPreferences.restorePreferences(CDP_RECOMMENDED_PREFS);
|
||||
checkPreferences({ cdp: false, common: true, marionette: false });
|
||||
|
||||
info("Restore all the altered preferences");
|
||||
RecommendedPreferences.restoreAllPreferences();
|
||||
checkPreferences({ cdp: false, common: false, marionette: false });
|
||||
|
||||
info("Attemps to restore again");
|
||||
RecommendedPreferences.restoreAllPreferences();
|
||||
checkPreferences({ cdp: false, common: false, marionette: false });
|
||||
});
|
||||
|
||||
function checkPreferences({ cdp, common, marionette }) {
|
||||
checkPreference(COMMON_PREF, { hasValue: common });
|
||||
checkPreference(MARIONETTE_PREF, { hasValue: marionette });
|
||||
checkPreference(CDP_PREF, { hasValue: cdp });
|
||||
}
|
||||
|
||||
function checkPreference(pref, { hasValue }) {
|
||||
equal(
|
||||
Services.prefs.prefHasUserValue(pref),
|
||||
hasValue,
|
||||
hasValue
|
||||
? `The preference ${pref} has a user value`
|
||||
: `The preference ${pref} has no user value`
|
||||
);
|
||||
}
|
|
@ -3,4 +3,5 @@
|
|||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
[test_Format.js]
|
||||
[test_RecommendedPreferences.js]
|
||||
[test_Sync.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче