Backed out changeset 820d70c9c0a3 (bug 1955579) Backed out changeset b3c4ae7bc073 (bug 1955579) Backed out changeset 7a78799b24a0 (bug 1955579) Backed out changeset b3ec267e42e0 (bug 1955579)
134 lines
3.8 KiB
JavaScript
134 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.defineESModuleGetters(lazy, {
|
|
RemoteSettings: "resource://services-settings/remote-settings.sys.mjs",
|
|
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(),
|
|
]);
|
|
},
|
|
};
|