forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			185 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| "use strict";
 | |
| 
 | |
| // Stolen from https://searchfox.org/mozilla-central/source/browser/base/content/test/popups/browser_popup_close_main_window.js
 | |
| // When calling this function, the main window where the test runs will be
 | |
| // hidden from various APIs, so that they won't be able to find it. This makes
 | |
| // it possible to test some behaviors when only private windows are present.
 | |
| function concealMainWindow() {
 | |
|   info("Concealing main window.");
 | |
|   let oldWinType = document.documentElement.getAttribute("windowtype");
 | |
|   // Check if we've already done this to allow calling multiple times:
 | |
|   if (oldWinType != "navigator:testrunner") {
 | |
|     // Make the main test window not count as a browser window any longer
 | |
|     document.documentElement.setAttribute("windowtype", "navigator:testrunner");
 | |
|     BrowserWindowTracker.untrackForTestsOnly(window);
 | |
| 
 | |
|     registerCleanupFunction(() => {
 | |
|       info("Unconcealing the main window in the cleanup phase.");
 | |
|       BrowserWindowTracker.track(window);
 | |
|       document.documentElement.setAttribute("windowtype", oldWinType);
 | |
|     });
 | |
|   }
 | |
| }
 | |
| 
 | |
| const EXAMPLE_URL = "https://example.org/";
 | |
| add_task(async function test_open_tab() {
 | |
|   const waitForTabPromise = BrowserTestUtils.waitForNewTab(
 | |
|     gBrowser,
 | |
|     EXAMPLE_URL
 | |
|   );
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     openWebLinkIn(EXAMPLE_URL, "tab", {
 | |
|       resolveOnContentBrowserCreated,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const tab = await waitForTabPromise;
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     tab.linkedBrowser,
 | |
|     "We get a content browser that is the tab's linked browser as the result of opening a tab"
 | |
|   );
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
| });
 | |
| 
 | |
| add_task(async function test_open_window() {
 | |
|   const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     openWebLinkIn(EXAMPLE_URL, "window", {
 | |
|       resolveOnContentBrowserCreated,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const win = await waitForWindowPromise;
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     win.gBrowser.selectedBrowser,
 | |
|     "We get the content browser for the newly opened window as a result of opening a window"
 | |
|   );
 | |
| 
 | |
|   await BrowserTestUtils.closeWindow(win);
 | |
| });
 | |
| 
 | |
| add_task(async function test_open_private_window() {
 | |
|   const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     openWebLinkIn(EXAMPLE_URL, "window", {
 | |
|       resolveOnContentBrowserCreated,
 | |
|       private: true,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const win = await waitForWindowPromise;
 | |
|   ok(
 | |
|     PrivateBrowsingUtils.isBrowserPrivate(win),
 | |
|     "The new window is a private window."
 | |
|   );
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     win.gBrowser.selectedBrowser,
 | |
|     "We get the content browser for the newly opened window as a result of opening a private window"
 | |
|   );
 | |
| 
 | |
|   await BrowserTestUtils.closeWindow(win);
 | |
| });
 | |
| 
 | |
| add_task(async function test_open_private_tab_from_private_window() {
 | |
|   const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
 | |
|     private: true,
 | |
|   });
 | |
|   const waitForTabPromise = BrowserTestUtils.waitForNewTab(
 | |
|     privateWindow.gBrowser,
 | |
|     EXAMPLE_URL
 | |
|   );
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
 | |
|       resolveOnContentBrowserCreated,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const tab = await waitForTabPromise;
 | |
|   ok(
 | |
|     PrivateBrowsingUtils.isBrowserPrivate(tab),
 | |
|     "The new tab was opened in a private browser."
 | |
|   );
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     tab.linkedBrowser,
 | |
|     "We get a content browser that is the tab's linked browser as the result of opening a private tab in a private window"
 | |
|   );
 | |
| 
 | |
|   await BrowserTestUtils.closeWindow(privateWindow);
 | |
| });
 | |
| 
 | |
| add_task(async function test_open_non_private_tab_from_private_window() {
 | |
|   const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
 | |
|     private: true,
 | |
|   });
 | |
| 
 | |
|   // Opening this tab from the private window should open it in the non-private window.
 | |
|   const waitForTabPromise = BrowserTestUtils.waitForNewTab(
 | |
|     gBrowser,
 | |
|     EXAMPLE_URL
 | |
|   );
 | |
| 
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
 | |
|       forceNonPrivate: true,
 | |
|       resolveOnContentBrowserCreated,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const nonPrivateTab = await waitForTabPromise;
 | |
|   ok(
 | |
|     !PrivateBrowsingUtils.isBrowserPrivate(nonPrivateTab),
 | |
|     "The new window isn't a private window."
 | |
|   );
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     nonPrivateTab.linkedBrowser,
 | |
|     "We get a content browser that is the non private tab's linked browser as the result of opening a non private tab from a private window"
 | |
|   );
 | |
| 
 | |
|   BrowserTestUtils.removeTab(nonPrivateTab);
 | |
|   await BrowserTestUtils.closeWindow(privateWindow);
 | |
| });
 | |
| 
 | |
| add_task(async function test_open_non_private_tab_from_only_private_window() {
 | |
|   const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
 | |
|     private: true,
 | |
|   });
 | |
| 
 | |
|   // In this test we'll hide the existing window from window trackers, because
 | |
|   // we want to test that we open a new window when there's only a private
 | |
|   // window.
 | |
|   concealMainWindow();
 | |
| 
 | |
|   // Opening this tab from the private window should open it in a new non-private window.
 | |
|   const waitForWindowPromise = BrowserTestUtils.waitForNewWindow({
 | |
|     url: EXAMPLE_URL,
 | |
|   });
 | |
|   const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
 | |
|     privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
 | |
|       forceNonPrivate: true,
 | |
|       resolveOnContentBrowserCreated,
 | |
|     })
 | |
|   );
 | |
| 
 | |
|   const nonPrivateWindow = await waitForWindowPromise;
 | |
|   ok(
 | |
|     !PrivateBrowsingUtils.isBrowserPrivate(nonPrivateWindow),
 | |
|     "The new window isn't a private window."
 | |
|   );
 | |
|   is(
 | |
|     contentBrowser,
 | |
|     nonPrivateWindow.gBrowser.selectedBrowser,
 | |
|     "We get the content browser for the newly opened non private window from a private window, as a result of opening a non private tab."
 | |
|   );
 | |
| 
 | |
|   await BrowserTestUtils.closeWindow(nonPrivateWindow);
 | |
|   await BrowserTestUtils.closeWindow(privateWindow);
 | |
| });
 | 
