tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_remote_settings_release_prefs.js (6849B)


      1 "use strict";
      2 
      3 var nextUniqId = 0;
      4 function getNewUtils() {
      5  const { Utils } = ChromeUtils.importESModule(
      6    `resource://services-settings/Utils.sys.mjs?_${++nextUniqId}`
      7  );
      8  return Utils;
      9 }
     10 
     11 // A collection with a dump that's packaged on all builds where this test runs,
     12 // including on Android at mobile/android/installer/package-manifest.in
     13 const TEST_BUCKET = "main";
     14 const TEST_COLLECTION = "password-recipes";
     15 
     16 async function importData(records) {
     17  await RemoteSettingsWorker._execute("_test_only_import", [
     18    TEST_BUCKET,
     19    TEST_COLLECTION,
     20    records,
     21    records[0]?.last_modified || 0,
     22  ]);
     23 }
     24 
     25 async function clear_state() {
     26  Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "0");
     27  Services.prefs.clearUserPref("services.settings.server");
     28  Services.prefs.clearUserPref("services.settings.preview_enabled");
     29 }
     30 
     31 add_setup(async function () {
     32  // Set this env vars in order to test the code path where the
     33  // server URL can only be overridden from Dev Tools.
     34  // See `isRunningTests` in `services/settings/Utils.sys.mjs`.
     35  const before = Services.env.get("MOZ_DISABLE_NONLOCAL_CONNECTIONS");
     36  Services.env.set("MOZ_DISABLE_NONLOCAL_CONNECTIONS", "0");
     37 
     38  registerCleanupFunction(() => {
     39    clear_state();
     40    Services.env.set("MOZ_DISABLE_NONLOCAL_CONNECTIONS", before);
     41  });
     42 });
     43 
     44 add_task(clear_state);
     45 
     46 add_task(
     47  {
     48    skip_if: () => !AppConstants.RELEASE_OR_BETA,
     49  },
     50  async function test_server_url_cannot_be_toggled_in_release() {
     51    Services.prefs.setStringPref(
     52      "services.settings.server",
     53      "http://localhost:8888/v1"
     54    );
     55 
     56    const Utils = getNewUtils();
     57 
     58    Assert.equal(
     59      Utils.SERVER_URL,
     60      AppConstants.REMOTE_SETTINGS_SERVER_URL,
     61      "Server url pref was not read in release"
     62    );
     63  }
     64 );
     65 
     66 add_task(
     67  {
     68    skip_if: () => AppConstants.RELEASE_OR_BETA,
     69  },
     70  async function test_server_url_cannot_be_toggled_in_dev_nightly() {
     71    Services.prefs.setStringPref(
     72      "services.settings.server",
     73      "http://localhost:8888/v1"
     74    );
     75 
     76    const Utils = getNewUtils();
     77 
     78    Assert.notEqual(
     79      Utils.SERVER_URL,
     80      AppConstants.REMOTE_SETTINGS_SERVER_URL,
     81      "Server url pref was read in nightly/dev"
     82    );
     83  }
     84 );
     85 add_task(clear_state);
     86 
     87 add_task(
     88  {
     89    skip_if: () => !AppConstants.RELEASE_OR_BETA,
     90  },
     91  async function test_preview_mode_cannot_be_toggled_in_release() {
     92    Services.prefs.setBoolPref("services.settings.preview_enabled", true);
     93 
     94    const Utils = getNewUtils();
     95 
     96    Assert.ok(!Utils.PREVIEW_MODE, "Preview mode pref was not read in release");
     97  }
     98 );
     99 add_task(clear_state);
    100 
    101 add_task(
    102  {
    103    skip_if: () => AppConstants.RELEASE_OR_BETA,
    104  },
    105  async function test_preview_mode_cannot_be_toggled_in_dev_nightly() {
    106    Services.prefs.setBoolPref("services.settings.preview_enabled", true);
    107 
    108    const Utils = getNewUtils();
    109 
    110    Assert.ok(Utils.PREVIEW_MODE, "Preview mode pref is read in dev/nightly");
    111  }
    112 );
    113 add_task(clear_state);
    114 
    115 add_task(
    116  {
    117    skip_if: () => !AppConstants.RELEASE_OR_BETA,
    118  },
    119  async function test_load_dumps_will_always_be_loaded_in_release() {
    120    Services.prefs.setStringPref(
    121      "services.settings.server",
    122      "http://localhost:8888/v1"
    123    );
    124 
    125    const Utils = getNewUtils();
    126 
    127    Assert.equal(
    128      Utils.SERVER_URL,
    129      AppConstants.REMOTE_SETTINGS_SERVER_URL,
    130      "Server url pref was not read"
    131    );
    132    Assert.ok(Utils.LOAD_DUMPS, "Dumps will always be loaded");
    133  }
    134 );
    135 
    136 add_task(
    137  {
    138    skip_if: () => AppConstants.RELEASE_OR_BETA,
    139  },
    140  async function test_load_dumps_can_be_disabled_in_dev_nightly() {
    141    Services.prefs.setStringPref(
    142      "services.settings.server",
    143      "http://localhost:8888/v1"
    144    );
    145 
    146    const Utils = getNewUtils();
    147 
    148    Assert.notEqual(
    149      Utils.SERVER_URL,
    150      AppConstants.REMOTE_SETTINGS_SERVER_URL,
    151      "Server url pref was read"
    152    );
    153    Assert.ok(!Utils.LOAD_DUMPS, "Dumps are not loaded if server is not prod");
    154  }
    155 );
    156 add_task(clear_state);
    157 
    158 add_task(
    159  async function test_server_url_can_be_changed_in_all_versions_if_running_for_devtools() {
    160    Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
    161    Services.prefs.setStringPref(
    162      "services.settings.server",
    163      "http://localhost:8888/v1"
    164    );
    165 
    166    const Utils = getNewUtils();
    167 
    168    Assert.notEqual(
    169      Utils.SERVER_URL,
    170      AppConstants.REMOTE_SETTINGS_SERVER_URL,
    171      "Server url pref was read"
    172    );
    173  }
    174 );
    175 add_task(clear_state);
    176 
    177 add_task(
    178  async function test_preview_mode_can_be_changed_in_all_versions_if_running_for_devtools() {
    179    Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
    180    Services.prefs.setBoolPref("services.settings.preview_enabled", true);
    181 
    182    const Utils = getNewUtils();
    183 
    184    Assert.ok(Utils.PREVIEW_MODE, "Preview mode pref was read");
    185  }
    186 );
    187 add_task(clear_state);
    188 
    189 add_task(
    190  async function test_dumps_are_not_loaded_if_server_is_not_prod_if_running_for_devtools() {
    191    Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
    192    Services.prefs.setStringPref(
    193      "services.settings.server",
    194      "http://localhost:8888/v1"
    195    );
    196 
    197    const Utils = getNewUtils();
    198    Assert.ok(!Utils.LOAD_DUMPS, "Dumps won't be loaded");
    199 
    200    // The section below ensures that the LOAD_DUMPS flag properly takes effect.
    201    // The client is set up here rather than add_setup to avoid triggering the
    202    // lazy getters that are behind the global Utils.LOAD_DUMPS. If they are
    203    // triggered too early, then they will potentially cache different values
    204    // for the server urls and environment variables and this test then won't be
    205    // testing what we expect it to.
    206 
    207    let client = new RemoteSettingsClient(TEST_COLLECTION);
    208 
    209    const dump = await SharedUtils.loadJSONDump(TEST_BUCKET, TEST_COLLECTION);
    210    let DUMP_LAST_MODIFIED = dump.timestamp;
    211 
    212    // Dump is updated regularly, verify that the dump matches our expectations
    213    // before running the test.
    214    Assert.greater(
    215      DUMP_LAST_MODIFIED,
    216      1234,
    217      "Assuming dump to be newer than dummy 1234"
    218    );
    219 
    220    await client.db.clear();
    221    await importData([{ last_modified: 1234, id: "dummy" }]);
    222 
    223    const after = await client.get();
    224    Assert.deepEqual(
    225      after,
    226      [{ last_modified: 1234, id: "dummy" }],
    227      "Should have kept the original import"
    228    );
    229    Assert.equal(
    230      await client.getLastModified(),
    231      1234,
    232      "Should have kept the import's timestamp"
    233    );
    234    await client.db.clear();
    235  }
    236 );
    237 add_task(clear_state);
    238 
    239 add_task(
    240  async function test_dumps_are_loaded_if_server_is_prod_if_running_for_devtools() {
    241    Services.env.set("MOZ_REMOTE_SETTINGS_DEVTOOLS", "1");
    242    Services.prefs.setStringPref(
    243      "services.settings.server",
    244      AppConstants.REMOTE_SETTINGS_SERVER_URL
    245    );
    246 
    247    const Utils = getNewUtils();
    248 
    249    Assert.ok(Utils.LOAD_DUMPS, "dumps are loaded if prod");
    250  }
    251 );
    252 add_task(clear_state);