forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D5665 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint-disable mozilla/no-arbitrary-setTimeout */
 | 
						|
"use strict";
 | 
						|
 | 
						|
// Bug 1318389 - This test does a lot of window and tab manipulation,
 | 
						|
//               causing it to take a long time on debug.
 | 
						|
requestLongerTimeout(2);
 | 
						|
 | 
						|
add_task(setupPrefsAndRecentWindowBehavior);
 | 
						|
 | 
						|
// Each of the test cases below is run twice: once for login-success and once
 | 
						|
// for login-abort (aSuccess set to true and false respectively).
 | 
						|
let testCasesForBothSuccessAndAbort = [
 | 
						|
  /**
 | 
						|
   * A portal is detected when there's no browser window, then a browser
 | 
						|
   * window is opened, then the portal is freed.
 | 
						|
   * The portal tab should be added and focused when the window is
 | 
						|
   * opened, and closed automatically when the success event is fired.
 | 
						|
   * The captive portal notification should be shown when the window is
 | 
						|
   * opened, and closed automatically when the success event is fired.
 | 
						|
   */
 | 
						|
  async function test_detectedWithNoBrowserWindow_Open(aSuccess) {
 | 
						|
    await portalDetected();
 | 
						|
    let win = await focusWindowAndWaitForPortalUI();
 | 
						|
    await freePortal(aSuccess);
 | 
						|
    ensureNoPortalTab(win);
 | 
						|
    ensureNoPortalNotification(win);
 | 
						|
    await closeWindowAndWaitForWindowActivate(win);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * A portal is detected when multiple browser windows are open but none
 | 
						|
   * have focus. A browser window is focused, then the portal is freed.
 | 
						|
   * The portal tab should be added and focused when the window is
 | 
						|
   * focused, and closed automatically when the success event is fired.
 | 
						|
   * The captive portal notification should be shown in all windows upon
 | 
						|
   * detection, and closed automatically when the success event is fired.
 | 
						|
   */
 | 
						|
  async function test_detectedWithNoBrowserWindow_Focused(aSuccess) {
 | 
						|
    let win1 = await openWindowAndWaitForFocus();
 | 
						|
    let win2 = await openWindowAndWaitForFocus();
 | 
						|
    // Defocus both windows.
 | 
						|
    await SimpleTest.promiseFocus(window);
 | 
						|
 | 
						|
    await portalDetected();
 | 
						|
 | 
						|
    // Notification should be shown in both windows.
 | 
						|
    ensurePortalNotification(win1);
 | 
						|
    ensureNoPortalTab(win1);
 | 
						|
    ensurePortalNotification(win2);
 | 
						|
    ensureNoPortalTab(win2);
 | 
						|
 | 
						|
    await focusWindowAndWaitForPortalUI(false, win2);
 | 
						|
 | 
						|
    await freePortal(aSuccess);
 | 
						|
 | 
						|
    ensureNoPortalNotification(win1);
 | 
						|
    ensureNoPortalTab(win2);
 | 
						|
    ensureNoPortalNotification(win2);
 | 
						|
 | 
						|
    await closeWindowAndWaitForWindowActivate(win2);
 | 
						|
    // No need to wait for xul-window-visible: after win2 is closed, focus
 | 
						|
    // is restored to the default window and win1 remains in the background.
 | 
						|
    await BrowserTestUtils.closeWindow(win1);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * A portal is detected when there's no browser window, then a browser
 | 
						|
   * window is opened, then the portal is freed.
 | 
						|
   * The recheck triggered when the browser window is opened takes a
 | 
						|
   * long time. No portal tab should be added.
 | 
						|
   * The captive portal notification should be shown when the window is
 | 
						|
   * opened, and closed automatically when the success event is fired.
 | 
						|
   */
 | 
						|
  async function test_detectedWithNoBrowserWindow_LongRecheck(aSuccess) {
 | 
						|
    await portalDetected();
 | 
						|
    let win = await focusWindowAndWaitForPortalUI(true);
 | 
						|
    await freePortal(aSuccess);
 | 
						|
    ensureNoPortalTab(win);
 | 
						|
    ensureNoPortalNotification(win);
 | 
						|
    await closeWindowAndWaitForWindowActivate(win);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * A portal is detected when there's no browser window, and the
 | 
						|
   * portal is freed before a browser window is opened. No portal
 | 
						|
   * UI should be shown when a browser window is opened.
 | 
						|
   */
 | 
						|
  async function test_detectedWithNoBrowserWindow_GoneBeforeOpen(aSuccess) {
 | 
						|
    await portalDetected();
 | 
						|
    await freePortal(aSuccess);
 | 
						|
    let win = await openWindowAndWaitForFocus();
 | 
						|
    // Wait for a while to make sure no UI is shown.
 | 
						|
    await new Promise(resolve => {
 | 
						|
      setTimeout(resolve, 1000);
 | 
						|
    });
 | 
						|
    ensureNoPortalTab(win);
 | 
						|
    ensureNoPortalNotification(win);
 | 
						|
    await closeWindowAndWaitForWindowActivate(win);
 | 
						|
  },
 | 
						|
 | 
						|
  /**
 | 
						|
   * A portal is detected when a browser window has focus. No portal tab should
 | 
						|
   * be opened. A notification bar should be displayed in all browser windows.
 | 
						|
   */
 | 
						|
  async function test_detectedWithFocus(aSuccess) {
 | 
						|
    let win1 = await openWindowAndWaitForFocus();
 | 
						|
    let win2 = await openWindowAndWaitForFocus();
 | 
						|
    await portalDetected();
 | 
						|
    ensureNoPortalTab(win1);
 | 
						|
    ensureNoPortalTab(win2);
 | 
						|
    ensurePortalNotification(win1);
 | 
						|
    ensurePortalNotification(win2);
 | 
						|
    await freePortal(aSuccess);
 | 
						|
    ensureNoPortalNotification(win1);
 | 
						|
    ensureNoPortalNotification(win2);
 | 
						|
    await BrowserTestUtils.closeWindow(win2);
 | 
						|
    await BrowserTestUtils.closeWindow(win1);
 | 
						|
    await waitForBrowserWindowActive(window);
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
for (let testcase of testCasesForBothSuccessAndAbort) {
 | 
						|
  add_task(testcase.bind(null, true));
 | 
						|
  add_task(testcase.bind(null, false));
 | 
						|
}
 |