Bug 1951311 - Remove GenAI about:preferences integration r=Mardak,settings-reviewers,firefox-ai-ml-reviewers,mossop
Differential Revision: https://phabricator.services.mozilla.com/D240373
This commit is contained in:
@@ -27,18 +27,6 @@ XPCOMUtils.defineLazyPreferenceGetter(
|
||||
null,
|
||||
(_pref, _old, val) => onChatEnabledChange(val)
|
||||
);
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"chatHideFromLabs",
|
||||
"browser.ml.chat.hideFromLabs",
|
||||
false
|
||||
);
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"chatHideLabsShortcuts",
|
||||
"browser.ml.chat.hideLabsShortcuts",
|
||||
false
|
||||
);
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"chatHideLocalhost",
|
||||
@@ -345,16 +333,6 @@ export const GenAI = {
|
||||
).forEach(setPref);
|
||||
});
|
||||
|
||||
// Detect about:preferences to add controls
|
||||
Services.obs.addObserver(this, "experimental-pane-loaded");
|
||||
// Check existing windows that might have preferences before init
|
||||
lazy.EveryWindow.readyWindows.forEach(window => {
|
||||
const content = window.gBrowser.selectedBrowser.contentWindow;
|
||||
if (content?.location.href.startsWith("about:preferences")) {
|
||||
this.buildPreferences(content);
|
||||
}
|
||||
});
|
||||
|
||||
// Record glean metrics after applying nimbus prefs
|
||||
Glean.genaiChatbot.enabled.set(lazy.chatEnabled);
|
||||
Glean.genaiChatbot.provider.set(this.getProviderId());
|
||||
@@ -861,131 +839,6 @@ export const GenAI = {
|
||||
}
|
||||
browser.fixupAndLoadURIString(url, options);
|
||||
},
|
||||
|
||||
/**
|
||||
* Build preferences for chat such as handling providers.
|
||||
*
|
||||
* @param {Window} window for about:preferences
|
||||
*/
|
||||
buildPreferences({ document, Preferences }) {
|
||||
// Section can be hidden by featuregate targeting
|
||||
const providerEl = document.getElementById("genai-chat-provider");
|
||||
if (!providerEl) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Some experiments might want to hide shortcuts
|
||||
const shortcutsEl = document.getElementById("genai-chat-shortcuts");
|
||||
if (lazy.chatHideLabsShortcuts || lazy.chatHideFromLabs) {
|
||||
shortcutsEl.remove();
|
||||
}
|
||||
|
||||
// Page can load (restore at startup) just before default prefs apply
|
||||
if (lazy.chatHideFromLabs) {
|
||||
providerEl.parentNode.remove();
|
||||
document.getElementById("genai-chat").remove();
|
||||
return;
|
||||
}
|
||||
|
||||
const enabled = Preferences.get("browser.ml.chat.enabled");
|
||||
const onEnabledChange = () => {
|
||||
providerEl.disabled = !enabled.value;
|
||||
shortcutsEl.disabled = !enabled.value;
|
||||
|
||||
// Update enabled telemetry
|
||||
Glean.genaiChatbot.enabled.set(enabled.value);
|
||||
if (onEnabledChange.canChange) {
|
||||
Glean.genaiChatbot.experimentCheckboxClick.record({
|
||||
enabled: enabled.value,
|
||||
});
|
||||
}
|
||||
onEnabledChange.canChange = true;
|
||||
};
|
||||
onEnabledChange();
|
||||
enabled.on("change", onEnabledChange);
|
||||
|
||||
// Populate providers and hide from list if necessary
|
||||
this.chatProviders.forEach((data, url) => {
|
||||
providerEl.appendItem(data.name, url).hidden = data.hidden ?? false;
|
||||
});
|
||||
const provider = Preferences.add({
|
||||
id: "browser.ml.chat.provider",
|
||||
type: "string",
|
||||
});
|
||||
let customItem;
|
||||
const onProviderChange = () => {
|
||||
// Add/update the Custom entry if it's not a default provider entry
|
||||
if (provider.value && !this.chatProviders.has(provider.value)) {
|
||||
if (!customItem) {
|
||||
customItem = providerEl.appendItem();
|
||||
}
|
||||
customItem.label = `Custom (${provider.value})`;
|
||||
customItem.value = provider.value;
|
||||
|
||||
// Select the item if the preference changed not via menu
|
||||
providerEl.selectedItem = customItem;
|
||||
}
|
||||
|
||||
// Update potentially multiple links for the provider
|
||||
const links = document.getElementById("genai-chat-links");
|
||||
const providerData = this.chatProviders.get(provider.value);
|
||||
for (let i = 1; i <= 3; i++) {
|
||||
const name = `link${i}`;
|
||||
let link = links.querySelector(`[data-l10n-name=${name}]`);
|
||||
const href = providerData?.[name];
|
||||
if (href) {
|
||||
if (!link) {
|
||||
link = links.appendChild(document.createElement("a"));
|
||||
link.dataset.l10nName = name;
|
||||
link.target = "_blank";
|
||||
}
|
||||
link.href = href;
|
||||
} else {
|
||||
link?.remove();
|
||||
}
|
||||
}
|
||||
document.l10n.setAttributes(
|
||||
links,
|
||||
providerData?.linksId ?? "genai-settings-chat-links"
|
||||
);
|
||||
|
||||
// Update provider telemetry
|
||||
const providerId = this.getProviderId(provider.value);
|
||||
Glean.genaiChatbot.provider.set(providerId);
|
||||
if (onProviderChange.lastId && document.hasFocus()) {
|
||||
Glean.genaiChatbot.providerChange.record({
|
||||
current: providerId,
|
||||
previous: onProviderChange.lastId,
|
||||
surface: "settings",
|
||||
});
|
||||
}
|
||||
onProviderChange.lastId = providerId;
|
||||
};
|
||||
onProviderChange();
|
||||
provider.on("change", onProviderChange);
|
||||
|
||||
const shortcuts = Preferences.add({
|
||||
id: "browser.ml.chat.shortcuts",
|
||||
type: "bool",
|
||||
});
|
||||
const onShortcutsChange = () => {
|
||||
// Update shortcuts telemetry
|
||||
Glean.genaiChatbot.shortcuts.set(shortcuts.value);
|
||||
if (onShortcutsChange.canChange) {
|
||||
Glean.genaiChatbot.shortcutsCheckboxClick.record({
|
||||
enabled: shortcuts.value,
|
||||
});
|
||||
}
|
||||
onShortcutsChange.canChange = true;
|
||||
};
|
||||
onShortcutsChange();
|
||||
shortcuts.on("change", onShortcutsChange);
|
||||
},
|
||||
|
||||
// nsIObserver
|
||||
observe(window) {
|
||||
this.buildPreferences(window);
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -49,21 +49,3 @@ add_task(async function test_chat_no_open() {
|
||||
|
||||
Assert.ok(!SidebarController.isOpen, "Pref changes didn't open sidebar");
|
||||
});
|
||||
|
||||
/**
|
||||
* Check that about:preferences is detected
|
||||
*/
|
||||
add_task(async function test_preferences_observer() {
|
||||
const sandbox = sinon.createSandbox();
|
||||
const stub = sandbox.stub(GenAI, "buildPreferences");
|
||||
|
||||
await BrowserTestUtils.withNewTab("about:preferences#experimental", () => {
|
||||
Assert.equal(stub.callCount, 1, "Would have built genai preferences");
|
||||
|
||||
GenAI.init();
|
||||
|
||||
Assert.equal(stub.callCount, 1, "Repeat init unnecessary so skipped");
|
||||
});
|
||||
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user