tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

letterboxing.js (4497B)


      1 /* import-globals-from preferences.js */
      2 /* import-globals-from findInPage.js */
      3 
      4 Preferences.addAll([
      5  {
      6    id: "privacy.resistFingerprinting.letterboxing",
      7    type: "bool",
      8  },
      9  {
     10    id: "privacy.resistFingerprinting.letterboxing.rememberSize",
     11    type: "bool",
     12  },
     13  {
     14    id: "privacy.resistFingerprinting.letterboxing.vcenter",
     15    type: "bool",
     16  },
     17 ]);
     18 
     19 Preferences.addSetting({
     20  id: "letterboxingEnabled",
     21  pref: "privacy.resistFingerprinting.letterboxing",
     22 });
     23 
     24 Preferences.addSetting({
     25  id: "letterboxingRememberSize",
     26  pref: "privacy.resistFingerprinting.letterboxing.rememberSize",
     27  deps: ["letterboxingEnabled", "resistFingerprinting"],
     28  visible: ({ letterboxingEnabled, resistFingerprinting }) => {
     29    return letterboxingEnabled.value && resistFingerprinting.value;
     30  },
     31 });
     32 
     33 Preferences.addSetting({
     34  id: "letterboxingContentAlignment",
     35  pref: "privacy.resistFingerprinting.letterboxing.vcenter",
     36  deps: ["letterboxingEnabled", "resistFingerprinting"],
     37  visible: ({ letterboxingEnabled, resistFingerprinting }) => {
     38    return letterboxingEnabled.value && resistFingerprinting.value;
     39  },
     40  get: val => {
     41    return val ? "middle" : "top";
     42  },
     43  set: val => {
     44    return val == "middle";
     45  },
     46 });
     47 
     48 Preferences.addSetting({
     49  id: "letterboxingShouldEnable",
     50  deps: ["letterboxingEnabled", "resistFingerprinting"],
     51  visible: ({ letterboxingEnabled, resistFingerprinting }) => {
     52    return !letterboxingEnabled.value && resistFingerprinting.value;
     53  },
     54  onUserClick: (e, { letterboxingEnabled }) => {
     55    const buttonEl = document.getElementById("enableLetterboxingButton");
     56    if (!buttonEl?.contains(e.target)) {
     57      return;
     58    }
     59    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    });
     77  },
     78 });
     79 
     80 SettingGroupManager.registerGroups({
     81  letterboxingDisabled: {
     82    items: [
     83      {
     84        id: "letterboxingShouldEnable",
     85        l10nId: "letterboxing-disabled-message",
     86        control: "moz-promo",
     87        options: [
     88          {
     89            control: "moz-button",
     90            l10nId: "letterboxing-enable-button",
     91            id: "enableLetterboxingButton",
     92            slot: "actions",
     93          },
     94        ],
     95      },
     96    ],
     97  },
     98  letterboxingSize: {
     99    l10nId: "letterboxing-window-size-group",
    100    headingLevel: 2,
    101    items: [
    102      {
    103        id: "letterboxingRememberSize",
    104        l10nId: "letterboxing-remember-size",
    105        control: "moz-checkbox",
    106      },
    107    ],
    108  },
    109  letterboxingAlignment: {
    110    l10nId: "letterboxing-alignment-group",
    111    headingLevel: 2,
    112    items: [
    113      {
    114        id: "letterboxingContentAlignment",
    115        control: "moz-visual-picker",
    116        options: [
    117          {
    118            value: "top",
    119            l10nId: "letterboxing-alignment-top-option",
    120            controlAttrs: {
    121              class: "appearance-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: "appearance-chooser-item letterboxing-chooser-item",
    131              imagesrc:
    132                "chrome://browser/content/preferences/letterboxing-middle.svg",
    133            },
    134          },
    135        ],
    136      },
    137    ],
    138  },
    139 });
    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 };