Bug 1373109 - Add a mochitest for the auto-closing behavior. r=mconley draft
authorBlake Kaplan <mrbkap@gmail.com>
Wed, 21 Jun 2017 17:33:40 -0700
changeset 599232 4f1465449c8354ff498181cb06c8eeae06f141dc
parent 599231 6e26ca7f000e7cd834e02ddb0146f17a5d7567d9
child 634710 512459bee4f410640d457ae1dc11dd288003faca
push id65454
push userbmo:mrbkap@mozilla.com
push dateThu, 22 Jun 2017 21:15:34 +0000
reviewersmconley
bugs1373109
milestone56.0a1
Bug 1373109 - Add a mochitest for the auto-closing behavior. r=mconley MozReview-Commit-ID: 7OBAdvMu6AX
uriloader/exthandler/tests/mochitest/browser_auto_close_window.js
uriloader/exthandler/tests/mochitest/download_page.html
--- a/uriloader/exthandler/tests/mochitest/browser_auto_close_window.js
+++ b/uriloader/exthandler/tests/mochitest/browser_auto_close_window.js
@@ -52,33 +52,41 @@ add_task(async function simple_navigatio
     await BrowserTestUtils.synthesizeMouseAtCenter("#regular_load", {}, browser);
     let windowContext = await dialogAppeared;
 
     is(windowContext.gBrowser.selectedBrowser.currentURI.spec, URL,
        "got the right windowContext");
   });
 });
 
+// Given a browser pointing to download_page.html, clicks on the link that
+// opens with target="_blank" (i.e. a new tab) and ensures that we
+// automatically open and close that tab.
+async function testNewTab(browser) {
+  let targetURL = browser.currentURI.spec;
+  let dialogAppeared = promiseHelperAppDialog();
+  let tabOpened = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen").then((event) => {
+    return [ event.target, BrowserTestUtils.tabRemoved(event.target) ];
+  });
+
+  await BrowserTestUtils.synthesizeMouseAtCenter("#target_blank", {}, browser);
+
+  let windowContext = await dialogAppeared;
+  is(windowContext.gBrowser.selectedBrowser.currentURI.spec, targetURL,
+     "got the right windowContext");
+  let [ tab, closed ] = await tabOpened;
+  await closed;
+  is(tab.linkedBrowser, null, "tab was opened and closed");
+}
+
 add_task(async function target_blank() {
   // Tests that a link with target=_blank opens a new tab and closes it,
   // returning the window that we're using for navigation.
   await BrowserTestUtils.withNewTab({ gBrowser, url: URL }, async function(browser) {
-    let dialogAppeared = promiseHelperAppDialog();
-    let tabOpened = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen").then((event) => {
-      return [ event.target, BrowserTestUtils.tabRemoved(event.target) ];
-    });
-
-    await BrowserTestUtils.synthesizeMouseAtCenter("#target_blank", {}, browser);
-
-    let windowContext = await dialogAppeared;
-    is(windowContext.gBrowser.selectedBrowser.currentURI.spec, URL,
-       "got the right windowContext");
-    let [ tab, closed ] = await tabOpened;
-    await closed;
-    is(tab.linkedBrowser, null, "tab was opened and closed");
+    await testNewTab(browser);
   });
 });
 
 add_task(async function new_window() {
   // Tests that a link that forces us to open a new window (by specifying a
   // width and a height in window.open) opens a new window for the load,
   // realizes that we need to close that window and returns the *original*
   // window as the window context.
@@ -94,14 +102,33 @@ add_task(async function new_window() {
     let win = await windowOpened;
 
     // The window should close on its own. If not, this test will time out.
     await BrowserTestUtils.domWindowClosed(win);
     ok(win.closed, "window was opened and closed");
   });
 });
 
+add_task(async function nested_window_opens() {
+  // Tests that the window auto-closing feature works if the download is
+  // initiated by a window that, itself, has an opener (see bug 1373109).
+  await BrowserTestUtils.withNewTab({ gBrowser, url: URL }, async function(outerBrowser) {
+    BrowserTestUtils.synthesizeMouseAtCenter("#open_in_new_tab", {}, outerBrowser);
+    let secondTab = await BrowserTestUtils.waitForNewTab(gBrowser, null, true);
+    let nestedBrowser = secondTab.linkedBrowser;
+
+    await ContentTask.spawn(nestedBrowser, null, function() {
+      ok(content.opener, "this window has an opener");
+    });
+
+    await testNewTab(nestedBrowser);
+
+    isnot(secondTab.linkedBrowser, null, "the page that triggered the download is still open");
+    await BrowserTestUtils.removeTab(secondTab);
+  });
+});
+
 add_task(async function cleanup() {
   // Unregister our factory from XPCOM and restore the original CID.
   registrar.unregisterFactory(MOCK_HELPERAPP_DIALOG_CID, mockHelperAppService);
   registrar.registerFactory(HELPERAPP_DIALOG_CID, "",
                             HELPERAPP_DIALOG_CONTRACT_ID, null);
 });
--- a/uriloader/exthandler/tests/mochitest/download_page.html
+++ b/uriloader/exthandler/tests/mochitest/download_page.html
@@ -10,9 +10,10 @@
       window.open("download.bin", "_blank", "height=100,width=100");
     }
   </script>
 </head>
 <body>
   <a href="download.bin" id="regular_load">regular load</a>
   <a href="download.bin" id="target_blank" target="_blank">target blank</a>
   <a href="#" onclick="launch_download(); return false" id="new_window">new window</a>
+  <a href="#" onclick="window.open('download_page.html?newwin'); return false" id="open_in_new_tab">click to reopen</a>
 </body>