summaryrefslogtreecommitdiffstats
path: root/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt')
-rw-r--r--mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt163
1 files changed, 113 insertions, 50 deletions
diff --git a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
index aab32cd01d..839ac4b468 100644
--- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
@@ -67,8 +67,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"URI should be " + testLoader.getUri(),
request.uri,
@@ -123,6 +122,7 @@ class NavigationDelegateTest : BaseSessionTest() {
if (errorPageUrl != null) {
sessionRule.waitUntilCalled(object : ContentDelegate, NavigationDelegate {
@AssertCalled(count = 1, order = [1])
+ @Suppress("OVERRIDE_DEPRECATION")
override fun onLocationChange(
session: GeckoSession,
url: String?,
@@ -492,8 +492,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("The URLs must match", request.uri, equalTo(forEachCall(uri, httpsUri)))
return null
}
@@ -552,8 +551,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("The URLs must match", request.uri, equalTo(forEachCall(uri, httpsUri)))
return null
}
@@ -593,6 +591,7 @@ class NavigationDelegateTest : BaseSessionTest() {
sessionRule.waitUntilCalled(object : ContentDelegate, NavigationDelegate {
@AssertCalled(count = 1, order = [1])
+ @Suppress("OVERRIDE_DEPRECATION")
override fun onLocationChange(
session: GeckoSession,
url: String?,
@@ -611,8 +610,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("The URLs must match", request.uri, equalTo(forEachCall(uri, httpsUri)))
return null
}
@@ -646,6 +644,7 @@ class NavigationDelegateTest : BaseSessionTest() {
// No good way to wait for loading about:blank error page. Use onLocaitonChange etc.
sessionRule.waitUntilCalled(object : ContentDelegate, NavigationDelegate {
+ @Suppress("OVERRIDE_DEPRECATION")
override fun onLocationChange(
session: GeckoSession,
url: String?,
@@ -665,8 +664,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
// We set http scheme only in case it's not iFrame
assertThat("The URLs must match", request.uri, equalTo(uri))
return null
@@ -717,8 +715,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"URI should be HTTP then redirected to HTTPS",
request.uri,
@@ -774,8 +771,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onSubframeLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("URI should not be null", request.uri, notNullValue())
assertThat("URI should match", request.uri, endsWith(iframeUri))
return null
@@ -862,8 +858,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("Session should not be null", session, notNullValue())
assertThat("URI should not be null", request.uri, notNullValue())
assertThat(
@@ -913,8 +908,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("Session should not be null", session, notNullValue())
assertThat("App requested this load", request.isDirectNavigation, equalTo(true))
assertThat("URI should not be null", request.uri, notNullValue())
@@ -927,8 +921,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onSubframeLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("Session should not be null", session, notNullValue())
assertThat("App did not request this load", request.isDirectNavigation, equalTo(false))
assertThat("URI should not be null", request.uri, notNullValue())
@@ -960,8 +953,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("Session should not be null", session, notNullValue())
assertThat("URI should not be null", request.uri, notNullValue())
assertThat(
@@ -1023,8 +1015,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("URL should match", request.uri, equalTo(forEachCall(uri, redirectUri)))
assertThat(
"From app should be correct",
@@ -1447,8 +1438,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("Session should not be null", session, notNullValue())
assertThat("URI should not be null", request.uri, notNullValue())
assertThat("URI should match", request.uri, endsWith(HELLO_HTML_PATH))
@@ -1478,10 +1468,12 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("Session should not be null", session, notNullValue())
assertThat("URL should not be null", url, notNullValue())
assertThat("URL should match", url, endsWith(HELLO_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1, order = [2])
@@ -1514,8 +1506,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match the provided data URL", url, equalTo(dataUrl))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1)
@@ -1542,6 +1536,7 @@ class NavigationDelegateTest : BaseSessionTest() {
// Test that if we unset the navigation delegate during a load, the load still proceeds.
var onLocationCount = 0
mainSession.navigationDelegate = object : NavigationDelegate {
+ @Suppress("OVERRIDE_DEPRECATION")
override fun onLocationChange(
session: GeckoSession,
url: String?,
@@ -1587,12 +1582,14 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat(
"URL should be a data URL",
url,
equalTo(createDataUri(dataString, mimeType)),
)
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1)
@@ -1612,8 +1609,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should be a data URL", url, startsWith("data:"))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1)
@@ -1641,8 +1640,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, equalTo(createDataUri(bytes, "text/html")))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1)
@@ -1683,8 +1684,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, equalTo(createDataUri(bytes, mimeType)))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1)
@@ -1714,8 +1717,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("URI should match", request.uri, endsWith(HELLO_HTML_PATH))
assertThat(
"Trigger URL should be null",
@@ -1740,8 +1742,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, endsWith(HELLO_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1, order = [2])
@@ -1774,8 +1778,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, endsWith(HELLO2_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
})
@@ -1787,8 +1793,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"Load should not be direct",
request.isDirectNavigation,
@@ -1802,8 +1807,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, endsWith(HELLO_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1, order = [2])
@@ -1830,8 +1837,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"Load should not be direct",
request.isDirectNavigation,
@@ -1845,8 +1851,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URL should match", url, endsWith(HELLO2_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
@AssertCalled(count = 1, order = [2])
@@ -1872,8 +1880,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
if (request.uri.endsWith(HELLO_HTML_PATH)) {
return GeckoResult.deny()
} else {
@@ -1913,8 +1920,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("URI should be correct", request.uri, endsWith(NEW_SESSION_CHILD_HTML_PATH))
assertThat(
"Trigger URL should match",
@@ -1969,8 +1975,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat("URI should be correct", request.uri, endsWith(NEW_SESSION_CHILD_HTML_PATH))
assertThat(
"Trigger URL should be null",
@@ -2080,8 +2085,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
// Pretend we handled the target="_blank" link click.
if (request.uri.endsWith(NEW_SESSION_CHILD_HTML_PATH)) {
return GeckoResult.deny()
@@ -2102,8 +2106,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"URI must match",
request.uri,
@@ -2151,8 +2154,7 @@ class NavigationDelegateTest : BaseSessionTest() {
mainSession.waitUntilCalled(object : NavigationDelegate {
@AssertCalled(count = 1, order = [1])
- override fun onLoadRequest(session: GeckoSession, request: LoadRequest):
- GeckoResult<AllowOrDeny>? {
+ override fun onLoadRequest(session: GeckoSession, request: LoadRequest): GeckoResult<AllowOrDeny>? {
assertThat(
"URL should be correct",
request.uri,
@@ -2172,8 +2174,7 @@ class NavigationDelegateTest : BaseSessionTest() {
}
@AssertCalled(count = 1, order = [2])
- override fun onNewSession(session: GeckoSession, uri: String):
- GeckoResult<GeckoSession>? {
+ override fun onNewSession(session: GeckoSession, uri: String): GeckoResult<GeckoSession>? {
assertThat("URL should be correct", uri, endsWith("form_blank.html?"))
return null
}
@@ -2621,6 +2622,7 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
currentUrl = url
}
@@ -2702,8 +2704,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
assertThat(
"Load should not be direct",
request.isDirectNavigation,
@@ -2717,8 +2718,10 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URI should match", url, endsWith("#test1"))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
})
@@ -2729,8 +2732,7 @@ class NavigationDelegateTest : BaseSessionTest() {
override fun onLoadRequest(
session: GeckoSession,
request: LoadRequest,
- ):
- GeckoResult<AllowOrDeny>? {
+ ): GeckoResult<AllowOrDeny>? {
return null
}
@@ -2739,13 +2741,20 @@ class NavigationDelegateTest : BaseSessionTest() {
session: GeckoSession,
url: String?,
perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
) {
assertThat("URI should match", url, endsWith("#test2"))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
}
})
}
@Test fun purgeHistory() {
+ // TODO: Bug 1884334
+ val geckoPrefs = sessionRule.getPrefs(
+ "fission.disableSessionHistoryInParent",
+ )
+ assumeThat(geckoPrefs[0] as Boolean, equalTo(true))
// TODO: Bug 1837551
assumeThat(sessionRule.env.isFission, equalTo(false))
@@ -2830,6 +2839,54 @@ class NavigationDelegateTest : BaseSessionTest() {
})
}
+ @WithDisplay(width = 100, height = 100)
+ @Test
+ fun locationReplaceOnUserGesture() {
+ mainSession.loadUri("$TEST_ENDPOINT$CLICK_TO_REPLACE_HTML_PATH")
+ mainSession.waitForPageStop()
+
+ mainSession.synthesizeTap(50, 50)
+
+ sessionRule.waitUntilCalled(object : NavigationDelegate {
+ @AssertCalled(count = 1)
+ override fun onLocationChange(
+ session: GeckoSession,
+ url: String?,
+ perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
+ ) {
+ assertThat("Should have a user gesture", hasUserGesture, equalTo(true))
+ assertThat(
+ "Location should be replaced to replacedUrl",
+ url,
+ equalTo("replacedUrl"),
+ )
+ }
+ })
+ }
+
+ @WithDisplay(width = 100, height = 100)
+ @Test
+ fun locationNotReplaceOnNoUserGesture() {
+ mainSession.loadUri("$TEST_ENDPOINT$HELLO_HTML_PATH")
+ sessionRule.waitForPageStop()
+
+ sessionRule.forCallbacksDuringWait(object : NavigationDelegate {
+ @AssertCalled(count = 1, order = [2])
+ override fun onLocationChange(
+ session: GeckoSession,
+ url: String?,
+ perms: MutableList<PermissionDelegate.ContentPermission>,
+ hasUserGesture: Boolean,
+ ) {
+ assertThat("Session should not be null", session, notNullValue())
+ assertThat("URL should not be null", url, notNullValue())
+ assertThat("URL should match", url, endsWith(HELLO_HTML_PATH))
+ assertThat("Should not have user gesture", hasUserGesture, equalTo(false))
+ }
+ })
+ }
+
@Test fun loadAfterLoad() {
mainSession.delegateDuringNextWait(object : NavigationDelegate {
@AssertCalled(count = 2)
@@ -3078,6 +3135,11 @@ class NavigationDelegateTest : BaseSessionTest() {
}
@Test fun goBackFromHistory() {
+ // TODO: Bug 1884334
+ val geckoPrefs = sessionRule.getPrefs(
+ "fission.disableSessionHistoryInParent",
+ )
+ assumeThat(geckoPrefs[0] as Boolean, equalTo(true))
// TODO: Bug 1837551
assumeThat(sessionRule.env.isFission, equalTo(false))
@@ -3119,6 +3181,7 @@ class NavigationDelegateTest : BaseSessionTest() {
var lastTitle: String? = ""
sessionRule.delegateDuringNextWait(object : NavigationDelegate, ContentDelegate {
@AssertCalled(count = 1)
+ @Suppress("OVERRIDE_DEPRECATION")
override fun onLocationChange(
session: GeckoSession,
url: String?,