tor-browser

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

declined.sys.mjs (2611B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 /**
      6 * This file contains code for maintaining the set of declined engines,
      7 * in conjunction with EngineManager.
      8 */
      9 
     10 import { Log } from "resource://gre/modules/Log.sys.mjs";
     11 
     12 import { CommonUtils } from "resource://services-common/utils.sys.mjs";
     13 import { Observers } from "resource://services-common/observers.sys.mjs";
     14 
     15 export var DeclinedEngines = function (service) {
     16  this._log = Log.repository.getLogger("Sync.Declined");
     17  this._log.manageLevelFromPref("services.sync.log.logger.declined");
     18 
     19  this.service = service;
     20 };
     21 
     22 DeclinedEngines.prototype = {
     23  updateDeclined(meta, engineManager = this.service.engineManager) {
     24    let enabled = new Set(engineManager.getEnabled().map(e => e.name));
     25    let known = new Set(engineManager.getAll().map(e => e.name));
     26    let remoteDeclined = new Set(meta.payload.declined || []);
     27    let localDeclined = new Set(engineManager.getDeclined());
     28 
     29    this._log.debug(
     30      "Handling remote declined: " + JSON.stringify([...remoteDeclined])
     31    );
     32    this._log.debug(
     33      "Handling local declined: " + JSON.stringify([...localDeclined])
     34    );
     35 
     36    // Any engines that are locally enabled should be removed from the remote
     37    // declined list.
     38    //
     39    // Any engines that are locally declined should be added to the remote
     40    // declined list.
     41    let newDeclined = CommonUtils.union(
     42      localDeclined,
     43      CommonUtils.difference(remoteDeclined, enabled)
     44    );
     45 
     46    // If our declined set has changed, put it into the meta object and mark
     47    // it as changed.
     48    let declinedChanged = !CommonUtils.setEqual(newDeclined, remoteDeclined);
     49    this._log.debug("Declined changed? " + declinedChanged);
     50    if (declinedChanged) {
     51      meta.changed = true;
     52      meta.payload.declined = [...newDeclined];
     53    }
     54 
     55    // Update the engine manager regardless.
     56    engineManager.setDeclined(newDeclined);
     57 
     58    // Any engines that are locally known, locally disabled, and not remotely
     59    // or locally declined, are candidates for enablement.
     60    let undecided = CommonUtils.difference(
     61      CommonUtils.difference(known, enabled),
     62      newDeclined
     63    );
     64    if (undecided.size) {
     65      let subject = {
     66        declined: newDeclined,
     67        enabled,
     68        known,
     69        undecided,
     70      };
     71      CommonUtils.nextTick(() => {
     72        Observers.notify("weave:engines:notdeclined", subject);
     73      });
     74    }
     75 
     76    return declinedChanged;
     77  },
     78 };