зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1601067 - Make the test-support extension installable. r=owlish,snorp
Differential Revision: https://phabricator.services.mozilla.com/D72980
This commit is contained in:
Родитель
2cf1ad60da
Коммит
a017477abe
|
@ -3,6 +3,11 @@
|
|||
"name": "Test support",
|
||||
"version": "1.0",
|
||||
"description": "Helper script for GeckoView tests",
|
||||
"applications": {
|
||||
"gecko": {
|
||||
"id": "test-support@tests.mozilla.org"
|
||||
}
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["<all_urls>"],
|
||||
|
@ -25,6 +30,7 @@
|
|||
},
|
||||
"permissions": [
|
||||
"geckoViewAddons",
|
||||
"nativeMessaging"
|
||||
"nativeMessaging",
|
||||
"nativeMessagingFromContent"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import org.mozilla.geckoview.test.util.Callbacks
|
|||
import org.mozilla.geckoview.WebExtension.DisabledFlags
|
||||
import org.mozilla.geckoview.WebExtensionController.EnableSource
|
||||
import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.Setting
|
||||
import org.mozilla.geckoview.test.util.RuntimeCreator
|
||||
|
||||
import java.util.UUID
|
||||
|
||||
|
@ -206,15 +207,17 @@ class WebExtensionTest : BaseSessionTest() {
|
|||
// Check that the WebExtension was applied by checking the border color
|
||||
assertBodyBorderEqualTo("red")
|
||||
|
||||
var list = sessionRule.waitForResult(controller.list())
|
||||
assertEquals(list.size, 1)
|
||||
assertEquals(list[0].id, borderify.id)
|
||||
var list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertEquals(list.size, 2)
|
||||
assertTrue(list.containsKey(borderify.id))
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
|
||||
// Unregister WebExtension and check again
|
||||
sessionRule.waitForResult(controller.uninstall(borderify))
|
||||
|
||||
list = sessionRule.waitForResult(controller.list())
|
||||
assertEquals(list, emptyList<WebExtension>())
|
||||
list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertEquals(list.size, 1)
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
|
||||
mainSession.reload()
|
||||
sessionRule.waitForPageStop()
|
||||
|
@ -307,9 +310,10 @@ class WebExtensionTest : BaseSessionTest() {
|
|||
"xpinstall.signatures.required" to false
|
||||
))
|
||||
|
||||
// First, make sure the list starts empty
|
||||
var list = sessionRule.waitForResult(controller.list())
|
||||
assertEquals(list, emptyList<WebExtension>())
|
||||
// First, make sure the list only contains the test support extension
|
||||
var list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertEquals(list.size, 1)
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
|
||||
sessionRule.delegateDuringNextWait(object : WebExtensionController.PromptDelegate {
|
||||
@AssertCalled(count=2)
|
||||
|
@ -328,23 +332,27 @@ class WebExtensionTest : BaseSessionTest() {
|
|||
GeckoResult.allOf(borderifyResult, dummyResult))
|
||||
|
||||
// Make sure the list is updated accordingly
|
||||
list = sessionRule.waitForResult(controller.list())
|
||||
assertTrue(list.find { it.id == borderify.id } != null)
|
||||
assertTrue(list.find { it.id == dummy.id } != null)
|
||||
assertEquals(list.size, 2)
|
||||
list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertTrue(list.containsKey(borderify.id))
|
||||
assertTrue(list.containsKey(dummy.id))
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
assertEquals(list.size, 3)
|
||||
|
||||
// Uninstall borderify and verify that it's not in the list anymore
|
||||
sessionRule.waitForResult(controller.uninstall(borderify))
|
||||
|
||||
list = sessionRule.waitForResult(controller.list())
|
||||
assertEquals(list.size, 1)
|
||||
assertEquals(list[0].id, dummy.id)
|
||||
list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertEquals(list.size, 2)
|
||||
assertTrue(list.containsKey(dummy.id))
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
assertFalse(list.containsKey(borderify.id))
|
||||
|
||||
// Uninstall dummy and make sure the list is now empty
|
||||
sessionRule.waitForResult(controller.uninstall(dummy))
|
||||
|
||||
list = sessionRule.waitForResult(controller.list())
|
||||
assertEquals(list, emptyList<WebExtension>())
|
||||
list = extensionsMap(sessionRule.waitForResult(controller.list()))
|
||||
assertEquals(list.size, 1)
|
||||
assertTrue(list.containsKey(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID))
|
||||
}
|
||||
|
||||
private fun testInstallError(name: String, expectedError: Int) {
|
||||
|
@ -366,6 +374,14 @@ class WebExtensionTest : BaseSessionTest() {
|
|||
}))
|
||||
}
|
||||
|
||||
private fun extensionsMap(extensionList: List<WebExtension>): Map<String, WebExtension> {
|
||||
val map = HashMap<String, WebExtension>()
|
||||
for (extension in extensionList) {
|
||||
map.put(extension.id, extension);
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
@Test
|
||||
fun installUnsignedExtensionSignatureNotRequired() {
|
||||
sessionRule.setPrefsUntilTestEnd(mapOf(
|
||||
|
@ -537,7 +553,7 @@ class WebExtensionTest : BaseSessionTest() {
|
|||
|
||||
extensionCreatedSession.webExtensionController.setTabDelegate(tabsExtension, object : WebExtension.SessionTabDelegate {
|
||||
override fun onCloseTab(source: WebExtension?, session: GeckoSession): GeckoResult<AllowOrDeny> {
|
||||
assertEquals(tabsExtension, source)
|
||||
assertEquals(tabsExtension.id, source!!.id)
|
||||
assertEquals(details.active, true)
|
||||
assertNotEquals(null, extensionCreatedSession)
|
||||
assertEquals(extensionCreatedSession, session)
|
||||
|
|
|
@ -1098,6 +1098,9 @@ public class GeckoSessionTestRule implements TestRule {
|
|||
}
|
||||
|
||||
protected void prepareSession(final GeckoSession session) {
|
||||
UiThreadUtils.waitForCondition(() ->
|
||||
RuntimeCreator.sTestSupport.get() != RuntimeCreator.TEST_SUPPORT_INITIAL,
|
||||
env.getDefaultTimeoutMillis());
|
||||
session.getWebExtensionController()
|
||||
.setMessageDelegate(RuntimeCreator.sTestSupportExtension,
|
||||
mMessageDelegate,
|
||||
|
@ -1202,14 +1205,20 @@ public class GeckoSessionTestRule implements TestRule {
|
|||
WebExtensionController controller = getRuntime().getWebExtensionController();
|
||||
List<WebExtension> list = waitForResult(controller.list());
|
||||
|
||||
boolean hasTestSupport = false;
|
||||
// Uninstall any left-over extensions
|
||||
for (WebExtension extension : list) {
|
||||
waitForResult(controller.uninstall(extension));
|
||||
if (!extension.id.equals(RuntimeCreator.TEST_SUPPORT_EXTENSION_ID)) {
|
||||
waitForResult(controller.uninstall(extension));
|
||||
} else {
|
||||
hasTestSupport = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If an extension was still installed, this test should fail
|
||||
// If an extension was still installed, this test should fail.
|
||||
// Note the test support extension is always kept for speed.
|
||||
assertThat("A WebExtension was left installed during this test.",
|
||||
list.size(), equalTo(0));
|
||||
list.size(), equalTo(hasTestSupport ? 1 : 0));
|
||||
}
|
||||
|
||||
protected void cleanupStatement() throws Throwable {
|
||||
|
|
|
@ -22,6 +22,7 @@ public class RuntimeCreator {
|
|||
public static final int TEST_SUPPORT_INITIAL = 0;
|
||||
public static final int TEST_SUPPORT_OK = 1;
|
||||
public static final int TEST_SUPPORT_ERROR = 2;
|
||||
public static final String TEST_SUPPORT_EXTENSION_ID = "test-support@tests.mozilla.org";
|
||||
private static final String LOGTAG = "RuntimeCreator";
|
||||
|
||||
private static final Environment env = new Environment();
|
||||
|
@ -95,21 +96,16 @@ public class RuntimeCreator {
|
|||
|
||||
public static void registerTestSupport() {
|
||||
sTestSupport.set(0);
|
||||
sTestSupportExtension =
|
||||
new WebExtension("resource://android/assets/web_extensions/test-support/",
|
||||
"test-support@mozilla.com",
|
||||
WebExtension.Flags.ALLOW_CONTENT_MESSAGING,
|
||||
sRuntime.getWebExtensionController());
|
||||
|
||||
sTestSupportExtension.setMessageDelegate(sMessageDelegate, "browser");
|
||||
|
||||
sRuntime.registerWebExtension(sTestSupportExtension)
|
||||
.accept(value -> {
|
||||
sTestSupport.set(TEST_SUPPORT_OK);
|
||||
}, exception -> {
|
||||
Log.e(LOGTAG, "Could not register TestSupport", exception);
|
||||
sTestSupport.set(TEST_SUPPORT_ERROR);
|
||||
});
|
||||
sRuntime.getWebExtensionController().installBuiltIn(
|
||||
"resource://android/assets/web_extensions/test-support/").accept(extension -> {
|
||||
extension.setMessageDelegate(sMessageDelegate, "browser");
|
||||
sTestSupportExtension = extension;
|
||||
sTestSupport.set(TEST_SUPPORT_OK);
|
||||
}, exception -> {
|
||||
Log.e(LOGTAG, "Could not register TestSupport", exception);
|
||||
sTestSupport.set(TEST_SUPPORT_ERROR);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче