morgan pushed to branch tor-browser-153.0esr-16.0-1 at The Tor Project / Applications / Tor Browser

Commits:

9 changed files:

Changes:

  • browser/components/preferences/config/appearance.mjs
    ... ... @@ -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([
    

  • browser/components/preferences/letterboxing.jsbrowser/components/preferences/config/letterboxing.mjs
    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
    -};

  • browser/components/preferences/jar.mn
    ... ... @@ -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)

  • browser/components/preferences/letterboxing.inc.xhtml deleted
    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>

  • browser/components/preferences/main.inc.xhtml
    ... ... @@ -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"
    

  • browser/components/preferences/main.js
    ... ... @@ -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();
    

  • browser/components/preferences/preferences.js
    ... ... @@ -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,
    

  • toolkit/locales/en-US/toolkit/global/base-browser.ftl
    ... ... @@ -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 =
    

  • tools/torbrowser/l10n/migrations/bug-45079-letterboxing-settings-single.py
    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
    +    )