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
Threads by month
  • ----- 2026 -----
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • 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

  • 1 participants
  • 20968 discussions
[Git][tpo/applications/tor-browser-update-responses][main] 6 commits: alpha: new version, 16.0a10 (linux-aarch64)
by morgan (@morgan) 28 Aug '26

28 Aug '26
morgan pushed to branch main at The Tor Project / Applications / Tor Browser update responses Commits: 049c11f7 by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 (linux-aarch64) - - - - - b55abe96 by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 (linux-x86_64) - - - - - 260c41d5 by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 (macos) - - - - - 57ba1252 by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 (windows-i686) - - - - - 819a8187 by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 (windows-x86_64) - - - - - aca6e74e by Morgan at 2026-08-28T08:29:38+00:00 alpha: new version, 16.0a10 - - - - - 53 changed files: - update_3/alpha/download-android-aarch64.json - update_3/alpha/download-android-armv7.json - update_3/alpha/download-android-x86_64.json - update_3/alpha/download-linux-aarch64.json - update_3/alpha/download-linux-x86_64.json - update_3/alpha/download-macos.json - update_3/alpha/download-windows-i686.json - update_3/alpha/download-windows-x86_64.json - update_3/alpha/downloads.json - update_3/alpha/linux-aarch64/.htaccess - + update_3/alpha/linux-aarch64/update-16.0a10-linux-aarch64.xml - − update_3/alpha/linux-aarch64/update-16.0a6-16.0a9-linux-aarch64.xml - + update_3/alpha/linux-aarch64/update-16.0a7-16.0a10-linux-aarch64.xml - − update_3/alpha/linux-aarch64/update-16.0a7-16.0a9-linux-aarch64.xml - + update_3/alpha/linux-aarch64/update-16.0a8-16.0a10-linux-aarch64.xml - − update_3/alpha/linux-aarch64/update-16.0a8-16.0a9-linux-aarch64.xml - + update_3/alpha/linux-aarch64/update-16.0a9-16.0a10-linux-aarch64.xml - − update_3/alpha/linux-aarch64/update-16.0a9-linux-aarch64.xml - update_3/alpha/linux-x86_64/.htaccess - + update_3/alpha/linux-x86_64/update-16.0a10-linux-x86_64.xml - − update_3/alpha/linux-x86_64/update-16.0a6-16.0a9-linux-x86_64.xml - + update_3/alpha/linux-x86_64/update-16.0a7-16.0a10-linux-x86_64.xml - − update_3/alpha/linux-x86_64/update-16.0a7-16.0a9-linux-x86_64.xml - + update_3/alpha/linux-x86_64/update-16.0a8-16.0a10-linux-x86_64.xml - − update_3/alpha/linux-x86_64/update-16.0a8-16.0a9-linux-x86_64.xml - + update_3/alpha/linux-x86_64/update-16.0a9-16.0a10-linux-x86_64.xml - update_3/alpha/macos/.htaccess - + update_3/alpha/macos/update-16.0a10-macos.xml - − update_3/alpha/macos/update-16.0a6-16.0a9-macos.xml - + update_3/alpha/macos/update-16.0a7-16.0a10-macos.xml - − update_3/alpha/macos/update-16.0a7-16.0a9-macos.xml - + update_3/alpha/macos/update-16.0a8-16.0a10-macos.xml - − update_3/alpha/macos/update-16.0a8-16.0a9-macos.xml - + update_3/alpha/macos/update-16.0a9-16.0a10-macos.xml - − update_3/alpha/macos/update-16.0a9-macos.xml - update_3/alpha/windows-i686/.htaccess - update_3/alpha/linux-x86_64/update-16.0a9-linux-x86_64.xml → update_3/alpha/windows-i686/update-16.0a10-windows-i686.xml - − update_3/alpha/windows-i686/update-16.0a6-16.0a9-windows-i686.xml - + update_3/alpha/windows-i686/update-16.0a7-16.0a10-windows-i686.xml - − update_3/alpha/windows-i686/update-16.0a7-16.0a9-windows-i686.xml - + update_3/alpha/windows-i686/update-16.0a8-16.0a10-windows-i686.xml - − update_3/alpha/windows-i686/update-16.0a8-16.0a9-windows-i686.xml - + update_3/alpha/windows-i686/update-16.0a9-16.0a10-windows-i686.xml - − update_3/alpha/windows-i686/update-16.0a9-windows-i686.xml - update_3/alpha/windows-x86_64/.htaccess - + update_3/alpha/windows-x86_64/update-16.0a10-windows-x86_64.xml - − update_3/alpha/windows-x86_64/update-16.0a6-16.0a9-windows-x86_64.xml - + update_3/alpha/windows-x86_64/update-16.0a7-16.0a10-windows-x86_64.xml - − update_3/alpha/windows-x86_64/update-16.0a7-16.0a9-windows-x86_64.xml - + update_3/alpha/windows-x86_64/update-16.0a8-16.0a10-windows-x86_64.xml - − update_3/alpha/windows-x86_64/update-16.0a8-16.0a9-windows-x86_64.xml - + update_3/alpha/windows-x86_64/update-16.0a9-16.0a10-windows-x86_64.xml - − update_3/alpha/windows-x86_64/update-16.0a9-windows-x86_64.xml The diff was not included because it is too large. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! [android] Disable features and functionality
by brizental (@brizental) 27 Aug '26

27 Aug '26
brizental pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 99d8dffc by Beatriz Rizental at 2026-08-27T18:40:46-03:00 fixup! [android] Disable features and functionality Bug 45145: Prevent other apps from opening Tor Browser - - - - - 1 changed file: - mobile/android/fenix/app/src/main/AndroidManifest.xml Changes: ===================================== mobile/android/fenix/app/src/main/AndroidManifest.xml ===================================== @@ -482,13 +482,13 @@ <activity-alias android:name="org.mozilla.gecko.BrowserApp" android:targetActivity=".IntentReceiverActivity" - android:exported="true"> + android:exported="false"> </activity-alias> <!-- Activity alias from Fennec used by PWA launchers on the home screen --> <activity-alias android:name="org.mozilla.gecko.LauncherActivity" - android:exported="true" + android:exported="false" android:targetActivity=".IntentReceiverActivity"> <intent-filter> <action android:name="org.mozilla.gecko.WEBAPP" /> View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/99d8dff… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/99d8dff… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! [android] Disable features and functionality
by brizental (@brizental) 26 Aug '26

26 Aug '26
brizental pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 188d34fa by Beatriz Rizental at 2026-08-26T19:01:14+02:00 fixup! [android] Disable features and functionality Bug 45145: Disable app links feature This feature starts an observer to watch for potential redirects to other apps. This commit prevents that observer from ever starting. - - - - - 1 changed file: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt ===================================== @@ -433,33 +433,6 @@ abstract class BaseBrowserFragment : initializeUI(view) - appLinksFeature.set( - feature = AppLinksFeature( - context = requireContext(), - store = requireComponents.core.store, - fragmentManager = parentFragmentManager, - sessionId = customTabSessionId, - dialog = appLinksPromptDialog(), - launchInApp = { requireComponents.settings.shouldOpenLinksInApp(customTabSessionId != null) }, - loadUrlUseCase = requireComponents.useCases.sessionUseCases.loadUrl, - shouldPrompt = { requireComponents.settings.shouldPromptOpenLinksInApp() }, - alwaysOpenCheckboxAction = { - requireComponents.settings.openLinksInExternalApp = - requireContext().getString(R.string.pref_key_open_links_in_apps_always) - }, - failedToLaunchAction = { fallbackUrl -> - fallbackUrl?.let { - val appLinksUseCases = requireComponents.useCases.appLinksUseCases - val getRedirect = appLinksUseCases.appLinkRedirect - val redirect = getRedirect.invoke(fallbackUrl) - appLinksUseCases.openAppLink.invoke(redirect.appIntent) - } - }, - ), - owner = this, - view = binding.root, - ) - if (customTabSessionId == null) { // We currently only need this observer to navigate to home // in case all tabs have been removed on startup. No need to View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/188d34f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/188d34f… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser-build] Pushed new tag mb-16.0a10-build1
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag mb-16.0a10-build1 at The Tor Project / Applications / tor-browser-build -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/tree/mb-… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser-build] Pushed new tag tbb-16.0a10-build1
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag tbb-16.0a10-build1 at The Tor Project / Applications / tor-browser-build -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/tree/tbb… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41840,41841: Prepare Tor, Mullvad Browser 16.0a10
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: 55e25c58 by Morgan at 2026-08-26T15:07:52+00:00 Bug 41840,41841: Prepare Tor, Mullvad Browser 16.0a10 - - - - - 10 changed files: - projects/browser/Bundle-Data/Docs-MB/ChangeLog.txt - projects/browser/Bundle-Data/Docs-TBB/ChangeLog.txt - projects/browser/config - projects/firefox/config - projects/geckoview/config - projects/go/config - projects/manual/config - projects/openssl/config - projects/translation/config - rbm.conf Changes: ===================================== projects/browser/Bundle-Data/Docs-MB/ChangeLog.txt ===================================== @@ -1,3 +1,53 @@ +Mullvad Browser 16.0a10 - August 27 2026 + * All Platforms + * Updated Firefox to 153.1.0esr + * Updated NoScript to 13.6.31.90301984 + * Updated uBlock Origin to 1.74.0 + * Bug 446: Implement persistent-mode backend [mullvad-browser] + * Bug 535: Use config to hide settings in mullvad browser [mullvad-browser] + * Bug 565: Update the selector to hide the help button in about:addons [mullvad-browser] + * Bug 566: The security level learn mode link is wrong in Mullvad Browser [mullvad-browser] + * Bug 571: Rebase Mullvad Browser alpha onto 153.1.0esr [mullvad-browser] + * Bug 572: Websites can initiate a WebSocket connection to a lan/localhost port [mullvad-browser] + * Bug 43640: Poor screen reader experience when opening preferences and scrolling to element [tor-browser] + * Bug 44257: Disable locale-based font rules as a defense-in-depth [tor-browser] + * Bug 44511: Make sure new search suggest features are disabled for 16.0 [tor-browser] + * Bug 44629: Add a search suggestion warning in the settings [tor-browser] + * Bug 44699: Amend commit message for "BB 43322: Customize the font visibility lists" [tor-browser] + * Bug 44802: Hide the "safe browsing" settings [tor-browser] + * Bug 44830: Migrate our home page adjustments to the settings config [tor-browser] + * Bug 45039: Make it easier to test ProfileDataUpgrader customization [tor-browser] + * Bug 45079: Move letterboxing to the appearance setting pane [tor-browser] + * Bug 45123: Disable profile backup for 16.0 [tor-browser] + * Bug 45157: Grant "access local files" permission to NoScript (Firefox 153 and above) [tor-browser] + * Bug 45168: Hide the history search option, again [tor-browser] + * Bug 45169: Cannot open history sidebar in private browsing window [tor-browser] + * Bug 45171: Disable split view for 16.0 [tor-browser] + * Bug 45176: Add "Request English" to the website language config [tor-browser] + * Bug 45185: Disable network also in the Rust implementation of the remote settings client [tor-browser] + * Bug 45186: Remove duplicate alert roles in moz-message-bar [tor-browser] + * Bug 45187: Disable private browsing "delete downloaded files" feature [tor-browser] + * Bug 45195: Modify our calls to openPreferences to work with the new settings [tor-browser] + * Bug 45201: Convert security level settings to the new config [tor-browser] + * Bug 45208: Switch on the setting redesign [tor-browser] + * Bug 45209: Remove mention of "sync" from new settings [tor-browser] + * Bug 45211: Add settings for protections from third party applications [tor-browser] + * Bug 45219: Backport Security Fixes from Firefox 154 [tor-browser] + * Bug 45228: Drop browser.urlbar.update2.engineAliasRefresh [tor-browser] + * Bug 45232: Spoof picture-in-picture sizes under RFP [tor-browser] + * Bug 45245: Fix a ML file inclusion that creates an error [tor-browser] + * Windows + * Bug 563: Hide the fox icon in about:pdf [mullvad-browser] + * Bug 44513: Backport Bugzilla 2059471: Do not spoof screen orientation when it is locked [tor-browser] + * Bug 45144: Do not offer to make the browser a PDF viewer when in portable mode [tor-browser] + * Bug 45243: Disable taskbar tabs [tor-browser] + * Build System + * All Platforms + * Bug 45224: Enable Rust linter in CI [tor-browser] + * Bug 45231: Backport Bugzilla 2053518: Rust target detection fails to translate the host triple with rustc nightly >= 2026-07-02 (new *-oe-linux-* targets) [tor-browser] + * Bug 41844: Add scripts to backup/deploy signing keys on signing machines [tor-browser-build] + * Bug 41850: Update keyring/torbrowser.gpg for new subkey and updated expiration date of the main key [tor-browser-build] + Mullvad Browser 16.0a9 - July 23 2026 * All Platforms * Updated Firefox to 153.0esr ===================================== projects/browser/Bundle-Data/Docs-TBB/ChangeLog.txt ===================================== @@ -1,3 +1,105 @@ +Tor Browser 16.0a10 - August 27 2026 + * All Platforms + * Updated NoScript to 13.6.31.90301984 + * Updated OpenSSL to 3.5.8 + * Bug 44257: Disable locale-based font rules as a defense-in-depth [tor-browser] + * Bug 45161: Drop TorProviderBuilder.firstWindowLoaded [tor-browser] + * Bug 45205: Rebase Tor Browser onto 153.1.0esr [tor-browser] + * Bug 45219: Backport Security Fixes from Firefox 154 [tor-browser] + * Windows + macOS + Linux + * Updated Firefox to 153.1.0esr + * Bug 43570: Report errors in about:torconnect when tor daemon crashes (Desktop) [tor-browser] + * Bug 43640: Poor screen reader experience when opening preferences and scrolling to element [tor-browser] + * Bug 43939: Update Bridge settings when connection failed [tor-browser] + * Bug 44247: Adapt Tor Browser manual to use the new support pages [tor-browser] + * Bug 44511: Make sure new search suggest features are disabled for 16.0 [tor-browser] + * Bug 44629: Add a search suggestion warning in the settings [tor-browser] + * Bug 44699: Amend commit message for "BB 43322: Customize the font visibility lists" [tor-browser] + * Bug 44802: Hide the "safe browsing" settings [tor-browser] + * Bug 44830: Migrate our home page adjustments to the settings config [tor-browser] + * Bug 44831: Misleading banner in "Search engine suggestions" settings [tor-browser] + * Bug 44855: Use `ariaNotify` for bridge updates [tor-browser] + * Bug 44959: Integrate the new Tor Browser manual into Tor Browser [tor-browser] + * Bug 44998: Remove Firefox branding from about:preferences [tor-browser] + * Bug 45039: Make it easier to test ProfileDataUpgrader customization [tor-browser] + * Bug 45051: Show a separate Tor error prompt for users who do not see about:torconnect (desktop) [tor-browser] + * Bug 45058: Convert bridge settings to new design and config approach [tor-browser] + * Bug 45059: Convert advanced connection settings to new design and config approach [tor-browser] + * Bug 45079: Move letterboxing to the appearance setting pane [tor-browser] + * Bug 45123: Disable profile backup for 16.0 [tor-browser] + * Bug 45125: Tidy up bridge emoji widget [tor-browser] + * Bug 45143: Modify moz-fieldset to allow focusing the heading [tor-browser] + * Bug 45156: Remove "Firefox Home" from the appearance settings [tor-browser] + * Bug 45157: Grant "access local files" permission to NoScript (Firefox 153 and above) [tor-browser] + * Bug 45168: Hide the history search option, again [tor-browser] + * Bug 45169: Cannot open history sidebar in private browsing window [tor-browser] + * Bug 45171: Disable split view for 16.0 [tor-browser] + * Bug 45176: Add "Request English" to the website language config [tor-browser] + * Bug 45178: Change support URLs in new settings [tor-browser] + * Bug 45179: Update the feedback URL to point to the new support page. [tor-browser] + * Bug 45180: Also show download warning in download settings [tor-browser] + * Bug 45185: Disable network also in the Rust implementation of the remote settings client [tor-browser] + * Bug 45186: Remove duplicate alert roles in moz-message-bar [tor-browser] + * Bug 45187: Disable private browsing "delete downloaded files" feature [tor-browser] + * Bug 45190: New circuit urlbar icon button is squished [tor-browser] + * Bug 45192: Some URLs trigger `The proxy server is refusing connections` rather than about:torconnect prior to bootstrap [tor-browser] + * Bug 45194: "Your bridges" background color [tor-browser] + * Bug 45195: Modify our calls to openPreferences to work with the new settings [tor-browser] + * Bug 45196: Replace old connection settings with setting-group widgets [tor-browser] + * Bug 45197: Hide password settings by default [tor-browser] + * Bug 45200: Include onion authentication in the new password settings [tor-browser] + * Bug 45201: Convert security level settings to the new config [tor-browser] + * Bug 45208: Switch on the setting redesign [tor-browser] + * Bug 45209: Remove mention of "sync" from new settings [tor-browser] + * Bug 45211: Add settings for protections from third party applications [tor-browser] + * Bug 45214: Keep megalist (contextual password manager) disabled for 16.0 [tor-browser] + * Bug 45220: about:torconnect doesn't show when launching the browser in non-PBM [tor-browser] + * Bug 45226: Stylelint issues on browser/components/torpreferences/content/torPreferences.css [tor-browser] + * Bug 45228: Drop browser.urlbar.update2.engineAliasRefresh [tor-browser] + * Bug 45232: Spoof picture-in-picture sizes under RFP [tor-browser] + * Bug 45236: Resolve miscellaneus accessibility issues in about:torconnect [tor-browser] + * Bug 45245: Fix a ML file inclusion that creates an error [tor-browser] + * Windows + Android + * Bug 44513: Backport Bugzilla 2059471: Do not spoof screen orientation when it is locked [tor-browser] + * Windows + * Bug 45144: Do not offer to make the browser a PDF viewer when in portable mode [tor-browser] + * Bug 45243: Disable taskbar tabs [tor-browser] + * macOS + * Bug 45163: Consistently do not disable app group container support [tor-browser] + * Android + * Updated GeckoView to 153.1.0esr + * Bug 41758: Don't allow PDFs to be opened by 3rd party apps [tor-browser] + * Bug 43571: Implement improved error handling and tor restart flow (Android) [tor-browser] + * Bug 44054: Review Mozilla 1970806: [Download v2] Implement new UI for External Download Manager dialog [tor-browser] + * Bug 44210: Consider dropping shouldDisableNormalMode setting [tor-browser] + * Bug 44448: Trivialise assets rather than delete them in "[android] Delete unused media" [tor-browser] + * Bug 44758: Disable email mask feature [tor-browser] + * Bug 44881: Remove link sharing setting on android [tor-browser] + * Bug 44921: Disable Google Lens feature [tor-browser] + * Bug 45049: Opening a pdf from outside TBA crashes TBA after bootstrapping it not already bootstrapped [tor-browser] + * Bug 45085: Disable GooglePlay Integrity [tor-browser] + * Bug 45098: Share link button shows in landscape mode on android despite being removed elsewhere [tor-browser] + * Bug 45115: Padlock always shows insecure even for HTTPS and Onion sites [tor-browser] + * Bug 45159: Fix Android Padlock security pane colors [tor-browser] + * Bug 45170: Tab Switcher shows Firefox's private browsing mask badge on tab switcher icon [tor-browser] + * Bug 45173: Disable Search Optimizations for android [tor-browser] + * Bug 45203: Rebase error with: TB 40041: [android] Implement Tor Network Settings [tor-browser] + * Bug 45221: Remove "Manage downloads with another app" setting from TBA download settings [tor-browser] + * Bug 45227: Remove "Default search engine for Standard Mode" [tor-browser] + * Bug 45234: Do not spoof secondary screen orientations if they were requested by a lock [tor-browser] + * Build System + * All Platforms + * Bug 45224: Enable Rust linter in CI [tor-browser] + * Bug 45231: Backport Bugzilla 2053518: Rust target detection fails to translate the host triple with rustc nightly >= 2026-07-02 (new *-oe-linux-* targets) [tor-browser] + * Bug 41844: Add scripts to backup/deploy signing keys on signing machines [tor-browser-build] + * Bug 41850: Update keyring/torbrowser.gpg for new subkey and updated expiration date of the main key [tor-browser-build] + * Windows + macOS + Linux + * Bug 41711: Update our manual machinery for its new home [tor-browser-build] + * Windows + Linux + Android + * Updated Go to 1.26.7 + * Android + * Bug 41843: Remove unused universal apk from geckoview [tor-browser-build] + Tor Browser 16.0a9 - July 23 2026 * All Platforms * Updated NoScript to 13.6.30.90201984 ===================================== projects/browser/config ===================================== @@ -87,12 +87,12 @@ input_files: enable: '[% !c("var/android") %]' - filename: dmg-root enable: '[% c("var/macos") %]' - - URL: https://dist.torproject.org/torbrowser/noscript/noscript-13.6.30.90201984.x… + - URL: https://dist.torproject.org/torbrowser/noscript/noscript-13.6.31.90301984.x… name: noscript - sha256sum: ef7b48702916f86d44f0578fcc18dcd4ed4a013481abafca96891e10af1bcf85 - - URL: https://addons.mozilla.org/firefox/downloads/file/4888680/ublock_origin-1.7… + sha256sum: 37026b2449ed18e4f85dea3d870e43c5813db144334f98fd61220f698a351163 + - URL: https://addons.mozilla.org/firefox/downloads/file/4981431/ublock_origin-1.7… name: ublock-origin - sha256sum: 40c315b0da7871868155ecfae7a50a58dfa0920aebd865e008214986f1b7c578 + sha256sum: 175756d74468c9ba45863f7fc333d3be670f82d5b066314e915814dd547d1652 enable: '[% c("var/mullvad-browser") %]' - URL: https://cdn.mullvad.net/browser-extension/0.9.10/mullvad-browser-extension-… name: mullvad-extension ===================================== projects/firefox/config ===================================== @@ -23,7 +23,7 @@ var: browser_series: '16.0' browser_rebase: 1 browser_branch: '[% c("var/browser_series") %]-[% c("var/browser_rebase") %]' - browser_build: 1 + browser_build: 4 upstream_firefox_commit: FIREFOX_NIGHTLY_153_END copyright_year: '[% exec("git show -s --format=%ci " _ c("git_hash") _ "^{commit}", { exec_noco => 1 }).remove("-.*") %]' nightly_updates_publish_dir: '[% c("var/nightly_updates_publish_dir_prefix") %]nightly-[% c("var/osname") %]' @@ -114,6 +114,7 @@ targets: updater_url: 'https://cdn.mullvad.net/browser/update_responses/update_1/' mar_id_prefix: 'mullvadbrowser-mullvad' nightly_updates_publish_dir_prefix: mullvadbrowser- + browser_build: 3 linux-x86_64: var: arch_deps: ===================================== projects/geckoview/config ===================================== @@ -26,7 +26,7 @@ var: browser_series: '16.0' browser_rebase: 1 browser_branch: '[% c("var/browser_series") %]-[% c("var/browser_rebase") %]' - browser_build: 1 + browser_build: 4 gitlab_project: https://gitlab.torproject.org/tpo/applications/tor-browser git_commit: '[% exec("git rev-parse " _ c("git_hash") _ "^{commit}", { exec_noco => 1 }) %]' deps: ===================================== projects/go/config ===================================== @@ -1,11 +1,11 @@ # vim: filetype=yaml sw=2 -version: '1.26.5' +version: '1.26.7' filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]' container: use_container: 1 var: - source_sha256: 495be4bc87176ac567392e5b4116abd98466d33d7b49d41e764ccc6976b2dc42 + source_sha256: 0ed24eac755105085b89fe9cabc2742b91a0ad7b94b59d3ad364918ebc8956ad no_crosscompile: 1 setup: | mkdir -p /var/tmp/dist ===================================== projects/manual/config ===================================== @@ -1,7 +1,7 @@ # vim: filetype=yaml sw=2 # To update, see doc/how-to-update-the-manual.txt # Remember to update also the package's hash, with the version! -version: 402523 +version: 415198 filename: 'manual-[% c("version") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]' container: use_container: 1 @@ -23,6 +23,6 @@ input_files: - project: container-image - URL: 'https://build-sources.tbb.torproject.org/marble-support_[% c("version") %].zip' name: manual - sha256sum: e0f09c869719bf9dc0ae2761f121cae7cd9b5324f817f2cc0a5861c58442f3ff + sha256sum: c5223af6931d03be5b5e17e9be3d64c4223008a591a3acd3d553f86c6bd8df37 - filename: package_marble_build_artifacts.py name: package_script ===================================== projects/openssl/config ===================================== @@ -1,5 +1,5 @@ # vim: filetype=yaml sw=2 -version: 3.5.7 +version: 3.5.8 filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.[% c("compress_tar") %]' container: use_container: 1 @@ -41,5 +41,5 @@ input_files: - name: '[% c("var/compiler") %]' project: '[% c("var/compiler") %]' - URL: 'https://github.com/openssl/openssl/releases/download/openssl-[% c("version") %]/openssl-[% c("version") %].tar.gz' - sha256sum: a8c0d28a529ca480f9f36cf5792e2cd21984552a3c8e4aa11a24aa31aeac98e8 + sha256sum: a8f84a39918ec6415ce765d9b429d313ba97b8143169c172e734b9514464f5b2 name: openssl ===================================== projects/translation/config ===================================== @@ -12,13 +12,13 @@ compress_tar: 'gz' steps: base-browser: base-browser: '[% INCLUDE build %]' - git_hash: 7bd0a8e7226bbf29f16d477ff92d0024b1d48a7c + git_hash: 1ebbe4b676d03428a8091e9ce6c64e5f0046b0f9 targets: nightly: git_hash: 'base-browser' tor-browser: tor-browser: '[% INCLUDE build %]' - git_hash: 43635f68f04d7e5645e5b28bbab7cd7f0fc2ffa5 + git_hash: ea6fbf3c7c1e2ded1613285560d927806dd82337 targets: nightly: git_hash: 'tor-browser' @@ -32,7 +32,7 @@ steps: fenix: '[% INCLUDE build %]' # We need to bump the commit before releasing but just pointing to a branch # might cause too much rebuidling of the Firefox part. - git_hash: f3757f734f6d08ff5aecc18f9f4b05e35c9bcbc4 + git_hash: 0a527bd20d6649a5dc6d648aa355e884b80654a9 compress_tar: 'zst' targets: nightly: ===================================== rbm.conf ===================================== @@ -81,11 +81,11 @@ buildconf: git_signtag_opt: '-s' var: - torbrowser_version: '16.0a9' + torbrowser_version: '16.0a10' torbrowser_build: 'build1' # This should be the date of when the build is started. For the build # to be reproducible, browser_release_date should always be in the past. - browser_release_date: '2026/07/22 13:30:00' + browser_release_date: '2026/08/26 14:53:16' browser_release_date_timestamp: '[% USE date; date.format(c("var/browser_release_date"), "%s") %]' browser_default_channel: alpha browser_platforms: @@ -131,9 +131,9 @@ var: updater_enabled: 1 build_mar: 1 torbrowser_incremental_from: + - 16.0a9 - 16.0a8 - 16.0a7 - - 16.0a6 mar_channel_id: '[% c("var/projectname") %]-torproject-[% c("var/channel") %]' # By default, we sort the list of installed packages. This allows sharing View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/5… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/5… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-153.1.0esr-16.0-1-build4
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag tor-browser-153.1.0esr-16.0-1-build4 at The Tor Project / Applications / Tor Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/tor-brows… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! TB 44806: Implement the tor integration in Rust.
by Pier Angelo Vendrame (@pierov) 26 Aug '26

26 Aug '26
Pier Angelo Vendrame pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 66acc554 by Pier Angelo Vendrame at 2026-08-26T16:00:06+02:00 fixup! TB 44806: Implement the tor integration in Rust. No bug: fix the onClosed call. - - - - - 1 changed file: - toolkit/components/tor-launcher/TorControlPort.sys.mjs Changes: ===================================== toolkit/components/tor-launcher/TorControlPort.sys.mjs ===================================== @@ -566,7 +566,7 @@ export class TorController { self.#handleNotification(message); }, onClosed() { - self.onClosed(); + self.#eventHandler?.onClosed(); }, }; this.#socket.start(receiver); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/66acc55… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/66acc55… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser] Pushed new tag mullvad-browser-153.1.0esr-16.0-1-build3
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag mullvad-browser-153.1.0esr-16.0-1-build3 at The Tor Project / Applications / Mullvad Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/tree/mullv… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-153.1.0esr-16.0-1-build3
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag tor-browser-153.1.0esr-16.0-1-build3 at The Tor Project / Applications / Tor Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/tor-brows… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Deleted tag tor-browser-153.1.0esr-16.0-1-build3
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan deleted tag tor-browser-153.1.0esr-16.0-1-build3 at The Tor Project / Applications / Tor Browser -- You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-153.1.0esr-16.0-1-build3
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed new tag tor-browser-153.1.0esr-16.0-1-build3 at The Tor Project / Applications / Tor Browser -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/tor-brows… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] 6 commits: fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser
by morgan (@morgan) 26 Aug '26

26 Aug '26
morgan pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 6a6cb5e8 by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser TB 45236: Make the breadcrumbs focusable and activatable with a keyboard. We also update the breadcrumb states to be more consistent between stages, and we no longer disable prior breadcrumbs during a bootstrap since it is safe for the user to switch back to a prior stage. - - - - - 9250f769 by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser TB 45236: Have the "configure connection" link point to about:preferences to give users a hint of where they are going. - - - - - fe4fe5a2 by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser TB 45236: Drop the wrapping <form> element. Also fix the `for` attribute to point to the `<select>` element. - - - - - 747ca252 by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 27476: Implement about:torconnect captive portal within Tor Browser TB 45236: Expose the progress bar to accessibility tools. - - - - - 3cb7efed by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 40597: Implement TorSettings module TB 45236: Return early when Moat returns no bridges. - - - - - f54fe85b by Henry Wilkes at 2026-08-26T12:08:36+00:00 fixup! TB 40597: Implement TorSettings module TB 45236: Add an option to simulate progress in simulated bootstraps. This is useful for debugging the about:torconnect page. We also lazy-load the `setTimeout` and related methods since these are only used for simulated scenarios. - - - - - 4 changed files: - browser/components/torconnect/content/aboutTorConnect.css - browser/components/torconnect/content/aboutTorConnect.html - browser/components/torconnect/content/aboutTorConnect.js - toolkit/modules/TorConnect.sys.mjs Changes: ===================================== browser/components/torconnect/content/aboutTorConnect.css ===================================== @@ -25,42 +25,59 @@ body { #breadcrumbs { grid-area: breadcrumbs; display: flex; - align-items: center; + gap: var(--space-large); margin: 0 0 var(--space-xlarge) 0; -} -#breadcrumbs.hidden { - visibility: hidden; + &.hide-breadcrumbs { + visibility: hidden; + } + + & :is(ol, li:not([hidden])) { + display: contents; + } } .breadcrumb-item, .breadcrumb-separator { - display: flex; - margin: 0; - margin-inline-start: var(--space-large); + flex: 0 0 auto; padding: var(--space-small); } .breadcrumb-item { + display: flex; + gap: var(--space-xsmall); align-items: center; cursor: pointer; color: var(--text-color); border-radius: var(--border-radius-small); -} -.breadcrumb-item:hover { - color: var(--color-accent-primary); - background-color: var(--button-background-color-hover); -} + & > * { + flex: 0 0 auto; + } + + &:not(.breadcrumb-disabled):hover { + color: var(--color-accent-primary); + background-color: var(--button-background-color-hover); + } + + &:not(.breadcrumb-disabled):active { + color: var(--color-accent-primary-active); + background-color: var(--button-background-color-active); + } + + &.breadcrumb-active { + color: var(--color-accent-primary); + } -.breadcrumb-item:active { - color: var(--color-accent-primary-active); - background-color: var(--button-background-color-active); + &.breadcrumb-disabled { + color: var(--text-color); + opacity: 0.4; + cursor: unset; + } } .breadcrumb-separator { - width: var(--icon-size); - list-style-image: url("chrome://browser/content/torconnect/arrow-right.svg"); + content: url("chrome://browser/content/torconnect/arrow-right.svg"); } .breadcrumb-separator:dir(rtl) { @@ -68,61 +85,35 @@ body { } .breadcrumb-icon { - display: inline list-item; + width: var(--icon-size); height: var(--icon-size); - list-style-position: inside; -moz-context-properties: fill, stroke; fill: currentColor; stroke: currentColor; } -.breadcrumb-item.active { - color: var(--color-accent-primary); -} - -.breadcrumb-item.disabled, -.breadcrumb-item.disabled:hover, -.breadcrumb-item.disabled:active { - color: var(--text-color); - opacity: 0.4; - cursor: default; -} - -.breadcrumb-item.hidden, -.breadcrumb-separator.hidden { - display: none; -} - #connect-to-tor { margin-inline-start: 0; } #connect-to-tor-icon { - list-style-image: url("chrome://browser/content/torconnect/tor-connect.svg"); + content: url("chrome://browser/content/torconnect/tor-connect.svg"); } #connection-assist-icon { - list-style-image: url("chrome://browser/content/torconnect/tor-connect-broken.svg"); -} - -#try-bridge { - cursor: default; + content: url("chrome://browser/content/torconnect/tor-connect-broken.svg"); } #try-bridge-icon { - list-style-image: url("chrome://browser/content/torconnect/bridge.svg"); + content: url("chrome://browser/content/torconnect/bridge.svg"); } #locationDropdownLabel.error { color: var(--text-color-error); } -form#locationDropdown { +#regions-select { width: 240px; -} - -form#locationDropdown select { - width: 100%; margin: 0; font-weight: var(--font-weight-bold); } ===================================== browser/components/torconnect/content/aboutTorConnect.html ===================================== @@ -33,33 +33,43 @@ ></script> </head> <body class="onion-pattern-background"> - <div id="progressBar" hidden="hidden"> + <div + id="progressBar" + role="progressbar" + aria-valuenow="0" + aria-valuemin="0" + aria-valuemax="100" + aria-labelledby="tor-connect-heading" + hidden="hidden" + > <div id="progressSolid"></div> <div id="progressBackground"></div> <div id="progressBarBackground"></div> </div> - <div id="breadcrumbs" class="hidden"> - <span id="connect-to-tor" class="breadcrumb-item"> - <span id="connect-to-tor-icon" class="breadcrumb-icon"></span> - <span class="breadcrumb-label"></span> - </span> - <span - id="connection-assist-separator" - class="breadcrumb-separator breadcrumb-icon" - ></span> - <span id="connection-assist" class="breadcrumb-item"> - <span id="connection-assist-icon" class="breadcrumb-icon"></span> - <span class="breadcrumb-label"></span> - </span> - <span - id="try-bridge-separator" - class="breadcrumb-separator breadcrumb-icon" - ></span> - <span id="try-bridge" class="breadcrumb-item"> - <span id="try-bridge-icon" class="breadcrumb-icon"></span> - <span class="breadcrumb-label"></span> - </span> - </div> + <nav id="breadcrumbs"> + <ol> + <li id="connect-to-tor"> + <div class="breadcrumb-item" role="link" tabindex="0"> + <span id="connect-to-tor-icon" class="breadcrumb-icon"></span> + <span class="breadcrumb-label"></span> + </div> + </li> + <li id="connection-assist"> + <div class="breadcrumb-separator breadcrumb-icon"></div> + <div class="breadcrumb-item" role="link" tabindex="0"> + <span id="connection-assist-icon" class="breadcrumb-icon"></span> + <span class="breadcrumb-label"></span> + </div> + </li> + <li id="try-bridge"> + <div class="breadcrumb-separator breadcrumb-icon"></div> + <div class="breadcrumb-item" role="link" tabindex="0"> + <span id="try-bridge-icon" class="breadcrumb-icon"></span> + <span class="breadcrumb-label"></span> + </div> + </li> + </ol> + </nav> <div class="torconnect-stage-content" data-stage-name="ProviderStopped"> <img class="torconnect-icon assist-icon" alt="" /> <h1 @@ -166,14 +176,12 @@ <button id="configureButton" hidden="true"></button> <button id="cancelButton" hidden="true"></button> <button id="connectButton" hidden="true" class="tor-button"></button> - <label id="locationDropdownLabel" for="countries"></label> - <form id="locationDropdown" hidden="true"> - <select id="regions-select"> - <option id="first-region-option"></option> - <optgroup id="frequent-regions-option-group"></optgroup> - <optgroup id="full-regions-option-group"></optgroup> - </select> - </form> + <label id="locationDropdownLabel" for="regions-select"></label> + <select id="regions-select" hidden="hidden"> + <option id="first-region-option"></option> + <optgroup id="frequent-regions-option-group"></optgroup> + <optgroup id="full-regions-option-group"></optgroup> + </select> <button id="tryBridgeButton" hidden="true" class="tor-button"></button> </div> </div> ===================================== browser/components/torconnect/content/aboutTorConnect.js ===================================== @@ -42,12 +42,10 @@ class AboutTorConnect { label: "#connect-to-tor .breadcrumb-label", }, connectionAssist: { - separator: "#connection-assist-separator", link: "#connection-assist", label: "#connection-assist .breadcrumb-label", }, tryBridge: { - separator: "#try-bridge-separator", link: "#try-bridge", label: "#try-bridge .breadcrumb-label", }, @@ -66,7 +64,6 @@ class AboutTorConnect { connect: "button#connectButton", tryBridge: "button#tryBridgeButton", locationDropdownLabel: "#locationDropdownLabel", - locationDropdown: "form#locationDropdown", locationDropdownSelect: "#regions-select", }, }); @@ -90,18 +87,12 @@ class AboutTorConnect { connectToTorLabel: document.querySelector( this.selectors.breadcrumbs.connectToTor.label ), - connectionAssistSeparator: document.querySelector( - this.selectors.breadcrumbs.connectionAssist.separator - ), connectionAssistLink: document.querySelector( this.selectors.breadcrumbs.connectionAssist.link ), connectionAssistLabel: document.querySelector( this.selectors.breadcrumbs.connectionAssist.label ), - tryBridgeSeparator: document.querySelector( - this.selectors.breadcrumbs.tryBridge.separator - ), tryBridgeLink: document.querySelector( this.selectors.breadcrumbs.tryBridge.link ), @@ -120,9 +111,6 @@ class AboutTorConnect { locationDropdownLabel: document.querySelector( this.selectors.buttons.locationDropdownLabel ), - locationDropdown: document.querySelector( - this.selectors.buttons.locationDropdown - ), locationDropdownSelect: document.querySelector( this.selectors.buttons.locationDropdownSelect ), @@ -221,7 +209,7 @@ class AboutTorConnect { this.hide(this.elements.cancelButton); this.hide(this.elements.connectButton); this.hide(this.elements.locationDropdownLabel); - this.hide(this.elements.locationDropdown); + this.hide(this.elements.locationDropdownSelect); this.hide(this.elements.tryBridgeButton); } @@ -239,33 +227,49 @@ class AboutTorConnect { } setBreadcrumbsStatus(connectToTor, connectionAssist, tryBridge) { - this.elements.breadcrumbContainer.classList.remove("hidden"); - const elems = [ - [this.elements.connectToTorLink, connectToTor, null], - [ - this.elements.connectionAssistLink, - connectionAssist, - this.elements.connectionAssistSeparator, - ], - [ - this.elements.tryBridgeLink, - tryBridge, - this.elements.tryBridgeSeparator, - ], - ]; - elems.forEach(([elem, status, separator]) => { - elem.classList.remove(BreadcrumbStatus.Hidden); - elem.classList.remove(BreadcrumbStatus.Disabled); - elem.classList.remove(BreadcrumbStatus.Active); - if (status !== "") { - elem.classList.add(status); + this.elements.breadcrumbContainer.classList.remove("hide-breadcrumbs"); + for (const { listEl, status } of [ + { listEl: this.elements.connectToTorLink, status: connectToTor }, + { listEl: this.elements.connectionAssistLink, status: connectionAssist }, + { listEl: this.elements.tryBridgeLink, status: tryBridge }, + ]) { + let hidden = false; + let disabled = false; + let active = false; + switch (status) { + case BreadcrumbStatus.Hidden: + hidden = true; + break; + case BreadcrumbStatus.Disabled: + disabled = true; + break; + case BreadcrumbStatus.Active: + active = true; + break; } - separator?.classList.toggle("hidden", status === BreadcrumbStatus.Hidden); - }); + // NOTE: Hiding or disabling elements can cause them to loose focus. + // However, with each stage change the focus should already be moved. + listEl.hidden = hidden; + const linkEl = listEl.querySelector(".breadcrumb-item"); + linkEl.classList.toggle("breadcrumb-disabled", disabled); + linkEl.classList.toggle("breadcrumb-active", active); + if (disabled) { + linkEl.removeAttribute("tabindex"); + linkEl.setAttribute("aria-disabled", "true"); + } else { + linkEl.setAttribute("tabindex", "0"); + linkEl.removeAttribute("aria-disabled", "true"); + } + if (active) { + linkEl.setAttribute("aria-current", "step"); + } else { + linkEl.removeAttribute("aria-current"); + } + } } hideBreadcrumbs() { - this.elements.breadcrumbContainer.classList.add("hidden"); + this.elements.breadcrumbContainer.classList.add("hide-breadcrumbs"); } getLocalizedStatus(status) { @@ -432,7 +436,11 @@ class AboutTorConnect { break; case "Bootstrapping": showProgress = true; - this.showBootstrapping(stage.bootstrapTrigger, stage.tryAgain); + this.showBootstrapping( + stage.bootstrapTrigger, + stage.tryAgain, + stage.potentiallyBlocked + ); // Always focus the cancel button. moveFocus = this.elements.cancelButton; break; @@ -637,10 +645,13 @@ class AboutTorConnect { } updateBootstrappingStatus(data) { + let { progress } = data; + progress = Math.max(0, Math.min(progress, 100)); this.elements.progressMeter.style.setProperty( "--progress-percent", - `${data.progress}%` + `${progress}%` ); + this.elements.progressMeter.setAttribute("aria-valuenow", String(progress)); if (this.shownStage === "Bootstrapping" && data.hasWarning) { // When bootstrapping starts, we hide the log button, but we re-show it if // we get a warning. @@ -676,16 +687,18 @@ class AboutTorConnect { BreadcrumbStatus.Default, BreadcrumbStatus.Disabled ); + } else { + this.hideBreadcrumbs(); } } - showBootstrapping(trigger, tryAgain) { + showBootstrapping(trigger, tryAgain, potentiallyBlocked) { let title = ""; let description = ""; const breadcrumbs = [ - BreadcrumbStatus.Disabled, - BreadcrumbStatus.Disabled, - BreadcrumbStatus.Disabled, + BreadcrumbStatus.Default, + potentiallyBlocked ? BreadcrumbStatus.Default : BreadcrumbStatus.Hidden, + potentiallyBlocked ? BreadcrumbStatus.Disabled : BreadcrumbStatus.Hidden, ]; switch (trigger) { case "Start": @@ -718,7 +731,7 @@ class AboutTorConnect { this.setTitle(title, ""); this.showConfigureConnectionLink(description); this.elements.progressDescription.textContent = ""; - if (tryAgain) { + if (tryAgain || potentiallyBlocked) { this.setBreadcrumbsStatus(...breadcrumbs); } else { this.hideBreadcrumbs(); @@ -780,8 +793,8 @@ class AboutTorConnect { this.getMaybeLocalizedError(error); this.setBreadcrumbsStatus( BreadcrumbStatus.Default, - BreadcrumbStatus.Default, - BreadcrumbStatus.Active + BreadcrumbStatus.Active, + BreadcrumbStatus.Disabled ); this.showLocationForm(false, TorStrings.torConnect.tryAgain); } @@ -805,7 +818,8 @@ class AboutTorConnect { const pieces = text.split("%S"); const link = document.createElement("a"); link.textContent = TorStrings.torConnect.configureConnection; - link.setAttribute("href", "#"); + link.setAttribute("href", "about:preferences#connection"); + link.setAttribute("target", "_blank"); link.addEventListener("click", e => { e.preventDefault(); RPMSendAsyncMessage("torconnect:open-tor-preferences"); @@ -918,7 +932,7 @@ class AboutTorConnect { this.populateDelayedRegionOptions(); this.show(this.elements.locationDropdownLabel); - this.show(this.elements.locationDropdown); + this.show(this.elements.locationDropdownSelect); this.elements.locationDropdownLabel.classList.toggle("error", !isChoose); this.show(this.elements.tryBridgeButton, true); if (buttonLabel !== undefined) { @@ -929,24 +943,38 @@ class AboutTorConnect { initElements(direction) { document.documentElement.setAttribute("dir", direction); - this.elements.connectToTorLink.addEventListener("click", () => { - RPMSendAsyncMessage("torconnect:start-again"); - }); + for (const [linkEl, command] of [ + [ + this.elements.connectToTorLink, + () => { + RPMSendAsyncMessage("torconnect:start-again"); + }, + ], + [ + this.elements.connectionAssistLink, + () => { + RPMSendAsyncMessage("torconnect:choose-region"); + }, + ], + // Final link does nothing. + ]) { + // NOTE: These link should never be both visible and disabled. + // NOTE: We allow re-selecting this link when it is already the + // "aria-current" item, to allow the user to reset to the beginning of + // Connection Assist. + linkEl.addEventListener("click", () => { + command(); + }); + linkEl.addEventListener("keydown", event => { + if (event.key !== "Enter") { + return; + } + command(); + }); + } + this.elements.connectToTorLabel.textContent = TorStrings.torConnect.torConnect; - this.elements.connectionAssistLink.addEventListener("click", () => { - if ( - this.elements.connectionAssistLink.classList.contains( - BreadcrumbStatus.Active - ) || - this.elements.connectionAssistLink.classList.contains( - BreadcrumbStatus.Disabled - ) - ) { - return; - } - RPMSendAsyncMessage("torconnect:choose-region"); - }); this.elements.connectionAssistLabel.textContent = TorStrings.torConnect.breadcrumbAssist; this.elements.tryBridgeLabel.textContent = @@ -1073,7 +1101,7 @@ class AboutTorConnect { RPMAddMessageListener("torconnect:region-names-change", () => { // Reset the regions list. this.regions = null; - if (!this.elements.locationDropdown.hidden) { + if (!this.elements.locationDropdownSelect.hidden) { // Re-populate immediately. this.populateDelayedRegionOptions(); } ===================================== toolkit/modules/TorConnect.sys.mjs ===================================== @@ -2,8 +2,6 @@ * 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/. */ -import { setTimeout, clearTimeout } from "resource://gre/modules/Timer.sys.mjs"; - const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { @@ -24,6 +22,10 @@ ChromeUtils.defineESModuleGetters(lazy, { "moz-src:///toolkit/components/tor-launcher/TorLauncherUtil.sys.mjs", TorSettings: "moz-src:///toolkit/modules/TorSettings.sys.mjs", TorSettingsTopics: "moz-src:///toolkit/modules/TorSettings.sys.mjs", + clearInterval: "resource://gre/modules/Timer.sys.mjs", + clearTimeout: "resource://gre/modules/Timer.sys.mjs", + setInterval: "resource://gre/modules/Timer.sys.mjs", + setTimeout: "resource://gre/modules/Timer.sys.mjs", }); ChromeUtils.defineLazyGetter(lazy, "NetworkLinkService", () => { @@ -122,12 +124,17 @@ export const TorConnectTopics = Object.freeze({ * bootstrap. * @property {integer} [simulateDelay] - The delay in microseconds to apply to * simulated bootstraps. + * @property {number} [simulateProgress] - The progress percent to reach before + * the simulated bootstrap fails. * @property {MoatSettings} [simulateMoatResponse] - Simulate a Moat response * for circumvention settings. Should include a "bridgesList" property, and * optionally a "country" property. The "bridgesList" property should be an * Array of MoatBridges objects that match the bridge settings accepted by - * TorSettings.bridges, plus you may add a "simulateCensorship" property to - * make only their bootstrap attempts fail. + * TorSettings.bridges. For each MoatBridges object, you may also add a + * "simulateCensorship" property, with an optional "simulateProgress" + * property, to make the bootstrap attempt fail for this set of bridges + * (whilst still allowing it to pass for other sets of bridges in the + * simulated Moat response). * @property {string} [regionCode] - The region code to use to fetch * auto-bootstrap settings, or "automatic" to automatically choose the region. */ @@ -232,7 +239,7 @@ class BootstrapAttempt { this.#bootstrap = { _timeout: 0, bootstrap() { - this._timeout = setTimeout(() => { + this._timeout = lazy.setTimeout(() => { const err = new lazy.TorBootstrapError({ summary: "Censorship simulation", phase: "conn", @@ -240,9 +247,32 @@ class BootstrapAttempt { }); this.onbootstraperror(err); }, options.simulateDelay || 0); + this.onbootstrapstatus(0); + if (options.simulateDelay && options.simulateProgress) { + let progress = 0; + const step = 5; + const delay = Math.floor( + // We want the last step to last for 10 delay periods to emulate a + // short "hang" at this stage. + (step * options.simulateDelay) / + (options.simulateProgress + 10 * step) + ); + this._progress = lazy.setInterval(() => { + progress += step; + if (progress >= options.simulateProgress) { + progress = options.simulateProgress; + lazy.clearInterval(this._progress); + delete this._progress; + } + this.onbootstrapstatus(progress); + }, delay); + } }, cancel() { - clearTimeout(this._timeout); + lazy.clearTimeout(this._timeout); + if (this._progress) { + lazy.clearInterval(this._progress); + } }, }; } else { @@ -458,6 +488,7 @@ class AutoBootstrapAttempt { : TorConnectError.NoSettingsForCountry ), }); + return; } // Apply each of our settings and try to bootstrap with each. @@ -489,7 +520,7 @@ class AutoBootstrapAttempt { async #fetchBridges(options) { if (options.simulateMoatResponse) { await Promise.race([ - new Promise(res => setTimeout(res, options.simulateDelay || 0)), + new Promise(res => lazy.setTimeout(res, options.simulateDelay || 0)), this.#cancelledPromise, ]); @@ -588,8 +619,13 @@ class AutoBootstrapAttempt { // Move the simulateCensorship option to the options for the next // BootstrapAttempt. bridges = structuredClone(bridges); + const simulateProgress = bridges.simulateProgress; delete bridges.simulateCensorship; + delete bridges.simulateProgress; options = { ...options, simulateCensorship: true }; + if (simulateProgress) { + options.simulateProgress = simulateProgress; + } } // Send the new settings directly to the provider. We will save them only @@ -1271,6 +1307,10 @@ export const TorConnect = { bootstrapOptions.simulateDelay = this.simulateBootstrapOptions.simulateDelay; } + if (this.simulateBootstrapOptions.simulateProgress) { + bootstrapOptions.simulateProgress = + this.simulateBootstrapOptions.simulateProgress; + } if (this.simulateBootstrapOptions.simulateMoatResponse) { bootstrapOptions.simulateMoatResponse = this.simulateBootstrapOptions.simulateMoatResponse; @@ -1280,8 +1320,9 @@ export const TorConnect = { TorConnectPrefs.censorship_level, 0 ); - if (censorshipLevel > 0 && !bootstrapOptions.simulateDelay) { - bootstrapOptions.simulateDelay = 1500; + if (censorshipLevel > 0) { + bootstrapOptions.simulateDelay ||= 1500; + bootstrapOptions.simulateProgress ||= 20; } if (censorshipLevel === 1) { // Bootstrap fails, but auto-bootstrap does not. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/17053f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/17053f… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/torbrowser-launcher][main] metainfo: Update bugtracker url
by asciiwolf (@asciiwolf) 26 Aug '26

26 Aug '26
asciiwolf pushed to branch main at The Tor Project / Applications / torbrowser-launcher Commits: 80e1dd56 by asciiwolf at 2026-08-26T12:26:08+00:00 metainfo: Update bugtracker url - - - - - 1 changed file: - share/metainfo/org.torproject.torbrowser-launcher.metainfo.xml Changes: ===================================== share/metainfo/org.torproject.torbrowser-launcher.metainfo.xml ===================================== @@ -51,7 +51,7 @@ <caption xml:lang="cs">Okno pro změnu nastavení Spouštěče Prohlížeče Tor</caption> </screenshot> </screenshots> - <url type="bugtracker">https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/issues</url> + <url type="bugtracker">https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/work_i…</url> <url type="homepage">https://gitlab.torproject.org/tpo/applications/torbrowser-launcher</url> <update_contact>boklm(a)torproject.org</update_contact> <content_rating type="oars-1.1"/> View it on GitLab: https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/commit… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/commit… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/torbrowser-launcher][main] 2 commits: Update share/torbrowser-launcher/tor-browser-developers.asc [2026] (#58)
by asciiwolf (@asciiwolf) 26 Aug '26

26 Aug '26
asciiwolf pushed to branch main at The Tor Project / Applications / torbrowser-launcher Commits: 1ade0acb by boklm at 2026-08-26T12:22:19+00:00 Update share/torbrowser-launcher/tor-browser-developers.asc [2026] (#58) - - - - - 30a828cc by asciiwolf at 2026-08-26T12:22:19+00:00 Merge branch 'tbl-58-update-gpg-key' into 'main' Update share/torbrowser-launcher/tor-browser-developers.asc [2026] (#58) Closes #58 See merge request tpo/applications/torbrowser-launcher!51 - - - - - 1 changed file: - share/torbrowser-launcher/tor-browser-developers.asc Changes: ===================================== share/torbrowser-launcher/tor-browser-developers.asc ===================================== @@ -13,18 +13,18 @@ jOKjNzu8vxbotBgZ01upDUdl69OnR1dv9X+bMzGWUyOjAjK6SP8rFtWFBjWgWcED OHu51YpicSdN3uf7lppEXGx91n45xVMhL9d2KNp3DhWkKDuWhdliWC/r1wARAQAB tEBUb3IgQnJvd3NlciBEZXZlbG9wZXJzIChzaWduaW5nIGtleSkgPHRvcmJyb3dz ZXJAdG9ycHJvamVjdC5vcmc+iQJUBBMBCgA+AhsBBQsJCAcDBRUKCQgLBRYCAwEA -Ah4BAheAFiEE724obdqF6ipLp95oTixuh5MpgpAFAmaVDyQFCRep+eoACgkQTixu -h5MpgpC6GQ/9FyEMSUzJz48BAQVAyhdJMYoDAWFEVUOZHKv0QjciMfTsvoYhWc/P -G2LX3r/Uo86Kty8zuyLBEE40HR9Ji2XTqCSbZgmL+xyFhl+YXJAD7hNBY19yfGOz -fR24r/R8tN0gFJtYxmDOsU6rZyYftLfgiDTopRvtQcLPdAOtG3HRlfoNvD5SvxJG -HZsNNbUHbw+SOGygeI976pyhiXibgUkiI8fRdR1iRBNfWH33TsjjtmYIlGmBj+Hf -8BjFhlKji2v9aPPrAQpAxgddsCO4BVf544EekajKkCTZQ7rYNnfq6SuETjIZjO1a -0e2tB6qt2VP3asKha/m4xHkGtam+6K5glknut1BqY4XciHpnOfZTdRiXmRVI1wMw -vZY+TAumKj6a58X1iYuvOUBeTuc1hR7Rc7LCBk1YhwJ9ke/SjAHTakhdZaiZ+YSZ -HpF7ue7UHqwndswcXksabYQaZHCVPwkY2a29FH1Cc6OHVDd7hZJlgKR04uNXEL/A -cvYy/GgAUnSyioQUh3SEJ4EzxVYT+4NHCwHOL9kiUhd9uAHgT5ic0WyGBihtPnQV -wvIbZd+7LXtZLUm8RrHL2SEddcv4ZoL+mIgc29OMzklatza2TjX1ubvmv/d8I6kf -rehBIgXeoL8r+nCBfsJAUU8bmfFx4UY+8OTczbYf5kCb/NqiaCZfPJC5Ag0EVI6w +Ah4BAheAFiEE724obdqF6ipLp95oTixuh5MpgpAFAmp7LhsFCR31ImEACgkQTixu +h5MpgpAJzA/+IX7eOo0/M+sGlGhu07nU21ptwgUL8mVQatPxj50AN1BKSvZWfsLn +cj5o5Bcp4u926R24usHY2FJJOaYqlJYCjf9r1dg0nLoUR7epSo3BzqIMeT9HFFgF +ussYMO8STAN7iFiMjmMLEAfWRgIdi4vaDKEVRz9IFuVbrEFu/PALtXqnLpZ7arLl +9/bdTucgcQrTArgo1oRB76CXtmtrpyW7iLDvueMK9q+uie30geBN+TrvOUPf6eZm +j62IlWAhxGHXKenNousC3FOd0h0SNba7ZWRrDnp6BAJl3HzqBv5+XFKixfpIucia +QexVDQHXUwnS/K4/9iTrSiSpS+10ltjE6RhqNO/vimObo+05DOg7cfZiaoXiNIGt +OCFOXLTt4dDeK2hhtCEF47IPapj2TOvjW0jZtcjpzSxFcR6eL1Mmc/G1Xx46YA9T +eb4ynbEm9V6qa3XVIeUt4HyKtHHcd3Saxi8Tc1KWu8GxOOfBIZ41UDNlbOpeErbq +OUskYI3iLqCJbVHGHIUT16rYSh04Jn1tYgY6KLAyrJ3feKlSdKIL95Mz+aL8/IJZ +8dcP1Ex2MIJksugDL1w2DsTLyHfxsRMeAYWZmDT3Vmuk/DyZ8UP0mR/wX4hG42bx +NitvNzpARVFXT3e1W3r7JldvqXWUjNwtv6y3sRW21lHtfHQVFR7dYie5Ag0EVI6w 6gEQAOSdq/N0T8db8PTutfkBRVtkdVpvhumkKWbjBoN4CwA8BVZSAfdgNCE74tyP +k7Pa802eQBUE6f0j4rD8E7ohGO61vo3ZLIIMPGCQOLtvOThNKU8ZBnCPdUbk6ms bPmnfh9Khz33zGkjozzr3uLkRDKqgwCu22sgxMMa+Szs2yBpejab4mSRglNgEgm1 @@ -104,6 +104,41 @@ S+XyTqvJtnxNIoeDCGH+o5aHYG2YSYvNLPfuLzUbKf70ARKn2MDo9nxDjTlAUgtb qQVCg2oven3FUCGFT0yZS5kCgpiEBkhwT/awam2rWRrtc+SK7nVOklghqUtYtH1u ESidDlEwoHsLs5vZl9Mh8SHUOoeTHV2RcquNQTXGn4Oh26C21Q4gWB8JXLrY3Zu8 F30NaKLLxo11C8kYo6bK0JdID2H3deLzO2zvuS4OV1KZdMugL6T5Dzam2FDJfSnP -1ZRnBkaXQu2uM6/OZUhdu8aaYv0jA/Whdd1BVVXE75M= -=QA0S +1ZRnBkaXQu2uM6/OZUhdu8aaYv0jA/Whdd1BVVXE75O5Ag0EansrwQEQAKe8vMy4 +hBEjYvkDbFgQcOSYGWyRpIBU7RIRHXk1SGHct+Ddm0DSeaZ+DIUE41GRWTVB8lzG +QUXFNyvbZOazaCz1Bvh93hmSWbi7ioOr4V92MQhmM2vr32R5+XhUrYfp2jLAgHHy +izS3AZGYowiNWAjllvkRguyxI16nLCJoEB1iGMgCsd31ZfF8NNtbAchilyUsWEZn +DlNxsLv8kZo+m22LAHDFvLLMXKnrAG/sHZRA42qT4iwVKp3jDVB+uxNK30pDBcde +b9dIVi1NhP701IJx02CUFMpz+U7+DW52oZtZ79Pw9YbwDG0cjri9wwrAPRiPsSwa +NhCZiq/HUvN5BOCowltxp+VcfKlRI8G+3tT90fkOT5dtdFgUY9ae0WioVi5o/1DO +iwcDsaZv4NWeok8/xKCqgfzPxR1Y7U3y7CxyNHa3WZ5Xo/CQVtDJYkxbWc+m3yOh +JfplpHWvvKsPkKpmRHP1LcJJoobS4e8pEi+Pzdd8t7DBZ1xPToPbBXbmS2D2tO3d +ljTzaFPRpFVy1iKRYV90l6Q0LwxOmbX+Mm3eKUJnhcdz16bCXlr9SxGD3fE0Lx/h +toAvYJyWkgZ9BaboJyB9yle1Zh2yKxwd53SXAeanPDFYYBbEoKilR1f3uf0qW8iX +De/W3crTEHMBrWLop4t7Pjq6ItjvFTeVKcATABEBAAGJBHIEGAEKACYWIQTvbiht +2oXqKkun3mhOLG6HkymCkAUCansrwQIbAgUJBFNsAAJACRBOLG6HkymCkMF0IAQZ +AQoAHRYhBAItokhDLSoOD1TmXjFsH6zWLQfZBQJqeyvBAAoJEDFsH6zWLQfZEtQQ +AJrGpE+qJVylfEHmGL3L75EREdfvuVBxN4NUYGhwDL3f4GTxiYl/LVpnHqpQBLwl +6SYkBi4+4QOpA554/xw0d8181MnDtghrBWyP7XVUk3gYOqZpZSFFOAR+1nvO4kb3 +4eoT+rxVOAB78aeSWW/XzlPtbAPIBPnnJz7FvNU8ARCO3/mSHktJ2Fl9PmBjYZaN +7hVly+Qqvewh/fAeofLuCiJgLYKsMd2FHy8EWzv9cGAHq+Qi+f+V+QU46lXlfVJF +OpKNMFZjeQSXElLYKbPtAb3FCOU3VW9rbwy2qpOVAddUAfodd3DM7R9uiRa4QDYp +9K5vHCkmcowLSAF7WPwOUaBih1/Q8HqcFnwf3/Ad5lrUkMSkcHPzRhMqVmrz1NN4 +r7l2Q8kaCyCrwH/EndP7tA2jnbIb5p8DBewnIpLSw8b6oJXuIc5yWLrPPGCAKnaU +Vcra4NswJuTzeVG9yCduBerw3U8RMk79FrpmtdJv46Gnmu2vqvF3RAlgB3K1UqYm +/j32dBxQFInIasUpMuKTgzxct8WQ/ZRIdCz1dLL+36BfaKDRlutkvlmL37hC2CaQ +pyaAUoK3qgFnVvsTQ3LyvqnvRPkNSPo3O0fTeiblCGEE3jg7iPUxvRP1eKjJ/hAR +qvMUaZpHLB4eXe1iWVqM7NgjFTMN2PRU84QOorD0ul3eKjgP/R5Xrsb56YrbTXkO +v6XqYAFMVHoqLBgryFG0aEnbmpONGvOADBeoQlbKet3EEULG1uA0WG3wkBPYQOLl +2abdokTA7ikA7/LXOXdoktyeV+ZF+rrNpLp5oCx4sHlN9Z2F2h41sZfpi6JbWNNT +Ar0d1BF+4jcPY+G4+c44zlhioCXhThCsZgg0I8JEdqqpG1iRZozsFJmAAsK9hyoB +brX0CXmJRKcFEljQU8wu9Jxvb92Uny3UPXjTnka5Ripu3KsQ3lBaqF15bulOXMGo +qdSDprTJDVXAleUKQO4Z06axBEniTXhEvW2sXDQufN8XEZxvIgKBAybJP4ifi3PK +hxC31VXRifVB3kCjFzs2NEhmCRg8T2sLR42BAy9pIaEhtvJJitXGdRMsBJd2V+SC +SIkTm8eiy7CKbx56GN2cENYEvQ2eZdL76cmzmUPdm+0jq/7mnFjQnWVPp2KloqEe +jWs9IVuiJEMK3fmytT83kZ4cCAb4hLg7UWv/rMN5yrYQh0PpWoDxbWNjpADBUIkn +wTQoq5ANOoFVXDmX4kHhBtmPE7WJ92fku/ZnpEy5X09Tjru8PBRqlUgp3z1QwOXy +B4NSkzEJVZjKBrMmUOUA5tOFrdqmimiuZvs01s/mPBkK0apE/fu2uYaARVzezp0B +KqYlGHRj37fF29amEv2t4E4kQ3XM +=F6ei -----END PGP PUBLIC KEY BLOCK----- View it on GitLab: https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/compar… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/torbrowser-launcher/-/compar… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.1.0esr-16.0-1] fixup! BB 44045: Disable ML features.
by Pier Angelo Vendrame (@pierov) 26 Aug '26

26 Aug '26
Pier Angelo Vendrame pushed to branch mullvad-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 75a5d3fb by Pier Angelo Vendrame at 2026-08-26T12:06:38+02:00 fixup! BB 44045: Disable ML features. BB 45245: Fix a JS console error/crash due to us disabling ML. - - - - - 1 changed file: - browser/components/aiwindow/models/Utils.sys.mjs Changes: ===================================== browser/components/aiwindow/models/Utils.sys.mjs ===================================== @@ -10,7 +10,6 @@ * - Rendering prompts from files */ -import { createEngine } from "chrome://global/content/ml/EngineProcess.sys.mjs"; import { OAUTH_CLIENT_ID, SCOPE_PROFILE_UID, @@ -42,6 +41,10 @@ const DEFAULT_ENDPOINT = */ export const DEFAULT_ENGINE_ID = "smart-openai"; +function createEngine() { + return null; +} + /** * Observer for model preference changes. * Invalidates the Remote Settings client cache when user changes their model preference. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/75a… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/75a… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! BB 44045: Disable ML features.
by Pier Angelo Vendrame (@pierov) 26 Aug '26

26 Aug '26
Pier Angelo Vendrame pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 17053ff9 by Pier Angelo Vendrame at 2026-08-26T11:15:20+02:00 fixup! BB 44045: Disable ML features. BB 45245: Fix a JS console error/crash due to us disabling ML. - - - - - 1 changed file: - browser/components/aiwindow/models/Utils.sys.mjs Changes: ===================================== browser/components/aiwindow/models/Utils.sys.mjs ===================================== @@ -10,7 +10,6 @@ * - Rendering prompts from files */ -import { createEngine } from "chrome://global/content/ml/EngineProcess.sys.mjs"; import { OAUTH_CLIENT_ID, SCOPE_PROFILE_UID, @@ -42,6 +41,10 @@ const DEFAULT_ENDPOINT = */ export const DEFAULT_ENGINE_ID = "smart-openai"; +function createEngine() { + return null; +} + /** * Observer for model preference changes. * Invalidates the Remote Settings client cache when user changes their model preference. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/17053ff… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/17053ff… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.1.0esr-16.0-1] fixup! Firefox preference overrides.
by Pier Angelo Vendrame (@pierov) 25 Aug '26

25 Aug '26
Pier Angelo Vendrame pushed to branch mullvad-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 54923f4a by Pier Angelo Vendrame at 2026-08-25T16:57:36+02:00 fixup! Firefox preference overrides. BB 45243: Disable taskbar tabs. - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -796,6 +796,9 @@ pref("privacy.globalprivacycontrol.pbmode.enabled", true); // Disable platform text recognition functionality (tor-browser#42057) pref("dom.text-recognition.enabled", false); +// tor-browser#45243: Disable taskbar tabs, as they need more polish from us. +pref("browser.taskbarTabs.enabled", false); + #ifdef XP_WIN pref("browser.taskbar.lists.enabled", false); pref("browser.taskbar.lists.frequent.enabled", false); View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/549… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/549… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! Firefox preference overrides.
by Pier Angelo Vendrame (@pierov) 25 Aug '26

25 Aug '26
Pier Angelo Vendrame pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: d9c1c6b9 by Pier Angelo Vendrame at 2026-08-25T16:43:57+02:00 fixup! Firefox preference overrides. BB 45243: Disable taskbar tabs. - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -803,6 +803,9 @@ pref("privacy.globalprivacycontrol.pbmode.enabled", true); // Disable platform text recognition functionality (tor-browser#42057) pref("dom.text-recognition.enabled", false); +// tor-browser#45243: Disable taskbar tabs, as they need more polish from us. +pref("browser.taskbarTabs.enabled", false); + #ifdef XP_WIN pref("browser.taskbar.lists.enabled", false); pref("browser.taskbar.lists.frequent.enabled", false); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/d9c1c6b… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/d9c1c6b… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] 2 commits: fixup! TB 34403: [android] Disable Normal mode by default.
by brizental (@brizental) 25 Aug '26

25 Aug '26
brizental pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 4ba775a2 by Beatriz Rizental at 2026-08-24T15:13:56-03:00 fixup! TB 34403: [android] Disable Normal mode by default. Bug 44210: Drop disableNormalModeByDefault setting. This setting is not useful, because it (1) is not changeable by the user and (2) it just adds complexity to the original patch to disable normal mode. - - - - - f6924714 by Beatriz Rizental at 2026-08-24T15:13:57-03:00 fixup! TB 34403: [android] Disable Normal mode by default. Bug 44210: [EXTRA] Drop test changes from original patch. These test changes justse rebase conflicts. We are not running these tests yet. Let's drop it for now and deal with it when we decide to run the tests -- if we do. - - - - - 10 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksScreen.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt - mobile/android/fenix/app/src/main/res/values/preference_keys.xml - mobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksScreen.kt ===================================== @@ -82,7 +82,6 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.core.graphics.toColorInt -import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable @@ -128,7 +127,6 @@ import org.mozilla.fenix.components.components import org.mozilla.fenix.compose.Favicon import org.mozilla.fenix.compose.list.SelectableFaviconListItem import org.mozilla.fenix.compose.list.SelectableIconListItem -import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getRootView import org.mozilla.fenix.ext.components import org.mozilla.fenix.search.SearchFragmentAction.SuggestionClicked @@ -1129,15 +1127,11 @@ private fun BookmarkListOverflowMenu( onDismissRequest: () -> Unit, store: BookmarksStore, ) { - val menuItems = listOfNotNull( + val menuItems = listOf( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_select_all_bookmarks), onClick = { store.dispatch(BookmarksListMenuAction.SelectAll) }, ), - MenuItem.TextItem( - text = Text.Resource(R.string.bookmark_menu_open_in_new_tab_button), - onClick = { store.dispatch(BookmarksListMenuAction.MultiSelect.OpenInNormalTabsClicked) }, - ).takeIf { !LocalContext.current.components.settings.shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_private_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.MultiSelect.OpenInPrivateTabsClicked) }, @@ -1198,7 +1192,7 @@ private fun BookmarkListItemMenu( bookmark: BookmarkItem.Bookmark, store: BookmarksStore, ) { - val menuItems = listOfNotNull( + val menuItems = listOf( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_select_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.SelectClicked(bookmark)) }, @@ -1217,10 +1211,6 @@ private fun BookmarkListItemMenu( text = Text.Resource(R.string.bookmark_menu_share_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.ShareClicked(bookmark)) }, ), - MenuItem.TextItem( - text = Text.Resource(R.string.bookmark_menu_open_in_new_tab_button), - onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.OpenInNormalTabClicked(bookmark)) }, - ).takeIf { !LocalContext.current.components.settings.shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_in_private_tab_button), onClick = { store.dispatch(BookmarksListMenuAction.Bookmark.OpenInPrivateTabClicked(bookmark)) }, @@ -1245,7 +1235,7 @@ private fun BookmarkListFolderMenu( folder: BookmarkItem.Folder, store: BookmarksStore, ) { - val menuItems = listOfNotNull( + val menuItems = listOf( MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_select_button), onClick = { store.dispatch(BookmarksListMenuAction.Folder.SelectClicked(folder)) }, @@ -1260,10 +1250,6 @@ private fun BookmarkListFolderMenu( store.dispatch(BookmarksListMenuAction.Folder.MoveClicked(folder)) }, ), - MenuItem.TextItem( - text = Text.Resource(R.string.bookmark_menu_open_all_in_tabs_button), - onClick = { store.dispatch(BookmarksListMenuAction.Folder.OpenAllInNormalTabClicked(folder)) }, - ).takeIf { !LocalContext.current.components.settings.shouldDisableNormalMode }, MenuItem.TextItem( text = Text.Resource(R.string.bookmark_menu_open_all_in_private_tabs_button), onClick = { store.dispatch(BookmarksListMenuAction.Folder.OpenAllInPrivateTabClicked(folder)) }, ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/browsingmode/BrowsingModeManager.kt ===================================== @@ -74,17 +74,7 @@ class DefaultBrowsingModeManager( * Returns the [BrowsingMode] set by the [intent] or the last known [BrowsingMode]. */ private fun getModeFromIntentOrLastKnown(intent: Intent?): BrowsingMode { - if (settings.shouldDisableNormalMode) { - return BrowsingMode.Private - } - - intent?.toSafeIntent()?.let { - if (it.hasExtra(PRIVATE_BROWSING_MODE)) { - val startPrivateMode = it.getBooleanExtra(PRIVATE_BROWSING_MODE, false) - return BrowsingMode.fromBoolean(isPrivate = startPrivateMode) - } - } - - return settings.lastKnownMode + // tor-browser#44210: Hard-code always on PBM. + return BrowsingMode.Private } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt ===================================== @@ -18,7 +18,6 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.feature.search.ext.createApplicationSearchEngine import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Store -import org.mozilla.fenix.ext.components import org.mozilla.fenix.R import mozilla.components.ui.icons.R as iconsR @@ -35,7 +34,7 @@ const val TABS_SEARCH_ENGINE_ID = "tabs_search_engine_id" * @param scope [CoroutineScope] used to launch coroutines. */ class ApplicationSearchMiddleware( - private val context: Context, + context: Context, private val stringProvider: (Int) -> String = { context.getString(it) }, private val bitmapProvider: (Int) -> Bitmap = { getDrawable(context, it)?.toBitmap()!! }, private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO), @@ -55,7 +54,7 @@ class ApplicationSearchMiddleware( private fun loadSearchEngines( store: Store<BrowserState, BrowserAction>, ) = scope.launch { - val searchEngines = listOfNotNull( + val searchEngines = listOf( createApplicationSearchEngine( id = BOOKMARKS_SEARCH_ENGINE_ID, name = stringProvider(R.string.library_bookmarks), @@ -68,12 +67,6 @@ class ApplicationSearchMiddleware( url = "", icon = bitmapProvider(iconsR.drawable.mozac_ic_tab_tray_24), ), - createApplicationSearchEngine( - id = HISTORY_SEARCH_ENGINE_ID, - name = stringProvider(R.string.library_history), - url = "", - icon = bitmapProvider(iconsR.drawable.mozac_ic_history_24), - ).takeIf { !context.components.settings.shouldDisableNormalMode }, ) store.dispatch(SearchAction.ApplicationSearchEnginesLoaded(searchEngines)) ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HttpsOnlyFragment.kt ===================================== @@ -62,7 +62,7 @@ class HttpsOnlyFragment : Fragment(), SystemInsetsPaddedFragment { updateEngineHttpsOnlyMode() } - binding.httpsOnlyModes.isGone = requireContext().components.settings.shouldDisableNormalMode + binding.httpsOnlyModes.isGone = true return binding.root } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt ===================================== @@ -331,15 +331,7 @@ class SettingsFragment : PreferenceFragmentCompat(), SystemInsetsPaddedFragment, getString(R.string.delete_browsing_data_quit_off) } // Hide "Delete browsing data on quit" when in Private Browsing-only mode - deleteBrowsingDataPreference.isVisible = - !deleteBrowsingDataPreference.context.components.settings.shouldDisableNormalMode - - - if (!settings.shouldDisableNormalMode) { - val tabSettingsPreference = - requirePreference<Preference>(R.string.pref_key_tabs) - tabSettingsPreference.summary = context?.components?.settings?.getTabTimeoutString() - } + deleteBrowsingDataPreference.isVisible = false // val autofillPreference = requirePreference<Preference>(R.string.pref_key_credit_cards) // autofillPreference.title = if (settings.addressFeature) { ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt ===================================== @@ -49,11 +49,11 @@ class TabsSettingsFragment : PreferenceFragmentCompat(), SystemInsetsPaddedFragm setPreferencesFromResource(R.xml.tabs_preferences, rootKey) findPreference<RadioButtonPreference>(getString(R.string.pref_key_close_tabs_manually))?.parent?.apply { - isVisible = !context.components.settings.shouldDisableNormalMode + isVisible = false } findPreference<PreferenceCategory>(getString(R.string.pref_key_inactive_tabs_category))?.apply { - isVisible = !context.components.settings.shouldDisableNormalMode + isVisible = false } startForResult = registerForActivityResult( ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineFragment.kt ===================================== @@ -49,7 +49,7 @@ class SearchEngineFragment : PreferenceFragmentCompat(), SystemInsetsPaddedFragm } findPreference<CheckBoxPreference>(getString(R.string.pref_key_show_search_suggestions_in_private))?.apply { - isVisible = !context.components.settings.shouldDisableNormalMode + isVisible = false } view?.hideKeyboard() ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -881,14 +881,9 @@ class Settings( default = 1f, ) - val shouldDisableNormalMode by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_disable_normal_mode), - true - ) - val shouldShowHistorySuggestions by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_search_browsing_history), - default = !shouldDisableNormalMode, + default = false, ) val shouldShowBookmarkSuggestions by booleanPreference( @@ -1463,7 +1458,7 @@ class Settings( get() { val lastKnownModeWasPrivate = preferences.getBoolean( appContext.getPreferenceKey(R.string.pref_key_last_known_mode_private), - shouldDisableNormalMode, + true, ) return if (lastKnownModeWasPrivate) { @@ -1705,7 +1700,7 @@ class Settings( var shouldShowSearchSuggestionsInPrivate by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_show_search_suggestions_in_private), - default = shouldDisableNormalMode, + default = true, ) /** ===================================== mobile/android/fenix/app/src/main/res/values/preference_keys.xml ===================================== @@ -48,7 +48,6 @@ <string name="pref_key_delete_permissions_now" translatable="false">pref_key_delete_permissions_now</string> <string name="pref_key_delete_downloads_now" translatable="false">pref_key_delete_downloads_now</string> <string name="pref_key_delete_browsing_data_on_quit_categories" translatable="false">pref_key_delete_browsing_data_on_quit_categories</string> - <string name="pref_key_disable_normal_mode" translatable="false">pref_key_disable_normal_mode</string> <string name="pref_key_last_known_mode_private" translatable="false">pref_key_last_known_mode_private</string> <string name="pref_key_addons" translatable="false">pref_key_addons</string> <string name="pref_key_install_local_addon" translatable="false">pref_key_install_local_addon</string> ===================================== mobile/android/fenix/app/src/test/java/org/mozilla/fenix/utils/SettingsTest.kt ===================================== @@ -66,13 +66,13 @@ class SettingsTest { fun launchLinksInPrivateTab() { // When just created // Then - assertTrue(settings.openLinksInAPrivateTab) + assertFalse(settings.openLinksInAPrivateTab) // When - settings.openLinksInAPrivateTab = false + settings.openLinksInAPrivateTab = true // Then - assertFalse(settings.openLinksInAPrivateTab) + assertTrue(settings.openLinksInAPrivateTab) } @Test View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/03e9a8… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/03e9a8… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] Bug 2059471: Do not spoof screen orientation when it is locked. r=tjr
by morgan (@morgan) 24 Aug '26

24 Aug '26
morgan pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 03e9a8f0 by Pier Angelo Vendrame at 2026-08-24T13:43:42+00:00 Bug 2059471: Do not spoof screen orientation when it is locked. r=tjr Differential Revision: https://phabricator.services.mozilla.com/D315317 - - - - - 1 changed file: - dom/base/ScreenOrientation.cpp Changes: ===================================== dom/base/ScreenOrientation.cpp ===================================== @@ -709,8 +709,11 @@ OrientationType ScreenOrientation::DeviceType(CallerType aCallerType) const { if (!bc) { return nsRFPService::GetDefaultOrientationType(); } - CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); - return nsRFPService::ViewportSizeToOrientationType(size.width, size.height); + if (bc->GetOrientationLock() == hal::ScreenOrientation::None) { + CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); + return nsRFPService::ViewportSizeToOrientationType(size.width, + size.height); + } } return mType; } @@ -723,8 +726,10 @@ uint16_t ScreenOrientation::DeviceAngle(CallerType aCallerType) const { if (!bc) { return 0; } - CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); - return nsRFPService::ViewportSizeToAngle(size.width, size.height); + if (bc->GetOrientationLock() == hal::ScreenOrientation::None) { + CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); + return nsRFPService::ViewportSizeToAngle(size.width, size.height); + } } return mAngle; } @@ -740,7 +745,8 @@ OrientationType ScreenOrientation::GetType(CallerType aCallerType, OrientationType orientation = bc->GetCurrentOrientationType(); if (nsContentUtils::ShouldResistFingerprinting( - aCallerType, GetRelevantGlobal(), RFPTarget::ScreenOrientation)) { + aCallerType, GetRelevantGlobal(), RFPTarget::ScreenOrientation) && + bc->GetOrientationLock() == hal::ScreenOrientation::None) { CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); return nsRFPService::ViewportSizeToOrientationType(size.width, size.height); } @@ -758,7 +764,8 @@ uint16_t ScreenOrientation::GetAngle(CallerType aCallerType, uint16_t angle = static_cast<uint16_t>(bc->GetCurrentOrientationAngle()); if (nsContentUtils::ShouldResistFingerprinting( - aCallerType, GetRelevantGlobal(), RFPTarget::ScreenOrientation)) { + aCallerType, GetRelevantGlobal(), RFPTarget::ScreenOrientation) && + bc->GetOrientationLock() == hal::ScreenOrientation::None) { CSSIntSize size = bc->TopInnerSizeSpoofedForRFP(); return nsRFPService::ViewportSizeToAngle(size.width, size.height); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/03e9a8f… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/03e9a8f… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.1.0esr-16.0-1] Bug 2063031 - Spoof video PiP size under RFP. r=media-playback-reviewers,kpatenio,alwu,tjr
by morgan (@morgan) 24 Aug '26

24 Aug '26
morgan pushed to branch mullvad-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 3c57281c by Pier Angelo Vendrame at 2026-08-24T13:41:46+00:00 Bug 2063031 - Spoof video PiP size under RFP. r=media-playback-reviewers,kpatenio,alwu,tjr Differential Revision: https://phabricator.services.mozilla.com/D318184 - - - - - 6 changed files: - dom/media/PictureInPictureWindow.cpp - dom/media/PictureInPictureWindow.h - dom/media/mediaelement/HTMLVideoElement.cpp - dom/media/mediaelement/HTMLVideoElement.h - toolkit/components/pictureinpicture/tests/browser.toml - + toolkit/components/pictureinpicture/tests/browser_resistFingerprinting.js Changes: ===================================== dom/media/PictureInPictureWindow.cpp ===================================== @@ -47,6 +47,11 @@ int32_t PictureInPictureWindow::Width() const { if (!IsStateOpened()) { return 0; } + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + return VideoSizeForRFP().width; + } return mWidth; } @@ -57,14 +62,54 @@ int32_t PictureInPictureWindow::Height() const { if (!IsStateOpened()) { return 0; } + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + return VideoSizeForRFP().height; + } return mHeight; } +gfx::IntSize PictureInPictureWindow::VideoSizeForRFP() const { + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (!videoElement) { + return {0, 0}; + } + + // From PictureInPicture.sys.mjs: "The Picture in Picture window will be a + // maximum of a quarter of the screen height, and a third of the screen + // width.". + // Pretend we are maximizing the video in a 1920x1080 display. + const uint32_t maxWidth = 1920 / 3; + const uint32_t maxHeight = 1080 / 4; + uint32_t width = videoElement->VideoWidth(); + uint32_t height = videoElement->VideoHeight(); + if ((height > maxHeight || width > maxWidth) && height > 0) { + double aspectRatio = static_cast<double>(width) / height; + if (width >= height) { + width = maxWidth; + height = static_cast<uint32_t>(round(maxWidth / aspectRatio)); + } else { + height = maxHeight; + width = static_cast<uint32_t>(round(maxHeight * aspectRatio)); + } + } + return {width, height}; +} + void PictureInPictureWindow::NotifyDimensionsChanged(int32_t aWidth, int32_t aHeight) { mWidth = aWidth; mHeight = aHeight; + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + // With RFP, we spoof the window size to a fixed size that depends on the + // video, therefore it does not make sense to trigger a resize event. + return; + } + // When the size of a Picture-in-Picture window pipWindow changes, // the user agent MUST queue a task to fire an event named resize at // pipWindow. ===================================== dom/media/PictureInPictureWindow.h ===================================== @@ -47,6 +47,8 @@ class PictureInPictureWindow final : public DOMEventTargetHelper { private: bool IsStateOpened() const { return mOpened; } + gfx::IntSize VideoSizeForRFP() const; + WeakPtr<HTMLVideoElement> mAssociatedVideoElement; int32_t mWidth = 0; int32_t mHeight = 0; ===================================== dom/media/mediaelement/HTMLVideoElement.cpp ===================================== @@ -315,7 +315,7 @@ bool HTMLVideoElement::IsInteractiveHTMLContent() const { HTMLMediaElement::IsInteractiveHTMLContent(); } -gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() { +gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() const { const auto& sz = mMediaInfo.mVideo.mDisplay; // Prefer the size of the container as it's more up to date. @@ -324,7 +324,7 @@ gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() { .valueOr(sz); } -uint32_t HTMLVideoElement::VideoWidth() { +uint32_t HTMLVideoElement::VideoWidth() const { if (!HasVideo()) { return 0; } @@ -336,7 +336,7 @@ uint32_t HTMLVideoElement::VideoWidth() { return size.width; } -uint32_t HTMLVideoElement::VideoHeight() { +uint32_t HTMLVideoElement::VideoHeight() const { if (!HasVideo()) { return 0; } ===================================== dom/media/mediaelement/HTMLVideoElement.h ===================================== @@ -96,9 +96,9 @@ class HTMLVideoElement final : public HTMLMediaElement { SetUnsignedIntAttr(nsGkAtoms::height, aValue, 0, aRv); } - uint32_t VideoWidth(); + uint32_t VideoWidth() const; - uint32_t VideoHeight(); + uint32_t VideoHeight() const; VideoRotation RotationDegrees() const { return mMediaInfo.mVideo.mRotation; } @@ -179,7 +179,7 @@ class HTMLVideoElement final : public HTMLMediaElement { void CreateVideoWakeLockIfNeeded(); void ReleaseVideoWakeLockIfExists(); - gfx::IntSize GetVideoIntrinsicDimensions(); + gfx::IntSize GetVideoIntrinsicDimensions() const; RefPtr<WakeLock> mScreenWakeLock; ===================================== toolkit/components/pictureinpicture/tests/browser.toml ===================================== @@ -158,6 +158,8 @@ support-files = ["test-page-with-nan-video-duration.html"] ["browser_removeVideoElement.js"] +["browser_resistFingerprinting.js"] + ["browser_resizeVideo.js"] skip-if = [ "os == 'linux' && os_version == '24.04' && arch == 'x86_64' && display == 'x11'", # Bug 1594223 ===================================== toolkit/components/pictureinpicture/tests/browser_resistFingerprinting.js ===================================== @@ -0,0 +1,154 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +async function testResizePip(isRFP, src) { + clearSavedPosition(); + + await BrowserTestUtils.withNewTab( + { + url: TEST_PAGE, + gBrowser, + }, + async browser => { + let videoID = "with-controls"; + + let [width, height, pipWidth, pipHeight] = await SpecialPowers.spawn( + browser, + [videoID, src], + async (videoID, src) => { + content.window.resizeEverCalled = false; + let video = content.wrappedJSObject.document.getElementById(videoID); + if (src) { + let { promise, resolve } = Promise.withResolvers(); + video.addEventListener("canplay", resolve); + video.src = src; + await promise; + } + content.document.notifyUserGestureActivation(); + let pip = await video.requestPictureInPicture(); + pip.addEventListener( + "resize", + () => (content.window.resizeEverCalled = true) + ); + return [video.width, video.height, pip.width, pip.height]; + } + ); + info( + `Video size is ${width}x${height}. PiP size is ${pipWidth}x${pipHeight}` + ); + + const { PictureInPicture } = ChromeUtils.importESModule( + "moz-src:///toolkit/components/pictureinpicture/PictureInPicture.sys.mjs" + ); + let pipWindow = PictureInPicture.apiPipWindow?.get(); + Assert.ok(pipWindow, "We found the chrome PiP window."); + + let pipBrowser = pipWindow.document.getElementById("browser"); + await SpecialPowers.spawn(pipBrowser, [], async () => { + let { + promise: setupPromise, + resolve: setupResolve, + reject: setupReject, + } = Promise.withResolvers(); + content.resizePromise = new Promise(resizeResolve => { + let firstObserved = false; + // Scope the observer to the content because we need to block on the + // setup before resizing, therefore we need two separate promises and + // the observer needs to outlive this spawn call. + content.observer = new content.ResizeObserver(() => { + // Attaching the element will trigger a first call to this callback. + // Therefore, we need to ignore it. + if (firstObserved) { + resizeResolve(); + } else { + firstObserved = true; + setupResolve(); + } + }); + let video = content.document.querySelector("video"); + if (video) { + content.observer.observe(video); + } else { + setupReject(new Error("Video not found in the PiP window.")); + } + }); + await setupPromise; + }); + + pipWindow.resizeTo(pipWidth * 2, pipHeight * 2); + await SpecialPowers.spawn(pipBrowser, [], async () => { + await content.resizePromise; + content.observer.disconnect(); + await new Promise(resolve => content.requestAnimationFrame(resolve)); + }); + + let [pipWidthAfter, pipHeightAfter] = await SpecialPowers.spawn( + browser, + [videoID], + async videoID => { + let video = content.wrappedJSObject.document.getElementById(videoID); + // We already have the window, no need to simulate another user + // interaction. + let pip = await video.requestPictureInPicture(); + return [pip.width, pip.height]; + } + ); + info( + `PiP size after resizing ${isRFP ? "with" : "without"} RFP ` + + `is ${pipWidthAfter}x${pipHeightAfter}` + ); + + if (isRFP) { + Assert.equal(pipWidth, pipWidthAfter, "RFP spoofed PiP width."); + Assert.equal(pipHeight, pipHeightAfter, "RFP spoofed PiP height."); + } else { + Assert.notEqual( + pipWidth, + pipWidthAfter, + "After resizing the PiP window, PiP width was updated." + ); + Assert.notEqual( + pipHeight, + pipHeightAfter, + "After resizing the PiP window, PiP height was updated." + ); + } + + let everResized = await SpecialPowers.spawn(browser, [], async () => { + await content.document.exitPictureInPicture(); + return content.window.resizeEverCalled; + }); + Assert.equal( + everResized, + !isRFP, + `We expected the resize handler ${isRFP ? "not " : ""}to be ever called.` + ); + } + ); +} + +add_task(async function test_video_pip_size() { + await testResizePip(false, "test-video.mp4"); +}); + +add_task(async function test_video_pip_size_vertical() { + await testResizePip(false, "test-video-vertical.mp4"); +}); + +add_task(async function test_video_pip_size_rfp() { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.resistFingerprinting", true]], + }); + await testResizePip(true, "test-video.mp4"); + await SpecialPowers.popPrefEnv(); +}); + +add_task(async function test_video_pip_size_rfp_vertical() { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.resistFingerprinting", true]], + }); + await testResizePip(true, "test-video-vertical.mp4"); + await SpecialPowers.popPrefEnv(); +}); View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/3c5… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/3c5… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] Bug 2063031 - Spoof video PiP size under RFP. r=media-playback-reviewers,kpatenio,alwu,tjr
by morgan (@morgan) 24 Aug '26

24 Aug '26
morgan pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: 3c9945e2 by Pier Angelo Vendrame at 2026-08-24T13:35:37+00:00 Bug 2063031 - Spoof video PiP size under RFP. r=media-playback-reviewers,kpatenio,alwu,tjr Differential Revision: https://phabricator.services.mozilla.com/D318184 - - - - - 6 changed files: - dom/media/PictureInPictureWindow.cpp - dom/media/PictureInPictureWindow.h - dom/media/mediaelement/HTMLVideoElement.cpp - dom/media/mediaelement/HTMLVideoElement.h - toolkit/components/pictureinpicture/tests/browser.toml - + toolkit/components/pictureinpicture/tests/browser_resistFingerprinting.js Changes: ===================================== dom/media/PictureInPictureWindow.cpp ===================================== @@ -47,6 +47,11 @@ int32_t PictureInPictureWindow::Width() const { if (!IsStateOpened()) { return 0; } + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + return VideoSizeForRFP().width; + } return mWidth; } @@ -57,14 +62,54 @@ int32_t PictureInPictureWindow::Height() const { if (!IsStateOpened()) { return 0; } + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + return VideoSizeForRFP().height; + } return mHeight; } +gfx::IntSize PictureInPictureWindow::VideoSizeForRFP() const { + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (!videoElement) { + return {0, 0}; + } + + // From PictureInPicture.sys.mjs: "The Picture in Picture window will be a + // maximum of a quarter of the screen height, and a third of the screen + // width.". + // Pretend we are maximizing the video in a 1920x1080 display. + const uint32_t maxWidth = 1920 / 3; + const uint32_t maxHeight = 1080 / 4; + uint32_t width = videoElement->VideoWidth(); + uint32_t height = videoElement->VideoHeight(); + if ((height > maxHeight || width > maxWidth) && height > 0) { + double aspectRatio = static_cast<double>(width) / height; + if (width >= height) { + width = maxWidth; + height = static_cast<uint32_t>(round(maxWidth / aspectRatio)); + } else { + height = maxHeight; + width = static_cast<uint32_t>(round(maxHeight * aspectRatio)); + } + } + return {width, height}; +} + void PictureInPictureWindow::NotifyDimensionsChanged(int32_t aWidth, int32_t aHeight) { mWidth = aWidth; mHeight = aHeight; + RefPtr<HTMLVideoElement> videoElement = mAssociatedVideoElement.get(); + if (videoElement && videoElement->OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::ScreenRect)) { + // With RFP, we spoof the window size to a fixed size that depends on the + // video, therefore it does not make sense to trigger a resize event. + return; + } + // When the size of a Picture-in-Picture window pipWindow changes, // the user agent MUST queue a task to fire an event named resize at // pipWindow. ===================================== dom/media/PictureInPictureWindow.h ===================================== @@ -47,6 +47,8 @@ class PictureInPictureWindow final : public DOMEventTargetHelper { private: bool IsStateOpened() const { return mOpened; } + gfx::IntSize VideoSizeForRFP() const; + WeakPtr<HTMLVideoElement> mAssociatedVideoElement; int32_t mWidth = 0; int32_t mHeight = 0; ===================================== dom/media/mediaelement/HTMLVideoElement.cpp ===================================== @@ -315,7 +315,7 @@ bool HTMLVideoElement::IsInteractiveHTMLContent() const { HTMLMediaElement::IsInteractiveHTMLContent(); } -gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() { +gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() const { const auto& sz = mMediaInfo.mVideo.mDisplay; // Prefer the size of the container as it's more up to date. @@ -324,7 +324,7 @@ gfx::IntSize HTMLVideoElement::GetVideoIntrinsicDimensions() { .valueOr(sz); } -uint32_t HTMLVideoElement::VideoWidth() { +uint32_t HTMLVideoElement::VideoWidth() const { if (!HasVideo()) { return 0; } @@ -336,7 +336,7 @@ uint32_t HTMLVideoElement::VideoWidth() { return size.width; } -uint32_t HTMLVideoElement::VideoHeight() { +uint32_t HTMLVideoElement::VideoHeight() const { if (!HasVideo()) { return 0; } ===================================== dom/media/mediaelement/HTMLVideoElement.h ===================================== @@ -96,9 +96,9 @@ class HTMLVideoElement final : public HTMLMediaElement { SetUnsignedIntAttr(nsGkAtoms::height, aValue, 0, aRv); } - uint32_t VideoWidth(); + uint32_t VideoWidth() const; - uint32_t VideoHeight(); + uint32_t VideoHeight() const; VideoRotation RotationDegrees() const { return mMediaInfo.mVideo.mRotation; } @@ -179,7 +179,7 @@ class HTMLVideoElement final : public HTMLMediaElement { void CreateVideoWakeLockIfNeeded(); void ReleaseVideoWakeLockIfExists(); - gfx::IntSize GetVideoIntrinsicDimensions(); + gfx::IntSize GetVideoIntrinsicDimensions() const; RefPtr<WakeLock> mScreenWakeLock; ===================================== toolkit/components/pictureinpicture/tests/browser.toml ===================================== @@ -158,6 +158,8 @@ support-files = ["test-page-with-nan-video-duration.html"] ["browser_removeVideoElement.js"] +["browser_resistFingerprinting.js"] + ["browser_resizeVideo.js"] skip-if = [ "os == 'linux' && os_version == '24.04' && arch == 'x86_64' && display == 'x11'", # Bug 1594223 ===================================== toolkit/components/pictureinpicture/tests/browser_resistFingerprinting.js ===================================== @@ -0,0 +1,154 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +async function testResizePip(isRFP, src) { + clearSavedPosition(); + + await BrowserTestUtils.withNewTab( + { + url: TEST_PAGE, + gBrowser, + }, + async browser => { + let videoID = "with-controls"; + + let [width, height, pipWidth, pipHeight] = await SpecialPowers.spawn( + browser, + [videoID, src], + async (videoID, src) => { + content.window.resizeEverCalled = false; + let video = content.wrappedJSObject.document.getElementById(videoID); + if (src) { + let { promise, resolve } = Promise.withResolvers(); + video.addEventListener("canplay", resolve); + video.src = src; + await promise; + } + content.document.notifyUserGestureActivation(); + let pip = await video.requestPictureInPicture(); + pip.addEventListener( + "resize", + () => (content.window.resizeEverCalled = true) + ); + return [video.width, video.height, pip.width, pip.height]; + } + ); + info( + `Video size is ${width}x${height}. PiP size is ${pipWidth}x${pipHeight}` + ); + + const { PictureInPicture } = ChromeUtils.importESModule( + "moz-src:///toolkit/components/pictureinpicture/PictureInPicture.sys.mjs" + ); + let pipWindow = PictureInPicture.apiPipWindow?.get(); + Assert.ok(pipWindow, "We found the chrome PiP window."); + + let pipBrowser = pipWindow.document.getElementById("browser"); + await SpecialPowers.spawn(pipBrowser, [], async () => { + let { + promise: setupPromise, + resolve: setupResolve, + reject: setupReject, + } = Promise.withResolvers(); + content.resizePromise = new Promise(resizeResolve => { + let firstObserved = false; + // Scope the observer to the content because we need to block on the + // setup before resizing, therefore we need two separate promises and + // the observer needs to outlive this spawn call. + content.observer = new content.ResizeObserver(() => { + // Attaching the element will trigger a first call to this callback. + // Therefore, we need to ignore it. + if (firstObserved) { + resizeResolve(); + } else { + firstObserved = true; + setupResolve(); + } + }); + let video = content.document.querySelector("video"); + if (video) { + content.observer.observe(video); + } else { + setupReject(new Error("Video not found in the PiP window.")); + } + }); + await setupPromise; + }); + + pipWindow.resizeTo(pipWidth * 2, pipHeight * 2); + await SpecialPowers.spawn(pipBrowser, [], async () => { + await content.resizePromise; + content.observer.disconnect(); + await new Promise(resolve => content.requestAnimationFrame(resolve)); + }); + + let [pipWidthAfter, pipHeightAfter] = await SpecialPowers.spawn( + browser, + [videoID], + async videoID => { + let video = content.wrappedJSObject.document.getElementById(videoID); + // We already have the window, no need to simulate another user + // interaction. + let pip = await video.requestPictureInPicture(); + return [pip.width, pip.height]; + } + ); + info( + `PiP size after resizing ${isRFP ? "with" : "without"} RFP ` + + `is ${pipWidthAfter}x${pipHeightAfter}` + ); + + if (isRFP) { + Assert.equal(pipWidth, pipWidthAfter, "RFP spoofed PiP width."); + Assert.equal(pipHeight, pipHeightAfter, "RFP spoofed PiP height."); + } else { + Assert.notEqual( + pipWidth, + pipWidthAfter, + "After resizing the PiP window, PiP width was updated." + ); + Assert.notEqual( + pipHeight, + pipHeightAfter, + "After resizing the PiP window, PiP height was updated." + ); + } + + let everResized = await SpecialPowers.spawn(browser, [], async () => { + await content.document.exitPictureInPicture(); + return content.window.resizeEverCalled; + }); + Assert.equal( + everResized, + !isRFP, + `We expected the resize handler ${isRFP ? "not " : ""}to be ever called.` + ); + } + ); +} + +add_task(async function test_video_pip_size() { + await testResizePip(false, "test-video.mp4"); +}); + +add_task(async function test_video_pip_size_vertical() { + await testResizePip(false, "test-video-vertical.mp4"); +}); + +add_task(async function test_video_pip_size_rfp() { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.resistFingerprinting", true]], + }); + await testResizePip(true, "test-video.mp4"); + await SpecialPowers.popPrefEnv(); +}); + +add_task(async function test_video_pip_size_rfp_vertical() { + await SpecialPowers.pushPrefEnv({ + set: [["privacy.resistFingerprinting", true]], + }); + await testResizePip(true, "test-video-vertical.mp4"); + await SpecialPowers.popPrefEnv(); +}); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/3c9945e… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/3c9945e… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-153.1.0esr-16.0-1] fixup! Firefox preference overrides.
by morgan (@morgan) 24 Aug '26

24 Aug '26
morgan pushed to branch mullvad-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 6fe0b290 by Henry Wilkes at 2026-08-24T13:31:33+00:00 fixup! Firefox preference overrides. BB 45208: Enable the settings redesign. - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -246,10 +246,6 @@ pref("browser.safebrowsing.provider.mozilla.gethashURL", ""); // https://bugzilla.mozilla.org/show_bug.cgi?id=1915280 pref("browser.uitour.enabled", false); -// tor-browser#45110: Disable unified settings until we have migrated all our -// settings and have applied our desired changes to upstream new designs. -pref("browser.settings-redesign.enabled", false); - // Make sure Unified Telemetry is really disabled, see: #18738. pref("toolkit.telemetry.unified", false); // This needs to be locked, or nightly builds will automatically lock it to true View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/6fe… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/6fe… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-153.1.0esr-16.0-1] fixup! Firefox preference overrides.
by morgan (@morgan) 24 Aug '26

24 Aug '26
morgan pushed to branch tor-browser-153.1.0esr-16.0-1 at The Tor Project / Applications / Tor Browser Commits: f0d9b219 by Henry Wilkes at 2026-08-24T13:27:33+00:00 fixup! Firefox preference overrides. BB 45208: Enable the settings redesign. - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -249,10 +249,6 @@ pref("browser.safebrowsing.provider.mozilla.gethashURL", ""); // https://bugzilla.mozilla.org/show_bug.cgi?id=1915280 pref("browser.uitour.enabled", false); -// tor-browser#45110: Disable unified settings until we have migrated all our -// settings and have applied our desired changes to upstream new designs. -pref("browser.settings-redesign.enabled", false); - // Make sure Unified Telemetry is really disabled, see: #18738. pref("toolkit.telemetry.unified", false); // This needs to be locked, or nightly builds will automatically lock it to true View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/f0d9b21… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/f0d9b21… You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
1 0
0 0
  • ← Newer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ...
  • 839
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.