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

January 2026

  • 1 participants
  • 115 discussions
[Git][tpo/applications/tor-browser][tor-browser-140.7.0esr-15.0-1] fixup! [android] Modify add-on support
by ma1 (@ma1) 26 Jan '26

26 Jan '26
ma1 pushed to branch tor-browser-140.7.0esr-15.0-1 at The Tor Project / Applications / Tor Browser Commits: 2b6f6d20 by hackademix at 2026-01-26T20:50:45+01:00 fixup! [android] Modify add-on support TB 44533: Install bundled NoScript extension at least once per build install - - - - - 3 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.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 Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt ===================================== @@ -115,15 +115,19 @@ object TorBrowserFeatures { ) } /** - * Install NoScript as a user WebExtension if we have not already done so. + * Install NoScript if we have not done it yet for this browser version. * AMO signature is checked, but automatic updates still need to be enabled. */ - if (!settings.noscriptInstalled) { + val extensionsVersion = + org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION + "-" + + org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID + "-" + + org.mozilla.fenix.BuildConfig.VCS_HASH + if (settings.extensionsVersion != extensionsVersion) { installNoScript( context, runtime, onSuccess = { - settings.noscriptInstalled = true + settings.extensionsVersion = extensionsVersion logger.debug("NoScript extension was installed successfully") }, onError = { throwable -> ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -2151,14 +2151,9 @@ class Settings(private val appContext: Context) : PreferencesHolder { default = false, ) - var noscriptInstalled by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_noscript_installed), - default = false - ) - - var noscriptUpdated by intPreference( - appContext.getPreferenceKey(R.string.pref_key_noscript_updated), - default = 0 + var extensionsVersion by stringPreference( + appContext.getPreferenceKey(R.string.pref_key_extensions_version), + default = "" ) var httpsEverywhereRemoved by booleanPreference( ===================================== mobile/android/fenix/app/src/main/res/values/preference_keys.xml ===================================== @@ -475,8 +475,7 @@ <string name="pref_key_setup_step_theme" translatable="false">pref_key_setup_step_theme</string> <string name="pref_key_setup_step_extensions" translatable="false">pref_key_setup_step_extensions</string> - <string name="pref_key_noscript_installed" translatable="false">pref_key_noscript_installed</string> - <string name="pref_key_noscript_updated" translatable="false">pref_key_noscript_updated</string> + <string name="pref_key_extensions_version" translatable="false">pref_key_extensions_version</string> <string name="pref_key_https_everywhere_removed" translatable="false">pref_key_https_everywhere_removed</string> <!-- Security Level Settings --> View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2b6f6d2… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2b6f6d2… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] fixup! [android] Modify add-on support
by ma1 (@ma1) 26 Jan '26

26 Jan '26
ma1 pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 3aaba973 by hackademix at 2026-01-26T20:40:28+01:00 fixup! [android] Modify add-on support TB 44533: Install bundled NoScript extension at least once per build install - - - - - 3 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.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 Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/TorBrowserFeatures.kt ===================================== @@ -115,15 +115,19 @@ object TorBrowserFeatures { ) } /** - * Install NoScript as a user WebExtension if we have not already done so. + * Install NoScript if we have not done it yet for this browser version. * AMO signature is checked, but automatic updates still need to be enabled. */ - if (!settings.noscriptInstalled) { + val extensionsVersion = + org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION + "-" + + org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID + "-" + + org.mozilla.fenix.BuildConfig.VCS_HASH + if (settings.extensionsVersion != extensionsVersion) { installNoScript( context, runtime, onSuccess = { - settings.noscriptInstalled = true + settings.extensionsVersion = extensionsVersion logger.debug("NoScript extension was installed successfully") }, onError = { throwable -> ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -2481,14 +2481,9 @@ class Settings( default = false, ) - var noscriptInstalled by booleanPreference( - appContext.getPreferenceKey(R.string.pref_key_noscript_installed), - default = false - ) - - var noscriptUpdated by intPreference( - appContext.getPreferenceKey(R.string.pref_key_noscript_updated), - default = 0 + var extensionsVersion by stringPreference( + appContext.getPreferenceKey(R.string.pref_key_extensions_version), + default = "" ) var httpsEverywhereRemoved by booleanPreference( ===================================== mobile/android/fenix/app/src/main/res/values/preference_keys.xml ===================================== @@ -523,8 +523,7 @@ <string name="pref_key_tab_manager_enhancements" translatable="false">pref_key_tab_manager_enhancements</string> <string name="pref_key_tab_manager_opening_animation" translatable="false">pref_key_tab_manager_opening_animation</string> - <string name="pref_key_noscript_installed" translatable="false">pref_key_noscript_installed</string> - <string name="pref_key_noscript_updated" translatable="false">pref_key_noscript_updated</string> + <string name="pref_key_extensions_version" translatable="false">pref_key_extensions_version</string> <string name="pref_key_https_everywhere_removed" translatable="false">pref_key_https_everywhere_removed</string> <!-- Security Level Settings --> View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/3aaba97… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/3aaba97… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] fixup! TB 42655 [android]: Implement "New circuit for this site" on Android
by Dan Ballard (@dan) 26 Jan '26

26 Jan '26
Dan Ballard pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: c7867cc3 by clairehurst at 2026-01-26T08:13:43-08:00 fixup! TB 42655 [android]: Implement "New circuit for this site" on Android Bug 44523: New circuit seems to have disappeared from 147 on Android - - - - - 5 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt ===================================== @@ -117,6 +117,9 @@ import org.mozilla.fenix.webcompat.middleware.DefaultWebCompatReporterRetrievalS import org.mozilla.fenix.webcompat.middleware.WebCompatInfoDeserializer import com.google.android.material.R as materialR +import mozilla.components.browser.engine.gecko.GeckoEngineSession +import android.util.Log + // EXPANDED_MIN_RATIO is used for BottomSheetBehavior.halfExpandedRatio(). // That value needs to be less than the PEEK_HEIGHT. // If EXPANDED_MIN_RATIO is greater than the PEEK_HEIGHT, then there will be @@ -785,6 +788,13 @@ class MenuDialogFragment : BottomSheetDialogFragment() { }, ) }, + onNewCircuitButtonClick = { + components.core.store.state.selectedTab?.let { + (it.engineState.engineSession as GeckoEngineSession).newTorCircuit() + components.useCases.sessionUseCases.reload.invoke(it.id) + dismiss() + } ?: Log.e("MenuDialogFragment", "selectedTab was null, tab and tor circuit not refreshed") + }, ) } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/compose/MainMenu.kt ===================================== @@ -169,6 +169,7 @@ fun MainMenu( extensionsMenuItemDescription: String?, moreSettingsSubmenu: @Composable () -> Unit, extensionSubmenu: @Composable () -> Unit, + onNewCircuitButtonClick: () -> Unit, ) { MenuFrame( contentModifier = Modifier @@ -290,6 +291,7 @@ fun MainMenu( extensionsMenuItemDescription = extensionsMenuItemDescription, moreSettingsSubmenu = moreSettingsSubmenu, extensionSubmenu = extensionSubmenu, + onNewCircuitButtonClick = onNewCircuitButtonClick, ) } @@ -363,6 +365,7 @@ private fun ToolsAndActionsMenuGroup( extensionsMenuItemDescription: String?, moreSettingsSubmenu: @Composable () -> Unit, extensionSubmenu: @Composable () -> Unit, + onNewCircuitButtonClick: (() -> Unit)?, ) { MenuGroup { val labelId = R.string.browser_menu_desktop_site @@ -380,6 +383,12 @@ private fun ToolsAndActionsMenuGroup( menuItemState = if (isPdf) MenuItemState.DISABLED else MenuItemState.ENABLED } + MenuItem( + label = stringResource(R.string.library_new_circuit), + beforeIconPainter = painterResource(R.drawable.new_circuit), + onClick = onNewCircuitButtonClick, + ) + if (isBookmarked) { MenuItem( label = stringResource(id = R.string.browser_menu_edit_bookmark), @@ -764,6 +773,7 @@ private fun MenuDialogPreview() { onShareButtonClick = {}, moreSettingsSubmenu = {}, extensionSubmenu = {}, + onNewCircuitButtonClick = {}, ) } } @@ -853,6 +863,7 @@ private fun MenuDialogPrivatePreview( onWebExtensionMenuItemClick = {}, ) }, + onNewCircuitButtonClick = {}, ) } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt ===================================== @@ -453,6 +453,7 @@ class DefaultBrowserToolbarMenuController( navController.navigateSafe(R.id.browserFragment, directions) } + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) ToolbarMenu.Item.NewTorCircuit -> { currentSession?.let { sessionUseCases.reload.invoke(it.id) @@ -612,6 +613,7 @@ class DefaultBrowserToolbarMenuController( ), ) + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) ToolbarMenu.Item.NewTorCircuit -> { /* Tor doesn't use telemetry and therefore this doesn't need to be implemented */ } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt ===================================== @@ -228,6 +228,7 @@ open class DefaultToolbarMenu( onItemTapped.invoke(ToolbarMenu.Item.NewTab) } + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) private val newCircuitItem = BrowserMenuImageText( context.getString(R.string.library_new_circuit), R.drawable.new_circuit, @@ -409,6 +410,7 @@ open class DefaultToolbarMenu( listOfNotNull( if (shouldUseBottomToolbar) null else menuToolbar, newTabItem, + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) BrowserMenuDivider(), newCircuitItem, BrowserMenuDivider(), ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt ===================================== @@ -70,6 +70,7 @@ interface ToolbarMenu { object Passwords : Item() object Downloads : Item() object NewTab : Item() + // Remove once moz deletes this old UI (Toolbar Menu is being replaced by MainMenu) object NewTorCircuit : Item() } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/c7867cc… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/c7867cc… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] fixup! BB 43564: Modify ./mach bootstrap for Base Browser
by brizental (@brizental) 26 Jan '26

26 Jan '26
brizental pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 2bd84cd7 by Beatriz Rizental at 2026-01-26T16:12:43+01:00 fixup! BB 43564: Modify ./mach bootstrap for Base Browser - - - - - 1 changed file: - build/moz.configure/bootstrap.configure Changes: ===================================== build/moz.configure/bootstrap.configure ===================================== @@ -198,7 +198,7 @@ def bootstrap_path(path, **kwargs): path_prefix = path_parts.pop(0) # Small hack because extensions are inside the browser folder. - if path_parts[0] in ("noscript", ): + if path_parts[0] in ("noscript",): path_prefix = "browser" def try_tbb_bootstrap(exists): View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2bd84cd… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2bd84cd… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] TB 41822: Hide the default browser settings.
by henry (@henry) 26 Jan '26

26 Jan '26
henry pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 95c3241f by Henry Wilkes at 2026-01-26T14:59:34+00:00 TB 41822: Hide the default browser settings. - - - - - 1 changed file: - browser/components/preferences/main.js Changes: ===================================== browser/components/preferences/main.js ===================================== @@ -1187,6 +1187,10 @@ const DefaultBrowserHelper = { * @type {boolean} */ get canCheck() { + if (AppConstants.BASE_BROWSER_VERSION) { + // Disabled for Tor Browser. tor-browser#44343 and tor-browser#41822. + return false; + } return ( this.shellSvc && /** View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/95c3241… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/95c3241… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] fixup! TB 43564: Modify ./mach bootstrap for Tor Browser
by brizental (@brizental) 26 Jan '26

26 Jan '26
brizental pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 2241fb56 by Beatriz Rizental at 2026-01-26T11:27:33-03:00 fixup! TB 43564: Modify ./mach bootstrap for Tor Browser Function name update and reformatting - - - - - 1 changed file: - python/mozbuild/mozbuild/backend/base.py Changes: ===================================== python/mozbuild/mozbuild/backend/base.py ===================================== @@ -282,23 +282,12 @@ class BuildBackend(LoggingMixin): if app == "mobile/android": # Set up NoScript extension # We put it in the srcdir... It will be moved to the APK in the gradle build. - if noscript_location: - noscript_target = ( - Path(config.topsrcdir) - / "mobile/android/fenix/app/src/main/assets/extensions" - / noscript_target_filename - ) - self.log( - logging.INFO, - "_setup_tor_browser_environment", - { - "noscript_location": noscript_location, - "noscript_target": str(noscript_target), - }, - "Creating symlink for NoScript from {noscript_location} to {noscript_target}", - ) - - _infallible_symlink(noscript_location, noscript_target) + self._setup_extension_symlink( + noscript_location, + noscript_target_filename, + Path(config.topsrcdir) + / "mobile/android/fenix/app/src/main/assets/extensions", + ) if app == "browser": tbdir = Path(config.topobjdir) / "dist" / "bin" @@ -362,13 +351,15 @@ class BuildBackend(LoggingMixin): paths["tor_config"].mkdir(parents=True, exist_ok=True) for file in ["geoip", "geoip6", "torrc-defaults"]: target = paths["tor_config"] / file - _infallible_symlink(expert_bundle_location / "data" / file, target) + self._create_or_replace_symlink( + expert_bundle_location / "data" / file, target + ) # Set up Conjure documentation conjust_docs_location = paths["docs"] / "conjure" conjust_docs_location.mkdir(parents=True, exist_ok=True) conjure_readme = conjust_docs_location / "README.CONJURE.md" - _infallible_symlink( + self._create_or_replace_symlink( expert_bundle_location / "tor/pluggable_transports/README.CONJURE.md", conjure_readme, @@ -385,21 +376,21 @@ class BuildBackend(LoggingMixin): # We only want the PT executables. if os.access(file, os.X_OK) or file.suffix.lower() == ".exe": target = pluggable_transports_target / file.name - _infallible_symlink(file, target) + self._create_or_replace_symlink(file, target) # Setup Tor binary for item in Path(expert_bundle_location / "tor").iterdir(): target = paths["tor_bin"] / item.name if item.is_file(): - _infallible_symlink(item, target) + self._create_or_replace_symlink(item, target) # Set up licenses licenses_location = paths["docs"] / "Licenses" licenses_location.mkdir(parents=True, exist_ok=True) for item in (expert_bundle_location / "docs").iterdir(): target = licenses_location / item.name - _infallible_symlink(item, target) + self._create_or_replace_symlink(item, target) def post_build(self, config, output, jobs, verbose, status): """Called late during 'mach build' execution, after `build(...)` has finished. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2241fb5… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/2241fb5… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-147.0a1-16.0-2] fixup! BB 43564: Modify ./mach bootstrap for Base Browser
by brizental (@brizental) 26 Jan '26

26 Jan '26
brizental pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: b447dfc5 by Beatriz Rizental at 2026-01-26T11:21:23-03:00 fixup! BB 43564: Modify ./mach bootstrap for Base Browser Generalize extension symlinking code. - - - - - 3 changed files: - build/moz.configure/basebrowser-resources.configure - build/moz.configure/bootstrap.configure - python/mozbuild/mozbuild/backend/base.py Changes: ===================================== build/moz.configure/basebrowser-resources.configure ===================================== @@ -27,7 +27,7 @@ option( "noscript", no_unpack=True, when=depends("--with-noscript")(lambda x: not x) ), ) -@checking("for noscript") +@checking("for noscript extension") @imports(_from="pathlib", _import="Path") def noscript(value, mozbuild_state_path, _bootstrapped): if value: ===================================== build/moz.configure/bootstrap.configure ===================================== @@ -197,8 +197,8 @@ def bootstrap_path(path, **kwargs): if path_parts[0] == "clang-tools": path_prefix = path_parts.pop(0) - # Small hack because noscript is inside the browser folder. - if path_parts[0] == "noscript": + # Small hack because extensions are inside the browser folder. + if path_parts[0] in ("noscript", ): path_prefix = "browser" def try_tbb_bootstrap(exists): ===================================== python/mozbuild/mozbuild/backend/base.py ===================================== @@ -243,29 +243,42 @@ class BuildBackend(LoggingMixin): with open(mozpath.join(dir, ".purgecaches"), "w") as f: f.write("\n") - def _setup_tor_browser_environment(self, config): + def _create_or_replace_symlink(self, src, dst): + try: + os.symlink(src, dst) + except OSError as e: + if e.errno == errno.EEXIST: + # If the symlink already exists, remove it and try again. + os.remove(dst) + os.symlink(src, dst) + else: + return + + def _setup_extension_symlink(self, location, target_filename, exts_path): + if not location: + return + + target = exts_path / target_filename + + self.log( + logging.INFO, + "_setup_extension_symlink", + { + "location": location, + "target": str(target), + }, + "Creating symlink for extension from {location} to {target}", + ) + + exts_path.mkdir(parents=True, exist_ok=True) + self._create_or_replace_symlink(location, target) + + def _setup_base_browser_environment(self, config): app = config.substs["MOZ_BUILD_APP"] noscript_target_filename = "{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi" noscript_location = config.substs.get("NOSCRIPT") - def _infallible_symlink(src, dst): - try: - os.symlink(src, dst) - except OSError as e: - if e.errno == errno.EEXIST: - # If the symlink already exists, remove it and try again. - os.remove(dst) - os.symlink(src, dst) - else: - self.log( - logging.ERROR, - "_setup_tor_browser_environment", - {}, - "Error creating symlink.", - ) - return - if app == "mobile/android": # Set up NoScript extension # We put it in the srcdir... It will be moved to the APK in the gradle build. @@ -312,7 +325,7 @@ class BuildBackend(LoggingMixin): if fonts_location: self.log( logging.INFO, - "_setup_tor_browser_environment", + "_setup_base_browser_environment", { "fonts_location": fonts_location, "fonts_target": str(paths["fonts"]), @@ -322,23 +335,13 @@ class BuildBackend(LoggingMixin): for file in Path(fonts_location).iterdir(): target = paths["fonts"] / file.name - _infallible_symlink(file, target) + self._create_or_replace_symlink(file, target) - # Set up NoScript extension - if noscript_location: - noscript_target = paths["exts"] / noscript_target_filename - self.log( - logging.INFO, - "_setup_tor_browser_environment", - { - "noscript_location": noscript_location, - "noscript_target": str(noscript_target), - }, - "Creating symlink for NoScript from {noscript_location} to {noscript_target}", - ) - - paths["exts"].mkdir(parents=True, exist_ok=True) - _infallible_symlink(noscript_location, noscript_target) + self._setup_extension_symlink( + noscript_location, + noscript_target_filename, + paths["exts"], + ) expert_bundle_location = config.substs.get("TOR_EXPERT_BUNDLE") if expert_bundle_location: @@ -417,7 +420,7 @@ class BuildBackend(LoggingMixin): self._write_purgecaches(config) if status == 0: - self._setup_tor_browser_environment(config) + self._setup_base_browser_environment(config) return status View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/b447dfc… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/b447dfc… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-147.0a1-16.0-2] fixup! BB 43564: Modify ./mach bootstrap for Base Browser
by brizental (@brizental) 26 Jan '26

26 Jan '26
brizental pushed to branch base-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 9882c796 by Beatriz Rizental at 2026-01-26T11:13:37-03:00 fixup! BB 43564: Modify ./mach bootstrap for Base Browser Generalize extension symlinking code. - - - - - 3 changed files: - build/moz.configure/basebrowser-resources.configure - build/moz.configure/bootstrap.configure - python/mozbuild/mozbuild/backend/base.py Changes: ===================================== build/moz.configure/basebrowser-resources.configure ===================================== @@ -27,7 +27,7 @@ option( "noscript", no_unpack=True, when=depends("--with-noscript")(lambda x: not x) ), ) -@checking("for noscript") +@checking("for noscript extension") @imports(_from="pathlib", _import="Path") def noscript(value, mozbuild_state_path, _bootstrapped): if value: ===================================== build/moz.configure/bootstrap.configure ===================================== @@ -197,8 +197,8 @@ def bootstrap_path(path, **kwargs): if path_parts[0] == "clang-tools": path_prefix = path_parts.pop(0) - # Small hack because noscript is inside the browser folder. - if path_parts[0] == "noscript": + # Small hack because extensions are inside the browser folder. + if path_parts[0] in ("noscript", ): path_prefix = "browser" def try_tbb_bootstrap(exists): ===================================== python/mozbuild/mozbuild/backend/base.py ===================================== @@ -243,23 +243,42 @@ class BuildBackend(LoggingMixin): with open(mozpath.join(dir, ".purgecaches"), "w") as f: f.write("\n") - def _setup_tor_browser_environment(self, config): + def _create_or_replace_symlink(self, src, dst): + try: + os.symlink(src, dst) + except OSError as e: + if e.errno == errno.EEXIST: + # If the symlink already exists, remove it and try again. + os.remove(dst) + os.symlink(src, dst) + else: + return + + def _setup_extension_symlink(self, location, target_filename, exts_path): + if not location: + return + + target = exts_path / target_filename + + self.log( + logging.INFO, + "_setup_extension_symlink", + { + "location": location, + "target": str(target), + }, + "Creating symlink for extension from {location} to {target}", + ) + + exts_path.mkdir(parents=True, exist_ok=True) + self._create_or_replace_symlink(location, target) + + def _setup_base_browser_environment(self, config): app = config.substs["MOZ_BUILD_APP"] noscript_target_filename = "{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi" noscript_location = config.substs.get("NOSCRIPT") - def _infallible_symlink(src, dst): - try: - os.symlink(src, dst) - except OSError as e: - if e.errno == errno.EEXIST: - # If the symlink already exists, remove it and try again. - os.remove(dst) - os.symlink(src, dst) - else: - return - if app == "browser": tbdir = Path(config.topobjdir) / "dist" / "bin" @@ -281,7 +300,7 @@ class BuildBackend(LoggingMixin): if fonts_location: self.log( logging.INFO, - "_setup_tor_browser_environment", + "_setup_base_browser_environment", { "fonts_location": fonts_location, "fonts_target": str(paths["fonts"]), @@ -291,23 +310,13 @@ class BuildBackend(LoggingMixin): for file in Path(fonts_location).iterdir(): target = paths["fonts"] / file.name - _infallible_symlink(file, target) - - # Set up NoScript extension - if noscript_location: - noscript_target = paths["exts"] / noscript_target_filename - self.log( - logging.INFO, - "_setup_tor_browser_environment", - { - "noscript_location": noscript_location, - "noscript_target": str(noscript_target), - }, - "Creating symlink for NoScript from {noscript_location} to {noscript_target}", - ) + self._create_or_replace_symlink(file, target) - paths["exts"].mkdir(parents=True, exist_ok=True) - _infallible_symlink(noscript_location, noscript_target) + self._setup_extension_symlink( + noscript_location, + noscript_target_filename, + paths["exts"], + ) def post_build(self, config, output, jobs, verbose, status): """Called late during 'mach build' execution, after `build(...)` has finished. @@ -328,7 +337,7 @@ class BuildBackend(LoggingMixin): self._write_purgecaches(config) if status == 0: - self._setup_tor_browser_environment(config) + self._setup_base_browser_environment(config) return status View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/9882c79… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/9882c79… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-147.0a1-16.0-2] 2 commits: fixup! BB 43564: Modify ./mach bootstrap for Base Browser
by brizental (@brizental) 26 Jan '26

26 Jan '26
brizental pushed to branch mullvad-browser-147.0a1-16.0-2 at The Tor Project / Applications / Mullvad Browser Commits: e913cc4c by Beatriz Rizental at 2026-01-26T10:35:04-03:00 fixup! BB 43564: Modify ./mach bootstrap for Base Browser Generalize extension symlinking code. - - - - - d3c6d733 by Beatriz Rizental at 2026-01-26T11:09:02-03:00 MB 43564: Modify ./mach bootstrap for Mullvad Browser - - - - - 5 changed files: - build/moz.configure/basebrowser-resources.configure - build/moz.configure/bootstrap.configure - python/mozboot/mozboot/bootstrap.py - python/mozbuild/mozbuild/backend/base.py - python/mozbuild/mozbuild/tbbutils.py Changes: ===================================== build/moz.configure/basebrowser-resources.configure ===================================== @@ -27,7 +27,7 @@ option( "noscript", no_unpack=True, when=depends("--with-noscript")(lambda x: not x) ), ) -@checking("for noscript") +@checking("for noscript extension") @imports(_from="pathlib", _import="Path") def noscript(value, mozbuild_state_path, _bootstrapped): if value: @@ -49,6 +49,84 @@ def noscript(value, mozbuild_state_path, _bootstrapped): set_config("NOSCRIPT", noscript) +option( + "--with-ublock", + env="UBLOCK", + nargs=1, + default=None, + help="Path to ublock .xpi extension archive.", +) + + +@depends( + "--with-ublock", + mozbuild_state_path, + bootstrap_path( + "ublock", no_unpack=True, when=depends("--with-ublock")(lambda x: not x) + ), +) +@checking("for ublock extension") +@imports(_from="pathlib", _import="Path") +def ublock(value, mozbuild_state_path, _bootstrapped): + if value: + path = Path(value[0]) + if path.is_file() and path.suffix == ".xpi": + return value[0] + else: + die("--with-ublock must be an existing .xpi file") + + bootstrapped_location = Path(mozbuild_state_path) / "browser" + for file in bootstrapped_location.glob(f"*.xpi"): + if "ublock" in file.name: + return str(bootstrapped_location / file) + + # ublock is not required for building. + return None + + +set_config("UBLOCK", ublock) + + +option( + "--with-mullvad-extension", + env="MULLVAD_EXTENSION", + nargs=1, + default=None, + help="Path to mullvad extension .xpi extension archive.", +) + + +@depends( + "--with-mullvad-extension", + mozbuild_state_path, + bootstrap_path( + "mullvad-browser-extension", + no_unpack=True, + when=depends("--with-mullvad-extension")(lambda x: not x), + ), +) +@checking("for mullvad extension") +@imports(_from="pathlib", _import="Path") +def mullvad_extension(value, mozbuild_state_path, _bootstrapped): + if value: + path = Path(value[0]) + if path.is_file() and path.suffix == ".xpi": + return value[0] + else: + die("--with-mullvad-extension must be an existing .xpi file") + + bootstrapped_location = Path(mozbuild_state_path) / "browser" + for file in bootstrapped_location.glob(f"*.xpi"): + if "mullvad-browser-extension" in file.name: + return str(bootstrapped_location / file) + + # mullvad extension is not required for building. + return None + + +set_config("MULLVAD_EXTENSION", mullvad_extension) + + option( "--with-tor-browser-fonts", env="TOR_BROWSER_FONTS", ===================================== build/moz.configure/bootstrap.configure ===================================== @@ -197,8 +197,12 @@ def bootstrap_path(path, **kwargs): if path_parts[0] == "clang-tools": path_prefix = path_parts.pop(0) - # Small hack because noscript is inside the browser folder. - if path_parts[0] == "noscript": + # Small hack because extensions are inside the browser folder. + if path_parts[0] in ( + "noscript", + "ublock", + "mullvad-browser-extension", + ): path_prefix = "browser" def try_tbb_bootstrap(exists): ===================================== python/mozboot/mozboot/bootstrap.py ===================================== @@ -49,28 +49,28 @@ Note on Artifact Mode: Artifact builds download prebuilt C++ components rather than building them locally. Artifact builds are faster! -Artifact builds are recommended for people working on Tor Browser or +Artifact builds are recommended for people working on Mullvad Browser or Base Browser for Android frontends, or the GeckoView Java API. They are unsuitable for those working on C++ code. For more information see: https://firefox-source-docs.mozilla.org/contributing/build/artifact_builds.…. -# Note to Base Browser developers +# Note to Mullvad Browser developers This is still highly experimental. Expect bugs! -Please choose the version of Base Browser you want to build (see note above): +Please choose the version of Mullvad Browser you want to build (see note above): %s Your choice: """ APPLICATIONS = OrderedDict( [ - ("Base Browser for Desktop Artifact Mode", "browser_artifact_mode"), - ("Base Browser for Desktop", "browser"), + ("Mullvad Browser for Desktop Artifact Mode", "browser_artifact_mode"), + ("Mullvad Browser for Desktop", "browser"), ( - "GeckoView/Base Browser for Android Artifact Mode", + "GeckoView/Mullvad Browser for Android Artifact Mode", "mobile_android_artifact_mode", ), - ("GeckoView/Base Browser for Android", "mobile_android"), + ("GeckoView/Mullvad Browser for Android", "mobile_android"), ("SpiderMonkey JavaScript engine", "js"), ] ) ===================================== python/mozbuild/mozbuild/backend/base.py ===================================== @@ -243,22 +243,47 @@ class BuildBackend(LoggingMixin): with open(mozpath.join(dir, ".purgecaches"), "w") as f: f.write("\n") - def _setup_tor_browser_environment(self, config): + def _create_or_replace_symlink(self, src, dst): + try: + os.symlink(src, dst) + except OSError as e: + if e.errno == errno.EEXIST: + # If the symlink already exists, remove it and try again. + os.remove(dst) + os.symlink(src, dst) + else: + return + + def _setup_extension_symlink(self, location, target_filename, exts_path): + if not location: + return + + target = exts_path / target_filename + + self.log( + logging.INFO, + "_setup_extension_symlink", + { + "location": location, + "target": str(target), + }, + "Creating symlink for extension from {location} to {target}", + ) + + exts_path.mkdir(parents=True, exist_ok=True) + self._create_or_replace_symlink(location, target) + + def _setup_base_browser_environment(self, config): app = config.substs["MOZ_BUILD_APP"] noscript_target_filename = "{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi" noscript_location = config.substs.get("NOSCRIPT") - def _infallible_symlink(src, dst): - try: - os.symlink(src, dst) - except OSError as e: - if e.errno == errno.EEXIST: - # If the symlink already exists, remove it and try again. - os.remove(dst) - os.symlink(src, dst) - else: - return + ublock_target_filename = "uBlock0(a)raymondhill.net.xpi" + ublock_location = config.substs.get("UBLOCK") + + mullvad_extension_target_filename = "{d19a89b9-76c1-4a61-bcd4-49e8de916403}.xpi" + mullvad_extension_location = config.substs.get("MULLVAD_EXTENSION") if app == "browser": tbdir = Path(config.topobjdir) / "dist" / "bin" @@ -281,7 +306,7 @@ class BuildBackend(LoggingMixin): if fonts_location: self.log( logging.INFO, - "_setup_tor_browser_environment", + "_setup_base_browser_environment", { "fonts_location": fonts_location, "fonts_target": str(paths["fonts"]), @@ -291,23 +316,25 @@ class BuildBackend(LoggingMixin): for file in Path(fonts_location).iterdir(): target = paths["fonts"] / file.name - _infallible_symlink(file, target) + self._create_or_replace_symlink(file, target) - # Set up NoScript extension - if noscript_location: - noscript_target = paths["exts"] / noscript_target_filename - self.log( - logging.INFO, - "_setup_tor_browser_environment", - { - "noscript_location": noscript_location, - "noscript_target": str(noscript_target), - }, - "Creating symlink for NoScript from {noscript_location} to {noscript_target}", - ) + self._setup_extension_symlink( + noscript_location, + noscript_target_filename, + paths["exts"], + ) - paths["exts"].mkdir(parents=True, exist_ok=True) - _infallible_symlink(noscript_location, noscript_target) + self._setup_extension_symlink( + ublock_location, + ublock_target_filename, + paths["exts"], + ) + + self._setup_extension_symlink( + mullvad_extension_location, + mullvad_extension_target_filename, + paths["exts"], + ) def post_build(self, config, output, jobs, verbose, status): """Called late during 'mach build' execution, after `build(...)` has finished. @@ -328,7 +355,7 @@ class BuildBackend(LoggingMixin): self._write_purgecaches(config) if status == 0: - self._setup_tor_browser_environment(config) + self._setup_base_browser_environment(config) return status ===================================== python/mozbuild/mozbuild/tbbutils.py ===================================== @@ -22,10 +22,12 @@ def list_files_http(url): return links -TOR_BROWSER_BUILD_ARTIFACTS = [ - # Tor Browser Build-only artifacts, these artifacts are not common with Firefox. +MULLVAD_BROWSER_BUILD_ARTIFACTS = [ + # Mullvad Browser Build-only artifacts, these artifacts are not common with Firefox. + "mullvad-browser-extension", "noscript", "fonts", + "ublock", ] # Mapping of artifacts from taskcluster to tor-browser-build. @@ -55,7 +57,7 @@ def get_artifact_index(artifact_path): def get_artifact_name(original_artifact_name, host): # These are not build artifacts, they are pre-built artifacts to be added to the final build, # therefore this check can come before the host check. - if original_artifact_name in TOR_BROWSER_BUILD_ARTIFACTS: + if original_artifact_name in MULLVAD_BROWSER_BUILD_ARTIFACTS: return original_artifact_name if host != "linux64": View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/58… -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/58… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][main] Bug 41699: Keep only arch-specifc prefs on Android.
by Pier Angelo Vendrame (@pierov) 26 Jan '26

26 Jan '26
Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build Commits: c89ca221 by Pier Angelo Vendrame at 2026-01-26T15:02:44+01:00 Bug 41699: Keep only arch-specifc prefs on Android. Currently, our APKs contain preference files for all the architectures. While they are not very big, they are completely useless and, in our situation, every saved byte matters. - - - - - 1 changed file: - projects/browser/build.android Changes: ===================================== projects/browser/build.android ===================================== @@ -70,6 +70,17 @@ function generate_apk { -name '*.js' -or -name '*.mjs' \ -exec /var/tmp/dist/uglifyjs/bin/uglifyjs --in-situ {} \; [% END -%] + [% IF !c("var/android-armv7") -%] + rm -rf armeabi-v7a + [% END -%] + [% IF !c("var/android-aarch64") -%] + rm -rf arm64-v8a + [% END -%] + [% IF !c("var/android-x86_64") -%] + rm -rf x86_64 + [% END -%] + # Notice: we take for granted we never rewrite on the source archive! + # Be sure to change any `rm` with the appropriate command, shall this change. [% c('zip', { zip_src => [ '.' ], zip_args => '-0 ../assets/omni.ja', 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
  • ← Newer
  • 1
  • 2
  • 3
  • 4
  • ...
  • 12
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.