richard pushed to branch base-browser-115.9.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
- 
ba14a74d
by Richard Pospesel at 2024-03-25T22:15:25+00:00
- 
c14810dd
by Henry Wilkes at 2024-03-25T22:16:38+00:00
- 
8f87ed96
by Henry Wilkes at 2024-03-25T22:17:23+00:00
7 changed files:
- browser/components/preferences/preferences.xhtml
- browser/components/securitylevel/content/securityLevel.js
- browser/components/securitylevel/content/securityLevelPanel.inc.xhtml
- browser/components/securitylevel/content/securityLevelPreferences.inc.xhtml
- browser/locales/en-US/browser/base-browser.ftl
- browser/locales/jar.mn
- − tools/torbrowser/l10n/migrations/bug-42211-new-identity.py
Changes:
| ... | ... | @@ -58,6 +58,7 @@ | 
| 58 | 58 |    <link rel="localization" href="">"security/certificates/certManager.ftl"/>
 | 
| 59 | 59 |    <link rel="localization" href="">"security/certificates/deviceManager.ftl"/>
 | 
| 60 | 60 |    <link rel="localization" href="">"toolkit/updates/history.ftl"/>
 | 
| 61 | +  <link rel="localization" href="">"browser/base-browser.ftl"/>
 | |
| 61 | 62 | |
| 62 | 63 |    <link rel="shortcut icon" href="">"chrome://global/skin/icons/settings.svg"/>
 | 
| 63 | 64 | 
| ... | ... | @@ -8,65 +8,6 @@ ChromeUtils.defineModuleGetter( | 
| 8 | 8 |    "resource://gre/modules/SecurityLevel.jsm"
 | 
| 9 | 9 |  );
 | 
| 10 | 10 | |
| 11 | -XPCOMUtils.defineLazyGetter(this, "SecurityLevelStrings", () => {
 | |
| 12 | -  let strings = {
 | |
| 13 | -    // Generic terms
 | |
| 14 | -    security_level: "Security Level",
 | |
| 15 | -    security_level_standard: "Standard",
 | |
| 16 | -    security_level_safer: "Safer",
 | |
| 17 | -    security_level_safest: "Safest",
 | |
| 18 | -    security_level_tooltip_standard: "Security Level: Standard",
 | |
| 19 | -    security_level_tooltip_safer: "Security Level: Safer",
 | |
| 20 | -    security_level_tooltip_safest: "Security Level: Safest",
 | |
| 21 | -    // Shown only for custom level
 | |
| 22 | -    security_level_custom: "Custom",
 | |
| 23 | -    security_level_restore: "Restore Defaults",
 | |
| 24 | -    security_level_learn_more: "Learn more",
 | |
| 25 | -    // Panel
 | |
| 26 | -    security_level_open_settings: "Settings…",
 | |
| 27 | -    security_level_standard_summary:
 | |
| 28 | -      "All browser and website features are enabled.",
 | |
| 29 | -    security_level_safer_summary:
 | |
| 30 | -      "Disables website features that are often dangerous, causing some sites to lose functionality.",
 | |
| 31 | -    security_level_safest_summary:
 | |
| 32 | -      "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.",
 | |
| 33 | -    security_level_custom_heading: "Custom security level configured",
 | |
| 34 | -    security_level_custom_summary:
 | |
| 35 | -      "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels.",
 | |
| 36 | -    // Security level section in about:preferences#privacy
 | |
| 37 | -    security_level_overview:
 | |
| 38 | -      "Disable certain web features that can be used to attack your security and anonymity.",
 | |
| 39 | -    security_level_list_safer: "At the safer setting:",
 | |
| 40 | -    security_level_list_safest: "At the safest setting:",
 | |
| 41 | -    // Strings for descriptions
 | |
| 42 | -    security_level_js_https_only: "_javascript_ is disabled on non-HTTPS sites.",
 | |
| 43 | -    security_level_js_disabled:
 | |
| 44 | -      "_javascript_ is disabled by default on all sites.",
 | |
| 45 | -    security_level_limit_typography:
 | |
| 46 | -      "Some fonts and math symbols are disabled.",
 | |
| 47 | -    security_level_limit_typography_svg:
 | |
| 48 | -      "Some fonts, icons, math symbols, and images are disabled.",
 | |
| 49 | -    security_level_limit_media:
 | |
| 50 | -      "Audio and video (HTML5 media), and WebGL are click-to-play.",
 | |
| 51 | -  };
 | |
| 52 | -  let bundle = null;
 | |
| 53 | -  try {
 | |
| 54 | -    bundle = Services.strings.createBundle(
 | |
| 55 | -      "chrome://browser/locale/securityLevel.properties"
 | |
| 56 | -    );
 | |
| 57 | -  } catch (e) {
 | |
| 58 | -    console.warn("Could not load the Security Level strings");
 | |
| 59 | -  }
 | |
| 60 | -  if (bundle) {
 | |
| 61 | -    for (const key of Object.keys(strings)) {
 | |
| 62 | -      try {
 | |
| 63 | -        strings[key] = bundle.GetStringFromName(key);
 | |
| 64 | -      } catch (e) {}
 | |
| 65 | -    }
 | |
| 66 | -  }
 | |
| 67 | -  return strings;
 | |
| 68 | -});
 | |
| 69 | - | |
| 70 | 11 |  /*
 | 
| 71 | 12 |    Security Level Button Code
 | 
| 72 | 13 | |
| ... | ... | @@ -100,12 +41,30 @@ var SecurityLevelButton = { | 
| 100 | 41 |      if (!level) {
 | 
| 101 | 42 |        return;
 | 
| 102 | 43 |      }
 | 
| 103 | -    const customStr = SecurityLevelPrefs.securityCustom ? "_custom" : "";
 | |
| 104 | -    this._button.setAttribute("level", `${level}${customStr}`);
 | |
| 105 | -    this._button.setAttribute(
 | |
| 106 | -      "tooltiptext",
 | |
| 107 | -      SecurityLevelStrings[`security_level_tooltip_${level}`]
 | |
| 108 | -    );
 | |
| 44 | +    const custom = SecurityLevelPrefs.securityCustom;
 | |
| 45 | +    this._button.setAttribute("level", custom ? `${level}_custom` : level);
 | |
| 46 | + | |
| 47 | +    let l10nIdLevel;
 | |
| 48 | +    switch (level) {
 | |
| 49 | +      case "standard":
 | |
| 50 | +        l10nIdLevel = "security-level-toolbar-button-standard";
 | |
| 51 | +        break;
 | |
| 52 | +      case "safer":
 | |
| 53 | +        l10nIdLevel = "security-level-toolbar-button-safer";
 | |
| 54 | +        break;
 | |
| 55 | +      case "safest":
 | |
| 56 | +        l10nIdLevel = "security-level-toolbar-button-safest";
 | |
| 57 | +        break;
 | |
| 58 | +      default:
 | |
| 59 | +        throw Error(`Unhandled level: ${level}`);
 | |
| 60 | +    }
 | |
| 61 | +    if (custom) {
 | |
| 62 | +      // Don't distinguish between the different levels when in the custom
 | |
| 63 | +      // state. We just want to emphasise that it is custom rather than any
 | |
| 64 | +      // specific level.
 | |
| 65 | +      l10nIdLevel = "security-level-toolbar-button-custom";
 | |
| 66 | +    }
 | |
| 67 | +    document.l10n.setAttributes(this._button, l10nIdLevel);
 | |
| 109 | 68 |    },
 | 
| 110 | 69 | |
| 111 | 70 |    /**
 | 
| ... | ... | @@ -159,7 +118,6 @@ var SecurityLevelButton = { | 
| 159 | 118 |        window.gNavToolbox.palette.querySelector("#security-level-button");
 | 
| 160 | 119 |      // Set a label to be be used as the accessible name, and to be shown in the
 | 
| 161 | 120 |      // overflow menu and during customization.
 | 
| 162 | -    this._button.setAttribute("label", SecurityLevelStrings.security_level);
 | |
| 163 | 121 |      this._button.addEventListener("command", () => this.openPopup());
 | 
| 164 | 122 |      // set the initial class based off of the current pref
 | 
| 165 | 123 |      this._configUIFromPrefs();
 | 
| ... | ... | @@ -213,21 +171,12 @@ var SecurityLevelPanel = { | 
| 213 | 171 |        settingsButton: document.getElementById("securityLevel-settings"),
 | 
| 214 | 172 |      };
 | 
| 215 | 173 | |
| 216 | -    document.getElementById("securityLevel-header").textContent =
 | |
| 217 | -      SecurityLevelStrings.security_level;
 | |
| 218 | -    this._elements.customName.textContent =
 | |
| 219 | -      SecurityLevelStrings.security_level_custom;
 | |
| 220 | 174 |      const learnMoreEl = document.getElementById("securityLevel-learnMore");
 | 
| 221 | -    learnMoreEl.textContent = SecurityLevelStrings.security_level_learn_more;
 | |
| 222 | 175 |      learnMoreEl.addEventListener("click", event => {
 | 
| 223 | 176 |        window.openTrustedLinkIn(learnMoreEl.href, "tab");
 | 
| 224 | 177 |        this.hide();
 | 
| 225 | 178 |        event.preventDefault();
 | 
| 226 | 179 |      });
 | 
| 227 | -    this._elements.restoreDefaultsButton.textContent =
 | |
| 228 | -      SecurityLevelStrings.security_level_restore;
 | |
| 229 | -    this._elements.settingsButton.textContent =
 | |
| 230 | -      SecurityLevelStrings.security_level_open_settings;
 | |
| 231 | 180 | |
| 232 | 181 |      this._elements.restoreDefaultsButton.addEventListener("command", () => {
 | 
| 233 | 182 |        this.restoreDefaults();
 | 
| ... | ... | @@ -268,11 +217,30 @@ var SecurityLevelPanel = { | 
| 268 | 217 | |
| 269 | 218 |      // Descriptions change based on security level
 | 
| 270 | 219 |      this._elements.background.setAttribute("level", level);
 | 
| 271 | -    this._elements.levelName.textContent =
 | |
| 272 | -      SecurityLevelStrings[`security_level_${level}`];
 | |
| 273 | -    this._elements.summary.textContent = custom
 | |
| 274 | -      ? SecurityLevelStrings.security_level_custom_summary
 | |
| 275 | -      : SecurityLevelStrings[`security_level_${level}_summary`];
 | |
| 220 | +    let l10nIdLevel;
 | |
| 221 | +    let l10nIdSummary;
 | |
| 222 | +    switch (level) {
 | |
| 223 | +      case "standard":
 | |
| 224 | +        l10nIdLevel = "security-level-panel-level-standard";
 | |
| 225 | +        l10nIdSummary = "security-level-summary-standard";
 | |
| 226 | +        break;
 | |
| 227 | +      case "safer":
 | |
| 228 | +        l10nIdLevel = "security-level-panel-level-safer";
 | |
| 229 | +        l10nIdSummary = "security-level-summary-safer";
 | |
| 230 | +        break;
 | |
| 231 | +      case "safest":
 | |
| 232 | +        l10nIdLevel = "security-level-panel-level-safest";
 | |
| 233 | +        l10nIdSummary = "security-level-summary-safest";
 | |
| 234 | +        break;
 | |
| 235 | +      default:
 | |
| 236 | +        throw Error(`Unhandled level: ${level}`);
 | |
| 237 | +    }
 | |
| 238 | +    if (custom) {
 | |
| 239 | +      l10nIdSummary = "security-level-summary-custom";
 | |
| 240 | +    }
 | |
| 241 | + | |
| 242 | +    document.l10n.setAttributes(this._elements.levelName, l10nIdLevel);
 | |
| 243 | +    document.l10n.setAttributes(this._elements.summary, l10nIdSummary);
 | |
| 276 | 244 |    },
 | 
| 277 | 245 | |
| 278 | 246 |    /**
 | 
| ... | ... | @@ -358,25 +326,13 @@ var SecurityLevelPreferences = { | 
| 358 | 326 |      this._customNotification = document.getElementById(
 | 
| 359 | 327 |        "securityLevel-customNotification"
 | 
| 360 | 328 |      );
 | 
| 361 | -    this._radiogroup = document.getElementById("securityLevel-radiogroup");
 | |
| 362 | - | |
| 363 | -    document.querySelector("#securityLevel-groupbox h2").textContent =
 | |
| 364 | -      SecurityLevelStrings.security_level;
 | |
| 365 | -    document.getElementById("securityLevel-overview").textContent =
 | |
| 366 | -      SecurityLevelStrings.security_level_overview;
 | |
| 367 | 329 |      document
 | 
| 368 | -      .getElementById("securityLevel-learnMore")
 | |
| 369 | -      .setAttribute("value", SecurityLevelStrings.security_level_learn_more);
 | |
| 370 | - | |
| 371 | -    document.getElementById("securityLevel-customHeading").textContent =
 | |
| 372 | -      SecurityLevelStrings.security_level_custom_heading;
 | |
| 373 | -    document.getElementById("securityLevel-customDescription").textContent =
 | |
| 374 | -      SecurityLevelStrings.security_level_custom_summary;
 | |
| 375 | -    const restoreDefaultsButton = document.getElementById(
 | |
| 376 | -      "securityLevel-restoreDefaults"
 | |
| 377 | -    );
 | |
| 378 | -    restoreDefaultsButton.textContent =
 | |
| 379 | -      SecurityLevelStrings.security_level_restore;
 | |
| 330 | +      .getElementById("securityLevel-restoreDefaults")
 | |
| 331 | +      .addEventListener("command", () => {
 | |
| 332 | +        SecurityLevelPrefs.securityCustom = false;
 | |
| 333 | +      });
 | |
| 334 | + | |
| 335 | +    this._radiogroup = document.getElementById("securityLevel-radiogroup");
 | |
| 380 | 336 | |
| 381 | 337 |      this._radioOptions = Array.from(
 | 
| 382 | 338 |        this._radiogroup.querySelectorAll(".securityLevel-radio-option"),
 | 
| ... | ... | @@ -384,46 +340,7 @@ var SecurityLevelPreferences = { | 
| 384 | 340 |          return { container, radio: container.querySelector("radio") };
 | 
| 385 | 341 |        }
 | 
| 386 | 342 |      );
 | 
| 387 | -    const descListItemsMap = {
 | |
| 388 | -      safer: [
 | |
| 389 | -        SecurityLevelStrings.security_level_js_https_only,
 | |
| 390 | -        SecurityLevelStrings.security_level_limit_typography,
 | |
| 391 | -        SecurityLevelStrings.security_level_limit_media,
 | |
| 392 | -      ],
 | |
| 393 | -      safest: [
 | |
| 394 | -        SecurityLevelStrings.security_level_js_disabled,
 | |
| 395 | -        SecurityLevelStrings.security_level_limit_typography_svg,
 | |
| 396 | -        SecurityLevelStrings.security_level_limit_media,
 | |
| 397 | -      ],
 | |
| 398 | -    };
 | |
| 399 | -    for (const { container, radio } of this._radioOptions) {
 | |
| 400 | -      const level = radio.value;
 | |
| 401 | -      radio.setAttribute(
 | |
| 402 | -        "label",
 | |
| 403 | -        SecurityLevelStrings[`security_level_${level}`]
 | |
| 404 | -      );
 | |
| 405 | -      container.querySelector(".summary").textContent =
 | |
| 406 | -        SecurityLevelStrings[`security_level_${level}_summary`];
 | |
| 407 | -      const descListItems = descListItemsMap[level];
 | |
| 408 | -      if (!descListItems) {
 | |
| 409 | -        continue;
 | |
| 410 | -      }
 | |
| 411 | -      const descrList = container.querySelector(
 | |
| 412 | -        ".securityLevel-descriptionList"
 | |
| 413 | -      );
 | |
| 414 | -      // TODO: Add the elements in securityLevelPreferences.inc.xhtml again
 | |
| 415 | -      // when we switch to Fluent
 | |
| 416 | -      for (const text of descListItems) {
 | |
| 417 | -        let elem = document.createXULElement("description");
 | |
| 418 | -        elem.textContent = text;
 | |
| 419 | -        elem.className = "indent";
 | |
| 420 | -        descrList.append(elem);
 | |
| 421 | -      }
 | |
| 422 | -    }
 | |
| 423 | 343 | |
| 424 | -    restoreDefaultsButton.addEventListener("command", () => {
 | |
| 425 | -      SecurityLevelPrefs.securityCustom = false;
 | |
| 426 | -    });
 | |
| 427 | 344 |      this._radiogroup.addEventListener("select", () => {
 | 
| 428 | 345 |        SecurityLevelPrefs.securityLevel = this._radiogroup.value;
 | 
| 429 | 346 |      });
 | 
| ... | ... | @@ -7,20 +7,35 @@ | 
| 7 | 7 |         level="top"
 | 
| 8 | 8 |         class="cui-widget-panel panel-no-padding">
 | 
| 9 | 9 |    <box class="panel-header">
 | 
| 10 | -    <html:h1 id="securityLevel-header"></html:h1>
 | |
| 10 | +    <html:h1
 | |
| 11 | +      id="securityLevel-header"
 | |
| 12 | +      data-l10n-id="security-level-panel-heading"
 | |
| 13 | +    ></html:h1>
 | |
| 11 | 14 |    </box>
 | 
| 12 | 15 |    <toolbarseparator id="securityLevel-separator"></toolbarseparator>
 | 
| 13 | 16 |    <vbox id="securityLevel-background" class="panel-subview-body">
 | 
| 14 | 17 |      <html:p id="securityLevel-subheading">
 | 
| 15 | 18 |        <html:span id="securityLevel-level"></html:span>
 | 
| 16 | -      <html:span id="securityLevel-custom"></html:span>
 | |
| 19 | +      <html:span
 | |
| 20 | +        id="securityLevel-custom"
 | |
| 21 | +        data-l10n-id="security-level-panel-custom-badge"
 | |
| 22 | +      ></html:span>
 | |
| 17 | 23 |      </html:p>
 | 
| 18 | 24 |      <html:p id="securityLevel-summary"></html:p>
 | 
| 19 | -    <html:a id="securityLevel-learnMore" href="">"about:manual#security-settings">
 | |
| 20 | -    </html:a>
 | |
| 25 | +    <html:a
 | |
| 26 | +      id="securityLevel-learnMore"
 | |
| 27 | +      data-l10n-id="security-level-panel-learn-more-link"
 | |
| 28 | +      href="">"about:manual#security-settings"
 | |
| 29 | +    ></html:a>
 | |
| 21 | 30 |    </vbox>
 | 
| 22 | 31 |    <hbox class="panel-footer">
 | 
| 23 | -    <button id="securityLevel-settings"/>
 | |
| 24 | -    <button id="securityLevel-restoreDefaults"/>
 | |
| 32 | +    <button
 | |
| 33 | +      id="securityLevel-settings"
 | |
| 34 | +      data-l10n-id="security-level-panel-open-settings-button"
 | |
| 35 | +    />
 | |
| 36 | +    <button
 | |
| 37 | +      id="securityLevel-restoreDefaults"
 | |
| 38 | +      data-l10n-id="security-level-restore-defaults-button"
 | |
| 39 | +    />
 | |
| 25 | 40 |    </hbox>
 | 
| 26 | 41 |  </panel> | 
| ... | ... | @@ -2,37 +2,64 @@ | 
| 2 | 2 |            data-category="panePrivacy"
 | 
| 3 | 3 |            data-subcategory="securitylevel"
 | 
| 4 | 4 |            hidden="true">
 | 
| 5 | -  <label><html:h2></html:h2></label>
 | |
| 5 | +  <label>
 | |
| 6 | +    <html:h2 data-l10n-id="security-level-preferences-heading"></html:h2>
 | |
| 7 | +  </label>
 | |
| 6 | 8 |    <vbox flex="1">
 | 
| 7 | 9 |      <description flex="1">
 | 
| 8 | -      <html:span id="securityLevel-overview" class="tail-with-learn-more">
 | |
| 9 | -      </html:span>
 | |
| 10 | -      <label id="securityLevel-learnMore"
 | |
| 11 | -             class="learnMore text-link"
 | |
| 12 | -             is="text-link"
 | |
| 13 | -             href="">"about:manual#security-settings"
 | |
| 14 | -             useoriginprincipal="true"/>
 | |
| 10 | +      <html:span
 | |
| 11 | +        id="securityLevel-overview"
 | |
| 12 | +        class="tail-with-learn-more"
 | |
| 13 | +        data-l10n-id="security-level-preferences-overview"
 | |
| 14 | +      ></html:span>
 | |
| 15 | +      <label
 | |
| 16 | +        id="securityLevel-learnMore"
 | |
| 17 | +        class="learnMore text-link"
 | |
| 18 | +        is="text-link"
 | |
| 19 | +        data-l10n-id="security-level-preferences-learn-more-link"
 | |
| 20 | +        href="">"about:manual#security-settings"
 | |
| 21 | +        useoriginprincipal="true"
 | |
| 22 | +      />
 | |
| 15 | 23 |      </description>
 | 
| 16 | -    <hbox id="securityLevel-customNotification"
 | |
| 17 | -          class="info-box-container"
 | |
| 18 | -          flex="1">
 | |
| 24 | +    <hbox
 | |
| 25 | +      id="securityLevel-customNotification"
 | |
| 26 | +      class="info-box-container"
 | |
| 27 | +      flex="1"
 | |
| 28 | +    >
 | |
| 19 | 29 |        <hbox class="info-icon-container">
 | 
| 20 | 30 |          <image class="info-icon securityLevel-custom-warning-icon"/>
 | 
| 21 | 31 |        </hbox>
 | 
| 22 | 32 |        <vbox flex="1">
 | 
| 23 | -        <label id="securityLevel-customHeading"/>
 | |
| 24 | -        <description id="securityLevel-customDescription" flex="1"/>
 | |
| 33 | +        <label
 | |
| 34 | +          id="securityLevel-customHeading"
 | |
| 35 | +          data-l10n-id="security-level-preferences-custom-heading"
 | |
| 36 | +        />
 | |
| 37 | +        <description
 | |
| 38 | +          id="securityLevel-customDescription"
 | |
| 39 | +          data-l10n-id="security-level-summary-custom"
 | |
| 40 | +          flex="1"
 | |
| 41 | +        />
 | |
| 25 | 42 |        </vbox>
 | 
| 26 | 43 |        <hbox align="center">
 | 
| 27 | -        <button id="securityLevel-restoreDefaults"/>
 | |
| 44 | +        <button
 | |
| 45 | +          id="securityLevel-restoreDefaults"
 | |
| 46 | +          data-l10n-id="security-level-restore-defaults-button"
 | |
| 47 | +        />
 | |
| 28 | 48 |        </hbox>
 | 
| 29 | 49 |      </hbox>
 | 
| 30 | 50 |      <radiogroup id="securityLevel-radiogroup">
 | 
| 31 | 51 |        <vbox class="securityLevel-radio-option">
 | 
| 32 | -        <radio value="standard"
 | |
| 33 | -               aria-describedby="securityLevelSummary-standard"/>
 | |
| 52 | +        <radio
 | |
| 53 | +          value="standard"
 | |
| 54 | +          data-l10n-id="security-level-preferences-level-standard"
 | |
| 55 | +          aria-describedby="securityLevelSummary-standard"
 | |
| 56 | +        />
 | |
| 34 | 57 |          <vbox id="securityLevelSummary-standard">
 | 
| 35 | -          <description class="summary indent" flex="1"/>
 | |
| 58 | +          <description
 | |
| 59 | +            class="summary indent"
 | |
| 60 | +            flex="1"
 | |
| 61 | +            data-l10n-id="security-level-summary-standard"
 | |
| 62 | +          />
 | |
| 36 | 63 |          </vbox>
 | 
| 37 | 64 |        </vbox>
 | 
| 38 | 65 |        <vbox class="securityLevel-radio-option">
 | 
| ... | ... | @@ -41,19 +68,59 @@ | 
| 41 | 68 |            - securityLevel-descriptionList is shown or hidden, its text content
 | 
| 42 | 69 |            - is included or excluded from the accessible description,
 | 
| 43 | 70 |            - respectively. -->
 | 
| 44 | -        <radio value="safer"
 | |
| 45 | -               aria-describedby="securityLevelSummary-safer"/>
 | |
| 71 | +        <radio
 | |
| 72 | +          value="safer"
 | |
| 73 | +          data-l10n-id="security-level-preferences-level-safer"
 | |
| 74 | +          aria-describedby="securityLevelSummary-safer"
 | |
| 75 | +        />
 | |
| 46 | 76 |          <vbox id="securityLevelSummary-safer">
 | 
| 47 | -          <description class="summary indent" flex="1"/>
 | |
| 48 | -          <vbox class="securityLevel-descriptionList indent"/>
 | |
| 77 | +          <description
 | |
| 78 | +            class="summary indent"
 | |
| 79 | +            flex="1"
 | |
| 80 | +            data-l10n-id="security-level-summary-safer"
 | |
| 81 | +          />
 | |
| 82 | +          <vbox class="securityLevel-descriptionList indent">
 | |
| 83 | +            <description
 | |
| 84 | +              class="indent"
 | |
| 85 | +              data-l10n-id="security-level-preferences-bullet-https-only-_javascript_"
 | |
| 86 | +            />
 | |
| 87 | +            <description
 | |
| 88 | +              class="indent"
 | |
| 89 | +              data-l10n-id="security-level-preferences-bullet-limit-font-and-symbols"
 | |
| 90 | +            />
 | |
| 91 | +            <description
 | |
| 92 | +              class="indent"
 | |
| 93 | +              data-l10n-id="security-level-preferences-bullet-limit-media"
 | |
| 94 | +            />
 | |
| 95 | +          </vbox>
 | |
| 49 | 96 |          </vbox>
 | 
| 50 | 97 |        </vbox>
 | 
| 51 | 98 |        <vbox class="securityLevel-radio-option">
 | 
| 52 | -        <radio value="safest"
 | |
| 53 | -               aria-describedby="securityLevelSummary-safest"/>
 | |
| 99 | +        <radio
 | |
| 100 | +          value="safest"
 | |
| 101 | +          data-l10n-id="security-level-preferences-level-safest"
 | |
| 102 | +          aria-describedby="securityLevelSummary-safest"
 | |
| 103 | +        />
 | |
| 54 | 104 |          <vbox id="securityLevelSummary-safest">
 | 
| 55 | -          <description class="summary indent" flex="1"/>
 | |
| 56 | -          <vbox class="securityLevel-descriptionList indent"/>
 | |
| 105 | +          <description
 | |
| 106 | +            class="summary indent"
 | |
| 107 | +            flex="1"
 | |
| 108 | +            data-l10n-id="security-level-summary-safest"
 | |
| 109 | +          />
 | |
| 110 | +          <vbox class="securityLevel-descriptionList indent">
 | |
| 111 | +            <description
 | |
| 112 | +              class="indent"
 | |
| 113 | +              data-l10n-id="security-level-preferences-bullet-disabled-_javascript_"
 | |
| 114 | +            />
 | |
| 115 | +            <description
 | |
| 116 | +              class="indent"
 | |
| 117 | +              data-l10n-id="security-level-preferences-bullet-limit-font-and-symbols-and-images"
 | |
| 118 | +            />
 | |
| 119 | +            <description
 | |
| 120 | +              class="indent"
 | |
| 121 | +              data-l10n-id="security-level-preferences-bullet-limit-media"
 | |
| 122 | +            />
 | |
| 123 | +          </vbox>
 | |
| 57 | 124 |          </vbox>
 | 
| 58 | 125 |        </vbox>
 | 
| 59 | 126 |      </radiogroup>
 | 
| ... | ... | @@ -70,6 +70,7 @@ new-identity-dialog-confirm = | 
| 70 | 70 |  new-identity-blocked-home-notification = { -brand-short-name } blocked your homepage ({ $url }) from loading because it might recognize your previous session.
 | 
| 71 | 71 |  # Button to continue loading the home page, despite the warning message.
 | 
| 72 | 72 |  new-identity-blocked-home-ignore-button = Load it anyway
 | 
| 73 | + | |
| 73 | 74 |  ## Preferences - Letterboxing.
 | 
| 74 | 75 | |
| 75 | 76 |  # The word "Letterboxing" is the proper noun for the Tor Browser feature, and is therefore capitalised.
 | 
| ... | ... | @@ -94,3 +95,74 @@ letterboxing-disabled-description = Letterboxing is currently disabled. | 
| 94 | 95 |  # "Letterboxing" should be treated as a feature/product name, and likely not changed in other languages.
 | 
| 95 | 96 |  letterboxing-enable-button =
 | 
| 96 | 97 |      .label = Enable Letterboxing
 | 
| 98 | + | |
| 99 | +## Security level toolbar button.
 | |
| 100 | +## Uses sentence case in English (US).
 | |
| 101 | +## ".label" is the accessible name, and shown in the overflow menu and when customizing the toolbar.
 | |
| 102 | + | |
| 103 | +security-level-toolbar-button-standard =
 | |
| 104 | +    .label = Security level
 | |
| 105 | +    .tooltiptext = Security level: Standard
 | |
| 106 | +security-level-toolbar-button-safer =
 | |
| 107 | +    .label = Security level
 | |
| 108 | +    .tooltiptext = Security level: Safer
 | |
| 109 | +security-level-toolbar-button-safest =
 | |
| 110 | +    .label = Security level
 | |
| 111 | +    .tooltiptext = Security level: Safest
 | |
| 112 | +# Used when the user is in some custom configuration that does not match a security level.
 | |
| 113 | +security-level-toolbar-button-custom =
 | |
| 114 | +    .label = Security level
 | |
| 115 | +    .tooltiptext = Security level: Custom
 | |
| 116 | + | |
| 117 | +## Security level popup panel.
 | |
| 118 | + | |
| 119 | +# Uses sentence case in English (US).
 | |
| 120 | +security-level-panel-heading = Security level
 | |
| 121 | + | |
| 122 | +security-level-panel-level-standard = Standard
 | |
| 123 | +security-level-panel-level-safer = Safer
 | |
| 124 | +security-level-panel-level-safest = Safest
 | |
| 125 | +security-level-panel-learn-more-link = Learn more
 | |
| 126 | +# Button to open security level settings.
 | |
| 127 | +security-level-panel-open-settings-button = Settings…
 | |
| 128 | + | |
| 129 | +## Security level settings.
 | |
| 130 | + | |
| 131 | +security-level-preferences-heading = Security Level
 | |
| 132 | +security-level-preferences-overview = Disable certain web features that can be used to attack your security and anonymity.
 | |
| 133 | +security-level-preferences-learn-more-link = Learn more
 | |
| 134 | +security-level-preferences-level-standard =
 | |
| 135 | +    .label = Standard
 | |
| 136 | +security-level-preferences-level-safer =
 | |
| 137 | +    .label = Safer
 | |
| 138 | +security-level-preferences-level-safest =
 | |
| 139 | +    .label = Safest
 | |
| 140 | + | |
| 141 | +## Security level summaries shown in security panel and settings.
 | |
| 142 | + | |
| 143 | +security-level-summary-standard = All browser and website features are enabled.
 | |
| 144 | +security-level-summary-safer = Disables website features that are often dangerous, causing some sites to lose functionality.
 | |
| 145 | +security-level-summary-safest = Only allows website features required for static sites and basic services. These changes affect images, media, and scripts.
 | |
| 146 | + | |
| 147 | +## Security level feature bullet points.
 | |
| 148 | +## Shown in the settings under the security level when it is selected.
 | |
| 149 | + | |
| 150 | +security-level-preferences-bullet-https-only-_javascript_ = _javascript_ is disabled on non-HTTPS sites.
 | |
| 151 | +security-level-preferences-bullet-limit-font-and-symbols = Some fonts and math symbols are disabled.
 | |
| 152 | +security-level-preferences-bullet-limit-media = Audio and video (HTML5 media), and WebGL are click-to-play.
 | |
| 153 | +security-level-preferences-bullet-disabled-_javascript_ = _javascript_ is disabled by default on all sites.
 | |
| 154 | +security-level-preferences-bullet-limit-font-and-symbols-and-images = Some fonts, icons, math symbols, and images are disabled.
 | |
| 155 | + | |
| 156 | +## Custom security level.
 | |
| 157 | +## Some custom preferences configuration has placed the user outside one of the standard three levels.
 | |
| 158 | + | |
| 159 | +# Shown in the security level panel as an orange badge next to the expected level.
 | |
| 160 | +security-level-panel-custom-badge = Custom
 | |
| 161 | +# Shown in the security level settings in a warning box.
 | |
| 162 | +security-level-preferences-custom-heading = Custom security level configured
 | |
| 163 | +# Description of custom state and recommended action.
 | |
| 164 | +# Shown in the security level panel and settings.
 | |
| 165 | +security-level-summary-custom = Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels.
 | |
| 166 | +# Button to undo custom changes to the security level and place the user in one of the standard security levels.
 | |
| 167 | +# Shown in the security level panel and settings.
 | |
| 168 | +security-level-restore-defaults-button = Restore defaults | 
| ... | ... | @@ -32,5 +32,4 @@ | 
| 32 | 32 |      locale/browser/safebrowsing/safebrowsing.properties   (%chrome/browser/safebrowsing/safebrowsing.properties)
 | 
| 33 | 33 |      locale/browser/feeds/subscribe.properties       (%chrome/browser/feeds/subscribe.properties)
 | 
| 34 | 34 |      locale/browser/syncSetup.properties         (%chrome/browser/syncSetup.properties)
 | 
| 35 | -    locale/browser/securityLevel.properties        (%chrome/browser/securityLevel.properties)
 | |
| 36 | 35 |  % locale browser-region @AB_CD@ %locale/browser-region/ | 
| 1 | -import fluent.syntax.ast as FTL
 | |
| 2 | -from fluent.migrate.helpers import TERM_REFERENCE, transforms_from
 | |
| 3 | -from fluent.migrate.transforms import REPLACE
 | |
| 4 | - | |
| 5 | - | |
| 6 | -def migrate(ctx):
 | |
| 7 | -    legacy_path = "newIdentity.properties"
 | |
| 8 | - | |
| 9 | -    ctx.add_transforms(
 | |
| 10 | -        "base-browser.ftl",
 | |
| 11 | -        "base-browser.ftl",
 | |
| 12 | -        transforms_from(
 | |
| 13 | -            """
 | |
| 14 | -menu-new-identity =
 | |
| 15 | -    .label = { COPY(path, "new_identity") }
 | |
| 16 | -    .accesskey = { COPY(path, "new_identity_menu_accesskey") }
 | |
| 17 | -appmenuitem-new-identity =
 | |
| 18 | -    .label = { COPY(path, "new_identity_sentence_case") }
 | |
| 19 | -toolbar-new-identity =
 | |
| 20 | -    .label = { COPY(path, "new_identity_sentence_case") }
 | |
| 21 | -    .tooltiptext = { toolbar-new-identity.label }
 | |
| 22 | - | |
| 23 | -new-identity-dialog-title = { COPY(path, "new_identity_prompt_title") }
 | |
| 24 | -new-identity-dialog-never-ask-checkbox =
 | |
| 25 | -    .label = { COPY(path, "new_identity_ask_again") }
 | |
| 26 | - | |
| 27 | -new-identity-blocked-home-ignore-button = { COPY(path, "new_identity_home_load_button") }
 | |
| 28 | -""",
 | |
| 29 | -            path=legacy_path,
 | |
| 30 | -        )
 | |
| 31 | -        + [
 | |
| 32 | -            # Replace "%S" with "{ -brand-short-name }" in confirm button.
 | |
| 33 | -            FTL.Message(
 | |
| 34 | -                id=FTL.Identifier("new-identity-dialog-confirm"),
 | |
| 35 | -                value=None,
 | |
| 36 | -                attributes=[
 | |
| 37 | -                    FTL.Attribute(
 | |
| 38 | -                        id=FTL.Identifier("label"),
 | |
| 39 | -                        value=REPLACE(
 | |
| 40 | -                            legacy_path,
 | |
| 41 | -                            "new_identity_restart",
 | |
| 42 | -                            {"%1$S": TERM_REFERENCE("brand-short-name")},
 | |
| 43 | -                        ),
 | |
| 44 | -                    ),
 | |
| 45 | -                ],
 | |
| 46 | -            ),
 | |
| 47 | -        ],
 | |
| 48 | -    ) |