Bug 1461738 - 3. Add test for clearing navigation delegate on load; r?esawin
Add a test where we clear the navigation delegate right after starting a
load. This test exposes the race between Gecko thread and UI thread when
clearing a delegate.
MozReview-Commit-ID: IQrGcuwoDEk
--- 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
@@ -89,16 +89,39 @@ class NavigationDelegateTest : BaseSessi
// Test that when navigation delegate is disabled, we can still perform loads.
sessionRule.session.loadTestPath(HELLO_HTML_PATH)
sessionRule.session.waitForPageStop()
sessionRule.session.reload()
sessionRule.session.waitForPageStop()
}
+ @NullDelegate(GeckoSession.NavigationDelegate::class)
+ @Test fun load_canUnsetNavigationDelegate() {
+ // Test that if we unset the navigation delegate during a load, the load still proceeds.
+ var onLocationCount = 0
+ sessionRule.session.navigationDelegate = object : Callbacks.NavigationDelegate {
+ override fun onLocationChange(session: GeckoSession, url: String) {
+ onLocationCount++
+ }
+ }
+ sessionRule.session.loadTestPath(HELLO_HTML_PATH)
+ sessionRule.session.waitForPageStop()
+
+ assertThat("Should get callback for first load",
+ onLocationCount, equalTo(1))
+
+ sessionRule.session.reload()
+ sessionRule.session.navigationDelegate = null
+ sessionRule.session.waitForPageStop()
+
+ assertThat("Should not get callback for second load",
+ onLocationCount, equalTo(1))
+ }
+
@Test fun loadString() {
val dataString = "<html><head><title>TheTitle</title></head><body>TheBody</body></html>"
val mimeType = "text/html"
sessionRule.session.loadString(dataString, mimeType)
sessionRule.waitForPageStop();
sessionRule.forCallbacksDuringWait(object : Callbacks.NavigationDelegate, Callbacks.ProgressDelegate, Callbacks.ContentDelegate {
@AssertCalled