tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_aiFeatures.js (4027B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   https://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 describe("settings ai features", () => {
      7  let doc, win;
      8 
      9  beforeEach(async function setup() {
     10    await SpecialPowers.pushPrefEnv({
     11      set: [["browser.settings-redesign.aiFeatures.enabled", true]],
     12    });
     13    await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true });
     14    doc = gBrowser.selectedBrowser.contentDocument;
     15    win = doc.ownerGlobal;
     16  });
     17 
     18  afterEach(() => {
     19    BrowserTestUtils.removeTab(gBrowser.selectedTab);
     20  });
     21 
     22  async function openAiFeaturePanel() {
     23    const paneLoaded = waitForPaneChange("aiFeatures");
     24    const categoryButton = doc.getElementById("category-ai-features");
     25    categoryButton.scrollIntoView();
     26    EventUtils.synthesizeMouseAtCenter(categoryButton, {}, win);
     27    await paneLoaded;
     28  }
     29 
     30  it("can change the chatbot provider value", async () => {
     31    await SpecialPowers.pushPrefEnv({
     32      set: [["browser.ml.chat.provider", ""]],
     33    });
     34 
     35    const categoryButton = doc.getElementById("category-ai-features");
     36    Assert.ok(categoryButton, "category exists");
     37    Assert.ok(
     38      BrowserTestUtils.isVisible(categoryButton),
     39      "category is visible"
     40    );
     41 
     42    await openAiFeaturePanel();
     43 
     44    const providerControl = doc.getElementById("chatbotProvider");
     45    Assert.ok(providerControl, "control exists");
     46    Assert.ok(
     47      BrowserTestUtils.isVisible(providerControl),
     48      "control is visible"
     49    );
     50    Assert.equal(
     51      Services.prefs.getStringPref("browser.ml.chat.provider"),
     52      "",
     53      "Pref is empty"
     54    );
     55 
     56    Assert.equal(providerControl.value, "", "No provider set");
     57 
     58    const settingChanged = waitForSettingChange(providerControl.setting);
     59    providerControl.focus();
     60    const pickerOpened = BrowserTestUtils.waitForSelectPopupShown(
     61      win.docShell.chromeEventHandler.ownerGlobal
     62    );
     63    EventUtils.sendKey("space");
     64    await pickerOpened;
     65    EventUtils.sendKey("down");
     66    EventUtils.sendKey("return");
     67    await settingChanged;
     68 
     69    Assert.notEqual(providerControl.value, "", "Provider changed");
     70    Assert.notEqual(
     71      Services.prefs.getStringPref("browser.ml.chat.provider"),
     72      "",
     73      "Pref is not empty"
     74    );
     75 
     76    await gBrowser.ownerGlobal.SidebarController.hide();
     77  });
     78 
     79  it("hides AI Window when preferences not enabled", async () => {
     80    await SpecialPowers.pushPrefEnv({
     81      set: [["browser.aiwindow.preferences.enabled", false]],
     82    });
     83 
     84    await openAiFeaturePanel();
     85 
     86    const aiWindowItem = doc.getElementById("AIWindowItem");
     87    const aiWindowFeatures = doc.getElementById("aiFeaturesAIWindowGroup");
     88 
     89    Assert.ok(
     90      !BrowserTestUtils.isVisible(aiWindowItem),
     91      "AIWindowItem is hidden when preferences not enabled"
     92    );
     93    Assert.ok(
     94      !BrowserTestUtils.isVisible(aiWindowFeatures),
     95      "aiWindowFeatures is hidden when preferences not enabled"
     96    );
     97  });
     98 
     99  it("shows AI Window activate when preferences enabled and feature not enabled", async () => {
    100    await SpecialPowers.pushPrefEnv({
    101      set: [
    102        ["browser.aiwindow.preferences.enabled", true],
    103        ["browser.aiwindow.enabled", false],
    104      ],
    105    });
    106 
    107    await openAiFeaturePanel();
    108 
    109    const aiWindowItem = doc.getElementById("AIWindowItem");
    110    Assert.ok(
    111      BrowserTestUtils.isVisible(aiWindowItem),
    112      "AIWindowItem is visible when preferences enabled and feature not enabled"
    113    );
    114  });
    115 
    116  it("hides AI Window activate when feature enabled", async () => {
    117    await SpecialPowers.pushPrefEnv({
    118      set: [
    119        ["browser.aiwindow.preferences.enabled", true],
    120        ["browser.aiwindow.enabled", true],
    121      ],
    122    });
    123 
    124    await openAiFeaturePanel();
    125 
    126    const aiWindowItem = doc.getElementById("AIWindowItem");
    127    Assert.ok(
    128      !BrowserTestUtils.isVisible(aiWindowItem),
    129      "AIWindowItem is hidden when feature enabled"
    130    );
    131  });
    132 
    133  // TODO: Add tests for aiFeaturesAIWindowGroup when Model and Insight options are added
    134 });