richard pushed to branch tor-browser-115.9.0esr-13.5-1 at The Tor Project / Applications / Tor Browser

Commits:

5 changed files:

Changes:

  • browser/actors/CryptoSafetyParent.jsm
    ... ... @@ -20,17 +20,8 @@ ChromeUtils.defineModuleGetter(
    20 20
       "resource://gre/modules/TorDomainIsolator.jsm"
    
    21 21
     );
    
    22 22
     
    
    23
    -XPCOMUtils.defineLazyGetter(lazy, "cryptoSafetyBundle", () => {
    
    24
    -  return Services.strings.createBundle(
    
    25
    -    "chrome://browser/locale/cryptoSafetyPrompt.properties"
    
    26
    -  );
    
    27
    -});
    
    28
    -
    
    29
    -// en-US fallback in case a locale is missing a string.
    
    30
    -XPCOMUtils.defineLazyGetter(lazy, "fallbackCryptoSafetyBundle", () => {
    
    31
    -  return Services.strings.createBundle(
    
    32
    -    "resource:///chrome/en-US/locale/browser/cryptoSafetyPrompt.properties"
    
    33
    -  );
    
    23
    +ChromeUtils.defineLazyGetter(lazy, "CryptoStrings", function () {
    
    24
    +  return new Localization(["browser/tor-browser.ftl"]);
    
    34 25
     });
    
    35 26
     
    
    36 27
     XPCOMUtils.defineLazyPreferenceGetter(
    
    ... ... @@ -40,26 +31,8 @@ XPCOMUtils.defineLazyPreferenceGetter(
    40 31
       true // Defaults to true.
    
    41 32
     );
    
    42 33
     
    
    43
    -/**
    
    44
    - * Get a formatted string from the locale's bundle, or the en-US bundle if the
    
    45
    - * string is missing.
    
    46
    - *
    
    47
    - * @param {string} name - The string's name.
    
    48
    - * @param {string[]} [args] - Positional arguments to pass to the format string,
    
    49
    - *   or leave empty if none are needed.
    
    50
    - *
    
    51
    - * @returns {string} - The formatted string.
    
    52
    - */
    
    53
    -function getString(name, args = []) {
    
    54
    -  try {
    
    55
    -    return lazy.cryptoSafetyBundle.formatStringFromName(name, args);
    
    56
    -  } catch {
    
    57
    -    return lazy.fallbackCryptoSafetyBundle.formatStringFromName(name, args);
    
    58
    -  }
    
    59
    -}
    
    60
    -
    
    61 34
     class CryptoSafetyParent extends JSWindowActorParent {
    
    62
    -  receiveMessage(aMessage) {
    
    35
    +  async receiveMessage(aMessage) {
    
    63 36
         if (
    
    64 37
           !lazy.isCryptoSafetyEnabled ||
    
    65 38
           aMessage.name !== "CryptoSafety:CopiedText"
    
    ... ... @@ -72,14 +45,25 @@ class CryptoSafetyParent extends JSWindowActorParent {
    72 45
           address = `${address.substring(0, 32)}…`;
    
    73 46
         }
    
    74 47
     
    
    48
    +    const [titleText, bodyText, reloadText, dismissText] =
    
    49
    +      await lazy.CryptoStrings.formatValues([
    
    50
    +        { id: "crypto-safety-prompt-title" },
    
    51
    +        {
    
    52
    +          id: "crypto-safety-prompt-body",
    
    53
    +          args: { address, host: aMessage.data.host },
    
    54
    +        },
    
    55
    +        { id: "crypto-safety-prompt-reload-button" },
    
    56
    +        { id: "crypto-safety-prompt-dismiss-button" },
    
    57
    +      ]);
    
    58
    +
    
    75 59
         const buttonPressed = Services.prompt.confirmEx(
    
    76 60
           this.browsingContext.topChromeWindow,
    
    77
    -      getString("cryptoSafetyPrompt.cryptoTitle"),
    
    78
    -      getString("cryptoSafetyPrompt.cryptoBody", [address, aMessage.data.host]),
    
    61
    +      titleText,
    
    62
    +      bodyText,
    
    79 63
           Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 +
    
    80 64
             Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_1,
    
    81
    -      getString("cryptoSafetyPrompt.primaryAction"),
    
    82
    -      getString("cryptoSafetyPrompt.secondaryAction"),
    
    65
    +      reloadText,
    
    66
    +      dismissText,
    
    83 67
           null,
    
    84 68
           null,
    
    85 69
           {}
    

  • browser/locales/en-US/browser/tor-browser.ftl
    ... ... @@ -382,3 +382,12 @@ tor-circuit-panel-new-button = New Tor circuit for this site
    382 382
     tor-circuit-panel-new-button-description-guard = Your guard node may not change
    
    383 383
     # Shown when the first node in the circuit is a bridge node.
    
    384 384
     tor-circuit-panel-new-button-description-bridge = Your bridge may not change
    
    385
    +
    
    386
    +## This dialog is shown when copying a suspected cryptocurrency address from a plain HTTP website.
    
    387
    +
    
    388
    +crypto-safety-prompt-title = Cryptocurrency address copied from an insecure website
    
    389
    +# $address (String) - The cryptocurrency address, possibly truncated.
    
    390
    +# $host (String) - The website host the address was copied from.
    
    391
    +crypto-safety-prompt-body = The copied text ({ $address }) appears to be a cryptocurrency address. Since the connection to { $host } is not secure, the address may have been modified and should not be trusted. You can try establishing a secure connection by reconnecting with a new circuit.
    
    392
    +crypto-safety-prompt-reload-button = Reload Tab with a New Circuit
    
    393
    +crypto-safety-prompt-dismiss-button = Dismiss Warning

  • browser/locales/en-US/chrome/browser/cryptoSafetyPrompt.properties deleted
    1
    -# Copyright (c) 2022, The Tor Project, Inc.
    
    2
    -# This Source Code Form is subject to the terms of the Mozilla Public
    
    3
    -# License, v. 2.0. If a copy of the MPL was not distributed with this
    
    4
    -# file, You can obtain one at http://mozilla.org/MPL/2.0/.
    
    5
    -
    
    6
    -cryptoSafetyPrompt.cryptoTitle=Cryptocurrency address copied from an insecure website
    
    7
    -# LOCALIZATION NOTE:
    
    8
    -# %1$S is the copied cryptocurrency address.
    
    9
    -# %2$S is the website host.
    
    10
    -cryptoSafetyPrompt.cryptoBody=The copied text (%1$S) appears to be a cryptocurrency address. Since the connection to %2$S is not secure, the address may have been modified and should not be trusted. You can try establishing a secure connection by reconnecting with a new circuit.
    
    11
    -# LOCALIZATION NOTE: %S will be replaced with the cryptocurrency address.
    
    12
    -cryptoSafetyPrompt.cryptoWarning=A cryptocurrency address (%S) has been copied from an insecure website. It could have been modified.
    
    13
    -cryptoSafetyPrompt.whatCanHeading=What can you do about it?
    
    14
    -cryptoSafetyPrompt.whatCanBody=You can try reconnecting with a new circuit to establish a secure connection, or accept the risk and dismiss this warning.
    
    15
    -cryptoSafetyPrompt.learnMore=Learn more
    
    16
    -cryptoSafetyPrompt.primaryAction=Reload Tab with a New Circuit
    
    17
    -cryptoSafetyPrompt.primaryActionAccessKey=R
    
    18
    -cryptoSafetyPrompt.secondaryAction=Dismiss Warning
    
    19
    -cryptoSafetyPrompt.secondaryActionAccessKey=B

  • browser/locales/jar.mn
    ... ... @@ -33,5 +33,4 @@
    33 33
         locale/browser/safebrowsing/safebrowsing.properties   (%chrome/browser/safebrowsing/safebrowsing.properties)
    
    34 34
         locale/browser/feeds/subscribe.properties       (%chrome/browser/feeds/subscribe.properties)
    
    35 35
         locale/browser/syncSetup.properties         (%chrome/browser/syncSetup.properties)
    
    36
    -    locale/browser/cryptoSafetyPrompt.properties    (%chrome/browser/cryptoSafetyPrompt.properties)
    
    37 36
     % locale browser-region @AB_CD@ %locale/browser-region/

  • tools/torbrowser/l10n/migrations/bug-42202-crypto-safety.py
    1
    +import fluent.syntax.ast as FTL
    
    2
    +from fluent.migrate.helpers import VARIABLE_REFERENCE, transforms_from
    
    3
    +from fluent.migrate.transforms import REPLACE
    
    4
    +
    
    5
    +
    
    6
    +def migrate(ctx):
    
    7
    +    legacy_path = "cryptoSafetyPrompt.properties"
    
    8
    +
    
    9
    +    ctx.add_transforms(
    
    10
    +        "tor-browser.ftl",
    
    11
    +        "tor-browser.ftl",
    
    12
    +        transforms_from(
    
    13
    +            """
    
    14
    +crypto-safety-prompt-title = { COPY(path, "cryptoSafetyPrompt.cryptoTitle") }
    
    15
    +crypto-safety-prompt-reload-button = { COPY(path, "cryptoSafetyPrompt.primaryAction") }
    
    16
    +crypto-safety-prompt-dismiss-button = { COPY(path, "cryptoSafetyPrompt.secondaryAction") }
    
    17
    +""",
    
    18
    +            path=legacy_path,
    
    19
    +        )
    
    20
    +        + [
    
    21
    +            # Replace "%1$S" and "%2$S" with "{ $address }" and "{ $host }"
    
    22
    +            FTL.Message(
    
    23
    +                id=FTL.Identifier("crypto-safety-prompt-body"),
    
    24
    +                value=REPLACE(
    
    25
    +                    legacy_path,
    
    26
    +                    "cryptoSafetyPrompt.cryptoBody",
    
    27
    +                    {
    
    28
    +                        "%1$S": VARIABLE_REFERENCE("address"),
    
    29
    +                        "%2$S": VARIABLE_REFERENCE("host"),
    
    30
    +                    },
    
    31
    +                ),
    
    32
    +            ),
    
    33
    +        ],
    
    34
    +    )