tor-browser

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

test_activeStatus.js (5733B)


      1 /*
      2 * Test for status handling in Form Autofill Parent.
      3 */
      4 
      5 "use strict";
      6 
      7 let FormAutofillStatus;
      8 
      9 add_setup(async () => {
     10  ({ FormAutofillStatus } = ChromeUtils.importESModule(
     11    "resource://autofill/FormAutofillParent.sys.mjs"
     12  ));
     13 });
     14 
     15 add_task(async function test_activeStatus_init() {
     16  sinon.spy(FormAutofillStatus, "updateStatus");
     17 
     18  // Default status is null before initialization
     19  Assert.equal(FormAutofillStatus._active, null);
     20  Assert.equal(Services.ppmm.sharedData.get("FormAutofill:enabled"), undefined);
     21 
     22  FormAutofillStatus.init();
     23  // init shouldn't call updateStatus since that requires storage which will
     24  // lead to startup time regressions.
     25  Assert.equal(FormAutofillStatus.updateStatus.called, false);
     26  Assert.equal(Services.ppmm.sharedData.get("FormAutofill:enabled"), undefined);
     27 
     28  // Initialize profile storage
     29  await FormAutofillStatus.formAutofillStorage.initialize();
     30  await FormAutofillStatus.updateSavedFieldNames();
     31  // Upon first initializing profile storage, status should be computed.
     32  Assert.equal(FormAutofillStatus.updateStatus.called, true);
     33  Assert.equal(Services.ppmm.sharedData.get("FormAutofill:enabled"), false);
     34 
     35  FormAutofillStatus.uninit();
     36 });
     37 
     38 add_task(async function test_activeStatus_observe() {
     39  FormAutofillStatus.init();
     40  sinon.stub(FormAutofillStatus, "computeStatus");
     41  sinon.spy(FormAutofillStatus, "onStatusChanged");
     42 
     43  // _active = _computeStatus() => No need to trigger _onStatusChanged
     44  FormAutofillStatus._active = true;
     45  FormAutofillStatus.computeStatus.returns(true);
     46  FormAutofillStatus.observe(
     47    null,
     48    "nsPref:changed",
     49    "extensions.formautofill.addresses.enabled"
     50  );
     51  FormAutofillStatus.observe(
     52    null,
     53    "nsPref:changed",
     54    "extensions.formautofill.creditCards.enabled"
     55  );
     56  Assert.equal(FormAutofillStatus.onStatusChanged.called, false);
     57 
     58  // _active != computeStatus() => Need to trigger onStatusChanged
     59  FormAutofillStatus.computeStatus.returns(false);
     60  FormAutofillStatus.onStatusChanged.resetHistory();
     61  FormAutofillStatus.observe(
     62    null,
     63    "nsPref:changed",
     64    "extensions.formautofill.addresses.enabled"
     65  );
     66  FormAutofillStatus.observe(
     67    null,
     68    "nsPref:changed",
     69    "extensions.formautofill.creditCards.enabled"
     70  );
     71  Assert.equal(FormAutofillStatus.onStatusChanged.called, true);
     72 
     73  // profile changed => Need to trigger _onStatusChanged
     74  await Promise.all(
     75    ["add", "update", "remove", "reconcile"].map(async event => {
     76      FormAutofillStatus.computeStatus.returns(!FormAutofillStatus._active);
     77      FormAutofillStatus.onStatusChanged.resetHistory();
     78      await FormAutofillStatus.observe(
     79        null,
     80        "formautofill-storage-changed",
     81        event
     82      );
     83      Assert.equal(FormAutofillStatus.onStatusChanged.called, true);
     84    })
     85  );
     86 
     87  // profile metadata updated => No need to trigger onStatusChanged
     88  FormAutofillStatus.computeStatus.returns(!FormAutofillStatus._active);
     89  FormAutofillStatus.onStatusChanged.resetHistory();
     90  await FormAutofillStatus.observe(
     91    null,
     92    "formautofill-storage-changed",
     93    "notifyUsed"
     94  );
     95  Assert.equal(FormAutofillStatus.onStatusChanged.called, false);
     96 
     97  FormAutofillStatus.computeStatus.restore();
     98 });
     99 
    100 add_task(async function test_activeStatus_computeStatus() {
    101  registerCleanupFunction(function cleanup() {
    102    Services.prefs.clearUserPref("extensions.formautofill.addresses.enabled");
    103    Services.prefs.clearUserPref("extensions.formautofill.creditCards.enabled");
    104  });
    105 
    106  sinon.stub(
    107    FormAutofillStatus.formAutofillStorage.addresses,
    108    "getSavedFieldNames"
    109  );
    110  FormAutofillStatus.formAutofillStorage.addresses.getSavedFieldNames.returns(
    111    Promise.resolve(new Set())
    112  );
    113  sinon.stub(
    114    FormAutofillStatus.formAutofillStorage.creditCards,
    115    "getSavedFieldNames"
    116  );
    117  FormAutofillStatus.formAutofillStorage.creditCards.getSavedFieldNames.returns(
    118    Promise.resolve(new Set())
    119  );
    120 
    121  // pref is enabled and profile is empty.
    122  Services.prefs.setBoolPref("extensions.formautofill.addresses.enabled", true);
    123  Services.prefs.setBoolPref(
    124    "extensions.formautofill.creditCards.enabled",
    125    true
    126  );
    127  Assert.equal(FormAutofillStatus.computeStatus(), false);
    128 
    129  // pref is disabled and profile is empty.
    130  Services.prefs.setBoolPref(
    131    "extensions.formautofill.addresses.enabled",
    132    false
    133  );
    134  Services.prefs.setBoolPref(
    135    "extensions.formautofill.creditCards.enabled",
    136    false
    137  );
    138  Assert.equal(FormAutofillStatus.computeStatus(), false);
    139 
    140  FormAutofillStatus.formAutofillStorage.addresses.getSavedFieldNames.returns(
    141    Promise.resolve(new Set(["given-name"]))
    142  );
    143  await FormAutofillStatus.observe(null, "formautofill-storage-changed", "add");
    144 
    145  // pref is enabled and profile is not empty.
    146  Services.prefs.setBoolPref("extensions.formautofill.addresses.enabled", true);
    147  Assert.equal(FormAutofillStatus.computeStatus(), true);
    148 
    149  // pref is partial enabled and profile is not empty.
    150  Services.prefs.setBoolPref("extensions.formautofill.addresses.enabled", true);
    151  Services.prefs.setBoolPref(
    152    "extensions.formautofill.creditCards.enabled",
    153    false
    154  );
    155  Assert.equal(FormAutofillStatus.computeStatus(), true);
    156  Services.prefs.setBoolPref(
    157    "extensions.formautofill.addresses.enabled",
    158    false
    159  );
    160  Services.prefs.setBoolPref(
    161    "extensions.formautofill.creditCards.enabled",
    162    true
    163  );
    164  Assert.equal(FormAutofillStatus.computeStatus(), true);
    165 
    166  // pref is disabled and profile is not empty.
    167  Services.prefs.setBoolPref(
    168    "extensions.formautofill.addresses.enabled",
    169    false
    170  );
    171  Services.prefs.setBoolPref(
    172    "extensions.formautofill.creditCards.enabled",
    173    false
    174  );
    175  Assert.equal(FormAutofillStatus.computeStatus(), false);
    176 });