diff --git a/buildSrc/src/main/java/Gecko.kt b/buildSrc/src/main/java/Gecko.kt index 47001ef0a9f..d0bef82973a 100644 --- a/buildSrc/src/main/java/Gecko.kt +++ b/buildSrc/src/main/java/Gecko.kt @@ -16,7 +16,7 @@ internal object GeckoVersions { /** * GeckoView Release Version. */ - const val release_version = "87.0.20210318103112" + const val release_version = "88.0.20210415204500" } @Suppress("Unused", "MaxLineLength") diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt index 8d1c48471d8..bba8c952775 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt @@ -299,9 +299,9 @@ class GeckoEngine( override fun onInstallPrompt(ext: org.mozilla.geckoview.WebExtension): GeckoResult? { val extension = GeckoWebExtension(ext, runtime) return if (webExtensionDelegate.onInstallPermissionRequest(extension)) { - GeckoResult.ALLOW + GeckoResult.allow() } else { - GeckoResult.DENY + GeckoResult.deny() } } diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt index bd460193737..1384738c173 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt @@ -266,7 +266,7 @@ class GeckoEngineSession( * [TrackingProtectionPolicy.TrackingCategory.SCRIPTS_AND_SUB_RESOURCES]. */ val shouldBlockContent = - policy.contains(TrackingProtectionPolicy.TrackingCategory.SCRIPTS_AND_SUB_RESOURCES) + policy.contains(TrackingProtectionPolicy.TrackingCategory.SCRIPTS_AND_SUB_RESOURCES) val enabledInBrowsingMode = if (privateMode) { policy.useForPrivateSessions diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/NestedGeckoView.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/NestedGeckoView.kt index fab3c1134b1..a1ba885563a 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/NestedGeckoView.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/NestedGeckoView.kt @@ -119,11 +119,11 @@ open class NestedGeckoView(context: Context) : GeckoView(context), NestedScrolli @VisibleForTesting internal fun updateInputResult(event: MotionEvent) { - super.onTouchEventForResult(event) + super.onTouchEventForDetailResult(event) .accept { // This should never be null. // Prefer to crash and investigate after rather than not knowing about problems with this. - inputResult = it!! + inputResult = it?.handledResult()!! startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL) } } diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegate.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegate.kt index 2d3a0b5f1ce..781430af630 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegate.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegate.kt @@ -58,8 +58,13 @@ open class GeckoSelectionActionDelegate( } override fun performAction(id: String, item: MenuItem): Boolean { - val selectedText = mSelection?.text ?: return super.performAction(id, item) + /* Temporary, removed once https://bugzilla.mozilla.org/show_bug.cgi?id=1694983 is fixed */ + try { + val selectedText = mSelection?.text ?: return super.performAction(id, item) - return customDelegate.performAction(id, selectedText) || super.performAction(id, item) + return customDelegate.performAction(id, selectedText) || super.performAction(id, item) + } catch (e: SecurityException) { + return false + } } } diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webextension/GeckoWebExtension.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webextension/GeckoWebExtension.kt index 16de5d808a8..0f24dab354d 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webextension/GeckoWebExtension.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/webextension/GeckoWebExtension.kt @@ -302,9 +302,9 @@ class GeckoWebExtension( tabDetails.active == true, tabDetails.url) ) { - GeckoResult.ALLOW + GeckoResult.allow() } else { - GeckoResult.DENY + GeckoResult.deny() } } @@ -315,12 +315,12 @@ class GeckoWebExtension( return if (ext != null) { if (tabHandler.onCloseTab(this@GeckoWebExtension, session)) { - GeckoResult.ALLOW + GeckoResult.allow() } else { - GeckoResult.DENY + GeckoResult.deny() } } else { - GeckoResult.DENY + GeckoResult.deny() } } } diff --git a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt index 4a969d5d80f..faab2e9b5ad 100644 --- a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt +++ b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt @@ -1127,7 +1127,7 @@ class GeckoEngineSessionTest { } @Test - fun `WHEN updating tracking protection with a recommended policy THEN etpEnabled should be enabled`() { + fun `WHEN updateing tracking protection with a recommended policy THEN etpEnabled should be enabled`() { whenever(runtime.settings).thenReturn(mock()) whenever(runtime.settings.contentBlocking).thenReturn(mock()) @@ -1149,7 +1149,7 @@ class GeckoEngineSessionTest { } @Test - fun `WHEN updating tracking protection with a none policy THEN etpEnabled should be enabled`() { + fun `WHEN calling updateTrackingProtection with a none policy THEN etpEnabled should be disabled`() { whenever(runtime.settings).thenReturn(mock()) whenever(runtime.settings.contentBlocking).thenReturn(mock()) @@ -1171,7 +1171,7 @@ class GeckoEngineSessionTest { } @Test - fun `WHEN update content blocking with a policy SCRIPTS_AND_SUB_RESOURCES useForPrivateSessions being in privateMode THEN useTrackingProtection should be true`() { + fun `WHEN updating the contentBlocking with a policy SCRIPTS_AND_SUB_RESOURCES useForPrivateSessions being in privateMode THEN useTrackingProtection should be true`() { val geckoSetting = mock() val geckoSession = mock() @@ -1249,7 +1249,7 @@ class GeckoEngineSessionTest { } @Test - fun `changes to enableTrackingProtection will be notified to all new observers`() { + fun `changes to updateTrackingProtection will be notified to all new observers`() { whenever(runtime.settings).thenReturn(mock()) whenever(runtime.settings.contentBlocking).thenReturn(mock()) val session = GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider) diff --git a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt index 49514a9db3f..eb9bdb294ca 100644 --- a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +++ b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt @@ -862,7 +862,7 @@ class GeckoEngineTest { val geckoDelegateCaptor = argumentCaptor() verify(webExtensionController).promptDelegate = geckoDelegateCaptor.capture() - assertEquals(GeckoResult.DENY, geckoDelegateCaptor.value.onInstallPrompt(extension)) + assertEquals(GeckoResult.deny(), geckoDelegateCaptor.value.onInstallPrompt(extension)) val extensionCaptor = argumentCaptor() verify(webExtensionsDelegate).onInstallPermissionRequest(extensionCaptor.capture()) val capturedExtension = @@ -870,7 +870,7 @@ class GeckoEngineTest { assertEquals(extension, capturedExtension.nativeExtension) whenever(webExtensionsDelegate.onInstallPermissionRequest(any())).thenReturn(true) - assertEquals(GeckoResult.ALLOW, geckoDelegateCaptor.value.onInstallPrompt(extension)) + assertEquals(GeckoResult.allow(), geckoDelegateCaptor.value.onInstallPrompt(extension)) } @Test @@ -912,7 +912,7 @@ class GeckoEngineTest { assertEquals(updatedExtension, updated.nativeExtension) onPermissionsGrantedCaptor.value.invoke(true) - assertEquals(GeckoResult.ALLOW, result) + assertEquals(GeckoResult.allow(), result) } @Test @@ -953,7 +953,7 @@ class GeckoEngineTest { assertEquals(updatedExtension, updated.nativeExtension) onPermissionsGrantedCaptor.value.invoke(true) - assertEquals(GeckoResult.ALLOW, result) + assertEquals(GeckoResult.allow(), result) } @Test diff --git a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegateTest.kt b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegateTest.kt index 004962b1ba3..9d73baae3c7 100644 --- a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegateTest.kt +++ b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/selection/GeckoSelectionActionDelegateTest.kt @@ -7,9 +7,11 @@ package mozilla.components.browser.engine.gecko.selection import android.app.Activity import android.app.Application import android.app.Service +import android.view.MenuItem import mozilla.components.concept.engine.selection.SelectionActionDelegate import mozilla.components.support.test.mock import org.junit.Assert +import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Test @@ -55,6 +57,25 @@ class GeckoSelectionActionDelegateTest { Assert.assertTrue(actualActions.contains(it)) } } + + @Test + fun `WHEN perform action triggers a security exception THEN false is returned`() { + val customActions = arrayOf("1", "2", "3") + val customDelegate = object : SelectionActionDelegate { + override fun getAllActions(): Array = customActions + override fun isActionAvailable(id: String, selectedText: String): Boolean = false + override fun getActionTitle(id: String): CharSequence? = "" + override fun performAction(id: String, selectedText: String): Boolean { + throw SecurityException("test") + } + override fun sortedActions(actions: Array): Array { + return actions + } + } + + val geckoDelegate = TestGeckoSelectionActionDelegate(mock(), customDelegate) + assertFalse(geckoDelegate.performAction("test", mock())) + } } /** @@ -65,4 +86,7 @@ class TestGeckoSelectionActionDelegate( customDelegate: SelectionActionDelegate ) : GeckoSelectionActionDelegate(activity, customDelegate) { public override fun getAllActions() = super.getAllActions() + public override fun performAction(id: String, item: MenuItem): Boolean { + return super.performAction(id, item) + } } diff --git a/components/browser/engine-gecko/src/test/java/org/mozilla/geckoview/MockWebExtension.kt b/components/browser/engine-gecko/src/test/java/org/mozilla/geckoview/MockWebExtension.kt index 2f7e87d6aa5..0046f6dc4b2 100644 --- a/components/browser/engine-gecko/src/test/java/org/mozilla/geckoview/MockWebExtension.kt +++ b/components/browser/engine-gecko/src/test/java/org/mozilla/geckoview/MockWebExtension.kt @@ -4,8 +4,9 @@ package org.mozilla.geckoview +import mozilla.components.support.test.mock import org.mozilla.gecko.util.GeckoBundle -class MockWebExtension(bundle: GeckoBundle) : WebExtension(bundle) +class MockWebExtension(bundle: GeckoBundle) : WebExtension(DelegateControllerProvider { mock() }, bundle) class MockCreateTabDetails(bundle: GeckoBundle) : WebExtension.CreateTabDetails(bundle) class MockUpdateTabDetails(bundle: GeckoBundle) : WebExtension.UpdateTabDetails(bundle)