forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			226 lines
		
	
	
	
		
			8.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
	
		
			8.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* eslint-disable mozilla/no-arbitrary-setTimeout */
 | |
| /*
 | |
|  * Test that the Content Blocking icon state is properly updated in the identity
 | |
|  * block when loading tabs and switching between tabs.
 | |
|  * See also Bug 1175858.
 | |
|  */
 | |
| 
 | |
| const TP_PREF = "privacy.trackingprotection.enabled";
 | |
| const TP_PB_PREF = "privacy.trackingprotection.pbmode.enabled";
 | |
| const APS_PREF =
 | |
|   "privacy.partition.always_partition_third_party_non_cookie_storage";
 | |
| const NCB_PREF = "network.cookie.cookieBehavior";
 | |
| const BENIGN_PAGE =
 | |
|   // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | |
|   "http://tracking.example.org/browser/browser/base/content/test/protectionsUI/benignPage.html";
 | |
| const TRACKING_PAGE =
 | |
|   // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | |
|   "http://tracking.example.org/browser/browser/base/content/test/protectionsUI/trackingPage.html";
 | |
| const COOKIE_PAGE =
 | |
|   // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | |
|   "http://tracking.example.org/browser/browser/base/content/test/protectionsUI/cookiePage.html";
 | |
| const DTSCBN_PREF = "dom.testing.sync-content-blocking-notifications";
 | |
| 
 | |
| registerCleanupFunction(function() {
 | |
|   UrlClassifierTestUtils.cleanupTestTrackers();
 | |
|   Services.prefs.clearUserPref(TP_PREF);
 | |
|   Services.prefs.clearUserPref(TP_PB_PREF);
 | |
|   Services.prefs.clearUserPref(NCB_PREF);
 | |
|   Services.prefs.clearUserPref(DTSCBN_PREF);
 | |
| });
 | |
| 
 | |
| async function testTrackingProtectionIconState(tabbrowser) {
 | |
|   Services.prefs.setBoolPref(DTSCBN_PREF, true);
 | |
| 
 | |
|   info("Load a test page not containing tracking elements");
 | |
|   let benignTab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     tabbrowser,
 | |
|     BENIGN_PAGE
 | |
|   );
 | |
|   let gProtectionsHandler = tabbrowser.ownerGlobal.gProtectionsHandler;
 | |
| 
 | |
|   ok(!gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox not active");
 | |
| 
 | |
|   info("Load a test page containing tracking elements");
 | |
|   let trackingTab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     tabbrowser,
 | |
|     TRACKING_PAGE
 | |
|   );
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Load a test page containing tracking cookies");
 | |
|   let trackingCookiesTab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     tabbrowser,
 | |
|     COOKIE_PAGE
 | |
|   );
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Switch from tracking cookie -> benign tab");
 | |
|   let securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   tabbrowser.selectedTab = benignTab;
 | |
|   await securityChanged;
 | |
| 
 | |
|   ok(!gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox not active");
 | |
| 
 | |
|   info("Switch from benign -> tracking tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   tabbrowser.selectedTab = trackingTab;
 | |
|   await securityChanged;
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Switch from tracking -> tracking cookies tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   tabbrowser.selectedTab = trackingCookiesTab;
 | |
|   await securityChanged;
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Reload tracking cookies tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   let contentBlockingEvent = waitForContentBlockingEvent(
 | |
|     2,
 | |
|     tabbrowser.ownerGlobal
 | |
|   );
 | |
|   tabbrowser.reload();
 | |
|   await Promise.all([securityChanged, contentBlockingEvent]);
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Reload tracking tab");
 | |
|   securityChanged = waitForSecurityChange(2, tabbrowser.ownerGlobal);
 | |
|   contentBlockingEvent = waitForContentBlockingEvent(3, tabbrowser.ownerGlobal);
 | |
|   tabbrowser.selectedTab = trackingTab;
 | |
|   tabbrowser.reload();
 | |
|   await Promise.all([securityChanged, contentBlockingEvent]);
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Inject tracking cookie inside tracking tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   let timeoutPromise = new Promise(resolve => setTimeout(resolve, 500));
 | |
|   await SpecialPowers.spawn(tabbrowser.selectedBrowser, [], function() {
 | |
|     content.postMessage("cookie", "*");
 | |
|   });
 | |
|   let result = await Promise.race([securityChanged, timeoutPromise]);
 | |
|   is(result, undefined, "No securityChange events should be received");
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Inject tracking element inside tracking tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   timeoutPromise = new Promise(resolve => setTimeout(resolve, 500));
 | |
|   await SpecialPowers.spawn(tabbrowser.selectedBrowser, [], function() {
 | |
|     content.postMessage("tracking", "*");
 | |
|   });
 | |
|   result = await Promise.race([securityChanged, timeoutPromise]);
 | |
|   is(result, undefined, "No securityChange events should be received");
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   tabbrowser.selectedTab = trackingCookiesTab;
 | |
| 
 | |
|   info("Inject tracking cookie inside tracking cookies tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   timeoutPromise = new Promise(resolve => setTimeout(resolve, 500));
 | |
|   await SpecialPowers.spawn(tabbrowser.selectedBrowser, [], function() {
 | |
|     content.postMessage("cookie", "*");
 | |
|   });
 | |
|   result = await Promise.race([securityChanged, timeoutPromise]);
 | |
|   is(result, undefined, "No securityChange events should be received");
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   info("Inject tracking element inside tracking cookies tab");
 | |
|   securityChanged = waitForSecurityChange(1, tabbrowser.ownerGlobal);
 | |
|   timeoutPromise = new Promise(resolve => setTimeout(resolve, 500));
 | |
|   await SpecialPowers.spawn(tabbrowser.selectedBrowser, [], function() {
 | |
|     content.postMessage("tracking", "*");
 | |
|   });
 | |
|   result = await Promise.race([securityChanged, timeoutPromise]);
 | |
|   is(result, undefined, "No securityChange events should be received");
 | |
| 
 | |
|   ok(gProtectionsHandler.iconBox.hasAttribute("active"), "iconBox active");
 | |
| 
 | |
|   while (tabbrowser.tabs.length > 1) {
 | |
|     tabbrowser.removeCurrentTab();
 | |
|   }
 | |
| }
 | |
| 
 | |
| add_task(async function testNormalBrowsing() {
 | |
|   await SpecialPowers.pushPrefEnv({ set: [[APS_PREF, false]] });
 | |
| 
 | |
|   await UrlClassifierTestUtils.addTestTrackers();
 | |
| 
 | |
|   let gProtectionsHandler = gBrowser.ownerGlobal.gProtectionsHandler;
 | |
|   ok(
 | |
|     gProtectionsHandler,
 | |
|     "gProtectionsHandler is attached to the browser window"
 | |
|   );
 | |
| 
 | |
|   let {
 | |
|     TrackingProtection,
 | |
|   } = gBrowser.ownerGlobal.gProtectionsHandler.blockers;
 | |
|   ok(TrackingProtection, "TP is attached to the browser window");
 | |
| 
 | |
|   let { ThirdPartyCookies } = gBrowser.ownerGlobal.gProtectionsHandler.blockers;
 | |
|   ok(ThirdPartyCookies, "TPC is attached to the browser window");
 | |
| 
 | |
|   Services.prefs.setBoolPref(TP_PREF, true);
 | |
|   ok(TrackingProtection.enabled, "TP is enabled after setting the pref");
 | |
|   Services.prefs.setIntPref(
 | |
|     NCB_PREF,
 | |
|     Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER
 | |
|   );
 | |
|   ok(
 | |
|     ThirdPartyCookies.enabled,
 | |
|     "ThirdPartyCookies is enabled after setting the pref"
 | |
|   );
 | |
| 
 | |
|   await testTrackingProtectionIconState(gBrowser);
 | |
| });
 | |
| 
 | |
| add_task(async function testPrivateBrowsing() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       [APS_PREF, false],
 | |
|       ["dom.security.https_first_pbm", false],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   let privateWin = await BrowserTestUtils.openNewBrowserWindow({
 | |
|     private: true,
 | |
|   });
 | |
|   let tabbrowser = privateWin.gBrowser;
 | |
| 
 | |
|   let gProtectionsHandler = tabbrowser.ownerGlobal.gProtectionsHandler;
 | |
|   ok(
 | |
|     gProtectionsHandler,
 | |
|     "gProtectionsHandler is attached to the private window"
 | |
|   );
 | |
|   let {
 | |
|     TrackingProtection,
 | |
|   } = tabbrowser.ownerGlobal.gProtectionsHandler.blockers;
 | |
|   ok(TrackingProtection, "TP is attached to the private window");
 | |
|   let {
 | |
|     ThirdPartyCookies,
 | |
|   } = tabbrowser.ownerGlobal.gProtectionsHandler.blockers;
 | |
|   ok(ThirdPartyCookies, "TPC is attached to the browser window");
 | |
| 
 | |
|   Services.prefs.setBoolPref(TP_PB_PREF, true);
 | |
|   ok(TrackingProtection.enabled, "TP is enabled after setting the pref");
 | |
|   Services.prefs.setIntPref(
 | |
|     NCB_PREF,
 | |
|     Ci.nsICookieService.BEHAVIOR_REJECT_TRACKER
 | |
|   );
 | |
|   ok(
 | |
|     ThirdPartyCookies.enabled,
 | |
|     "ThirdPartyCookies is enabled after setting the pref"
 | |
|   );
 | |
| 
 | |
|   await testTrackingProtectionIconState(tabbrowser);
 | |
| 
 | |
|   privateWin.close();
 | |
| });
 | 
