Implement default_popup for chrome.pageAction on Android r?kmag
MozReview-Commit-ID: 5yP8FAZ4Xy9
--- a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_defaultPopup.html
+++ b/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_defaultPopup.html
@@ -8,16 +8,18 @@
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" href="chrome://mochikit/contents/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
+Cu.import("resource://gre/modules/Services.jsm");
+
add_task(function* test_contentscript() {
function backgroundScript() {
// TODO: Use the Tabs API to obtain the tab ids for showing pageActions.
let tabId = 1;
browser.test.onMessage.addListener(msg => {
if (msg === "page-action-show") {
// TODO: switch to using .show(tabId).then(...) once bug 1270742 lands.
browser.pageAction.show(tabId);
@@ -35,17 +37,16 @@ add_task(function* test_contentscript()
}
function popupScript() {
window.onload = () => {
browser.test.sendMessage("from-page-action-popup-shown");
};
browser.runtime.onMessage.addListener(msg => {
if (msg == "close-popup") {
- browser.test.sendMessage("from-page-action-popup-closed");
window.close();
}
});
}
let extension = ExtensionTestUtils.loadExtension({
background: `(${backgroundScript}())`,
manifest: {
@@ -56,28 +57,44 @@ add_task(function* test_contentscript()
},
},
files: {
"popup.html": `<html><head><meta charset="utf-8"><script src="popup.js"></${"script"}></head></html>`,
"popup.js": `(${popupScript})()`,
},
});
+ let tabClosedPromise = new Promise(resolve => {
+ let chromeWin = Services.wm.getMostRecentWindow("navigator:browser");
+ let BrowserApp = chromeWin.BrowserApp;
+
+ let tabCloseListener = (event) => {
+ BrowserApp.deck.removeEventListener("TabClose", tabCloseListener, false);
+ let browser = event.target;
+ let url = browser.currentURI.spec
+ resolve(url);
+ }
+
+ BrowserApp.deck.addEventListener("TabClose", tabCloseListener, false);
+ });
+
yield extension.startup();
yield extension.awaitMessage("ready");
extension.sendMessage("page-action-show");
yield extension.awaitMessage("page-action-shown");
ok(isPageActionShown(extension.id), "The PageAction should be shown");
clickPageAction(extension.id);
yield extension.awaitMessage("from-page-action-popup-shown");
extension.sendMessage("page-action-close-popup");
- yield extension.awaitMessage("from-page-action-popup-closed");
+
+ let url = yield tabClosedPromise;
+ ok(url.indexOf("popup.html") > -1, "The tab for the popup should be closed");
yield extension.unload();
ok(!isPageActionShown(extension.id), "The PageAction should be removed after unload");
});
</script>
</body>
</html>