Richard Pospesel pushed to branch base-browser-102.10.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits: ca768445 by Henry Wilkes at 2023-04-20T20:00:45+00:00 Bug 41736 - Customize toolbar for base-browser.
- - - - - 1cc48456 by Henry Wilkes at 2023-04-20T20:00:45+00:00 fixup! Bug 40926: Implemented the New Identity feature
Bug 41736 - Stop setting the browser.uiCustomization.state preference.
- - - - - 4bea1315 by Henry Wilkes at 2023-04-20T20:00:46+00:00 fixup! Bug 40925: Implemented the Security Level component
Bug 41736 - Stop setting the browser.uiCustomization.state preference.
- - - - - 90750ca9 by Henry Wilkes at 2023-04-20T20:00:46+00:00 fixup! Firefox preference overrides.
Bug 41736 - Stop setting the browser.uiCustomization.state preference.
- - - - -
3 changed files:
- browser/app/profile/001-base-profile.js - browser/components/customizableui/CustomizableUI.jsm - browser/components/extensions/parent/ext-browserAction.js
Changes:
===================================== browser/app/profile/001-base-profile.js ===================================== @@ -464,9 +464,6 @@ pref("intl.multilingual.downloadEnabled", false); // Disk activity: Disable storage.sync (tor-browser#41424) pref("webextensions.storage.sync.enabled", false);
-// Toolbar layout -pref("browser.uiCustomization.state", "{"placements":{"widget-overflow-fixed-list":[],"PersonalToolbar":["personal-bookmarks"],"nav-bar":["back-button","forward-button","stop-reload-button","urlbar-container","security-level-button","new-identity-button","downloads-button"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"toolbar-menubar":["menubar-items"],"PanelUI-contents":["home-button","edit-controls","zoom-controls","new-window-button","save-page-button","print-button","bookmarks-menu-button","history-panelmenu","find-button","preferences-button","add-ons-button","developer-button"],"addon-bar":["addonbar-closebutton","status-bar"]},"seen":["developer-button"],"dirtyAreaCache":["PersonalToolbar","nav-bar","TabsToolbar","toolbar-menubar"],"currentVersion":14,"newElementCount":1}"); - // Enforce certificate pinning, see: https://bugs.torproject.org/16206 pref("security.cert_pinning.enforcement_level", 2);
===================================== browser/components/customizableui/CustomizableUI.jsm ===================================== @@ -65,6 +65,11 @@ const kSubviewEvents = ["ViewShowing", "ViewHiding"]; */ var kVersion = 17;
+/** + * The current version for base browser. + */ +var kVersionBaseBrowser = 1; + /** * Buttons removed from built-ins by version they were removed. kVersion must be * bumped any time a new id is added to this. Use the button id as key, and @@ -218,6 +223,7 @@ var CustomizableUIInternal = { this._updateForNewVersion(); this._updateForNewProtonVersion(); this._markObsoleteBuiltinButtonsSeen(); + this._updateForBaseBrowser();
this.registerArea( CustomizableUI.AREA_FIXED_OVERFLOW_PANEL, @@ -236,10 +242,15 @@ var CustomizableUIInternal = { Services.policies.isAllowed("removeHomeButtonByDefault") ? null : "home-button", - "spring", + // Don't want springs either side of the urlbar. tor-browser#41736 "urlbar-container", - "spring", - "save-to-pocket-button", + // save-to-pocket-button is entirely disabled. See tor-browser#18886 and + // tor-browser#31602. + // Base-browser additions tor-browser#41736. If you want to add to, remove + // from, or rearrange this list, then bump the kVersionBaseBrowser and + // update existing saved states in _updateForBaseBrowser. + "security-level-button", + "new-identity-button", "downloads-button", AppConstants.MOZ_DEV_EDITION ? "developer-button" : null, "fxa-toolbar-menu-button", @@ -255,6 +266,10 @@ var CustomizableUIInternal = { }, true ); + // navbarPlacements does not match the initial default XHTML layout. + // Therefore we always need to rebuild the navbar area when + // registerToolbarNode is called. tor-browser#41736 + gDirtyAreaCache.add(CustomizableUI.AREA_NAVBAR);
if (AppConstants.MENUBAR_CAN_AUTOHIDE) { this.registerArea( @@ -687,6 +702,104 @@ var CustomizableUIInternal = { } },
+ _updateForBaseBrowser() { + if (!gSavedState) { + // Use the defaults. + return; + } + + const currentVersion = gSavedState.currentVersionBaseBrowser; + + if (currentVersion < 1) { + // NOTE: In base-browser/tor-browser version 12.5a5, and earlier, the + // toolbar was configured by setting the full JSON string for the default + // "browser.uiCustomization.state" preference value. The disadvantage is + // that we could not update this value in a way that existing users (who + // would have non-default preference values) would also get the desired + // change (e.g. for adding or removing a button). + // + // With tor-browser#41736 we want to switch to changing the toolbar + // dynamically like firefox. Therefore, this first version transfer simply + // gets the toolbar into the same state we wanted before, away from the + // default firefox state. + // + // If an existing user state aligned with the previous default + // "browser.uiCustomization.state" then this shouldn't visibly change + // anything. + // If a user explicitly customized the toolbar to go back to the firefox + // default, then this may undo those changes. + const navbarPlacements = + gSavedState.placements[CustomizableUI.AREA_NAVBAR]; + if (navbarPlacements) { + const getBeforeAfterUrlbar = () => { + // NOTE: The urlbar is non-removable from the navbar, so should have + // an index. + const index = navbarPlacements.indexOf("urlbar-container"); + let after = index + 1; + if ( + after < navbarPlacements.length && + navbarPlacements[after] === "search-container" + ) { + // Skip past the search-container. + after++; + } + return { before: index - 1, after }; + }; + + // Remove the urlbar springs either side of the urlbar. + const { before, after } = getBeforeAfterUrlbar(); + if ( + after < navbarPlacements.length && + this.matchingSpecials(navbarPlacements[after], "spring") + ) { + // Remove the spring after. + navbarPlacements.splice(after, 1); + // NOTE: The `before` index does not change. + } + if ( + before >= 0 && + this.matchingSpecials(navbarPlacements[before], "spring") + ) { + // Remove the spring before. + navbarPlacements.splice(before, 1); + } + + // Make sure the security-level-button and new-identity-button appears + // in the toolbar. + for (const id of ["new-identity-button", "security-level-button"]) { + let alreadyAdded = false; + for (const placements of Object.values(gSavedState.placements)) { + if (placements.includes(id)) { + alreadyAdded = true; + break; + } + } + if (alreadyAdded) { + continue; + } + + // Add to the nav-bar, after the urlbar-container. + // NOTE: We have already removed the spring after the urlbar. + navbarPlacements.splice(getBeforeAfterUrlbar().after, 0, id); + } + } + + // Remove save-to-pocket-button. See tor-browser#18886 and + // tor-browser#31602. + for (const placements of Object.values(gSavedState.placements)) { + let buttonIndex = placements.indexOf("save-to-pocket-button"); + if (buttonIndex != -1) { + placements.splice(buttonIndex, 1); + } + } + + // Remove unused fields that used to be part of + // "browser.uiCustomization.state". + delete gSavedState.placements["PanelUI-contents"]; + delete gSavedState.placements["addon-bar"]; + } + }, + _placeNewDefaultWidgetsInArea(aArea) { let futurePlacedWidgets = gFuturePlacements.get(aArea); let savedPlacements = @@ -2501,6 +2614,10 @@ var CustomizableUIInternal = { gSavedState.currentVersion = 0; }
+ if (!("currentVersionBaseBrowser" in gSavedState)) { + gSavedState.currentVersionBaseBrowser = 0; + } + gSeenWidgets = new Set(gSavedState.seen || []); gDirtyAreaCache = new Set(gSavedState.dirtyAreaCache || []); gNewElementCount = gSavedState.newElementCount || 0; @@ -2579,6 +2696,7 @@ var CustomizableUIInternal = { seen: gSeenWidgets, dirtyAreaCache: gDirtyAreaCache, currentVersion: kVersion, + currentVersionBaseBrowser: kVersionBaseBrowser, newElementCount: gNewElementCount, };
===================================== browser/components/extensions/parent/ext-browserAction.js ===================================== @@ -193,6 +193,10 @@ this.browserAction = class extends ExtensionAPIPersistent { }
build() { + // The extension ID for NoScript (WebExtension) + const isNoScript = + this.extension.id === "{73a6fe31-595d-460b-a920-fcc0f8843232}"; + let widget = CustomizableUI.createWidget({ id: this.id, viewId: this.viewId, @@ -200,7 +204,11 @@ this.browserAction = class extends ExtensionAPIPersistent { removable: true, label: this.action.getProperty(null, "title"), tooltiptext: this.action.getProperty(null, "title"), - defaultArea: browserAreas[this.action.getDefaultArea()], + // Do not want to add the NoScript extension to the toolbar by default. + // tor-browser#41736 + defaultArea: isNoScript + ? null + : browserAreas[this.action.getDefaultArea()], showInPrivateBrowsing: this.extension.privateBrowsingAllowed,
// Don't attempt to load properties from the built-in widget string
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/fd31ee1...
tor-commits@lists.torproject.org