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
  • ----- 2025 -----
  • 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

August 2025

  • 1 participants
  • 197 discussions
[Git][tpo/applications/tor-browser-build][main] Bug 41517: Add morgan's key to the setup account on the signing machines
by morgan (@morgan) 05 Aug '25

05 Aug '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: ca3c9880 by Nicolas Vigier at 2025-08-05T14:52:22+00:00 Bug 41517: Add morgan's key to the setup account on the signing machines - - - - - 1 changed file: - tools/signing/machines-setup/setup-signing-machine Changes: ===================================== tools/signing/machines-setup/setup-signing-machine ===================================== @@ -70,6 +70,7 @@ install_packages sudo vim tmux gnupg create_user setup authorized_keys setup boklm-yk1.pub +authorized_keys setup morgan.pub mkdir -p /signing chmod 0755 /signing chown setup /signing View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/c… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/c… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] Bug 1979608. r=hsivonen
by Pier Angelo Vendrame (@pierov) 05 Aug '25

05 Aug '25
Pier Angelo Vendrame pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 17f8c468 by Pier Angelo Vendrame at 2025-08-05T16:48:25+02:00 Bug 1979608. r=hsivonen Differential Revision: https://phabricator.services.mozilla.com/D258859 - - - - - 1 changed file: - dom/xslt/xslt/txNodeSorter.cpp Changes: ===================================== dom/xslt/xslt/txNodeSorter.cpp ===================================== @@ -77,9 +77,10 @@ nsresult txNodeSorter::addSortElement(Expr* aSelectExpr, Expr* aLangExpr, if (aLangExpr) { rv = aLangExpr->evaluateToString(aContext, lang); NS_ENSURE_SUCCESS(rv, rv); - } else if (aContext->getContextNode() - .OwnerDoc() - ->ShouldResistFingerprinting(RFPTarget::JSLocale)) { + } + if (lang.IsEmpty() && + aContext->getContextNode().OwnerDoc()->ShouldResistFingerprinting( + RFPTarget::JSLocale)) { CopyUTF8toUTF16(nsRFPService::GetSpoofedJSLocale(), lang); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/17f8c46… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/17f8c46… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-128.13.0esr-14.5-1] 2 commits: fixup! [android] Implement Android-native Connection Assist UI
by morgan (@morgan) 05 Aug '25

05 Aug '25
morgan pushed to branch tor-browser-128.13.0esr-14.5-1 at The Tor Project / Applications / Tor Browser Commits: a7a52bcf by clairehurst at 2025-08-05T14:47:25+00:00 fixup! [android] Implement Android-native Connection Assist UI Bug 43645: Swiping away doesn't always disconnect from tor - - - - - 295c151d by Dan Ballard at 2025-08-05T14:47:31+00:00 fixup! TB 40023: [android] Stop PrivateNotificationService Bug 43346: revert patch, not needed anymore - - - - - 2 changed files: - mobile/android/android-components/components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt Changes: ===================================== mobile/android/android-components/components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt ===================================== @@ -44,7 +44,6 @@ class PrivateNotificationFeature<T : AbstractPrivateNotificationService>( } override fun stop() { - applicationContext.stopService(Intent(applicationContext, notificationServiceClass.java)) scope?.cancel() } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -635,6 +635,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn override fun onDestroy() { super.onDestroy() + if (isFinishing) { + exitProcess(0) + } + // Diagnostic breadcrumb for "Display already aquired" crash: // https://github.com/mozilla-mobile/android-components/issues/7960 breadcrumb( View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/1dab3d… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/1dab3d… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] fixup! TB 42669: [android] Use custom no-op app-services
by brizental (@brizental) 05 Aug '25

05 Aug '25
brizental pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 8e3b160d by Beatriz Rizental at 2025-08-05T16:11:19+02:00 fixup! TB 42669: [android] Use custom no-op app-services - - - - - 1 changed file: - mobile/android/autopublish-settings.gradle Changes: ===================================== mobile/android/autopublish-settings.gradle ===================================== @@ -30,6 +30,7 @@ def rootLocalProperties = new File(gradle.mozconfig.topsrcdir, "local.properties [ "autoPublish.application-services.dir", "autoPublish.glean.dir", + "uniffiBindgenNoop.dir", ].each { key -> def relativeOrAbsolutePath = rootLocalProperties."$key" if (relativeOrAbsolutePath != null) { @@ -40,6 +41,10 @@ def rootLocalProperties = new File(gradle.mozconfig.topsrcdir, "local.properties gradle.settingsEvaluated { if (gradle.hasProperty("localProperties.autoPublish.application-services.dir")) { + if (!gradle.hasProperty("localProperties.uniffiBindgenNoop.dir")) { + throw new GradleException("Set uniffiBindgenNoop.dir to your local.properties in order to auto publish application-services.") + } + def appServicesLocalPath = gradle."localProperties.autoPublish.application-services.dir" logger.lifecycle("settings.gradle> Enabling automatic publication of application-services from: $appServicesLocalPath") // Windows can't execute .py files directly, so we assume a "manually installed" python, @@ -48,13 +53,17 @@ gradle.settingsEvaluated { if (System.properties["os.name"].toLowerCase().contains("windows")) { publishAppServicesCmd << "py"; } - publishAppServicesCmd << "./automation/publish_to_maven_local_if_modified.py"; + publishAppServicesCmd << "./automation/publish_to_maven_local_if_modified.py" << gradle."localProperties.uniffiBindgenNoop.dir"; runCmd(publishAppServicesCmd, appServicesLocalPath, "Published application-services for local development.", false) } else { logger.lifecycle("settings.gradle> Disabled auto-publication of application-services. Enable it by settings 'autoPublish.application-services.dir' in local.properties") } if (gradle.hasProperty("localProperties.autoPublish.glean.dir")) { + if (!gradle.hasProperty("localProperties.uniffiBindgenNoop.dir")) { + throw new GradleException("Set uniffiBindgenNoop.dir to your local.properties in order to auto publish glean.") + } + def gleanLocalPath = gradle."localProperties.autoPublish.glean.dir" logger.lifecycle("settings.gradle> Enabling automatic publication of Glean from: $gleanLocalPath") // As above, hacks to execute .py files on Windows. @@ -62,7 +71,10 @@ gradle.settingsEvaluated { if (System.properties["os.name"].toLowerCase().contains("windows")) { publishGleanCmd << "py"; } - publishGleanCmd << "./build-scripts/publish_to_maven_local_if_modified.py"; + + // We do not have a fork of Glean. In order for this to work, on your local + // copy of the Glean repo, modify this python script to accept and use the uniffi-bindgen path. + publishGleanCmd << "./build-scripts/publish_to_maven_local_if_modified.py" << gradle."localProperties.uniffiBindgenNoop.dir"; runCmd(publishGleanCmd, gleanLocalPath, "Published Glean for local development.", false) } else { logger.lifecycle("settings.gradle> Disabled auto-publication of Glean. Enable it by settings 'autoPublish.glean.dir' in local.properties") View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8e3b160… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/8e3b160… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] fixup! TB 42669: [android] Use custom no-op app-services
by Dan Ballard (@dan) 05 Aug '25

05 Aug '25
Dan Ballard pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: e5e8a990 by Dan Ballard at 2025-08-05T08:53:12-05:00 fixup! TB 42669: [android] Use custom no-op app-services Add fix for edge case where there are dup nightly builds - - - - - 1 changed file: - mobile/android/fenix/tools/tba-fetch-deps.sh Changes: ===================================== mobile/android/fenix/tools/tba-fetch-deps.sh ===================================== @@ -28,7 +28,7 @@ if [[ $1 == "--tbb" ]]; then tor_expert_bundle_aar="$(ls -1td "$TOR_BROWSER_BUILD/out/tor-expert-bundle-aar/"tor-expert-bundle-aar-* | head -1)" cp "$tor_expert_bundle_aar"/* app/ else - tor_expert_bundle_aar_dirname="$(curl -s $TBB_BUILD_06/tor-expert-bundle-aar/ | sed -nE 's/.*href=\"(tor-expert-bundle-aar-[0-9a-z\.\-]*).*/\1/p')" + tor_expert_bundle_aar_dirname="$(curl -s $TBB_BUILD_06/tor-expert-bundle-aar/ | sed -nE 's/.*href=\"(tor-expert-bundle-aar-[0-9a-z\.\-]*).*/\1/p' | head -n 1)" curl -o app/tor-expert-bundle.aar $TBB_BUILD_06/tor-expert-bundle-aar/$tor_expert_bundle_aar_dirname/tor-expert-bundle.aar fi View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e5e8a99… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/e5e8a99… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-141.0a1-16.0-2] 27 commits: MB 38: Mullvad Browser configuration
by brizental (@brizental) 05 Aug '25

05 Aug '25
brizental pushed to branch mullvad-browser-141.0a1-16.0-2 at The Tor Project / Applications / Mullvad Browser Commits: fd94ddea by Pier Angelo Vendrame at 2025-08-04T16:43:10+02:00 MB 38: Mullvad Browser configuration - - - - - 8802c599 by Pier Angelo Vendrame at 2025-08-04T16:43:10+02:00 MB 1: Mullvad Browser branding See also: mullvad-browser#5: Product name and directory customization mullvad-browser#12: Create new branding directories and integrate Mullvad icons+branding mullvad-browser#14: Remove Default Built-in bookmarks mullvad-browser#35: Add custom PDF icons for Windows builds mullvad-browser#48: Replace Mozilla copyright and legal trademarks in mullvadbrowser.exe metadata mullvad-browser#51: Update trademark string mullvad-browser#104: Update shipped dll metadata copyright/licensing info mullvad-browser#107: Add alpha and nightly icons - - - - - bb84e675 by Beatriz Rizental at 2025-08-05T15:16:29+02:00 fixup! MB 1: Mullvad Browser branding - - - - - c287063a by Henry Wilkes at 2025-08-05T15:16:30+02:00 Mullvad Browser strings This commit adds strings needed by the following Mullvad Browser patches. - - - - - 7d3e4c03 by Pier Angelo Vendrame at 2025-08-05T15:16:31+02:00 MB 20: Allow packaged-addons in PBM. We install a few addons from the distribution directory, but they are not automatically enabled for PBM mode. This commit modifies the code that installs them to also add the PBM permission to the known ones. - - - - - 45d484f9 by Pier Angelo Vendrame at 2025-08-05T15:16:31+02:00 MB 63: Customize some about pages for Mullvad Browser Also: mullvad-browser#57: Purge unneeded about: pages - - - - - 6a047d21 by Pier Angelo Vendrame at 2025-08-05T15:16:32+02:00 MB 37: Customization for the about dialog - - - - - fccd7e76 by Henry Wilkes at 2025-08-05T15:16:33+02:00 MB 39: Add home page about:mullvad-browser - - - - - c7bf5a68 by Henry Wilkes at 2025-08-05T15:16:33+02:00 fixup! MB 39: Add home page about:mullvad-browser TB 43886: Set homepage to about:mullvad-browser. - - - - - 9b5bb494 by Henry Wilkes at 2025-08-05T15:16:34+02:00 fixup! MB 39: Add home page about:mullvad-browser TB 43929: Update about:mullvad-browser override page logic for ESR 140. TB 42738: Move these changes to the about:mullvad-browser commit. - - - - - b164a9b2 by Beatriz Rizental at 2025-08-05T15:16:35+02:00 fixup! MB 39: Add home page about:mullvad-browser - - - - - 9a5bb650 by hackademix at 2025-08-05T15:16:36+02:00 MB 97: Remove UI cues to install new extensions. - - - - - 16801889 by Beatriz Rizental at 2025-08-05T15:16:36+02:00 fixup! MB 97: Remove UI cues to install new extensions. - - - - - 6760b51b by hackademix at 2025-08-05T15:16:37+02:00 MB 47: uBlock Origin customization - - - - - 9eaead49 by Pier Angelo Vendrame at 2025-08-05T15:16:38+02:00 MB 21: Disable the password manager This commit disables the about:login page and removes the "Login and Password" section of about:preferences. We do not do anything to the real password manager of Firefox, that is in toolkit: it contains C++ parts that make it difficult to actually prevent it from being built.. Finally, we modify the the function that opens about:login to report an error in the console so that we can quickly get a backtrace to the code that tries to use it. - - - - - e37701fa by Pier Angelo Vendrame at 2025-08-05T15:16:38+02:00 MB 112: Updater customization for Mullvad Browser MB 71: Set the updater base URL to Mullvad domain - - - - - 81e69364 by Nicolas Vigier at 2025-08-05T15:16:39+02:00 MB 79: Add Mullvad Browser MAR signing keys MB 256: Add mullvad-browser nightly mar signing key - - - - - f25be664 by Pier Angelo Vendrame at 2025-08-05T15:16:40+02:00 MB 34: Hide unsafe and unwanted preferences UI about:preferences allow to override some of our defaults, that could be fingeprintable or have some other unwanted consequences. - - - - - 6d79e1b0 by Pier Angelo Vendrame at 2025-08-05T15:16:41+02:00 MB 160: Disable the cookie exceptions button Besides disabling the "Delete on close checkbox", disable also the "Manage Exceptions" button when always using PBM. - - - - - 1a2093eb by hackademix at 2025-08-05T15:16:41+02:00 MB 163: prevent uBlock Origin from being uninstalled/disabled - - - - - fcfcbc02 by Richard Pospesel at 2025-08-05T15:16:42+02:00 MB 188: Customize Gitlab Issue and Merge templates - - - - - b9b1d342 by rui hildt at 2025-08-05T15:16:43+02:00 MB 213: Customize the search engines list MB 328: Refactor the search engine patch. Upstream switched to a completely different search engine configuration between ESR 115 and ESR 128. We moved our configuration to a couple of JSON files that do not follow upstream's schemas, as they are overcomplicated for our needs. Also, we keep the old search engine extensions for now, as upstream also kept them, and planned of removing them with Bug 1885953. - - - - - b1fbfb02 by hackademix at 2025-08-05T15:16:44+02:00 MB 214: Enable cross-tab identity leak protection in "quiet" mode - - - - - 55cb2e88 by Pier Angelo Vendrame at 2025-08-05T15:16:44+02:00 MB 80: Enable Mullvad Browser as a default browser - - - - - df22c76f by Pier Angelo Vendrame at 2025-08-05T15:16:45+02:00 MB 320: Temporarily disable WebRTC and WDBA on Windows. WebRTC should be re-enabled when tor-browser#42758 is resolved, and and the default browser agent when in general we make this feature work again. - - - - - 53d89e58 by Henry Wilkes at 2025-08-05T15:16:46+02:00 MB 329: Customize toolbar for mullvad-browser. - - - - - df620a16 by Henry Wilkes at 2025-08-05T15:16:46+02:00 MB 419: Mullvad Browser migration procedures. This commit implements the the Mullvad Browser's version of _migrateUI. - - - - - 269 changed files: - .gitlab/issue_templates/000 Bug Report.md - .gitlab/issue_templates/010 Proposal.md - .gitlab/issue_templates/020 Web Compatibility.md - .gitlab/issue_templates/030 Test.md - .gitlab/issue_templates/040 Feature.md - .gitlab/issue_templates/060 Rebase - Alpha.md - .gitlab/issue_templates/061 Rebase - Stable.md - .gitlab/issue_templates/063 Rebase - Rapid.md - .gitlab/issue_templates/090 Emergency Security Issue.md - + .gitlab/issue_templates/Rebase Browser - Alpha.md - + .gitlab/issue_templates/Rebase Browser - Rapid.md - + .gitlab/issue_templates/Rebase Browser - Stable.md - .gitlab/merge_request_templates/Default.md - + .gitlab/merge_request_templates/Rebase.md - browser/app/Makefile.in - browser/app/macbuild/Contents/Info.plist.in - browser/app/module.ver - browser/app/firefox.exe.manifest → browser/app/mullvadbrowser.exe.manifest - + browser/app/profile/000-mullvad-browser.js - browser/app/profile/001-base-profile.js - browser/base/content/aboutDialog.xhtml - browser/base/content/appmenu-viewcache.inc.xhtml - browser/base/content/browser-menubar.inc - browser/base/content/browser-places.js - browser/base/content/browser.js - browser/base/content/default-bookmarks.html - browser/base/content/nsContextMenu.sys.mjs - browser/base/content/overrides/app-license.html - browser/base/content/pageinfo/pageInfo.xhtml - browser/base/content/utilityOverlay.js - browser/branding/branding-common.mozbuild - + browser/branding/mb-alpha/VisualElements_150.png - + browser/branding/mb-alpha/VisualElements_70.png - + browser/branding/mb-alpha/configure.sh - + browser/branding/mb-alpha/content/about-logo.png - + browser/branding/mb-alpha/content/about-logo.svg - + browser/branding/mb-alpha/content/about-logo(a)2x.png - + browser/branding/mb-alpha/content/about-wordmark.svg - + browser/branding/mb-alpha/content/about.png - + browser/branding/mb-alpha/content/aboutDialog.css - + browser/branding/mb-alpha/content/firefox-wordmark.svg - + browser/branding/mb-alpha/content/icon128.png - + browser/branding/mb-alpha/content/icon16.png - + browser/branding/mb-alpha/content/icon256.png - + browser/branding/mb-alpha/content/icon32.png - + browser/branding/mb-alpha/content/icon48.png - + browser/branding/mb-alpha/content/icon64.png - + browser/branding/mb-alpha/content/jar.mn - + browser/branding/mb-alpha/content/moz.build - + browser/branding/mb-alpha/content/mullvad-branding.css - + browser/branding/mb-alpha/default128.png - + browser/branding/mb-alpha/default16.png - + browser/branding/mb-alpha/default22.png - + browser/branding/mb-alpha/default24.png - + browser/branding/mb-alpha/default256.png - + browser/branding/mb-alpha/default32.png - + browser/branding/mb-alpha/default48.png - + browser/branding/mb-alpha/default64.png - + browser/branding/mb-alpha/document.icns - + browser/branding/mb-alpha/document.ico - + browser/branding/mb-alpha/document_pdf.ico - + browser/branding/mb-alpha/firefox.icns - + browser/branding/mb-alpha/firefox.ico - + browser/branding/mb-alpha/firefox.svg - + browser/branding/mb-alpha/locales/en-US/brand.ftl - + browser/branding/mb-alpha/locales/en-US/brand.properties - + browser/branding/mb-alpha/locales/jar.mn - + browser/branding/mb-alpha/locales/moz.build - + browser/branding/mb-alpha/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-alpha/moz.build - + browser/branding/mb-alpha/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-alpha/newtab.ico - + browser/branding/mb-alpha/newwindow.ico - + browser/branding/mb-alpha/pbmode.ico - + browser/branding/mb-alpha/pref/firefox-branding.js - + browser/branding/mb-nightly/VisualElements_150.png - + browser/branding/mb-nightly/VisualElements_70.png - + browser/branding/mb-nightly/configure.sh - + browser/branding/mb-nightly/content/about-logo.png - + browser/branding/mb-nightly/content/about-logo.svg - + browser/branding/mb-nightly/content/about-logo(a)2x.png - + browser/branding/mb-nightly/content/about-wordmark.svg - + browser/branding/mb-nightly/content/about.png - + browser/branding/mb-nightly/content/aboutDialog.css - + browser/branding/mb-nightly/content/firefox-wordmark.svg - + browser/branding/mb-nightly/content/icon128.png - + browser/branding/mb-nightly/content/icon16.png - + browser/branding/mb-nightly/content/icon256.png - + browser/branding/mb-nightly/content/icon32.png - + browser/branding/mb-nightly/content/icon48.png - + browser/branding/mb-nightly/content/icon64.png - + browser/branding/mb-nightly/content/jar.mn - + browser/branding/mb-nightly/content/moz.build - + browser/branding/mb-nightly/content/mullvad-branding.css - + browser/branding/mb-nightly/default128.png - + browser/branding/mb-nightly/default16.png - + browser/branding/mb-nightly/default22.png - + browser/branding/mb-nightly/default24.png - + browser/branding/mb-nightly/default256.png - + browser/branding/mb-nightly/default32.png - + browser/branding/mb-nightly/default48.png - + browser/branding/mb-nightly/default64.png - + browser/branding/mb-nightly/document.icns - + browser/branding/mb-nightly/document.ico - + browser/branding/mb-nightly/document_pdf.ico - + browser/branding/mb-nightly/firefox.icns - + browser/branding/mb-nightly/firefox.ico - + browser/branding/mb-nightly/firefox.svg - + browser/branding/mb-nightly/locales/en-US/brand.ftl - + browser/branding/mb-nightly/locales/en-US/brand.properties - + browser/branding/mb-nightly/locales/jar.mn - + browser/branding/mb-nightly/locales/moz.build - + browser/branding/mb-nightly/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-nightly/moz.build - + browser/branding/mb-nightly/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-nightly/newtab.ico - + browser/branding/mb-nightly/newwindow.ico - + browser/branding/mb-nightly/pbmode.ico - + browser/branding/mb-nightly/pref/firefox-branding.js - + browser/branding/mb-release/VisualElements_150.png - + browser/branding/mb-release/VisualElements_70.png - + browser/branding/mb-release/configure.sh - + browser/branding/mb-release/content/about-logo.png - + browser/branding/mb-release/content/about-logo.svg - + browser/branding/mb-release/content/about-logo(a)2x.png - + browser/branding/mb-release/content/about-wordmark.svg - + browser/branding/mb-release/content/about.png - + browser/branding/mb-release/content/aboutDialog.css - + browser/branding/mb-release/content/firefox-wordmark.svg - + browser/branding/mb-release/content/icon128.png - + browser/branding/mb-release/content/icon16.png - + browser/branding/mb-release/content/icon256.png - + browser/branding/mb-release/content/icon32.png - + browser/branding/mb-release/content/icon48.png - + browser/branding/mb-release/content/icon64.png - + browser/branding/mb-release/content/jar.mn - + browser/branding/mb-release/content/moz.build - + browser/branding/mb-release/content/mullvad-branding.css - + browser/branding/mb-release/default128.png - + browser/branding/mb-release/default16.png - + browser/branding/mb-release/default22.png - + browser/branding/mb-release/default24.png - + browser/branding/mb-release/default256.png - + browser/branding/mb-release/default32.png - + browser/branding/mb-release/default48.png - + browser/branding/mb-release/default64.png - + browser/branding/mb-release/document.icns - + browser/branding/mb-release/document.ico - + browser/branding/mb-release/document_pdf.ico - + browser/branding/mb-release/firefox.icns - + browser/branding/mb-release/firefox.ico - + browser/branding/mb-release/firefox.svg - + browser/branding/mb-release/locales/en-US/brand.ftl - + browser/branding/mb-release/locales/en-US/brand.properties - + browser/branding/mb-release/locales/jar.mn - + browser/branding/mb-release/locales/moz.build - + browser/branding/mb-release/locales/mullvad-about-wordmark-en.ftl - + browser/branding/mb-release/moz.build - + browser/branding/mb-release/mullvadbrowser.VisualElementsManifest.xml - + browser/branding/mb-release/newtab.ico - + browser/branding/mb-release/newwindow.ico - + browser/branding/mb-release/pbmode.ico - + browser/branding/mb-release/pref/firefox-branding.js - browser/components/BrowserContentHandler.sys.mjs - browser/components/BrowserGlue.sys.mjs - browser/components/DesktopActorRegistry.sys.mjs - browser/components/about/AboutRedirector.cpp - browser/components/about/components.conf - browser/components/customizableui/CustomizableUI.sys.mjs - browser/components/moz.build - + browser/components/mullvad-browser/AboutMullvadBrowserChild.sys.mjs - + browser/components/mullvad-browser/AboutMullvadBrowserParent.sys.mjs - + browser/components/mullvad-browser/content/2728-sparkles.svg - + browser/components/mullvad-browser/content/aboutMullvadBrowser.css - + browser/components/mullvad-browser/content/aboutMullvadBrowser.html - + browser/components/mullvad-browser/content/aboutMullvadBrowser.js - + browser/components/mullvad-browser/jar.mn - + browser/components/mullvad-browser/moz.build - browser/components/preferences/home.inc.xhtml - browser/components/preferences/main.js - browser/components/preferences/preferences.xhtml - browser/components/preferences/privacy.inc.xhtml - browser/components/preferences/privacy.js - browser/components/preferences/search.inc.xhtml - + browser/components/search/extensions/brave/favicon.svg - + browser/components/search/extensions/brave/manifest.json - + browser/components/search/extensions/ddg-html/favicon.ico - + browser/components/search/extensions/ddg-html/manifest.json - browser/components/search/extensions/ddg/manifest.json - + browser/components/search/extensions/metager/favicon.ico - + browser/components/search/extensions/metager/manifest.json - + browser/components/search/extensions/mojeek/favicon.ico - + browser/components/search/extensions/mojeek/manifest.json - + browser/components/search/extensions/mullvad-leta/favicon.svg - + browser/components/search/extensions/mullvad-leta/manifest.json - + browser/components/search/extensions/startpage/favicon.png - + browser/components/search/extensions/startpage/manifest.json - browser/components/shell/ShellService.sys.mjs - browser/components/shell/WindowsDefaultBrowser.cpp - browser/components/shell/nsWindowsShellService.cpp - browser/config/mozconfigs/base-browser - + browser/config/mozconfigs/mullvad-browser - browser/installer/package-manifest.in - browser/installer/windows/nsis/updater_append.ini - browser/locales/l10n.toml - browser/modules/HomePage.sys.mjs - browser/moz.build - browser/moz.configure - config/create_rc.py - devtools/client/aboutdebugging/src/actions/runtimes.js - devtools/client/aboutdebugging/src/components/sidebar/Sidebar.js - devtools/client/jar.mn - devtools/client/themes/images/aboutdebugging-firefox-aurora.svg - devtools/client/themes/images/aboutdebugging-firefox-beta.svg - devtools/client/themes/images/aboutdebugging-firefox-logo.svg - devtools/client/themes/images/aboutdebugging-firefox-nightly.svg - devtools/client/themes/images/aboutdebugging-firefox-release.svg - + devtools/client/themes/images/aboutdebugging-mullvadbrowser-logo.svg - docshell/base/nsAboutRedirector.cpp - docshell/build/components.conf - moz.configure - mozconfig-linux-aarch64 - mozconfig-linux-aarch64-dev - mozconfig-linux-x86_64 - mozconfig-linux-x86_64-asan - mozconfig-linux-x86_64-dev - mozconfig-macos - mozconfig-macos-dev - mozconfig-windows-x86_64 - + other-licenses/nsis/Contrib/ApplicationID/Makefile - other-licenses/nsis/Contrib/ApplicationID/Set.cpp - + other-licenses/nsis/Contrib/CityHash/Makefile - toolkit/components/extensions/child/ext-storage.js - toolkit/components/extensions/parent/ext-storage.js - toolkit/components/passwordmgr/LoginHelper.sys.mjs - toolkit/components/search/AppProvidedSearchEngine.sys.mjs - toolkit/components/search/SearchService.sys.mjs - + toolkit/components/search/content/brave.svg - + toolkit/components/search/content/duckduckgo.ico - + toolkit/components/search/content/metager.ico - + toolkit/components/search/content/mojeek.ico - + toolkit/components/search/content/mullvad-leta.svg - + toolkit/components/search/content/mullvadBrowserSearchEngineIcons.json - + toolkit/components/search/content/mullvadBrowserSearchEngines.json - + toolkit/components/search/content/startpage.png - + toolkit/components/search/jar.mn - toolkit/components/search/moz.build - toolkit/components/securitylevel/SecurityLevel.sys.mjs - + toolkit/content/aboutRightsMullvad.xhtml - + toolkit/content/aboutTelemetryMullvad.xhtml - toolkit/content/jar.mn - toolkit/content/widgets/moz-support-link/moz-support-link.mjs - + toolkit/locales/en-US/toolkit/global/mullvad-browser.ftl - toolkit/mozapps/defaultagent/EventLog.h - toolkit/mozapps/defaultagent/SetDefaultBrowser.cpp - toolkit/mozapps/extensions/AddonManager.sys.mjs - toolkit/mozapps/extensions/content/aboutaddons.css - toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs - toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs - toolkit/mozapps/update/updater/nightly_aurora_level3_primary.der - toolkit/mozapps/update/updater/nightly_aurora_level3_secondary.der - toolkit/mozapps/update/updater/release_primary.der - toolkit/mozapps/update/updater/release_secondary.der - + toolkit/themes/shared/icons/mullvadbrowser.png - toolkit/themes/shared/minimal-toolkit.jar.inc.mn - toolkit/xre/nsAppRunner.cpp - tools/lint/fluent-lint/exclusions.yml - widget/windows/WinTaskbar.cpp - widget/windows/moz.build The diff was not included because it is too large. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/9a… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/9a… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] 2 commits: fixup! [android] Implement Android-native Connection Assist UI
by morgan (@morgan) 05 Aug '25

05 Aug '25
morgan pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 88b8f52c by clairehurst at 2025-08-05T12:53:44+00:00 fixup! [android] Implement Android-native Connection Assist UI Bug 43645: Swiping away doesn't always disconnect from tor - - - - - b4ac359a by Dan Ballard at 2025-08-05T12:53:44+00:00 fixup! TB 40023: [android] Stop PrivateNotificationService Bug 43346: revert patch, not needed anymore - - - - - 2 changed files: - mobile/android/android-components/components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt Changes: ===================================== mobile/android/android-components/components/feature/privatemode/src/main/java/mozilla/components/feature/privatemode/notification/PrivateNotificationFeature.kt ===================================== @@ -44,7 +44,6 @@ class PrivateNotificationFeature<T : AbstractPrivateNotificationService>( } override fun stop() { - applicationContext.stopService(Intent(applicationContext, notificationServiceClass.java)) scope?.cancel() } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -821,6 +821,10 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn super.onDestroy() + if (isFinishing) { + exitProcess(0) + } + // Diagnostic breadcrumb for "Display already aquired" crash: // https://github.com/mozilla-mobile/android-components/issues/7960 breadcrumb( View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/579ade… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/579ade… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] 2 commits: Update release prep issue templates
by morgan (@morgan) 05 Aug '25

05 Aug '25
morgan pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: edd9b7fa by Morgan at 2025-08-04T15:23:25+00:00 Update release prep issue templates - - - - - 724b4e55 by Morgan at 2025-08-05T12:22:31+00:00 Bug 41531: Add support for updating application-services to tools/relprep.py script - - - - - 6 changed files: - .gitlab/issue_templates/Release Prep - Mullvad Browser Alpha.md - .gitlab/issue_templates/Release Prep - Mullvad Browser Stable.md - .gitlab/issue_templates/Release Prep - Tor Browser Alpha.md - .gitlab/issue_templates/Release Prep - Tor Browser Legacy.md - .gitlab/issue_templates/Release Prep - Tor Browser Stable.md - tools/relprep.py Changes: ===================================== .gitlab/issue_templates/Release Prep - Mullvad Browser Alpha.md ===================================== @@ -70,7 +70,7 @@ Mullvad Browser Alpha (and Nightly) are on the `main` branch - **NOTE**: We try to build incrementals for the previous 3 desktop versions - **⚠️ WARNING**: Really *actually* make sure this is the previous Desktop version or else the `make mullvadbrowser-incrementals-*` step will fail - [ ] `projects/firefox/config` - - [ ] `browser_build`: updated to match `mullvad-browser` tag + - [ ] `var/browser_build`: updated to match `mullvad-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] ***(Optional)*** `projects/translation/config`: - [ ] `steps/base-browser/git_hash`: updated with `HEAD` commit of project's `base-browser` branch ===================================== .gitlab/issue_templates/Release Prep - Mullvad Browser Stable.md ===================================== @@ -69,7 +69,7 @@ Mullvad Browser Stable is on the `maint-${MULLVAD_BROWSER_MAJOR}.${MULLVAD_BROWS - **NOTE**: We try to build incrementals for the previous 3 desktop versions - **⚠️ WARNING**: Really *actually* make sure this is the previous Desktop version or else the `make mullvadbrowser-incrementals-*` step will fail - [ ] `projects/firefox/config` - - [ ] `browser_build`: updated to match `mullvad-browser` tag + - [ ] `var/browser_build`: updated to match `mullvad-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] ***(Optional)*** `projects/translation/config`: - [ ] `steps/base-browser/git_hash`: updated with `HEAD` commit of project's `base-browser` branch ===================================== .gitlab/issue_templates/Release Prep - Tor Browser Alpha.md ===================================== @@ -70,11 +70,13 @@ Tor Browser Alpha (and Nightly) are on the `main` branch - **NOTE**: We try to build incrementals for the previous 3 desktop versions - **⚠️ WARNING**: Really *actually* make sure this is the previous Desktop version or else the `make torbrowser-incrementals-*` step will fail - [ ] `projects/firefox/config` - - [ ] `browser_build`: updated to match `tor-browser` tag + - [ ] `var/browser_build`: updated to match `tor-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] `projects/geckoview/config` - - [ ] `browser_build`: updated to match `tor-browser` tag + - [ ] `var/browser_build`: updated to match `tor-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased + - [ ] ***(Optional)*** `projects/application-services/config` + - [ ] `var/build_number`: updated to match `application-services` tag - [ ] ***(Optional)*** `projects/translation/config`: - [ ] `steps/base-browser/git_hash`: updated with `HEAD` commit of project's `base-browser` branch - [ ] `steps/tor-browser/git_hash`: updated with `HEAD` commit of project's `tor-browser` branch @@ -100,7 +102,7 @@ Tor Browser Alpha (and Nightly) are on the `main` branch - [ ] **(Optional)** `projects/go/config` https://go.dev/dl - **NOTE**: In general, Tor Browser Alpha uses the latest Stable major series Go version, but there are sometimes exceptions. Check with the anti-censorship team before doing a major version update in case there is incompatibilities. - [ ] `version`: updated go version - - [ ] `input_files/sha256sum` for `go`: update sha256sum of archive (sha256 sums are displayed on the go download page) + - [ ] `var/source_sha256sum` for `go`: update sha256sum of archive (sha256 sums are displayed on the go download page) - [ ] **(Optional)** `projects/manual/config` - [ ] `version`: updated to latest pipeline id - [ ] `input_files/shasum` for `manual`: updated to manual hash ===================================== .gitlab/issue_templates/Release Prep - Tor Browser Legacy.md ===================================== @@ -67,7 +67,7 @@ Tor Browser Legacy is on the `maint-13.5` branch - **NOTE**: We try to build incrementals for the previous 3 desktop versions - **⚠️ WARNING**: Really *actually* make sure this is the previous Desktop version or else the `make torbrowser-incrementals-*` step will fail - [ ] `projects/firefox/config` - - [ ] `browser_build`: updated to match `tor-browser` tag + - [ ] `var/browser_build`: updated to match `tor-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] ***(Optional)*** `projects/translation/config`: - [ ] `steps/base-browser/git_hash`: updated with `HEAD` commit of project's `base-browser` branch ===================================== .gitlab/issue_templates/Release Prep - Tor Browser Stable.md ===================================== @@ -71,10 +71,10 @@ Tor Browser Stable is on the `maint-${TOR_BROWSER_MAJOR}.${TOR_BROWSER_MINOR}` b - [ ] `var/torbrowser_legacy_version`: updated to latest legacy Tor Browser version - [ ] `var/torbrowser_legacy_platform_version`: updated to latest legacy Tor Browser ESR version - [ ] `projects/firefox/config` - - [ ] `browser_build`: updated to match `tor-browser` tag + - [ ] `var/browser_build`: updated to match `tor-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] `projects/geckoview/config` - - [ ] `browser_build`: updated to match `tor-browser` tag + - [ ] `var/browser_build`: updated to match `tor-browser` tag - [ ] ***(Optional)*** `var/firefox_platform_version`: updated to latest `${ESR_VERSION}` if rebased - [ ] ***(Optional)*** `projects/translation/config`: - [ ] `steps/base-browser/git_hash`: updated with `HEAD` commit of project's `base-browser` branch @@ -101,7 +101,7 @@ Tor Browser Stable is on the `maint-${TOR_BROWSER_MAJOR}.${TOR_BROWSER_MINOR}` b - [ ] **(Optional)** `projects/go/config` https://go.dev/dl - **NOTE**: In general, Tor Browser Alpha uses the latest Stable major series Go version, but there are sometimes exceptions. Check with the anti-censorship team before doing a major version update in case there is incompatibilities. - [ ] `version`: updated go version - - [ ] `input_files/sha256sum` for `go`: update sha256sum of archive (sha256 sums are displayed on the go download page) + - [ ] `var/source_sha256sum for `go`: update sha256sum of archive (sha256 sums are displayed on the go download page) - [ ] **(Optional)** `projects/manual/config` - [ ] `version`: updated to latest pipeline id - [ ] `input_files/shasum` for `manual`: updated to manual hash ===================================== tools/relprep.py ===================================== @@ -126,6 +126,7 @@ class ReleasePreparation: self.branch_sanity_check() self.update_firefox() + self.update_application_services() self.update_translations() self.update_addons() @@ -268,6 +269,50 @@ class ReleasePreparation: tag_info[2] += 1 return tag_info + def update_application_services(self): + if not self.android: + return + + logger.info("Updating application-services") + config = self.load_config("application-services") + tag = self._get_application_services_tag(config) + build_number = tag[0] + + config["var"]["build_number"] = build_number + self.save_config("application-services", config) + logger.debug("application-services configuration saved") + + def _get_application_services_tag(self, config): + version = config["version"] + branch = f"{version}-TORBROWSER" + + repo = Repo(self.base_path / "git_clones/application-services") + logger.debug("About to fetch application-services") + repo.remotes["origin"].fetch() + + tags = get_sorted_tags(repo) + tag_info = None + for t in tags: + logger.debug("tag: %s", t.tag) + m = re.match( + rf"v{branch}-build(\d+)", t.tag + ) + if m: + logger.debug("Matched tag %s", t.tag) + tag_info = [int(m.group(1))] + break + if tag_info is None: + raise RuntimeError("No compatible tag found.") + logger.debug("Checking if tag %s is head of %s.", t.tag, branch) + if t.object != repo.remotes["origin"].refs[branch].commit: + logger.info( + "Found new commits after tag %s, bumping the build number preemptively.", + t.tag, + ) + tag_info[0] += 1 + + return tag_info + def update_translations(self): logger.info("Updating translations") repo = Repo(self.base_path / "git_clones/translation") View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/compare/… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-140.1.0esr-15.0-1] 5 commits: fixup! TB 42247: Android helpers for the TorProvider
by Dan Ballard (@dan) 05 Aug '25

05 Aug '25
Dan Ballard pushed to branch tor-browser-140.1.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 4fba4d54 by Dan Ballard at 2025-08-04T23:24:21-05:00 fixup! TB 42247: Android helpers for the TorProvider Bug 41188 pt2: strip out legacy TorController logic and shims - - - - - a04605ca by Dan Ballard at 2025-08-04T23:24:21-05:00 fixup! TB 41878: [android] Add standalone Tor Bootstrap Bug 41188 pt2: strip out legacy TorController logic and shims - - - - - c563c43e by Dan Ballard at 2025-08-04T23:24:22-05:00 fixup! TB 40041 [android]: Implement Tor Network Settings Bug 41188 pt2: strip out legacy TorController logic and shims - - - - - e9ac372c by Dan Ballard at 2025-08-04T23:30:59-05:00 fixup! [android] Implement Android-native Connection Assist UI Bug 41188 pt2: strip out legacy TorController logic and shims - - - - - 579ade4c by Dan Ballard at 2025-08-04T23:31:02-05:00 fixup! [android] Modify add-on support Bug 41188 pt2: strip out legacy TorController logic and shims - - - - - 13 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TorBridgeConfigFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapProgressViewModel.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorLogsViewModel.kt - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java - + mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectError.java - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStage.java - toolkit/modules/TorAndroidIntegration.sys.mjs Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -101,7 +101,6 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.browser.browsingmode.DefaultBrowsingModeManager import org.mozilla.fenix.components.appstate.AppAction -import org.mozilla.fenix.components.appstate.AppAction.ShareAction import org.mozilla.fenix.components.appstate.OrientationMode import org.mozilla.fenix.components.metrics.BreadcrumbsRecorder import org.mozilla.fenix.components.metrics.GrowthDataWorker @@ -137,7 +136,6 @@ import org.mozilla.fenix.home.intent.OpenBrowserIntentProcessor import org.mozilla.fenix.home.intent.OpenPasswordManagerIntentProcessor import org.mozilla.fenix.home.intent.OpenRecentlyClosedIntentProcessor import org.mozilla.fenix.home.intent.OpenSpecificTabIntentProcessor -import org.mozilla.fenix.home.intent.ReEngagementIntentProcessor import org.mozilla.fenix.home.intent.SpeechProcessingIntentProcessor import org.mozilla.fenix.home.intent.StartSearchIntentProcessor import org.mozilla.fenix.library.bookmarks.DesktopFolders @@ -167,19 +165,18 @@ import org.mozilla.fenix.theme.DefaultThemeManager import org.mozilla.fenix.theme.StatusBarColorManager import org.mozilla.fenix.theme.ThemeManager import org.mozilla.fenix.tor.TorConnectionAssistFragmentDirections -import org.mozilla.fenix.tor.TorEvents import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.changeAppLauncherIcon import java.lang.ref.WeakReference import java.util.Locale -import androidx.compose.material.SnackbarDuration import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.compose.core.Action import org.mozilla.fenix.compose.snackbar.SnackbarState import org.mozilla.fenix.compose.snackbar.Snackbar import org.mozilla.fenix.tor.UrlQuickLoadViewModel import org.mozilla.geckoview.TorAndroidIntegration +import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener import org.mozilla.geckoview.TorConnectStage import kotlin.system.exitProcess @@ -915,19 +912,25 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn */ @SuppressLint("MissingSuperCall") // super.onNewIntent is called in [onNewIntentInternal(intent)] final override fun onNewIntent(intent: Intent) { - if (intent.action == ACTION_MAIN || components.torController.isConnected) { + if (intent.action == ACTION_MAIN || components.torController.isBootstrapped) { onNewIntentInternal(intent) } else { // Wait until Tor is connected to handle intents from external apps for links, search, etc. - components.torController.registerTorListener(object : TorEvents { - override fun onTorConnected() { - components.torController.unregisterTorListener(this) - onNewIntentInternal(intent) + val torIntegration = (components.core.engine as GeckoEngine).getTorIntegrationController() + torIntegration.registerBootstrapStateChangeListener( + object : BootstrapStateChangeListener { + + override fun onBootstrapStageChange(stage: TorConnectStage) { + if (stage.isBootstrapped) { + torIntegration.unregisterBootstrapStateChangeListener(this) + onNewIntentInternal(intent) + } + } + + override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) {} } - override fun onTorConnecting() { /* no-op */ } - override fun onTorStopped() { /* no-op */ } - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { /* no-op */ } - }) + ) + return } } @@ -1516,7 +1519,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn // we want to ignore other cases when the app gets open by users clicking on links, // unless Tor is not yet connected. getSettings().shouldStartOnHome() && (intent?.action == ACTION_MAIN || - !components.torController.isConnected) + !components.torController.isBootstrapped) } } @@ -1606,14 +1609,13 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity, TorAn exitProcess(0) } - override fun onBootstrapStateChange(state: String) = Unit - override fun onBootstrapStageChange(stage: TorConnectStage) = Unit - override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) = Unit - override fun onBootstrapComplete() { - if (settings().useHtmlConnectionUi) { - components.useCases.tabsUseCases.removeAllTabs() - navHost.navController.navigate(NavGraphDirections.actionStartupHome()) + override fun onBootstrapStageChange(stage: TorConnectStage) { + if (stage.isBootstrapped) { + if (settings().useHtmlConnectionUi) { + components.useCases.tabsUseCases.removeAllTabs() + navHost.navController.navigate(NavGraphDirections.actionStartupHome()) + } } } - override fun onBootstrapError(code: String?, message: String?, phase: String?, reason: String?) = Unit + override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) = Unit } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt ===================================== @@ -13,6 +13,7 @@ import android.os.Build import android.os.Bundle import android.os.StrictMode import androidx.annotation.VisibleForTesting +import mozilla.components.browser.engine.gecko.GeckoEngine import mozilla.components.feature.intent.ext.sanitize import mozilla.components.feature.intent.processing.IntentProcessor import mozilla.components.support.base.log.logger.Logger @@ -31,7 +32,8 @@ import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks import org.mozilla.fenix.perf.StartupTimeline import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor -import org.mozilla.fenix.tor.TorEvents +import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener +import org.mozilla.geckoview.TorConnectStage /** * Processes incoming intents and sends them to the corresponding activity. @@ -55,19 +57,24 @@ class IntentReceiverActivity : Activity() { // the HomeActivity. val intent = intent?.let { Intent(it) } ?: Intent() intent.sanitize().stripUnwantedFlags() - if (intent.action == ACTION_MAIN || components.torController.isConnected) { + if (intent.action == ACTION_MAIN || components.torController.isBootstrapped) { processIntent(intent) } else { // Wait until Tor is connected to handle intents from external apps for links, search, etc. - components.torController.registerTorListener(object : TorEvents { - override fun onTorConnected() { - components.torController.unregisterTorListener(this) - processIntent(intent) - } - override fun onTorConnecting() { /* no-op */ } - override fun onTorStopped() { /* no-op */ } - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { /* no-op */ } - }) + val engine = components.core.engine as GeckoEngine + engine.getTorIntegrationController().registerBootstrapStateChangeListener( + object : BootstrapStateChangeListener { + + override fun onBootstrapStageChange(stage: TorConnectStage) { + if (stage.isBootstrapped) { + engine.getTorIntegrationController().unregisterBootstrapStateChangeListener(this) + processIntent(intent) + } + } + + override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) {} + }) + // In the meantime, open the HomeActivity so the user can get connected. processIntent(Intent()) ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt ===================================== @@ -20,7 +20,7 @@ import mozilla.components.support.webextensions.WebExtensionSupport import mozilla.components.support.base.log.logger.Logger import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings -import org.mozilla.fenix.tor.TorEvents +import org.mozilla.fenix.tor.RunOnceBootstrapped object TorBrowserFeatures { private val logger = Logger("torbrowser-features") @@ -142,9 +142,8 @@ object TorBrowserFeatures { * causing automatic update checks failures (components.addonUpdater being a lazy prop). * The extension, from then on, should behave as if the user had installed it manually. */ - context.components.torController.registerTorListener(object : TorEvents { - override fun onTorConnected() { - context.components.torController.unregisterTorListener(this) + context.components.torController.registerRunOnceBootstrapped(object : RunOnceBootstrapped { + override fun onBootstrapped() { // Enable automatic updates. This must be done on every startup (tor-browser#42353) context.components.addonUpdater.registerForFutureUpdates(NOSCRIPT_ID) // Force a one-time immediate update check for older installations @@ -153,18 +152,6 @@ object TorBrowserFeatures { settings.noscriptUpdated = 2 } } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorConnecting() { - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorStopped() { - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { - } }) } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TorBridgeConfigFragment.kt ===================================== @@ -56,7 +56,6 @@ class TorBridgeConfigFragment : PreferenceFragmentCompat() { setOnPreferenceChangeListener<Boolean> { preference, enabled -> preference.context.components.torController.bridgesEnabled = enabled updateCurrentConfiguredBridgePref(preference) - preference.context.components.torController.restartTor() true } } @@ -71,7 +70,6 @@ class TorBridgeConfigFragment : PreferenceFragmentCompat() { preference.context.components.torController.bridgeTransport = TorBridgeTransportConfig.USER_PROVIDED preference.context.components.torController.userProvidedBridges = userProvidedBridge updateCurrentConfiguredBridgePref(preference) - preference.context.components.torController.restartTor() true } val userProvidedBridge: String? = context.components.torController.userProvidedBridges @@ -103,7 +101,6 @@ class TorBridgeConfigFragment : PreferenceFragmentCompat() { preference.context.components.torController.bridgeTransport = bridge previousTransportConfig = bridge updateCurrentConfiguredBridgePref(preference) - preference.context.components.torController.restartTor() } true } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapProgressViewModel.kt ===================================== @@ -27,20 +27,9 @@ class TorBootstrapProgressViewModel( super.onCleared() } - override fun onBootstrapStateChange(state: String?) {} override fun onBootstrapStageChange(stage: TorConnectStage) = Unit override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) { this.progress.value = progress.toInt() } - - override fun onBootstrapComplete() {} - - override fun onBootstrapError( - code: String?, - message: String?, - phase: String?, - reason: String?, - ) { - } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt ===================================== @@ -154,23 +154,12 @@ class TorConnectionAssistViewModel( } } - override fun onBootstrapStateChange(state: String?) {} - - override fun onBootstrapStageChange(stage: TorConnectStage?) { + override fun onBootstrapStageChange(stage: TorConnectStage) { torConnectStage.value = stage } override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) {} - override fun onBootstrapComplete() {} - - override fun onBootstrapError( - code: String?, - message: String?, - phase: String?, - reason: String?, - ) {} - fun button1ShouldBeDisabled(screen: ConnectAssistUiState): Boolean { return selectedCountryCode.value == "automatic" && screen.regionDropDownDefaultItem == R.string.connection_assist_select_country_or_region } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt ===================================== @@ -6,37 +6,14 @@ package org.mozilla.fenix.tor import androidx.lifecycle.LifecycleCoroutineScope -interface TorEvents { - fun onTorConnecting() - fun onTorConnected() - fun onTorStatusUpdate(entry: String?, status: String?, progress: Double? = 0.0) - fun onTorStopped() +// Callback for function to be run one time when the system is bootstrapped and then disregarded +interface RunOnceBootstrapped { + fun onBootstrapped() } -class TorError( - var message: String, - var details: String, - var phase: String, - var reason: String, -) { } -interface TorLogs { - fun onLog(type: String?, message: String?, timestamp: String?) -} - -internal enum class TorStatus(val status: String) { - OFF("OFF"), - STARTING("STARTING"), - ON("ON"), - STOPPING("STOPPING"), - UNKNOWN("UNKNOWN"); -} - -interface TorController: TorEvents { +interface TorController { val logEntries: MutableList<TorLog> - val isStarting: Boolean - val isRestarting: Boolean val isBootstrapped: Boolean - val isConnected: Boolean var bridgesEnabled: Boolean var bridgeTransport: TorBridgeTransportConfig var userProvidedBridges: String? @@ -44,21 +21,21 @@ interface TorController: TorEvents { fun start() fun stop() - override fun onTorConnecting() - override fun onTorConnected() - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) - override fun onTorStopped() - - fun getLastErrorState() : TorError? - - fun registerTorListener(l: TorEvents) - fun unregisterTorListener(l: TorEvents) - - fun registerTorLogListener(l: TorLogs) - fun unregisterTorLogListener(l: TorLogs) + // TorBrowserFeatures.install wants to register a callback for when tor bootstraps the first time + // so it can then check for noscript updates. + // Currently it needs to register it before TorAndroidIntegration is fully loaded, so this way + // they can register with TorController which will start streaming events from TAS when available + // and call them one time when the system is bootstrapped + // TODO: rewire the noscript update call in TorBrowserFeatures.install + // a) call TorBrowserFeatures.install from somewhere else (ex: move from Core.GeckoEngine.also + // to maybe FenixApplication.setupInMainProcessOnly + // dan: had trouble with this first time: + // https://gitlab.torproject.org/tpo/applications/tor-browser/-/merge_requests… + // b) just move the call to `context.components.addonUpdater.update(NOSCRIPT_ID)` somewhere else + // that can use TorAndroidIntegration.BootstrapListener + fun registerRunOnceBootstrapped(rob: RunOnceBootstrapped) + fun unregisterRunOnceBootstrapped(rob: RunOnceBootstrapped) fun initiateTorBootstrap(lifecycleScope: LifecycleCoroutineScope? = null, withDebugLogging: Boolean = false) fun stopTor() - fun setTorStopped() - fun restartTor() } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt ===================================== @@ -4,75 +4,30 @@ package org.mozilla.fenix.tor import android.content.Context import android.util.Log import androidx.lifecycle.LifecycleCoroutineScope -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.ext.components import org.mozilla.geckoview.TorAndroidIntegration import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener import org.mozilla.geckoview.TorAndroidIntegration.TorLogListener import org.mozilla.geckoview.TorConnectStage +import org.mozilla.geckoview.TorConnectStageName import org.mozilla.geckoview.TorSettings import org.mozilla.geckoview.TorSettings.BridgeBuiltinType import org.mozilla.geckoview.TorSettings.BridgeSource -// Enum matching TorConnectState from TorConnect.sys.mjs that we get from onBootstrapStateChange -internal enum class TorConnectState(val state: String) { - Initial("Initial"), - Configuring("Configuring"), - AutoBootstrapping("AutoBootstrapping"), - Bootstrapping("Bootstrapping"), - Error("Error"), - Bootstrapped("Bootstrapped"), - Disabled("Disabled"); - - fun isStarting() = this == Bootstrapping || this == AutoBootstrapping - fun isError() = this == Error - - fun isStarted() = this == Bootstrapped - - fun isOff() = this == Initial || this == Configuring || this == Disabled || this == Error - - - // Convert to TorStatus that firefox-android uses based on tor-android-service - fun toTorStatus(): TorStatus { - return when (this) { - Initial -> TorStatus.OFF - Configuring -> TorStatus.OFF - AutoBootstrapping -> TorStatus.STARTING - Bootstrapping -> TorStatus.STARTING - Error -> TorStatus.UNKNOWN - Bootstrapped -> TorStatus.ON - Disabled -> TorStatus.OFF - } - } -} - class TorControllerGV( private val context: Context, -) : TorController, TorEvents, BootstrapStateChangeListener, TorLogListener { +) : TorController, BootstrapStateChangeListener, TorLogListener { private val TAG = "TorControllerGV" - private var torListeners = mutableListOf<TorEvents>() - private var torLogListeners = mutableListOf<TorLogs>() - - private val _lastKnownStatus = MutableStateFlow(TorConnectState.Initial) - internal val lastKnownStatus: StateFlow<TorConnectState> = _lastKnownStatus + private var runOnceBootstrappedHandlers = mutableListOf<RunOnceBootstrapped>() - internal var lastKnownError: TorError? = null - private var wasTorBootstrapped = false - private var isTorRestarting = false - - private var isTorBootstrapped = false - get() = ((_lastKnownStatus.value.isStarted()) && wasTorBootstrapped) + override val isBootstrapped get() = + getTorIntegration().lastKnowStage.value?.name?.isBootstrapped ?: false private val entries = mutableListOf<TorLog>() override val logEntries get() = entries - override val isStarting get() = _lastKnownStatus.value.isStarting() - override val isRestarting get() = isTorRestarting - override val isBootstrapped get() = isTorBootstrapped - override val isConnected get() = (_lastKnownStatus.value.isStarted() && !isTorRestarting) private fun getTorIntegration(): TorAndroidIntegration { return (context.components.core.engine as GeckoEngine).getTorIntegrationController() @@ -82,8 +37,7 @@ class TorControllerGV( return getTorIntegration().getSettings() } - - // On a fresh install bridgeEnagled can be set to true without a valid bridgeSource + // On a fresh install bridgeEnabled can be set to true without a valid bridgeSource // having been selected. After first use this will not happen because last selected bridge // will be remembered and reused. // However, on first use, submitting this to TorSettings is an invalid state. @@ -105,7 +59,6 @@ class TorControllerGV( } } - override var bridgeTransport: TorBridgeTransportConfig get() { return when (getTorSettings()?.bridgesSource) { @@ -144,7 +97,6 @@ class TorControllerGV( } } - // Currently the UI takes a user provided string and sets this in one step so there is where we // actually set it.bridgesSource = BridgeSource.UserProvided, not above, // as TorSettings.sys.mjs #cleanupSettings could reject BridgeSource.UserProvided @@ -179,73 +131,37 @@ class TorControllerGV( getTorIntegration().unregisterLogListener(this) } - // TorEvents - override fun onTorConnecting() { - synchronized(torListeners) { - torListeners.toList().forEach { it.onTorConnecting() } - } - } - - // TorEvents - override fun onTorConnected() { - synchronized(torListeners) { - torListeners.toList().forEach { it.onTorConnected() } - } - } - - // TorEvents - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { - synchronized(torListeners) { - torListeners.toList().forEach { it.onTorStatusUpdate(entry, status, progress) } - } - } - - // TorEvents - override fun onTorStopped() { - synchronized(torListeners) { - torListeners.toList().forEach { it.onTorStopped() } - } - } - override fun onLog(type: String?, message: String?, timestamp: String?) { - synchronized(torLogListeners) { + synchronized(entries) { entries.add(TorLog(type ?: "null", message ?: "null", timestamp ?: "null")) - torLogListeners.toList().forEach { it.onLog(type ?: "null", message ?: "null", timestamp) } - } - } - - override fun registerTorListener(l: TorEvents) { - synchronized(torListeners) { - if (torListeners.contains(l)) { - return - } - torListeners.add(l) } } - override fun unregisterTorListener(l: TorEvents) { - synchronized(torListeners) { - if (!torListeners.contains(l)) { + override fun registerRunOnceBootstrapped(rob: RunOnceBootstrapped) { + // TODO Remove need for this with tb-44002 + // it would be nice to have a short circuit run and don't add if already bootstrapped + // however this calls context.components.core.engine which tries to lazy load engine + // which causes a recursive loop. instead we should do the work in tb-44002 + // this is currently fine as there is a single use case for this called in + // TorBrowserFeatures that is at startup + //if (isBootstrapped) { + // rob.onBootstrapped() + // return + //} + synchronized(runOnceBootstrappedHandlers) { + if (runOnceBootstrappedHandlers.contains(rob)) { return } - torListeners.remove(l) + runOnceBootstrappedHandlers.add(rob) } } - override fun registerTorLogListener(l: TorLogs) { - synchronized(torLogListeners) { - if (torLogListeners.contains(l)) { - return - } - torLogListeners.add(l) - } - } - override fun unregisterTorLogListener(l: TorLogs) { - synchronized(torLogListeners) { - if (!torLogListeners.contains(l)) { + override fun unregisterRunOnceBootstrapped(rob: RunOnceBootstrapped) { + synchronized(runOnceBootstrappedHandlers) { + if (!runOnceBootstrappedHandlers.contains(rob)) { return } - torLogListeners.remove(l) + runOnceBootstrappedHandlers.remove(rob) } } @@ -260,82 +176,22 @@ class TorControllerGV( getTorIntegration().cancelBootstrap() } - override fun setTorStopped() { - _lastKnownStatus.value = TorConnectState.Configuring - onTorStatusUpdate(null, lastKnownStatus.toString(), 0.0) - onTorStopped() - } - - override fun restartTor() { - if (!_lastKnownStatus.value.isStarted() && wasTorBootstrapped) { - // If we aren't started, but we were previously bootstrapped, - // then we handle a "restart" request as a "start" restart - initiateTorBootstrap() - } else { - // |isTorRestarting| tracks the state of restart. When we receive an |OFF| state - // from TorService in persistentBroadcastReceiver::onReceive we restart the Tor - // service. - isTorRestarting = true - stopTor() - } - } - - override fun getLastErrorState() : TorError? { - return lastKnownError - } - - // TorEventsBootstrapStateChangeListener -> (lastKnowStatus, TorEvents) - // Handle events from GeckoView TorAndroidIntegration and map to TorEvents based events - // and state for firefox-android (designed for tor-android-service) - // fun onTorConnecting() - // fun onTorConnected() - // fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) - // fun onTorStopped() - // TorEventsBootstrapStateChangeListener - override fun onBootstrapStateChange(newStateVal: String?) { - Log.d(TAG, "onBootstrapStateChange(newStateVal = $newStateVal)") - val newState: TorConnectState = TorConnectState.valueOf(newStateVal ?: "Error") - - if (newState.isError() && wasTorBootstrapped) { - stopTor() - } - - if (newState.isStarted()) { - wasTorBootstrapped = true - onTorConnected() - } - - if (wasTorBootstrapped && newState == TorConnectState.Configuring) { - wasTorBootstrapped = false - if (isTorRestarting) { - initiateTorBootstrap() - } else { - setTorStopped() + override fun onBootstrapStageChange(stage: TorConnectStage) { + Log.d(TAG, "onBootstrapStageChange(stage = $stage)") + + if (stage.name == TorConnectStageName.Bootstrapped) { + synchronized(runOnceBootstrappedHandlers) { + runOnceBootstrappedHandlers.toList().forEach { + it.onBootstrapped() + runOnceBootstrappedHandlers.remove(it) + } } } - - if (_lastKnownStatus.value.isOff() && newState.isStarting()) { - isTorRestarting = false - } - - _lastKnownStatus.value = newState - onTorStatusUpdate(null, newStateVal, null) } - override fun onBootstrapStageChange(stage: TorConnectStage) = Unit - // TorEventsBootstrapStateChangeListener override fun onBootstrapProgress(progress: Double, hasWarnings: Boolean) { Log.d(TAG, "onBootstrapProgress(progress = $progress, hasWarnings = $hasWarnings)") - onTorStatusUpdate("", _lastKnownStatus.value.toTorStatus().status, progress) - } - - // TorEventsBootstrapStateChangeListener - override fun onBootstrapComplete() = Unit - - // TorEventsBootstrapStateChangeListener - override fun onBootstrapError(code: String?, message: String?, phase: String?, reason: String?) { - lastKnownError = TorError(code ?: "", message ?: "", phase ?: "", reason ?: "") } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorLogsViewModel.kt ===================================== @@ -13,11 +13,15 @@ import android.widget.Toast import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.R import org.mozilla.fenix.ext.components +import org.mozilla.geckoview.TorAndroidIntegration.TorLogListener -class TorLogsViewModel(application: Application) : AndroidViewModel(application), TorLogs { +class TorLogsViewModel(application: Application) : AndroidViewModel(application), TorLogListener { private val torController = application.components.torController + private val engine = application.components.core.engine as GeckoEngine + private val torAndroidIntegration = engine.getTorIntegrationController() private val clipboardManager = application.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager @@ -33,7 +37,7 @@ class TorLogsViewModel(application: Application) : AndroidViewModel(application) init { setupClipboardListener() - torController.registerTorLogListener(this) + torAndroidIntegration.registerLogListener(this) val currentEntries = torController.logEntries for (log in currentEntries) { addLog(log) @@ -46,7 +50,7 @@ class TorLogsViewModel(application: Application) : AndroidViewModel(application) override fun onCleared() { super.onCleared() - torController.unregisterTorLogListener(this) + torAndroidIntegration.unregisterLogListener(this) } private fun setupClipboardListener() { ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java ===================================== @@ -39,11 +39,8 @@ public class TorAndroidIntegration implements BundleEventListener { private static final String EVENT_TOR_STOP = "GeckoView:Tor:StopTor"; private static final String EVENT_MEEK_START = "GeckoView:Tor:StartMeek"; private static final String EVENT_MEEK_STOP = "GeckoView:Tor:StopMeek"; - private static final String EVENT_CONNECT_STATE_CHANGED = "GeckoView:Tor:ConnectStateChanged"; // deprecation path - private static final String EVENT_CONNECT_STAGE_CHANGED = "GeckoView:Tor:ConnectStageChanged"; // replacement path - private static final String EVENT_CONNECT_ERROR = "GeckoView:Tor:ConnectError"; + private static final String EVENT_CONNECT_STAGE_CHANGED = "GeckoView:Tor:ConnectStageChanged"; private static final String EVENT_BOOTSTRAP_PROGRESS = "GeckoView:Tor:BootstrapProgress"; - private static final String EVENT_BOOTSTRAP_COMPLETE = "GeckoView:Tor:BootstrapComplete"; private static final String EVENT_TOR_LOGS = "GeckoView:Tor:Logs"; private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady"; private static final String EVENT_SETTINGS_CHANGED = "GeckoView:Tor:SettingsChanged"; @@ -62,6 +59,7 @@ public class TorAndroidIntegration implements BundleEventListener { private static final String EVENT_QUICKSTART_GET = "GeckoView:Tor:QuickstartGet"; private static final String EVENT_QUICKSTART_SET = "GeckoView:Tor:QuickstartSet"; private static final String EVENT_REGION_NAMES_GET = "GeckoView:Tor:RegionNamesGet"; + private static final String EVENT_SHOULD_SHOW_TOR_CONNECT = "GeckoView:Tor:ShouldShowTorConnect"; private static final String CONTROL_PORT_FILE = "/control-ipc"; private static final String SOCKS_FILE = "/socks-ipc"; @@ -124,11 +122,8 @@ public class TorAndroidIntegration implements BundleEventListener { EVENT_MEEK_STOP, EVENT_SETTINGS_READY, EVENT_SETTINGS_CHANGED, - EVENT_CONNECT_STATE_CHANGED, EVENT_CONNECT_STAGE_CHANGED, - EVENT_CONNECT_ERROR, EVENT_BOOTSTRAP_PROGRESS, - EVENT_BOOTSTRAP_COMPLETE, EVENT_TOR_LOGS); } @@ -157,35 +152,18 @@ public class TorAndroidIntegration implements BundleEventListener { } else { Log.w(TAG, "Ignoring a settings changed event that did not have the new settings."); } - } else if (EVENT_CONNECT_STATE_CHANGED.equals(event)) { - String state = message.getString("state"); - for (BootstrapStateChangeListener listener : mBootstrapStateListeners) { - listener.onBootstrapStateChange(state); - } } else if (EVENT_CONNECT_STAGE_CHANGED.equals(event)) { TorConnectStage stage = new TorConnectStage(message.getBundle("stage")); _lastKnownStage.setValue(stage); for (BootstrapStateChangeListener listener : mBootstrapStateListeners) { listener.onBootstrapStageChange(stage); } - } else if (EVENT_CONNECT_ERROR.equals(event)) { - String code = message.getString("code"); - String msg = message.getString("message"); - String phase = message.getString("phase"); - String reason = message.getString("reason"); - for (BootstrapStateChangeListener listener : mBootstrapStateListeners) { - listener.onBootstrapError(code, msg, phase, reason); - } } else if (EVENT_BOOTSTRAP_PROGRESS.equals(event)) { double progress = message.getDouble("progress"); boolean hasWarnings = message.getBoolean("hasWarnings"); for (BootstrapStateChangeListener listener : mBootstrapStateListeners) { listener.onBootstrapProgress(progress, hasWarnings); } - } else if (EVENT_BOOTSTRAP_COMPLETE.equals(event)) { - for (BootstrapStateChangeListener listener : mBootstrapStateListeners) { - listener.onBootstrapComplete(); - } } else if (EVENT_TOR_LOGS.equals(event)) { String msg = message.getString("message"); String type = message.getString("logType"); @@ -647,15 +625,9 @@ public class TorAndroidIntegration implements BundleEventListener { } public interface BootstrapStateChangeListener { - void onBootstrapStateChange(String state); // depreaction path - - void onBootstrapStageChange(TorConnectStage stage); // new upgrade + void onBootstrapStageChange(@NonNull TorConnectStage stage); // new upgrade void onBootstrapProgress(double progress, boolean hasWarnings); - - void onBootstrapComplete(); - - void onBootstrapError(String code, String message, String phase, String reason); } public interface TorLogListener { @@ -736,6 +708,17 @@ public class TorAndroidIntegration implements BundleEventListener { }); } + public interface ShouldShowTorConnectGetter { + void onValue(Boolean shouldShowTorConnect); + } + + public void shouldShowTorConnectGet(ShouldShowTorConnectGetter shouldShowTorConnectGetter) { + EventDispatcher.getInstance().queryBoolean(EVENT_SHOULD_SHOW_TOR_CONNECT).then(shouldShowTorConnect -> { + shouldShowTorConnectGetter.onValue(shouldShowTorConnect); + return new GeckoResult<Void>(); + }); + } + public @NonNull GeckoResult<Void> beginBootstrap() { return EventDispatcher.getInstance().queryVoid(EVENT_BOOTSTRAP_BEGIN); } @@ -754,21 +737,21 @@ public class TorAndroidIntegration implements BundleEventListener { return EventDispatcher.getInstance().queryVoid(EVENT_BOOTSTRAP_CANCEL); } - public void registerBootstrapStateChangeListener(BootstrapStateChangeListener listener) { + public synchronized void registerBootstrapStateChangeListener(BootstrapStateChangeListener listener) { mBootstrapStateListeners.add(listener); } - public void unregisterBootstrapStateChangeListener(BootstrapStateChangeListener listener) { + public synchronized void unregisterBootstrapStateChangeListener(BootstrapStateChangeListener listener) { mBootstrapStateListeners.remove(listener); } private final HashSet<BootstrapStateChangeListener> mBootstrapStateListeners = new HashSet<>(); - public void registerLogListener(TorLogListener listener) { + public synchronized void registerLogListener(TorLogListener listener) { mLogListeners.add(listener); } - public void unregisterLogListener(TorLogListener listener) { + public synchronized void unregisterLogListener(TorLogListener listener) { mLogListeners.remove(listener); } ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectError.java ===================================== @@ -0,0 +1,24 @@ +package org.mozilla.geckoview; + +import org.mozilla.gecko.util.GeckoBundle; + +public class TorConnectError { + public String code; + public String message; + public String phase; + public String reason; + + public TorConnectError(GeckoBundle bundle) { + code = bundle.getString("code"); + message = bundle.getString("message"); + phase = bundle.getString("phase"); + reason = bundle.getString("reason"); + } + + public TorConnectError(String code, String message, String phase, String reason) { + this.code = code; + this.message = message; + this.phase = phase; + this.reason = reason; + } +} ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStage.java ===================================== @@ -5,24 +5,10 @@ import org.mozilla.gecko.util.GeckoBundle; // Class to receive ConnectStage object from TorConnect.sys.mjs ~ln677 public class TorConnectStage { - public class Error { - public String code; - public String message; - public String phase; - public String reason; - - public Error(GeckoBundle bundle) { - code = bundle.getString("code"); - message = bundle.getString("message"); - phase = bundle.getString("phase"); - reason = bundle.getString("reason"); - } - } - public TorConnectStageName name; // The TorConnectStage prior to this bootstrap attempt. Only set during the "Bootstrapping" stage. public TorConnectStageName bootstrapTrigger; - public Error error; + public TorConnectError error; public String defaultRegion; public Boolean potentiallyBlocked; public Boolean tryAgain; @@ -37,7 +23,7 @@ public class TorConnectStage { potentiallyBlocked = bundle.getBoolean("potentiallyBlocked"); tryAgain = bundle.getBoolean("tryAgain"); if (bundle.getBundle("error") != null) { - error = new Error(bundle.getBundle("error")); + error = new TorConnectError(bundle.getBundle("error")); } bootstrappingStatus = new TorBootstrappingStatus(bundle.getBundle("bootstrappingStatus")); } ===================================== toolkit/modules/TorAndroidIntegration.sys.mjs ===================================== @@ -28,7 +28,6 @@ const EmittedEvents = Object.freeze({ settingsChanged: "GeckoView:Tor:SettingsChanged", connectStateChanged: "GeckoView:Tor:ConnectStateChanged", // deprecation path connectStageChanged: "GeckoView:Tor:ConnectStageChanged", // new replacement path - connectError: "GeckoView:Tor:ConnectError", bootstrapProgress: "GeckoView:Tor:BootstrapProgress", bootstrapComplete: "GeckoView:Tor:BootstrapComplete", torLogs: "GeckoView:Tor:Logs", @@ -49,6 +48,7 @@ const ListenedEvents = Object.freeze({ quickstartGet: "GeckoView:Tor:QuickstartGet", quickstartSet: "GeckoView:Tor:QuickstartSet", regionNamesGet: "GeckoView:Tor:RegionNamesGet", + shouldShowTorConnectGet: "GeckoView:Tor:ShouldShowTorConnect", }); class TorAndroidIntegrationImpl { @@ -134,16 +134,6 @@ class TorAndroidIntegrationImpl { type: EmittedEvents.bootstrapComplete, }); break; - // TODO: Replace with StageChange stage.error. - case lazy.TorConnectTopics.Error: - lazy.EventDispatcher.instance.sendRequest({ - type: EmittedEvents.connectError, - code: subj.wrappedJSObject.code ?? "", - message: subj.wrappedJSObject.message ?? "", - phase: subj.wrappedJSObject.cause?.phase ?? "", - reason: subj.wrappedJSObject.cause?.reason ?? "", - }); - break; case lazy.TorProviderTopics.TorLog: lazy.EventDispatcher.instance.sendRequest({ type: EmittedEvents.torLogs, @@ -225,6 +215,9 @@ class TorAndroidIntegrationImpl { case ListenedEvents.regionNamesGet: callback?.onSuccess(lazy.TorConnect.getRegionNames()); return; + case ListenedEvents.shouldShowTorConnectGet: + callback?.onSuccess(lazy.TorConnect.shouldShowTorConnect()); + return; } callback?.onSuccess(); } catch (e) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/bf58fe… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/bf58fe… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser] Pushed new branch mullvad-browser-141.0a1-16.0-2
by brizental (@brizental) 04 Aug '25

04 Aug '25
brizental pushed new branch mullvad-browser-141.0a1-16.0-2 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.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 16
  • 17
  • 18
  • 19
  • 20
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.