forked from mirrors/gecko-dev
Differential Revision: https://phabricator.services.mozilla.com/D17488 --HG-- extra : moz-landing-system : lando
110 lines
4.6 KiB
JavaScript
110 lines
4.6 KiB
JavaScript
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const TRACKING_PAGE = "http://tracking.example.org/browser/browser/base/content/test/trackingUI/trackingPage.html";
|
|
|
|
const TP_PREF = "privacy.trackingprotection.enabled";
|
|
|
|
add_task(async function setup() {
|
|
let oldCanRecord = Services.telemetry.canRecordExtended;
|
|
Services.telemetry.canRecordExtended = true;
|
|
|
|
// Avoid the content blocking tour interfering with our tests by popping up.
|
|
await SpecialPowers.pushPrefEnv({set: [[ContentBlocking.prefIntroCount, ContentBlocking.MAX_INTROS]]});
|
|
await UrlClassifierTestUtils.addTestTrackers();
|
|
|
|
registerCleanupFunction(() => {
|
|
Services.telemetry.canRecordExtended = oldCanRecord;
|
|
UrlClassifierTestUtils.cleanupTestTrackers();
|
|
});
|
|
});
|
|
|
|
async function assertSitesListed(blocked) {
|
|
await BrowserTestUtils.withNewTab(TRACKING_PAGE, async function(browser) {
|
|
await openIdentityPopup();
|
|
|
|
Services.telemetry.clearEvents();
|
|
|
|
let categoryItem =
|
|
document.getElementById("identity-popup-content-blocking-category-tracking-protection");
|
|
ok(BrowserTestUtils.is_visible(categoryItem), "TP category item is visible");
|
|
let trackersView = document.getElementById("identity-popup-trackersView");
|
|
let viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown");
|
|
categoryItem.click();
|
|
await viewShown;
|
|
|
|
ok(true, "Trackers view was shown");
|
|
|
|
let events = Services.telemetry.snapshotEvents(Ci.nsITelemetry.DATASET_RELEASE_CHANNEL_OPTIN).parent;
|
|
let buttonEvents = events.filter(
|
|
e => e[1] == "security.ui.identitypopup" && e[2] == "click" && e[3] == "trackers_subview_btn");
|
|
is(buttonEvents.length, 1, "recorded telemetry for the button click");
|
|
|
|
let listItems = trackersView.querySelectorAll(".identity-popup-content-blocking-list-item");
|
|
is(listItems.length, 1, "We have 1 tracker in the list");
|
|
|
|
let strictInfo = document.getElementById("identity-popup-trackersView-strict-info");
|
|
is(BrowserTestUtils.is_hidden(strictInfo), Services.prefs.getBoolPref(TP_PREF),
|
|
"Strict info is hidden if TP is enabled.");
|
|
|
|
let mainView = document.getElementById("identity-popup-mainView");
|
|
viewShown = BrowserTestUtils.waitForEvent(mainView, "ViewShown");
|
|
let backButton = trackersView.querySelector(".subviewbutton-back");
|
|
backButton.click();
|
|
await viewShown;
|
|
|
|
ok(true, "Main view was shown");
|
|
|
|
let change = waitForSecurityChange(1);
|
|
let timeoutPromise = new Promise(resolve => setTimeout(resolve, 1000));
|
|
|
|
await ContentTask.spawn(browser, {}, function() {
|
|
content.postMessage("more-tracking", "*");
|
|
});
|
|
|
|
let result = await Promise.race([change, timeoutPromise]);
|
|
is(result, undefined, "No securityChange events should be received");
|
|
|
|
viewShown = BrowserTestUtils.waitForEvent(trackersView, "ViewShown");
|
|
categoryItem.click();
|
|
await viewShown;
|
|
|
|
ok(true, "Trackers view was shown");
|
|
|
|
listItems = Array.from(trackersView.querySelectorAll(".identity-popup-content-blocking-list-item"));
|
|
is(listItems.length, 2, "We have 2 trackers in the list");
|
|
|
|
let listItem = listItems.find(item => item.querySelector("label").value == "trackertest.org");
|
|
ok(listItem, "Has an item for trackertest.org");
|
|
ok(BrowserTestUtils.is_visible(listItem), "List item is visible");
|
|
is(listItem.classList.contains("allowed"), !blocked,
|
|
"Indicates whether the tracker was blocked or allowed");
|
|
|
|
listItem = listItems.find(item => item.querySelector("label").value == "itisatracker.org");
|
|
ok(listItem, "Has an item for itisatracker.org");
|
|
ok(BrowserTestUtils.is_visible(listItem), "List item is visible");
|
|
is(listItem.classList.contains("allowed"), !blocked,
|
|
"Indicates whether the tracker was blocked or allowed");
|
|
});
|
|
}
|
|
|
|
add_task(async function testTrackersSubView() {
|
|
info("Testing trackers subview with TP disabled.");
|
|
Services.prefs.setBoolPref(TP_PREF, false);
|
|
await assertSitesListed(false);
|
|
info("Testing trackers subview with TP enabled.");
|
|
Services.prefs.setBoolPref(TP_PREF, true);
|
|
await assertSitesListed(true);
|
|
info("Testing trackers subview with TP enabled and a CB exception.");
|
|
let uri = Services.io.newURI("https://tracking.example.org");
|
|
Services.perms.add(uri, "trackingprotection", Services.perms.ALLOW_ACTION);
|
|
await assertSitesListed(false);
|
|
info("Testing trackers subview with TP enabled and a CB exception removed.");
|
|
Services.perms.remove(uri, "trackingprotection");
|
|
await assertSitesListed(true);
|
|
|
|
Services.prefs.clearUserPref(TP_PREF);
|
|
});
|