From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../browser_protectionsUI_socialtracking.js | 321 +++++++++++++++++++++ 1 file changed, 321 insertions(+) create mode 100644 browser/base/content/test/protectionsUI/browser_protectionsUI_socialtracking.js (limited to 'browser/base/content/test/protectionsUI/browser_protectionsUI_socialtracking.js') diff --git a/browser/base/content/test/protectionsUI/browser_protectionsUI_socialtracking.js b/browser/base/content/test/protectionsUI/browser_protectionsUI_socialtracking.js new file mode 100644 index 0000000000..8506016067 --- /dev/null +++ b/browser/base/content/test/protectionsUI/browser_protectionsUI_socialtracking.js @@ -0,0 +1,321 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TRACKING_PAGE = + // eslint-disable-next-line @microsoft/sdl/no-insecure-url + "http://example.com/browser/browser/base/content/test/protectionsUI/trackingPage.html"; + +const ST_PROTECTION_PREF = "privacy.trackingprotection.socialtracking.enabled"; +const ST_BLOCK_COOKIES_PREF = "privacy.socialtracking.block_cookies.enabled"; + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + [ST_BLOCK_COOKIES_PREF, true], + [ + "urlclassifier.features.socialtracking.blacklistHosts", + "social-tracking.example.org", + ], + [ + "urlclassifier.features.socialtracking.annotate.blacklistHosts", + "social-tracking.example.org", + ], + // Whitelist trackertest.org loaded by default in trackingPage.html + ["urlclassifier.trackingSkipURLs", "trackertest.org"], + ["urlclassifier.trackingAnnotationSkipURLs", "trackertest.org"], + ["privacy.trackingprotection.enabled", false], + ["privacy.trackingprotection.annotate_channels", true], + ], + }); +}); + +async function testIdentityState(hasException) { + let promise = BrowserTestUtils.openNewForegroundTab({ + url: TRACKING_PAGE, + gBrowser, + }); + let [tab] = await Promise.all([promise, waitForContentBlockingEvent()]); + + if (hasException) { + let loaded = BrowserTestUtils.browserLoaded( + tab.linkedBrowser, + false, + TRACKING_PAGE + ); + gProtectionsHandler.disableForCurrentPage(); + await loaded; + } + + await openProtectionsPanel(); + let categoryItem = document.getElementById( + "protections-popup-category-socialblock" + ); + + ok( + categoryItem.classList.contains("notFound"), + "socialtrackings are not detected" + ); + + ok( + BrowserTestUtils.is_visible(gProtectionsHandler.iconBox), + "icon box is visible regardless the exception" + ); + await closeProtectionsPanel(); + + await SpecialPowers.spawn(tab.linkedBrowser, [], function () { + content.postMessage("socialtracking", "*"); + }); + await openProtectionsPanel(); + + await TestUtils.waitForCondition(() => { + return !categoryItem.classList.contains("notFound"); + }); + + ok( + gProtectionsHandler._protectionsPopup.hasAttribute("detected"), + "trackers are detected" + ); + ok( + !categoryItem.classList.contains("notFound"), + "social trackers are detected" + ); + ok( + BrowserTestUtils.is_visible(gProtectionsHandler.iconBox), + "icon box is visible" + ); + is( + gProtectionsHandler.iconBox.hasAttribute("hasException"), + hasException, + "Shows an exception when appropriate" + ); + await closeProtectionsPanel(); + + if (hasException) { + let loaded = BrowserTestUtils.browserLoaded( + tab.linkedBrowser, + false, + TRACKING_PAGE + ); + gProtectionsHandler.enableForCurrentPage(); + await loaded; + } + + BrowserTestUtils.removeTab(tab); +} + +async function testSubview(hasException) { + let promise = BrowserTestUtils.openNewForegroundTab({ + url: TRACKING_PAGE, + gBrowser, + }); + let [tab] = await Promise.all([promise, waitForContentBlockingEvent()]); + + if (hasException) { + let loaded = BrowserTestUtils.browserLoaded( + tab.linkedBrowser, + false, + TRACKING_PAGE + ); + gProtectionsHandler.disableForCurrentPage(); + await loaded; + } + + promise = waitForContentBlockingEvent(); + await SpecialPowers.spawn(tab.linkedBrowser, [], function () { + content.postMessage("socialtracking", "*"); + }); + await promise; + + await openProtectionsPanel(); + + let categoryItem = document.getElementById( + "protections-popup-category-socialblock" + ); + + // Explicitly waiting for the category item becoming visible. + await TestUtils.waitForCondition(() => { + return BrowserTestUtils.is_visible(categoryItem); + }); + + ok(BrowserTestUtils.is_visible(categoryItem), "STP category item is visible"); + ok( + categoryItem.classList.contains("blocked"), + "STP category item is blocked" + ); + + /* eslint-disable mozilla/no-arbitrary-setTimeout */ + // We have to wait until the ContentBlockingLog gets updated in the content. + // Unfortunately, we need to use the setTimeout here since we don't have an + // easy to know whether the log is updated in the content. This should be + // removed after the log been removed in the content (Bug 1599046). + await new Promise(resolve => { + setTimeout(resolve, 500); + }); + /* eslint-enable mozilla/no-arbitrary-setTimeout */ + + let subview = document.getElementById("protections-popup-socialblockView"); + let viewShown = BrowserTestUtils.waitForEvent(subview, "ViewShown"); + categoryItem.click(); + await viewShown; + + let trackersViewShimHint = document.getElementById( + "protections-popup-socialblockView-shim-allow-hint" + ); + ok(trackersViewShimHint.hidden, "Shim hint is hidden"); + + let listItems = subview.querySelectorAll(".protections-popup-list-item"); + is(listItems.length, 1, "We have 1 item in the list"); + let listItem = listItems[0]; + ok(BrowserTestUtils.is_visible(listItem), "List item is visible"); + is( + listItem.querySelector("label").value, + "https://social-tracking.example.org", + "Has the correct host" + ); + + let mainView = document.getElementById("protections-popup-mainView"); + viewShown = BrowserTestUtils.waitForEvent(mainView, "ViewShown"); + let backButton = subview.querySelector(".subviewbutton-back"); + backButton.click(); + await viewShown; + + ok(true, "Main view was shown"); + + if (hasException) { + let loaded = BrowserTestUtils.browserLoaded( + tab.linkedBrowser, + false, + TRACKING_PAGE + ); + gProtectionsHandler.enableForCurrentPage(); + await loaded; + } + + BrowserTestUtils.removeTab(tab); +} + +async function testCategoryItem(blockLoads) { + if (blockLoads) { + Services.prefs.setBoolPref(ST_PROTECTION_PREF, true); + } + + Services.prefs.setBoolPref(ST_BLOCK_COOKIES_PREF, false); + + let promise = BrowserTestUtils.openNewForegroundTab({ + url: TRACKING_PAGE, + gBrowser, + }); + let [tab] = await Promise.all([promise, waitForContentBlockingEvent()]); + + await openProtectionsPanel(); + + let categoryItem = document.getElementById( + "protections-popup-category-socialblock" + ); + + let noTrackersDetectedDesc = document.getElementById( + "protections-popup-no-trackers-found-description" + ); + + ok(categoryItem.hasAttribute("uidisabled"), "Category should be uidisabled"); + + ok( + !categoryItem.classList.contains("blocked"), + "Category not marked as blocked" + ); + ok(!BrowserTestUtils.is_visible(categoryItem), "Item should be hidden"); + ok( + !gProtectionsHandler._protectionsPopup.hasAttribute("detected"), + "trackers are not detected" + ); + + await SpecialPowers.spawn(tab.linkedBrowser, [], function () { + content.postMessage("socialtracking", "*"); + }); + + ok( + !categoryItem.classList.contains("blocked"), + "Category not marked as blocked" + ); + ok(!BrowserTestUtils.is_visible(categoryItem), "Item should be hidden"); + ok( + !gProtectionsHandler._protectionsPopup.hasAttribute("detected"), + "trackers are not detected" + ); + ok( + BrowserTestUtils.is_visible(noTrackersDetectedDesc), + "No Trackers detected should be shown" + ); + + BrowserTestUtils.removeTab(tab); + + Services.prefs.setBoolPref(ST_BLOCK_COOKIES_PREF, true); + + promise = BrowserTestUtils.openNewForegroundTab({ + url: TRACKING_PAGE, + gBrowser, + }); + [tab] = await Promise.all([promise, waitForContentBlockingEvent()]); + + await openProtectionsPanel(); + + ok(!categoryItem.hasAttribute("uidisabled"), "Item shouldn't be uidisabled"); + + ok(categoryItem.classList.contains("blocked"), "Category marked as blocked"); + ok( + categoryItem.classList.contains("notFound"), + "Category marked as not found" + ); + // At this point we should still be showing "No Trackers Detected" + ok(!BrowserTestUtils.is_visible(categoryItem), "Item should not be visible"); + ok( + BrowserTestUtils.is_visible(noTrackersDetectedDesc), + "No Trackers detected should be shown" + ); + ok( + !gProtectionsHandler._protectionsPopup.hasAttribute("detected"), + "trackers are not detected" + ); + + await SpecialPowers.spawn(tab.linkedBrowser, [], function () { + content.postMessage("socialtracking", "*"); + }); + + await TestUtils.waitForCondition(() => { + return !categoryItem.classList.contains("notFound"); + }); + + ok(categoryItem.classList.contains("blocked"), "Category marked as blocked"); + ok( + !categoryItem.classList.contains("notFound"), + "Category not marked as not found" + ); + ok(BrowserTestUtils.is_visible(categoryItem), "Item should be visible"); + ok( + !BrowserTestUtils.is_visible(noTrackersDetectedDesc), + "No Trackers detected should be hidden" + ); + ok( + gProtectionsHandler._protectionsPopup.hasAttribute("detected"), + "trackers are not detected" + ); + + BrowserTestUtils.removeTab(tab); + + Services.prefs.clearUserPref(ST_PROTECTION_PREF); +} + +add_task(async function testIdentityUI() { + requestLongerTimeout(2); + + await testIdentityState(false); + await testIdentityState(true); + + await testSubview(false); + await testSubview(true); + + await testCategoryItem(false); + await testCategoryItem(true); +}); -- cgit v1.2.3