browser_protectionsUI_trackers_subview.js (5016B)
1 /* eslint-disable mozilla/no-arbitrary-setTimeout */ 2 /* Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ */ 4 5 "use strict"; 6 7 const { PermissionTestUtils } = ChromeUtils.importESModule( 8 "resource://testing-common/PermissionTestUtils.sys.mjs" 9 ); 10 11 const l10n = new Localization(["browser/siteProtections.ftl"]); 12 13 const TRACKING_PAGE = 14 // eslint-disable-next-line @microsoft/sdl/no-insecure-url 15 "http://tracking.example.org/browser/browser/base/content/test/protectionsUI/trackingPage.html"; 16 17 const TP_PREF = "privacy.trackingprotection.enabled"; 18 19 add_setup(async function () { 20 await UrlClassifierTestUtils.addTestTrackers(); 21 22 registerCleanupFunction(() => { 23 UrlClassifierTestUtils.cleanupTestTrackers(); 24 }); 25 }); 26 27 async function assertSitesListed(blocked) { 28 let promise = BrowserTestUtils.openNewForegroundTab({ 29 url: TRACKING_PAGE, 30 gBrowser, 31 }); 32 33 // Wait for 2 content blocking events - one for the load and one for the tracker. 34 let [tab] = await Promise.all([promise, waitForContentBlockingEvent(2)]); 35 36 await openProtectionsPanel(); 37 38 let categoryItem = document.getElementById( 39 "protections-popup-category-trackers" 40 ); 41 42 // Explicitly waiting for the category item becoming visible. 43 await TestUtils.waitForCondition(() => { 44 return BrowserTestUtils.isVisible(categoryItem); 45 }); 46 47 ok(BrowserTestUtils.isVisible(categoryItem), "TP category item is visible"); 48 let trackersView = document.getElementById("protections-popup-trackersView"); 49 let viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown"); 50 categoryItem.click(); 51 await viewShown; 52 53 ok(true, "Trackers view was shown"); 54 55 let trackersViewShimHint = document.getElementById( 56 "protections-popup-trackersView-shim-allow-hint" 57 ); 58 ok(trackersViewShimHint.hidden, "Shim hint is hidden"); 59 let listItems = trackersView.querySelectorAll(".protections-popup-list-item"); 60 is(listItems.length, 1, "We have 1 tracker in the list"); 61 62 let mainView = document.getElementById("protections-popup-mainView"); 63 viewShown = BrowserTestUtils.waitForEvent(mainView, "ViewShown"); 64 let backButton = trackersView.querySelector(".subviewbutton-back"); 65 backButton.click(); 66 await viewShown; 67 68 ok(true, "Main view was shown"); 69 70 let change = waitForSecurityChange(1); 71 let timeoutPromise = new Promise(resolve => setTimeout(resolve, 1000)); 72 73 await SpecialPowers.spawn(tab.linkedBrowser, [], function () { 74 content.postMessage("more-tracking", "*"); 75 }); 76 77 let result = await Promise.race([change, timeoutPromise]); 78 is(result, undefined, "No securityChange events should be received"); 79 80 viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown"); 81 categoryItem.click(); 82 await viewShown; 83 84 ok(true, "Trackers view was shown"); 85 86 const header = trackersView.querySelector(".panel-header > h1 > span"); 87 const headerL10nId = blocked 88 ? "protections-blocking-tracking-content" 89 : "protections-not-blocking-tracking-content"; 90 const [headerMsg] = await l10n.formatMessages([headerL10nId]); 91 const expHeader = headerMsg.attributes.find(a => a.name === "title").value; 92 is(header.textContent, expHeader, "Trackers view header is correct"); 93 94 listItems = Array.from( 95 trackersView.querySelectorAll(".protections-popup-list-item") 96 ); 97 is(listItems.length, 2, "We have 2 trackers in the list"); 98 99 let listItem = listItems.find( 100 // eslint-disable-next-line @microsoft/sdl/no-insecure-url 101 item => item.querySelector("label").value == "http://trackertest.org" 102 ); 103 ok(listItem, "Has an item for trackertest.org"); 104 ok(BrowserTestUtils.isVisible(listItem), "List item is visible"); 105 is( 106 listItem.classList.contains("allowed"), 107 !blocked, 108 "Indicates whether the tracker was blocked or allowed" 109 ); 110 111 listItem = listItems.find( 112 item => item.querySelector("label").value == "https://itisatracker.org" 113 ); 114 ok(listItem, "Has an item for itisatracker.org"); 115 ok(BrowserTestUtils.isVisible(listItem), "List item is visible"); 116 is( 117 listItem.classList.contains("allowed"), 118 !blocked, 119 "Indicates whether the tracker was blocked or allowed" 120 ); 121 BrowserTestUtils.removeTab(tab); 122 } 123 124 add_task(async function testTrackersSubView() { 125 info("Testing trackers subview with TP disabled."); 126 Services.prefs.setBoolPref(TP_PREF, false); 127 await assertSitesListed(false); 128 info("Testing trackers subview with TP enabled."); 129 Services.prefs.setBoolPref(TP_PREF, true); 130 await assertSitesListed(true); 131 info("Testing trackers subview with TP enabled and a CB exception."); 132 let uri = Services.io.newURI("https://tracking.example.org"); 133 PermissionTestUtils.add( 134 uri, 135 "trackingprotection", 136 Services.perms.ALLOW_ACTION 137 ); 138 await assertSitesListed(false); 139 info("Testing trackers subview with TP enabled and a CB exception removed."); 140 PermissionTestUtils.remove(uri, "trackingprotection"); 141 await assertSitesListed(true); 142 143 Services.prefs.clearUserPref(TP_PREF); 144 });