lists.torproject.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

tbb-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2025 -----
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

April 2024

  • 1 participants
  • 152 discussions
[Git][tpo/applications/tor-browser][tor-browser-115.10.0esr-13.5-1] 4 commits: fixup! Bug 40458: Implement .tor.onion aliases
by richard (@richard) 16 Apr '24

16 Apr '24
richard pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 5fd3baa6 by Henry Wilkes at 2024-04-16T21:57:16+00:00 fixup! Bug 40458: Implement .tor.onion aliases Bug 42206: Migrate ruleset strings to Fluent. - - - - - 7b790cf6 by Henry Wilkes at 2024-04-16T21:57:16+00:00 fixup! Tor Browser strings Bug 42206: Migrate ruleset strings to Fluent. - - - - - caed3ae7 by Henry Wilkes at 2024-04-16T21:57:16+00:00 fixup! Add TorStrings module for localization Bug 42206: Migrate ruleset strings to Fluent. - - - - - 8c14330e by Henry Wilkes at 2024-04-16T21:57:16+00:00 fixup! Tor Browser localization migration scripts. Bug 42206: Migrate ruleset strings to Fluent. - - - - - 7 changed files: - browser/components/rulesets/RulesetsParent.sys.mjs - browser/components/rulesets/content/aboutRulesets.html - browser/components/rulesets/content/aboutRulesets.js - browser/locales/en-US/browser/tor-browser.ftl - toolkit/modules/TorStrings.sys.mjs - − toolkit/torbutton/chrome/locale/en-US/rulesets.properties - + tools/torbrowser/l10n/migrations/bug-42206-rulesets.py Changes: ===================================== browser/components/rulesets/RulesetsParent.sys.mjs ===================================== @@ -1,6 +1,5 @@ // Copyright (c) 2022, The Tor Project, Inc. -import { TorStrings } from "resource://gre/modules/TorStrings.sys.mjs"; import { OnionAliasStore, OnionAliasStoreTopics, @@ -8,8 +7,8 @@ import { const kShowWarningPref = "torbrowser.rulesets.show_warning"; -// This class allows about:rulesets to get TorStrings and to load/save the -// preference for skipping the warning +// This class allows about:rulesets to load/save the preference for skipping the +// warning export class RulesetsParent extends JSWindowActorParent { constructor(...args) { super(...args); @@ -53,7 +52,6 @@ export class RulesetsParent extends JSWindowActorParent { return OnionAliasStore.getChannels(); case "rulesets:get-init-args": return { - TorStrings, showWarning: Services.prefs.getBoolPref(kShowWarningPref, true), }; case "rulesets:set-channel": ===================================== browser/components/rulesets/content/aboutRulesets.html ===================================== @@ -11,13 +11,19 @@ rel="stylesheet" href="chrome://browser/content/rulesets/aboutRulesets.css" /> + + <link rel="localization" href="branding/brand.ftl" /> + <link rel="localization" href="browser/tor-browser.ftl" /> </head> <body> <!-- Warning --> <div id="warning-wrapper"> <div id="warning"> - <h1 id="warning-title"></h1> - <p id="warning-description"></p> + <h1 id="warning-title" data-l10n-id="rulesets-warning-heading"></h1> + <p + id="warning-description" + data-l10n-id="rulesets-warning-description" + ></p> <p> <label> <input @@ -25,11 +31,18 @@ type="checkbox" checked="checked" /> - <span id="warning-enable-label"></span> + <span + id="warning-enable-label" + data-l10n-id="rulesets-warning-checkbox" + ></span> </label> </p> <div id="warning-buttonbar"> - <button id="warning-button" autofocus="autofocus"></button> + <button + id="warning-button" + autofocus="autofocus" + data-l10n-id="rulesets-warning-continue-button" + ></button> </div> </div> </div> @@ -37,11 +50,20 @@ <div id="main-content"> <!-- Ruleset list --> <aside> - <div id="ruleset-heading"></div> + <div + id="ruleset-heading" + data-l10n-id="rulesets-side-panel-heading" + ></div> <div id="ruleset-list-container"> <div id="ruleset-list-empty"> - <p id="ruleset-list-empty-title"></p> - <p id="ruleset-list-empty-description"></p> + <p + id="ruleset-list-empty-title" + data-l10n-id="rulesets-side-panel-no-rules" + ></p> + <p + id="ruleset-list-empty-description" + data-l10n-id="rulesets-side-panel-no-rules-description" + ></p> </div> <ul id="ruleset-list"> <li id="ruleset-template"> @@ -59,24 +81,40 @@ <section id="ruleset-details"> <div class="title"> <h1 id="ruleset-title"></h1> - <button id="ruleset-edit" class="ghost-button"></button> + <button + id="ruleset-edit" + class="ghost-button" + data-l10n-id="rulesets-details-edit-button" + ></button> </div> <dl> - <dt id="ruleset-jwk-label"></dt> + <dt id="ruleset-jwk-label" data-l10n-id="rulesets-details-jwk"></dt> <dd id="ruleset-jwk-value"></dd> - <dt id="ruleset-path-prefix-label"></dt> + <dt + id="ruleset-path-prefix-label" + data-l10n-id="rulesets-details-path" + ></dt> <dd> <a id="ruleset-path-prefix-value" target="_blank"></a> </dd> - <dt id="ruleset-scope-label"></dt> + <dt + id="ruleset-scope-label" + data-l10n-id="rulesets-details-scope" + ></dt> <dd id="ruleset-scope-value"></dd> </dl> <label id="ruleset-enable"> <input type="checkbox" id="ruleset-enable-checkbox" /> - <span id="ruleset-enable-label"></span> + <span + id="ruleset-enable-label" + data-l10n-id="rulesets-details-enable-checkbox" + ></span> </label> <div id="ruleset-buttonbar"> - <button id="ruleset-update-button"></button> + <button + id="ruleset-update-button" + data-l10n-id="rulesets-details-update-button" + ></button> </div> <hr /> <p id="ruleset-updated"></p> @@ -89,24 +127,52 @@ </div> <form id="edit-ruleset-form"> <label> - <div id="edit-jwk-label"></div> - <textarea id="edit-jwk-textarea" rows="10"></textarea> + <div id="edit-jwk-label" data-l10n-id="rulesets-details-jwk"></div> + <textarea + id="edit-jwk-textarea" + rows="10" + data-l10n-id="rulesets-details-jwk-input" + ></textarea> </label> <label> - <div id="edit-path-prefix-label"></div> - <input id="edit-path-prefix-input" type="text" /> + <div + id="edit-path-prefix-label" + data-l10n-id="rulesets-details-path" + ></div> + <input + id="edit-path-prefix-input" + type="text" + data-l10n-id="rulesets-details-path-input" + /> </label> <label> - <div id="edit-scope-label"></div> - <input id="edit-scope-input" type="text" /> + <div + id="edit-scope-label" + data-l10n-id="rulesets-details-scope" + ></div> + <input + id="edit-scope-input" + type="text" + data-l10n-id="rulesets-details-scope-input" + /> </label> <label id="edit-enable"> <input type="checkbox" id="edit-enable-checkbox" /> - <span id="edit-enable-label"></span> + <span + id="edit-enable-label" + data-l10n-id="rulesets-details-enable-checkbox" + ></span> </label> <div id="edit-buttonbar"> - <button id="edit-save" class="primary"></button> - <button id="edit-cancel"></button> + <button + id="edit-save" + class="primary" + data-l10n-id="rulesets-details-save-button" + ></button> + <button + id="edit-cancel" + data-l10n-id="rulesets-details-cancel-button" + ></button> </div> </form> </section> ===================================== browser/components/rulesets/content/aboutRulesets.js ===================================== @@ -2,8 +2,6 @@ /* globals RPMAddMessageListener, RPMSendQuery, RPMSendAsyncMessage */ -let TorStrings; - const Orders = Object.freeze({ Name: "name", NameDesc: "name-desc", @@ -19,55 +17,35 @@ const States = Object.freeze({ function setUpdateDate(ruleset, element) { if (!ruleset.enabled) { - element.textContent = TorStrings.rulesets.disabled; + document.l10n.setAttributes(element, "rulesets-update-rule-disabled"); return; } if (!ruleset.currentTimestamp) { - element.textContent = TorStrings.rulesets.neverUpdated; + document.l10n.setAttributes(element, "rulesets-update-never"); return; } - const formatter = new Intl.DateTimeFormat(navigator.languages, { - year: "numeric", - month: "long", - day: "numeric", + document.l10n.setAttributes(element, "rulesets-update-last", { + date: ruleset.currentTimestamp * 1000, }); - element.textContent = TorStrings.rulesets.lastUpdated.replace( - "%S", - formatter.format(new Date(ruleset.currentTimestamp * 1000)) - ); } class WarningState { - selectors = Object.freeze({ - wrapper: "#warning-wrapper", - title: "#warning-title", - description: "#warning-description", - enableCheckbox: "#warning-enable-checkbox", - enableLabel: "#warning-enable-label", - button: "#warning-button", - }); - - elements = Object.freeze({ - wrapper: document.querySelector(this.selectors.wrapper), - title: document.querySelector(this.selectors.title), - description: document.querySelector(this.selectors.description), - enableCheckbox: document.querySelector(this.selectors.enableCheckbox), - enableLabel: document.querySelector(this.selectors.enableLabel), - button: document.querySelector(this.selectors.button), - }); + elements = { + enableCheckbox: document.getElementById("warning-enable-checkbox"), + button: document.getElementById("warning-button"), + }; constructor() { - const elements = this.elements; - elements.title.textContent = TorStrings.rulesets.warningTitle; - elements.description.textContent = TorStrings.rulesets.warningDescription; - elements.enableLabel.textContent = TorStrings.rulesets.warningEnable; - elements.button.textContent = TorStrings.rulesets.warningButton; - elements.enableCheckbox.addEventListener( + this.elements.enableCheckbox.addEventListener( "change", this.onEnableChange.bind(this) ); - elements.button.addEventListener("click", this.onButtonClick.bind(this)); + + this.elements.button.addEventListener( + "click", + this.onButtonClick.bind(this) + ); } show() { @@ -89,50 +67,28 @@ class WarningState { } class DetailsState { - selectors = Object.freeze({ - title: "#ruleset-title", - edit: "#ruleset-edit", - jwkLabel: "#ruleset-jwk-label", - jwkValue: "#ruleset-jwk-value", - pathPrefixLabel: "#ruleset-path-prefix-label", - pathPrefixValue: "#ruleset-path-prefix-value", - scopeLabel: "#ruleset-scope-label", - scopeValue: "#ruleset-scope-value", - enableCheckbox: "#ruleset-enable-checkbox", - enableLabel: "#ruleset-enable-label", - updateButton: "#ruleset-update-button", - updated: "#ruleset-updated", - }); - - elements = Object.freeze({ - title: document.querySelector(this.selectors.title), - edit: document.querySelector(this.selectors.edit), - jwkLabel: document.querySelector(this.selectors.jwkLabel), - jwkValue: document.querySelector(this.selectors.jwkValue), - pathPrefixLabel: document.querySelector(this.selectors.pathPrefixLabel), - pathPrefixValue: document.querySelector(this.selectors.pathPrefixValue), - scopeLabel: document.querySelector(this.selectors.scopeLabel), - scopeValue: document.querySelector(this.selectors.scopeValue), - enableCheckbox: document.querySelector(this.selectors.enableCheckbox), - enableLabel: document.querySelector(this.selectors.enableLabel), - updateButton: document.querySelector(this.selectors.updateButton), - updated: document.querySelector(this.selectors.updated), - }); + elements = { + title: document.getElementById("ruleset-title"), + jwkValue: document.getElementById("ruleset-jwk-value"), + pathPrefixValue: document.getElementById("ruleset-path-prefix-value"), + scopeValue: document.getElementById("ruleset-scope-value"), + enableCheckbox: document.getElementById("ruleset-enable-checkbox"), + updateButton: document.getElementById("ruleset-update-button"), + updated: document.getElementById("ruleset-updated"), + }; constructor() { - const elements = this.elements; - elements.edit.textContent = TorStrings.rulesets.edit; - elements.edit.addEventListener("click", this.onEdit.bind(this)); - elements.jwkLabel.textContent = TorStrings.rulesets.jwk; - elements.pathPrefixLabel.textContent = TorStrings.rulesets.pathPrefix; - elements.scopeLabel.textContent = TorStrings.rulesets.scope; - elements.enableCheckbox.addEventListener( + document + .getElementById("ruleset-edit") + .addEventListener("click", this.onEdit.bind(this)); + this.elements.enableCheckbox.addEventListener( "change", this.onEnable.bind(this) ); - elements.enableLabel.textContent = TorStrings.rulesets.enable; - elements.updateButton.textContent = TorStrings.rulesets.checkUpdates; - elements.updateButton.addEventListener("click", this.onUpdate.bind(this)); + this.elements.updateButton.addEventListener( + "click", + this.onUpdate.bind(this) + ); } show(ruleset) { @@ -179,61 +135,22 @@ class DetailsState { } class EditState { - selectors = Object.freeze({ - form: "#edit-ruleset-form", - title: "#edit-title", - nameGroup: "#edit-name-group", - nameLabel: "#edit-name-label", - nameInput: "#edit-name-input", - jwkLabel: "#edit-jwk-label", - jwkTextarea: "#edit-jwk-textarea", - pathPrefixLabel: "#edit-path-prefix-label", - pathPrefixInput: "#edit-path-prefix-input", - scopeLabel: "#edit-scope-label", - scopeInput: "#edit-scope-input", - enableCheckbox: "#edit-enable-checkbox", - enableLabel: "#edit-enable-label", - save: "#edit-save", - cancel: "#edit-cancel", - }); - - elements = Object.freeze({ - form: document.querySelector(this.selectors.form), - title: document.querySelector(this.selectors.title), - jwkLabel: document.querySelector(this.selectors.jwkLabel), - jwkTextarea: document.querySelector(this.selectors.jwkTextarea), - pathPrefixLabel: document.querySelector(this.selectors.pathPrefixLabel), - pathPrefixInput: document.querySelector(this.selectors.pathPrefixInput), - scopeLabel: document.querySelector(this.selectors.scopeLabel), - scopeInput: document.querySelector(this.selectors.scopeInput), - enableCheckbox: document.querySelector(this.selectors.enableCheckbox), - enableLabel: document.querySelector(this.selectors.enableLabel), - save: document.querySelector(this.selectors.save), - cancel: document.querySelector(this.selectors.cancel), - }); + elements = { + form: document.getElementById("edit-ruleset-form"), + title: document.getElementById("edit-title"), + jwkTextarea: document.getElementById("edit-jwk-textarea"), + pathPrefixInput: document.getElementById("edit-path-prefix-input"), + scopeInput: document.getElementById("edit-scope-input"), + enableCheckbox: document.getElementById("edit-enable-checkbox"), + }; constructor() { - const elements = this.elements; - elements.jwkLabel.textContent = TorStrings.rulesets.jwk; - elements.jwkTextarea.setAttribute( - "placeholder", - TorStrings.rulesets.jwkPlaceholder - ); - elements.pathPrefixLabel.textContent = TorStrings.rulesets.pathPrefix; - elements.pathPrefixInput.setAttribute( - "placeholder", - TorStrings.rulesets.pathPrefixPlaceholder - ); - elements.scopeLabel.textContent = TorStrings.rulesets.scope; - elements.scopeInput.setAttribute( - "placeholder", - TorStrings.rulesets.scopePlaceholder - ); - elements.enableLabel.textContent = TorStrings.rulesets.enable; - elements.save.textContent = TorStrings.rulesets.save; - elements.save.addEventListener("click", this.onSave.bind(this)); - elements.cancel.textContent = TorStrings.rulesets.cancel; - elements.cancel.addEventListener("click", this.onCancel.bind(this)); + document + .getElementById("edit-save") + .addEventListener("click", this.onSave.bind(this)); + document + .getElementById("edit-cancel") + .addEventListener("click", this.onCancel.bind(this)); } show(ruleset) { @@ -276,7 +193,9 @@ class EditState { elements.jwkTextarea.setCustomValidity(""); } catch (err) { console.error("Invalid JSON or invalid JWK", err); - elements.jwkTextarea.setCustomValidity(TorStrings.rulesets.jwkInvalid); + elements.jwkTextarea.setCustomValidity( + await document.l10n.formatValue("rulesets-details-jwk-input-invalid") + ); valid = false; } @@ -285,7 +204,7 @@ class EditState { const url = new URL(pathPrefix); if (url.protocol !== "http:" && url.protocol !== "https:") { elements.pathPrefixInput.setCustomValidity( - TorStrings.rulesets.pathPrefixInvalid + await document.l10n.formatValue("rulesets-details-path-input-invalid") ); valid = false; } else { @@ -294,7 +213,7 @@ class EditState { } catch (err) { console.error("The path prefix is not a valid URL", err); elements.pathPrefixInput.setCustomValidity( - TorStrings.rulesets.pathPrefixInvalid + await document.l10n.formatValue("rulesets-details-path-input-invalid") ); valid = false; } @@ -304,7 +223,9 @@ class EditState { scope = new RegExp(elements.scopeInput.value.trim()); elements.scopeInput.setCustomValidity(""); } catch (err) { - elements.scopeInput.setCustomValidity(TorStrings.rulesets.scopeInvalid); + elements.scopeInput.setCustomValidity( + await document.l10n.formatValue("rulesets-details-scope-input-invalid") + ); valid = false; } @@ -342,39 +263,17 @@ class NoRulesetsState { } class RulesetList { - selectors = Object.freeze({ - heading: "#ruleset-heading", - list: "#ruleset-list", - emptyContainer: "#ruleset-list-empty", - emptyTitle: "#ruleset-list-empty-title", - emptyDescription: "#ruleset-list-empty-description", - itemTemplate: "#ruleset-template", - itemName: ".name", - itemDescr: ".description", - }); - - elements = Object.freeze({ - heading: document.querySelector(this.selectors.heading), - list: document.querySelector(this.selectors.list), - emptyContainer: document.querySelector(this.selectors.emptyContainer), - emptyTitle: document.querySelector(this.selectors.emptyTitle), - emptyDescription: document.querySelector(this.selectors.emptyDescription), - itemTemplate: document.querySelector(this.selectors.itemTemplate), - }); + elements = { + list: document.getElementById("ruleset-list"), + emptyContainer: document.getElementById("ruleset-list-empty"), + itemTemplate: document.getElementById("ruleset-template"), + }; nameAttribute = "data-name"; rulesets = []; constructor() { - const elements = this.elements; - - // Header - elements.heading.textContent = TorStrings.rulesets.rulesets; - // Empty - elements.emptyTitle.textContent = TorStrings.rulesets.noRulesets; - elements.emptyDescription.textContent = TorStrings.rulesets.noRulesetsDescr; - RPMAddMessageListener( "rulesets:channels-change", this.onRulesetsChanged.bind(this) @@ -438,14 +337,10 @@ class RulesetList { const item = this.elements.itemTemplate.cloneNode(true); item.removeAttribute("id"); item.classList.add("item"); - item.querySelector(this.selectors.itemName).textContent = ruleset.name; - const descr = item.querySelector(this.selectors.itemDescr); - if (ruleset.enabled) { - setUpdateDate(ruleset, descr); - } else { - descr.textContent = TorStrings.rulesets.disabled; - item.classList.add("disabled"); - } + item.querySelector(".name").textContent = ruleset.name; + const descr = item.querySelector(".description"); + setUpdateDate(ruleset, descr); + item.classList.toggle("disabled", !ruleset.enabled); item.setAttribute(this.nameAttribute, ruleset.name); item.addEventListener("click", () => { this.onRulesetClick(ruleset); @@ -478,7 +373,6 @@ class AboutRulesets { async init() { const args = await RPMSendQuery("rulesets:get-init-args"); - TorStrings = args.TorStrings; const showWarning = args.showWarning; this.list = new RulesetList(); ===================================== browser/locales/en-US/browser/tor-browser.ftl ===================================== @@ -557,3 +557,53 @@ downloads-tor-warning-title = Be careful opening downloads downloads-tor-warning-description = Some files may connect to the internet when opened without using Tor. To be safe, open the files while offline or use a portable operating system like <a data-l10n-name="tails-link">Tails</a>. # Button to dismiss the warning forever. downloads-tor-warning-dismiss-button = Got it + +## Initial warning page in about:rulesets. In Tor Browser, each ruleset is a set of rules for converting a ".tor.onion" address to a normal ".onion" address (used by SecureDrop). The feature is taken from the discontinued "HTTPS Everywhere". + +rulesets-warning-heading = Proceed with Caution +rulesets-warning-description = Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. +rulesets-warning-checkbox = Warn me when I attempt to access these preferences +rulesets-warning-continue-button = Accept the Risk and Continue + +## Side panel in about:rulesets. In Tor Browser, each ruleset is a set of rules for converting a ".tor.onion" address to a normal ".onion" address (used by SecureDrop). The feature is taken from the discontinued "HTTPS Everywhere". + +rulesets-side-panel-heading = Rulesets +rulesets-side-panel-no-rules = No rulesets found +# -brand-short-name refers to 'Tor Browser', localized. +rulesets-side-panel-no-rules-description = When you save a ruleset in { -brand-short-name }, it will show up here. + +## Ruleset update date in about:rulesets. + +# $date (Date) - The update date. The DATETIME function will format the $date according to the locale, using a "long" style. E.g. "January 1, 2000" for English (US), "١ يناير ٢٠٠٠" for Arabic, "2000년 1월 1일" in Korean, and "1 января 2000 г." in Russian. +rulesets-update-last = Last updated { DATETIME($date, dateStyle: "long") } +rulesets-update-never = Never updated, or last update failed +# Shown when the ruleset is disabled. +rulesets-update-rule-disabled = Disabled + +## Ruleset details in about:rulesets. In Tor Browser, each ruleset is a set of rules for converting a ".tor.onion" address to a normal ".onion" address (used by SecureDrop). The feature is taken from the discontinued "HTTPS Everywhere". + +rulesets-details-edit-button = Edit +rulesets-details-enable-checkbox = Enable this ruleset +rulesets-details-update-button = Check for Updates +rulesets-details-save-button = Save +rulesets-details-cancel-button = Cancel +# "JWK" refers to "JSON Web Key" and likely should not be translated. +rulesets-details-jwk = JWK +# "JWK" refers to "JSON Web Key" and likely should not be translated. +rulesets-details-jwk-input = + .placeholder = The key used to sign this ruleset in the JWK (JSON Web Key) format +# "JWK" refers to "JSON Web Key" and likely should not be translated. +rulesets-details-jwk-input-invalid = The JWK could not be parsed, or it is not a valid key +# "Path" refers to the URL domain this rule applies to. +rulesets-details-path = Path Prefix +rulesets-details-path-input = + .placeholder = URL prefix that contains the files needed by the ruleset +# "HTTP(S)" refers to "HTTP or HTTPS". +rulesets-details-path-input-invalid = The path prefix is not a valid HTTP(S) URL +# "Scope" refers to the breadth of URLs this rule applies to (as a regular expression). +rulesets-details-scope = Scope +# "Regular expression" refers to the computing term for a special pattern used for matching: https://en.wikipedia.org/wiki/Regular_expression. +rulesets-details-scope-input = + .placeholder = Regular expression for the scope of the rules +# "Regular expression" refers to the computing term for a special pattern used for matching: https://en.wikipedia.org/wiki/Regular_expression. +rulesets-details-scope-input-invalid = The scope could not be parsed as a regular expression ===================================== toolkit/modules/TorStrings.sys.mjs ===================================== @@ -429,54 +429,6 @@ const Loader = { learnMoreURLNotification: `https://tb-manual.torproject.org/${getLocale()}/onion-services/`, }; } /* OnionLocation */, - - /* - Rulesets - */ - rulesets() { - const strings = { - // Initial warning - warningTitle: "Proceed with Caution", - warningDescription: - "Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing.", - warningEnable: "Warn me when I attempt to access these preferences", - warningButton: "Accept the Risk and Continue", - // Ruleset list - rulesets: "Rulesets", - noRulesets: "No rulesets found", - noRulesetsDescr: - "When you save a ruleset in Tor Browser, it will show up here.", - lastUpdated: "Last updated %S", - neverUpdated: "Never updated, or last update failed", - enabled: "Enabled", - disabled: "Disabled", - // Ruleset details - edit: "Edit", - name: "Name", - jwk: "JWK", - pathPrefix: "Path Prefix", - scope: "Scope", - enable: "Enable this ruleset", - checkUpdates: "Check for Updates", - // Add ruleset - jwkPlaceholder: - "The key used to sign this ruleset in the JWK (JSON Web Key) format", - jwkInvalid: "The JWK could not be parsed, or it is not a valid key", - pathPrefixPlaceholder: - "URL prefix that contains the files needed by the ruleset", - pathPrefixInvalid: "The path prefix is not a valid HTTP(S) URL", - scopePlaceholder: "Regular expression for the scope of the rules", - scopeInvalid: "The scope could not be parsed as a regular expression", - save: "Save", - cancel: "Cancel", - }; - - const tsb = new TorPropertyStringBundle( - ["chrome://torbutton/locale/rulesets.properties"], - "rulesets." - ); - return tsb.getStrings(strings); - } /* Rulesets */, }; export const TorStrings = { @@ -507,11 +459,4 @@ export const TorStrings = { } return this._onionLocation; }, - - get rulesets() { - if (!this._rulesets) { - this._rulesets = Loader.rulesets(); - } - return this._rulesets; - }, }; ===================================== toolkit/torbutton/chrome/locale/en-US/rulesets.properties deleted ===================================== @@ -1,35 +0,0 @@ -# Copyright (c) 2022, The Tor Project, Inc. -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# about:rulesets strings. -rulesets.warningTitle=Proceed with Caution -rulesets.warningDescription=Adding or modifying rulesets can cause attackers to hijack your browser. Proceed only if you know what you are doing. -rulesets.warningEnable=Warn me when I attempt to access these preferences -rulesets.warningButton=Accept the Risk and Continue -# Ruleset list -rulesets.rulesets=Rulesets -rulesets.noRulesets=No rulesets found -rulesets.noRulesetsDescr=When you save a ruleset in Tor Browser, it will show up here. -# LOCALIZATION NOTE: %S will be replaced by the update date (automatically formatted by Firefox's l10n component) -rulesets.lastUpdated=Last updated %S -rulesets.neverUpdated=Never updated, or last update failed -rulesets.enabled=Enabled -rulesets.disabled=Disabled -# Ruleset details/edit ruleset -rulesets.edit=Edit -rulesets.name=Name -rulesets.jwk=JWK -rulesets.pathPrefix=Path Prefix -rulesets.scope=Scope -rulesets.enable=Enable this ruleset -rulesets.checkUpdates=Check for Updates -rulesets.jwkPlaceholder=The key used to sign this ruleset in the JWK (JSON Web Key) format -rulesets.jwkInvalid=The JWK could not be parsed, or it is not a valid key -rulesets.pathPrefixPlaceholder=URL prefix that contains the files needed by the ruleset -rulesets.pathPrefixInvalid=The path prefix is not a valid HTTP(S) URL -rulesets.scopePlaceholder=Regular expression for the scope of the rules -rulesets.scopeInvalid=The scope could not be parsed as a regular expression -rulesets.save=Save -rulesets.cancel=Cancel ===================================== tools/torbrowser/l10n/migrations/bug-42206-rulesets.py ===================================== @@ -0,0 +1,70 @@ +import fluent.syntax.ast as FTL +from fluent.migrate.helpers import transforms_from +from fluent.migrate.transforms import REPLACE + + +def migrate(ctx): + legacy_path = "rulesets.properties" + + ctx.add_transforms( + "tor-browser.ftl", + "tor-browser.ftl", + transforms_from( + """ +rulesets-warning-heading = { COPY(path, "rulesets.warningTitle") } +rulesets-warning-description = { COPY(path, "rulesets.warningDescription") } +rulesets-warning-checkbox = { COPY(path, "rulesets.warningEnable") } +rulesets-warning-continue-button = { COPY(path, "rulesets.warningButton") } + +rulesets-side-panel-heading = { COPY(path, "rulesets.rulesets") } +rulesets-side-panel-no-rules = { COPY(path, "rulesets.noRulesets") } + +rulesets-update-never = { COPY(path, "rulesets.neverUpdated") } +rulesets-update-rule-disabled = { COPY(path, "rulesets.disabled") } + +rulesets-details-edit-button = { COPY(path, "rulesets.edit") } +rulesets-details-enable-checkbox = { COPY(path, "rulesets.enable") } +rulesets-details-update-button = { COPY(path, "rulesets.checkUpdates") } +rulesets-details-save-button = { COPY(path, "rulesets.save") } +rulesets-details-cancel-button = { COPY(path, "rulesets.cancel") } +rulesets-details-jwk-input = + .placeholder = { COPY(path, "rulesets.jwkPlaceholder") } +rulesets-details-jwk-input-invalid = { COPY(path, "rulesets.jwkInvalid") } +rulesets-details-path = { COPY(path, "rulesets.pathPrefix") } +rulesets-details-path-input = + .placeholder = { COPY(path, "rulesets.pathPrefixPlaceholder") } +rulesets-details-path-input-invalid = { COPY(path, "rulesets.pathPrefixInvalid") } +rulesets-details-scope = { COPY(path, "rulesets.scope") } +rulesets-details-scope-input = + .placeholder = { COPY(path, "rulesets.scopePlaceholder") } +rulesets-details-scope-input-invalid = { COPY(path, "rulesets.scopeInvalid") } +""", + path=legacy_path, + ) + + [ + # Replace "%1$S" with "{ DATETIME($date, dateStyle: "long") }" + FTL.Message( + FTL.Identifier("rulesets-update-last"), + value=REPLACE( + legacy_path, + "rulesets.lastUpdated", + { + "%1$S": FTL.FunctionReference( + FTL.Identifier("DATETIME"), + arguments=FTL.CallArguments( + positional=[ + FTL.VariableReference(FTL.Identifier("date")) + ], + named=[ + FTL.NamedArgument( + FTL.Identifier("dateStyle"), + value=FTL.StringLiteral("long"), + ) + ], + ), + ) + }, + ), + ), + ], + ) View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/08ed48… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/08ed48… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] add to fixup! Enable the connect assist experiments on alpha
by Dan Ballard (@dan) 16 Apr '24

16 Apr '24
Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: 3768f68b by clairehurst at 2024-04-16T14:32:55-06:00 add to fixup! Enable the connect assist experiments on alpha - - - - - 3 changed files: - android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt - fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt - fenix/app/src/main/res/layout/tor_network_settings_beta_connection_features.xml Changes: ===================================== android-components/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt ===================================== @@ -258,7 +258,7 @@ data class DefaultSettings( override var cookieBannerHandlingDetectOnlyMode: Boolean = false, override var torSecurityLevel: Int = 4, override var spoofEnglish: Boolean = false, - override var useNewBootstrap: Boolean = false, + override var useNewBootstrap: Boolean = true, ) : Settings() class UnsupportedSetting<T> { ===================================== fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -1857,16 +1857,16 @@ class Settings(private val appContext: Context) : PreferencesHolder { var useNewBootstrap by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap), - default = false, + default = true, ) var useNewBootstrapNativeUi by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_android_native), - default = false, + default = true, ) var useNewBootstrapHtmlUi by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_use_new_bootstrap_with_html), - default = true + default = false ) } ===================================== fenix/app/src/main/res/layout/tor_network_settings_beta_connection_features.xml ===================================== @@ -60,7 +60,7 @@ app:layout_constraintTop_toBottomOf="@id/enable_beta_connection_features_summary"> <org.mozilla.fenix.settings.PreferenceBackedRadioButton - android:id="@+id/use_new_bootstrap_with_html_ui_radio_button" + android:id="@+id/use_new_bootstrap_with_native_ui_radio_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" @@ -70,15 +70,15 @@ android:paddingTop="@dimen/radio_button_preference_vertical" android:paddingEnd="@dimen/radio_button_preference_horizontal" android:paddingBottom="@dimen/radio_button_preference_vertical" - android:text="HTML UI" + android:text="Native Android UI" android:textAppearance="?android:attr/textAppearanceListItem" android:textSize="16sp" app:drawableStartCompat="?android:attr/listChoiceIndicatorSingle" - app:preferenceKey="@string/pref_key_use_new_bootstrap_with_html" + app:preferenceKey="@string/pref_key_use_new_bootstrap_with_android_native" app:preferenceKeyDefaultValue="true" /> <org.mozilla.fenix.settings.PreferenceBackedRadioButton - android:id="@+id/use_new_bootstrap_with_native_ui_radio_button" + android:id="@+id/use_new_bootstrap_with_html_ui_radio_button" android:layout_width="match_parent" android:layout_height="48dp" android:background="?android:attr/selectableItemBackground" @@ -88,11 +88,11 @@ android:paddingTop="@dimen/radio_button_preference_vertical" android:paddingEnd="@dimen/radio_button_preference_horizontal" android:paddingBottom="@dimen/radio_button_preference_vertical" - android:text="Native Android UI" + android:text="HTML UI" android:textAppearance="?android:attr/textAppearanceListItem" android:textSize="16sp" app:drawableStartCompat="?android:attr/listChoiceIndicatorSingle" - app:preferenceKey="@string/pref_key_use_new_bootstrap_with_android_native" + app:preferenceKey="@string/pref_key_use_new_bootstrap_with_html" app:preferenceKeyDefaultValue="false" /> </RadioGroup> View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/376… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/376… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.10.0esr-13.5-1] fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch mullvad-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: a17ec8e0 by hackademix at 2024-04-16T22:18:31+02:00 fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations Bug 42520: Correctly record new initial window size after auto-shrinking - - - - - 1 changed file: - toolkit/components/resistfingerprinting/RFPHelper.sys.mjs Changes: ===================================== toolkit/components/resistfingerprinting/RFPHelper.sys.mjs ===================================== @@ -633,9 +633,16 @@ class _RFPHelper { lazy.logConsole.error(e); } } - if (needToShrink) { - win.shrinkToLetterbox(); - this._recordWindowSize(win); + if (needToShrink && win.shrinkToLetterbox()) { + win.addEventListener( + "resize", + () => { + // We need to record the "new" initial size in this listener + // because resized dimensions are not immediately available. + RFPHelper._recordWindowSize(win); + }, + { once: true } + ); } }); }, @@ -741,23 +748,30 @@ class _RFPHelper { } _recordWindowSize(aWindow) { - aWindow._rfpOriginalSize = { - width: aWindow.outerWidth, - height: aWindow.outerHeight, - containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, - }; - log("Recording original window size", aWindow._rfpOriginalSize); + aWindow.promiseDocumentFlushed(() => { + aWindow._rfpOriginalSize = { + width: aWindow.outerWidth, + height: aWindow.outerHeight, + containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, + }; + log("Recording original window size", aWindow._rfpOriginalSize); + }); } // We will attach this method to each browser window. When called // it will instantly resize the window to exactly fit the selected // (possibly letterboxed) browser. + // Returns true if a window resize will occur, false otherwise. shrinkToLetterbox() { let { selectedBrowser } = this.gBrowser; let stack = selectedBrowser.closest(".browserStack"); const outer = stack.getBoundingClientRect(); const inner = selectedBrowser.getBoundingClientRect(); - this.resizeBy(inner.width - outer.width, inner.height - outer.height); + if (inner.width !== outer.witdh || inner.height !== outer.height) { + this.resizeBy(inner.width - outer.width, inner.height - outer.height); + return true; + } + return false; } _onWindowDoubleClick(e) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/a17… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/a17… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-115.10.0esr-13.5-1] fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch base-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 97575530 by hackademix at 2024-04-16T22:17:42+02:00 fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations Bug 42520: Correctly record new initial window size after auto-shrinking - - - - - 1 changed file: - toolkit/components/resistfingerprinting/RFPHelper.sys.mjs Changes: ===================================== toolkit/components/resistfingerprinting/RFPHelper.sys.mjs ===================================== @@ -633,9 +633,16 @@ class _RFPHelper { lazy.logConsole.error(e); } } - if (needToShrink) { - win.shrinkToLetterbox(); - this._recordWindowSize(win); + if (needToShrink && win.shrinkToLetterbox()) { + win.addEventListener( + "resize", + () => { + // We need to record the "new" initial size in this listener + // because resized dimensions are not immediately available. + RFPHelper._recordWindowSize(win); + }, + { once: true } + ); } }); }, @@ -741,23 +748,30 @@ class _RFPHelper { } _recordWindowSize(aWindow) { - aWindow._rfpOriginalSize = { - width: aWindow.outerWidth, - height: aWindow.outerHeight, - containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, - }; - log("Recording original window size", aWindow._rfpOriginalSize); + aWindow.promiseDocumentFlushed(() => { + aWindow._rfpOriginalSize = { + width: aWindow.outerWidth, + height: aWindow.outerHeight, + containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, + }; + log("Recording original window size", aWindow._rfpOriginalSize); + }); } // We will attach this method to each browser window. When called // it will instantly resize the window to exactly fit the selected // (possibly letterboxed) browser. + // Returns true if a window resize will occur, false otherwise. shrinkToLetterbox() { let { selectedBrowser } = this.gBrowser; let stack = selectedBrowser.closest(".browserStack"); const outer = stack.getBoundingClientRect(); const inner = selectedBrowser.getBoundingClientRect(); - this.resizeBy(inner.width - outer.width, inner.height - outer.height); + if (inner.width !== outer.witdh || inner.height !== outer.height) { + this.resizeBy(inner.width - outer.width, inner.height - outer.height); + return true; + } + return false; } _onWindowDoubleClick(e) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/9757553… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/9757553… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.10.0esr-13.5-1] fixup! Add TorStrings module for localization
by Pier Angelo Vendrame (@pierov) 16 Apr '24

16 Apr '24
Pier Angelo Vendrame pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 08ed48fa by Henry Wilkes at 2024-04-16T16:31:30+01:00 fixup! Add TorStrings module for localization Bug 42521: Drop unused onboarding strings. - - - - - 2 changed files: - − toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties - − toolkit/torbutton/chrome/locale/en-US/onboarding.properties Changes: ===================================== toolkit/torbutton/chrome/locale/en-US/browserOnboarding.properties deleted ===================================== @@ -1,73 +0,0 @@ -# Copyright (c) 2019, The Tor Project, Inc. -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -onboarding.tour-tor-welcome=Welcome -onboarding.tour-tor-welcome.title=You’re ready. -onboarding.tour-tor-welcome.description=Tor Browser offers the highest standard of privacy and security while browsing the web. You’re now protected against tracking, surveillance, and censorship. This quick onboarding will show you how. -onboarding.tour-tor-welcome.next-button=Go to Privacy - -onboarding.tour-tor-privacy=Privacy -onboarding.tour-tor-privacy.title=Snub trackers and snoopers. -onboarding.tour-tor-privacy.description=Tor Browser isolates cookies and deletes your browser history after your session. These modifications ensure your privacy and security are protected in the browser. Click ‘Tor Network’ to learn how we protect you on the network level. -onboarding.tour-tor-privacy.button=Go to Tor Network - -onboarding.tour-tor-network=Tor Network -onboarding.tour-tor-network.title=Travel a decentralized network. -onboarding.tour-tor-network.description=Tor Browser connects you to the Tor network run by thousands of volunteers around the world. Unlike a VPN, there’s no single point of failure or centralized entity you need to trust in order to enjoy the internet privately. -onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences. -onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings -onboarding.tour-tor-network.button=Go to Circuit Display - -onboarding.tour-tor-circuit-display=Circuit Display -onboarding.tour-tor-circuit-display.title=See your path. -onboarding.tour-tor-circuit-display.description=For each domain you visit, your traffic is relayed and encrypted in a circuit across three Tor relays around the world. No website knows where you are connecting from. You can request a new circuit by clicking ‘New Circuit for this Site’ on our Circuit Display. -onboarding.tour-tor-circuit-display.button=See My Path -onboarding.tour-tor-circuit-display.next-button=Go to Security - -onboarding.tour-tor-security=Security -onboarding.tour-tor-security.title=Choose your experience. -onboarding.tour-tor-security.description=We also provide you with additional settings for bumping up your browser security. Our Security Settings allow you to block elements that could be used to attack your computer. Click below to see what the different options do. -onboarding.tour-tor-security.description-suffix=Note: By default, NoScript and HTTPS Everywhere are not included on the toolbar, but you can customize your toolbar to add them. -onboarding.tour-tor-security-level.button=See Your Security Level -onboarding.tour-tor-security-level.next-button=Go to Experience Tips - -onboarding.tour-tor-expect-differences=Experience Tips -onboarding.tour-tor-expect-differences.title=Expect some differences. -onboarding.tour-tor-expect-differences.description=With all the security and privacy features provided by Tor, your experience while browsing the internet may be a little different. Things may be a bit slower, and depending on your security level, some elements may not work or load. You may also be asked to prove you are a human and not a robot. -onboarding.tour-tor-expect-differences.button=See FAQs -onboarding.tour-tor-expect-differences.next-button=Go to Onion Services - -onboarding.tour-tor-onion-services=Onion Services -onboarding.tour-tor-onion-services.title=Be extra protected. -onboarding.tour-tor-onion-services.description=Onion services are sites that end with a .onion that provide extra protections to publishers and visitors, including added safeguards against censorship. Onion services allow anyone to provide content and services anonymously. Click below to visit the DuckDuckGo onion site. -onboarding.tour-tor-onion-services.button=Visit an Onion -onboarding.tour-tor-onion-services.next-button=Done - -onboarding.overlay-icon-tooltip-updated2=See what's new\nin %S -onboarding.tour-tor-update.prefix-new=New -onboarding.tour-tor-update.prefix-updated=Updated - -onboarding.tour-tor-toolbar=Toolbar -onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button. -onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser. -onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu. -onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity -onboarding.tour-tor-toolbar-update-9.0.next-button=Go to Tor Network - -# Circuit Display onboarding. -onboarding.tor-circuit-display.next=Next -onboarding.tor-circuit-display.done=Done -onboarding.tor-circuit-display.one-of-three=1 of 3 -onboarding.tor-circuit-display.two-of-three=2 of 3 -onboarding.tor-circuit-display.three-of-three=3 of 3 - -onboarding.tor-circuit-display.intro.title=How do circuits work? -onboarding.tor-circuit-display.intro.msg=Circuits are made up of randomly assigned relays, which are computers around the world configured to forward Tor traffic. Circuits allow you to browse privately and to connect to onion services. - -onboarding.tor-circuit-display.diagram.title=Circuit Display -onboarding.tor-circuit-display.diagram.msg=This diagram shows the relays that make up the circuit for this website. To prevent linking of activity across different sites, each website gets a different circuit. - -onboarding.tor-circuit-display.new-circuit.title=Do you need a new circuit? -onboarding.tor-circuit-display.new-circuit.msg=If you are not able to connect to the website you’re trying to visit or it is not loading properly, then you can use this button to reload the site with a new circuit. ===================================== toolkit/torbutton/chrome/locale/en-US/onboarding.properties deleted ===================================== @@ -1,19 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip2): This string will be used -# to show the tooltip alongside the notification icon in the overlay tour. %S is -# brandShortName. The tooltip is designed to show in two lines. Please use \n to -# do appropriate line breaking. -onboarding.overlay-icon-tooltip2=New to %S?\nLet’s get started. -# LOCALIZATION NOTE(onboarding.overlay-icon-tooltip-updated2): %S is -# brandShortName. The tooltip is designed to show in two lines. Please use \n to -# do appropriate line breaking. -onboarding.overlay-icon-tooltip-updated2=%S is all new.\nSee what you can do! -# LOCALIZATION NOTE(onboarding.overlay-close-button-tooltip): The overlay close button is an icon button. This tooltip would be shown when mousing hovering on the button. -onboarding.overlay-close-button-tooltip=Close -# LOCALIZATION NOTE(onboarding.notification-close-button-tooltip): The notification close button is an icon button. This tooltip would be shown when mousing hovering on the button. -onboarding.notification-close-button-tooltip=Dismiss -# LOCALIZATION NOTE(onboarding.complete): This string is used to describe an -# onboarding tour item that is complete. -onboarding.complete=Complete View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/08ed48f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/08ed48f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.10.0esr-13.5-1] fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 334c638e by hackademix at 2024-04-16T17:24:54+02:00 fixup! Bug 41631: Prevent weird initial window dimensions caused by subpixel computations Bug 42520: Correctly record new initial window size after auto-shrinking - - - - - 1 changed file: - toolkit/components/resistfingerprinting/RFPHelper.sys.mjs Changes: ===================================== toolkit/components/resistfingerprinting/RFPHelper.sys.mjs ===================================== @@ -633,9 +633,16 @@ class _RFPHelper { lazy.logConsole.error(e); } } - if (needToShrink) { - win.shrinkToLetterbox(); - this._recordWindowSize(win); + if (needToShrink && win.shrinkToLetterbox()) { + win.addEventListener( + "resize", + () => { + // We need to record the "new" initial size in this listener + // because resized dimensions are not immediately available. + RFPHelper._recordWindowSize(win); + }, + { once: true } + ); } }); }, @@ -741,23 +748,30 @@ class _RFPHelper { } _recordWindowSize(aWindow) { - aWindow._rfpOriginalSize = { - width: aWindow.outerWidth, - height: aWindow.outerHeight, - containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, - }; - log("Recording original window size", aWindow._rfpOriginalSize); + aWindow.promiseDocumentFlushed(() => { + aWindow._rfpOriginalSize = { + width: aWindow.outerWidth, + height: aWindow.outerHeight, + containerHeight: aWindow.gBrowser.getBrowserContainer()?.clientHeight, + }; + log("Recording original window size", aWindow._rfpOriginalSize); + }); } // We will attach this method to each browser window. When called // it will instantly resize the window to exactly fit the selected // (possibly letterboxed) browser. + // Returns true if a window resize will occur, false otherwise. shrinkToLetterbox() { let { selectedBrowser } = this.gBrowser; let stack = selectedBrowser.closest(".browserStack"); const outer = stack.getBoundingClientRect(); const inner = selectedBrowser.getBoundingClientRect(); - this.resizeBy(inner.width - outer.width, inner.height - outer.height); + if (inner.width !== outer.witdh || inner.height !== outer.height) { + this.resizeBy(inner.width - outer.width, inner.height - outer.height); + return true; + } + return false; } _onWindowDoubleClick(e) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/334c638… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/334c638… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.10.0esr-13.5-1] fixup! Base Browser strings
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch mullvad-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: 9eaf8f6d by hackademix at 2024-04-16T13:14:32+02:00 fixup! Base Browser strings MB 288: Standardize capitalization in Letterboxing preferences - - - - - 1 changed file: - browser/locales/en-US/browser/base-browser.ftl Changes: ===================================== browser/locales/en-US/browser/base-browser.ftl ===================================== @@ -84,7 +84,7 @@ letterboxing-window-size-header = Window size letterboxing-remember-size = .label = Reuse last window size when opening a new window .accesskey = R -letterboxing-alignment-header = Content Alignment +letterboxing-alignment-header = Content alignment letterboxing-alignment-description = Choose where you want to align the website’s content. letterboxing-alignment-top = Top letterboxing-alignment-middle = Middle View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/9ea… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/9ea… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-115.10.0esr-13.5-1] fixup! Base Browser strings
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch base-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: e98e00fa by hackademix at 2024-04-16T13:12:56+02:00 fixup! Base Browser strings MB 288: Standardize capitalization in Letterboxing preferences - - - - - 1 changed file: - browser/locales/en-US/browser/base-browser.ftl Changes: ===================================== browser/locales/en-US/browser/base-browser.ftl ===================================== @@ -84,7 +84,7 @@ letterboxing-window-size-header = Window size letterboxing-remember-size = .label = Reuse last window size when opening a new window .accesskey = R -letterboxing-alignment-header = Content Alignment +letterboxing-alignment-header = Content alignment letterboxing-alignment-description = Choose where you want to align the website’s content. letterboxing-alignment-top = Top letterboxing-alignment-middle = Middle View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e98e00f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e98e00f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.10.0esr-13.5-1] fixup! Base Browser strings
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 1f1f3ab2 by hackademix at 2024-04-16T13:09:00+02:00 fixup! Base Browser strings MB 288: Standardize capitalization in Letterboxing preferences - - - - - 1 changed file: - browser/locales/en-US/browser/base-browser.ftl Changes: ===================================== browser/locales/en-US/browser/base-browser.ftl ===================================== @@ -84,7 +84,7 @@ letterboxing-window-size-header = Window size letterboxing-remember-size = .label = Reuse last window size when opening a new window .accesskey = R -letterboxing-alignment-header = Content Alignment +letterboxing-alignment-header = Content alignment letterboxing-alignment-description = Choose where you want to align the website’s content. letterboxing-alignment-top = Top letterboxing-alignment-middle = Middle View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/1f1f3ab… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/1f1f3ab… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.10.0esr-13.5-1] fixup! Bug 41803: Add some developer tools for working on tor-browser.
by ma1 (@ma1) 16 Apr '24

16 Apr '24
ma1 pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: bbc4a77b by hackademix at 2024-04-16T13:01:03+02:00 fixup! Bug 41803: Add some developer tools for working on tor-browser. Bug 42516: Make tb-dev worktree-compatible - - - - - 1 changed file: - browser/locales/en-US/browser/base-browser.ftl Changes: ===================================== browser/locales/en-US/browser/base-browser.ftl ===================================== @@ -84,7 +84,7 @@ letterboxing-window-size-header = Window size letterboxing-remember-size = .label = Reuse last window size when opening a new window .accesskey = R -letterboxing-alignment-header = Content Alignment +letterboxing-alignment-header = Content alignment letterboxing-alignment-description = Choose where you want to align the website’s content. letterboxing-alignment-top = Top letterboxing-alignment-middle = Middle View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/bbc4a77… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/bbc4a77… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • ...
  • 16
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.