morgan pushed to branch tor-browser-153.0esr-16.0-1 at The Tor Project / Applications / Tor Browser
Commits:
-
b45d554c
by Henry Wilkes at 2026-08-10T15:31:38+00:00
-
8c8eb548
by Henry Wilkes at 2026-08-10T15:31:38+00:00
-
fcb13195
by Henry Wilkes at 2026-08-10T15:31:38+00:00
9 changed files:
- browser/components/preferences/config/appearance.mjs
- browser/components/preferences/letterboxing.js → browser/components/preferences/config/letterboxing.mjs
- browser/components/preferences/jar.mn
- − browser/components/preferences/letterboxing.inc.xhtml
- browser/components/preferences/main.inc.xhtml
- browser/components/preferences/main.js
- browser/components/preferences/preferences.js
- toolkit/locales/en-US/toolkit/global/base-browser.ftl
- + tools/torbrowser/l10n/migrations/bug-45079-letterboxing-settings-single.py
Changes:
| ... | ... | @@ -5,6 +5,11 @@ |
| 5 | 5 | import { Preferences } from "chrome://global/content/preferences/Preferences.mjs";
|
| 6 | 6 | import { SettingGroupManager } from "chrome://browser/content/preferences/config/SettingGroupManager.mjs";
|
| 7 | 7 | |
| 8 | +ChromeUtils.importESModule(
|
|
| 9 | + "chrome://browser/content/preferences/config/letterboxing.mjs",
|
|
| 10 | + { global: "current" }
|
|
| 11 | +);
|
|
| 12 | + |
|
| 8 | 13 | const FORCED_COLORS_QUERY = matchMedia("(forced-colors)");
|
| 9 | 14 | |
| 10 | 15 | Preferences.addAll([
|
| 1 | -/* import-globals-from preferences.js */
|
|
| 2 | -/* import-globals-from findInPage.js */
|
|
| 1 | +import { Preferences } from "chrome://global/content/preferences/Preferences.mjs";
|
|
| 2 | +import { SettingGroupManager } from "chrome://browser/content/preferences/config/SettingGroupManager.mjs";
|
|
| 3 | 3 | |
| 4 | 4 | Preferences.addAll([
|
| 5 | 5 | {
|
| ... | ... | @@ -22,21 +22,29 @@ Preferences.addSetting({ |
| 22 | 22 | });
|
| 23 | 23 | |
| 24 | 24 | Preferences.addSetting({
|
| 25 | - id: "letterboxingRememberSize",
|
|
| 26 | - pref: "privacy.resistFingerprinting.letterboxing.rememberSize",
|
|
| 25 | + id: "letterboxingWindowSize",
|
|
| 27 | 26 | deps: ["letterboxingEnabled", "resistFingerprinting"],
|
| 28 | 27 | visible: ({ letterboxingEnabled, resistFingerprinting }) => {
|
| 29 | 28 | return letterboxingEnabled.value && resistFingerprinting.value;
|
| 30 | 29 | },
|
| 31 | 30 | });
|
| 32 | 31 | |
| 32 | +Preferences.addSetting({
|
|
| 33 | + id: "letterboxingRememberSize",
|
|
| 34 | + pref: "privacy.resistFingerprinting.letterboxing.rememberSize",
|
|
| 35 | +});
|
|
| 36 | + |
|
| 33 | 37 | Preferences.addSetting({
|
| 34 | 38 | id: "letterboxingContentAlignment",
|
| 35 | - pref: "privacy.resistFingerprinting.letterboxing.vcenter",
|
|
| 36 | 39 | deps: ["letterboxingEnabled", "resistFingerprinting"],
|
| 37 | 40 | visible: ({ letterboxingEnabled, resistFingerprinting }) => {
|
| 38 | 41 | return letterboxingEnabled.value && resistFingerprinting.value;
|
| 39 | 42 | },
|
| 43 | +});
|
|
| 44 | + |
|
| 45 | +Preferences.addSetting({
|
|
| 46 | + id: "letterboxingContentAlignmentOptions",
|
|
| 47 | + pref: "privacy.resistFingerprinting.letterboxing.vcenter",
|
|
| 40 | 48 | get: val => {
|
| 41 | 49 | return val ? "middle" : "top";
|
| 42 | 50 | },
|
| ... | ... | @@ -57,28 +65,21 @@ Preferences.addSetting({ |
| 57 | 65 | return;
|
| 58 | 66 | }
|
| 59 | 67 | letterboxingEnabled.value = true;
|
| 60 | - setTimeout(() => {
|
|
| 61 | - // Need to re-search to remove the "hidden" attribute on the groupbox
|
|
| 62 | - // elements (after the data-hidden-from-search attributes are changed by
|
|
| 63 | - // the "visible" callback).
|
|
| 64 | - // TODO: Is this an upstream issue that "hidden" is not removed?
|
|
| 65 | - if (!gSearchResultsPane.query) {
|
|
| 66 | - search(gLastCategory.category, "data-category");
|
|
| 67 | - }
|
|
| 68 | - // Button should have focus when activated but will be hidden now,
|
|
| 69 | - // so re-assign focus to the newly revealed options.
|
|
| 70 | - Services.focus.moveFocus(
|
|
| 71 | - window,
|
|
| 72 | - buttonEl,
|
|
| 73 | - Services.focus.MOVEFOCUS_FORWARD,
|
|
| 74 | - 0
|
|
| 75 | - );
|
|
| 76 | - });
|
|
| 68 | + // Button should have focus when activated but will be hidden now,
|
|
| 69 | + // so re-assign focus after the new section is revealed.
|
|
| 70 | + document
|
|
| 71 | + .getElementById("letterboxingWindowSize")
|
|
| 72 | + .updateComplete.then(() => {
|
|
| 73 | + document.getElementById("letterboxingRememberSize").focus();
|
|
| 74 | + });
|
|
| 77 | 75 | },
|
| 78 | 76 | });
|
| 79 | 77 | |
| 80 | 78 | SettingGroupManager.registerGroups({
|
| 81 | - letterboxingDisabled: {
|
|
| 79 | + letterboxing: {
|
|
| 80 | + l10nId: "letterboxing-settings-group",
|
|
| 81 | + supportPage: "tor-manual:features__fingerprinting-protections___letterboxing",
|
|
| 82 | + headingLevel: 2,
|
|
| 82 | 83 | items: [
|
| 83 | 84 | {
|
| 84 | 85 | id: "letterboxingShouldEnable",
|
| ... | ... | @@ -93,63 +94,55 @@ SettingGroupManager.registerGroups({ |
| 93 | 94 | },
|
| 94 | 95 | ],
|
| 95 | 96 | },
|
| 96 | - ],
|
|
| 97 | - },
|
|
| 98 | - letterboxingSize: {
|
|
| 99 | - l10nId: "letterboxing-window-size-group",
|
|
| 100 | - headingLevel: 2,
|
|
| 101 | - items: [
|
|
| 102 | 97 | {
|
| 103 | - id: "letterboxingRememberSize",
|
|
| 104 | - l10nId: "letterboxing-remember-size",
|
|
| 105 | - control: "moz-checkbox",
|
|
| 98 | + id: "letterboxingWindowSize",
|
|
| 99 | + l10nId: "letterboxing-window-size-group",
|
|
| 100 | + control: "moz-fieldset",
|
|
| 101 | + controlAttrs: {
|
|
| 102 | + headinglevel: 3,
|
|
| 103 | + },
|
|
| 104 | + items: [
|
|
| 105 | + {
|
|
| 106 | + id: "letterboxingRememberSize",
|
|
| 107 | + l10nId: "letterboxing-remember-size",
|
|
| 108 | + control: "moz-checkbox",
|
|
| 109 | + },
|
|
| 110 | + ],
|
|
| 106 | 111 | },
|
| 107 | - ],
|
|
| 108 | - },
|
|
| 109 | - letterboxingAlignment: {
|
|
| 110 | - l10nId: "letterboxing-alignment-group",
|
|
| 111 | - headingLevel: 2,
|
|
| 112 | - items: [
|
|
| 113 | 112 | {
|
| 114 | 113 | id: "letterboxingContentAlignment",
|
| 115 | - control: "moz-visual-picker",
|
|
| 116 | - options: [
|
|
| 114 | + l10nId: "letterboxing-alignment-group",
|
|
| 115 | + control: "moz-fieldset",
|
|
| 116 | + controlAttrs: {
|
|
| 117 | + headinglevel: 3,
|
|
| 118 | + },
|
|
| 119 | + items: [
|
|
| 117 | 120 | {
|
| 118 | - value: "top",
|
|
| 119 | - l10nId: "letterboxing-alignment-top-option",
|
|
| 120 | - controlAttrs: {
|
|
| 121 | - class: "setting-chooser-item letterboxing-chooser-item",
|
|
| 122 | - imagesrc:
|
|
| 123 | - "chrome://browser/content/preferences/letterboxing-top.svg",
|
|
| 124 | - },
|
|
| 125 | - },
|
|
| 126 | - {
|
|
| 127 | - value: "middle",
|
|
| 128 | - l10nId: "letterboxing-alignment-middle-option",
|
|
| 129 | - controlAttrs: {
|
|
| 130 | - class: "setting-chooser-item letterboxing-chooser-item",
|
|
| 131 | - imagesrc:
|
|
| 132 | - "chrome://browser/content/preferences/letterboxing-middle.svg",
|
|
| 133 | - },
|
|
| 121 | + id: "letterboxingContentAlignmentOptions",
|
|
| 122 | + control: "moz-visual-picker",
|
|
| 123 | + options: [
|
|
| 124 | + {
|
|
| 125 | + value: "top",
|
|
| 126 | + l10nId: "letterboxing-alignment-top-option",
|
|
| 127 | + controlAttrs: {
|
|
| 128 | + class: "setting-chooser-item letterboxing-chooser-item",
|
|
| 129 | + imagesrc:
|
|
| 130 | + "chrome://browser/content/preferences/letterboxing-top.svg",
|
|
| 131 | + },
|
|
| 132 | + },
|
|
| 133 | + {
|
|
| 134 | + value: "middle",
|
|
| 135 | + l10nId: "letterboxing-alignment-middle-option",
|
|
| 136 | + controlAttrs: {
|
|
| 137 | + class: "setting-chooser-item letterboxing-chooser-item",
|
|
| 138 | + imagesrc:
|
|
| 139 | + "chrome://browser/content/preferences/letterboxing-middle.svg",
|
|
| 140 | + },
|
|
| 141 | + },
|
|
| 142 | + ],
|
|
| 134 | 143 | },
|
| 135 | 144 | ],
|
| 136 | 145 | },
|
| 137 | 146 | ],
|
| 138 | 147 | },
|
| 139 | 148 | }); |
| 140 | - |
|
| 141 | -var gLetterboxingPrefs = {
|
|
| 142 | - init() {
|
|
| 143 | - const rfpSetting = Preferences.getSetting("resistFingerprinting");
|
|
| 144 | - const updateCategoryVisibility = () => {
|
|
| 145 | - document
|
|
| 146 | - .getElementById("letterboxingCategory")
|
|
| 147 | - .classList.toggle("hide-all-letterboxing", !rfpSetting.value);
|
|
| 148 | - };
|
|
| 149 | - rfpSetting.on("change", updateCategoryVisibility);
|
|
| 150 | - updateCategoryVisibility();
|
|
| 151 | - initSettingGroup("letterboxingDisabled");
|
|
| 152 | - initSettingGroup("letterboxingSize");
|
|
| 153 | - initSettingGroup("letterboxingAlignment");
|
|
| 154 | - },
|
|
| 155 | -}; |
| ... | ... | @@ -71,7 +71,7 @@ browser.jar: |
| 71 | 71 | content/browser/preferences/widgets/update-state.mjs (widgets/update-state/update-state.mjs)
|
| 72 | 72 | content/browser/preferences/widgets/update-state.css (widgets/update-state/update-state.css)
|
| 73 | 73 | |
| 74 | - content/browser/preferences/letterboxing.js
|
|
| 75 | - content/browser/preferences/letterboxing.css
|
|
| 76 | - content/browser/preferences/letterboxing-middle.svg
|
|
| 77 | - content/browser/preferences/letterboxing-top.svg |
|
| 74 | + content/browser/preferences/config/letterboxing.mjs (config/letterboxing.mjs)
|
|
| 75 | + content/browser/preferences/letterboxing.css (letterboxing.css)
|
|
| 76 | + content/browser/preferences/letterboxing-middle.svg (letterboxing-middle.svg)
|
|
| 77 | + content/browser/preferences/letterboxing-top.svg (letterboxing-top.svg) |
| 1 | -<script src="chrome://browser/content/preferences/letterboxing.js" />
|
|
| 2 | -<vbox
|
|
| 3 | - id="letterboxingCategory"
|
|
| 4 | - class="subcategory"
|
|
| 5 | - hidden="true"
|
|
| 6 | - data-category="paneGeneral"
|
|
| 7 | ->
|
|
| 8 | - <html:h1 data-l10n-id="letterboxing-header" />
|
|
| 9 | - <description class="letterboxing-overview description-deemphasized">
|
|
| 10 | - <html:span data-l10n-id="letterboxing-overview"></html:span>
|
|
| 11 | - <html:a
|
|
| 12 | - is="moz-support-link"
|
|
| 13 | - support-page="tor-manual:features__fingerprinting-protections___letterboxing"
|
|
| 14 | - data-l10n-id="letterboxing-learn-more"
|
|
| 15 | - ></html:a>
|
|
| 16 | - </description>
|
|
| 17 | -</vbox>
|
|
| 18 | -<groupbox data-category="paneGeneral" hidden="true">
|
|
| 19 | - <html:setting-group groupid="letterboxingDisabled"></html:setting-group>
|
|
| 20 | -</groupbox>
|
|
| 21 | -<groupbox data-category="paneGeneral" hidden="true">
|
|
| 22 | - <html:setting-group groupid="letterboxingSize"></html:setting-group>
|
|
| 23 | -</groupbox>
|
|
| 24 | -<groupbox data-category="paneGeneral" hidden="true">
|
|
| 25 | - <html:setting-group groupid="letterboxingAlignment"></html:setting-group>
|
|
| 26 | -</groupbox> |
| ... | ... | @@ -40,7 +40,7 @@ |
| 40 | 40 | <html:setting-group groupid="browserLayout" data-category="paneGeneral" data-subcategory="layout" data-srd-migrated="" hidden="true"></html:setting-group>
|
| 41 | 41 | |
| 42 | 42 | <!-- Letterboxing -->
|
| 43 | -#include ./letterboxing.inc.xhtml
|
|
| 43 | +<html:setting-group data-category="paneGeneral" groupid="letterboxing" data-srd-migrated="" hidden="true"></html:setting-group>
|
|
| 44 | 44 | |
| 45 | 45 | <hbox id="languageAndAppearanceCategory"
|
| 46 | 46 | class="subcategory"
|
| ... | ... | @@ -10,7 +10,6 @@ |
| 10 | 10 | /** @import { HandlerInfoWrapper, ApplicationListItem } from './config/downloads.mjs';*/
|
| 11 | 11 | |
| 12 | 12 | /* import-globals-from extensionControlled.js */
|
| 13 | -/* import-globals-from letterboxing.js */
|
|
| 14 | 13 | /* import-globals-from preferences.js */
|
| 15 | 14 | /* import-globals-from /toolkit/mozapps/preferences/fontbuilder.js */
|
| 16 | 15 | /* import-globals-from /browser/base/content/aboutDialog-appUpdater.js */
|
| ... | ... | @@ -841,6 +840,7 @@ var gMainPane = { |
| 841 | 840 | initSettingGroup("tabs");
|
| 842 | 841 | initSettingGroup("profiles");
|
| 843 | 842 | initSettingGroup("profilePane");
|
| 843 | + initSettingGroup("letterboxing");
|
|
| 844 | 844 | |
| 845 | 845 | setEventListener("manageBrowserLanguagesButton", "command", function () {
|
| 846 | 846 | gMainPane.showBrowserLanguagesSubDialog({ search: false });
|
| ... | ... | @@ -857,8 +857,6 @@ var gMainPane = { |
| 857 | 857 | // Listen for window unload so we can remove our preference observers.
|
| 858 | 858 | window.addEventListener("unload", this);
|
| 859 | 859 | |
| 860 | - gLetterboxingPrefs.init();
|
|
| 861 | - |
|
| 862 | 860 | // Notify observers that the UI is now ready
|
| 863 | 861 | Services.obs.notifyObservers(window, "main-pane-loaded");
|
| 864 | 862 | this.setInitialized();
|
| ... | ... | @@ -245,7 +245,7 @@ const CONFIG_PANES = Object.freeze({ |
| 245 | 245 | },
|
| 246 | 246 | appearance: {
|
| 247 | 247 | l10nId: "preferences-appearance-header",
|
| 248 | - groupIds: ["appearance", "browserTheme", "relatedSettings"],
|
|
| 248 | + groupIds: ["appearance", "browserTheme", "letterboxing", "relatedSettings"],
|
|
| 249 | 249 | module: "chrome://browser/content/preferences/config/appearance.mjs",
|
| 250 | 250 | iconSrc: "chrome://global/skin/icons/eye.svg",
|
| 251 | 251 | visible: () => srdSectionPrefs.all,
|
| ... | ... | @@ -81,6 +81,12 @@ letterboxing-header = Letterboxing |
| 81 | 81 | # "Letterboxing" should be treated as a feature/product name, and likely not changed in other languages.
|
| 82 | 82 | letterboxing-overview = { -brand-short-name }'s Letterboxing feature restricts websites to display at specific sizes, making it harder to single out users on the basis of their window or screen size.
|
| 83 | 83 | letterboxing-learn-more = Learn more
|
| 84 | +# The word "Letterboxing" is the proper noun for the Tor Browser feature, and is therefore capitalised.
|
|
| 85 | +# "Letterboxing" should be treated as a feature/product name, and likely not changed in other languages.
|
|
| 86 | +# "{ -brand-short-name }" will be replaced with the localized name of the browser, e.g. "Tor Browser".
|
|
| 87 | +letterboxing-settings-group =
|
|
| 88 | + .label = Letterboxing
|
|
| 89 | + .description = { -brand-short-name }'s Letterboxing feature restricts websites to display at specific sizes, making it harder to single out users on the basis of their window or screen size.
|
|
| 84 | 90 | letterboxing-window-size-group =
|
| 85 | 91 | .label = Window size
|
| 86 | 92 | letterboxing-remember-size =
|
| 1 | +from fluent.migrate.helpers import transforms_from
|
|
| 2 | + |
|
| 3 | + |
|
| 4 | +def migrate(ctx):
|
|
| 5 | + ctx.add_transforms(
|
|
| 6 | + "base-browser.ftl",
|
|
| 7 | + "base-browser.ftl",
|
|
| 8 | + transforms_from(
|
|
| 9 | + """
|
|
| 10 | +letterboxing-settings-group =
|
|
| 11 | + .label = { COPY_PATTERN(path, "letterboxing-header") }
|
|
| 12 | + .description = { COPY_PATTERN(path, "letterboxing-overview") }
|
|
| 13 | +""",
|
|
| 14 | + path="base-browser.ftl",
|
|
| 15 | + ),
|
|
| 16 | + ) |