Commit e2793eea authored by Christian Sadilek's avatar Christian Sadilek
Browse files

Closes #4774: Link addons to their installed extensions

parent 5c55096f
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -242,6 +242,14 @@ class GeckoEngine(
        runtime.webExtensionController.tabDelegate = tabsDelegate
    }

    /**
     * See [Engine.listInstalledWebExtensions].
     */
    override fun listInstalledWebExtensions(onSuccess: (List<WebExtension>) -> Unit, onError: (Throwable) -> Unit) {
        // TODO https://github.com/mozilla-mobile/android-components/issues/4500
        onSuccess(emptyList())
    }

    /**
     * See [Engine.registerWebNotificationDelegate].
     */
+16 −0
Original line number Diff line number Diff line
@@ -602,6 +602,22 @@ class GeckoEngineTest {
        assertNotNull(actionHandlerCaptor.value.onToggleBrowserActionPopup(extension, browserAction))
    }

    @Test
    fun `list web extensions successfully`() {
        val runtime = mock<GeckoRuntime>()
        val engine = GeckoEngine(context, runtime = runtime)
        var extensions: List<WebExtension>? = null
        var onErrorCalled = false

        engine.listInstalledWebExtensions(
            onSuccess = { extensions = it },
            onError = { onErrorCalled = true }
        )

        assertFalse(onErrorCalled)
        assertNotNull(extensions)
    }

    @Test(expected = RuntimeException::class)
    fun `WHEN GeckoRuntime is shutting down THEN GeckoEngine throws runtime exception`() {
        val runtime: GeckoRuntime = mock()
+2 −3
Original line number Diff line number Diff line
@@ -266,10 +266,9 @@ sealed class TrackingProtectionAction : BrowserAction() {
 */
sealed class WebExtensionAction : BrowserAction() {
    /**
     * Installs the given [extension] and adds it to the [BrowserState.extensions].
     * Updates [BrowserState.extensions] to register the given [extension] as installed.
     */
    data class InstallWebExtension(val extension: WebExtensionState) :
        WebExtensionAction()
    data class InstallWebExtensionAction(val extension: WebExtensionState) : WebExtensionAction()

    /**
     * Updates a browser action of a given [extensionId].
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ internal object WebExtensionReducer {
     */
    fun reduce(state: BrowserState, action: WebExtensionAction): BrowserState {
        return when (action) {
            is WebExtensionAction.InstallWebExtension -> {
            is WebExtensionAction.InstallWebExtensionAction -> {
                val existingExtension = state.extensions[action.extension.id]
                if (existingExtension == null) {
                    state.copy(
+4 −4
Original line number Diff line number Diff line
@@ -28,14 +28,14 @@ class WebExtensionActionTest {
        assertTrue(store.state.extensions.isEmpty())

        val extension = WebExtensionState("id", "url")
        store.dispatch(WebExtensionAction.InstallWebExtension(extension)).joinBlocking()
        store.dispatch(WebExtensionAction.InstallWebExtensionAction(extension)).joinBlocking()

        assertFalse(store.state.extensions.isEmpty())
        assertEquals(extension, store.state.extensions.values.first())

        // Installing the same extension twice should have no effect
        val state = store.state
        store.dispatch(WebExtensionAction.InstallWebExtension(extension)).joinBlocking()
        store.dispatch(WebExtensionAction.InstallWebExtensionAction(extension)).joinBlocking()
        assertSame(state, store.state)
    }

@@ -47,7 +47,7 @@ class WebExtensionActionTest {
        assertTrue(store.state.extensions.isEmpty())

        val extension = WebExtensionState("id", "url")
        store.dispatch(WebExtensionAction.InstallWebExtension(extension)).joinBlocking()
        store.dispatch(WebExtensionAction.InstallWebExtensionAction(extension)).joinBlocking()

        assertFalse(store.state.extensions.isEmpty())

@@ -125,7 +125,7 @@ class WebExtensionActionTest {
        val store = BrowserStore()

        val extension = WebExtensionState("id", "url")
        store.dispatch(WebExtensionAction.InstallWebExtension(extension)).joinBlocking()
        store.dispatch(WebExtensionAction.InstallWebExtensionAction(extension)).joinBlocking()

        assertEquals(extension, store.state.extensions[extension.id])
        assertNull(store.state.extensions[extension.id]?.browserActionPopupSession)
Loading