Pier Angelo Vendrame pushed to branch tor-browser-152.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: e7b0489a by Pier Angelo Vendrame at 2026-06-01T18:06:43+02:00 fixup! TB 40933: Add tor-launcher functionality TB 44991: Improve the no-authentication handling on the control port. - - - - - 7309a181 by Dan Ballard at 2026-06-01T18:13:33+02:00 fixup! [android] Disable features and functionality TB 44323: Audit prefs 128-140 in android - - - - - 14c9fd38 by Dan Ballard at 2026-06-01T18:13:36+02:00 fixup! TB 41972: [android] Disable Mozilla onboarding TB 44323: Audit prefs 128 to 140 - - - - - 8a8b65ed by Dan Ballard at 2026-06-03T10:18:19+02:00 fixup! TB 44027: [android] Update PBM lockscreen TB 44323: Audit prefs 2128 to 140 - - - - - b3b67947 by clairehurst at 2026-06-03T10:18:23+02:00 fixup! [android] Implement Android-native Connection Assist UI Fix colors and bold text - - - - - 7f21c905 by clairehurst at 2026-06-03T10:18:24+02:00 fixup! TB 40026: [android] Implement Security Level settings on Android. - - - - - 5c3bfce1 by Beatriz Rizental at 2026-06-03T10:18:29+02:00 fixup! Add CI for Base Browser Bug 44990: Fix dubious ownership CI issue - - - - - 23d5b38e by Beatriz Rizental at 2026-06-03T10:18:29+02:00 fixup! Add CI for Tor Browser Bug 44990: Fix permissions issues in container - - - - - 239f4b05 by Beatriz Rizental at 2026-06-03T10:18:30+02:00 fixup! Add CI for Base Browser No bug: Drop logic that fetches pipelines from forks. That is not supported anymore after https://gitlab.torproject.org/tpo/tpa/team/-/work_items/42594#note_3411352 - - - - - dc70ecda by Beatriz Rizental at 2026-06-03T10:18:30+02:00 fixup! Add CI for Tor Browser Update build-image container - - - - - d0e9391d by Beatriz Rizental at 2026-06-03T10:18:31+02:00 fixup! Add CI for Base Browser This reverts commit 1d1ea9c7bfa8930b5bbc928a70054c4971562347. - - - - - 1f29f770 by Beatriz Rizental at 2026-06-03T10:18:31+02:00 fixup! [android] Override settings Bug 44917: Disable ads client for all channels - - - - - e7971e7d by Pier Angelo Vendrame at 2026-06-03T10:18:31+02:00 fixup! TB 40562: Added Tor Browser preferences to 000-tor-browser.js TB 42436: Support multi-fronts for Moat. - - - - - 1f0e24f2 by Pier Angelo Vendrame at 2026-06-03T10:18:32+02:00 fixup! Lox integration TB 42436: Support multi-fronts for Moat. - - - - - 612d5910 by Pier Angelo Vendrame at 2026-06-03T10:18:32+02:00 fixup! TB 40597: Implement TorSettings module TB 42436: Support multi-fronts for Moat. - - - - - f3d3808f by Henry Wilkes at 2026-06-03T10:18:33+02:00 fixup! TB 40701: Add security warning when downloading a file TB 45005: Rename arrowpanel CSS variable. - - - - - b3ce8889 by Henry Wilkes at 2026-06-03T10:18:33+02:00 fixup! TB 41600: Add a tor circuit display panel. TB 45005: Rename arrowpanel CSS variable. - - - - - c5061ebc by clairehurst at 2026-06-03T10:18:34+02:00 fixup! [android] Disable features and functionality Bug 45031: Disable AI features for android - - - - - 07ea23e2 by clairehurst at 2026-06-03T10:25:02+02:00 fixup! [android] Rename as Tor Browser Bug 45031: Disable AI features on Android - - - - - fcc28e78 by hackademix at 2026-06-03T10:50:46+02:00 fixup! BB 41459: WebRTC fails to build under mingw (Part 5) Fix for 151 bustage from Bug 2023271 - - - - - 30 changed files: - .gitlab/ci/containers/base/Containerfile - .gitlab/ci/jobs/update-containers.yml - .gitlab/ci/mixins.yml - browser/app/profile/000-tor-browser.js - browser/components/downloads/content/downloads.css - browser/components/torcircuit/content/torCircuitPanel.css - dom/media/webrtc/transport/nricestunaddr.cpp - mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt - mobile/android/android-components/components/concept/ai-controls/src/main/java/mozilla/components/concept/ai/controls/AIFeatureBlock.kt - mobile/android/android-components/components/lib/ai-controls/src/main/java/mozilla/components/lib/ai/controls/AIFeatureBlockStorage.kt - mobile/android/fenix/app/nimbus.fml.yaml - mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png - mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorSecurityLevelFragment.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsAIControllableFeature.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsEnabledSettings.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/settings/TranslationsSettingsState.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt - mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png - mobile/android/fenix/app/src/main/res/layout/fragment_tor_security_level_preferences.xml - mobile/android/fenix/app/src/main/res/values/colors.xml - mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png - mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png - toolkit/components/lox/Lox.sys.mjs - toolkit/components/tor-launcher/TorControlPort.sys.mjs - toolkit/components/tor-launcher/TorProvider.sys.mjs - toolkit/modules/DomainFrontedRequests.sys.mjs - toolkit/modules/Moat.sys.mjs Changes: ===================================== .gitlab/ci/containers/base/Containerfile ===================================== @@ -22,18 +22,27 @@ RUN cd tor-browser && \ yes | MOZBUILD_STATE_PATH=/var/tmp/mozbuild ./mach bootstrap --application-choice "$APPLICATION_CHOICE" && \ cd .. -ENV PATH="/var/tmp/mozbuild/clang/bin:/root/.cargo/bin:$PATH" +RUN rm -rf tor-browser && \ + rm -rf /var/lib/apt/lists/* && \ + apt-get clean && \ + rm -rf /var/tmp/mozbuild/toolchains && \ + rm -rf /var/tmp/mozbuild/indices && \ + rm -rf /var/tmp/mozbuild/android-device && \ + rm -rf /var/root/.cargo && \ + rm -rf /var/root/.rustup + +RUN adduser --uid 1000 --disabled-password --gecos "" gitlab-runner && \ + chown -R 1000:1000 /var/tmp/mozbuild/ + +USER gitlab-runner +WORKDIR /home/gitlab-runner +# Install Rust for the gitlab-runner user. +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +ENV PATH="/var/tmp/mozbuild/clang/bin:/home/gitlab-runner/.cargo/bin:$PATH" RUN echo "$APPLICATION_CHOICE" | grep -qi android && \ rustup target add armv7-linux-androideabi \ aarch64-linux-android \ i686-linux-android \ x86_64-linux-android \ || true - -RUN rm -rf tor-browser && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* && \ - rm -rf /var/tmp/mozbuild/toolchains && \ - rm -rf /var/tmp/mozbuild/indices && \ - rm -rf /var/tmp/mozbuild/android-device ===================================== .gitlab/ci/jobs/update-containers.yml ===================================== @@ -1,7 +1,7 @@ build-image: stage: update-container-images interruptible: true - image: containers.torproject.org/tpo/tpa/base-images/podman:bookworm + image: containers.torproject.org/tpo/tpa/base-images/podman:trixie parallel: matrix: - PLATFORM: desktop ===================================== .gitlab/ci/mixins.yml ===================================== @@ -2,7 +2,12 @@ variables: GIT_STRATEGY: "none" FETCH_TIMEOUT: 180 # 3 minutes + + GIT_CONFIG_GLOBAL: "/tmp/gitconfig" before_script: + - | + echo "[safe]" > "$GIT_CONFIG_GLOBAL" + echo " directory = *" >> "$GIT_CONFIG_GLOBAL" - git init - git remote add local "$LOCAL_REPO_PATH" - | ===================================== browser/app/profile/000-tor-browser.js ===================================== @@ -126,8 +126,7 @@ pref("extensions.torlauncher.torrc_path", ""); pref("extensions.torlauncher.tordatadir_path", ""); // BridgeDB-related preferences (used for Moat). -pref("extensions.torlauncher.bridgedb_front", "vuejs.org"); -pref("extensions.torlauncher.bridgedb_reflector", "https://bespoke-strudel-c243cc.netlify.app"); +pref("extensions.torlauncher.bridgedb_targets", "https://1723079976.rsc.cdn77.org|cdn.zk.mk+www.cdn77.com"); pref("extensions.torlauncher.moat_service", "https://bridges.torproject.org/moat"); // Log levels ===================================== browser/components/downloads/content/downloads.css ===================================== @@ -96,7 +96,7 @@ } #downloadsPanelTorWarning { - margin-block-end: var(--arrowpanel-menuitem-padding-block); + margin-block-end: var(--panel-menuitem-padding-block); } #downloadsPanelTorWarningWrapper { ===================================== browser/components/torcircuit/content/torCircuitPanel.css ===================================== @@ -61,7 +61,7 @@ #tor-circuit-alias:not([hidden]) { /* Same as padding for .panel-header */ - margin-block-start: var(--arrowpanel-menuitem-margin-inline); + margin-block-start: var(--panel-menuitem-margin-inline); display: flex; align-items: center; } @@ -84,9 +84,9 @@ /* May grow larger than 480px if we have a long domain name or ip address. */ min-width: 480px; /* Line up with the button at the bottom of the panel. */ - margin: var(--arrowpanel-menuitem-margin); - padding: var(--arrowpanel-menuitem-padding); - gap: var(--arrowpanel-menuitem-padding-block); + margin: var(--panel-menuitem-margin); + padding: var(--panel-menuitem-padding); + gap: var(--panel-menuitem-padding-block); } #tor-circuit-node-list-name, @@ -96,7 +96,7 @@ #tor-circuit-node-list { list-style: none; - padding-inline-start: var(--arrowpanel-menuitem-margin-inline); + padding-inline-start: var(--panel-menuitem-margin-inline); /* Do not allow an item to wrap since this would break the circuit diagram. */ white-space: nowrap; } ===================================== dom/media/webrtc/transport/nricestunaddr.cpp ===================================== @@ -27,8 +27,8 @@ NrIceStunAddr::NrIceStunAddr(const nr_local_addr* addr) fqdn_(addr->addr.fqdn), is_proxied_(addr->addr.is_proxied), tls_(addr->addr.tls), - interface_type_(static_cast<InterfaceType>(addr->interface.type)), - estimated_speed_(addr->interface.estimated_speed), + interface_type_(static_cast<InterfaceType>(addr->iface.type)), + estimated_speed_(addr->iface.estimated_speed), temporary_((addr->flags & NR_ADDR_FLAG_TEMPORARY) != 0) {} NrIceStunAddr::Protocol NrIceStunAddr::protocolFromNrTransportAddr( @@ -101,8 +101,8 @@ void NrIceStunAddr::toNrLocalAddr(nr_local_addr& addr) const { // generate as_string nr_transport_addr_fmt_addr_string(&addr.addr); - addr.interface.type = static_cast<int>(interface_type_); - addr.interface.estimated_speed = estimated_speed_; + addr.iface.type = static_cast<int>(interface_type_); + addr.iface.estimated_speed = estimated_speed_; if (temporary_) { addr.flags |= NR_ADDR_FLAG_TEMPORARY; ===================================== mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt ===================================== @@ -25,7 +25,7 @@ import mozilla.components.concept.engine.translate.TranslationSupport * See [TranslationsState.translationError] for session level errors. */ data class TranslationsBrowserState( - val isTranslationsEnabled: Boolean = true, + val isTranslationsEnabled: Boolean = false, val isEngineSupported: Boolean? = null, val offerTranslation: Boolean? = null, val supportedLanguages: TranslationSupport? = null, ===================================== mobile/android/android-components/components/concept/ai-controls/src/main/java/mozilla/components/concept/ai/controls/AIFeatureBlock.kt ===================================== @@ -32,7 +32,7 @@ interface AIFeatureBlock { } private class InMemoryAIFeatureBlock(initialBlocked: Boolean) : AIFeatureBlock { - private val _isBlocked = MutableStateFlow(initialBlocked) + private val _isBlocked = MutableStateFlow(true) override val isBlocked: Flow<Boolean> = _isBlocked override suspend fun block() { @@ -40,6 +40,6 @@ private class InMemoryAIFeatureBlock(initialBlocked: Boolean) : AIFeatureBlock { } override suspend fun unblock() { - _isBlocked.value = false + _isBlocked.value = true } } ===================================== mobile/android/android-components/components/lib/ai-controls/src/main/java/mozilla/components/lib/ai/controls/AIFeatureBlockStorage.kt ===================================== @@ -28,11 +28,11 @@ internal interface AIFeatureBlockStorage { } private class InMemoryAiFeatureBlockStorage(initialBlocked: Boolean) : AIFeatureBlockStorage { - private val _isBlocked = MutableStateFlow(initialBlocked) + private val _isBlocked = MutableStateFlow(true) override val isBlocked: Flow<Boolean> = _isBlocked override suspend fun setBlocked(isBlocked: Boolean) { - _isBlocked.value = isBlocked + _isBlocked.value = true } } @@ -46,13 +46,13 @@ internal class DataStoreBackedAIFeatureBlockStorage( override val isBlocked: Flow<Boolean> get() = dataStore.data.map { preferences -> - preferences[isBlockedKey] ?: false + true } override suspend fun setBlocked(isBlocked: Boolean) { dataStore.updateData { it.toMutablePreferences().also { preferences -> - preferences[isBlockedKey] = isBlocked + preferences[isBlockedKey] = true } } } ===================================== mobile/android/fenix/app/nimbus.fml.yaml ===================================== @@ -43,28 +43,28 @@ features: type: Map<HomeScreenSection, Boolean> default: { - "top-sites": true, - "jump-back-in": true, + "top-sites": false, + "jump-back-in": false, "bookmarks": true, - "recent-explorations": true, - "pocket": true, - "pocket-sponsored-stories": true, - "synced-tabs": true, - "collections": true, - "privacy-report": true, + "recent-explorations": false, + "pocket": false, + "pocket-sponsored-stories": false, + "synced-tabs": false, + "collections": false, + "privacy-report": false, } defaults: - channel: nightly value: { "sections-enabled": { - "top-sites": true, - "jump-back-in": true, + "top-sites": false, + "jump-back-in": false, "bookmarks": true, - "recent-explorations": true, - "pocket": true, - "synced-tabs": true, - "collections": true, - "privacy-report": true, + "recent-explorations": false, + "pocket": false, + "synced-tabs": false, + "collections": false, + "privacy-report": false, } } nimbus-validation: @@ -221,7 +221,7 @@ features: glean: description: "A feature that provides server-side configurations for Glean metrics (aka Server Knobs)." - allow-coenrollment: true + allow-coenrollment: false variables: gleanMetricConfiguration: description: Configuration for Glean Server Knobs @@ -230,7 +230,7 @@ features: enable-event-timestamps: description: "Enables precise event timestamps for Glean events" type: Boolean - default: true + default: false delay-ping-lifetime-io: description: "Glean will delay io for ping lifetime metrics" type: Boolean @@ -308,7 +308,7 @@ features: defaults: - channel: developer value: - enabled: true + enabled: false template-message: sent_from_firefox_template download-link: "[Download Link]" show-snackbar: true @@ -323,13 +323,13 @@ features: defaults: - channel: developer value: - enabled: true + enabled: false - channel: nightly value: - enabled: true + enabled: false - channel: beta value: - enabled: true + enabled: false setup-checklist: description: A feature on the home page that allows the user to track onboarding setup progress. @@ -384,11 +384,11 @@ features: defaults: - channel: developer value: - enabled: true - boost-amp-wiki: true + enabled: false + boost-amp-wiki: false - channel: nightly value: - enabled: true + enabled: false nimbus-is-ready: description: > @@ -407,42 +407,42 @@ features: description: > Show the primary toolbar entry point into the translations feature. (Translations icon on URL toolbar.) type: Boolean - default: true + default: false main-flow-browser-menu-enabled: description: > Show the browser menu entry point into the translations feature. ('Translate Page' on browser menu.) type: Boolean - default: true + default: false page-settings-enabled: description: > Show the page settings entry point within the translations feature. (Gear icon on the translations main flow page.) 'main-flow-toolbar-enabled' or 'main-flow-browser-menu-enabled' must also be enabled for users to access this feature. type: Boolean - default: true + default: false global-settings-enabled: description: > Show the global settings entry point within the translations feature. ('Translation Settings' on the page settings view.) 'page-settings-enabled' must also be enabled for users to access this feature. type: Boolean - default: true + default: false global-lang-settings-enabled: description: > Show the global language options entry point for automatically translating. ('Automatic Translation' on the global settings view.) 'global-settings-enabled' must also be enabled for users to access this feature. type: Boolean - default: true + default: false global-site-settings-enabled: description: > Show the global never translate this site options entry point for site management. ('Never translate these sites' on the global settings view.) 'global-settings-enabled' must also be enabled for users to access this feature. type: Boolean - default: true + default: false downloads-enabled: description: > Show the global language model download options entry point for translations. ('Download languages' on the global settings view.) 'global-settings-enabled' must also be enabled for users to access this feature. type: Boolean - default: true + default: false navigation-toolbar: description: Feature for navigation toolbar. @@ -455,10 +455,10 @@ features: defaults: - channel: developer value: - enabled: true + enabled: false - channel: nightly value: - enabled: true + enabled: false minimal-addressbar: description: Show a smaller height bottom addressbar with just the URL. @@ -510,7 +510,7 @@ features: show a "close" button for tabs that are currently open on other supported devices in the synced tabs tray. type: Boolean - default: true + default: false fission: description: The feature that controls whether fission is enabled or not in Gecko. @@ -575,7 +575,7 @@ features: description: > Enables / disables fingerprinting protection in private browsing mode. type: Boolean - default: true + default: false overrides: description: > The protection overrides to add or remove fingerprinting protection @@ -629,7 +629,7 @@ features: description: > Enables / disables third-party cookie blocking in private browsing mode. type: Boolean - default: true + default: false safe-browsing-v5: description: Control Safe Browsing V5. @@ -903,7 +903,7 @@ features: description: > Uses search configuration from remote servers . type: Boolean - default: true + default: false same-document-navigation-overrides-load-type: description: Control whether the same document navigation overrides the load type. variables: @@ -924,7 +924,7 @@ features: description: > When `true`, include DoH settings in the settings UI. type: Boolean - default: true + default: false autoselect-enabled: description: > Controls the network.android_doh.autoselect_enabled pref and automatically chooses a DoH provider when Default Protection mode is selected. @@ -938,7 +938,7 @@ features: description: > Whether or not to enable private browsing mode lock. type: Boolean - default: true + default: false app-links: description: Control behavior of app links handling in the browser. @@ -1204,10 +1204,10 @@ features: defaults: - channel: developer value: - enabled: true + enabled: false - channel: nightly value: - enabled: true + enabled: false private-mode-and-stories-entry-point: description: Feature to enable the Private Mode and Stories Entry Point Experiment. @@ -1276,7 +1276,7 @@ features: defaults: - channel: developer value: - enabled: true + enabled: false - channel: nightly value: enabled: false ===================================== mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png ===================================== Binary files a/mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png and b/mobile/android/fenix/app/src/beta/res/drawable-hdpi/fenix_search_widget.png differ ===================================== mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png ===================================== Binary files a/mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png and b/mobile/android/fenix/app/src/debug/res/drawable-hdpi/fenix_search_widget.png differ ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/MenuDialogFragment.kt ===================================== @@ -390,7 +390,7 @@ class MenuDialogFragment : BottomSheetDialogFragment() { }.collectAsState(initial = false) val isTranslationsEnabled = TranslationsEnabledSettings.dataStore(requireContext()) - .isEnabled.collectAsState(true) + .isEnabled.collectAsState(false) MenuDialogBottomSheet( modifier = Modifier ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt ===================================== @@ -6,6 +6,7 @@ package org.mozilla.fenix.tor import android.content.Intent import android.graphics.Color +import android.graphics.Typeface import android.os.Build import android.os.Bundle import android.text.SpannableString @@ -82,6 +83,9 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler, SystemIn override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.torBootstrapButton1.setTypeface(null, Typeface.BOLD) + binding.torBootstrapButton2.setTypeface(null, Typeface.BOLD) + viewLifecycleOwner.lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { torConnectionAssistViewModel.torConnectScreen.collect { screen -> ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorSecurityLevelFragment.kt ===================================== @@ -5,6 +5,7 @@ package org.mozilla.fenix.tor import android.content.Context +import android.graphics.Typeface import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -44,6 +45,9 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { binding.description.text = getString(R.string.tor_security_level_warning, getString(R.string.app_name)) + binding.saveAndRestartButton.setTypeface(null, Typeface.BOLD) + binding.cancelButton.setTypeface(null, Typeface.BOLD) + updateSaveAndRestartButtonUI() val currentLevel: Int = requireContext().components.core.engine.settings.torSecurityLevel @@ -79,6 +83,11 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { updateSaveAndRestartButtonUI() } + binding.saveAndRestartButton.backgroundTintList = AppCompatResources.getColorStateList( + requireContext(), + R.color.disabled_connect_button_purple, + ) + binding.saveAndRestartButton.setOnClickListener { Toast.makeText( @@ -111,6 +120,10 @@ class TorSecurityLevelFragment : Fragment(), SystemInsetsPaddedFragment { (requireActivity() as HomeActivity).restartApplication() } + binding.cancelButton.backgroundTintList = AppCompatResources.getColorStateList( + requireContext(), + R.color.settings_button_white, + ) binding.cancelButton.setOnClickListener { @Suppress("DEPRECATION") requireActivity().onBackPressed() ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsAIControllableFeature.kt ===================================== @@ -22,8 +22,8 @@ class TranslationsAIControllableFeature( override val isEnabled: Flow<Boolean> = settings.isEnabled override suspend fun set(enabled: Boolean) { - settings.setEnabled(enabled) - browserStore.dispatch(TranslationsAction.SetTranslationsEnabledAction(enabled)) + settings.setEnabled(false) + browserStore.dispatch(TranslationsAction.SetTranslationsEnabledAction(false)) } companion object : AIFeatureMetadata { ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsEnabledSettings.kt ===================================== @@ -29,10 +29,10 @@ interface TranslationsEnabledSettings { * An in-memory version for tests, previews, etc. */ fun inMemory(isEnabledInitial: Boolean = false) = object : TranslationsEnabledSettings { - private val _isEnabled = MutableStateFlow(isEnabledInitial) + private val _isEnabled = MutableStateFlow(false) override val isEnabled: Flow<Boolean> = _isEnabled override suspend fun setEnabled(isEnabled: Boolean) { - _isEnabled.value = isEnabled + _isEnabled.value = false } } @@ -50,13 +50,13 @@ internal class DataStoreBackedTranslationsEnabledSettings( private val isEnabledKey = booleanPreferencesKey("is_enabled_key") override val isEnabled: Flow<Boolean> = dataStore.data.map { preferences -> - preferences[isEnabledKey] ?: true + false } override suspend fun setEnabled(isEnabled: Boolean) { dataStore.updateData { it.toMutablePreferences().also { preferences -> - preferences[isEnabledKey] = isEnabled + preferences[isEnabledKey] = false } } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/settings/TranslationsSettingsState.kt ===================================== @@ -21,6 +21,6 @@ data class TranslationsSettingsState( val showAutomaticTranslations: Boolean, val showNeverTranslate: Boolean, val showDownloads: Boolean, - val translationsEnabled: Boolean, + val translationsEnabled: Boolean = false, val switchItems: List<TranslationSwitchItem>, ) ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/Settings.kt ===================================== @@ -545,7 +545,7 @@ class Settings( var privateBrowsingLockedFeatureEnabled by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_private_browsing_locked_enabled), - default = { false }, + default = { FxNimbus.features.privateBrowsingLock.value().enabled }, ) var privateBrowsingModeLocked by booleanPreference( @@ -1905,7 +1905,7 @@ class Settings( var shouldShowVoiceSearch by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_show_voice_search), - default = true, + default = false, ) /** @@ -2374,7 +2374,7 @@ class Settings( */ var shouldShowMarketingOnboarding by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_should_show_marketing_onboarding), - default = true, + default = false, ) var shouldUseMinimalBottomToolbarWhenEnteringText by booleanPreference( @@ -2699,7 +2699,7 @@ class Settings( */ var isFirstTimeEngagingWithSignup: Boolean by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_first_time_engage_with_signup), - default = true, + default = false, ) /** @@ -2803,7 +2803,7 @@ class Settings( var aiControlsFeatureFlagEnabled by booleanPreference( key = appContext.getPreferenceKey(R.string.pref_key_enable_ai_controls), - default = true, + default = false, ) /** ===================================== mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png ===================================== Binary files a/mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png and b/mobile/android/fenix/app/src/main/res/drawable-hdpi/fenix_search_widget.png differ ===================================== mobile/android/fenix/app/src/main/res/layout/fragment_tor_security_level_preferences.xml ===================================== @@ -82,7 +82,6 @@ android:layout_marginEnd="24dp" android:layout_marginBottom="8dp" android:background="@drawable/rounded_corners" - android:backgroundTint="@color/connect_button_purple" android:enabled="false" android:minWidth="360dp" android:text="@string/tor_security_level_save_and_restart_tor_browser" @@ -103,7 +102,6 @@ android:layout_marginEnd="24dp" android:layout_marginBottom="8dp" android:background="@drawable/rounded_corners" - android:backgroundTint="@color/configure_connection_button_white" android:minWidth="360dp" android:text="@string/btn_cancel" android:textAlignment="center" ===================================== mobile/android/fenix/app/src/main/res/values/colors.xml ===================================== @@ -121,9 +121,9 @@ <color name="fx_mobile_private_on_tertiary">@color/photonDarkGrey90</color> <color name="fx_mobile_private_tertiary_container">@color/photonPink80</color> <color name="fx_mobile_private_on_tertiary_container">@color/photonLightGrey05</color> - <color name="fx_mobile_private_background">#FF342B4A</color> + <color name="fx_mobile_private_background">#321C64</color> <color name="fx_mobile_private_on_background">@color/photonLightGrey05</color> - <color name="fx_mobile_private_surface">#FF342B4A</color> + <color name="fx_mobile_private_surface">#321C64</color> <color name="fx_mobile_private_on_surface">@color/photonLightGrey05</color> <color name="fx_mobile_private_surface_variant">#FF413857</color> <color name="fx_mobile_private_on_surface_variant">@color/photonLightGrey40</color> @@ -310,9 +310,9 @@ <color name="mozac_ui_lock_slash_fill_critical" tools:ignore="UnusedResources">@color/fx_mobile_icon_color_critical</color> <!-- Connection Assist --> - <color name="connect_button_purple">#9059FF</color> - <color name="disabled_connect_button_purple">#5C42A9</color> - <color name="disabled_text_gray_purple">#8782A9</color> + <color name="connect_button_purple">#7542E5</color> + <color name="disabled_connect_button_purple">#542FA4</color> + <color name="disabled_text_gray_purple">#9781C8</color> <color name="configure_connection_button_white">#E1E0E7</color> <color name="warning_yellow">#FFA436</color> <color name="progress_background_tint">#55148C</color> ===================================== mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png ===================================== Binary files a/mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png and b/mobile/android/fenix/app/src/nightly/res/drawable-hdpi/fenix_search_widget.png differ ===================================== mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png ===================================== Binary files a/mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png and b/mobile/android/fenix/app/src/release/res/drawable-hdpi/fenix_search_widget.png differ ===================================== toolkit/components/lox/Lox.sys.mjs ===================================== @@ -1077,15 +1077,12 @@ class LoxImpl { if (this.#domainFrontedRequests === null) { this.#domainFrontedRequests = new Promise((resolve, reject) => { // TODO: Customize to the values for Lox - const reflector = Services.prefs.getStringPref( - "extensions.torlauncher.bridgedb_reflector" - ); - const front = Services.prefs.getStringPref( - "extensions.torlauncher.bridgedb_front" + const targets = Services.prefs.getStringPref( + "extensions.torlauncher.bridgedb_targets" ); const builder = new lazy.DomainFrontRequestBuilder(); builder - .init(reflector, front) + .init(targets) .then(() => resolve(builder)) .catch(reject); }); ===================================== toolkit/components/tor-launcher/TorControlPort.sys.mjs ===================================== @@ -672,6 +672,8 @@ export class TorController { /** * Authenticate to the tor daemon. * Notice that a failure in the authentication makes the connection close. + * This function tolerates empty and false-ish passwords because a client + * needs to authenticate even when all authentication methods are disabled. * * @param {Uint8Array} password The password for the control port, as an array * of bytes @@ -680,7 +682,11 @@ export class TorController { const passwordString = Array.from(password ?? [], b => b.toString(16).padStart(2, "0") ).join(""); - await this.#sendCommandSimple(`authenticate ${passwordString}`); + let command = "AUTHENTICATE"; + if (passwordString) { + command += ` ${passwordString}`; + } + await this.#sendCommandSimple(command); } // Information ===================================== toolkit/components/tor-launcher/TorProvider.sys.mjs ===================================== @@ -834,6 +834,9 @@ export class TorProvider extends TorProviderBase { this.#controlPortSettings.cookieFilePath ); } + // As per the spec, we must always authenticate to the control port, even + // when all authentication methods are disabled. + // https://spec.torproject.org/control-spec/commands.html#authenticate await controlPort.authenticate(password); } catch (e) { try { ===================================== toolkit/modules/DomainFrontedRequests.sys.mjs ===================================== @@ -24,38 +24,20 @@ ChromeUtils.defineESModuleGetters(lazy, { * proxy credentials, which can be prepared with this function. * * @param {string} proxyType The proxy type (socks for socks5 or socks4) - * @param {string} reflector The URL of the service hosted by the CDN - * @param {string} front The domain to use as a front + * @param {string} targets The string to pass to meek as the targets argument * @returns {string[]} An array containing [username, password] */ -function makeMeekCredentials(proxyType, reflector, front) { - // Construct the per-connection arguments. - let meekClientEscapedArgs = ""; - +function makeMeekCredentials(proxyType, targets) { // Escape aValue per section 3.5 of the PT specification: // First the "<Key>=<Value>" formatted arguments MUST be escaped, // such that all backslash, equal sign, and semicolon characters // are escaped with a backslash. - const escapeArgValue = aValue => - aValue - ? aValue - .replaceAll("\\", "\\\\") - .replaceAll("=", "\\=") - .replaceAll(";", "\\;") - : ""; - - if (reflector) { - meekClientEscapedArgs += "url="; - meekClientEscapedArgs += escapeArgValue(reflector); - } - - if (front) { - if (meekClientEscapedArgs.length) { - meekClientEscapedArgs += ";"; - } - meekClientEscapedArgs += "front="; - meekClientEscapedArgs += escapeArgValue(front); - } + targets = targets + .replaceAll("\\", "\\\\") + .replaceAll("=", "\\=") + .replaceAll(";", "\\;"); + // Construct the per-connection arguments. + const meekClientEscapedArgs = `targets=${targets}`; // socks5 if (proxyType === "socks") { @@ -88,7 +70,7 @@ class MeekTransport { #meekClientProcess = null; // launches the meekprocess - async init(reflector, front) { + async init(targets) { // ensure we haven't already init'd if (this.#inited) { throw new Error("MeekTransport: Already initialized"); @@ -267,8 +249,7 @@ class MeekTransport { }); [this.proxyUsername, this.proxyPassword] = makeMeekCredentials( this.proxyType, - reflector, - front + targets ); this.#inited = true; } catch (ex) { @@ -321,7 +302,7 @@ class MeekTransportAndroid { */ #id = 0; - async init(reflector, front) { + async init(targets) { // ensure we haven't already init'd if (this.#id) { throw new Error("MeekTransport: Already initialized"); @@ -336,8 +317,7 @@ class MeekTransportAndroid { this.proxyPort = details.port; [this.proxyUsername, this.proxyPassword] = makeMeekCredentials( this.proxyType, - reflector, - front + targets ); } @@ -457,7 +437,7 @@ export class DomainFrontRequestBuilder { return this.#inited; } - async init(reflector, front) { + async init(targets) { if (this.#inited) { throw new Error("DomainFrontRequestBuilder: Already initialized"); } @@ -466,7 +446,7 @@ export class DomainFrontRequestBuilder { Services.appinfo.OS === "Android" ? new MeekTransportAndroid() : new MeekTransport(); - await meekTransport.init(reflector, front); + await meekTransport.init(targets); this.#meekTransport = meekTransport; this.#inited = true; } ===================================== toolkit/modules/Moat.sys.mjs ===================================== @@ -18,8 +18,7 @@ ChromeUtils.defineESModuleGetters(lazy, { }); const TorLauncherPrefs = Object.freeze({ - bridgedb_front: "extensions.torlauncher.bridgedb_front", - bridgedb_reflector: "extensions.torlauncher.bridgedb_reflector", + bridgedb_targets: "extensions.torlauncher.bridgedb_targets", moat_service: "extensions.torlauncher.moat_service", }); @@ -68,13 +67,12 @@ export class MoatRPC { return; } - const reflector = Services.prefs.getStringPref( - TorLauncherPrefs.bridgedb_reflector + const targets = Services.prefs.getStringPref( + TorLauncherPrefs.bridgedb_targets ); - const front = Services.prefs.getStringPref(TorLauncherPrefs.bridgedb_front); this.#requestBuilder = new lazy.DomainFrontRequestBuilder(); try { - await this.#requestBuilder.init(reflector, front); + await this.#requestBuilder.init(targets); } catch (e) { this.#requestBuilder = null; throw e; View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/350f695... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/350f695... You're receiving this email because of your account on gitlab.torproject.org. Manage all notifications: https://gitlab.torproject.org/-/profile/notifications | Help: https://gitlab.torproject.org/help
participants (1)
-
Pier Angelo Vendrame (@pierov)