tor-browser

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

MockPermissionPrompt.sys.mjs (2178B)


      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 const Cm = Components.manager;
      6 
      7 const CONTRACT_ID = "@mozilla.org/content-permission/prompt;1";
      8 
      9 var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
     10 var oldClassID, oldFactory;
     11 var newClassID = Services.uuid.generateUUID();
     12 var newFactory = {
     13  createInstance(aIID) {
     14    return new MockPermissionPromptInstance().QueryInterface(aIID);
     15  },
     16  QueryInterface: ChromeUtils.generateQI(["nsIFactory"]),
     17 };
     18 
     19 export var MockPermissionPrompt = {
     20  init() {
     21    this.reset();
     22    if (!registrar.isCIDRegistered(newClassID)) {
     23      try {
     24        oldClassID = registrar.contractIDToCID(CONTRACT_ID);
     25        oldFactory = Cm.getClassObject(Cc[CONTRACT_ID], Ci.nsIFactory);
     26      } catch (ex) {
     27        oldClassID = "";
     28        oldFactory = null;
     29        dump(
     30          "TEST-INFO | can't get permission prompt registered component, " +
     31            "assuming there is none"
     32        );
     33      }
     34      if (oldFactory) {
     35        registrar.unregisterFactory(oldClassID, oldFactory);
     36      }
     37      registrar.registerFactory(newClassID, "", CONTRACT_ID, newFactory);
     38    }
     39  },
     40 
     41  reset() {},
     42 
     43  cleanup() {
     44    this.reset();
     45    if (oldFactory) {
     46      registrar.unregisterFactory(newClassID, newFactory);
     47      registrar.registerFactory(oldClassID, "", CONTRACT_ID, oldFactory);
     48    }
     49  },
     50 };
     51 
     52 function MockPermissionPromptInstance() {}
     53 MockPermissionPromptInstance.prototype = {
     54  QueryInterface: ChromeUtils.generateQI(["nsIContentPermissionPrompt"]),
     55 
     56  promptResult: Ci.nsIPermissionManager.UNKNOWN_ACTION,
     57 
     58  prompt(request) {
     59    let perms = request.types.QueryInterface(Ci.nsIArray);
     60    for (let idx = 0; idx < perms.length; idx++) {
     61      let perm = perms.queryElementAt(idx, Ci.nsIContentPermissionType);
     62      if (
     63        Services.perms.testExactPermissionFromPrincipal(
     64          request.principal,
     65          perm.type
     66        ) != Ci.nsIPermissionManager.ALLOW_ACTION
     67      ) {
     68        request.cancel();
     69        return;
     70      }
     71    }
     72 
     73    request.allow();
     74  },
     75 };