Bug 1601067 - Make the test-support extension installable. r=owlish,snorp

Differential Revision: https://phabricator.services.mozilla.com/D72980
This commit is contained in:
Agi Sferro 2020-05-05 23:02:51 +00:00
Родитель 2cf1ad60da
Коммит a017477abe
4 изменённых файлов: 63 добавлений и 36 удалений

Просмотреть файл

@ -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);
});
}
/**