[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