Bug 1550877 - Use correct E10SUtils in GeckoViewNavigation. r=snorp

This fixes a crash in `browser.tabs.update` when used with WebExtension pages.

Differential Revision: https://phabricator.services.mozilla.com/D31453

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Agi Sferro 2019-05-17 13:43:44 +00:00
parent b6a082b167
commit 1324e8b036
6 changed files with 81 additions and 1 deletions

View File

@ -0,0 +1,7 @@
browser.runtime.onMessage.addListener(notify);
function notify(message) {
if (message.action == "showTab") {
browser.tabs.update({url: "/tab.html"});
}
}

View File

@ -0,0 +1,24 @@
{
"manifest_version": 2,
"name": "Mozilla Android Components - Tabs Update Test",
"version": "1.0",
"background": {
"scripts": ["background-script.js"]
},
"content_scripts": [
{
"matches": ["*://*.example.com/*"],
"js": ["tabs.js"],
"run_at": "document_idle"
}
],
"web_accessible_resources": [
"tab.html"
],
"permissions": [
"geckoViewAddons",
"nativeMessaging",
"tabs",
"<all_urls>"
]
}

View File

@ -0,0 +1 @@
<h1>Hello World!</h1>

View File

@ -0,0 +1 @@
browser.runtime.sendMessage({"action": "showTab"});

View File

@ -9,6 +9,7 @@ import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.ReuseSession
import android.support.test.filters.MediumTest
import android.support.test.runner.AndroidJUnit4
import org.hamcrest.core.StringEndsWith.endsWith
import org.hamcrest.core.IsEqual.equalTo
import org.json.JSONObject
import org.junit.Assert
@ -17,7 +18,9 @@ import org.junit.Assert.fail
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.geckoview.*
import org.mozilla.geckoview.test.rule.GeckoSessionTestRule
import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.WithDevToolsAPI
import org.mozilla.geckoview.test.util.Callbacks
import org.mozilla.geckoview.test.util.HttpBin
import java.net.URI
@ -460,6 +463,50 @@ class WebExtensionTest : BaseSessionTest() {
}
}
@Test
fun loadWebExtensionPage() {
val extension = WebExtension("resource://android/assets/web_extensions/extension-page-update/")
sessionRule.waitForResult(sessionRule.runtime.registerWebExtension(extension))
mainSession.loadUri("http://example.com");
mainSession.waitUntilCalled(object : Callbacks.NavigationDelegate, Callbacks.ProgressDelegate {
@GeckoSessionTestRule.AssertCalled(count = 1)
override fun onLocationChange(session: GeckoSession, url: String?) {
assertThat("Url should load example.com first",
url, equalTo("http://example.com/"))
}
@GeckoSessionTestRule.AssertCalled(count = 1)
override fun onPageStop(session: GeckoSession, success: Boolean) {
assertThat("Page should load successfully.",
success, equalTo(true))
}
})
var page: String? = null
var pageStop = GeckoResult<Boolean>()
mainSession.delegateUntilTestEnd(object : Callbacks.NavigationDelegate, Callbacks.ProgressDelegate {
override fun onLocationChange(session: GeckoSession, url: String?) {
page = url
}
override fun onPageStop(session: GeckoSession, success: Boolean) {
if (success && page != null && page!!.endsWith("/tab.html")) {
pageStop.complete(true)
}
}
})
// Make sure the page loaded successfully
sessionRule.waitForResult(pageStop)
assertThat("Url should load WebExtension page", page, endsWith("/tab.html"))
sessionRule.waitForResult(sessionRule.runtime.unregisterWebExtension(extension))
}
@Test
fun badFileType() {
testRegisterError("resource://android/bad/location/error",

View File

@ -10,7 +10,7 @@ const {GeckoViewModule} = ChromeUtils.import("resource://gre/modules/GeckoViewMo
const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
E10SUtils: "resource://gre/modules/sessionstore/Utils.jsm",
E10SUtils: "resource://gre/modules/E10SUtils.jsm",
LoadURIDelegate: "resource://gre/modules/LoadURIDelegate.jsm",
Services: "resource://gre/modules/Services.jsm",
});