Bug 1373170 - Fix and re-enable android pageAction getPopup/setPopup tests.
MozReview-Commit-ID: 3CKvvtI7OEN
--- a/mobile/android/components/extensions/test/mochitest/chrome.ini
+++ b/mobile/android/components/extensions/test/mochitest/chrome.ini
@@ -10,10 +10,9 @@ tags = webextensions
[test_ext_browserAction_onClicked.html]
[test_ext_browsingData_cookies_cache.html]
[test_ext_browsingData_downloads.html]
[test_ext_browsingData_formdata.html]
[test_ext_browsingData_settings.html]
[test_ext_options_ui.html]
[test_ext_pageAction_show_hide.html]
[test_ext_pageAction_getPopup_setPopup.html]
-skip-if = os == 'android' # bug 1373170
[test_ext_popup_behavior.html]
--- a/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_getPopup_setPopup.html
+++ b/mobile/android/components/extensions/test/mochitest/test_ext_pageAction_getPopup_setPopup.html
@@ -26,19 +26,19 @@ add_task(async function test_setPopup_an
browser.tabs.onCreated.removeListener(onTabCreated);
resolve();
};
browser.tabs.onCreated.addListener(onTabCreated);
});
async function createAndTestNewTab(expectedPopup, url) {
// Create a tab.
- let [tab] = await Promise.all([
+ let [, tab] = await Promise.all([
+ tabCreatedPromise,
browser.tabs.create({url}),
- tabCreatedPromise,
]);
// Test that the default popup is returned before the popup is set for the tab.
let defaultPopup = await browser.pageAction.getPopup({tabId: tab.id});
browser.test.assertTrue(defaultPopup.includes("default.html"), "Expected the default popup to be returned");
// Set the title for the new tab and test that getTitle returns the correct title.
await browser.pageAction.setPopup({tabId: tab.id, popup: expectedPopup});
@@ -53,68 +53,81 @@ add_task(async function test_setPopup_an
let tab2 = await createAndTestNewTab("b.html", "about:blank");
// Check all of the created tabs now.
let popup = await browser.pageAction.getPopup({tabId: tab1.id});
browser.test.assertTrue(popup.includes("a.html"), "Expected the first tab popup");
popup = await browser.pageAction.getPopup({tabId: tab2.id});
browser.test.assertTrue(popup.includes("b.html"), "Expected the second tab popup");
- // Unset the title for the first tab and confirm that it is unset.
+ // Unset the popup for the first tab and confirm that it is unset.
browser.pageAction.setPopup({tabId: tab1.id, popup: ""});
popup = await browser.pageAction.getPopup({tabId: tab1.id});
browser.test.assertTrue(popup.includes("default.html"), "Expected the default popup to be returned");
- // Reset the title for the first tab.
+ // Set the popup for the first tab.
browser.pageAction.setPopup({tabId: tab1.id, popup: "a.html"});
popup = await browser.pageAction.getPopup({tabId: tab1.id});
browser.test.assertTrue(popup.includes("a.html"), "Expected the first tab popup");
// Keeps track of the tabs for which onClicked should fire when the page action is clicked on.
let expectingOnClicked = {};
browser.pageAction.onClicked.addListener(tab => {
browser.test.assertTrue(expectingOnClicked[tab.id], "The onClicked listener should only fire when we expect it to.");
browser.test.sendMessage("page-action-onClicked-fired");
});
browser.test.onMessage.addListener(async (msg, data) => {
if (msg === "select-tab") {
+ // Check if the requested tabId is already selected.
+ const [activeTab] = await browser.tabs.query({active: true});
+ if (activeTab.id === data.tabId) {
+ browser.test.sendMessage("tab-selected");
+ return;
+ }
+
+ // Select the requested tabId and wait the tab to be activated.
+ const onActivatedListener = ({tabId}) => {
+ if (tabId === data.tabId) {
+ browser.tabs.onActivated.removeListener(onActivatedListener);
+ browser.test.sendMessage("tab-selected");
+ }
+ };
+ browser.tabs.onActivated.addListener(onActivatedListener);
+
await browser.tabs.update(data.tabId, {active: true});
- browser.test.sendMessage("tab-selected");
} else if (msg === "page-action-show") {
- browser.pageAction.show(data.tabId).then(() => {
- browser.test.sendMessage("page-action-shown");
- });
+ await browser.pageAction.show(data.tabId);
+ browser.test.sendMessage("page-action-shown");
} else if (msg == "page-action-set-popup") {
if (data.popup == "") {
expectingOnClicked[data.tabId] = true;
} else {
delete expectingOnClicked[tabId];
}
- browser.pageAction.setPopup({tabId: data.tabId, popup: data.popup}).then(() => {
- browser.test.sendMessage("page-action-popup-set");
- });
+ await browser.pageAction.setPopup({tabId: data.tabId, popup: data.popup});
+ browser.test.sendMessage("page-action-popup-set");
} else if (msg == "page-action-get-popup") {
- browser.pageAction.getPopup({tabId: data.tabId}).then(url => {
- browser.test.sendMessage("page-action-got-popup", url);
- });
+ const url = await browser.pageAction.getPopup({tabId: data.tabId});
+ browser.test.sendMessage("page-action-got-popup", url);
} else if (msg === "finish") {
await browser.tabs.remove([tab1.id, tab2.id]);
browser.test.notifyPass("page-action-popup");
}
});
browser.test.sendMessage("tabs", {tab1, tab2});
}
function popupScript() {
window.onload = () => {
browser.test.sendMessage("page-action-from-popup", location.href);
};
+
browser.test.onMessage.addListener((msg, details) => {
if (msg == "page-action-close-popup") {
if (details.location == location.href) {
window.close();
}
}
});
}
@@ -163,23 +176,27 @@ add_task(async function test_setPopup_an
extension.sendMessage("select-tab", {tabId});
await extension.awaitMessage("tab-selected");
extension.sendMessage("page-action-show", {tabId});
await extension.awaitMessage("page-action-shown");
ok(PageActions.isShown(uuid), "page action is shown");
+
+ info(`Click on the pageAction on tab ${tabId} and wait the popup to be loaded`);
PageActions.synthesizeClick(uuid);
let location = await extension.awaitMessage("page-action-from-popup");
+
ok(location.includes(expectedPopup), "The popup with the correct URL should be shown.");
+ const onceTabClosed = tabClosedPromise();
extension.sendMessage("page-action-close-popup", {location});
- location = await tabClosedPromise();
- ok(location.includes(expectedPopup), "The popup with the correct URL should be closed.");
+ location = await onceTabClosed;
+ ok(location.includes(expectedPopup), "The popup with the correct URL should be closed");
}
await extension.startup();
let {tab1, tab2} = await extension.awaitMessage("tabs");
const uuid = `{${extension.uuid}}`;
await testPopup(tab1.id, "a.html", uuid);