Implement default_popup for chrome.pageAction on Android r?kmag draft
authorMatthew Wein <mwein@mozilla.com>
Wed, 25 May 2016 19:44:54 -0700
changeset 371160 a1099fc65e36cd53cc667f0fff861e4d9e06ad4c
parent 371159 685152095048a3068ce708d7f7f0f05237b45f89
child 521931 c70c400d37724f00f531eaa9f816b8df3ecbef6e
push id19259
push usermwein@mozilla.com
push dateThu, 26 May 2016 02:45:15 +0000
reviewerskmag
milestone49.0a1
Implement default_popup for chrome.pageAction on Android r?kmag MozReview-Commit-ID: 5yP8FAZ4Xy9
mobile/android/components/extensions/test/mochitest/test_ext_pageAction_defaultPopup.html
--- 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>