[tor-commits] [Git][tpo/applications/fenix][tor-browser-102.2.1-12.5-1] Bug 40536: Wait until Tor is connected to process intents
Richard Pospesel (@richard)
git at gitlab.torproject.org
Thu Feb 2 23:23:09 UTC 2023
Richard Pospesel pushed to branch tor-browser-102.2.1-12.5-1 at The Tor Project / Applications / fenix
Commits:
667092ef by Tommy Webb at 2023-02-02T23:23:07+00:00
Bug 40536: Wait until Tor is connected to process intents
- - - - -
2 changed files:
- app/src/main/java/org/mozilla/fenix/HomeActivity.kt
- app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt
Changes:
=====================================
app/src/main/java/org/mozilla/fenix/HomeActivity.kt
=====================================
@@ -129,6 +129,7 @@ import org.mozilla.fenix.tabstray.TabsTrayFragment
import org.mozilla.fenix.tabstray.TabsTrayFragmentDirections
import org.mozilla.fenix.theme.DefaultThemeManager
import org.mozilla.fenix.theme.ThemeManager
+import org.mozilla.fenix.tor.TorEvents
import org.mozilla.fenix.trackingprotection.TrackingProtectionPanelDialogFragmentDirections
import org.mozilla.fenix.utils.BrowsersCache
import org.mozilla.fenix.utils.Settings
@@ -533,6 +534,24 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
* Handles intents received when the activity is open.
*/
final override fun onNewIntent(intent: Intent?) {
+ if (intent?.action == ACTION_MAIN || components.torController.isConnected) {
+ onNewIntentInternal(intent)
+ } else {
+ // Wait until Tor is connected to handle intents from external apps for links, search, etc.
+ components.torController.registerTorListener(object : TorEvents {
+ override fun onTorConnected() {
+ components.torController.unregisterTorListener(this)
+ onNewIntentInternal(intent)
+ }
+ override fun onTorConnecting() { /* no-op */ }
+ override fun onTorStopped() { /* no-op */ }
+ override fun onTorStatusUpdate(entry: String?, status: String?) { /* no-op */ }
+ })
+ return
+ }
+ }
+
+ private fun onNewIntentInternal(intent: Intent?) {
super.onNewIntent(intent)
intent?.let {
handleNewIntent(it)
@@ -1092,13 +1111,16 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
/**
* Indicates if the user should be redirected to the [BrowserFragment] or to the [HomeFragment],
- * links from an external apps should always opened in the [BrowserFragment].
+ * links from an external apps should always opened in the [BrowserFragment],
+ * unless Tor is not yet connected.
*/
fun shouldStartOnHome(intent: Intent? = this.intent): Boolean {
return components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
// We only want to open on home when users tap the app,
- // we want to ignore other cases when the app gets open by users clicking on links.
- getSettings().shouldStartOnHome() && intent?.action == ACTION_MAIN
+ // we want to ignore other cases when the app gets open by users clicking on links,
+ // unless Tor is not yet connected.
+ getSettings().shouldStartOnHome() && (intent?.action == ACTION_MAIN ||
+ !components.torController.isConnected)
}
}
=====================================
app/src/main/java/org/mozilla/fenix/IntentReceiverActivity.kt
=====================================
@@ -6,6 +6,7 @@ package org.mozilla.fenix
import android.app.Activity
import android.content.Intent
+import android.content.Intent.ACTION_MAIN
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
@@ -24,6 +25,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks
import org.mozilla.fenix.perf.StartupTimeline
import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor
+import org.mozilla.fenix.tor.TorEvents
/**
* Processes incoming intents and sends them to the corresponding activity.
@@ -45,7 +47,23 @@ class IntentReceiverActivity : Activity() {
// the HomeActivity.
val intent = intent?.let { Intent(it) } ?: Intent()
intent.sanitize().stripUnwantedFlags()
- processIntent(intent)
+ if (intent.action == ACTION_MAIN || components.torController.isConnected) {
+ processIntent(intent)
+ } else {
+ // Wait until Tor is connected to handle intents from external apps for links, search, etc.
+ components.torController.registerTorListener(object : TorEvents {
+ override fun onTorConnected() {
+ components.torController.unregisterTorListener(this)
+ processIntent(intent)
+ }
+ override fun onTorConnecting() { /* no-op */ }
+ override fun onTorStopped() { /* no-op */ }
+ override fun onTorStatusUpdate(entry: String?, status: String?) { /* no-op */ }
+ })
+
+ // In the meantime, open the HomeActivity so the user can get connected.
+ processIntent(Intent())
+ }
components.core.engine.profiler?.addMarker(
MarkersActivityLifecycleCallbacks.MARKER_NAME, startTimeProfiler, "IntentReceiverActivity.onCreate"
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/667092ef6caed0c7524e4cd717079bd159a556dd
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/fenix/-/commit/667092ef6caed0c7524e4cd717079bd159a556dd
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20230202/5d996e6e/attachment-0001.htm>
More information about the tor-commits
mailing list