mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 10:18:41 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			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);
 | 
						|
});
 |