fune/browser/base/content/test/trackingUI/browser_trackingUI_trackers_subview.js
2019-01-25 16:07:40 +00:00

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);
});