richard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android
Commits:
-
15bb1028
by hackademix at 2024-06-07T22:02:59+00:00
9 changed files:
- android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt
- android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt
- android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt
- android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt
- android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt
- android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt
- android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
- android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
- android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt
Changes:
... | ... | @@ -959,6 +959,7 @@ sealed class EngineAction : BrowserAction() { |
959 | 959 | override val tabId: String,
|
960 | 960 | val skipLoading: Boolean = false,
|
961 | 961 | val followupAction: BrowserAction? = null,
|
962 | + val includeParent: Boolean = false,
|
|
962 | 963 | ) : EngineAction(), ActionWithTab
|
963 | 964 | |
964 | 965 | /**
|
... | ... | @@ -969,6 +970,7 @@ sealed class EngineAction : BrowserAction() { |
969 | 970 | val url: String,
|
970 | 971 | val flags: EngineSession.LoadUrlFlags = EngineSession.LoadUrlFlags.none(),
|
971 | 972 | val additionalHeaders: Map<String, String>? = null,
|
973 | + val includeParent: Boolean = false,
|
|
972 | 974 | ) : EngineAction(), ActionWithTab
|
973 | 975 | |
974 | 976 | /**
|
... | ... | @@ -1075,6 +1077,7 @@ sealed class EngineAction : BrowserAction() { |
1075 | 1077 | val engineSession: EngineSession,
|
1076 | 1078 | val timestamp: Long = Clock.elapsedRealtime(),
|
1077 | 1079 | val skipLoading: Boolean = false,
|
1080 | + val includeParent: Boolean = false,
|
|
1078 | 1081 | ) : EngineAction(), ActionWithTab
|
1079 | 1082 | |
1080 | 1083 | /**
|
... | ... | @@ -68,6 +68,7 @@ internal class CreateEngineSessionMiddleware( |
68 | 68 | logger,
|
69 | 69 | store,
|
70 | 70 | action.tabId,
|
71 | + action.includeParent,
|
|
71 | 72 | )
|
72 | 73 | |
73 | 74 | action.followupAction?.let {
|
... | ... | @@ -84,6 +85,7 @@ private fun getOrCreateEngineSession( |
84 | 85 | logger: Logger,
|
85 | 86 | store: Store<BrowserState, BrowserAction>,
|
86 | 87 | tabId: String,
|
88 | + includeParent: Boolean,
|
|
87 | 89 | ): EngineSession? {
|
88 | 90 | val tab = store.state.findTabOrCustomTab(tabId)
|
89 | 91 | if (tab == null) {
|
... | ... | @@ -101,7 +103,7 @@ private fun getOrCreateEngineSession( |
101 | 103 | return it
|
102 | 104 | }
|
103 | 105 | |
104 | - return createEngineSession(engine, logger, store, tab)
|
|
106 | + return createEngineSession(engine, logger, store, tab, includeParent)
|
|
105 | 107 | }
|
106 | 108 | |
107 | 109 | @MainThread
|
... | ... | @@ -110,6 +112,7 @@ private fun createEngineSession( |
110 | 112 | logger: Logger,
|
111 | 113 | store: Store<BrowserState, BrowserAction>,
|
112 | 114 | tab: SessionState,
|
115 | + includeParent: Boolean,
|
|
113 | 116 | ): EngineSession {
|
114 | 117 | val engineSession = engine.createSession(tab.content.private, tab.contextId)
|
115 | 118 | logger.debug("Created engine session for tab ${tab.id}")
|
... | ... | @@ -126,6 +129,7 @@ private fun createEngineSession( |
126 | 129 | tab.id,
|
127 | 130 | engineSession,
|
128 | 131 | skipLoading = skipLoading,
|
132 | + includeParent = includeParent,
|
|
129 | 133 | ),
|
130 | 134 | )
|
131 | 135 |
... | ... | @@ -60,11 +60,11 @@ internal class EngineDelegateMiddleware( |
60 | 60 | // session is already pointing to. Creating an EngineSession will do exactly
|
61 | 61 | // that in the linking step. So let's do that. Otherwise we would load the URL
|
62 | 62 | // twice.
|
63 | - store.dispatch(EngineAction.CreateEngineSessionAction(action.tabId))
|
|
63 | + store.dispatch(EngineAction.CreateEngineSessionAction(action.tabId, includeParent = action.includeParent))
|
|
64 | 64 | return@launch
|
65 | 65 | }
|
66 | 66 | |
67 | - val parentEngineSession = if (tab is TabSessionState) {
|
|
67 | + val parentEngineSession = if (action.includeParent && tab is TabSessionState) {
|
|
68 | 68 | tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession }
|
69 | 69 | } else {
|
70 | 70 | null
|
... | ... | @@ -37,7 +37,13 @@ internal class LinkingMiddleware( |
37 | 37 | when (action) {
|
38 | 38 | is TabListAction.AddTabAction -> {
|
39 | 39 | if (action.tab.engineState.engineSession != null && action.tab.engineState.engineObserver == null) {
|
40 | - engineObserver = link(context, action.tab.engineState.engineSession, action.tab)
|
|
40 | + engineObserver = link(
|
|
41 | + context,
|
|
42 | + action.tab.engineState.engineSession,
|
|
43 | + action.tab,
|
|
44 | + skipLoading = true,
|
|
45 | + includeParent = false,
|
|
46 | + )
|
|
41 | 47 | }
|
42 | 48 | }
|
43 | 49 | is TabListAction.AddMultipleTabsAction -> {
|
... | ... | @@ -58,7 +64,7 @@ internal class LinkingMiddleware( |
58 | 64 | when (action) {
|
59 | 65 | is EngineAction.LinkEngineSessionAction -> {
|
60 | 66 | context.state.findTabOrCustomTab(action.tabId)?.let { tab ->
|
61 | - engineObserver = link(context, action.engineSession, tab, action.skipLoading)
|
|
67 | + engineObserver = link(context, action.engineSession, tab, action.skipLoading, action.includeParent)
|
|
62 | 68 | }
|
63 | 69 | }
|
64 | 70 | else -> {
|
... | ... | @@ -77,6 +83,7 @@ internal class LinkingMiddleware( |
77 | 83 | engineSession: EngineSession,
|
78 | 84 | tab: SessionState,
|
79 | 85 | skipLoading: Boolean = true,
|
86 | + includeParent: Boolean,
|
|
80 | 87 | ): Pair<String, EngineObserver> {
|
81 | 88 | val observer = EngineObserver(tab.id, context.store)
|
82 | 89 | engineSession.register(observer)
|
... | ... | @@ -91,7 +98,7 @@ internal class LinkingMiddleware( |
91 | 98 | // tab, but opened by an extension e.g. via browser.tabs.update.
|
92 | 99 | performLoadOnMainThread(engineSession, tab.content.url, loadFlags = tab.engineState.initialLoadFlags)
|
93 | 100 | } else {
|
94 | - val parentEngineSession = if (tab is TabSessionState) {
|
|
101 | + val parentEngineSession = if (includeParent && tab is TabSessionState) {
|
|
95 | 102 | tab.parentId?.let { context.state.findTabOrCustomTab(it)?.engineState?.engineSession }
|
96 | 103 | } else {
|
97 | 104 | null
|
... | ... | @@ -258,6 +258,7 @@ class EngineDelegateMiddlewareTest { |
258 | 258 | EngineAction.LoadUrlAction(
|
259 | 259 | "test-tab",
|
260 | 260 | "https://www.firefox.com",
|
261 | + includeParent = true,
|
|
261 | 262 | ),
|
262 | 263 | ).joinBlocking()
|
263 | 264 |
... | ... | @@ -91,7 +91,9 @@ class LinkingMiddlewareTest { |
91 | 91 | store.dispatch(EngineAction.LinkEngineSessionAction(parent.id, parentEngineSession)).joinBlocking()
|
92 | 92 | |
93 | 93 | val childEngineSession: EngineSession = mock()
|
94 | - store.dispatch(EngineAction.LinkEngineSessionAction(child.id, childEngineSession)).joinBlocking()
|
|
94 | + store.dispatch(
|
|
95 | + EngineAction.LinkEngineSessionAction(child.id, childEngineSession, includeParent = true),
|
|
96 | + ).joinBlocking()
|
|
95 | 97 | |
96 | 98 | dispatcher.scheduler.advanceUntilIdle()
|
97 | 99 |
... | ... | @@ -86,14 +86,8 @@ class SessionUseCases( |
86 | 86 | // If we already have an engine session load Url directly to prevent
|
87 | 87 | // context switches.
|
88 | 88 | if (engineSession != null) {
|
89 | - val parentEngineSession = if (tab is TabSessionState) {
|
|
90 | - tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession }
|
|
91 | - } else {
|
|
92 | - null
|
|
93 | - }
|
|
94 | 89 | engineSession.loadUrl(
|
95 | 90 | url = url,
|
96 | - parent = parentEngineSession,
|
|
97 | 91 | flags = flags,
|
98 | 92 | additionalHeaders = additionalHeaders,
|
99 | 93 | )
|
... | ... | @@ -128,7 +128,6 @@ class SessionUseCasesTest { |
128 | 128 | middleware.assertNotDispatched(EngineAction.LoadUrlAction::class)
|
129 | 129 | verify(childEngineSession).loadUrl(
|
130 | 130 | url = "https://www.mozilla.org/en-CA/firefox/browsers/mobile/",
|
131 | - parent = engineSession,
|
|
132 | 131 | )
|
133 | 132 | middleware.assertLastAction(EngineAction.OptimizedLoadUrlTriggeredAction::class) { action ->
|
134 | 133 | assertEquals("bugzilla", action.tabId)
|
... | ... | @@ -189,6 +189,7 @@ class TabsUseCases( |
189 | 189 | tab.id,
|
190 | 190 | url,
|
191 | 191 | flags,
|
192 | + includeParent = true,
|
|
192 | 193 | ),
|
193 | 194 | )
|
194 | 195 | }
|
... | ... | @@ -259,6 +260,7 @@ class TabsUseCases( |
259 | 260 | tab.id,
|
260 | 261 | url,
|
261 | 262 | flags,
|
263 | + includeParent = true,
|
|
262 | 264 | ),
|
263 | 265 | )
|
264 | 266 | }
|
... | ... | @@ -477,6 +479,7 @@ class TabsUseCases( |
477 | 479 | tab.id,
|
478 | 480 | url,
|
479 | 481 | flags,
|
482 | + includeParent = true,
|
|
480 | 483 | ),
|
481 | 484 | )
|
482 | 485 | tab.id
|