diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..a194a5c
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,13 @@
+stages:
+ - build
+
+
+create-patch:
+ stage: build
+ variables:
+ GIT_DEPTH: 200
+ script:
+ - git diff 1fee314adc81000294fc0cf3196a758e4b64dace > librewolf-pref-pane.patch
+ artifacts:
+ paths:
+ - librewolf-pref-pane.patch
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 4f3babe..0aa6f60 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -11,9 +11,14 @@ browser.jar:
content/browser/preferences/home.js
content/browser/preferences/search.js
content/browser/preferences/privacy.js
+ content/browser/preferences/librewolf.js
content/browser/preferences/containers.js
content/browser/preferences/sync.js
content/browser/preferences/experimental.js
+ content/browser/preferences/moreFromMozilla.js
content/browser/preferences/fxaPairDevice.xhtml
content/browser/preferences/fxaPairDevice.js
content/browser/preferences/findInPage.js
+ content/browser/preferences/more-from-mozilla-qr-code-simple.svg
+ content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg
+ content/browser/preferences/more-from-mozilla-qr-code-advanced.svg
diff --git a/browser/components/preferences/librewolf.inc.xhtml b/browser/components/preferences/librewolf.inc.xhtml
new file mode 100644
index 0000000..7a582fb
--- /dev/null
+++ b/browser/components/preferences/librewolf.inc.xhtml
@@ -0,0 +1,254 @@
+# 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/.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/browser/components/preferences/librewolf.js b/browser/components/preferences/librewolf.js
new file mode 100644
index 0000000..bd20104
--- /dev/null
+++ b/browser/components/preferences/librewolf.js
@@ -0,0 +1,260 @@
+/* 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-globals-from extensionControlled.js */
+/* import-globals-from preferences.js */
+
+var { AppConstants } = ChromeUtils.import( "resource://gre/modules/AppConstants.jsm");
+XPCOMUtils.defineLazyGetter(this, "L10n", () => {
+ return new Localization([
+ "branding/brand.ftl",
+ "browser/preferences/preferences.ftl",
+ ]);
+});
+
+Preferences.addAll([
+ // IPv6
+ { id: "network.dns.disableIPv6", type: "bool" },
+ // ocsp hard-fail
+ { id: "security.OCSP.require", type: "bool" },
+ // ocsp hard-fail
+ { id: "identity.fxaccounts.enabled", type: "bool" },
+ // WebGL
+ { id: "webgl.disabled", type: "bool" },
+ // RFP
+ { id: "privacy.resistFingerprinting", type: "bool" },
+ // Automatically Update Extensions
+ { id: "extensions.update.enabled", type: "bool" },
+ { id: "extensions.update.autoUpdateDefault", type: "bool" },
+ // Clipboard autocopy/paste
+ { id: "clipboard.autocopy", type: "bool" },
+ { id: "middlemouse.paste", type: "bool" },
+ // XOrigin referrers
+ { id: "network.http.referer.XOriginPolicy", type: "int"},
+ // Harden
+ { id: "privacy.resistFingerprinting.letterboxing", type: "bool" },
+ // Google Safe Browsing
+ //{ id: "browser.safebrowsing.malware.enabled", type: "bool" }, // Already loaded
+ //{ id: "browser.safebrowsing.phishing.enabled", type: "bool" },
+ { id: "browser.safebrowsing.blockedURIs.enabled", type: "bool" },
+ { id: "browser.safebrowsing.provider.google4.gethashURL", type: "string" },
+ { id: "browser.safebrowsing.provider.google4.updateURL", type: "string" },
+ { id: "browser.safebrowsing.provider.google.gethashURL", type: "string" },
+ { id: "browser.safebrowsing.provider.google.updateURL", type: "string" },
+ /**** Prefs that require changing a lockPref ****/
+ // Google safe browsing check downloads
+ //{ id: "browser.safebrowsing.downloads.enabled", type: "bool" }, //Also already added
+ { id: "toolkit.legacyUserProfileCustomizations.stylesheets", type: "bool" },
+ // Canvas UI when blocked
+ { id: "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", type: "bool" },
+]);
+
+var gLibrewolfPane = {
+ _pane: null,
+
+ // called when the document is first parsed
+ init() {
+ this._pane = document.getElementById("paneLibrewolf");
+
+ // Set all event listeners on checkboxes
+ setBoolSyncListeners(
+ "librewolf-extension-update-checkbox",
+ ["extensions.update.autoUpdateDefault", "extensions.update.enabled"],
+ [true, true ],
+ );
+ setBoolSyncListeners(
+ "librewolf-ipv6-checkbox",
+ ["network.dns.disableIPv6"],
+ [false, ],
+ );
+ setBoolSyncListeners(
+ "librewolf-ocsp-checkbox",
+ ["security.OCSP.require"],
+ [true, ],
+ );
+ setBoolSyncListeners(
+ "librewolf-sync-checkbox",
+ ["identity.fxaccounts.enabled"],
+ [true, ],
+ );
+ setBoolSyncListeners(
+ "librewolf-autocopy-checkbox",
+ ["clipboard.autocopy", "middlemouse.paste"],
+ [true, true ],
+ );
+ setBoolSyncListeners(
+ "librewolf-styling-checkbox",
+ ["toolkit.legacyUserProfileCustomizations.stylesheets"],
+ [true, ],
+ );
+
+ setBoolSyncListeners(
+ "librewolf-webgl-checkbox",
+ ["webgl.disabled"],
+ [false ],
+ );
+ setBoolSyncListeners(
+ "librewolf-rfp-checkbox",
+ ["privacy.resistFingerprinting"],
+ [true ],
+ );
+ setBoolSyncListeners(
+ "librewolf-auto-decline-canvas-checkbox",
+ ["privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts"],
+ [true ],
+ );
+
+ setBoolSyncListeners(
+ "librewolf-letterboxing-checkbox",
+ ["privacy.resistFingerprinting.letterboxing"],
+ [true ],
+ );
+
+ setSyncListeners(
+ "librewolf-goog-safe-checkbox",
+ [
+ "browser.safebrowsing.malware.enabled",
+ "browser.safebrowsing.phishing.enabled",
+ "browser.safebrowsing.blockedURIs.enabled",
+ "browser.safebrowsing.provider.google4.gethashURL",
+ "browser.safebrowsing.provider.google4.updateURL",
+ "browser.safebrowsing.provider.google.gethashURL",
+ "browser.safebrowsing.provider.google.updateURL",
+ ],
+ [
+ true,
+ true,
+ true,
+ "https://safebrowsing.googleapis.com/v4/fullHashes:find?$ct=application/x-protobuf&key=%GOOGLE_SAFEBROWSING_API_KEY%&$httpMethod=POST",
+ "https://safebrowsing.googleapis.com/v4/threatListUpdates:fetch?$ct=application/x-protobuf&key=%GOOGLE_SAFEBROWSING_API_KEY%&$httpMethod=POST",
+ "https://safebrowsing.google.com/safebrowsing/gethash?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2",
+ "https://safebrowsing.google.com/safebrowsing/downloads?client=SAFEBROWSING_ID&appver=%MAJOR_VERSION%&pver=2.2&key=%GOOGLE_SAFEBROWSING_API_KEY%",
+ ],
+ [
+ false,
+ false,
+ false,
+ "",
+ "",
+ "",
+ "",
+ ]
+ );
+
+ Preferences.get("network.http.referer.XOriginPolicy").on("change", syncXOriginPolicy(Preferences.get("network.http.referer.XOriginPolicy")));
+
+ // Set event listener on open profile directory button
+ setEventListener("librewolf-open-profile", "command", openProfileDirectory);
+ // Set event listener on open about:config button
+ setEventListener("librewolf-config-link", "click", openAboutConfig);
+
+ // Notify observers that the UI is now ready
+ Services.obs.notifyObservers(window, "librewolf-pane-loaded");
+ },
+};
+
+function syncXOriginPolicy(prefValue) {
+ if (prefValue == "0" || prefValue == "1") {
+ Services.prefs.setIntPref("network.http.referer.XOriginPolicy", 2);
+ } else {
+ Services.prefs.setIntPref("network.http.referer.XOriginPolicy", 0);
+ }
+}
+
+function openProfileDirectory() {
+ // Get the profile directory.
+ let currProfD = Services.dirsvc.get("ProfD", Ci.nsIFile);
+ let profileDir = currProfD.path;
+
+ // Show the profile directory.
+ let nsLocalFile = Components.Constructor(
+ "@mozilla.org/file/local;1",
+ "nsIFile",
+ "initWithPath"
+ );
+ new nsLocalFile(profileDir).reveal();
+}
+
+function openAboutConfig() {
+ window.open("about:config", "_blank");
+}
+
+function setBoolSyncListeners(checkboxid, opts, vals) {
+ setSyncFromPrefListener(checkboxid, () => readGenericBoolPrefs(opts, vals));
+ setSyncToPrefListener(checkboxid, () => writeGenericBoolPrefs(opts, vals, document.getElementById(checkboxid).checked));
+ for (let i = 1; i < opts.length; i++) {
+ Preferences.get(opts[i]).on("change", () => makeMasterCheckboxesReactive(checkboxid, () => readGenericBoolPrefs(opts, vals)));
+ }
+}
+function setSyncListeners(checkboxid, opts, onVals, offVals) {
+ setSyncFromPrefListener(checkboxid, () => readGenericPrefs(opts, onVals, offVals));
+ setSyncToPrefListener(checkboxid, () => writeGenericPrefs(opts, onVals, offVals, document.getElementById(checkboxid).checked));
+ for (let i = 1; i < opts.length; i++) {
+ Preferences.get(opts[i]).on("change", () => makeMasterCheckboxesReactive(checkboxid, () => readGenericPrefs(opts, onVals, offVals)));
+ }
+}
+
+function makeMasterCheckboxesReactive(checkboxid, func) {
+ let shouldBeChecked = func();
+ document.getElementById(checkboxid).checked = shouldBeChecked;
+}
+
+// Wrapper function in case something more is required (as I suspected in the first iteration of this)
+function getPref(pref) {
+ let retval = Preferences.get(pref);
+/* if (retval === undefined) {
+ return defaultValue;
+ } */
+ return retval._value;
+}
+// Returns true if all the preferences in prefs are equal to onVals, false otherwise TODO may need a third array for their default values because mozilla is dumb, after testing though pretty sure this was misinformation being spread by comments in default FF code that has long since been fixed
+function readGenericBoolPrefs(prefs, onVals) {
+ for (let i = 0; i < prefs.length; i++) {
+ if (getPref(prefs[i]) != onVals[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+function writeGenericBoolPrefs(opts, vals, changeToOn) {
+ valsCopy = [...vals];
+ if (!changeToOn) {
+ for (let i = 0; i < vals.length; i++) {
+ valsCopy[i] = !vals[i];
+ }
+ }
+ // Start at 1 because returning sets the last one
+ for (let i = 1; i < vals.length; i++) {
+ Services.prefs.setBoolPref(opts[i], valsCopy[i]);
+ }
+ return valsCopy[0];
+}
+
+// Returns true if all the preferences in prefs are equal to onVals, false otherwise... currently the same as for Bool as offVals is ignored
+function readGenericPrefs(prefs, onVals, offVals) {
+ for (let i = 0; i < prefs.length; i ++) {
+ let temp = getPref(prefs[i]);
+ if (getPref(prefs[i]) != onVals[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+function writeGenericPrefs(opts, onVals, offVals, changeToOn) {
+ let writeArr = (changeToOn) ? onVals : offVals;
+ for (let i = 1; i < opts.length; i++) {
+ let type = typeof(writeArr[i]);
+ if (type == "number") {
+ Services.prefs.setIntPref(opts[i], writeArr[i]);
+ } else if (type == "boolean") {
+ Services.prefs.setBoolPref(opts[i], writeArr[i]);
+ } else if (type == "string") {
+ Services.prefs.setCharPref(opts[i], writeArr[i]);
+ } else {
+ console.log("BADNESS 10000");
+ }
+ }
+ return writeArr[0];
+}
+
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 91e9e46..7d401fc 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -8,27 +8,88 @@
/* import-globals-from search.js */
/* import-globals-from containers.js */
/* import-globals-from privacy.js */
+/* import-globals-from librewolf.js */
/* import-globals-from sync.js */
/* import-globals-from experimental.js */
+/* import-globals-from moreFromMozilla.js */
/* import-globals-from findInPage.js */
-/* import-globals-from ../../base/content/utilityOverlay.js */
-/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
+/* import-globals-from /browser/base/content/utilityOverlay.js */
+/* import-globals-from /toolkit/content/preferencesBindings.js */
"use strict";
+var { AppConstants } = ChromeUtils.import(
+ "resource://gre/modules/AppConstants.jsm"
+);
var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-ChromeUtils.defineModuleGetter(
- this,
- "AMTelemetry",
- "resource://gre/modules/AddonManager.jsm"
+var { Downloads } = ChromeUtils.import("resource://gre/modules/Downloads.jsm");
+var { Integration } = ChromeUtils.import(
+ "resource://gre/modules/Integration.jsm"
);
-ChromeUtils.defineModuleGetter(
+/* global DownloadIntegration */
+Integration.downloads.defineModuleGetter(
this,
- "formAutofillParent",
- "resource://formautofill/FormAutofillParent.jsm"
+ "DownloadIntegration",
+ "resource://gre/modules/DownloadIntegration.jsm"
+);
+
+var { PrivateBrowsingUtils } = ChromeUtils.import(
+ "resource://gre/modules/PrivateBrowsingUtils.jsm"
);
+var { Weave } = ChromeUtils.import("resource://services-sync/main.js");
+var { FxAccounts, fxAccounts } = ChromeUtils.import(
+ "resource://gre/modules/FxAccounts.jsm"
+);
+
+XPCOMUtils.defineLazyServiceGetters(this, {
+ gApplicationUpdateService: [
+ "@mozilla.org/updates/update-service;1",
+ "nsIApplicationUpdateService",
+ ],
+
+ listManager: [
+ "@mozilla.org/url-classifier/listmanager;1",
+ "nsIUrlListManager",
+ ],
+ gHandlerService: [
+ "@mozilla.org/uriloader/handler-service;1",
+ "nsIHandlerService",
+ ],
+ gMIMEService: ["@mozilla.org/mime;1", "nsIMIMEService"],
+});
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+ AMTelemetry: "resource://gre/modules/AddonManager.jsm",
+ BrowserUtils: "resource://gre/modules/BrowserUtils.jsm",
+ CloudStorage: "resource://gre/modules/CloudStorage.jsm",
+ ContextualIdentityService:
+ "resource://gre/modules/ContextualIdentityService.jsm",
+ DownloadUtils: "resource://gre/modules/DownloadUtils.jsm",
+ ExtensionPreferencesManager:
+ "resource://gre/modules/ExtensionPreferencesManager.jsm",
+ ExtensionSettingsStore: "resource://gre/modules/ExtensionSettingsStore.jsm",
+ FileUtils: "resource://gre/modules/FileUtils.jsm",
+ formAutofillParent: "resource://formautofill/FormAutofillParent.jsm",
+ FeatureGate: "resource://featuregates/FeatureGate.jsm",
+ HomePage: "resource:///modules/HomePage.jsm",
+ LoginHelper: "resource://gre/modules/LoginHelper.jsm",
+ NimbusFeatures: "resource://nimbus/ExperimentAPI.jsm",
+ OSKeyStore: "resource://gre/modules/OSKeyStore.jsm",
+ PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
+ SelectionChangedMenulist: "resource:///modules/SelectionChangedMenulist.jsm",
+ ShortcutUtils: "resource://gre/modules/ShortcutUtils.jsm",
+ SiteDataManager: "resource:///modules/SiteDataManager.jsm",
+ TransientPrefs: "resource:///modules/TransientPrefs.jsm",
+ UpdateUtils: "resource://gre/modules/UpdateUtils.jsm",
+ UIState: "resource://services-sync/UIState.jsm",
+ UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm",
+ UrlbarProviderQuickSuggest:
+ "resource:///modules/UrlbarProviderQuickSuggest.jsm",
+ UrlbarUtils: "resource:///modules/UrlbarUtils.jsm",
+});
+
XPCOMUtils.defineLazyGetter(this, "gSubDialog", function() {
const { SubDialogManager } = ChromeUtils.import(
"resource://gre/modules/SubDialog.jsm"
@@ -41,12 +102,15 @@ XPCOMUtils.defineLazyGetter(this, "gSubDialog", function() {
"chrome://browser/skin/preferences/dialog.css",
"chrome://browser/skin/preferences/preferences.css",
],
- resizeCallback: ({ title, frame }) => {
+ resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword.
- gSearchResultsPane.searchWithinNode(title, gSearchResultsPane.query);
+ await gSearchResultsPane.searchWithinNode(
+ title,
+ gSearchResultsPane.query
+ );
// Search within sub-dialog document and highlight matched keyword.
- gSearchResultsPane.searchWithinNode(
+ await gSearchResultsPane.searchWithinNode(
frame.contentDocument.firstElementChild,
gSearchResultsPane.query
);
@@ -86,6 +150,7 @@ function register_module(categoryName, categoryObject) {
gCategoryInits.set(categoryName, {
inited: false,
async init() {
+ let startTime = performance.now();
let template = document.getElementById("template-" + categoryName);
if (template) {
// Replace the template element with the nodes inside of it.
@@ -97,13 +162,18 @@ function register_module(categoryName, categoryObject) {
template.replaceWith(frag);
document.l10n.resumeObserving();
- // Asks Preferences to update the attribute value of the entire
- // document again (this can be simplified if we could seperate the
- // preferences of each pane.)
- Preferences.updateAllElements();
+ // We need to queue an update again because the previous update might
+ // have happened while we awaited on translateFragment.
+ Preferences.queueUpdateOfAllElements();
}
+
categoryObject.init();
this.inited = true;
+ ChromeUtils.addProfilerMarker(
+ "Preferences",
+ { startTime },
+ categoryName + " init"
+ );
},
});
}
@@ -113,10 +183,16 @@ document.addEventListener("DOMContentLoaded", init_all, { once: true });
function init_all() {
Preferences.forceEnableInstantApply();
+ // Asks Preferences to queue an update of the attribute values of
+ // the entire document.
+ Preferences.queueUpdateOfAllElements();
+ Services.telemetry.setEventRecordingEnabled("aboutpreferences", true);
+
register_module("paneGeneral", gMainPane);
register_module("paneHome", gHomePane);
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
+ register_module("paneLibrewolf", gLibrewolfPane);
register_module("paneContainers", gContainersPane);
if (Services.prefs.getBoolPref("browser.preferences.experimental")) {
// Set hidden based on previous load's hidden value.
@@ -128,6 +204,15 @@ function init_all() {
);
register_module("paneExperimental", gExperimentalPane);
}
+
+ NimbusFeatures.moreFromMozilla.recordExposureEvent({ once: true });
+ if (NimbusFeatures.moreFromMozilla.getVariable("enabled")) {
+ document.getElementById("category-more-from-mozilla").hidden = false;
+ gMoreFromMozillaPane.option = NimbusFeatures.moreFromMozilla.getVariable(
+ "template"
+ );
+ register_module("paneMoreFromMozilla", gMoreFromMozillaPane);
+ }
// The Sync category needs to be the last of the "real" categories
// registered and inititalized since many tests wait for the
// "sync-pane-loaded" observer notification before starting the test.
@@ -155,6 +240,10 @@ function init_all() {
window.addEventListener("hashchange", onHashChange);
+ document.getElementById("focusSearch1").addEventListener("command", () => {
+ gSearchResultsPane.searchInput.focus();
+ });
+
gotoPref().then(() => {
let helpButton = document.getElementById("helpButton");
let helpUrl =
@@ -201,16 +290,19 @@ function telemetryBucketForCategory(category) {
}
function onHashChange() {
- gotoPref();
+ gotoPref(null, "hash");
}
-async function gotoPref(aCategory) {
+async function gotoPref(
+ aCategory,
+ aShowReason = aCategory ? "click" : "initial"
+) {
let categories = document.getElementById("categories");
const kDefaultCategoryInternalName = "paneGeneral";
const kDefaultCategory = "general";
let hash = document.location.hash;
-
let category = aCategory || hash.substr(1) || kDefaultCategoryInternalName;
+
let breakIndex = category.indexOf("-");
// Subcategories allow for selecting smaller sections of the preferences
// until proper search support is enabled (bug 1353954).
@@ -292,10 +384,19 @@ async function gotoPref(aCategory) {
search(category, "data-category");
- let mainContent = document.querySelector(".main-content");
- mainContent.scrollTop = 0;
+ if (aShowReason != "initial") {
+ document.querySelector(".main-content").scrollTop = 0;
+ }
spotlight(subcategory, category);
+
+ // Record which category is shown
+ Services.telemetry.recordEvent(
+ "aboutpreferences",
+ "show",
+ aShowReason,
+ category
+ );
}
function search(aQuery, aAttribute) {
@@ -510,9 +611,26 @@ function appendSearchKeywords(aId, keywords) {
element.setAttribute("searchkeywords", keywords.join(" "));
}
+async function ensureScrollPadding() {
+ let stickyContainer = document.querySelector(".sticky-container");
+ let height = await window.browsingContext.topChromeWindow
+ .promiseDocumentFlushed(() => stickyContainer.clientHeight)
+ .catch(err => Cu.reportError); // Can reject if the window goes away.
+
+ // Make it a bit more, to ensure focus rectangles etc. don't get cut off.
+ // This being 8px causes us to end up with 90px if the policies container
+ // is not visible (the common case), which matches the CSS and thus won't
+ // cause a style change, repaint, or other changes.
+ height += 8;
+ stickyContainer
+ .closest(".main-content")
+ .style.setProperty("scroll-padding-top", height + "px");
+}
+
function maybeDisplayPoliciesNotice() {
if (Services.policies.status == Services.policies.ACTIVE) {
document.getElementById("policies-container").removeAttribute("hidden");
+ ensureScrollPadding();
}
}
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index aab4a9e..d815682 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -6,12 +6,14 @@
+
+
@@ -21,19 +23,18 @@
id="preferences-root">
-
-
+
+
+
+
@@ -53,6 +54,7 @@
+
@@ -128,6 +130,17 @@
+
+
+
+
+
+
+
+
+
@@ -168,32 +191,31 @@
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
#include searchResults.inc.xhtml
@@ -201,9 +223,11 @@
#include home.inc.xhtml
#include search.inc.xhtml
#include privacy.inc.xhtml
+#include librewolf.inc.xhtml
#include containers.inc.xhtml
#include sync.inc.xhtml
#include experimental.inc.xhtml
+#include moreFromMozilla.inc.xhtml
diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl
index d276f7a..40fdfef 100644
--- a/browser/locales/en-US/browser/preferences/preferences.ftl
+++ b/browser/locales/en-US/browser/preferences/preferences.ftl
@@ -139,8 +139,8 @@ set-as-my-default-browser =
.label = Make Default…
.accesskey = D
-startup-restore-previous-session =
- .label = Restore previous session
+startup-restore-windows-and-tabs =
+ .label = Open previous windows and tabs
.accesskey = s
startup-restore-warn-on-quit =
@@ -159,16 +159,25 @@ open-new-link-as-tabs =
.label = Open links in tabs instead of new windows
.accesskey = w
-warn-on-close-multiple-tabs =
- .label = Warn you when closing multiple tabs
+confirm-on-close-multiple-tabs =
+ .label = Confirm before closing multiple tabs
.accesskey = m
+# This string is used for the confirm before quitting preference.
+# Variables:
+# $quitKey (String) - the quit keyboard shortcut, and formatted
+# in the same manner as it would appear,
+# for example, in the File menu.
+confirm-on-quit-with-key =
+ .label = Confirm before quitting with { $quitKey }
+ .accesskey = b
+
warn-on-open-many-tabs =
.label = Warn you when opening multiple tabs might slow down { -brand-short-name }
.accesskey = d
-switch-links-to-new-tabs =
- .label = When you open a link in a new tab, switch to it immediately
+switch-to-new-tabs =
+ .label = When you open a link, image or media in a new tab, switch to it immediately
.accesskey = h
show-tabs-in-taskbar =
@@ -263,6 +272,8 @@ translate-web-pages =
.label = Translate web content
.accesskey = T
+fx-translate-web-pages = { -translations-brand-name }
+
# The element is replaced by the logo of the provider
# used to provide machine translations for web pages.
translate-attribution = Translations by
@@ -443,6 +454,10 @@ update-application-use-service =
.label = Use a background service to install updates
.accesskey = b
+update-application-suppress-prompts =
+ .label = Show fewer update notification prompts
+ .accesskey = n
+
update-setting-write-failure-title2 = Error saving Update settings
# Variables:
@@ -502,6 +517,10 @@ browsing-use-smooth-scrolling =
.label = Use smooth scrolling
.accesskey = m
+browsing-gtk-use-non-overlay-scrollbars =
+ .label = Always show scrollbars
+ .accesskey = o
+
browsing-use-onscreen-keyboard =
.label = Show a touch keyboard when necessary
.accesskey = c
@@ -600,11 +619,6 @@ home-prefs-content-description = Choose what content you want on your Firefox Ho
home-prefs-search-header =
.label = Web Search
-home-prefs-topsites-header =
- .label = Top Sites
-home-prefs-topsites-description = The sites you visit most
-home-prefs-topsites-by-option-sponsored =
- .label = Sponsored Top Sites
home-prefs-shortcuts-header =
.label = Shortcuts
home-prefs-shortcuts-description = Sites you save or visit
@@ -616,7 +630,6 @@ home-prefs-shortcuts-by-option-sponsored =
home-prefs-recommended-by-header =
.label = Recommended by { $provider }
-home-prefs-recommended-by-description-update = Exceptional content from across the web, curated by { $provider }
home-prefs-recommended-by-description-new = Exceptional content curated by { $provider }, part of the { -brand-product-name } family
##
@@ -625,9 +638,6 @@ home-prefs-recommended-by-learn-more = How it works
home-prefs-recommended-by-option-sponsored-stories =
.label = Sponsored Stories
-home-prefs-highlights-header =
- .label = Highlights
-home-prefs-highlights-description = A selection of sites that you’ve saved or visited
home-prefs-highlights-option-visited-pages =
.label = Visited Pages
home-prefs-highlights-options-bookmarks =
@@ -647,7 +657,6 @@ home-prefs-recent-activity-description = A selection of recent sites and content
# and non-essential but also not entirely trivial and useless.
home-prefs-snippets-header =
.label = Snippets
-home-prefs-snippets-description = Updates from { -vendor-short-name } and { -brand-product-name }
home-prefs-snippets-description-new = Tips and news from { -vendor-short-name } and { -brand-product-name }
@@ -946,6 +955,10 @@ forms-primary-pw-former-name = Formerly known as Master Password
forms-primary-pw-fips-title = You are currently in FIPS mode. FIPS requires a non-empty Primary Password.
forms-master-pw-fips-desc = Password Change Failed
+forms-windows-sso =
+ .label = Allow Windows single sign-on for Microsoft, work, and school accounts
+forms-windows-sso-learn-more-link = Learn more
+forms-windows-sso-desc = Manage accounts in your device settings
## OS Authentication dialog
@@ -1045,10 +1058,10 @@ sitedata-option-block-cross-site-trackers =
.label = Cross-site trackers
sitedata-option-block-cross-site-and-social-media-trackers =
.label = Cross-site and social media trackers
-sitedata-option-block-cross-site-tracking-cookies-including-social-media =
- .label = Cross-site tracking cookies — includes social media cookies
-sitedata-option-block-cross-site-cookies-including-social-media =
- .label = Cross-site cookies — includes social media cookies
+sitedata-option-block-cross-site-tracking-cookies =
+ .label = Cross-site tracking cookies
+sitedata-option-block-cross-site-cookies =
+ .label = Cross-site tracking cookies, and isolate other cross-site cookies
sitedata-option-block-cross-site-and-social-media-trackers-plus-isolate =
.label = Cross-site and social media trackers, and isolate remaining cookies
sitedata-option-block-unvisited =
@@ -1127,6 +1140,7 @@ enhanced-tracking-protection-setting-custom =
content-blocking-etp-standard-desc = Balanced for protection and performance. Pages will load normally.
content-blocking-etp-strict-desc = Stronger protection, but may cause some sites or content to break.
content-blocking-etp-custom-desc = Choose which trackers and scripts to block.
+content-blocking-etp-blocking-desc = { -brand-short-name } blocks the following:
content-blocking-private-windows = Tracking content in Private Windows
content-blocking-cross-site-cookies-in-all-windows = Cross-site cookies in all windows (includes tracking cookies)
@@ -1141,6 +1155,16 @@ content-blocking-all-third-party-cookies = All third-party cookies
content-blocking-cryptominers = Cryptominers
content-blocking-fingerprinters = Fingerprinters
+# "Test pilot" is used as a verb. Possible alternatives:
+# "Be the first to try", "Join an early experiment".
+content-blocking-etp-standard-tcp-rollout-checkbox =
+ .label = Test pilot our most powerful privacy feature ever
+ .accesskey = T
+
+# "Contains" here means "isolates", "limits".
+content-blocking-etp-standard-tcp-rollout-description = Total Cookie Protection contains cookies to the site you’re on, so trackers can’t use them to follow you between sites.
+content-blocking-etp-standard-tcp-rollout-learn-more = Learn more
+
content-blocking-warning-title = Heads up!
content-blocking-and-isolating-etp-warning-description = Blocking trackers and isolating cookies could impact the functionality of some sites. Reload a page with trackers to load all content.
content-blocking-and-isolating-etp-warning-description-2 = This setting may cause some websites to not display content or work correctly. If a site seems broken, you may want to turn off tracking protection for that site to load all content.
@@ -1230,9 +1254,12 @@ permissions-block-popups =
.label = Block pop-up windows
.accesskey = B
-permissions-block-popups-exceptions =
+# "popup" is a misspelling that is more popular than the correct spelling of
+# "pop-up" so it's included as a search keyword, not displayed in the UI.
+permissions-block-popups-exceptions-button =
.label = Exceptions…
.accesskey = E
+ .searchkeywords = popups
permissions-addon-install-warning =
.label = Warn you when websites try to install add-ons
@@ -1269,10 +1296,8 @@ addon-recommendations-link = Learn more
# or builds with no Telemetry support available.
collection-health-report-disabled = Data reporting is disabled for this build configuration
-collection-backlogged-crash-reports =
- .label = Allow { -brand-short-name } to send backlogged crash reports on your behalf
+collection-backlogged-crash-reports-with-link = Allow { -brand-short-name } to send backlogged crash reports on your behalf Learn more
.accesskey = c
-collection-backlogged-crash-reports-link = Learn more
## Privacy Section - Security
##
@@ -1318,7 +1343,7 @@ space-alert-over-5gb-settings-button =
space-alert-over-5gb-message2 = { -brand-short-name } is running out of disk space. Website contents may not display properly. You can clear stored data in Settings > Privacy & Security > Cookies and Site Data.
-space-alert-under-5gb-message2 = { -brand-short-name } is running out of disk space. Website contents may not display properly. Visit “Learn More” to optimize your disk usage for better browsing experience.
+space-alert-under-5gb-message2 = { -brand-short-name } is running out of disk space. Website contents may not display properly. Visit “Learn more” to optimize your disk usage for better browsing experience.
## Privacy Section - HTTPS-Only
@@ -1347,3 +1372,93 @@ choose-download-folder-title = Choose Download Folder:
# $service-name (String) - Name of a cloud storage provider like Dropbox, Google Drive, etc...
save-files-to-cloud-storage =
.label = Save files to { $service-name }
+
+## LibreWolf preferences
+
+# Sidebar
+pane-librewolf-title = LibreWolf
+category-librewolf =
+ .tooltiptext = about:config changes, logically grouped and easily accessible
+
+# Main content
+librewolf-header = LibreWolf Preferences
+librewolf-warning-title = Heads up!
+librewolf-warning-description = We carefully choose default settings to focus on privacy and security. When changing these settings, read the descriptions to understand the implications of those changes.
+
+# Page Layout
+librewolf-general-heading = Browser Behavior
+librewolf-extension-update-checkbox =
+ .label = Update add-ons automatically
+librewolf-sync-checkbox =
+ .label = Enable Firefox Sync
+librewolf-autocopy-checkbox =
+ .label = Enable middle click paste
+librewolf-styling-checkbox =
+ .label = Allow userChrome.css customization
+
+librewolf-network-heading = Networking
+librewolf-ipv6-checkbox =
+ .label = Enable IPv6
+
+librewolf-privacy-heading = Privacy
+librewolf-xorigin-ref-checbox =
+ .label = Limit cross-origin referrers
+
+librewolf-broken-heading = Fingerprinting
+librewolf-webgl-checkbox =
+ .label = Enable WebGL
+librewolf-rfp-checkbox =
+ .label = Enable ResistFingerprinting
+librewolf-auto-decline-canvas-checkbox =
+ .label = Silently block canvas access requests
+librewolf-letterboxing-checkbox =
+ .label = Enable letterboxing
+
+librewolf-security-heading = Security
+librewolf-ocsp-checkbox =
+ .label = Enforce OCSP hard-fail
+librewolf-goog-safe-checkbox =
+ .label = Enable Google Safe Browsing
+librewolf-goog-safe-download-checkbox =
+ .label = Scan downloads
+
+# In-depth descriptions
+librewolf-extension-update-description = Keep extensions up to date without manual intervention. A good choice for your security.
+librewolf-extension-update-warning1 = If you don't review the code of your extensions before every update, you should enable this option.
+
+librewolf-ipv6-description = Allow { -brand-short-name } to connect using IPv6.
+librewolf-ipv6-warning1 = Before you change this, make sure your OS uses the IPv6 privacy extension.
+librewolf-ocsp-description = Prevent connecting to a website if the OCSP check cannot be performed.
+librewolf-ocsp-warning1 = This increases security, but it will cause breakage when an OCSP server is down.
+librewolf-sync-description = Sync your data with other browsers. Requires restart.
+librewolf-sync-warning1 = Firefox Sync encrypts data locally before transmitting it to the server.
+
+librewolf-autocopy-description = Select some text to copy it, then paste it with a middle-mouse click.
+
+librewolf-styling-description = Enable this if you want to customize the UI with a manually loaded theme.
+librewolf-styling-warning1 = Make sure you trust the provider of the theme.
+
+librewolf-xorigin-ref-description = Send a referrer only on same-origin.
+librewolf-xorigin-ref-warning1 = This causes breakage. Additionally, even when sent referrers will still be trimmed.
+
+librewolf-webgl-description = WebGL is a strong fingerprinting vector.
+librewolf-webgl-warning1 = If you need to enable it, consider using an extension like Canvas Blocker.
+
+librewolf-rfp-description = ResistFingerprinting is the best in class anti-fingerprinting tool.
+librewolf-rfp-warning1 = If you need to disable it, consider using an extension like Canvas Blocker.
+
+librewolf-auto-decline-canvas-description = Automatically deny canvas access to websites, without prompting the user.
+librewolf-auto-decline-canvas-warning1 = It is still possible to allow canvas access from the urlbar.
+
+librewolf-letterboxing-description = Letterboxing applies margins around your windows, in order to return a limited set of rounded resolutions.
+
+librewolf-goog-safe-description = If you are worried about malware and phishing, consider enabling it.
+librewolf-goog-safe-warning1 = Disabled over censorship concerns but recommended for less advanced users. All the checks happen locally.
+
+librewolf-goog-safe-download-description = Allow Safe Browsing to scan your downloads to identify suspicious files.
+librewolf-goog-safe-download-warning1 = All the checks happen locally.
+
+# Footer
+librewolf-footer = Useful links
+librewolf-config-link = All advanced settings (about:config)
+librewolf-open-profile = Open user profile directory
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index cf1ebf0..f476053 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -7,70 +7,58 @@
# be specified once. As a result, the source file paths are relative
# to the location of the actual manifest.
+ skin/classic/browser/aboutFrameCrashed.css (../shared/aboutFrameCrashed.css)
skin/classic/browser/aboutNetError.css (../shared/aboutNetError.css)
- skin/classic/browser/blockedSite.css (../shared/blockedSite.css)
- skin/classic/browser/error-pages.css (../shared/error-pages.css)
skin/classic/browser/aboutRestartRequired.css (../shared/aboutRestartRequired.css)
skin/classic/browser/aboutSessionRestore.css (../shared/aboutSessionRestore.css)
- skin/classic/browser/aboutFrameCrashed.css (../shared/aboutFrameCrashed.css)
skin/classic/browser/aboutTabCrashed.css (../shared/aboutTabCrashed.css)
skin/classic/browser/aboutWelcomeBack.css (../shared/aboutWelcomeBack.css)
+ skin/classic/browser/blockedSite.css (../shared/blockedSite.css)
+ skin/classic/browser/error-pages.css (../shared/error-pages.css)
+ skin/classic/browser/offlineSupportPages.css (../shared/offlineSupportPages.css)
+ skin/classic/browser/searchbar.css (../shared/searchbar.css)
skin/classic/browser/setDesktopBackground.css (../shared/setDesktopBackground.css)
+ skin/classic/browser/webRTC-indicator.css (../shared/webRTC-indicator.css)
skin/classic/browser/addons/addon-install-blocked.svg (../shared/addons/addon-install-blocked.svg)
skin/classic/browser/addons/addon-install-downloading.svg (../shared/addons/addon-install-downloading.svg)
skin/classic/browser/addons/addon-install-error.svg (../shared/addons/addon-install-error.svg)
skin/classic/browser/addons/addon-install-installed.svg (../shared/addons/addon-install-installed.svg)
skin/classic/browser/addons/addon-install-warning.svg (../shared/addons/addon-install-warning.svg)
skin/classic/browser/controlcenter/3rdpartycookies.svg (../shared/controlcenter/3rdpartycookies.svg)
- skin/classic/browser/controlcenter/3rdpartycookies-disabled.svg (../shared/controlcenter/3rdpartycookies-disabled.svg)
skin/classic/browser/controlcenter/cryptominers.svg (../shared/controlcenter/cryptominers.svg)
skin/classic/browser/controlcenter/dashboard.svg (../shared/controlcenter/dashboard.svg)
- skin/classic/browser/controlcenter/cryptominers-disabled.svg (../shared/controlcenter/cryptominers-disabled.svg)
skin/classic/browser/controlcenter/mcb-disabled.svg (../shared/controlcenter/mcb-disabled.svg)
skin/classic/browser/controlcenter/etp-milestone.svg (../shared/controlcenter/etp-milestone.svg)
- skin/classic/browser/controlcenter/fingerprinters.svg (../shared/controlcenter/fingerprinters.svg)
- skin/classic/browser/controlcenter/fingerprinters-disabled.svg (../shared/controlcenter/fingerprinters-disabled.svg)
- skin/classic/browser/controlcenter/socialblock.svg (../shared/controlcenter/socialblock.svg)
- skin/classic/browser/controlcenter/socialblock-disabled.svg (../shared/controlcenter/socialblock-disabled.svg)
- skin/classic/browser/controlcenter/tracker-image.svg (../shared/controlcenter/tracker-image.svg)
- skin/classic/browser/controlcenter/tracker-image-disabled.svg (../shared/controlcenter/tracker-image-disabled.svg)
- skin/classic/browser/controlcenter/trackers.svg (../shared/controlcenter/trackers.svg)
+ skin/classic/browser/controlcenter/panel.css (../shared/controlcenter/panel.css)
skin/classic/browser/controlcenter/tracking-protection.svg (../shared/controlcenter/tracking-protection.svg)
skin/classic/browser/controlcenter/hero-message-background.svg (../shared/controlcenter/hero-message-background.svg)
+* skin/classic/browser/customizableui/panelUI.inc.css (../shared/customizableui/panelUI.inc.css)
skin/classic/browser/customizableui/empty-overflow-panel.png (../shared/customizableui/empty-overflow-panel.png)
skin/classic/browser/customizableui/empty-overflow-panel@2x.png (../shared/customizableui/empty-overflow-panel@2x.png)
skin/classic/browser/customizableui/density-compact.svg (../shared/customizableui/density-compact.svg)
skin/classic/browser/customizableui/density-normal.svg (../shared/customizableui/density-normal.svg)
skin/classic/browser/customizableui/density-touch.svg (../shared/customizableui/density-touch.svg)
- skin/classic/browser/customizableui/menu-arrow.svg (../shared/customizableui/menu-arrow.svg)
skin/classic/browser/customizableui/whimsy.png (../shared/customizableui/whimsy.png)
+ skin/classic/browser/downloads/allDownloadsView.inc.css (../shared/downloads/allDownloadsView.inc.css)
skin/classic/browser/downloads/contentAreaDownloadsView.css (../shared/downloads/contentAreaDownloadsView.css)
- skin/classic/browser/downloads/download-blocked.svg (../shared/downloads/download-blocked.svg)
+ skin/classic/browser/downloads/download-blockedStates.css (../shared/downloads/download-blockedStates.css)
skin/classic/browser/downloads/download-summary.svg (../shared/downloads/download-summary.svg)
+ skin/classic/browser/downloads/downloads.inc.css (../shared/downloads/downloads.inc.css)
skin/classic/browser/downloads/downloads.svg (../shared/downloads/downloads.svg)
skin/classic/browser/downloads/notification-finish-animation.svg (../shared/downloads/notification-finish-animation.svg)
skin/classic/browser/downloads/notification-start-animation.svg (../shared/downloads/notification-start-animation.svg)
+ skin/classic/browser/downloads/progressmeter.css (../shared/downloads/progressmeter.css)
skin/classic/browser/drm-icon.svg (../shared/drm-icon.svg)
skin/classic/browser/permissions.svg (../shared/identity-block/permissions.svg)
- skin/classic/browser/newInstall.css (../shared/newInstall.css)
- skin/classic/browser/newInstallPage.css (../shared/newInstallPage.css)
- skin/classic/browser/illustrations/blue-berror.svg (../shared/illustrations/blue-berror.svg)
- skin/classic/browser/illustrations/error-connection-failure.svg (../shared/illustrations/error-connection-failure.svg)
- skin/classic/browser/illustrations/error-malformed-url.svg (../shared/illustrations/error-malformed-url.svg)
- skin/classic/browser/illustrations/error-server-not-found.svg (../shared/illustrations/error-server-not-found.svg)
- skin/classic/browser/illustrations/error-session-restore.svg (../shared/illustrations/error-session-restore.svg)
skin/classic/browser/notification-icons/autoplay-media.svg (../shared/notification-icons/autoplay-media.svg)
skin/classic/browser/notification-icons/autoplay-media-blocked.svg (../shared/notification-icons/autoplay-media-blocked.svg)
skin/classic/browser/notification-icons/camera-blocked.svg (../shared/notification-icons/camera-blocked.svg)
skin/classic/browser/notification-icons/camera.svg (../shared/notification-icons/camera.svg)
- skin/classic/browser/notification-icons/canvas-blocked.svg (../shared/notification-icons/canvas-blocked.svg)
- skin/classic/browser/notification-icons/canvas.svg (../shared/notification-icons/canvas.svg)
skin/classic/browser/notification-icons/desktop-notification-blocked.svg (../shared/notification-icons/desktop-notification-blocked.svg)
skin/classic/browser/notification-icons/desktop-notification.svg (../shared/notification-icons/desktop-notification.svg)
skin/classic/browser/notification-icons/drag-indicator.svg (../shared/notification-icons/drag-indicator.svg)
skin/classic/browser/notification-icons/geo.svg (../shared/notification-icons/geo.svg)
skin/classic/browser/notification-icons/geo-blocked.svg (../shared/notification-icons/geo-blocked.svg)
- skin/classic/browser/notification-icons/indexedDB.svg (../shared/notification-icons/indexedDB.svg)
skin/classic/browser/notification-icons/microphone-blocked.svg (../shared/notification-icons/microphone-blocked.svg)
skin/classic/browser/notification-icons/microphone.svg (../shared/notification-icons/microphone.svg)
skin/classic/browser/notification-icons/minimize.svg (../shared/notification-icons/minimize.svg)
@@ -78,17 +66,11 @@
skin/classic/browser/notification-icons/persistent-storage.svg (../shared/notification-icons/persistent-storage.svg)
skin/classic/browser/notification-icons/plugin-badge.svg (../shared/notification-icons/plugin-badge.svg)
skin/classic/browser/notification-icons/popup.svg (../shared/notification-icons/popup.svg)
- skin/classic/browser/notification-icons/popup-subitem.svg (../shared/notification-icons/popup-subitem.svg)
skin/classic/browser/notification-icons/screen-blocked.svg (../shared/notification-icons/screen-blocked.svg)
skin/classic/browser/notification-icons/screen.svg (../shared/notification-icons/screen.svg)
skin/classic/browser/notification-icons/xr-blocked.svg (../shared/notification-icons/xr-blocked.svg)
skin/classic/browser/notification-icons/xr.svg (../shared/notification-icons/xr.svg)
- skin/classic/browser/notification-icons/update.svg (../shared/notification-icons/update.svg)
skin/classic/browser/notification-icons/midi.svg (../shared/notification-icons/midi.svg)
- skin/classic/browser/notification-icons/webauthn.svg (../shared/notification-icons/webauthn.svg)
- skin/classic/browser/notification-icons/block-cryptominer.svg (../shared/notification-icons/block-cryptominer.svg)
- skin/classic/browser/notification-icons/block-fingerprinter.svg (../shared/notification-icons/block-fingerprinter.svg)
- skin/classic/browser/notification-icons/block-social.svg (../shared/notification-icons/block-social.svg)
skin/classic/browser/tracking-protection.svg (../shared/identity-block/tracking-protection.svg)
skin/classic/browser/tracking-protection-disabled.svg (../shared/identity-block/tracking-protection-disabled.svg)
@@ -102,28 +84,41 @@
skin/classic/browser/protections/new-feature.svg (../shared/protections/new-feature.svg)
skin/classic/browser/preferences/android-menu.svg (../shared/preferences/android-menu.svg)
- skin/classic/browser/preferences/category-experiments.svg (../shared/preferences/category-experiments.svg)
skin/classic/browser/preferences/category-general.svg (../shared/preferences/category-general.svg)
skin/classic/browser/preferences/category-privacy-security.svg (../shared/preferences/category-privacy-security.svg)
+ skin/classic/browser/preferences/category-librewolf.svg (../shared/preferences/category-librewolf.svg)
skin/classic/browser/preferences/category-search.svg (../shared/preferences/category-search.svg)
skin/classic/browser/preferences/category-sync.svg (../shared/preferences/category-sync.svg)
- skin/classic/browser/preferences/critters-postcard.jpg (../shared/preferences/critters-postcard.jpg)
+ skin/classic/browser/preferences/containers.css (../shared/preferences/containers.css)
+ skin/classic/browser/preferences/containers-dialog.css (../shared/preferences/containers-dialog.css)
+ skin/classic/browser/preferences/dialog.css (../shared/preferences/dialog.css)
skin/classic/browser/preferences/face-sad.svg (../shared/preferences/face-sad.svg)
skin/classic/browser/preferences/face-smile.svg (../shared/preferences/face-smile.svg)
skin/classic/browser/preferences/fxaPairDevice.css (../shared/preferences/fxaPairDevice.css)
skin/classic/browser/preferences/ios-menu.svg (../shared/preferences/ios-menu.svg)
+ skin/classic/browser/preferences/img-mobile.svg (../shared/preferences/img-mobile.svg)
+ skin/classic/browser/preferences/img-rally.png (../shared/preferences/img-rally.png)
+ skin/classic/browser/preferences/img-vpn.svg (../shared/preferences/img-vpn.svg)
+ skin/classic/browser/preferences/mozilla-logo.svg (../shared/preferences/mozilla-logo.svg)
skin/classic/browser/preferences/no-search-bar.svg (../shared/preferences/no-search-bar.svg)
- skin/classic/browser/preferences/no-search-results.svg (../shared/preferences/no-search-results.svg)
+ skin/classic/browser/preferences/preferences.css (../shared/preferences/preferences.css)
skin/classic/browser/preferences/privacy.css (../shared/preferences/privacy.css)
+ skin/classic/browser/preferences/rally-logo.svg (../shared/preferences/rally-logo.svg)
skin/classic/browser/preferences/search-arrow-indicator.svg (../shared/preferences/search-arrow-indicator.svg)
skin/classic/browser/preferences/search-bar.svg (../shared/preferences/search-bar.svg)
+ skin/classic/browser/preferences/vpn-logo.svg (../shared/preferences/vpn-logo.svg)
skin/classic/browser/preferences/search.css (../shared/preferences/search.css)
skin/classic/browser/preferences/siteDataSettings.css (../shared/preferences/siteDataSettings.css)
-* skin/classic/browser/preferences/containers.css (../shared/preferences/containers.css)
-* skin/classic/browser/preferences/containers-dialog.css (../shared/preferences/containers-dialog.css)
- skin/classic/browser/upgradeDialog/highlights-24.svg (../shared/upgradeDialog/highlights-24.svg)
- skin/classic/browser/upgradeDialog/menu-24.svg (../shared/upgradeDialog/menu-24.svg)
- skin/classic/browser/upgradeDialog/tabs-24.svg (../shared/upgradeDialog/tabs-24.svg)
+ skin/classic/browser/preferences/librewolf.css (../shared/preferences/librewolf.css)
+ skin/classic/browser/upgradeDialog.css (../shared/upgradeDialog.css)
+ skin/classic/browser/spotlight.css (../shared/spotlight.css)
+ skin/classic/browser/upgradeDialog/abstract.png (../shared/upgradeDialog/abstract.png)
+ skin/classic/browser/upgradeDialog/cheers.png (../shared/upgradeDialog/cheers.png)
+ skin/classic/browser/upgradeDialog/default.png (../shared/upgradeDialog/default.png)
+ skin/classic/browser/upgradeDialog/elemental.png (../shared/upgradeDialog/elemental.png)
+ skin/classic/browser/upgradeDialog/foto.png (../shared/upgradeDialog/foto.png)
+ skin/classic/browser/upgradeDialog/graffiti.png (../shared/upgradeDialog/graffiti.png)
+ skin/classic/browser/upgradeDialog/lush.png (../shared/upgradeDialog/lush.png)
skin/classic/browser/fxa/fxa-spinner.svg (../shared/fxa/fxa-spinner.svg)
skin/classic/browser/fxa/sync-illustration.svg (../shared/fxa/sync-illustration.svg)
skin/classic/browser/fxa/sync-illustration-issue.svg (../shared/fxa/sync-illustration-issue.svg)
@@ -139,24 +134,24 @@
skin/classic/browser/add-circle-fill.svg (../shared/icons/add-circle-fill.svg)
skin/classic/browser/back.svg (../shared/icons/back.svg)
- skin/classic/browser/back-12.svg (../shared/icons/back-12.svg)
skin/classic/browser/bookmark.svg (../shared/icons/bookmark.svg)
skin/classic/browser/bookmark-12.svg (../shared/icons/bookmark-12.svg)
skin/classic/browser/bookmark-hollow.svg (../shared/icons/bookmark-hollow.svg)
skin/classic/browser/bookmark-star-on-tray.svg (../shared/icons/bookmark-star-on-tray.svg)
skin/classic/browser/bookmarks-toolbar.svg (../shared/icons/bookmarks-toolbar.svg)
+ skin/classic/browser/canvas.svg (../shared/icons/canvas.svg)
+ skin/classic/browser/canvas-blocked.svg (../shared/icons/canvas-blocked.svg)
skin/classic/browser/characterEncoding.svg (../shared/icons/characterEncoding.svg)
skin/classic/browser/chevron-animation.svg (../shared/icons/chevron-animation.svg)
skin/classic/browser/customize.svg (../shared/icons/customize.svg)
- skin/classic/browser/developer.svg (../shared/icons/developer.svg)
skin/classic/browser/device-phone.svg (../shared/icons/device-phone.svg)
skin/classic/browser/device-tablet.svg (../shared/icons/device-tablet.svg)
skin/classic/browser/device-desktop.svg (../shared/icons/device-desktop.svg)
skin/classic/browser/device-tv.svg (../shared/icons/device-tv.svg)
skin/classic/browser/device-vr.svg (../shared/icons/device-vr.svg)
- skin/classic/browser/edit-copy.svg (../shared/icons/edit-copy.svg)
skin/classic/browser/edit-cut.svg (../shared/icons/edit-cut.svg)
skin/classic/browser/edit-paste.svg (../shared/icons/edit-paste.svg)
+ skin/classic/browser/fingerprint.svg (../shared/icons/fingerprint.svg)
skin/classic/browser/forget.svg (../shared/icons/forget.svg)
skin/classic/browser/forward.svg (../shared/icons/forward.svg)
skin/classic/browser/fullscreen.svg (../shared/icons/fullscreen.svg)
@@ -168,9 +163,7 @@
skin/classic/browser/import-export.svg (../shared/icons/import-export.svg)
#endif
skin/classic/browser/indicator-accessibility.svg (../shared/icons/indicator-accessibility.svg)
- skin/classic/browser/indicator-private-browsing.svg (../shared/icons/indicator-private-browsing.svg)
skin/classic/browser/library.svg (../shared/icons/library.svg)
- skin/classic/browser/link.svg (../shared/icons/link.svg)
skin/classic/browser/login.svg (../shared/icons/login.svg)
skin/classic/browser/logo-android.svg (../shared/icons/logo-android.svg)
skin/classic/browser/logo-ios.svg (../shared/icons/logo-ios.svg)
@@ -181,34 +174,23 @@
skin/classic/browser/notification-fill-12.svg (../shared/icons/notification-fill-12.svg)
skin/classic/browser/open.svg (../shared/icons/open.svg)
skin/classic/browser/pin-12.svg (../shared/icons/pin-12.svg)
- skin/classic/browser/pin-tab.svg (../shared/icons/pin-tab.svg)
- skin/classic/browser/pocket-outline.svg (../shared/icons/pocket-outline.svg)
skin/classic/browser/privateBrowsing.svg (../shared/icons/privateBrowsing.svg)
skin/classic/browser/reader-mode.svg (../shared/icons/reader-mode.svg)
- skin/classic/browser/restore-session.svg (../shared/icons/restore-session.svg)
- skin/classic/browser/quit.svg (../shared/icons/quit.svg)
- skin/classic/browser/reload.svg (../shared/icons/reload.svg)
skin/classic/browser/reload-to-stop.svg (../shared/icons/reload-to-stop.svg)
skin/classic/browser/save.svg (../shared/icons/save.svg)
skin/classic/browser/screenshot.svg (../shared/icons/screenshot.svg)
- skin/classic/browser/send-to-device.svg (../shared/icons/send-to-device.svg)
skin/classic/browser/sidebars.svg (../shared/icons/sidebars.svg)
skin/classic/browser/sidebars-right.svg (../shared/icons/sidebars-right.svg)
- skin/classic/browser/sign-out.svg (../shared/icons/sign-out.svg)
#ifndef MOZ_WIDGET_GTK
skin/classic/browser/sort.svg (../shared/icons/sort.svg)
#endif
- skin/classic/browser/stop.svg (../shared/icons/stop.svg)
skin/classic/browser/stop-to-reload.svg (../shared/icons/stop-to-reload.svg)
skin/classic/browser/subtract-circle-fill.svg (../shared/icons/subtract-circle-fill.svg)
skin/classic/browser/success-animation.svg (../shared/icons/success-animation.svg)
skin/classic/browser/sync.svg (../shared/icons/sync.svg)
skin/classic/browser/tab.svg (../shared/icons/tab.svg)
- skin/classic/browser/tab-12.svg (../shared/icons/tab-12.svg)
- skin/classic/browser/unpin-tab.svg (../shared/icons/unpin-tab.svg)
- skin/classic/browser/whatsnew.svg (../shared/icons/whatsnew.svg)
+ skin/classic/browser/thumb-down.svg (../shared/icons/thumb-down.svg)
skin/classic/browser/window.svg (../shared/icons/window.svg)
- skin/classic/browser/zoom-in.svg (../shared/icons/zoom-in.svg)
skin/classic/browser/zoom-out.svg (../shared/icons/zoom-out.svg)
skin/classic/browser/ion.svg (../shared/icons/ion.svg)
@@ -219,13 +201,11 @@
skin/classic/browser/tabbrowser/crashed.svg (../shared/tabbrowser/crashed.svg)
skin/classic/browser/tabbrowser/hourglass.svg (../shared/tabbrowser/hourglass.svg)
- skin/classic/browser/tabbrowser/indicator-tab-attention.svg (../shared/tabbrowser/indicator-tab-attention.svg)
skin/classic/browser/tabbrowser/loading.svg (../shared/tabbrowser/loading.svg)
skin/classic/browser/tabbrowser/loading-burst.svg (../shared/tabbrowser/loading-burst.svg)
skin/classic/browser/tabbrowser/pendingpaint.png (../shared/tabbrowser/pendingpaint.png)
skin/classic/browser/tabbrowser/tab-audio-playing-small.svg (../shared/tabbrowser/tab-audio-playing-small.svg)
skin/classic/browser/tabbrowser/tab-audio-muted-small.svg (../shared/tabbrowser/tab-audio-muted-small.svg)
- skin/classic/browser/tabbrowser/tab-audio-blocked.svg (../shared/tabbrowser/tab-audio-blocked.svg)
skin/classic/browser/tabbrowser/tab-audio-blocked-small.svg (../shared/tabbrowser/tab-audio-blocked-small.svg)
skin/classic/browser/tabbrowser/tab-connecting.png (../shared/tabbrowser/tab-connecting.png)
skin/classic/browser/tabbrowser/tab-connecting@2x.png (../shared/tabbrowser/tab-connecting@2x.png)
@@ -234,30 +214,22 @@
skin/classic/browser/tabbrowser/tab-loading@2x.png (../shared/tabbrowser/tab-loading@2x.png)
skin/classic/browser/tabbrowser/tab-loading-inverted.png (../shared/tabbrowser/tab-loading-inverted.png)
skin/classic/browser/tabbrowser/tab-loading-inverted@2x.png (../shared/tabbrowser/tab-loading-inverted@2x.png)
- skin/classic/browser/tabbrowser/tab-overflow-indicator.png (../shared/tabbrowser/tab-overflow-indicator.png)
skin/classic/browser/translating-16.png (../shared/translation/translating-16.png)
skin/classic/browser/translating-16@2x.png (../shared/translation/translating-16@2x.png)
skin/classic/browser/translation-16.png (../shared/translation/translation-16.png)
skin/classic/browser/translation-16@2x.png (../shared/translation/translation-16@2x.png)
skin/classic/browser/update-badge.svg (../shared/update-badge.svg)
- skin/classic/browser/update-circle-fill-12.svg (../shared/update-circle-fill-12.svg)
- skin/classic/browser/badge-blue.svg (../shared/badge-blue.svg)
- skin/classic/browser/warning.svg (../shared/warning.svg)
skin/classic/browser/profiler-popup-backdrop.png (../shared/profiler-popup-backdrop.png)
- skin/classic/browser/cert-error.svg (../shared/incontent-icons/cert-error.svg)
skin/classic/browser/wifi.svg (../shared/incontent-icons/wifi.svg)
skin/classic/browser/tab-crashed.svg (../shared/incontent-icons/tab-crashed.svg)
- skin/classic/browser/welcome-back.svg (../shared/incontent-icons/welcome-back.svg)
skin/classic/browser/panic-panel/header.png (../shared/panic-panel/header.png)
skin/classic/browser/panic-panel/header@2x.png (../shared/panic-panel/header@2x.png)
skin/classic/browser/panic-panel/icons.png (../shared/panic-panel/icons.png)
skin/classic/browser/panic-panel/icons@2x.png (../shared/panic-panel/icons@2x.png)
skin/classic/browser/places/bookmarksMenu.svg (../shared/places/bookmarksMenu.svg)
skin/classic/browser/places/bookmarksToolbar.svg (../shared/places/bookmarksToolbar.svg)
- skin/classic/browser/places/folder.svg (../shared/places/folder.svg)
skin/classic/browser/places/folder-smart.svg (../shared/places/folder-smart.svg)
- skin/classic/browser/places/history.svg (../shared/places/history.svg)
skin/classic/browser/places/tag.svg (../shared/places/tag.svg)
skin/classic/browser/places/tree-icons.css (../shared/places/tree-icons.css)
skin/classic/browser/privatebrowsing/aboutPrivateBrowsing.css (../shared/privatebrowsing/aboutPrivateBrowsing.css)
diff --git a/browser/themes/shared/preferences/category-librewolf.svg b/browser/themes/shared/preferences/category-librewolf.svg
new file mode 100644
index 0000000..8ebf2eb
--- /dev/null
+++ b/browser/themes/shared/preferences/category-librewolf.svg
@@ -0,0 +1,96 @@
+
+
+
+
diff --git a/browser/themes/shared/preferences/librewolf.css b/browser/themes/shared/preferences/librewolf.css
new file mode 100644
index 0000000..12f926a
--- /dev/null
+++ b/browser/themes/shared/preferences/librewolf.css
@@ -0,0 +1,23 @@
+.librewolf-collapse > input {
+ display: none;
+}
+.librewolf-collapse > input ~ .librewolf-collapsed {
+ display: none;
+ /* max-height: 0; */
+ transition: max-height 0.25s ease-in-out;
+}
+.librewolf-collapse > input:checked ~ .librewolf-collapsed {
+ display: block;
+ /* max-height: 20rem; */
+}
+.librewolf-warning {
+ display: inline;
+ font-size: 0.8em;
+}
+.librewolf-button-icon {
+ width: 16px;
+ height: 16px;
+ margin-right: 8px;
+ -moz-context-properties: fill, fill-opacity;
+ fill: currentColor;
+}
diff --git a/browser/themes/shared/preferences/preferences.inc.css b/browser/themes/shared/preferences/preferences.css
similarity index 70%
rename from browser/themes/shared/preferences/preferences.inc.css
rename to browser/themes/shared/preferences/preferences.css
index 31bffd0..801b183 100644
--- a/browser/themes/shared/preferences/preferences.inc.css
+++ b/browser/themes/shared/preferences/preferences.css
@@ -1,10 +1,30 @@
-%if 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/. */
-%endif
+
@namespace html "http://www.w3.org/1999/xhtml";
+/* Global rules */
+* {
+ user-select: text;
+}
+
+body {
+ font-size: 1.25em;
+}
+
+@media (-moz-platform: macos) {
+ body {
+ font-size: 1.36em;
+ }
+}
+
+@media (-moz-platform: linux) {
+ body {
+ font-size: 1.11em;
+ }
+}
+
#preferences-root {
text-rendering: optimizeLegibility;
}
@@ -28,10 +48,8 @@
vertical-align: top; /* See bug 1606130 */
display: -moz-box;
-moz-box-orient: vertical;
-}
-* {
- user-select: text;
+ --main-pane-width: 664px;
}
/*
@@ -51,7 +69,7 @@
.pane-container {
/* A workaround to keep the container always float on the `top: 0` (Bug 1377009) */
display: block;
- width: 664px;
+ width: var(--main-pane-width);
}
#mainPrefPane {
@@ -113,7 +131,10 @@ button > hbox > label {
}
.indent {
- margin-inline-start: 28px !important;
+ /* This should match the checkboxes/radiobuttons' width and inline margin,
+ such that when we have a toggle with a label followed by another element
+ with this class, the other element's text aligns with the toggle label. */
+ margin-inline-start: 22px !important;
}
checkbox {
@@ -201,22 +222,40 @@ checkbox {
list-style-image: url("chrome://browser/skin/preferences/category-privacy-security.svg");
}
+#category-librewolf > .category-icon {
+ list-style-image: url("chrome://browser/skin/preferences/category-librewolf.svg");
+}
+
#category-sync > .category-icon {
list-style-image: url("chrome://browser/skin/preferences/category-sync.svg");
}
#category-experimental > .category-icon {
- list-style-image: url("chrome://browser/skin/preferences/category-experiments.svg");
+ list-style-image: url("chrome://global/skin/icons/experiments.svg");
+}
+
+#category-more-from-mozilla > .category-icon {
+ list-style-image: url("chrome://browser/skin/preferences/mozilla-logo.svg");
+ -moz-context-properties: fill, stroke, fill-opacity, stroke-opacity;
+ fill: currentColor;
+ stroke: var(--in-content-page-background);
+}
+
+@media (prefers-contrast) {
+ #category-more-from-mozilla:hover > .category-icon {
+ stroke: var(--in-content-button-background-hover);
+ }
+
+ #category-more-from-mozilla[selected] > .category-icon {
+ stroke: var(--in-content-button-background-hover);
+ }
}
/* All panes */
.info-icon,
.androidIcon,
-.iOSIcon,
-#updateSettingCrossUserWarning,
-.extension-controlled > description,
-.info-panel > description {
+.iOSIcon {
-moz-context-properties: fill;
fill: currentColor;
}
@@ -233,29 +272,12 @@ checkbox {
font-weight: 600;
}
-.info-panel,
-.extension-controlled {
- margin-block: 18px !important;
- background: var(--in-content-box-info-background);
- border-radius: 5px;
- padding-inline-end: 10px;
-}
-
-.info-panel > description,
-.extension-controlled > description {
- line-height: 16px;
- background: url(chrome://global/skin/icons/info.svg) 10px 14px no-repeat;
- padding: 10px;
- padding-inline-start: 32px;
+#browserContainersExtensionContent {
+ padding-block: 5px;
}
-.info-panel > description {
- line-height: unset;
-}
-
-.info-panel > description:-moz-locale-dir(rtl),
-.extension-controlled > description:-moz-locale-dir(rtl) {
- background-position-x: right 10px;
+.extension-controlled {
+ margin-block: 18px;
}
.extension-controlled-icon {
@@ -297,7 +319,7 @@ checkbox {
}
#useDocumentColors {
- margin: 0;
+ margin: 4px 0;
}
#translationAttributionImage {
@@ -402,8 +424,9 @@ checkbox {
margin-inline-end: 8px !important;
}
-.actionsMenu:focus-visible {
- outline-offset: -2px;
+/* Increase the specifity to override common.inc.css */
+richlistitem[selected] .actionsMenu:focus-visible {
+ outline-offset: -3px;
}
/* Home Pane */
@@ -437,10 +460,10 @@ checkbox {
margin-inline-end: 0;
}
-#homeContentsGroup checkbox[src] .checkbox-icon {
+#homeContentsGroup .checkbox-icon[src] {
-moz-context-properties: fill;
fill: currentColor;
- margin-inline: 4px 8px;
+ margin-inline: 2px 8px;
width: 16px;
}
@@ -479,6 +502,14 @@ checkbox {
stroke: var(--in-content-item-selected);
}
+@media (prefers-contrast) {
+ #engineList > treechildren::-moz-tree-image(hover),
+ #blocklistsTree > treechildren::-moz-tree-image(hover) {
+ fill: var(--in-content-item-hover-text);
+ stroke: var(--in-content-item-hover);
+ }
+}
+
#engineList > treechildren::-moz-tree-row,
#blocklistsTree > treechildren::-moz-tree-row {
min-height: 36px;
@@ -494,11 +525,6 @@ checkbox {
/* Privacy Pane */
-#locationBarGroup > .text-link {
- margin-top: 6px;
- line-height: 30px;
-}
-
#allowSmartSize {
margin-block: 0 4px;
}
@@ -549,6 +575,14 @@ checkbox {
margin-inline-start: 0;
}
+@media (-moz-platform: windows-win7),
+ (-moz-platform: windows-win8) {
+ #windows-sso,
+ #windows-sso-caption {
+ display: none;
+ }
+}
+
/**
* Dialog
*/
@@ -576,7 +610,7 @@ checkbox {
overflow-x: auto;
}
-@media (-moz-toolbar-prefers-color-scheme: dark) {
+@media (prefers-color-scheme: dark) {
@media not (prefers-contrast) {
.dialogBox {
--in-content-page-background: #42414d;
@@ -584,7 +618,6 @@ checkbox {
}
}
-
.dialogBox[resizable="true"] {
resize: both;
overflow: hidden;
@@ -598,16 +631,6 @@ checkbox {
border-bottom: 1px solid var(--in-content-border-color);
}
-@media not (-moz-proton) {
-.dialogBox {
- border-radius: 3.5px;
-}
-.dialogTitleBar {
- padding: 3.5px 0;
- background-color: var(--in-content-dialog-header-background);
-}
-} /*** END !proton ***/
-
.dialogTitle {
font-size: .9em;
font-weight: 600;
@@ -627,7 +650,7 @@ checkbox {
}
.dialogFrame {
- margin: 20px;
+ margin: 10px;
-moz-box-flex: 1;
/* Default dialog dimensions */
width: 66ch;
@@ -747,7 +770,9 @@ checkbox {
}
.fxaLoginRejectedWarning {
- list-style-image: url(chrome://browser/skin/warning.svg);
+ list-style-image: url(chrome://global/skin/icons/warning.svg);
+ -moz-context-properties: fill;
+ fill: #FFBF00;
margin-inline: 4px 8px;
}
@@ -756,10 +781,7 @@ checkbox {
}
.sync-group {
- border-radius: 4px;
- padding: 16px;
margin-block: 16px;
- background-color: var(--in-content-box-info-background);
border: 1px solid var(--in-content-border-color);
}
@@ -782,7 +804,7 @@ dialog > .sync-engines-list + hbox {
.sync-engines-list checkbox .checkbox-icon,
.sync-engine-image {
- margin-inline: 4px 8px;
+ margin-inline: 2px 8px;
width: 16px;
height: 16px;
-moz-context-properties: fill;
@@ -920,6 +942,11 @@ image.update-throbber {
margin-inline-end: 8px;
}
+.main-content {
+ /* the 32px min-height, plus 20+30px margin below, plus some leeway: */
+ scroll-padding-top: 90px;
+}
+
#policies-container,
#searchInput {
min-height: 32px;
@@ -927,28 +954,41 @@ image.update-throbber {
}
#policies-container {
- background-color: var(--in-content-box-info-background);
- padding: 0 8px;
margin-inline-end: 16px;
- border-radius: 2px;
+ /* Make sure the container is at least the same height as the searchbox.
+ This is needed in addition to the min-height above to make the info icon
+ the same height as the first line in the policies label.
+ Searchbox's height - line-height - border top and bottom */
+ padding-block: max(0px, calc((32px - 1.8em - 2px) / 2));
+}
+
+.info-box-container {
+ background-color: var(--in-content-box-info-background);
+ padding: 9px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.info-box-container.smaller-font-size {
font-size: 85%;
}
-.policies-label {
- margin-inline-start: 2px;
+.info-icon-container {
+ display: flex;
}
.info-icon {
list-style-image: url("chrome://global/skin/icons/info.svg");
width: 16px;
height: 16px;
+ margin-inline-end: 6px;
+ align-self: start;
+ margin-top: 0.4em;
+ flex-shrink: 0;
}
-.info-icon-telemetry {
- list-style-image: url("chrome://global/skin/icons/info.svg");
- width: 16px;
- height: 16px;
- margin-inline: 2px 8px;
+.info-box-container.smaller-font-size .info-icon {
+ margin-top: 0.3em;
}
.sticky-container {
@@ -962,6 +1002,11 @@ image.update-throbber {
padding-inline: 4px;
}
+.sticky-inner-container {
+ -moz-box-flex: 1;
+ max-width: var(--main-pane-width);
+}
+
.search-tooltip {
max-width: 150px;
font-size: 1.25rem;
@@ -1040,27 +1085,6 @@ menulist[indicator=true] > menupopup menuitem[indicator=true]:not([image]) > .me
line-height: 30px;
}
-.no-results-image-container {
- margin-top: 64px;
-}
-
-.no-results-image {
- list-style-image: url("chrome://browser/skin/preferences/no-search-results.svg");
- width: 380px;
- height: 293px;
-}
-
-#no-results-message[query*=🔥🦊] {
- background-image: url("chrome://browser/skin/preferences/critters-postcard.jpg");
- background-size: contain;
- background-repeat: no-repeat;
- background-position: center;
-}
-
-#no-results-message[query*=🔥🦊] > .no-results-container {
- visibility: hidden;
-}
-
/* Proxy port input */
.proxy-port-input {
@@ -1068,7 +1092,7 @@ menulist[indicator=true] > menupopup menuitem[indicator=true]:not([image]) > .me
margin-inline-start: 4px;
}
-#defaultBrowserLanguage {
+#primaryBrowserLocale {
margin-inline-start: 0;
min-width: 20em;
}
@@ -1107,25 +1131,12 @@ menulist[indicator=true] > menupopup menuitem[indicator=true]:not([image]) > .me
}
.updateSettingCrossUserWarningContainer {
- background: var(--in-content-box-info-background);
- border-radius: 5px;
- padding: 2px 8px 8px;
margin-block-end: 17px;
}
-#updateSettingCrossUserWarning {
- padding-inline-start: 30px;
+#updateSettingCrossUserWarningDesc {
+ padding-inline-start: calc(16px + 6px); /* radio-check's width + margin-inline-end */
margin-block-start: 20px;
- line-height: 20px;
- background-image: url("chrome://global/skin/icons/info.svg");
- background-position-x: left 2px;
- background-position-y: top 2px;
- background-size: 16px 16px;
- background-repeat: no-repeat;
-}
-
-#updateSettingCrossUserWarning:-moz-locale-dir(rtl) {
- background-position-x: right 2px;
}
richlistitem .text-link {
@@ -1193,3 +1204,322 @@ richlistitem .text-link:hover {
.featureGateDescription {
margin-inline-start: 28px;
}
+
+.checkbox-row {
+ display: flex;
+ align-items: baseline;
+}
+
+.checkbox-row input[type=checkbox] {
+ translate: 0 2px
+}
+
+.checkbox-row a {
+ margin-inline-start: 6px;
+}
+
+#moreFromMozillaCategory-header .title {
+ margin-block-end: 4px;
+}
+
+#moreFromMozillaCategory-header .subtitle {
+ color: var(--in-content-text-color);
+ margin-block-end: 24px;
+ line-height: 1.4em;
+}
+
+#moreFromMozillaCategory:not([hidden]) {
+ display: flex;
+ flex-direction: column;
+}
+
+#moreFromMozillaCategory .mozilla-product-item {
+ margin-top: 30px;
+}
+
+#moreFromMozillaCategory .product-title {
+ margin: 4px 0 3px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ padding-inline-start: 30px;
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+#moreFromMozillaCategory .advanced .product-title {
+ background-size: initial;
+ padding-inline-start: 0;
+ padding-top: 33px;
+}
+
+/* The firefox-mobile product has three columns and needs to constrain the
+ * .product-info section to one of them.
+ */
+#firefox-mobile-div.advanced .product-info {
+ max-width: 200px;
+}
+
+#moreFromMozillaCategory .product-img {
+ background-repeat: no-repeat;
+ background-size: 170px;
+ padding-inline-start: 184px;
+}
+
+#moreFromMozillaCategory .product-title:-moz-locale-dir(rtl),
+#moreFromMozillaCategory .product-img:-moz-locale-dir(rtl) {
+ background-position-x: right;
+}
+
+#moreFromMozillaCategory .description {
+ display: inline flow-root;
+ color: var(--in-content-text-color);
+ padding-inline-start: 30px;
+ margin: 2px 0;
+ line-height: 1.4em;
+}
+
+#moreFromMozillaCategory .advanced .description {
+ padding-inline-start: 0;
+}
+
+#moreFromMozillaCategory .small-button {
+ margin-block: 14px 2px;
+ margin-inline: 30px 0;
+}
+
+#moreFromMozillaCategory .advanced .small-button {
+ margin: 24px 0;
+}
+
+#moreFromMozillaCategory .mozilla-product-item.advanced {
+ box-shadow: 0 2px 6px rgba(58, 57, 68, 0.2);
+ border-radius: 4px;
+
+ margin-block: 20px 10px;
+ margin-inline: 2px 0;
+ padding: 16px;
+}
+
+@media (prefers-color-scheme: dark) {
+ #moreFromMozillaCategory .mozilla-product-item.advanced {
+ background-color: rgb(66, 65, 77);
+ }
+}
+
+#moreFromMozillaCategory .advanced .product-info {
+ width: 500px;
+}
+
+#moreFromMozillaCategory .text-link {
+ line-height: 1.4em;
+
+ margin-block: 2px 0;
+ margin-inline: 6px 0;
+}
+
+#moreFromMozillaCategory .simple .text-link {
+ display: inline flow-root;
+ margin-inline-start: 4px;
+}
+
+#moreFromMozillaCategory .text-link.hidden {
+ display: none;
+}
+
+#firefox-mobile {
+ background-image: url("chrome://devtools/skin/images/browsers/mobile.svg");
+ padding-top: 5px;
+}
+
+#mozilla-vpn {
+ background-image: url("chrome://browser/skin/preferences/vpn-logo.svg");
+}
+
+#mozilla-rally {
+ background-image: url("chrome://browser/skin/preferences/rally-logo.svg");
+}
+
+#firefox-mobile-image {
+ background-image: url("chrome://browser/skin/preferences/img-mobile.svg");
+}
+
+.advanced #firefox-mobile-image {
+ display: flex;
+}
+
+#mozilla-vpn-image {
+ background-image: url("chrome://browser/skin/preferences/img-vpn.svg");
+}
+
+#mozilla-rally-image {
+ background-image: url("chrome://browser/skin/preferences/img-rally.png");
+}
+
+/*
+ * The :not clause is required because hiding an element with `display: flex` only
+ * partially hides it.
+ */
+.qr-code-box:not([hidden="true"]) {
+ max-width: 320px; /* a unit better than px for this & next? */
+ min-height: 204px;
+ margin-block: 10px 0;
+ margin-inline-start: 30px;
+ background-color: var(--in-content-box-info-background);
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-evenly;
+ border-radius: 4px;
+}
+
+@media (prefers-contrast) {
+ .qr-code-box:not([hidden="true"]) {
+ border: 1px solid currentColor;
+ }
+}
+
+.advanced .qr-code-box {
+ align-items: flex-start;
+ margin-inline-start: 12px;
+}
+
+.qr-code-top-box {
+ display: flex;
+}
+
+.advanced .qr-code-top-box {
+ align-items: center;
+ width: 310px;
+}
+
+.qr-code-box-image {
+ border-radius: 4px;
+ padding: 2px;
+ width: 80px;
+ flex: 0 0 auto;
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+.advanced .qr-code-box-image {
+ max-width: 86px;
+ height: 86px;
+ margin-inline-end: 16px;
+ margin-block: 18px;
+
+ fill: rgb(87, 77, 77);
+}
+
+#moreFromMozillaCategory .advanced .text-link {
+ margin-inline-start: 0;
+}
+
+.qr-code-title-label {
+ flex: 1 1 auto;
+}
+
+.qr-code-box-title {
+ font-size: .87em;
+ font-weight: normal;
+ line-height: 1.42em;
+
+ text-align: center;
+
+ margin-block: 20px 0;
+ margin-inline: 40px;
+}
+
+.simple .qr-code-box-title {
+ margin-block: 0;
+ width: 296px;
+}
+
+.simple .qr-code-box {
+ padding-inline: 24px;
+ padding-block: 20px
+}
+
+.simple .qr-code-box-image {
+ padding: 10px;
+}
+
+.advanced .qr-code-box-title {
+ text-align: start;
+ margin-inline: 16px;
+ margin-block: revert;
+}
+
+#moreFromMozillaCategory .qr-code-link {
+ font-size: .87em;
+ line-height: 1.42em;
+ margin-block-start: 0;
+ margin-inline: 0; /* make sure we're correctly centered by overriding button rule */
+}
+
+#moreFromMozillaCategory .advanced .qr-code-link {
+ margin-inline: 16px;
+ margin-block-start: 30px;
+}
+
+@media (prefers-color-scheme: dark) {
+ .qr-code-box:not([hidden="true"]) {
+ background-color: rgba(91,91,102,0.45);
+ }
+
+ .advanced .qr-code-box-image {
+ background-color: white;
+ fill: black;
+ }
+
+ .qr-code-box-title {
+ color: #fbfbfe;
+ }
+}
+
+/* Platform-specific tweaks & overrides */
+
+@media (-moz-platform: macos) {
+ tabpanels {
+ padding: 20px 7px 7px;
+ }
+
+ #browserUseCurrent,
+ #browserUseBookmark,
+ #browserUseBlank {
+ margin-top: 10px;
+ }
+
+ #advancedPrefs {
+ margin: 0 8px;
+ }
+
+ #privacyPrefs {
+ padding: 0 4px;
+ }
+
+ #privacyPrefs > tabpanels {
+ padding: 18px 10px 10px;
+ }
+
+ #OCSPDialogPane {
+ font: message-box !important;
+ }
+
+ /**
+ * Update Preferences
+ */
+ #autoInstallOptions {
+ margin-inline-start: 20px;
+ }
+
+ .updateControls {
+ margin-inline-start: 10px;
+ }
+}
+
+@media (-moz-platform: linux) {
+ .treecol-sortdirection {
+ /* override the Linux only toolkit rule */
+ appearance: none;
+ }
+}