summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_privacy_firefoxSuggest.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_privacy_firefoxSuggest.js')
-rw-r--r--browser/components/preferences/tests/browser_privacy_firefoxSuggest.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_privacy_firefoxSuggest.js b/browser/components/preferences/tests/browser_privacy_firefoxSuggest.js
new file mode 100644
index 0000000000..c5fc24206b
--- /dev/null
+++ b/browser/components/preferences/tests/browser_privacy_firefoxSuggest.js
@@ -0,0 +1,140 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// This tests the Privacy pane's Firefox Suggest UI.
+
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ QuickSuggest: "resource:///modules/QuickSuggest.sys.mjs",
+});
+
+const CONTAINER_ID = "dataCollectionGroup";
+const DATA_COLLECTION_TOGGLE_ID = "firefoxSuggestDataCollectionPrivacyToggle";
+const LEARN_MORE_CLASS = "firefoxSuggestLearnMore";
+
+// This test can take a while due to the many permutations some of these tasks
+// run through, so request a longer timeout.
+requestLongerTimeout(10);
+
+// Clicks each of the checkboxes and toggles and makes sure the prefs and info box are updated.
+add_task(async function clickCheckboxesOrToggle() {
+ await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
+
+ let doc = gBrowser.selectedBrowser.contentDocument;
+ let dataCollectionSection = doc.getElementById(CONTAINER_ID);
+ dataCollectionSection.scrollIntoView();
+
+ async function clickElement(id, eventName) {
+ let element = doc.getElementById(id);
+ let changed = BrowserTestUtils.waitForEvent(element, eventName);
+
+ if (eventName == "toggle") {
+ element = element.buttonEl;
+ }
+
+ EventUtils.synthesizeMouseAtCenter(
+ element,
+ {},
+ gBrowser.selectedBrowser.contentWindow
+ );
+ await changed;
+ }
+
+ // Set initial state.
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.quicksuggest.dataCollection.enabled", true]],
+ });
+ assertPrefUIState({
+ [DATA_COLLECTION_TOGGLE_ID]: true,
+ });
+
+ // data collection toggle
+ await clickElement(DATA_COLLECTION_TOGGLE_ID, "toggle");
+ Assert.ok(
+ !Services.prefs.getBoolPref(
+ "browser.urlbar.quicksuggest.dataCollection.enabled"
+ ),
+ "quicksuggest.dataCollection.enabled is false after clicking data collection toggle"
+ );
+ assertPrefUIState({
+ [DATA_COLLECTION_TOGGLE_ID]: false,
+ });
+
+ gBrowser.removeCurrentTab();
+ await SpecialPowers.popPrefEnv();
+});
+
+// Clicks the learn-more links and checks the help page is opened in a new tab.
+add_task(async function clickLearnMore() {
+ await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
+
+ let doc = gBrowser.selectedBrowser.contentDocument;
+ let dataCollectionSection = doc.getElementById(CONTAINER_ID);
+ dataCollectionSection.scrollIntoView();
+
+ // Set initial state so that the info box and learn more link are shown.
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.quicksuggest.dataCollection.enabled", true]],
+ });
+
+ let learnMoreLinks = doc.querySelectorAll(
+ `#${CONTAINER_ID} .` + LEARN_MORE_CLASS
+ );
+ Assert.equal(
+ learnMoreLinks.length,
+ 1,
+ "Expected number of learn-more links are present"
+ );
+ for (let link of learnMoreLinks) {
+ Assert.ok(
+ BrowserTestUtils.isVisible(link),
+ "Learn-more link is visible: " + link.id
+ );
+ }
+
+ let prefsTab = gBrowser.selectedTab;
+ for (let link of learnMoreLinks) {
+ let tabPromise = BrowserTestUtils.waitForNewTab(
+ gBrowser,
+ QuickSuggest.HELP_URL
+ );
+ info("Clicking learn-more link: " + link.id);
+ Assert.ok(link.id, "Sanity check: Learn-more link has an ID");
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#" + link.id,
+ {},
+ gBrowser.selectedBrowser
+ );
+ info("Waiting for help page to load in a new tab");
+ await tabPromise;
+ gBrowser.removeCurrentTab();
+ gBrowser.selectedTab = prefsTab;
+ }
+
+ gBrowser.removeCurrentTab();
+ await SpecialPowers.popPrefEnv();
+});
+
+/**
+ * Verifies the state of pref related to checkboxes or toggles.
+ *
+ * @param {object} stateByElementID
+ * Maps checkbox or toggle element IDs to booleans. Each boolean
+ * is the expected state of the corresponding ID.
+ */
+function assertPrefUIState(stateByElementID) {
+ let doc = gBrowser.selectedBrowser.contentDocument;
+ let container = doc.getElementById(CONTAINER_ID);
+ let attr;
+ Assert.ok(BrowserTestUtils.isVisible(container), "The container is visible");
+ for (let [id, state] of Object.entries(stateByElementID)) {
+ let element = doc.getElementById(id);
+ if (element.tagName === "checkbox") {
+ attr = "checked";
+ } else if (element.tagName === "html:moz-toggle") {
+ attr = "pressed";
+ }
+ Assert.equal(element[attr], state, "Expected state for ID: " + id);
+ }
+}