Commit d7dd95b5 authored by Sebastian Kaspari's avatar Sebastian Kaspari
Browse files

Issue #5529: Restore engine state of tabs in tab collections.

parent a4b34ece
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -137,9 +137,10 @@ class LegacySessionManager(
        session: Session,
        selected: Boolean = false,
        engineSession: EngineSession? = null,
        engineSessionState: EngineSessionState? = null,
        parent: Session? = null
    ) = synchronized(values) {
        addInternal(session, selected, engineSession, parent = parent, viaRestore = false)
        addInternal(session, selected, engineSession, engineSessionState, parent = parent, viaRestore = false)
    }

    @Suppress("LongParameterList", "ComplexMethod")
+13 −1
Original line number Diff line number Diff line
@@ -147,10 +147,12 @@ class SessionManager(
        session: Session,
        selected: Boolean = false,
        engineSession: EngineSession? = null,
        engineSessionState: EngineSessionState? = null,
        parent: Session? = null
    ) {
        // Add store to Session so that it can dispatch actions whenever it changes.
        session.store = store

        if (parent != null) {
            require(all.contains(parent)) { "The parent does not exist" }
            session.parentId = parent.id
@@ -171,7 +173,17 @@ class SessionManager(
            )
        }

        delegate.add(session, selected, engineSession, parent)
        if (engineSessionState != null && engineSession == null) {
            // If the caller passed us an engine session state then also notify the store. We only
            // do this if there is no engine session, because this mirrors the behavior in
            // LegacySessionManager, which will either link an engine session or keep its state.
            store?.syncDispatch(UpdateEngineSessionStateAction(
                session.id,
                engineSessionState
            ))
        }

        delegate.add(session, selected, engineSession, engineSessionState, parent)
    }

    /**
+52 −0
Original line number Diff line number Diff line
@@ -1281,6 +1281,58 @@ class SessionManagerMigrationTest {
        verify(engineSession3, never()).close()
        verify(engineSession4, never()).close()
    }

    @Test
    fun `Adding session with engine session state`() {
        val store = BrowserStore()
        val manager = SessionManager(engine = mock(), store = store)

        val state: EngineSessionState = mock()
        val session = Session("https://www.mozilla.org")

        manager.add(session, engineSessionState = state)

        assertEquals(state, session.engineSessionHolder.engineSessionState)
        assertNull(session.engineSessionHolder.engineSession)

        assertEquals(state, store.state.tabs[0].engineState.engineSessionState)
        assertNull(store.state.tabs[0].engineState.engineSession)
    }

    @Test
    fun `Adding session with engine session and engine session state`() {
        val store = BrowserStore()
        val manager = SessionManager(engine = mock(), store = store)

        val state: EngineSessionState = mock()
        val engineSession: EngineSession = mock()
        val session = Session("https://www.mozilla.org")

        manager.add(session, engineSession = engineSession, engineSessionState = state)

        assertNull(session.engineSessionHolder.engineSessionState)
        assertEquals(engineSession, session.engineSessionHolder.engineSession)

        assertNull(store.state.tabs[0].engineState.engineSessionState)
        assertEquals(engineSession, session.engineSessionHolder.engineSession)
    }

    @Test
    fun `Adding session with engine session`() {
        val store = BrowserStore()
        val manager = SessionManager(engine = mock(), store = store)

        val engineSession: EngineSession = mock()
        val session = Session("https://www.mozilla.org")

        manager.add(session, engineSession = engineSession)

        assertNull(session.engineSessionHolder.engineSessionState)
        assertEquals(engineSession, session.engineSessionHolder.engineSession)

        assertNull(store.state.tabs[0].engineState.engineSessionState)
        assertEquals(engineSession, session.engineSessionHolder.engineSession)
    }
}

private fun createMockEngineSessionWithState(): EngineSession {
+2 −2
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ class CustomTabIntentProcessorTest {
        whenever(intent.putExtra(any<String>(), any<String>())).thenReturn(intent)

        handler.process(intent)
        verify(sessionManager).add(anySession(), eq(false), eq(null), eq(null))
        verify(sessionManager).add(anySession(), eq(false), eq(null), eq(null), eq(null))
        verify(engineSession).loadUrl("http://mozilla.org", flags = LoadUrlFlags.external())
        verify(intent).putExtra(eq(EXTRA_SESSION_ID), any<String>())

@@ -92,7 +92,7 @@ class CustomTabIntentProcessorTest {
        whenever(intent.putExtra(any<String>(), any<String>())).thenReturn(intent)

        handler.process(intent)
        verify(sessionManager).add(anySession(), eq(false), eq(null), eq(null))
        verify(sessionManager).add(anySession(), eq(false), eq(null), eq(null), eq(null))
        verify(engineSession).loadUrl("http://mozilla.org", flags = LoadUrlFlags.external())
        verify(intent).putExtra(eq(EXTRA_SESSION_ID), any<String>())

+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ class SearchUseCasesTest {
        useCases.newPrivateTabSearch.invoke(searchTerms)

        val captor = argumentCaptor<Session>()
        verify(sessionManager).add(captor.capture(), eq(true), eq(null), eq(null))
        verify(sessionManager).add(captor.capture(), eq(true), eq(null), eq(null), eq(null))
        assertTrue(captor.value.private)
        verify(engineSession).loadUrl(searchUrl)
    }
Loading