forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
const CPS = Cc["@mozilla.org/network/captive-portal-service;1"].getService(
 | 
						|
  Ci.nsICaptivePortalService
 | 
						|
);
 | 
						|
 | 
						|
async function checkCaptivePortalTabReference(evt, currState) {
 | 
						|
  await portalDetected();
 | 
						|
  let errorTab = await openCaptivePortalErrorTab();
 | 
						|
  let portalTab = await openCaptivePortalLoginTab(errorTab);
 | 
						|
 | 
						|
  // Release the reference held to the portal tab by sending success/abort events.
 | 
						|
  Services.obs.notifyObservers(null, evt);
 | 
						|
  await TestUtils.waitForCondition(
 | 
						|
    () => CPS.state == currState,
 | 
						|
    "Captive portal has been released"
 | 
						|
  );
 | 
						|
  gBrowser.removeTab(errorTab);
 | 
						|
 | 
						|
  await portalDetected();
 | 
						|
  ok(CPS.state == CPS.LOCKED_PORTAL, "Captive portal is locked again");
 | 
						|
  errorTab = await openCaptivePortalErrorTab();
 | 
						|
  let portalTab2 = await openCaptivePortalLoginTab(errorTab);
 | 
						|
  ok(
 | 
						|
    portalTab != portalTab2,
 | 
						|
    "waitForNewTab in openCaptivePortalLoginTab should not have completed at this point if references were held to the old captive portal tab after login/abort."
 | 
						|
  );
 | 
						|
  gBrowser.removeTab(portalTab);
 | 
						|
  gBrowser.removeTab(portalTab2);
 | 
						|
 | 
						|
  let errorTabReloaded = BrowserTestUtils.waitForErrorPage(
 | 
						|
    errorTab.linkedBrowser
 | 
						|
  );
 | 
						|
  Services.obs.notifyObservers(null, "captive-portal-login-success");
 | 
						|
  await errorTabReloaded;
 | 
						|
 | 
						|
  gBrowser.removeTab(errorTab);
 | 
						|
}
 | 
						|
 | 
						|
add_setup(async function () {
 | 
						|
  await SpecialPowers.pushPrefEnv({
 | 
						|
    set: [
 | 
						|
      ["captivedetect.canonicalURL", CANONICAL_URL],
 | 
						|
      ["captivedetect.canonicalContent", CANONICAL_CONTENT],
 | 
						|
    ],
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
let capPortalStates = [
 | 
						|
  {
 | 
						|
    evt: "captive-portal-login-success",
 | 
						|
    state: CPS.UNLOCKED_PORTAL,
 | 
						|
  },
 | 
						|
  {
 | 
						|
    evt: "captive-portal-login-abort",
 | 
						|
    state: CPS.UNKNOWN,
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
for (let elem of capPortalStates) {
 | 
						|
  add_task(checkCaptivePortalTabReference.bind(null, elem.evt, elem.state));
 | 
						|
}
 |