fune/browser/components/doh/DoHTestUtils.sys.mjs
Cristian Tuns b3bf09cc0d Backed out 6 changesets (bug 1816934, bug 1817182, bug 1817179, bug 1817183) for causing dt failures in browser_jsterm_autocomplete_null.js CLOSED TREE
Backed out changeset 17d4c013ed92 (bug 1817183)
Backed out changeset cfed8d9c23f3 (bug 1817183)
Backed out changeset 62fe2f589efe (bug 1817182)
Backed out changeset 557bd773fb85 (bug 1817179)
Backed out changeset 7f8a7865868b (bug 1816934)
Backed out changeset d6c1d4c0d2a0 (bug 1816934)
2023-02-17 10:51:33 -05:00

138 lines
3.8 KiB
JavaScript

/* 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 lazy = {};
ChromeUtils.defineModuleGetter(
lazy,
"RemoteSettings",
"resource://services-settings/remote-settings.js"
);
ChromeUtils.defineESModuleGetters(lazy, {
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
});
const kConfigCollectionKey = "doh-config";
const kProviderCollectionKey = "doh-providers";
const kConfigUpdateTopic = "doh-config-updated";
const kControllerReloadedTopic = "doh:controller-reloaded";
/*
* Some helpers for loading and modifying DoH config in
* Remote Settings. Call resetRemoteSettingsConfig to set up
* basic default config that omits external URLs. Use
* waitForConfigFlush to wait for DoH actors to pick up changes.
*
* Some tests need to load/reset config while DoH actors are
* uninitialized. Pass waitForConfigFlushes = false in these cases.
*/
export const DoHTestUtils = {
providers: [
{
uri: "https://example.com/1",
UIName: "Example 1",
autoDefault: false,
canonicalName: "",
id: "example-1",
},
{
uri: "https://example.com/2",
UIName: "Example 2",
autoDefault: false,
canonicalName: "",
id: "example-2",
},
],
async loadRemoteSettingsProviders(providers, waitForConfigFlushes = true) {
let configFlushedPromise = this.waitForConfigFlush(waitForConfigFlushes);
let providerRS = lazy.RemoteSettings(kProviderCollectionKey);
let db = await providerRS.db;
await db.importChanges({}, Date.now(), providers, { clear: true });
// Trigger a sync.
await this.triggerSync(providerRS);
await configFlushedPromise;
},
async loadRemoteSettingsConfig(config, waitForConfigFlushes = true) {
let configFlushedPromise = this.waitForConfigFlush(waitForConfigFlushes);
let configRS = lazy.RemoteSettings(kConfigCollectionKey);
let db = await configRS.db;
await db.importChanges({}, Date.now(), [config]);
// Trigger a sync.
await this.triggerSync(configRS);
await configFlushedPromise;
},
// Loads default config for testing without clearing existing entries.
async loadDefaultRemoteSettingsConfig(waitForConfigFlushes = true) {
await this.loadRemoteSettingsProviders(
this.providers,
waitForConfigFlushes
);
await this.loadRemoteSettingsConfig(
{
providers: "example-1, example-2",
rolloutEnabled: false,
steeringEnabled: false,
steeringProviders: "",
autoDefaultEnabled: false,
autoDefaultProviders: "",
id: "global",
},
waitForConfigFlushes
);
},
// Clears existing config AND loads defaults.
async resetRemoteSettingsConfig(waitForConfigFlushes = true) {
let providerRS = lazy.RemoteSettings(kProviderCollectionKey);
let configRS = lazy.RemoteSettings(kConfigCollectionKey);
for (let rs of [providerRS, configRS]) {
let configFlushedPromise = this.waitForConfigFlush(waitForConfigFlushes);
await rs.db.importChanges({}, Date.now(), [], { clear: true });
// Trigger a sync to clear.
await this.triggerSync(rs);
await configFlushedPromise;
}
await this.loadDefaultRemoteSettingsConfig(waitForConfigFlushes);
},
triggerSync(rs) {
return rs.emit("sync", {
data: {
current: [],
},
});
},
waitForConfigUpdate() {
return lazy.TestUtils.topicObserved(kConfigUpdateTopic);
},
waitForControllerReload() {
return lazy.TestUtils.topicObserved(kControllerReloadedTopic);
},
waitForConfigFlush(shouldWait = true) {
if (!shouldWait) {
return Promise.resolve();
}
return Promise.all([
this.waitForConfigUpdate(),
this.waitForControllerReload(),
]);
},
};