Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test runs only with pattern: os != 'android'
- Manifest: browser/components/tests/unit/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
const { StartupTelemetry } = ChromeUtils.importESModule(
"moz-src:///browser/components/StartupTelemetry.sys.mjs"
);
const GLOBAL_AI_PREF = "browser.ai.control.default";
const AI_CONTROL_PREFS = {
[GLOBAL_AI_PREF]: "default",
"browser.ai.control.translations": "translations",
"browser.ai.control.pdfjsAltText": "pdfjsAltText",
"browser.ai.control.smartTabGroups": "smartTabGroups",
"browser.ai.control.linkPreviewKeyPoints": "linkPreviewKeyPoints",
"browser.ai.control.sidebarChatbot": "sidebarChatbot",
};
function resetPrefs(changes = {}) {
for (let [pref, name] of Object.entries(AI_CONTROL_PREFS)) {
if (name in changes) {
Services.prefs.setStringPref(pref, changes[name]);
} else {
Services.prefs.clearUserPref(pref);
}
}
}
function assertFeatureMetrics(expected) {
for (let [, key] of Object.entries(AI_CONTROL_PREFS)) {
Assert.equal(
Glean.browser.aiControlIsBlocking[key].testGetValue(),
expected[key],
`${key} should be ${expected[key]}`
);
}
}
add_setup(function test_setup() {
do_get_profile();
Services.fog.initializeFOG();
resetPrefs();
let cleanupListeners = StartupTelemetry.aiControlBlocking();
registerCleanupFunction(() => {
cleanupListeners();
resetPrefs();
});
});
add_task(function test_defaults_no_prefs_set() {
// Don't reset FOG/prefs since the setup grabbed the initial values.
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
false,
"Global should be false when no prefs set"
);
assertFeatureMetrics({
translations: false,
pdfjsAltText: false,
smartTabGroups: false,
linkPreviewKeyPoints: false,
sidebarChatbot: false,
});
});
add_task(function test_global_blocked_features_default() {
Services.fog.testResetFOG();
resetPrefs({
default: "blocked",
});
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
true,
"Global should be true when blocked"
);
assertFeatureMetrics({
translations: true,
pdfjsAltText: true,
smartTabGroups: true,
linkPreviewKeyPoints: true,
sidebarChatbot: true,
});
});
add_task(function test_global_available_one_feature_blocked() {
Services.fog.testResetFOG();
resetPrefs({
default: "available",
translations: "blocked",
});
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
false,
"Global should be false when available"
);
assertFeatureMetrics({
translations: true,
pdfjsAltText: false,
smartTabGroups: false,
linkPreviewKeyPoints: false,
sidebarChatbot: false,
});
});
add_task(function test_global_blocked_one_feature_enabled() {
Services.fog.testResetFOG();
resetPrefs({
default: "blocked",
smartTabGroups: "enabled",
});
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
true,
"Global should be true when blocked"
);
assertFeatureMetrics({
translations: true,
pdfjsAltText: true,
smartTabGroups: false,
linkPreviewKeyPoints: true,
sidebarChatbot: true,
});
});
add_task(function test_pref_observer_global_change() {
Services.fog.testResetFOG();
resetPrefs({
default: "available",
});
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
false,
"Global should be false initially"
);
assertFeatureMetrics({
translations: false,
pdfjsAltText: false,
smartTabGroups: false,
linkPreviewKeyPoints: false,
sidebarChatbot: false,
});
Services.prefs.setStringPref(GLOBAL_AI_PREF, "blocked");
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
true,
"Global should update to true after pref change"
);
assertFeatureMetrics({
translations: true,
pdfjsAltText: true,
smartTabGroups: true,
linkPreviewKeyPoints: true,
sidebarChatbot: true,
});
});
add_task(function test_pref_observer_feature_change() {
Services.fog.testResetFOG();
resetPrefs({
default: "available",
});
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
false,
"Global should be false"
);
Assert.equal(
Glean.browser.aiControlIsBlocking.sidebarChatbot.testGetValue(),
false,
"sidebarChatbot should be false initially"
);
Services.prefs.setStringPref("browser.ai.control.sidebarChatbot", "blocked");
Assert.equal(
Glean.browser.globalAiControlIsBlocking.testGetValue(),
false,
"Global should remain false"
);
Assert.equal(
Glean.browser.aiControlIsBlocking.sidebarChatbot.testGetValue(),
true,
"sidebarChatbot should update to true"
);
});