Loading components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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]. */ Loading components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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() Loading components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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]. Loading components/browser/state/src/main/java/mozilla/components/browser/state/reducer/WebExtensionReducer.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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( Loading components/browser/state/src/test/java/mozilla/components/browser/state/action/WebExtensionActionTest.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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) } Loading @@ -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()) Loading Loading @@ -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 Loading
components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +8 −0 Original line number Diff line number Diff line Loading @@ -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]. */ Loading
components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +16 −0 Original line number Diff line number Diff line Loading @@ -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() Loading
components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt +2 −3 Original line number Diff line number Diff line Loading @@ -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]. Loading
components/browser/state/src/main/java/mozilla/components/browser/state/reducer/WebExtensionReducer.kt +1 −1 Original line number Diff line number Diff line Loading @@ -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( Loading
components/browser/state/src/test/java/mozilla/components/browser/state/action/WebExtensionActionTest.kt +4 −4 Original line number Diff line number Diff line Loading @@ -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) } Loading @@ -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()) Loading Loading @@ -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