summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_eventpage_settings.js
blob: 8c36f4ef03fdab451477ef18dc5b684558fb028e (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
156
157
158
159
160
161
"use strict";

ChromeUtils.defineESModuleGetters(this, {
  AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
  Preferences: "resource://gre/modules/Preferences.sys.mjs",
});

AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();

AddonTestUtils.createAppInfo(
  "xpcshell@tests.mozilla.org",
  "XPCShell",
  "42",
  "42"
);

Services.prefs.setBoolPref("extensions.eventPages.enabled", true);

add_task(async function setup() {
  await AddonTestUtils.promiseStartupManager();

  // Create an object to hold the values to which we will initialize the prefs.
  const PREFS = {
    "browser.cache.disk.enable": true,
    "browser.cache.memory.enable": true,
  };

  // Set prefs to our initial values.
  for (let pref in PREFS) {
    Preferences.set(pref, PREFS[pref]);
  }

  registerCleanupFunction(() => {
    // Reset the prefs.
    for (let pref in PREFS) {
      Preferences.reset(pref);
    }
  });
});

// Other tests exist for all the settings, this smoke tests that the
// settings will startup an event page.
add_task(async function test_browser_settings() {
  let setExt = ExtensionTestUtils.loadExtension({
    useAddonManager: "permanent",
    manifest: {
      permissions: ["browserSettings", "privacy"],
    },
    background() {
      browser.test.onMessage.addListener(async (msg, apiName, value) => {
        let apiObj = apiName.split(".").reduce((o, i) => o[i], browser);
        let result = await apiObj.set({ value });
        if (msg === "set") {
          browser.test.assertTrue(result, "set returns true.");
        } else {
          browser.test.assertFalse(result, "set returns false for a no-op.");
        }
      });
    },
  });
  await setExt.startup();

  let extension = ExtensionTestUtils.loadExtension({
    useAddonManager: "permanent",
    manifest: {
      permissions: ["browserSettings", "privacy"],
      background: { persistent: false },
    },
    background() {
      browser.browserSettings.cacheEnabled.onChange.addListener(() => {
        browser.test.log("cacheEnabled received");
        browser.test.sendMessage("cacheEnabled");
      });
      browser.browserSettings.homepageOverride.onChange.addListener(() => {
        browser.test.sendMessage("homepageOverride");
      });
      browser.browserSettings.newTabPageOverride.onChange.addListener(() => {
        browser.test.sendMessage("newTabPageOverride");
      });
      browser.privacy.services.passwordSavingEnabled.onChange.addListener(
        () => {
          browser.test.sendMessage("passwordSavingEnabled");
        }
      );
    },
  });
  await extension.startup();

  await extension.terminateBackground({ disableResetIdleForTest: true });
  assertPersistentListeners(extension, "browserSettings", "cacheEnabled", {
    primed: true,
  });

  info(`testing cacheEnabled`);
  setExt.sendMessage("set", "browserSettings.cacheEnabled", false);
  await extension.awaitMessage("cacheEnabled");
  ok(true, "cacheEnabled.onChange fired");

  await extension.terminateBackground({ disableResetIdleForTest: true });
  assertPersistentListeners(extension, "browserSettings", "homepageOverride", {
    primed: true,
  });

  info(`testing homepageOverride`);
  Preferences.set("browser.startup.homepage", "http://homepage.example.com");
  await extension.awaitMessage("homepageOverride");
  ok(true, "homepageOverride.onChange fired");

  if (
    AppConstants.platform !== "android" &&
    AppConstants.MOZ_APP_NAME !== "thunderbird"
  ) {
    await extension.terminateBackground({ disableResetIdleForTest: true });
    assertPersistentListeners(
      extension,
      "browserSettings",
      "newTabPageOverride",
      {
        primed: true,
      }
    );

    info(`testing newTabPageOverride`);
    AboutNewTab.newTabURL = "http://homepage.example.com";
    await extension.awaitMessage("newTabPageOverride");
    ok(true, "newTabPageOverride.onChange fired");
  }

  await extension.terminateBackground({ disableResetIdleForTest: true });
  assertPersistentListeners(
    extension,
    "privacy",
    "services.passwordSavingEnabled",
    {
      primed: true,
    }
  );

  info(`testing passwordSavingEnabled`);
  setExt.sendMessage("set", "privacy.services.passwordSavingEnabled", true);
  await extension.awaitMessage("passwordSavingEnabled");
  ok(true, "passwordSavingEnabled.onChange fired");

  await AddonTestUtils.promiseRestartManager();
  await setExt.awaitStartup();
  await extension.awaitStartup();
  Services.obs.notifyObservers(null, "browser-delayed-startup-finished");

  assertPersistentListeners(extension, "browserSettings", "homepageOverride", {
    primed: true,
  });

  info(`testing homepageOverride after AOM restart`);
  Preferences.set("browser.startup.homepage", "http://test.example.com");
  await extension.awaitMessage("homepageOverride");
  ok(true, "homepageOverride.onChange fired");

  await extension.unload();
  await setExt.unload();
});