Bug 1373109 - Add a mochitest for the auto-closing behavior. r=mconley
MozReview-Commit-ID: 7OBAdvMu6AX
--- 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>