Source code

Revision control

Copy as Markdown

Other Tools

"use strict";
const HAS_USER_INTERACTED_WITH_ETP_PREF =
"privacy.trackingprotection.allow_list.hasUserInteractedWithETPSettings";
const CONTENT_BLOCKING_CATEGORY_PREF = "browser.contentblocking.category";
const BASELINE_ALLOW_LIST_PREF =
"privacy.trackingprotection.allow_list.baseline.enabled";
const CONVENIENCE_ALLOW_LIST_PREF =
"privacy.trackingprotection.allow_list.convenience.enabled";
const FEATURE_TRACKING_NAME = "tracking-annotation-test";
const FEATURE_TRACKING_PREF_NAME = "urlclassifier.tracking-annotation-test";
let exceptionListService = Cc[
"@mozilla.org/url-classifier/exception-list-service;1"
].getService(Ci.nsIUrlClassifierExceptionListService);
// Wait for the exception list service to be ready and resolve the promise when it is.
function waitForServiceReady() {
return new Promise(resolve => {
let observer = {
onExceptionListUpdate: () => {
exceptionListService.unregisterExceptionListObserver(
FEATURE_TRACKING_NAME,
observer
);
resolve();
},
};
exceptionListService.registerAndRunExceptionListObserver(
FEATURE_TRACKING_NAME,
FEATURE_TRACKING_PREF_NAME,
observer
);
});
}
// Preferences which on change will update the pref for HAS_USER_INTERACTED_WITH_ETP_PREF
// This dictionary also contains the possible values for each preference
async function cleanup() {
Services.prefs.clearUserPref(HAS_USER_INTERACTED_WITH_ETP_PREF);
Services.prefs.clearUserPref(BASELINE_ALLOW_LIST_PREF);
Services.prefs.clearUserPref(CONVENIENCE_ALLOW_LIST_PREF);
Services.prefs.clearUserPref(CONTENT_BLOCKING_CATEGORY_PREF);
exceptionListService.clear();
}
add_task(async function test_user_interaction_pref_baseline_allow_list_true() {
// Register the pref listeners
await waitForServiceReady();
info(`Setting preference ${BASELINE_ALLOW_LIST_PREF} to true`);
Services.prefs.setBoolPref(BASELINE_ALLOW_LIST_PREF, true);
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${BASELINE_ALLOW_LIST_PREF} to false`);
Services.prefs.setBoolPref(BASELINE_ALLOW_LIST_PREF, false);
info(
"Check user interaction pref is true after modifying baseline allow list pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
});
add_task(async function test_user_interaction_pref_baseline_allow_list_false() {
await waitForServiceReady();
info(`Setting preference ${BASELINE_ALLOW_LIST_PREF} to true`);
Services.prefs.setBoolPref(BASELINE_ALLOW_LIST_PREF, true);
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${BASELINE_ALLOW_LIST_PREF} to false`);
Services.prefs.setBoolPref(BASELINE_ALLOW_LIST_PREF, false);
info(
"Check user interaction pref is true after modifying baseline allow list pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
});
add_task(
async function test_user_interaction_pref_convenience_allow_list_true() {
await waitForServiceReady();
info(`Setting preference ${CONVENIENCE_ALLOW_LIST_PREF} to true`);
Services.prefs.setBoolPref(BASELINE_ALLOW_LIST_PREF, true);
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${CONVENIENCE_ALLOW_LIST_PREF} to false`);
Services.prefs.setBoolPref(CONVENIENCE_ALLOW_LIST_PREF, false);
info(
"Check user interaction pref is true after modifying convenience allow list pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
}
);
add_task(
async function test_user_interaction_pref_convenience_allow_list_false() {
await waitForServiceReady();
info(`Setting preference ${CONVENIENCE_ALLOW_LIST_PREF} to true`);
Services.prefs.setBoolPref(CONVENIENCE_ALLOW_LIST_PREF, true);
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${CONVENIENCE_ALLOW_LIST_PREF} to false`);
Services.prefs.setBoolPref(CONVENIENCE_ALLOW_LIST_PREF, false);
info(
"Check user interaction pref is true after modifying convenience allow list pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
}
);
add_task(
async function test_user_interaction_pref_content_blocking_category_standard() {
await waitForServiceReady();
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to strict`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "strict");
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to standard`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "standard");
info(
"Check user interaction pref is true after modifying content blocking category pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
}
);
add_task(
async function test_user_interaction_pref_content_blocking_category_strict() {
await waitForServiceReady();
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to standard`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "standard");
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to strict`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "strict");
info(
"Check user interaction pref is true after modifying content blocking category pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
}
);
add_task(
async function test_user_interaction_pref_content_blocking_category_custom() {
await waitForServiceReady();
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to standard`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "standard");
Services.prefs.setBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false);
info(`Setting preference ${CONTENT_BLOCKING_CATEGORY_PREF} to custom`);
Services.prefs.setStringPref(CONTENT_BLOCKING_CATEGORY_PREF, "custom");
info(
"Check user interaction pref is true after modifying content blocking category pref"
);
ok(
Services.prefs.getBoolPref(HAS_USER_INTERACTED_WITH_ETP_PREF, false),
"User interaction pref should be true"
);
await cleanup();
}
);