forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			133 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(),
 | 
						|
    ]);
 | 
						|
  },
 | 
						|
};
 |