summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser/browser_defaultPrivate_nimbus.js
blob: ce5acc91a037476abeebe1cc0f27912593833c90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

const { ExperimentAPI } = ChromeUtils.importESModule(
  "resource://nimbus/ExperimentAPI.sys.mjs"
);
const { ExperimentFakes } = ChromeUtils.importESModule(
  "resource://testing-common/NimbusTestUtils.sys.mjs"
);

ChromeUtils.defineESModuleGetters(this, {
  SearchTestUtils: "resource://testing-common/SearchTestUtils.sys.mjs",
});

const CONFIG_DEFAULT = [
  {
    webExtension: { id: "basic@search.mozilla.org" },
    appliesTo: [{ included: { everywhere: true } }],
    default: "yes",
  },
  {
    webExtension: { id: "private@search.mozilla.org" },
    appliesTo: [
      {
        experiment: "testing",
        included: { everywhere: true },
      },
    ],
    defaultPrivate: "yes",
  },
];

SearchTestUtils.init(this);

add_setup(async () => {
  // Use engines in test directory
  let searchExtensions = getChromeDir(getResolvedURI(gTestPath));
  searchExtensions.append("search-engines");
  await SearchTestUtils.useMochitestEngines(searchExtensions);

  // Current default values.
  await SpecialPowers.pushPrefEnv({
    set: [
      ["browser.search.separatePrivateDefault.ui.enabled", false],
      ["browser.search.separatePrivateDefault.urlbarResult.enabled", false],
      ["browser.search.separatePrivateDefault", true],
      ["browser.urlbar.suggest.searches", true],
    ],
  });

  SearchTestUtils.useMockIdleService();
  await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);

  registerCleanupFunction(async () => {
    let settingsWritten = SearchTestUtils.promiseSearchNotification(
      "write-settings-to-disk-complete"
    );
    await SearchTestUtils.updateRemoteSettingsConfig();
    await settingsWritten;
  });
});

add_task(async function test_nimbus_experiment() {
  Assert.equal(
    Services.search.defaultPrivateEngine.name,
    "basic",
    "Should have basic as private default while not in experiment"
  );
  await ExperimentAPI.ready();

  let reloadObserved =
    SearchTestUtils.promiseSearchNotification("engines-reloaded");

  let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
    featureId: "searchConfiguration",
    value: {
      seperatePrivateDefaultUIEnabled: true,
      seperatePrivateDefaultUrlbarResultEnabled: false,
      experiment: "testing",
    },
  });
  await reloadObserved;
  Assert.equal(
    Services.search.defaultPrivateEngine.name,
    "private",
    "Should have private as private default while in experiment"
  );
  reloadObserved =
    SearchTestUtils.promiseSearchNotification("engines-reloaded");
  await doExperimentCleanup();
  await reloadObserved;
  Assert.equal(
    Services.search.defaultPrivateEngine.name,
    "basic",
    "Should turn off private default and restore default engine after experiment"
  );
});

add_task(async function test_nimbus_experiment_urlbar_result_enabled() {
  Assert.equal(
    Services.search.defaultPrivateEngine.name,
    "basic",
    "Should have basic as private default while not in experiment"
  );
  await ExperimentAPI.ready();

  let reloadObserved =
    SearchTestUtils.promiseSearchNotification("engines-reloaded");

  let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
    featureId: "searchConfiguration",
    value: {
      seperatePrivateDefaultUIEnabled: true,
      seperatePrivateDefaultUrlbarResultEnabled: true,
      experiment: "testing",
    },
  });
  await reloadObserved;
  Assert.equal(
    Services.search.separatePrivateDefaultUrlbarResultEnabled,
    true,
    "Should have set the urlbar result enabled value to true"
  );
  reloadObserved =
    SearchTestUtils.promiseSearchNotification("engines-reloaded");
  await doExperimentCleanup();
  await reloadObserved;
  Assert.equal(
    Services.search.defaultPrivateEngine.name,
    "basic",
    "Should turn off private default and restore default engine after experiment"
  );
});

add_task(async function test_non_experiment_prefs() {
  await SpecialPowers.pushPrefEnv({
    set: [["browser.search.separatePrivateDefault.ui.enabled", false]],
  });
  let uiPref = () =>
    Services.prefs.getBoolPref(
      "browser.search.separatePrivateDefault.ui.enabled"
    );
  Assert.equal(uiPref(), false, "defaulted false");
  await ExperimentAPI.ready();
  let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
    featureId: "privatesearch",
    value: {
      seperatePrivateDefaultUIEnabled: true,
    },
  });
  Assert.equal(uiPref(), false, "Pref did not change without experiment");
  await doExperimentCleanup();
  await SpecialPowers.popPrefEnv();
});