forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const PERMISSIONS_URL =
 | |
|   "chrome://browser/content/preferences/dialogs/permissions.xhtml";
 | |
| 
 | |
| const TRACKING_URL = "https://example.com";
 | |
| 
 | |
| async function openETPExceptionsDialog(doc) {
 | |
|   let exceptionsButton = doc.getElementById("trackingProtectionExceptions");
 | |
|   ok(exceptionsButton, "trackingProtectionExceptions button found");
 | |
|   let dialogPromise = promiseLoadSubDialog(PERMISSIONS_URL);
 | |
|   exceptionsButton.click();
 | |
|   let dialog = await dialogPromise;
 | |
|   return dialog;
 | |
| }
 | |
| 
 | |
| async function addETPPermission(doc) {
 | |
|   let dialog = await openETPExceptionsDialog(doc);
 | |
|   let url = dialog.document.getElementById("url");
 | |
|   let buttonDisableETP = dialog.document.getElementById("btnDisableETP");
 | |
|   let permissionsBox = dialog.document.getElementById("permissionsBox");
 | |
|   let currentPermissions = permissionsBox.itemCount;
 | |
| 
 | |
|   url.value = TRACKING_URL;
 | |
|   url.dispatchEvent(new Event("input", { bubbles: true }));
 | |
|   is(
 | |
|     buttonDisableETP.hasAttribute("disabled"),
 | |
|     false,
 | |
|     "Disable ETP button is selectable after url is entered"
 | |
|   );
 | |
|   buttonDisableETP.click();
 | |
| 
 | |
|   // Website is listed
 | |
|   is(
 | |
|     permissionsBox.itemCount,
 | |
|     currentPermissions + 1,
 | |
|     "Website added in url should be in the list"
 | |
|   );
 | |
|   let saveButton = dialog.document.querySelector("dialog").getButton("accept");
 | |
|   saveButton.click();
 | |
|   BrowserTestUtils.waitForEvent(dialog, "unload");
 | |
| }
 | |
| 
 | |
| async function removeETPPermission(doc) {
 | |
|   let dialog = await openETPExceptionsDialog(doc);
 | |
|   let permissionsBox = dialog.document.getElementById("permissionsBox");
 | |
|   let elements = permissionsBox.getElementsByAttribute("origin", TRACKING_URL);
 | |
|   // Website is listed
 | |
|   ok(permissionsBox.itemCount, "List is not empty");
 | |
|   permissionsBox.selectItem(elements[0]);
 | |
|   let removePermissionButton =
 | |
|     dialog.document.getElementById("removePermission");
 | |
|   is(
 | |
|     removePermissionButton.hasAttribute("disabled"),
 | |
|     false,
 | |
|     "The button should be clickable to remove selected item"
 | |
|   );
 | |
|   removePermissionButton.click();
 | |
| 
 | |
|   let saveButton = dialog.document.querySelector("dialog").getButton("accept");
 | |
|   saveButton.click();
 | |
|   BrowserTestUtils.waitForEvent(dialog, "unload");
 | |
| }
 | |
| 
 | |
| async function checkShieldIcon(shieldIcon) {
 | |
|   // Open the website and check that the tracking protection icon is enabled/disabled
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TRACKING_URL);
 | |
|   let icon = document.getElementById("tracking-protection-icon");
 | |
|   is(
 | |
|     gBrowser.ownerGlobal
 | |
|       .getComputedStyle(icon)
 | |
|       .getPropertyValue("list-style-image"),
 | |
|     shieldIcon,
 | |
|     `The tracking protection icon shows the icon ${shieldIcon}`
 | |
|   );
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
| }
 | |
| 
 | |
| // test adds and removes an ETP permission via the about:preferences#privacy and checks if the ProtectionsUI shield icon resembles the state
 | |
| add_task(async function ETPPermissionSyncedFromPrivacyPane() {
 | |
|   await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
 | |
|     leaveOpen: true,
 | |
|   });
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = win.document;
 | |
|   await addETPPermission(doc);
 | |
|   await checkShieldIcon(
 | |
|     `url("chrome://browser/skin/tracking-protection-disabled.svg")`
 | |
|   );
 | |
|   await removeETPPermission(doc);
 | |
|   await checkShieldIcon(`url("chrome://browser/skin/tracking-protection.svg")`);
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | 
