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 -----
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
tbb-commits@lists.torproject.org

  • 1 participants
  • 19540 discussions
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] fixup! Implement Android-native Connection Assist UI
by Dan Ballard (@dan) 14 May '24

14 May '24
Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: e2bd6fda by clairehurst at 2024-05-14T00:00:14+00:00 fixup! Implement Android-native Connection Assist UI - - - - - 2 changed files: - fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt - fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt Changes: ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt ===================================== @@ -62,6 +62,7 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { override fun onResume() { super.onResume() hideToolbar() + viewModel.handleTorConnectStateToScreen() // Covers the case where the app is backgrounded when the bootstrap finishes } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -86,6 +87,7 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { viewModel.shouldOpenHome().observe( viewLifecycleOwner, ) { + Log.d(TAG, "shouldOpenHome() = $it") if (it) { openHome() } ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt ===================================== @@ -46,6 +46,7 @@ class TorConnectionAssistViewModel( init { Log.d(TAG, "initiating TorConnectionAssistViewModel") _torController.registerTorListener(this) + handleTorConnectStateToScreen() // should cover the case of when we have an onBootStrapStateChange() event before this is initialized, which lead to being stuck on the splash screen } private fun handleConnect( @@ -95,6 +96,10 @@ class TorConnectionAssistViewModel( _progress.value = progress.toInt() } + handleTorConnectStateToScreen() + } + + fun handleTorConnectStateToScreen() { when (_torController.lastKnownStatus) { TorConnectState.Initial -> _torConnectScreen.value = ConnectAssistUiState.Splash TorConnectState.Configuring -> handleConfiguring() @@ -144,7 +149,11 @@ class TorConnectionAssistViewModel( /** stay here */ } - else -> _torConnectScreen.value = ConnectAssistUiState.Connecting + else -> _torConnectScreen.value = + ConnectAssistUiState.Connecting.also { connectAssistUiState -> + // covers the case of when the bootstrap is already in progress when the UiState "catches up" + connectAssistUiState.progress = _progress.value ?: 0 + } } } View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/e2b… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/e2b… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] fixup! Enable the connect assist experiments on alpha
by Dan Ballard (@dan) 13 May '24

13 May '24
Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: 89ac6134 by clairehurst at 2024-05-13T23:56:04+00:00 fixup! Enable the connect assist experiments on alpha - - - - - 1 changed file: - fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt Changes: ===================================== fenix/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt ===================================== @@ -13,6 +13,7 @@ import android.os.Build import android.os.Bundle import android.os.Handler import android.os.Looper +import android.util.Log import android.view.LayoutInflater import android.view.WindowManager import android.widget.Toast @@ -40,7 +41,6 @@ import mozilla.components.concept.sync.Profile import mozilla.components.service.glean.private.NoExtras import mozilla.components.support.ktx.android.view.showKeyboard import org.mozilla.fenix.BrowserDirection -import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.GleanMetrics.Addons @@ -49,6 +49,7 @@ import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.ReleaseChannel import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint import org.mozilla.fenix.databinding.AmoCollectionOverrideDialogBinding import org.mozilla.fenix.ext.application @@ -59,6 +60,7 @@ import org.mozilla.fenix.ext.openSetDefaultBrowserOption import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar +import org.mozilla.fenix.gecko.GeckoProvider import org.mozilla.fenix.nimbus.FxNimbus import org.mozilla.fenix.perf.ProfilerViewModel import org.mozilla.fenix.settings.account.AccountUiView @@ -66,6 +68,7 @@ import org.mozilla.fenix.tor.QuickStartPreference import org.mozilla.fenix.tor.TorBridgeTransportConfig import org.mozilla.fenix.tor.TorEvents import org.mozilla.fenix.utils.Settings +import org.mozilla.geckoview.BuildConfig import kotlin.system.exitProcess @Suppress("LargeClass", "TooManyFunctions") @@ -741,7 +744,7 @@ class SettingsFragment : PreferenceFragmentCompat() { requirePreference<Preference>(R.string.pref_key_use_html_connection_ui).apply { onPreferenceChangeListener = object : SharedPreferenceUpdater() {} - isVisible = BuildConfig.DEBUG + isVisible = Config.channel != ReleaseChannel.Release } requirePreference<Preference>(R.string.pref_key_tor_logs).apply { View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/89a… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/89a… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] fixup! Add Tor integration and UI
by Dan Ballard (@dan) 13 May '24

13 May '24
Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: cf78d7f5 by clairehurst at 2024-05-13T14:35:02-07:00 fixup! Add Tor integration and UI - - - - - 18 changed files: - fenix/app/src/main/AndroidManifest.xml - fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt - fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapFragment.kt - fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerTAS.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/controller/TorBootstrapController.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/interactor/TorBootstrapInteractor.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapAdapter.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapConnectViewHolder.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapLoggerViewHolder.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapPagerAdapter.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapPagerViewHolder.kt - − fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapView.kt - − fenix/app/src/main/res/drawable/ic_tor_connect_computer_graphic.xml - − fenix/app/src/main/res/layout/tor_bootstrap_connect.xml - − fenix/app/src/main/res/layout/tor_bootstrap_logger.xml - − fenix/app/src/main/res/layout/tor_bootstrap_pager.xml Changes: ===================================== fenix/app/src/main/AndroidManifest.xml ===================================== @@ -367,12 +367,6 @@ tools:node="remove" /> </provider> <!-- Define Orbotservice's TorService --> - <service - android:name="org.torproject.android.service.TorService" - android:enabled="true" - android:exported="false" - android:stopWithTask="true"> - </service> </application> </manifest> ===================================== fenix/app/src/main/java/org/mozilla/fenix/FenixApplication.kt ===================================== @@ -103,7 +103,6 @@ import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHO import org.mozilla.fenix.wallpapers.Wallpaper import java.util.UUID import java.util.concurrent.TimeUnit -import org.torproject.android.service.util.Prefs /** *The main application class for Fenix. Records data to measure initialization performance. @@ -234,8 +233,8 @@ open class FenixApplication : LocaleAwareApplication(), Provider { Log.addSink(FenixLogSink(logsDebug = Config.channel.isDebug, AndroidLogSink())) } - @OptIn(DelicateCoroutinesApi::class) // GlobalScope usage - open fun setupInMainProcessOnly() { + @VisibleForTesting + protected open fun setupInMainProcessOnly() { ProfilerMarkerFactProcessor.create { components.core.engine.profiler }.register() run { @@ -273,11 +272,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider { if (!megazordSetup.isCompleted) { runBlockingIncrement { megazordSetup.await() } } - - GlobalScope.launch(Dispatchers.IO) { - // Give TAS the base Context - Prefs.setContext(applicationContext) - } } setupLeakCanary() ===================================== fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt ===================================== @@ -44,7 +44,6 @@ import org.mozilla.fenix.perf.StartupStateProvider import org.mozilla.fenix.perf.StrictModeManager import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.tor.TorControllerGV -import org.mozilla.fenix.tor.TorControllerTAS import org.mozilla.fenix.utils.ClipboardHandler import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.wifi.WifiConnectionMonitor ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/TorBootstrapFragment.kt deleted ===================================== @@ -1,197 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.core.view.children -import androidx.fragment.app.Fragment -import androidx.lifecycle.lifecycleScope -import org.mozilla.fenix.BuildConfig -import org.mozilla.fenix.databinding.FragmentHomeBinding -import org.mozilla.fenix.ext.requireComponents -import org.mozilla.fenix.tor.interactor.DefaultTorBootstrapInteractor -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor -import androidx.navigation.fragment.findNavController -import com.google.android.material.appbar.AppBarLayout -import org.mozilla.fenix.HomeActivity -import org.mozilla.fenix.R -import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.hideToolbar -import org.mozilla.fenix.ext.settings -import org.mozilla.fenix.tor.controller.DefaultTorBootstrapController -import org.mozilla.fenix.tor.view.TorBootstrapView - - -@Suppress("TooManyFunctions", "LargeClass") -class TorBootstrapFragment : Fragment() { - - internal var _binding: FragmentHomeBinding? = null - private val binding get() = _binding!! - - - private var torBootstrapView: TorBootstrapView? = null - - private var _torBootstrapInteractor: TorBootstrapInteractor? = null - private val torBootstrapInteractor: TorBootstrapInteractor - get() = _torBootstrapInteractor!! - - private lateinit var torBootstrapStatus: TorBootstrapStatus - - - @Suppress("LongMethod") - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View { - _binding = FragmentHomeBinding.inflate(inflater, container, false) - val components = requireComponents - - torBootstrapStatus = TorBootstrapStatus( - !BuildConfig.DISABLE_TOR, - components.torController, - ::dispatchModeChanges - ) - - if (!torBootstrapStatus.isBootstrapping()) { - openHome() - } - - // Was _sessionControlInteractor - _torBootstrapInteractor = DefaultTorBootstrapInteractor( - controller = DefaultTorBootstrapController( - handleTorBootstrapConnect = ::handleTorBootstrapConnect, - cancelTorBootstrap = ::cancelTorBootstrap, - initiateTorBootstrap = ::initiateTorBootstrap, - openTorNetworkSettings = ::openTorNetworkSettings - ), - ) - - torBootstrapView = TorBootstrapView( - containerView = binding.sessionControlRecyclerView, - viewLifecycleOwner = viewLifecycleOwner, - interactor = torBootstrapInteractor, - ) - - adjustHomeFragmentView() - updateSessionControlView() - showSessionControlView() - - return binding.root - } - - private fun updateSessionControlView() { - torBootstrapView?.update(requireContext().components.appStore.state) - } - - // This function should be paired with showSessionControlView() - private fun adjustHomeFragmentView() { - binding.sessionControlRecyclerView.apply { - visibility = View.INVISIBLE - } - - binding.sessionControlRecyclerView.apply { - setPadding(0, 0, 0, 0) - (layoutParams as ViewGroup.MarginLayoutParams).setMargins(0, 0, 0, 0) - } - - binding.homeAppBar.apply { - visibility = View.GONE - - // Reset this as SCROLL in case it was previously set as NO_SCROLL after bootstrap - children.forEach { - (it.layoutParams as AppBarLayout.LayoutParams).scrollFlags = - AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL - } - } - binding.onionPatternImage.apply { - visibility = View.GONE - } - binding.toolbarLayout.apply { - visibility = View.GONE - } - } - - // This function should be paired with adjustHomeFragmentView() - private fun showSessionControlView() { - binding.sessionControlRecyclerView.apply { - visibility = View.VISIBLE - } - } - - private fun dispatchModeChanges(isBootstrapping: Boolean) { - //requireComponents.appStore.dispatch(AppAction.ModeChange(mode)) - if (!isBootstrapping) { - openHome() - } else { - adjustHomeFragmentView() - updateSessionControlView() - showSessionControlView() - } - } - - override fun onStop() { - super.onStop() - torBootstrapStatus.unregisterTorListener() - } - - override fun onResume() { - super.onResume() - - torBootstrapStatus.registerTorListener() - - // fenix#40176: Ensure the Home fragment is rendered correctly when we resume. - val isBootstraping = torBootstrapStatus.isBootstrapping() - - if (!isBootstraping) { - openHome() - } - - adjustHomeFragmentView() - updateSessionControlView() - showSessionControlView() - - hideToolbar() - - // Whenever a tab is selected its last access timestamp is automatically updated by A-C. - // However, in the case of resuming the app to the home fragment, we already have an - // existing selected tab, but its last access timestamp is outdated. No action is - // triggered to cause an automatic update on warm start (no tab selection occurs). So we - // update it manually here. - requireComponents.useCases.sessionUseCases.updateLastAccess() - (requireActivity() as HomeActivity).navigateToHome() - } - - private fun handleTorBootstrapConnect() { - requireComponents.torController.onTorConnecting() - } - - private fun cancelTorBootstrap() { - requireComponents.torController.stopTor() - } - - private fun initiateTorBootstrap(withDebugLogging: Boolean = false) { - requireComponents.torController.initiateTorBootstrap(lifecycleScope, withDebugLogging) - } - - private fun openTorNetworkSettings() { - val directions = - TorBootstrapFragmentDirections.actionTorbootstrapFragmentToSettingsFragment( - requireContext().getString(R.string.pref_key_connection) - ) - findNavController().navigate(directions) - } - - private fun openHome() { - val directions = - TorBootstrapFragmentDirections - .actionStartupHome() - findNavController().navigate(directions) - } - -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt ===================================== @@ -29,25 +29,6 @@ internal enum class TorStatus(val status: String) { ON("ON"), STOPPING("STOPPING"), UNKNOWN("UNKNOWN"); - - companion object { - fun fromString(status: String): TorStatus { - return when (status) { - "ON" -> ON - "STARTING" -> STARTING - "STOPPING" -> STOPPING - "OFF" -> OFF - else -> UNKNOWN - } - } - } - - fun isOff() = this == OFF - fun isOn() = this == ON - fun isStarting() = this == STARTING - fun isStarted() = ((this == STARTING) || (this == ON)) - fun isStopping() = this == STOPPING - fun isUnknown() = this == UNKNOWN } interface TorController: TorEvents { ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerTAS.kt deleted ===================================== @@ -1,342 +0,0 @@ -package org.mozilla.fenix.tor - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter -import androidx.lifecycle.LifecycleCoroutineScope -import androidx.localbroadcastmanager.content.LocalBroadcastManager -import kotlinx.coroutines.channels.Channel -import kotlinx.coroutines.launch -import kotlinx.coroutines.withTimeoutOrNull -import org.mozilla.fenix.BuildConfig -import org.torproject.android.service.TorService -import org.torproject.android.service.TorServiceConstants -import org.torproject.android.service.util.Prefs - -@SuppressWarnings("TooManyFunctions") -class TorControllerTAS (private val context: Context): TorController { - private val lbm: LocalBroadcastManager = LocalBroadcastManager.getInstance(context) - private val entries = mutableListOf<Pair<String?, String?>>() - override val logEntries get() = entries - override var quickstart: Boolean = false // Stub, is never used - - private var torListeners = mutableListOf<TorEvents>() - - private var pendingRegisterChangeList = mutableListOf<Pair<TorEvents, Boolean>>() - private var lockTorListenersMutation = false - - private var lastKnownStatus = TorStatus.OFF - private var wasTorBootstrapped = false - private var isTorRestarting = false - - // This may be a lie - private var isTorBootstrapped = false - get() = ((lastKnownStatus == TorStatus.ON) && wasTorBootstrapped) - - val isDebugLoggingEnabled get() = - context - .getSharedPreferences("org.torproject.android_preferences", Context.MODE_PRIVATE) - .getBoolean("pref_enable_logging", false) - - override val isStarting get() = lastKnownStatus.isStarting() - override val isRestarting get() = isTorRestarting - override val isBootstrapped get() = isTorBootstrapped - override val isConnected get() = (lastKnownStatus.isStarted() && !isTorRestarting) - - override var bridgesEnabled: Boolean - get() = Prefs.bridgesEnabled() - set(value) { Prefs.putBridgesEnabled(value) } - - override var bridgeTransport: TorBridgeTransportConfig - get() { - return TorBridgeTransportConfigUtil.getStringToBridgeTransport( - Prefs.getBridgesList() - ) - } - set(value) { - if (value == TorBridgeTransportConfig.USER_PROVIDED) { - // Don't set the pref when the value is USER_PROVIDED because - // "user_provided" is not a valid bridge or transport type. - // This call should be followed by setting userProvidedBridges. - return - } - Prefs.setBridgesList(value.transportName) - } - - override var userProvidedBridges: String? - get() { - val bridges = Prefs.getBridgesList() - val bridgeType = - TorBridgeTransportConfigUtil.getStringToBridgeTransport(bridges) - return when (bridgeType) { - TorBridgeTransportConfig.USER_PROVIDED -> bridges - else -> null - } - } - set(value) { - Prefs.setBridgesList(value) - } - - override fun start() { - // Register receiver - lbm.registerReceiver( - persistentBroadcastReceiver, - IntentFilter(TorServiceConstants.ACTION_STATUS) - ) - lbm.registerReceiver( - persistentBroadcastReceiver, - IntentFilter(TorServiceConstants.LOCAL_ACTION_LOG) - ) - } - - override fun stop() { - lbm.unregisterReceiver(persistentBroadcastReceiver) - } - - private val persistentBroadcastReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { - if (intent.action == null || - (intent.action != TorServiceConstants.ACTION_STATUS && - intent.action != TorServiceConstants.LOCAL_ACTION_LOG) - ) { - return - } - val action = intent.action - - val logentry: String? - val status: String? - if (action == TorServiceConstants.LOCAL_ACTION_LOG) { - logentry = intent.getExtras() - ?.getCharSequence(TorServiceConstants.LOCAL_EXTRA_LOG) as? String? - } else { - logentry = null - } - - status = intent.getExtras() - ?.getCharSequence(TorServiceConstants.EXTRA_STATUS) as? String? - - if (logentry == null && status == null) { - return - } - - onTorStatusUpdate(logentry, status) - - if (status == null) { - return - } - - val newStatus = TorStatus.fromString(status) - - if (newStatus.isUnknown() && wasTorBootstrapped) { - stopTor() - } - - entries.add(Pair(logentry, status)) - - if (logentry != null && logentry.contains(TorServiceConstants.TOR_CONTROL_PORT_MSG_BOOTSTRAP_DONE)) { - wasTorBootstrapped = true - onTorConnected() - } - - if (lastKnownStatus.isStopping() && newStatus.isOff()) { - if (isTorRestarting) { - initiateTorBootstrap() - } else { - onTorStopped() - } - } - - if (lastKnownStatus.isOff() && newStatus.isStarting()) { - isTorRestarting = false - } - - lastKnownStatus = newStatus - } - } - - override fun onTorConnecting() { - lockTorListenersMutation = true - torListeners.forEach { it.onTorConnecting() } - lockTorListenersMutation = false - - handlePendingRegistrationChanges() - } - - override fun onTorConnected() { - lockTorListenersMutation = true - torListeners.forEach { it.onTorConnected() } - lockTorListenersMutation = false - - handlePendingRegistrationChanges() - } - - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { - lockTorListenersMutation = true - torListeners.forEach { it.onTorStatusUpdate(entry, status) } - lockTorListenersMutation = false - - handlePendingRegistrationChanges() - } - - override fun onTorStopped() { - lockTorListenersMutation = true - torListeners.forEach { it.onTorStopped() } - lockTorListenersMutation = false - - handlePendingRegistrationChanges() - } - - override fun registerTorListener(l: TorEvents) { - if (torListeners.contains(l)) { - return - } - - if (lockTorListenersMutation) { - pendingRegisterChangeList.add(Pair(l, true)) - } else { - torListeners.add(l) - } - } - - override fun unregisterTorListener(l: TorEvents) { - if (!torListeners.contains(l)) { - return - } - - if (lockTorListenersMutation) { - pendingRegisterChangeList.add(Pair(l, false)) - } else { - torListeners.remove(l) - } - } - - override fun registerTorLogListener(l: TorLogs) {} - override fun unregisterTorLogListener(l: TorLogs) {} - - private fun handlePendingRegistrationChanges() { - pendingRegisterChangeList.forEach { - if (it.second) { - registerTorListener(it.first) - } else { - unregisterTorListener(it.first) - } - } - - pendingRegisterChangeList.clear() - } - - /** - * Receive the current Tor status. - * - * Send a request for the current status and receive the response. - * Returns true if Tor is running, false otherwise. - * - */ - private suspend fun checkTorIsStarted(): Boolean { - val channel = Channel<Boolean>() - - // Register receiver - val lbm: LocalBroadcastManager = LocalBroadcastManager.getInstance(context) - val localBroadcastReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context, intent: Intent) { - val action = intent.action ?: return - // We only want ACTION_STATUS messages - if (action != TorServiceConstants.ACTION_STATUS) { - return - } - // The current status has the EXTRA_STATUS key - val currentStatus = - intent.getStringExtra(TorServiceConstants.EXTRA_STATUS) - channel.trySend(currentStatus === TorServiceConstants.STATUS_ON) - } - } - lbm.registerReceiver( - localBroadcastReceiver, - IntentFilter(TorServiceConstants.ACTION_STATUS) - ) - - // Request service status - sendServiceAction(TorServiceConstants.ACTION_STATUS) - - // Wait for response and unregister receiver - var torIsStarted = false - withTimeoutOrNull(torServiceResponseTimeout) { - torIsStarted = channel.receive() - } - lbm.unregisterReceiver(localBroadcastReceiver) - return torIsStarted - } - - override fun initiateTorBootstrap(lifecycleScope: LifecycleCoroutineScope?, withDebugLogging: Boolean) { - if (BuildConfig.DISABLE_TOR) { - return - } - - context.getSharedPreferences("org.torproject.android_preferences", Context.MODE_PRIVATE) - .edit().putBoolean("pref_enable_logging", withDebugLogging).apply() - - if (lifecycleScope == null) { - sendServiceAction(TorServiceConstants.ACTION_START) - } else { - lifecycleScope.launch { - val torNeedsStart = !checkTorIsStarted() - if (torNeedsStart) { - sendServiceAction(TorServiceConstants.ACTION_START) - } - } - } - } - - override fun stopTor() { - if (BuildConfig.DISABLE_TOR) { - return - } - - val torService = Intent(context, TorService::class.java) - context.stopService(torService) - } - - override fun setTorStopped() { - lastKnownStatus = TorStatus.OFF - onTorStopped() - } - - override fun restartTor() { - // tor-android-service doesn't dynamically update the torrc file, - // and it doesn't use SETCONF, so we completely restart the service. - // However, don't restart if we aren't started and we weren't - // previously started. - if (!lastKnownStatus.isStarted() && !wasTorBootstrapped) { - return - } - - if (!lastKnownStatus.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() - } - } - - private fun sendServiceAction(action: String) { - val torServiceStatus = Intent(context, TorService::class.java) - torServiceStatus.action = action - context.startService(torServiceStatus) - } - - companion object { - const val torServiceResponseTimeout = 5000L - } - - // Compat with TorControlGV Stubs - - override fun getLastErrorState() : TorError? { - return null; - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/controller/TorBootstrapController.kt deleted ===================================== @@ -1,63 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.controller - -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - -interface TorBootstrapController { - /** - * @see [TorBootstrapInteractor.onTorBootstrapConnectClicked] - */ - fun handleTorBootstrapConnectClicked() - - /** - * @see [TorBootstrapInteractor.onTorStopBootstrapping] - */ - fun handleTorStopBootstrapping() - - /** - * @see [TorBootstrapInteractor.onTorStartBootstrapping] - */ - fun handleTorStartBootstrapping() - - /** - * @see [TorBootstrapInteractor.onTorStartDebugBootstrapping] - */ - fun handleTorStartDebugBootstrapping() - - /** - * @see [TorBootstrapInteractor.onTorBootstrapNetworkSettingsClicked] - */ - fun handleTorNetworkSettingsClicked() - - -} - -class DefaultTorBootstrapController( - private val handleTorBootstrapConnect: () -> Unit, - private val initiateTorBootstrap: (Boolean) -> Unit, - private val cancelTorBootstrap: () -> Unit, - private val openTorNetworkSettings: () -> Unit -) : TorBootstrapController { - override fun handleTorBootstrapConnectClicked() { - handleTorBootstrapConnect() - } - - override fun handleTorStopBootstrapping() { - cancelTorBootstrap() - } - - override fun handleTorStartBootstrapping() { - initiateTorBootstrap(false) - } - - override fun handleTorStartDebugBootstrapping() { - initiateTorBootstrap(true) - } - - override fun handleTorNetworkSettingsClicked() { - openTorNetworkSettings() - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/interactor/TorBootstrapInteractor.kt deleted ===================================== @@ -1,60 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.interactor - -import org.mozilla.fenix.tor.controller.TorBootstrapController - -interface TorBootstrapInteractor { - /** - * Initiates Tor bootstrapping. Called when a user clicks on the "Connect" button. - */ - fun onTorBootstrapConnectClicked() - - /** - * Initiates Tor bootstrapping. Called when a user clicks on the "Connect" button. - */ - fun onTorStartBootstrapping() - - /** - * Stop Tor bootstrapping. Called when a user clicks on the "settings" cog/button. - */ - fun onTorStopBootstrapping() - - /** - * Initiates Tor bootstrapping with debug logging. Called when bootstrapping fails with - * the control.txt file not existing. - */ - fun onTorStartDebugBootstrapping() - - /** - * Open Tor Network Settings preference screen - */ - fun onTorBootstrapNetworkSettingsClicked() -} - -class DefaultTorBootstrapInteractor( - private val controller: TorBootstrapController, -) : TorBootstrapInteractor { - - override fun onTorBootstrapConnectClicked() { - controller.handleTorBootstrapConnectClicked() - } - - override fun onTorStopBootstrapping() { - controller.handleTorStopBootstrapping() - } - - override fun onTorStartBootstrapping() { - controller.handleTorStartBootstrapping() - } - - override fun onTorStartDebugBootstrapping() { - controller.handleTorStartDebugBootstrapping() - } - - override fun onTorBootstrapNetworkSettingsClicked() { - controller.handleTorNetworkSettingsClicked() - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapAdapter.kt deleted ===================================== @@ -1,83 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.annotation.LayoutRes -import androidx.lifecycle.LifecycleOwner -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.ListAdapter -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.components.Components -import org.mozilla.fenix.home.topsites.TopSitePagerViewHolder -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - -sealed class AdapterItem(@LayoutRes val viewType: Int) { - object TorBootstrap : AdapterItem(TorBootstrapPagerViewHolder.LAYOUT_ID) - - - open fun sameAs(other: AdapterItem) = this::class == other::class - open fun getChangePayload(newItem: AdapterItem): Any? = null - open fun contentsSameAs(other: AdapterItem) = this::class == other::class - -} - -class AdapterItemDiffCallback : DiffUtil.ItemCallback<AdapterItem>() { - override fun areItemsTheSame(oldItem: AdapterItem, newItem: AdapterItem) = - oldItem.sameAs(newItem) - - @Suppress("DiffUtilEquals") - override fun areContentsTheSame(oldItem: AdapterItem, newItem: AdapterItem) = - oldItem.contentsSameAs(newItem) - - override fun getChangePayload(oldItem: AdapterItem, newItem: AdapterItem): Any? { - return oldItem.getChangePayload(newItem) ?: return super.getChangePayload(oldItem, newItem) - } -} - - - -class TorBootstrapAdapter( - private val interactor: TorBootstrapInteractor, - private val viewLifecycleOwner: LifecycleOwner, - private val components: Components, -) : ListAdapter<AdapterItem, RecyclerView.ViewHolder>(AdapterItemDiffCallback()) { - - // This method triggers the ComplexMethod lint error when in fact it's quite simple. - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - val view = LayoutInflater.from(parent.context).inflate(viewType, parent, false) - return when (viewType) { - TorBootstrapPagerViewHolder.LAYOUT_ID -> TorBootstrapPagerViewHolder( - view, - components, - interactor - ) - else -> throw IllegalStateException() - } - } - - override fun getItemViewType(position: Int) = getItem(position).viewType - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int, payloads: MutableList<Any>) { - if (payloads.isEmpty()) { - onBindViewHolder(holder, position) - } else { - when (holder) { - is TopSitePagerViewHolder -> { - if (payloads[0] is org.mozilla.fenix.home.sessioncontrol.AdapterItem.TopSitePagerPayload) { - val payload = payloads[0] as org.mozilla.fenix.home.sessioncontrol.AdapterItem.TopSitePagerPayload - holder.update(payload) - } - } - } - } - } - - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - // no-op. This ViewHolder receives the HomeStore as argument and will observe that - // without the need for us to manually update from here the data to be displayed. - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapConnectViewHolder.kt deleted ===================================== @@ -1,89 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.R -import org.mozilla.fenix.components.Components -import org.mozilla.fenix.databinding.TorBootstrapConnectBinding -import org.mozilla.fenix.tor.TorEvents -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - -class TorBootstrapConnectViewHolder( - private val view: View, - private val components: Components, - private val interactor: TorBootstrapInteractor -) : RecyclerView.ViewHolder(view), TorEvents { - - var binding: TorBootstrapConnectBinding - - init { - binding = TorBootstrapConnectBinding.bind(view) - - with(binding.torBootstrapNetworkSettingsButton) { - setOnClickListener { - interactor.onTorStopBootstrapping() - interactor.onTorBootstrapNetworkSettingsClicked() - - with(binding.torBootstrapProgress) { - visibility = View.INVISIBLE - } - - with(binding.torBootstrapConnectButton) { - visibility = View.VISIBLE - } - } - } - - with(binding.torBootstrapConnectButton) { - setOnClickListener { - interactor.onTorBootstrapConnectClicked() - interactor.onTorStartBootstrapping() - - visibility = View.INVISIBLE - - with(binding.torBootstrapProgress) { - visibility = View.VISIBLE - } - } - } - - components.torController.registerTorListener(this) - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorConnecting() { - } - - override fun onTorConnected() { - components.torController.unregisterTorListener(this) - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorStopped() { - } - - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { - if (entry == null) return - - binding.torBootstrapStatusMessage.text = entry - if (entry.startsWith(BOOTSTRAPPED_PREFIX)) { - val percentIdx = entry.indexOf("%") - val percent = entry.substring( - BOOTSTRAPPED_PREFIX.length, - percentIdx - ) - with(binding.torBootstrapProgress) { - this.progress = percent.toInt() - } - } - } - - companion object { - const val LAYOUT_ID = R.layout.tor_bootstrap_connect - const val BOOTSTRAPPED_PREFIX = "NOTICE: Bootstrapped " - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapLoggerViewHolder.kt deleted ===================================== @@ -1,76 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import android.text.method.ScrollingMovementMethod -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.R -import org.mozilla.fenix.components.Components -import org.mozilla.fenix.databinding.TorBootstrapLoggerBinding -import org.mozilla.fenix.tor.TorEvents - -class TorBootstrapLoggerViewHolder( - private val view: View, - private val components: Components - ) : RecyclerView.ViewHolder(view), TorEvents { - - private var entries = mutableListOf<String>() - private var binding: TorBootstrapLoggerBinding - - init { - binding = TorBootstrapLoggerBinding.bind(view) - components.torController.registerTorListener(this) - - val currentEntries = components.torController.logEntries - .filter { it.first != null } - .filter { !(it.first!!.startsWith("Circuit") && it.second == "ON") } - // Keep synchronized with format in onTorStatusUpdate - .flatMap { listOf("(${it.second}) '${it.first}'") } - val entriesLen = currentEntries.size - val subListOffset = if (entriesLen > MAX_NEW_ENTRIES) MAX_NEW_ENTRIES else entriesLen - entries = currentEntries.subList((entriesLen - subListOffset), entriesLen) as MutableList<String> - val initLog = "---------------" + view.resources.getString(R.string.tor_initializing_log) + "---------------" - entries.add(0, initLog) - - with(binding.torBootstrapLogEntries) { - movementMethod = ScrollingMovementMethod() - text = formatLogEntries(entries) - } - } - - private fun formatLogEntries(entries: List<String>) = entries.joinToString("\n") - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorConnecting() { - } - - override fun onTorConnected() { - components.torController.unregisterTorListener(this) - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onTorStopped() { - } - - override fun onTorStatusUpdate(entry: String?, status: String?, progress: Double?) { - if (status == null || entry == null) return - if (status == "ON" && entry.startsWith("Circuit")) return - - if (entries.size > MAX_LINES) { - entries = entries.drop(1) as MutableList<String> - } - entries.add("($status) '$entry'") - - binding.torBootstrapLogEntries.text = formatLogEntries(entries) - } - - companion object { - const val LAYOUT_ID = R.layout.tor_bootstrap_logger - const val MAX_NEW_ENTRIES = 24 - const val MAX_LINES = 25 - } - -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapPagerAdapter.kt deleted ===================================== @@ -1,43 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.components.Components -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - -class TorBootstrapPagerAdapter( - private val components: Components, - private val interactor: TorBootstrapInteractor -) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { - if (viewType == BOOTSTRAP_UI_PAGE_TYPE) { - val viewDVH = LayoutInflater.from(parent.context) - .inflate(TorBootstrapConnectViewHolder.LAYOUT_ID, parent, false) - return TorBootstrapConnectViewHolder(viewDVH, components, interactor) - } else { - val viewLVH = LayoutInflater.from(parent.context) - .inflate(TorBootstrapLoggerViewHolder.LAYOUT_ID, parent, false) - return TorBootstrapLoggerViewHolder(viewLVH, components) - } - } - - @SuppressWarnings("EmptyFunctionBlock") - override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - } - - override fun getItemViewType(position: Int): Int = position - - override fun getItemCount(): Int = BOOTSTRAP_PAGE_COUNT - - companion object { - const val BOOTSTRAP_UI_PAGE_TYPE = 0 - const val BOOTSTRAP_LOG_PAGE_TYPE = 1 - const val BOOTSTRAP_PAGE_COUNT = 2 - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapPagerViewHolder.kt deleted ===================================== @@ -1,32 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import android.view.View -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.R -import org.mozilla.fenix.components.Components -import org.mozilla.fenix.databinding.TorBootstrapPagerBinding -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - -class TorBootstrapPagerViewHolder( - view: View, - components: Components, - interactor: TorBootstrapInteractor - ) : RecyclerView.ViewHolder(view) { - - private val bootstrapPagerAdapter = TorBootstrapPagerAdapter(components, interactor) - - init { - val binding = TorBootstrapPagerBinding.bind(view) - binding.bootstrapPager.apply { - adapter = bootstrapPagerAdapter - } - } - - companion object { - const val LAYOUT_ID = R.layout.tor_bootstrap_pager - } -} ===================================== fenix/app/src/main/java/org/mozilla/fenix/tor/view/TorBootstrapView.kt deleted ===================================== @@ -1,49 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.tor.view - -import androidx.lifecycle.LifecycleOwner -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView -import org.mozilla.fenix.components.appstate.AppState -import org.mozilla.fenix.ext.components -import org.mozilla.fenix.tor.interactor.TorBootstrapInteractor - - -class TorBootstrapView( - containerView: RecyclerView, - viewLifecycleOwner: LifecycleOwner, - interactor: TorBootstrapInteractor, -) { - - val view: RecyclerView = containerView //as RecyclerView - - private fun bootstrapAdapterItems() = listOf(AdapterItem.TorBootstrap) - - private val torBootstrapAdapter = TorBootstrapAdapter( - interactor, - viewLifecycleOwner, - containerView.context.components, - ) - - //private val torBootstrapAdapter = - // TorBootstrapAdapter(interactor, containerView.context.components) - //private val torBootstrapAdapter = TorBootstrapPagerAdapter(containerView.context.components, interactor) - - init { - containerView.apply { - adapter = torBootstrapAdapter - layoutManager = LinearLayoutManager(containerView.context) - } - } - - private fun AppState.toAdapterList(): List<AdapterItem> { - return bootstrapAdapterItems() - } - - fun update(state: AppState) { - torBootstrapAdapter.submitList(state.toAdapterList()) - } -} ===================================== fenix/app/src/main/res/drawable/ic_tor_connect_computer_graphic.xml deleted ===================================== @@ -1,506 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:aapt="http://schemas.android.com/aapt" - android:width="302dp" - android:height="263dp" - android:viewportWidth="302" - android:viewportHeight="263"> - <path - android:pathData="M279.49,222.64l-94.22,-0l-0,-79.61l94.22,-0z" - android:strokeWidth="1" - android:fillType="nonZero" - android:strokeColor="#00000000"> - <aapt:attr name="android:fillColor"> - <gradient - android:startY="203.70642" - android:startX="231.9" - android:endY="160.04314" - android:endX="232.90999" - android:type="linear"> - <item android:offset="0.08" android:color="#FF7E4696"/> - <item android:offset="0.39" android:color="#9B7E4696"/> - <item android:offset="0.85" android:color="#007E4696"/> - </gradient> - </aapt:attr> - </path> - <path - android:pathData="M112.74,217.05l-102.32,-0l-0,-102.32l102.32,-0z" - android:strokeWidth="1" - android:fillType="nonZero" - android:strokeColor="#00000000"> - <aapt:attr name="android:fillColor"> - <gradient - android:startY="203.36" - android:startX="60.96" - android:endY="124.990005" - android:endX="62.249996" - android:type="linear"> - <item android:offset="0.08" android:color="#FF00D9B5"/> - <item android:offset="0.3" android:color="#BA00D9B5"/> - <item android:offset="0.8" android:color="#1100D9B5"/> - <item android:offset="0.85" android:color="#0000D9B5"/> - </gradient> - </aapt:attr> - </path> - <path - android:pathData="M58,1L183.49,1C186.526,1.016 188.984,3.474 189,6.51L189,100.25L52.47,100.25L52.47,6.51C52.486,3.466 54.956,1.005 58,1Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#65318E" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M60.55,8.87h120.41v108.53h-120.41z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M60.55,8.87h120.41v108.53h-120.41z" - android:strokeWidth="1" - android:fillType="nonZero" - android:strokeColor="#00000000"> - <aapt:attr name="android:fillColor"> - <gradient - android:startY="-56.010002" - android:startX="120.75" - android:endY="120.520004" - android:endX="120.75" - android:type="linear"> - <item android:offset="0.08" android:color="#FF00D9B5"/> - <item android:offset="0.12" android:color="#F700D9B5"/> - <item android:offset="0.19" android:color="#E200D9B5"/> - <item android:offset="0.26" android:color="#BF00D9B5"/> - <item android:offset="0.35" android:color="#8E00D9B5"/> - <item android:offset="0.44" android:color="#5100D9B5"/> - <item android:offset="0.54" android:color="#0700D9B5"/> - <item android:offset="0.54" android:color="#0000D9B5"/> - </gradient> - </aapt:attr> - </path> - <path - android:pathData="M77.5,120.83h134.33v10.38h-134.33z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#65318E" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M52.47,100.25l0,10.29l25.03,20.67l0,-10.38z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#F0D4FD" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M60.33,33.17h43.89v37.87h-43.89z" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#65318E" - android:fillType="nonZero"/> - <path - android:pathData="M178.05,170.61L61.43,170.61L61.43,87C61.43,85.895 62.325,85 63.43,85L176,85C177.105,85 178,85.895 178,87L178.05,170.61Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M66.88,89.57h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M177.06,170.61l-115.63,0l21.37,17.75l115.64,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M82.8,188.36h115.11v8.96h-115.11z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M61.43,170.61l0,7.04l21.37,19.67l0,-8.96z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M190.59,183L74,183L74,99.29C74.027,98.177 74.937,97.29 76.05,97.29L188.54,97.29C189.653,97.29 190.563,98.177 190.59,99.29L190.59,183Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M79.42,101.91h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M189.73,182.95l-115.77,0l21.37,17.75l115.77,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M95.33,200.7h115.38v8.96h-115.38z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M73.96,182.95l0,6.78l21.37,19.93l0,-8.96z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M203.12,195.29L86.5,195.29L86.5,111.63C86.5,110.525 87.395,109.63 88.5,109.63L201.08,109.63C202.185,109.63 203.08,110.525 203.08,111.63L203.12,195.29Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M91.95,114.25h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M202.4,195.29l-115.9,0l21.37,17.75l115.9,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M107.87,213.04h115.64v8.96h-115.64z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M86.5,195.29l0,6.51l21.37,20.2l0,-8.96z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M215.66,207.63L99,207.63L99,124C99,122.895 99.895,122 101,122L213.61,122C214.715,122 215.61,122.895 215.61,124L215.66,207.63Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M104.49,126.59h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M215.06,207.63l-116.03,0l21.37,17.75l116.03,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M120.4,225.38h115.9v8.96h-115.9z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M99.03,207.63l0,6.25l21.37,20.46l0,-8.96z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M228.19,220L111.57,220L111.57,136.31C111.57,135.205 112.465,134.31 113.57,134.31L226.15,134.31C227.255,134.31 228.15,135.205 228.15,136.31L228.19,220Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M117.02,138.93h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M227.73,219.97l-116.16,0l21.37,17.75l116.16,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M132.94,237.72h116.16v8.96h-116.16z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M111.57,219.97l0,5.99l21.37,19.72l0,-7.96z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M245.52,234.67L128.9,234.67L128.9,151C128.9,149.895 129.795,149 130.9,149L243.48,149C244.585,149 245.48,149.895 245.48,151L245.52,234.67Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M134.36,153.64h105.71v76.37h-105.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M245.06,234.67l-116.16,0l21.37,17.76l116.16,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M150.27,252.43h116.16v8.96h-116.16z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M60.33,33.89h41.01v38.59h-41.01z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#65318E" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M67.24,33.89h34.1v30.04h-34.1z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#65318E" - android:strokeColor="#65318E" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M150.62,58.81L150.62,151L279.49,151L279.49,58.81C279.49,55.01 276.41,51.93 272.61,51.93L157.5,51.93C153.7,51.93 150.62,55.01 150.62,58.81ZM273.46,142.2L156.65,142.2L156.65,61.41L273.46,61.41L273.46,142.2Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M277.38,150.95l-126.76,0l23.62,19.62l126.76,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M174.24,170.57h126.76v9.9h-126.76z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M150.62,150.95l0,9.81l23.62,19.71l0,-9.9z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#490260" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M157.37,61.41h116.09v80.79h-116.09z" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#65318E" - android:fillType="nonZero"/> - <path - android:pathData="M157.37,61.41h116.09v80.79h-116.09z" - android:strokeWidth="1" - android:fillType="nonZero" - android:strokeColor="#00000000"> - <aapt:attr name="android:fillColor"> - <gradient - android:startY="18.45" - android:startX="215.42" - android:endY="112.96" - android:endX="215.42" - android:type="linear"> - <item android:offset="0.08" android:color="#FFF0D4FD"/> - <item android:offset="0.27" android:color="#C4F0D4FD"/> - <item android:offset="0.7" android:color="#33F0D4FD"/> - <item android:offset="0.85" android:color="#00F0D4FD"/> - </gradient> - </aapt:attr> - </path> - <path - android:pathData="M157.37,61.41h1.72v80.79h-1.72z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#490260" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M5.78,27.13L119,27.13C121.64,27.13 123.78,29.27 123.78,31.91L123.78,119.64L1,119.64L1,31.9C1.006,29.264 3.144,27.13 5.78,27.13Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M9.05,34.34h106.66v76.63h-106.66z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M121.75,119.63l-120.75,0l22.5,18.69l120.74,0z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M23.5,138.32h120.75v9.43h-120.75z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#00D9B5" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M1,119.63l0,9.34l22.5,18.78l0,-9.43z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#490260" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M9.82,35.75h104.98v74.01h-104.98z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M9.82,35.75h104.98v74.01h-104.98z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M58.1,35.75L115.36,35.75L115.36,102.15L65.3,102.15C61.341,102.156 58.122,98.959 58.1,95L58.1,35.75Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M69.28,35.43h46.09v53.39h-46.09z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#F0D4FD" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M9.05,110.21L9.05,34.34L12.25,34.34L12.25,107C12.253,107.85 11.917,108.667 11.316,109.269C10.716,109.871 9.9,110.21 9.05,110.21Z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#490260" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> - <path - android:pathData="M132.94,246.68l17.33,14.71l0,-8.96l-17.33,-14.71z" - android:strokeLineJoin="round" - android:strokeWidth="1.76" - android:fillColor="#FFFFFF" - android:strokeColor="#490260" - android:fillType="nonZero" - android:strokeLineCap="round"/> -</vector> ===================================== fenix/app/src/main/res/layout/tor_bootstrap_connect.xml deleted ===================================== @@ -1,100 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="bottom" - android:layout_marginLeft="16dp" - android:layout_marginRight="16dp" > - - <ImageView - android:id="@+id/tor_bootstrap_network_settings_button" - app:srcCompat="@drawable/mozac_ic_settings" - android:scaleType="fitCenter" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_marginTop="20dp" - android:layout_alignParentTop="true" - android:layout_alignParentEnd="true" - tools:ignore="ContentDescription" /> - - <ImageView - android:id="@+id/tor_bootstrap_image" - app:srcCompat="@drawable/ic_tor_connect_computer_graphic" - android:scaleType="fitCenter" - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:layout_marginTop="80dp" - android:layout_marginBottom="10dp" - android:layout_centerHorizontal="true" - android:layout_below="@id/tor_bootstrap_network_settings_button" - android:layout_above="@id/tor_bootstrap_connect_button" - android:gravity="center" - tools:ignore="ContentDescription" /> - - <androidx.appcompat.widget.SwitchCompat - android:id="@+id/quick_start_toggle" - android:visibility="gone" - android:checked="false" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_above="@id/tor_bootstrap_connect_button" /> - - <Button - android:id="@+id/tor_bootstrap_connect_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:width="160dp" - android:height="36dp" - android:layout_marginBottom="10dp" - android:layout_centerHorizontal="true" - android:layout_above="@id/tor_bootstrap_status_message" - android:gravity="center|center_vertical" - android:text="@string/tor_bootstrap_connect" - android:fontFamily="Roboto-Medium" - android:textColor="#FF000000" - android:textSize="18sp" - android:lineSpacingMultiplier="0.89" - android:background="@drawable/rounded_corners" /> - - <TextView - android:id="@+id/tor_bootstrap_status_message" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="32dp" - android:layout_centerHorizontal="true" - android:paddingStart="8dp" - android:paddingEnd="8dp" - android:gravity="center" - android:lines="3" - android:layout_above="@id/tor_bootstrap_swipe_log" /> - - <TextView - android:id="@+id/tor_bootstrap_swipe_log" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:width="360dp" - android:height="24dp" - android:layout_marginBottom="15dp" - android:layout_centerHorizontal="true" - android:layout_alignParentBottom="true" - android:gravity="center" - android:textSize="14sp" - android:textColor="#FFFFFFFF" - android:fontFamily="Roboto-Regular" - android:lineSpacingMultiplier="1.71" - android:text="@string/tor_bootstrap_swipe_for_logs" - android:layout_above="@id/tor_bootstrap_progress" /> - - <ProgressBar - android:id="@+id/tor_bootstrap_progress" - style="?android:attr/progressBarStyleHorizontal" - android:layout_width="match_parent" - android:layout_height="3dp" - android:visibility="invisible" - android:layout_alignParentBottom="true" /> -</RelativeLayout> ===================================== fenix/app/src/main/res/layout/tor_bootstrap_logger.xml deleted ===================================== @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> -<FrameLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent"> - <TextView - android:id="@+id/tor_bootstrap_log_entries" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="bottom" - android:textColor="@android:color/white" - android:fontFamily="RobotoMono-Regular" - android:textSize="12sp" - android:textIsSelectable="true" - android:layout_marginLeft="20dp" - android:layout_marginRight="20dp" - android:layout_marginBottom="20dp" /> -</FrameLayout> ===================================== fenix/app/src/main/res/layout/tor_bootstrap_pager.xml deleted ===================================== @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- This Source Code Form is subject to the terms of the Mozilla Public - - License, v. 2.0. If a copy of the MPL was not distributed with this - - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - -<com.google.android.material.appbar.AppBarLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:background="?torBootstrapBackground"> - - <androidx.viewpager2.widget.ViewPager2 - android:id="@+id/bootstrap_pager" - android:layout_width="match_parent" - android:layout_height="match_parent" /> -</com.google.android.material.appbar.AppBarLayout> View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/cf7… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/cf7… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41881: Don't persist custom network requests on private windows"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch mullvad-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: bea39ca4 by Pier Angelo Vendrame at 2024-05-13T20:40:44+00:00 Revert &quot;Bug 41881: Don&#39;t persist custom network requests on private windows&quot; This reverts commit 6450a4e62e810832f35ee8732a4630ec2c2ba6f6. - - - - - 400cba03 by cypherpunks1 at 2024-05-13T20:40:45+00:00 Bug 1892052 - Do not persist custom network requests on PBM. r=devtools-reviewers,bomsy,nchevobbe Differential Revision: https://phabricator.services.mozilla.com/D207762 - - - - - 3 changed files: - devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js - devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js - devtools/client/netmonitor/test/head.js Changes: ===================================== devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js ===================================== @@ -4,11 +4,6 @@ "use strict"; -const lazy = {}; -ChromeUtils.defineESModuleGetters(lazy, { - PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs", -}); - const { Component, createFactory, @@ -127,7 +122,7 @@ class HTTPCustomRequestPanel extends Component { async componentDidMount() { let { connector, request } = this.props; - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!connector.currentTarget?.targetForm?.isPrivate) { const persistedCustomRequest = await asyncStorage.getItem( "devtools.netmonitor.customRequest" ); @@ -198,7 +193,7 @@ class HTTPCustomRequestPanel extends Component { } componentWillUnmount() { - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!this.props.connector.currentTarget?.targetForm?.isPrivate) { asyncStorage.setItem("devtools.netmonitor.customRequest", this.state); } } ===================================== devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js ===================================== @@ -9,30 +9,14 @@ const asyncStorage = require("resource://devtools/shared/async-storage.js"); * Test if content is still persisted after the panel is closed */ -add_task(async function () { - // Turn true the pref - await pushPref("devtools.netmonitor.features.newEditAndResend", true); - // Reset the storage for the persisted custom request - await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - - const { monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { - requestCount: 1, - }); - info("Starting test... "); - - const { document, store, windowRequire } = monitor.panelWin; - - // Action should be processed synchronously in tests. - const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); - store.dispatch(Actions.batchEnable(false)); - - info("open the left panel"); - let waitForPanels = waitForDOM( +async function addCustomRequestTestContent(tab, monitor, document) { + info("Open the left panel"); + const waitForPanels = waitForDOM( document, ".monitor-panel .network-action-bar" ); - let HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); @@ -59,91 +43,166 @@ add_task(async function () { "#http-custom-query .map-add-new-inputs .http-custom-input-name" ); newParameterName.focus(); - EventUtils.sendString("My-param"); + EventUtils.sendString("My-param", monitor.panelWin); info("Adding new headers"); const newHeaderName = document.querySelector( "#http-custom-headers .map-add-new-inputs .http-custom-input-name" ); newHeaderName.focus(); - EventUtils.sendString("My-header"); + EventUtils.sendString("My-header", monitor.panelWin); const newHeaderValue = Array.from( document.querySelectorAll( "#http-custom-headers .http-custom-input .http-custom-input-value" ) - ).pop(); + ).at(-1); newHeaderValue.focus(); - EventUtils.sendString("my-value"); + EventUtils.sendString("my-value", monitor.panelWin); const postValue = document.querySelector("#http-custom-postdata-value"); postValue.focus(); - EventUtils.sendString("{'Name': 'Value'}"); + EventUtils.sendString("{'Name': 'Value'}", monitor.panelWin); - // Close the panel + info("Close the panel"); const closePanel = document.querySelector( ".network-action-bar .tabs-navigation .sidebar-toggle" ); closePanel.click(); +} - // Open the panel again to see if the content is still there - waitForPanels = waitUntil( +async function runTests(tab, monitor, document, isPrivate = false) { + info("Open the panel again to see if the content is still there"); + const waitForPanels = waitFor( () => document.querySelector(".http-custom-request-panel") && document.querySelector("#http-custom-request-send-button").disabled === - false + isPrivate ); - HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); await waitForPanels; - is( - methodValue.value, - "POST", - "The content should still be there after the user close the panel and re-opened" - ); - - is( - url.value, - "https://www.example.com?My-param=", - "The url should still be there after the user close the panel and re-opened" - ); + // Wait a few seconds to make sure all the fields have been updated + await wait(1500); + + const customMethod = document.querySelector("#http-custom-method-value"); + const customUrl = document.querySelector(".http-custom-url-value"); + const customQuery = document.querySelectorAll( + "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" + ); + const customHeaders = document.querySelectorAll( + "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" + ); + const postDataValue = document.querySelector("#http-custom-postdata-value"); + + if (isPrivate) { + is( + customMethod.value, + "GET", + "The method should not be persisted after the user close the panel and re-opened in PBM" + ); + + is( + customUrl.value, + "", + "The url should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customQuery.length, + 0, + "The Parameter should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customHeaders.length, + 0, + "There should be no custom headers after the user close the panel and re-opened in PBM" + ); + + is( + postDataValue.value, + "", + "The post data should still be reset after the user close the panel and re-opened in PBM" + ); + } else { + is( + customMethod.value, + "POST", + "The method should be persisted after the user close the panel and re-opened" + ); + + is( + customUrl.value, + "https://www.example.com?My-param=", + "The url should still be there after the user close the panel and re-opened" + ); + + const [nameParam] = Array.from(customQuery); + is( + nameParam.value, + "My-param", + "The Parameter name should still be there after the user close the panel and re-opened" + ); + + const [name, value] = Array.from(customHeaders); + is( + name.value, + "My-header", + "The header name should still be there after the user close the panel and re-opened" + ); + is( + value.value, + "my-value", + "The header value should still be there after the user close the panel and re-opened" + ); + + is( + postDataValue.value, + "{'Name': 'Value'}", + "The content should still be there after the user close the panel and re-opened" + ); + } +} + +add_task(async function testRequestPanelPersistedContent() { + // Turn true the pref + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + // Reset the storage for the persisted custom request + await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - const [nameParam] = Array.from( - document.querySelectorAll( - "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - nameParam.value, - "My-param", - "The Parameter name should still be there after the user close the panel and re-opened" - ); + const { tab, monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { + requestCount: 1, + }); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - const [name, value] = Array.from( - document.querySelectorAll( - "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - name.value, - "My-header", - "The header name should still be there after the user close the panel and re-opened" - ); - is( - value.value, - "my-value", - "The header value should still be there after the user close the panel and re-opened" - ); + info("Starting test... "); + info("Add initial custom request test content"); + await addCustomRequestTestContent(tab, monitor, document); + await runTests(tab, monitor, document); + await teardown(monitor); +}); - is( - postValue.value, - "{'Name': 'Value'}", - "The content should still be there after the user close the panel and re-opened" +add_task(async function testRequestPanelPersistedContentInPrivateWindow() { + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + const { tab, monitor, privateWindow } = await initNetMonitor( + HTTPS_CUSTOM_GET_URL, + { + requestCount: 1, + openInPrivateWindow: true, + } ); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - await teardown(monitor); + info("Starting test in private window... "); + await runTests(tab, monitor, document, true); + await teardown(monitor, privateWindow); }); ===================================== devtools/client/netmonitor/test/head.js ===================================== @@ -321,6 +321,7 @@ function initNetMonitor( expectedEventTimings, waitForLoad = true, enableCache = false, + openInPrivateWindow = false, } ) { info("Initializing a network monitor pane."); @@ -341,7 +342,22 @@ function initNetMonitor( ], }); - const tab = await addTab(url, { waitForLoad }); + let tab = null; + let privateWindow = null; + + if (openInPrivateWindow) { + privateWindow = await BrowserTestUtils.openNewBrowserWindow({ + private: true, + }); + ok( + PrivateBrowsingUtils.isContentWindowPrivate(privateWindow), + "window is private" + ); + tab = BrowserTestUtils.addTab(privateWindow.gBrowser, url); + } else { + tab = await addTab(url, { waitForLoad }); + } + info("Net tab added successfully: " + url); const toolbox = await gDevTools.showToolboxForTab(tab, { @@ -371,7 +387,7 @@ function initNetMonitor( await clearNetworkEvents(monitor); } - return { tab, monitor, toolbox }; + return { tab, monitor, toolbox, privateWindow }; })(); } @@ -408,7 +424,7 @@ async function clearNetworkEvents(monitor) { store.dispatch(Actions.clearRequests()); } -function teardown(monitor) { +function teardown(monitor, privateWindow) { info("Destroying the specified network monitor."); return (async function () { @@ -419,6 +435,12 @@ function teardown(monitor) { await monitor.toolbox.destroy(); await removeTab(tab); + + if (privateWindow) { + const closed = BrowserTestUtils.windowClosed(privateWindow); + privateWindow.BrowserCommands.tryToCloseWindow(); + await closed; + } })(); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/be… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/be… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41881: Don't persist custom network requests on private windows"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch base-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 1e2cec74 by Pier Angelo Vendrame at 2024-05-13T20:39:35+00:00 Revert &quot;Bug 41881: Don&#39;t persist custom network requests on private windows&quot; This reverts commit 6450a4e62e810832f35ee8732a4630ec2c2ba6f6. - - - - - fa7dafa6 by cypherpunks1 at 2024-05-13T20:39:43+00:00 Bug 1892052 - Do not persist custom network requests on PBM. r=devtools-reviewers,bomsy,nchevobbe Differential Revision: https://phabricator.services.mozilla.com/D207762 - - - - - 3 changed files: - devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js - devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js - devtools/client/netmonitor/test/head.js Changes: ===================================== devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js ===================================== @@ -4,11 +4,6 @@ "use strict"; -const lazy = {}; -ChromeUtils.defineESModuleGetters(lazy, { - PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs", -}); - const { Component, createFactory, @@ -127,7 +122,7 @@ class HTTPCustomRequestPanel extends Component { async componentDidMount() { let { connector, request } = this.props; - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!connector.currentTarget?.targetForm?.isPrivate) { const persistedCustomRequest = await asyncStorage.getItem( "devtools.netmonitor.customRequest" ); @@ -198,7 +193,7 @@ class HTTPCustomRequestPanel extends Component { } componentWillUnmount() { - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!this.props.connector.currentTarget?.targetForm?.isPrivate) { asyncStorage.setItem("devtools.netmonitor.customRequest", this.state); } } ===================================== devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js ===================================== @@ -9,30 +9,14 @@ const asyncStorage = require("resource://devtools/shared/async-storage.js"); * Test if content is still persisted after the panel is closed */ -add_task(async function () { - // Turn true the pref - await pushPref("devtools.netmonitor.features.newEditAndResend", true); - // Reset the storage for the persisted custom request - await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - - const { monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { - requestCount: 1, - }); - info("Starting test... "); - - const { document, store, windowRequire } = monitor.panelWin; - - // Action should be processed synchronously in tests. - const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); - store.dispatch(Actions.batchEnable(false)); - - info("open the left panel"); - let waitForPanels = waitForDOM( +async function addCustomRequestTestContent(tab, monitor, document) { + info("Open the left panel"); + const waitForPanels = waitForDOM( document, ".monitor-panel .network-action-bar" ); - let HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); @@ -59,91 +43,166 @@ add_task(async function () { "#http-custom-query .map-add-new-inputs .http-custom-input-name" ); newParameterName.focus(); - EventUtils.sendString("My-param"); + EventUtils.sendString("My-param", monitor.panelWin); info("Adding new headers"); const newHeaderName = document.querySelector( "#http-custom-headers .map-add-new-inputs .http-custom-input-name" ); newHeaderName.focus(); - EventUtils.sendString("My-header"); + EventUtils.sendString("My-header", monitor.panelWin); const newHeaderValue = Array.from( document.querySelectorAll( "#http-custom-headers .http-custom-input .http-custom-input-value" ) - ).pop(); + ).at(-1); newHeaderValue.focus(); - EventUtils.sendString("my-value"); + EventUtils.sendString("my-value", monitor.panelWin); const postValue = document.querySelector("#http-custom-postdata-value"); postValue.focus(); - EventUtils.sendString("{'Name': 'Value'}"); + EventUtils.sendString("{'Name': 'Value'}", monitor.panelWin); - // Close the panel + info("Close the panel"); const closePanel = document.querySelector( ".network-action-bar .tabs-navigation .sidebar-toggle" ); closePanel.click(); +} - // Open the panel again to see if the content is still there - waitForPanels = waitUntil( +async function runTests(tab, monitor, document, isPrivate = false) { + info("Open the panel again to see if the content is still there"); + const waitForPanels = waitFor( () => document.querySelector(".http-custom-request-panel") && document.querySelector("#http-custom-request-send-button").disabled === - false + isPrivate ); - HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); await waitForPanels; - is( - methodValue.value, - "POST", - "The content should still be there after the user close the panel and re-opened" - ); - - is( - url.value, - "https://www.example.com?My-param=", - "The url should still be there after the user close the panel and re-opened" - ); + // Wait a few seconds to make sure all the fields have been updated + await wait(1500); + + const customMethod = document.querySelector("#http-custom-method-value"); + const customUrl = document.querySelector(".http-custom-url-value"); + const customQuery = document.querySelectorAll( + "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" + ); + const customHeaders = document.querySelectorAll( + "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" + ); + const postDataValue = document.querySelector("#http-custom-postdata-value"); + + if (isPrivate) { + is( + customMethod.value, + "GET", + "The method should not be persisted after the user close the panel and re-opened in PBM" + ); + + is( + customUrl.value, + "", + "The url should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customQuery.length, + 0, + "The Parameter should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customHeaders.length, + 0, + "There should be no custom headers after the user close the panel and re-opened in PBM" + ); + + is( + postDataValue.value, + "", + "The post data should still be reset after the user close the panel and re-opened in PBM" + ); + } else { + is( + customMethod.value, + "POST", + "The method should be persisted after the user close the panel and re-opened" + ); + + is( + customUrl.value, + "https://www.example.com?My-param=", + "The url should still be there after the user close the panel and re-opened" + ); + + const [nameParam] = Array.from(customQuery); + is( + nameParam.value, + "My-param", + "The Parameter name should still be there after the user close the panel and re-opened" + ); + + const [name, value] = Array.from(customHeaders); + is( + name.value, + "My-header", + "The header name should still be there after the user close the panel and re-opened" + ); + is( + value.value, + "my-value", + "The header value should still be there after the user close the panel and re-opened" + ); + + is( + postDataValue.value, + "{'Name': 'Value'}", + "The content should still be there after the user close the panel and re-opened" + ); + } +} + +add_task(async function testRequestPanelPersistedContent() { + // Turn true the pref + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + // Reset the storage for the persisted custom request + await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - const [nameParam] = Array.from( - document.querySelectorAll( - "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - nameParam.value, - "My-param", - "The Parameter name should still be there after the user close the panel and re-opened" - ); + const { tab, monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { + requestCount: 1, + }); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - const [name, value] = Array.from( - document.querySelectorAll( - "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - name.value, - "My-header", - "The header name should still be there after the user close the panel and re-opened" - ); - is( - value.value, - "my-value", - "The header value should still be there after the user close the panel and re-opened" - ); + info("Starting test... "); + info("Add initial custom request test content"); + await addCustomRequestTestContent(tab, monitor, document); + await runTests(tab, monitor, document); + await teardown(monitor); +}); - is( - postValue.value, - "{'Name': 'Value'}", - "The content should still be there after the user close the panel and re-opened" +add_task(async function testRequestPanelPersistedContentInPrivateWindow() { + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + const { tab, monitor, privateWindow } = await initNetMonitor( + HTTPS_CUSTOM_GET_URL, + { + requestCount: 1, + openInPrivateWindow: true, + } ); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - await teardown(monitor); + info("Starting test in private window... "); + await runTests(tab, monitor, document, true); + await teardown(monitor, privateWindow); }); ===================================== devtools/client/netmonitor/test/head.js ===================================== @@ -321,6 +321,7 @@ function initNetMonitor( expectedEventTimings, waitForLoad = true, enableCache = false, + openInPrivateWindow = false, } ) { info("Initializing a network monitor pane."); @@ -341,7 +342,22 @@ function initNetMonitor( ], }); - const tab = await addTab(url, { waitForLoad }); + let tab = null; + let privateWindow = null; + + if (openInPrivateWindow) { + privateWindow = await BrowserTestUtils.openNewBrowserWindow({ + private: true, + }); + ok( + PrivateBrowsingUtils.isContentWindowPrivate(privateWindow), + "window is private" + ); + tab = BrowserTestUtils.addTab(privateWindow.gBrowser, url); + } else { + tab = await addTab(url, { waitForLoad }); + } + info("Net tab added successfully: " + url); const toolbox = await gDevTools.showToolboxForTab(tab, { @@ -371,7 +387,7 @@ function initNetMonitor( await clearNetworkEvents(monitor); } - return { tab, monitor, toolbox }; + return { tab, monitor, toolbox, privateWindow }; })(); } @@ -408,7 +424,7 @@ async function clearNetworkEvents(monitor) { store.dispatch(Actions.clearRequests()); } -function teardown(monitor) { +function teardown(monitor, privateWindow) { info("Destroying the specified network monitor."); return (async function () { @@ -419,6 +435,12 @@ function teardown(monitor) { await monitor.toolbox.destroy(); await removeTab(tab); + + if (privateWindow) { + const closed = BrowserTestUtils.windowClosed(privateWindow); + privateWindow.BrowserCommands.tryToCloseWindow(); + await closed; + } })(); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/3bed85… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/3bed85… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41881: Don't persist custom network requests on private windows"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch tor-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 55da4b57 by Pier Angelo Vendrame at 2024-05-13T20:38:15+00:00 Revert &quot;Bug 41881: Don&#39;t persist custom network requests on private windows&quot; This reverts commit 6450a4e62e810832f35ee8732a4630ec2c2ba6f6. - - - - - 894dc8df by cypherpunks1 at 2024-05-13T20:38:15+00:00 Bug 1892052 - Do not persist custom network requests on PBM. r=devtools-reviewers,bomsy,nchevobbe Differential Revision: https://phabricator.services.mozilla.com/D207762 - - - - - 3 changed files: - devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js - devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js - devtools/client/netmonitor/test/head.js Changes: ===================================== devtools/client/netmonitor/src/components/new-request/HTTPCustomRequestPanel.js ===================================== @@ -4,11 +4,6 @@ "use strict"; -const lazy = {}; -ChromeUtils.defineESModuleGetters(lazy, { - PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs", -}); - const { Component, createFactory, @@ -127,7 +122,7 @@ class HTTPCustomRequestPanel extends Component { async componentDidMount() { let { connector, request } = this.props; - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!connector.currentTarget?.targetForm?.isPrivate) { const persistedCustomRequest = await asyncStorage.getItem( "devtools.netmonitor.customRequest" ); @@ -198,7 +193,7 @@ class HTTPCustomRequestPanel extends Component { } componentWillUnmount() { - if (!lazy.PrivateBrowsingUtils.isWindowPrivate(window)) { + if (!this.props.connector.currentTarget?.targetForm?.isPrivate) { asyncStorage.setItem("devtools.netmonitor.customRequest", this.state); } } ===================================== devtools/client/netmonitor/test/browser_net_new_request_panel_persisted_content.js ===================================== @@ -9,30 +9,14 @@ const asyncStorage = require("resource://devtools/shared/async-storage.js"); * Test if content is still persisted after the panel is closed */ -add_task(async function () { - // Turn true the pref - await pushPref("devtools.netmonitor.features.newEditAndResend", true); - // Reset the storage for the persisted custom request - await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - - const { monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { - requestCount: 1, - }); - info("Starting test... "); - - const { document, store, windowRequire } = monitor.panelWin; - - // Action should be processed synchronously in tests. - const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); - store.dispatch(Actions.batchEnable(false)); - - info("open the left panel"); - let waitForPanels = waitForDOM( +async function addCustomRequestTestContent(tab, monitor, document) { + info("Open the left panel"); + const waitForPanels = waitForDOM( document, ".monitor-panel .network-action-bar" ); - let HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); @@ -59,91 +43,166 @@ add_task(async function () { "#http-custom-query .map-add-new-inputs .http-custom-input-name" ); newParameterName.focus(); - EventUtils.sendString("My-param"); + EventUtils.sendString("My-param", monitor.panelWin); info("Adding new headers"); const newHeaderName = document.querySelector( "#http-custom-headers .map-add-new-inputs .http-custom-input-name" ); newHeaderName.focus(); - EventUtils.sendString("My-header"); + EventUtils.sendString("My-header", monitor.panelWin); const newHeaderValue = Array.from( document.querySelectorAll( "#http-custom-headers .http-custom-input .http-custom-input-value" ) - ).pop(); + ).at(-1); newHeaderValue.focus(); - EventUtils.sendString("my-value"); + EventUtils.sendString("my-value", monitor.panelWin); const postValue = document.querySelector("#http-custom-postdata-value"); postValue.focus(); - EventUtils.sendString("{'Name': 'Value'}"); + EventUtils.sendString("{'Name': 'Value'}", monitor.panelWin); - // Close the panel + info("Close the panel"); const closePanel = document.querySelector( ".network-action-bar .tabs-navigation .sidebar-toggle" ); closePanel.click(); +} - // Open the panel again to see if the content is still there - waitForPanels = waitUntil( +async function runTests(tab, monitor, document, isPrivate = false) { + info("Open the panel again to see if the content is still there"); + const waitForPanels = waitFor( () => document.querySelector(".http-custom-request-panel") && document.querySelector("#http-custom-request-send-button").disabled === - false + isPrivate ); - HTTPCustomRequestButton = document.querySelector( + const HTTPCustomRequestButton = document.querySelector( "#netmonitor-toolbar-container .devtools-http-custom-request-icon" ); HTTPCustomRequestButton.click(); await waitForPanels; - is( - methodValue.value, - "POST", - "The content should still be there after the user close the panel and re-opened" - ); - - is( - url.value, - "https://www.example.com?My-param=", - "The url should still be there after the user close the panel and re-opened" - ); + // Wait a few seconds to make sure all the fields have been updated + await wait(1500); + + const customMethod = document.querySelector("#http-custom-method-value"); + const customUrl = document.querySelector(".http-custom-url-value"); + const customQuery = document.querySelectorAll( + "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" + ); + const customHeaders = document.querySelectorAll( + "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" + ); + const postDataValue = document.querySelector("#http-custom-postdata-value"); + + if (isPrivate) { + is( + customMethod.value, + "GET", + "The method should not be persisted after the user close the panel and re-opened in PBM" + ); + + is( + customUrl.value, + "", + "The url should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customQuery.length, + 0, + "The Parameter should not be there after the user close the panel and re-opened in PBM" + ); + + is( + customHeaders.length, + 0, + "There should be no custom headers after the user close the panel and re-opened in PBM" + ); + + is( + postDataValue.value, + "", + "The post data should still be reset after the user close the panel and re-opened in PBM" + ); + } else { + is( + customMethod.value, + "POST", + "The method should be persisted after the user close the panel and re-opened" + ); + + is( + customUrl.value, + "https://www.example.com?My-param=", + "The url should still be there after the user close the panel and re-opened" + ); + + const [nameParam] = Array.from(customQuery); + is( + nameParam.value, + "My-param", + "The Parameter name should still be there after the user close the panel and re-opened" + ); + + const [name, value] = Array.from(customHeaders); + is( + name.value, + "My-header", + "The header name should still be there after the user close the panel and re-opened" + ); + is( + value.value, + "my-value", + "The header value should still be there after the user close the panel and re-opened" + ); + + is( + postDataValue.value, + "{'Name': 'Value'}", + "The content should still be there after the user close the panel and re-opened" + ); + } +} + +add_task(async function testRequestPanelPersistedContent() { + // Turn true the pref + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + // Reset the storage for the persisted custom request + await asyncStorage.removeItem("devtools.netmonitor.customRequest"); - const [nameParam] = Array.from( - document.querySelectorAll( - "#http-custom-query .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - nameParam.value, - "My-param", - "The Parameter name should still be there after the user close the panel and re-opened" - ); + const { tab, monitor } = await initNetMonitor(HTTPS_CUSTOM_GET_URL, { + requestCount: 1, + }); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - const [name, value] = Array.from( - document.querySelectorAll( - "#http-custom-headers .tabpanel-summary-container.http-custom-input textarea" - ) - ); - is( - name.value, - "My-header", - "The header name should still be there after the user close the panel and re-opened" - ); - is( - value.value, - "my-value", - "The header value should still be there after the user close the panel and re-opened" - ); + info("Starting test... "); + info("Add initial custom request test content"); + await addCustomRequestTestContent(tab, monitor, document); + await runTests(tab, monitor, document); + await teardown(monitor); +}); - is( - postValue.value, - "{'Name': 'Value'}", - "The content should still be there after the user close the panel and re-opened" +add_task(async function testRequestPanelPersistedContentInPrivateWindow() { + await pushPref("devtools.netmonitor.features.newEditAndResend", true); + const { tab, monitor, privateWindow } = await initNetMonitor( + HTTPS_CUSTOM_GET_URL, + { + requestCount: 1, + openInPrivateWindow: true, + } ); + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + store.dispatch(Actions.batchEnable(false)); - await teardown(monitor); + info("Starting test in private window... "); + await runTests(tab, monitor, document, true); + await teardown(monitor, privateWindow); }); ===================================== devtools/client/netmonitor/test/head.js ===================================== @@ -321,6 +321,7 @@ function initNetMonitor( expectedEventTimings, waitForLoad = true, enableCache = false, + openInPrivateWindow = false, } ) { info("Initializing a network monitor pane."); @@ -341,7 +342,22 @@ function initNetMonitor( ], }); - const tab = await addTab(url, { waitForLoad }); + let tab = null; + let privateWindow = null; + + if (openInPrivateWindow) { + privateWindow = await BrowserTestUtils.openNewBrowserWindow({ + private: true, + }); + ok( + PrivateBrowsingUtils.isContentWindowPrivate(privateWindow), + "window is private" + ); + tab = BrowserTestUtils.addTab(privateWindow.gBrowser, url); + } else { + tab = await addTab(url, { waitForLoad }); + } + info("Net tab added successfully: " + url); const toolbox = await gDevTools.showToolboxForTab(tab, { @@ -371,7 +387,7 @@ function initNetMonitor( await clearNetworkEvents(monitor); } - return { tab, monitor, toolbox }; + return { tab, monitor, toolbox, privateWindow }; })(); } @@ -408,7 +424,7 @@ async function clearNetworkEvents(monitor) { store.dispatch(Actions.clearRequests()); } -function teardown(monitor) { +function teardown(monitor, privateWindow) { info("Destroying the specified network monitor."); return (async function () { @@ -419,6 +435,12 @@ function teardown(monitor) { await monitor.toolbox.destroy(); await removeTab(tab); + + if (privateWindow) { + const closed = BrowserTestUtils.windowClosed(privateWindow); + privateWindow.BrowserCommands.tryToCloseWindow(); + await closed; + } })(); } View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/32a6f9… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/32a6f9… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41740: Change the RFP value of devicePixelRatio to 2"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch mullvad-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: 532087af by Pier Angelo Vendrame at 2024-05-13T19:56:57+00:00 Revert &quot;Bug 41740: Change the RFP value of devicePixelRatio to 2&quot; This reverts commit 94c39de65acb82efc7ecabbd7125f8d2aeb46d02. - - - - - bed64b83 by Fatih at 2024-05-13T19:56:57+00:00 Bug 1830629: Remove unnecessary checks for pdf.js for RFP. r=tjr resource:// is exempt from RFP, so we no longer need to check pdf.js specifically. Differential Revision: https://phabricator.services.mozilla.com/D209359 - - - - - 1 changed file: - dom/base/nsGlobalWindowInner.cpp Changes: ===================================== dom/base/nsGlobalWindowInner.cpp ===================================== @@ -3604,20 +3604,9 @@ double nsGlobalWindowInner::GetDevicePixelRatio(CallerType aCallerType, return 1.0; } - if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType, - RFPTarget::Unknown)) { - // Spoofing the DevicePixelRatio causes blurriness in some situations - // on HiDPI displays. pdf.js is a non-system caller; but it can't - // expose the fingerprintable information, so we can safely disable - // spoofing in this situation. It doesn't address the issue for - // web-rendered content (including pdf.js instances on the web.) - // In the future we hope to have a better solution to fix all HiDPI - // blurriness... - nsAutoCString origin; - nsresult rv = this->GetPrincipal()->GetOrigin(origin); - if (NS_FAILED(rv) || origin != "resource://pdf.js"_ns) { - return 2.0; - } + if (nsIGlobalObject::ShouldResistFingerprinting( + aCallerType, RFPTarget::Unknown)) { + return 2.0; } if (aCallerType == CallerType::NonSystem) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/5e… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/5e… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41740: Change the RFP value of devicePixelRatio to 2"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch base-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: be35122b by Pier Angelo Vendrame at 2024-05-13T19:56:00+00:00 Revert &quot;Bug 41740: Change the RFP value of devicePixelRatio to 2&quot; This reverts commit 94c39de65acb82efc7ecabbd7125f8d2aeb46d02. - - - - - 3bed85e2 by Fatih at 2024-05-13T19:56:00+00:00 Bug 1830629: Remove unnecessary checks for pdf.js for RFP. r=tjr resource:// is exempt from RFP, so we no longer need to check pdf.js specifically. Differential Revision: https://phabricator.services.mozilla.com/D209359 - - - - - 1 changed file: - dom/base/nsGlobalWindowInner.cpp Changes: ===================================== dom/base/nsGlobalWindowInner.cpp ===================================== @@ -3604,20 +3604,9 @@ double nsGlobalWindowInner::GetDevicePixelRatio(CallerType aCallerType, return 1.0; } - if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType, - RFPTarget::Unknown)) { - // Spoofing the DevicePixelRatio causes blurriness in some situations - // on HiDPI displays. pdf.js is a non-system caller; but it can't - // expose the fingerprintable information, so we can safely disable - // spoofing in this situation. It doesn't address the issue for - // web-rendered content (including pdf.js instances on the web.) - // In the future we hope to have a better solution to fix all HiDPI - // blurriness... - nsAutoCString origin; - nsresult rv = this->GetPrincipal()->GetOrigin(origin); - if (NS_FAILED(rv) || origin != "resource://pdf.js"_ns) { - return 2.0; - } + if (nsIGlobalObject::ShouldResistFingerprinting( + aCallerType, RFPTarget::Unknown)) { + return 2.0; } if (aCallerType == CallerType::NonSystem) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/1f7194… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/1f7194… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.11.0esr-13.5-1] 2 commits: Revert "Bug 41740: Change the RFP value of devicePixelRatio to 2"
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch tor-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 736fba53 by Pier Angelo Vendrame at 2024-05-13T17:49:22+02:00 Revert &quot;Bug 41740: Change the RFP value of devicePixelRatio to 2&quot; This reverts commit 94c39de65acb82efc7ecabbd7125f8d2aeb46d02. - - - - - 32a6f98c by Fatih at 2024-05-13T17:52:54+02:00 Bug 1830629: Remove unnecessary checks for pdf.js for RFP. r=tjr resource:// is exempt from RFP, so we no longer need to check pdf.js specifically. Differential Revision: https://phabricator.services.mozilla.com/D209359 - - - - - 1 changed file: - dom/base/nsGlobalWindowInner.cpp Changes: ===================================== dom/base/nsGlobalWindowInner.cpp ===================================== @@ -3604,20 +3604,9 @@ double nsGlobalWindowInner::GetDevicePixelRatio(CallerType aCallerType, return 1.0; } - if (nsIGlobalObject::ShouldResistFingerprinting(aCallerType, - RFPTarget::Unknown)) { - // Spoofing the DevicePixelRatio causes blurriness in some situations - // on HiDPI displays. pdf.js is a non-system caller; but it can't - // expose the fingerprintable information, so we can safely disable - // spoofing in this situation. It doesn't address the issue for - // web-rendered content (including pdf.js instances on the web.) - // In the future we hope to have a better solution to fix all HiDPI - // blurriness... - nsAutoCString origin; - nsresult rv = this->GetPrincipal()->GetOrigin(origin); - if (NS_FAILED(rv) || origin != "resource://pdf.js"_ns) { - return 2.0; - } + if (nsIGlobalObject::ShouldResistFingerprinting( + aCallerType, RFPTarget::Unknown)) { + return 2.0; } if (aCallerType == CallerType::NonSystem) { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8e9d5e… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/8e9d5e… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-update-responses][main] release: new version, 13.0.15
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch main at The Tor Project / Applications / Tor Browser update responses Commits: e8782cea by Richard Pospesel at 2024-05-13T15:17:52+00:00 release: new version, 13.0.15 - - - - - 30 changed files: - update_3/release/.htaccess - − update_3/release/13.0.11-13.0.14-linux-i686-ALL.xml - − update_3/release/13.0.11-13.0.14-linux-x86_64-ALL.xml - − update_3/release/13.0.11-13.0.14-macos-ALL.xml - − update_3/release/13.0.11-13.0.14-windows-i686-ALL.xml - − update_3/release/13.0.11-13.0.14-windows-x86_64-ALL.xml - − update_3/release/13.0.12-13.0.14-linux-i686-ALL.xml - − update_3/release/13.0.12-13.0.14-linux-x86_64-ALL.xml - − update_3/release/13.0.12-13.0.14-macos-ALL.xml - − update_3/release/13.0.12-13.0.14-windows-i686-ALL.xml - − update_3/release/13.0.12-13.0.14-windows-x86_64-ALL.xml - + update_3/release/13.0.12-13.0.15-linux-i686-ALL.xml - + update_3/release/13.0.12-13.0.15-linux-x86_64-ALL.xml - + update_3/release/13.0.12-13.0.15-macos-ALL.xml - + update_3/release/13.0.12-13.0.15-windows-i686-ALL.xml - + update_3/release/13.0.12-13.0.15-windows-x86_64-ALL.xml - − update_3/release/13.0.13-13.0.14-linux-i686-ALL.xml - − update_3/release/13.0.13-13.0.14-linux-x86_64-ALL.xml - − update_3/release/13.0.13-13.0.14-macos-ALL.xml - − update_3/release/13.0.13-13.0.14-windows-i686-ALL.xml - − update_3/release/13.0.13-13.0.14-windows-x86_64-ALL.xml - + update_3/release/13.0.13-13.0.15-linux-i686-ALL.xml - + update_3/release/13.0.13-13.0.15-linux-x86_64-ALL.xml - + update_3/release/13.0.13-13.0.15-macos-ALL.xml - + update_3/release/13.0.13-13.0.15-windows-i686-ALL.xml - + update_3/release/13.0.13-13.0.15-windows-x86_64-ALL.xml - + update_3/release/13.0.14-13.0.15-linux-i686-ALL.xml - + update_3/release/13.0.14-13.0.15-linux-x86_64-ALL.xml - + update_3/release/13.0.14-13.0.15-macos-ALL.xml - + update_3/release/13.0.14-13.0.15-windows-i686-ALL.xml The diff was not included because it is too large. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-update-responses… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][base-browser-115.11.0esr-13.5-1] fixup! Firefox preference overrides.
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch base-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: 1f7194f4 by Richard Pospesel at 2024-05-13T13:50:25+00:00 fixup! Firefox preference overrides. Bug 241: Move network.proxy.failover_direct=false pref to base-browser - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -455,6 +455,8 @@ pref("network.protocol-handler.warn-external.snews", true); pref("network.protocol-handler.warn-external.ms-windows-store", true); #endif pref("network.proxy.allow_bypass", false, locked); // #40682 +// Bug 40548: Disable proxy-bypass +pref("network.proxy.failover_direct", false, locked); // Lock to 'true', which is already the firefox default, to prevent users // from making themselves fingerprintable by disabling. This pref // alters content load order in a page. See tor-browser#24686 View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/1f7194f… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/1f7194f… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.11.0esr-13.5-1] fixup! Firefox preference overrides.
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch mullvad-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: 5ee488b0 by Richard Pospesel at 2024-05-13T13:48:40+00:00 fixup! Firefox preference overrides. Bug 241: Move network.proxy.failover_direct=false pref to base-browser - - - - - 1 changed file: - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -454,6 +454,8 @@ pref("network.protocol-handler.warn-external.snews", true); pref("network.protocol-handler.warn-external.ms-windows-store", true); #endif pref("network.proxy.allow_bypass", false, locked); // #40682 +// Bug 40548: Disable proxy-bypass +pref("network.proxy.failover_direct", false, locked); // Lock to 'true', which is already the firefox default, to prevent users // from making themselves fingerprintable by disabling. This pref // alters content load order in a page. See tor-browser#24686 View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/5ee… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/5ee… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.11.0esr-13.5-1] 2 commits: fixup! Bug 40562: Added Tor Browser preferences to 000-tor-browser.js
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch tor-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Tor Browser Commits: b04fa658 by Richard Pospesel at 2024-05-13T13:18:28+00:00 fixup! Bug 40562: Added Tor Browser preferences to 000-tor-browser.js Bug 241: Move network.proxy.failover_direct=false pref to base-browser - - - - - 8e9d5e49 by Richard Pospesel at 2024-05-13T13:18:28+00:00 fixup! Firefox preference overrides. Bug 241: Move network.proxy.failover_direct=false pref to base-browser - - - - - 2 changed files: - browser/app/profile/000-tor-browser.js - browser/app/profile/001-base-profile.js Changes: ===================================== browser/app/profile/000-tor-browser.js ===================================== @@ -21,8 +21,6 @@ pref("network.proxy.socks_remote_dns", true); pref("network.proxy.no_proxies_on", ""); // For fingerprinting and local service vulns (#10419) pref("network.proxy.allow_hijacking_localhost", true); // Allow proxies for localhost (#31065) pref("network.proxy.type", 1); -// Bug 40548: Disable proxy-bypass -pref("network.proxy.failover_direct", false); // localhost is already blocked by setting `network.proxy.allow_hijacking_localhost` to // true, allowing users to explicitly block ports makes them fingerprintable; for details, see // Bug 41317: Tor Browser leaks banned ports in network.security.ports.banned ===================================== browser/app/profile/001-base-profile.js ===================================== @@ -455,6 +455,8 @@ pref("network.protocol-handler.warn-external.snews", true); pref("network.protocol-handler.warn-external.ms-windows-store", true); #endif pref("network.proxy.allow_bypass", false, locked); // #40682 +// Bug 40548: Disable proxy-bypass +pref("network.proxy.failover_direct", false, locked); // Lock to 'true', which is already the firefox default, to prevent users // from making themselves fingerprintable by disabling. This pref // alters content load order in a page. See tor-browser#24686 View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/ca21ab… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/ca21ab… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.11.0esr-13.5-1] fixup! MB 38: Mullvad Browser configuration
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch mullvad-browser-115.11.0esr-13.5-1 at The Tor Project / Applications / Mullvad Browser Commits: cce4482c by Richard Pospesel at 2024-05-13T12:37:21+00:00 fixup! MB 38: Mullvad Browser configuration Bug 222: Hide &#39;List all tabs&#39; when the tabs don&#39;t overflow - - - - - 1 changed file: - browser/app/profile/000-mullvad-browser.js Changes: ===================================== browser/app/profile/000-mullvad-browser.js ===================================== @@ -48,3 +48,6 @@ pref("app.feedback.baseURL", "https://mullvad.net/help/tag/browser/"); // mullvad-browser#234: Do not spoof the OS in the User-Agent header pref("privacy.resistFingerprinting.spoofOsInUserAgentHeader", false); + +// mullvad-browser#222: Hide "List all tabs" when the tabs don't overflow +pref("browser.tabs.tabmanager.enabled", false); View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/cce… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/commit/cce… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build] Pushed new tag tbb-13.0.15-build2
by richard (@richard) 13 May '24

13 May '24
richard pushed new tag tbb-13.0.15-build2 at The Tor Project / Applications / tor-browser-build -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/tree/tbb… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-13.0] Bug 41119: Prepare Tor Browser 13.0.15 (build2).
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch maint-13.0 at The Tor Project / Applications / tor-browser-build Commits: bdc8cfc3 by Pier Angelo Vendrame at 2024-05-13T11:20:54+00:00 Bug 41119: Prepare Tor Browser 13.0.15 (build2). We bumped tags to include a fix for tor-browser#42562. - - - - - 3 changed files: - projects/firefox-android/config - projects/geckoview/config - rbm.conf Changes: ===================================== projects/firefox-android/config ===================================== @@ -16,7 +16,7 @@ container: var: fenix_version: 115.2.1 browser_branch: 13.0-1 - browser_build: 16 + browser_build: 17 variant: Beta # This should be updated when the list of gradle dependencies is changed. gradle_dependencies_version: 1 ===================================== projects/geckoview/config ===================================== @@ -16,7 +16,9 @@ container: var: geckoview_version: 115.11.0esr browser_branch: 13.0-1 - browser_build: 2 + # GeckoView and Firefox are out-of-sync because we needed to build a + # 13.0.15-build2 with Java-only changes. + browser_build: 3 copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]' gitlab_project: https://gitlab.torproject.org/tpo/applications/tor-browser git_commit: '[% exec("git rev-parse HEAD") %]' ===================================== rbm.conf ===================================== @@ -74,7 +74,7 @@ buildconf: var: torbrowser_version: '13.0.15' - torbrowser_build: 'build1' + torbrowser_build: 'build2' torbrowser_incremental_from: - '13.0.14' - '13.0.13' View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/b… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build][maint-13.0] Bug 41119: Prepare Tor Browser 13.0.15 (build2).
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch maint-13.0 at The Tor Project / Applications / tor-browser-build Commits: 6db45bce by Pier Angelo Vendrame at 2024-05-13T12:10:33+02:00 Bug 41119: Prepare Tor Browser 13.0.15 (build2). We bumped tags to include a fix for tor-browser#42562. - - - - - 2 changed files: - projects/firefox-android/config - projects/geckoview/config Changes: ===================================== projects/firefox-android/config ===================================== @@ -16,7 +16,7 @@ container: var: fenix_version: 115.2.1 browser_branch: 13.0-1 - browser_build: 16 + browser_build: 17 variant: Beta # This should be updated when the list of gradle dependencies is changed. gradle_dependencies_version: 1 ===================================== projects/geckoview/config ===================================== @@ -16,7 +16,9 @@ container: var: geckoview_version: 115.11.0esr browser_branch: 13.0-1 - browser_build: 2 + # GeckoView and Firefox are out-of-sync because we needed to build a + # 13.0.15-build2 with Java-only changes. + browser_build: 3 copyright_year: '[% exec("git show -s --format=%ci").remove("-.*") %]' gitlab_project: https://gitlab.torproject.org/tpo/applications/tor-browser git_commit: '[% exec("git rev-parse HEAD") %]' View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/6… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/commit/6… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser-update-responses][main] release: new version, 13.0.15
by richard (@richard) 13 May '24

13 May '24
richard pushed to branch main at The Tor Project / Applications / mullvad-browser-update-responses Commits: 3e9fb07d by Richard Pospesel at 2024-05-13T10:14:13+00:00 release: new version, 13.0.15 - - - - - 29 changed files: - update_1/release/.htaccess - − update_1/release/13.0.10-13.0.14-linux-x86_64-ALL.xml - − update_1/release/13.0.10-13.0.14-macos-ALL.xml - − update_1/release/13.0.10-13.0.14-windows-x86_64-ALL.xml - − update_1/release/13.0.12-13.0.14-linux-x86_64-ALL.xml - − update_1/release/13.0.12-13.0.14-macos-ALL.xml - − update_1/release/13.0.12-13.0.14-windows-x86_64-ALL.xml - + update_1/release/13.0.12-13.0.15-linux-x86_64-ALL.xml - + update_1/release/13.0.12-13.0.15-macos-ALL.xml - + update_1/release/13.0.12-13.0.15-windows-x86_64-ALL.xml - − update_1/release/13.0.13-13.0.14-linux-x86_64-ALL.xml - − update_1/release/13.0.13-13.0.14-macos-ALL.xml - − update_1/release/13.0.13-13.0.14-windows-x86_64-ALL.xml - + update_1/release/13.0.13-13.0.15-linux-x86_64-ALL.xml - + update_1/release/13.0.13-13.0.15-macos-ALL.xml - + update_1/release/13.0.13-13.0.15-windows-x86_64-ALL.xml - + update_1/release/13.0.14-13.0.15-linux-x86_64-ALL.xml - + update_1/release/13.0.14-13.0.15-macos-ALL.xml - + update_1/release/13.0.14-13.0.15-windows-x86_64-ALL.xml - − update_1/release/13.0.14-linux-x86_64-ALL.xml - − update_1/release/13.0.14-macos-ALL.xml - − update_1/release/13.0.14-windows-x86_64-ALL.xml - + update_1/release/13.0.15-linux-x86_64-ALL.xml - + update_1/release/13.0.15-macos-ALL.xml - + update_1/release/13.0.15-windows-x86_64-ALL.xml - update_1/release/download-linux-x86_64.json - update_1/release/download-macos.json - update_1/release/download-windows-x86_64.json - update_1/release/downloads.json Changes: ===================================== update_1/release/.htaccess ===================================== @@ -1,22 +1,22 @@ RewriteEngine On -RewriteRule ^[^/]+/13.0.14/ no-update.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.0.10/ALL 13.0.10-13.0.14-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.0.12/ALL 13.0.12-13.0.14-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/13.0.13/ALL 13.0.13-13.0.14-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/[^/]+/ALL 13.0.14-linux-x86_64-ALL.xml [last] -RewriteRule ^Linux_x86_64-gcc3/ 13.0.14-linux-x86_64-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.0.10/ALL 13.0.10-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.0.12/ALL 13.0.12-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/13.0.13/ALL 13.0.13-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/[^/]+/ALL 13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_x86_64-gcc3/ 13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.0.10/ALL 13.0.10-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.0.12/ALL 13.0.12-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/13.0.13/ALL 13.0.13-13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/[^/]+/ALL 13.0.14-macos-ALL.xml [last] -RewriteRule ^Darwin_aarch64-gcc3/ 13.0.14-macos-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.10/ALL 13.0.10-13.0.14-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.12/ALL 13.0.12-13.0.14-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.13/ALL 13.0.13-13.0.14-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/[^/]+/ALL 13.0.14-windows-x86_64-ALL.xml [last] -RewriteRule ^WINNT_x86_64-gcc3-x64/ 13.0.14-windows-x86_64-ALL.xml [last] +RewriteRule ^[^/]+/13.0.15/ no-update.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.0.12/ALL 13.0.12-13.0.15-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.0.13/ALL 13.0.13-13.0.15-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/13.0.14/ALL 13.0.14-13.0.15-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/[^/]+/ALL 13.0.15-linux-x86_64-ALL.xml [last] +RewriteRule ^Linux_x86_64-gcc3/ 13.0.15-linux-x86_64-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.0.12/ALL 13.0.12-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.0.13/ALL 13.0.13-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/13.0.14/ALL 13.0.14-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/[^/]+/ALL 13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_x86_64-gcc3/ 13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.0.12/ALL 13.0.12-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.0.13/ALL 13.0.13-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/13.0.14/ALL 13.0.14-13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/[^/]+/ALL 13.0.15-macos-ALL.xml [last] +RewriteRule ^Darwin_aarch64-gcc3/ 13.0.15-macos-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.12/ALL 13.0.12-13.0.15-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.13/ALL 13.0.13-13.0.15-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/13.0.14/ALL 13.0.14-13.0.15-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/[^/]+/ALL 13.0.15-windows-x86_64-ALL.xml [last] +RewriteRule ^WINNT_x86_64-gcc3-x64/ 13.0.15-windows-x86_64-ALL.xml [last] ===================================== update_1/release/13.0.10-13.0.14-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="40fda8d5eb0ddd6b5e516e686ba88f7ea57fb7b7c70868ca11f19b198911eb83acab8057f7cd2b107be46e5ab60dac8ac3e8df7f10f37d7309767830defb2f42" size="107492923" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="ebeaebec06f3cf9f075524b43167b2d5ea69d8e3137763212a2ed3b96ee91d46e08edb62ac6ad3c075e477446fe3a7dcff956bbd1eba14c6879bfc29c1e10a3d" size="9369512" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.10-13.0.14-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14_ALL.m…" hashFunction="SHA512" hashValue="444609f144bbcc48b7226465078772e8d78d96fda177453aada2f75cb14edc9481dd13948f7313d953ce1ebb858f56884b938cddb7b9252de67db961c9bfc434" size="115543851" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos--13.0.10-13.0…" hashFunction="SHA512" hashValue="2e82745bc649b6000fe13c2d0f72df555d7f1c0a00a14b7abdada8c56381b690ac54f0cb02b53438d18f9cc2621bbf186da33580dbb53b74109d8f25d6c721d3" size="14070463" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.10-13.0.14-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="bc0c7b7a2054a16f96832f44b9bd35ebb8486d08aebb7fc749f0bb24006830aa566d887bb253e6b297bfeb6ff442b56b18adb773309ba887fa3e12a1b9f25362" size="89463392" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="1d3924edf03ceab4963b97bc1df3ff94ecf784f517870b5e777a4a746332b73724621a0239c577a026f1c88a5256746219203c34c266cc77c3b2af0558a3fd44" size="9905751" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.14-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="40fda8d5eb0ddd6b5e516e686ba88f7ea57fb7b7c70868ca11f19b198911eb83acab8057f7cd2b107be46e5ab60dac8ac3e8df7f10f37d7309767830defb2f42" size="107492923" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="926f32fc4c3eb64935364f20a18cae93a8e928227c81826e2e280c97e3a2aed0342883298c20733b4f5fdf9aa2c0a6c4e73a6768b0e5b639cf624a949ec1f2e6" size="7893763" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.14-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14_ALL.m…" hashFunction="SHA512" hashValue="444609f144bbcc48b7226465078772e8d78d96fda177453aada2f75cb14edc9481dd13948f7313d953ce1ebb858f56884b938cddb7b9252de67db961c9bfc434" size="115543851" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos--13.0.12-13.0…" hashFunction="SHA512" hashValue="607c56a15fbbb39a22c9f62ec928d7a2239537fe56a441394403ed8cfd86b7b1cd9722e4932a74fd45ffbdc54bfd9b119481fb8fb24cf0d6603b6f5f8f0ca46f" size="12156659" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.14-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="bc0c7b7a2054a16f96832f44b9bd35ebb8486d08aebb7fc749f0bb24006830aa566d887bb253e6b297bfeb6ff442b56b18adb773309ba887fa3e12a1b9f25362" size="89463392" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="a2baf03471f3da3478fdcb031c5d3405b687a06e01704dc278e6c27b5e21d0c60c9a441b1f0d2e727585c5fe7cfbfe138f488333644ea248b2cb0426a54b6fb9" size="8547030" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.15-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="323694bc40a76a24b4d69b9df390ac48606f90d227d80e0a97aab6288a847ae7bab65be67e906f9112dc2dea0e666572d619af8d579bf812b286e8877ec2332d" size="107673007" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="21cbf614ca7aa7ff762edcb649dc78f8e3f5b029a256aec803db62b43cfa2a8d16c7fd726e98403d2ef1b0886c0bdcb161bae75c24a657cf3d23eb6c7a1bee1f" size="11567243" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.15-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15_ALL.m…" hashFunction="SHA512" hashValue="57edeaafb75299f5aa44d0a20bbd4d7c79e0099e26dea85e643ea300bc2550f199e9c5d171a005798c9fef3f0a6972cfebd9253dbeb7f296500e0ff5a28b52e8" size="115725843" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos--13.0.12-13.0…" hashFunction="SHA512" hashValue="3c0f41110076beaa49a05522bb4ea77fb7a2a2fa1004f4d37c3fface43c40e44a7ee537a212724b6cfae65d1ab7f3c6ca7b0749f7050153402d678410c0467f3" size="16022791" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.12-13.0.15-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="6ad0c70f119de1df459387eaf98784be153dbe5533291c3e6c579593ca072c59c7a17f565d8b834f2a1ea5e02bb21305fff46b1ad73912dd472ecf12c20fe70d" size="89632164" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="d706d64c3385e541efe25113005ef38f5f8448643902bc4f752368b7d8f0db32867c715fadbaf5592dfb4ffcc6bb54560d85537a309d06f60ea1fb13fc2c9d4a" size="12114390" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.14-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="40fda8d5eb0ddd6b5e516e686ba88f7ea57fb7b7c70868ca11f19b198911eb83acab8057f7cd2b107be46e5ab60dac8ac3e8df7f10f37d7309767830defb2f42" size="107492923" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="dfb8a3923a430e331a72d43fc1379a67cf996aeb1a05212e98192838cd2f8fe3988a8e058539da56838f1027583c6d619a7463e818dcdfc2b4a1b8fb473ab717" size="7843771" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.14-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14_ALL.m…" hashFunction="SHA512" hashValue="444609f144bbcc48b7226465078772e8d78d96fda177453aada2f75cb14edc9481dd13948f7313d953ce1ebb858f56884b938cddb7b9252de67db961c9bfc434" size="115543851" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos--13.0.13-13.0…" hashFunction="SHA512" hashValue="4165cfdcb22dd1238758f3bb2121ec69706d9e05ad02475f2d640a4616e38b24f927132f80ab816ce1681120843acde24ffbafc60d717e96755e72aa9fa8af83" size="12090823" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.14-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="bc0c7b7a2054a16f96832f44b9bd35ebb8486d08aebb7fc749f0bb24006830aa566d887bb253e6b297bfeb6ff442b56b18adb773309ba887fa3e12a1b9f25362" size="89463392" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="37386c86850adc40423ec5bb57341b3c0054316e58ecbb8066369174d8e89a301317746ee05d76b8db019cc9f17317537730f54146ee3ebe1e708ad3af8387ee" size="8495958" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.15-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="323694bc40a76a24b4d69b9df390ac48606f90d227d80e0a97aab6288a847ae7bab65be67e906f9112dc2dea0e666572d619af8d579bf812b286e8877ec2332d" size="107673007" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="87039e194e0600d8b66de42ca34b6090287647265c17ba8d0cb7ca7f3f84451b71d2bdac46508660419fc1428824650bb004317cbd93113c354422dfb3132160" size="11566627" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.15-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15_ALL.m…" hashFunction="SHA512" hashValue="57edeaafb75299f5aa44d0a20bbd4d7c79e0099e26dea85e643ea300bc2550f199e9c5d171a005798c9fef3f0a6972cfebd9253dbeb7f296500e0ff5a28b52e8" size="115725843" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos--13.0.13-13.0…" hashFunction="SHA512" hashValue="8e8ec045f0ba41efd6cf598a66a68817aa1a5e9004afe66cd3b34ecb0ca50db90735fcd9922327eb1883c022ff6e33cd46d8a5cd0fab614e2f25d73cebec161d" size="16016015" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.13-13.0.15-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="6ad0c70f119de1df459387eaf98784be153dbe5533291c3e6c579593ca072c59c7a17f565d8b834f2a1ea5e02bb21305fff46b1ad73912dd472ecf12c20fe70d" size="89632164" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="96528211e5e70e8a6b05c6f66a990b29d99c39e17ff64000c78de9e7a431721dc067c62b690bddd1ac74051d6d1c53393d8cd700df641147463b61eaa91056f4" size="12116094" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.14-13.0.15-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="323694bc40a76a24b4d69b9df390ac48606f90d227d80e0a97aab6288a847ae7bab65be67e906f9112dc2dea0e666572d619af8d579bf812b286e8877ec2332d" size="107673007" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64--13.0.…" hashFunction="SHA512" hashValue="9407841bdc920a152f872a869c63a719a38a4557523b1f4717fa2f884d1d4bb80d171e8e5ca8edd20e37792902b81c7bb3b16011ef9c1ffa2e98955de313b30b" size="7766785" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.14-13.0.15-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15_ALL.m…" hashFunction="SHA512" hashValue="57edeaafb75299f5aa44d0a20bbd4d7c79e0099e26dea85e643ea300bc2550f199e9c5d171a005798c9fef3f0a6972cfebd9253dbeb7f296500e0ff5a28b52e8" size="115725843" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos--13.0.14-13.0…" hashFunction="SHA512" hashValue="809e12f26b584be7de0f170003442dc1ce44695d875e7c06d29d9eb3d810992c7610a03fdd9abcff48bd65a643ff75397692c4529616d083c7aa62743e84d3a4" size="11648462" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.14-13.0.15-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="6ad0c70f119de1df459387eaf98784be153dbe5533291c3e6c579593ca072c59c7a17f565d8b834f2a1ea5e02bb21305fff46b1ad73912dd472ecf12c20fe70d" size="89632164" type="complete"></patch><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64--13.…" hashFunction="SHA512" hashValue="2308dde306b3b03100beace98b6aa2f2aa1bbe5f3032307e8678ebada669881a718491c3af469400e4ac302f32b272efbb6f5f2a54694e69bd98ab3537783894" size="8252168" type="partial"></patch></update></updates> ===================================== update_1/release/13.0.14-linux-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="40fda8d5eb0ddd6b5e516e686ba88f7ea57fb7b7c70868ca11f19b198911eb83acab8057f7cd2b107be46e5ab60dac8ac3e8df7f10f37d7309767830defb2f42" size="107492923" type="complete"></patch></update></updates> ===================================== update_1/release/13.0.14-macos-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14_ALL.m…" hashFunction="SHA512" hashValue="444609f144bbcc48b7226465078772e8d78d96fda177453aada2f75cb14edc9481dd13948f7313d953ce1ebb858f56884b938cddb7b9252de67db961c9bfc434" size="115543851" type="complete"></patch></update></updates> ===================================== update_1/release/13.0.14-windows-x86_64-ALL.xml deleted ===================================== @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<updates><update type="minor" displayVersion="13.0.14" appVersion="13.0.14" platformVersion="115.10.0" buildID="20240408204645" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.14" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="bc0c7b7a2054a16f96832f44b9bd35ebb8486d08aebb7fc749f0bb24006830aa566d887bb253e6b297bfeb6ff442b56b18adb773309ba887fa3e12a1b9f25362" size="89463392" type="complete"></patch></update></updates> ===================================== update_1/release/13.0.15-linux-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…" hashFunction="SHA512" hashValue="323694bc40a76a24b4d69b9df390ac48606f90d227d80e0a97aab6288a847ae7bab65be67e906f9112dc2dea0e666572d619af8d579bf812b286e8877ec2332d" size="107673007" type="complete"></patch></update></updates> ===================================== update_1/release/13.0.15-macos-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="16.0.0"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15_ALL.m…" hashFunction="SHA512" hashValue="57edeaafb75299f5aa44d0a20bbd4d7c79e0099e26dea85e643ea300bc2550f199e9c5d171a005798c9fef3f0a6972cfebd9253dbeb7f296500e0ff5a28b52e8" size="115725843" type="complete"></patch></update></updates> ===================================== update_1/release/13.0.15-windows-x86_64-ALL.xml ===================================== @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<updates><update type="minor" displayVersion="13.0.15" appVersion="13.0.15" platformVersion="115.11.0" buildID="20240510150000" detailsURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" actions="showURL" openURL="https://github.com/mullvad/mullvad-browser/releases/13.0.15" minSupportedOSVersion="6.1" minSupportedInstructionSet="SSE2"><patch URL="https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-13.0…" hashFunction="SHA512" hashValue="6ad0c70f119de1df459387eaf98784be153dbe5533291c3e6c579593ca072c59c7a17f565d8b834f2a1ea5e02bb21305fff46b1ad73912dd472ecf12c20fe70d" size="89632164" type="complete"></patch></update></updates> ===================================== update_1/release/download-linux-x86_64.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…","git_tag":"mb-13.0.14-build1","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…","version":"13.0.14"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…","git_tag":"mb-13.0.15-build1","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…","version":"13.0.15"} \ No newline at end of file ===================================== update_1/release/download-macos.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14.dmg","git_tag":"mb-13.0.14-build1","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14.dmg.a…","version":"13.0.14"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15.dmg","git_tag":"mb-13.0.15-build1","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15.dmg.a…","version":"13.0.15"} \ No newline at end of file ===================================== update_1/release/download-windows-x86_64.json ===================================== @@ -1 +1 @@ -{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-port…","git_tag":"mb-13.0.14-build1","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-port…","version":"13.0.14"} \ No newline at end of file +{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-port…","git_tag":"mb-13.0.15-build1","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-port…","version":"13.0.15"} \ No newline at end of file ===================================== update_1/release/downloads.json ===================================== @@ -1 +1 @@ -{"downloads":{"linux-x86_64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-linux-x86_64-13.0.1…"}},"macos":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14.dmg","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-macos-13.0.14.dmg.a…"}},"win64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-port…","sig":"https://cdn.mullvad.net/browser/13.0.14/mullvad-browser-windows-x86_64-port…"}}},"tag":"mb-13.0.14-build1","version":"13.0.14"} \ No newline at end of file +{"downloads":{"linux-x86_64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-linux-x86_64-13.0.1…"}},"macos":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15.dmg","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-macos-13.0.15.dmg.a…"}},"win64":{"ALL":{"binary":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-port…","sig":"https://cdn.mullvad.net/browser/13.0.15/mullvad-browser-windows-x86_64-port…"}}},"tag":"mb-13.0.15-build1","version":"13.0.15"} \ No newline at end of file View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser-update-respo… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android] Pushed new tag firefox-android-115.2.1-13.0-1-build17
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed new tag firefox-android-115.2.1-13.0-1-build17 at The Tor Project / Applications / firefox-android -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/tree/firef… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser] Pushed new tag tor-browser-115.11.0esr-13.0-1-build3
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed new tag tor-browser-115.11.0esr-13.0-1-build3 at The Tor Project / Applications / Tor Browser -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/tree/tor-brows… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/mullvad-browser][mullvad-browser-115.11.0esr-13.0-1] 2 commits: fixup! Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed to branch mullvad-browser-115.11.0esr-13.0-1 at The Tor Project / Applications / Mullvad Browser Commits: 16ff0199 by Pier Angelo Vendrame at 2024-05-13T11:49:04+02:00 fixup! Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView Revert &quot;Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView&quot; This reverts commit ff97b6fb06850784785e6993c256bef315b2525f. - - - - - 9d8bcd60 by Pier Angelo Vendrame at 2024-05-13T11:49:06+02:00 Bug 42562: Normalized the Accepted Languages on Android. The OS language might be outside the list of actually supported languages and it might leak the user&#39;s region. Therefore, we force the locale reported in Accept-Language to match one we support with translations, even when it means using a not exact region tag. - - - - - 1 changed file: - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java Changes: ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java ===================================== @@ -22,7 +22,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.Locale; import org.mozilla.gecko.EventDispatcher; import org.mozilla.gecko.GeckoSystemStateListener; @@ -455,6 +456,16 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return this; } + public @NonNull Builder supportedLocales(final Collection<String> locales) { + getSettings().mSupportedLocales.clear(); + for (String tag : locales) { + Locale locale = Locale.forLanguageTag(tag); + getSettings().mSupportedLocales.put(locale, locale); + getSettings().mSupportedLocales.put(new Locale(locale.getLanguage()), locale); + } + return this; + } + /** * Sets whether we should spoof locale to English for webpages. * @@ -539,6 +550,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { /* package */ int mScreenHeightOverride; /* package */ Class<? extends Service> mCrashHandler; /* package */ String[] mRequestedLocales; + /* package */ HashMap<Locale, Locale> mSupportedLocales = new HashMap<>(); /* package */ RuntimeTelemetry.Proxy mTelemetryProxy; /** @@ -595,6 +607,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { mRequestedLocales = settings.mRequestedLocales; mConfigFilePath = settings.mConfigFilePath; mTelemetryProxy = settings.mTelemetryProxy; + mSupportedLocales = settings.mSupportedLocales; } /* package */ void commit() { @@ -803,30 +816,39 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { EventDispatcher.getInstance().dispatch("GeckoView:SetLocale", data); } + private Locale getLocaleIfSupported(String tag) { + Locale exact = Locale.forLanguageTag(tag); + if (mSupportedLocales.containsKey(exact)) { + return exact; + } + Locale fallback = new Locale(exact.getLanguage()); + return mSupportedLocales.get(fallback); + } + private String computeAcceptLanguages() { - final ArrayList<String> locales = new ArrayList<String>(); - - // In Desktop, these are defined in the `intl.accept_languages` localized property. - // At some point we should probably use the same values here, but for now we use a simple - // strategy which will hopefully result in reasonable acceptLanguage values. - if (mRequestedLocales != null && mRequestedLocales.length > 0) { - String locale = mRequestedLocales[0].toLowerCase(Locale.ROOT); - // No need to include `en-us` twice. - if (!locale.equals("en-us")) { - locales.add(locale); - if (locale.contains("-")) { - String lang = locale.split("-")[0]; - // No need to include `en` twice. - if (!lang.equals("en")) { - locales.add(lang); - } + Locale locale = null; + if (mRequestedLocales != null) { + for (String tag : mRequestedLocales) { + locale = getLocaleIfSupported(tag); + if (locale != null) { + break; } } } - locales.add("en-us"); - locales.add("en"); - - return TextUtils.join(",", locales); + if (locale == null) { + for (final String tag : getDefaultLocales()) { + locale = getLocaleIfSupported(tag); + if (locale != null) { + break; + } + } + } + String acceptLanguages = locale != null ? locale.toString().replace('_', '-') : "en-US"; + if (acceptLanguages.equals("en-US")) { + // For consistency with spoof English. + acceptLanguages += ", en"; + } + return acceptLanguages; } private static String[] getDefaultLocales() { View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/0d… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/compare/0d… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.0-1] Bug 42652: Pass the list of supported languages to GeckoView.
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed to branch firefox-android-115.2.1-13.0-1 at The Tor Project / Applications / firefox-android Commits: f7d9fabc by Pier Angelo Vendrame at 2024-05-13T11:46:53+02:00 Bug 42652: Pass the list of supported languages to GeckoView. It will be used to prevent leaks about regional preferences. - - - - - 1 changed file: - fenix/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt Changes: ===================================== fenix/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt ===================================== @@ -14,6 +14,7 @@ import mozilla.components.concept.storage.LoginsStorage import mozilla.components.lib.crash.handler.CrashHandlerService import mozilla.components.service.sync.autofill.GeckoCreditCardsAddressesStorageDelegate import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate +import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -58,6 +59,7 @@ object GeckoProvider { .contentBlocking(policy.toContentBlockingSetting()) .debugLogging(Config.channel.isDebug || context.components.settings.enableGeckoLogs) .aboutConfigEnabled(Config.channel.isBeta || Config.channel.isNightlyOrDebug) + .supportedLocales(BuildConfig.SUPPORTED_LOCALE_ARRAY.toList()) .build() val settings = context.components.settings View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/f7d… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/f7d… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser][tor-browser-115.11.0esr-13.0-1] 2 commits: fixup! Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed to branch tor-browser-115.11.0esr-13.0-1 at The Tor Project / Applications / Tor Browser Commits: eb5afe56 by Pier Angelo Vendrame at 2024-05-13T11:45:28+02:00 fixup! Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView Revert &quot;Bug 40199: Avoid using system locale for intl.accept_languages in GeckoView&quot; This reverts commit ff97b6fb06850784785e6993c256bef315b2525f. - - - - - 970e6b90 by Pier Angelo Vendrame at 2024-05-13T11:45:30+02:00 Bug 42562: Normalized the Accepted Languages on Android. The OS language might be outside the list of actually supported languages and it might leak the user&#39;s region. Therefore, we force the locale reported in Accept-Language to match one we support with translations, even when it means using a not exact region tag. - - - - - 1 changed file: - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java Changes: ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/GeckoRuntimeSettings.java ===================================== @@ -22,7 +22,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.Locale; import org.mozilla.gecko.EventDispatcher; import org.mozilla.gecko.GeckoSystemStateListener; @@ -455,6 +456,16 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { return this; } + public @NonNull Builder supportedLocales(final Collection<String> locales) { + getSettings().mSupportedLocales.clear(); + for (String tag : locales) { + Locale locale = Locale.forLanguageTag(tag); + getSettings().mSupportedLocales.put(locale, locale); + getSettings().mSupportedLocales.put(new Locale(locale.getLanguage()), locale); + } + return this; + } + /** * Sets whether we should spoof locale to English for webpages. * @@ -539,6 +550,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { /* package */ int mScreenHeightOverride; /* package */ Class<? extends Service> mCrashHandler; /* package */ String[] mRequestedLocales; + /* package */ HashMap<Locale, Locale> mSupportedLocales = new HashMap<>(); /* package */ RuntimeTelemetry.Proxy mTelemetryProxy; /** @@ -595,6 +607,7 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { mRequestedLocales = settings.mRequestedLocales; mConfigFilePath = settings.mConfigFilePath; mTelemetryProxy = settings.mTelemetryProxy; + mSupportedLocales = settings.mSupportedLocales; } /* package */ void commit() { @@ -803,30 +816,39 @@ public final class GeckoRuntimeSettings extends RuntimeSettings { EventDispatcher.getInstance().dispatch("GeckoView:SetLocale", data); } + private Locale getLocaleIfSupported(String tag) { + Locale exact = Locale.forLanguageTag(tag); + if (mSupportedLocales.containsKey(exact)) { + return exact; + } + Locale fallback = new Locale(exact.getLanguage()); + return mSupportedLocales.get(fallback); + } + private String computeAcceptLanguages() { - final ArrayList<String> locales = new ArrayList<String>(); - - // In Desktop, these are defined in the `intl.accept_languages` localized property. - // At some point we should probably use the same values here, but for now we use a simple - // strategy which will hopefully result in reasonable acceptLanguage values. - if (mRequestedLocales != null && mRequestedLocales.length > 0) { - String locale = mRequestedLocales[0].toLowerCase(Locale.ROOT); - // No need to include `en-us` twice. - if (!locale.equals("en-us")) { - locales.add(locale); - if (locale.contains("-")) { - String lang = locale.split("-")[0]; - // No need to include `en` twice. - if (!lang.equals("en")) { - locales.add(lang); - } + Locale locale = null; + if (mRequestedLocales != null) { + for (String tag : mRequestedLocales) { + locale = getLocaleIfSupported(tag); + if (locale != null) { + break; } } } - locales.add("en-us"); - locales.add("en"); - - return TextUtils.join(",", locales); + if (locale == null) { + for (final String tag : getDefaultLocales()) { + locale = getLocaleIfSupported(tag); + if (locale != null) { + break; + } + } + } + String acceptLanguages = locale != null ? locale.toString().replace('_', '-') : "en-US"; + if (acceptLanguages.equals("en-US")) { + // For consistency with spoof English. + acceptLanguages += ", en"; + } + return acceptLanguages; } private static String[] getDefaultLocales() { View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/f87ae3… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/f87ae3… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/firefox-android][firefox-android-115.2.1-13.5-1] Bug 1885171 - set private keyboard on Javascript prompts in private browsing...
by Pier Angelo Vendrame (@pierov) 13 May '24

13 May '24
Pier Angelo Vendrame pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android Commits: 8e9aca94 by Titouan Thibaud at 2024-05-13T09:31:35+02:00 Bug 1885171 - set private keyboard on Javascript prompts in private browsing r=android-reviewers,boek Differential Revision: https://phabricator.services.mozilla.com/D208135 - - - - - 3 changed files: - android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt - android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt - android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt Changes: ===================================== android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt ===================================== @@ -17,6 +17,7 @@ import kotlinx.coroutines.flow.map import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.selector.findTabOrCustomTab import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab +import mozilla.components.browser.state.selector.selectedTab import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.prompt.Choice @@ -772,6 +773,7 @@ class PromptFeature private constructor( inputLabel, inputValue, promptAbuserDetector.areDialogsBeingAbused(), + store.state.selectedTab?.content?.private == true, ) } } ===================================== android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt ===================================== @@ -11,14 +11,17 @@ import android.os.Bundle import android.text.Editable import android.text.TextWatcher import android.view.LayoutInflater +import android.view.inputmethod.EditorInfo.IME_NULL import android.widget.EditText import android.widget.TextView import androidx.appcompat.app.AlertDialog +import androidx.core.view.inputmethod.EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING import mozilla.components.feature.prompts.R private const val KEY_USER_EDIT_TEXT = "KEY_USER_EDIT_TEXT" private const val KEY_LABEL_INPUT = "KEY_LABEL_INPUT" private const val KEY_DEFAULT_INPUT_VALUE = "KEY_DEFAULT_INPUT_VALUE" +private const val KEY_PRIVATE = "KEY_PRIVATE" /** * [androidx.fragment.app.DialogFragment] implementation to display a @@ -37,6 +40,11 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te */ internal val labelInput: String? by lazy { safeArguments.getString(KEY_LABEL_INPUT) } + /** + * Tells if the Dialog is shown from private browsing + */ + internal val private: Boolean? by lazy { safeArguments.getBoolean(KEY_PRIVATE) } + private var userSelectionEditText: String get() = safeArguments.getString(KEY_USER_EDIT_TEXT, defaultInputValue) set(value) { @@ -72,6 +80,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te label.text = labelInput editText.setText(defaultInputValue) editText.addTextChangedListener(this) + editText.imeOptions = if (private == true) IME_FLAG_NO_PERSONALIZED_LEARNING else IME_NULL addCheckBoxIfNeeded(view) @@ -99,6 +108,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te * @param hasShownManyDialogs tells if this [sessionId] has shown many dialogs * in a short period of time, if is true a checkbox will be part of the dialog, for the user * to choose if wants to prevent this [sessionId] continuing showing dialogs. + * @param private tells if this dialog is triggered from private browsing */ @Suppress("LongParameterList") fun newInstance( @@ -109,6 +119,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te inputLabel: String, defaultInputValue: String, hasShownManyDialogs: Boolean, + private: Boolean, ): TextPromptDialogFragment { val fragment = TextPromptDialogFragment() val arguments = fragment.arguments ?: Bundle() @@ -121,6 +132,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te putString(KEY_LABEL_INPUT, inputLabel) putString(KEY_DEFAULT_INPUT_VALUE, defaultInputValue) putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs) + putBoolean(KEY_PRIVATE, private) } fragment.arguments = arguments ===================================== android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt ===================================== @@ -6,9 +6,11 @@ package mozilla.components.feature.prompts.dialog import android.content.DialogInterface.BUTTON_POSITIVE import android.os.Looper.getMainLooper +import android.view.inputmethod.EditorInfo.IME_NULL import android.widget.CheckBox import android.widget.TextView import androidx.appcompat.app.AlertDialog +import androidx.core.view.inputmethod.EditorInfoCompat import androidx.core.view.isVisible import androidx.test.ext.junit.runners.AndroidJUnit4 import mozilla.components.feature.prompts.R.id @@ -41,7 +43,7 @@ class TextPromptDialogFragmentTest { @Test fun `build dialog`() { val fragment = spy( - TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true), + TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, false), ) doReturn(appCompatContext).`when`(fragment).requireContext() @@ -73,12 +75,14 @@ class TextPromptDialogFragmentTest { inputValue.text = "NewValue" assertEquals(inputValue.text.toString(), "NewValue") + + assertEquals(IME_NULL, inputValue.imeOptions) } @Test fun `TextPrompt with hasShownManyDialogs equals false should not have a checkbox`() { val fragment = spy( - TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", false), + TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", false, false), ) doReturn(appCompatContext).`when`(fragment).requireContext() @@ -95,7 +99,7 @@ class TextPromptDialogFragmentTest { @Test fun `Clicking on positive button notifies the feature`() { val fragment = spy( - TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", false), + TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", false, false), ) fragment.feature = mockFeature @@ -115,7 +119,7 @@ class TextPromptDialogFragmentTest { @Test fun `After checking no more dialogs checkbox feature onNoMoreDialogsChecked must be called`() { val fragment = spy( - TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", true), + TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", true, false), ) fragment.feature = mockFeature @@ -139,7 +143,7 @@ class TextPromptDialogFragmentTest { @Test fun `touching outside of the dialog must notify the feature onCancel`() { val fragment = spy( - TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true), + TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, false), ) fragment.feature = mockFeature @@ -150,4 +154,19 @@ class TextPromptDialogFragmentTest { verify(mockFeature).onCancel("sessionId", "uid") } + + @Test + fun `when TextPromptDialogFragment is created in private mode then keyboard is in private mode`() { + val fragment = spy( + TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, true), + ) + + fragment.feature = mockFeature + doReturn(appCompatContext).`when`(fragment).requireContext() + + val dialog = fragment.onCreateDialog(null).also { it.show() } + val editText = dialog.findViewById<TextView>(id.input_value) + + assertEquals(EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING, editText.imeOptions) + } } View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/8e9… -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/firefox-android/-/commit/8e9… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
[Git][tpo/applications/tor-browser-build] Pushed new tag mb-13.0.15-build1
by richard (@richard) 10 May '24

10 May '24
richard pushed new tag mb-13.0.15-build1 at The Tor Project / Applications / tor-browser-build -- This project does not include diff previews in email notifications. View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser-build/-/tree/mb-… You're receiving this email because of your account on gitlab.torproject.org.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • ...
  • 782
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.