summaryrefslogtreecommitdiffstats
path: root/browser/components/protections/test/browser/browser_protections_monitor.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/protections/test/browser/browser_protections_monitor.js')
-rw-r--r--browser/components/protections/test/browser/browser_protections_monitor.js161
1 files changed, 161 insertions, 0 deletions
diff --git a/browser/components/protections/test/browser/browser_protections_monitor.js b/browser/components/protections/test/browser/browser_protections_monitor.js
new file mode 100644
index 0000000000..572f6c8b07
--- /dev/null
+++ b/browser/components/protections/test/browser/browser_protections_monitor.js
@@ -0,0 +1,161 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+const { AboutProtectionsParent } = ChromeUtils.importESModule(
+ "resource:///actors/AboutProtectionsParent.sys.mjs"
+);
+
+const monitorErrorData = {
+ error: true,
+};
+
+const mockMonitorData = {
+ numBreaches: 11,
+ numBreachesResolved: 0,
+};
+
+add_task(async function () {
+ const tab = await BrowserTestUtils.openNewForegroundTab({
+ url: "about:protections",
+ gBrowser,
+ });
+
+ await BrowserTestUtils.reloadTab(tab);
+
+ const monitorCardEnabled = Services.prefs.getBoolPref(
+ "browser.contentblocking.report.monitor.enabled"
+ );
+
+ // Only run monitor card tests if it's enabled.
+ if (monitorCardEnabled) {
+ info(
+ "Check that the correct content is displayed for users with no logins."
+ );
+ await checkNoLoginsContentIsDisplayed(tab, "monitor-sign-up");
+
+ info(
+ "Check that the correct content is displayed for users with monitor data."
+ );
+ await Services.logins.addLoginAsync(TEST_LOGIN1);
+ AboutProtectionsParent.setTestOverride(mockGetMonitorData(mockMonitorData));
+ await BrowserTestUtils.reloadTab(tab);
+
+ Assert.ok(
+ true,
+ "Error was not thrown for trying to reach the Monitor endpoint, the cache has worked."
+ );
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
+ await ContentTaskUtils.waitForCondition(() => {
+ const hasLogins = content.document.querySelector(
+ ".monitor-card.has-logins"
+ );
+ return hasLogins && ContentTaskUtils.is_visible(hasLogins);
+ }, "Monitor card for user with stored logins is shown.");
+
+ const hasLoginsHeaderContent = content.document.querySelector(
+ "#monitor-header-content span"
+ );
+ const cardBody = content.document.querySelector(
+ ".monitor-card .card-body"
+ );
+
+ ok(
+ ContentTaskUtils.is_visible(cardBody),
+ "Card body is shown for users monitor data."
+ );
+ await ContentTaskUtils.waitForCondition(() => {
+ return (
+ hasLoginsHeaderContent.textContent ==
+ "Firefox Monitor warns you if your info has appeared in a known data breach."
+ );
+ }, "Header content for user with monitor data is correct.");
+
+ info("Make sure correct numbers for monitor stats are displayed.");
+ const emails = content.document.querySelector(
+ ".monitor-stat span[data-type='stored-emails']"
+ );
+ const passwords = content.document.querySelector(
+ ".monitor-stat span[data-type='exposed-passwords']"
+ );
+ const breaches = content.document.querySelector(
+ ".monitor-stat span[data-type='known-breaches']"
+ );
+
+ is(emails.textContent, 1, "1 monitored email is displayed");
+ is(passwords.textContent, 8, "8 exposed passwords are displayed");
+ is(breaches.textContent, 11, "11 known data breaches are displayed.");
+ });
+
+ info(
+ "Check that correct content is displayed when monitor data contains an error message."
+ );
+ AboutProtectionsParent.setTestOverride(
+ mockGetMonitorData(monitorErrorData)
+ );
+ await BrowserTestUtils.reloadTab(tab);
+ await checkNoLoginsContentIsDisplayed(tab);
+
+ info("Disable showing the Monitor card.");
+ Services.prefs.setBoolPref(
+ "browser.contentblocking.report.monitor.enabled",
+ false
+ );
+ await BrowserTestUtils.reloadTab(tab);
+ }
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
+ await ContentTaskUtils.waitForCondition(() => {
+ const monitorCard = content.document.querySelector(".monitor-card");
+ return !monitorCard["data-enabled"];
+ }, "Monitor card is not enabled.");
+
+ const monitorCard = content.document.querySelector(".monitor-card");
+ ok(ContentTaskUtils.is_hidden(monitorCard), "Monitor card is hidden.");
+ });
+
+ if (monitorCardEnabled) {
+ // set the pref back to displaying the card.
+ Services.prefs.setBoolPref(
+ "browser.contentblocking.report.monitor.enabled",
+ true
+ );
+
+ // remove logins
+ Services.logins.removeLogin(TEST_LOGIN1);
+
+ // restore original test functions
+ AboutProtectionsParent.setTestOverride(null);
+ }
+
+ await BrowserTestUtils.removeTab(tab);
+});
+
+async function checkNoLoginsContentIsDisplayed(tab, expectedLinkContent) {
+ await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
+ await ContentTaskUtils.waitForCondition(() => {
+ const noLogins = content.document.querySelector(
+ ".monitor-card.no-logins"
+ );
+ return noLogins && ContentTaskUtils.is_visible(noLogins);
+ }, "Monitor card for user with no logins is shown.");
+
+ const noLoginsHeaderContent = content.document.querySelector(
+ "#monitor-header-content span"
+ );
+ const cardBody = content.document.querySelector(".monitor-card .card-body");
+
+ ok(
+ ContentTaskUtils.is_hidden(cardBody),
+ "Card body is hidden for users with no logins."
+ );
+ is(
+ noLoginsHeaderContent.getAttribute("data-l10n-id"),
+ "monitor-header-content-no-account",
+ "Header content for user with no logins is correct"
+ );
+ });
+}