testing/specialpowers/content/MockPermissionPrompt.jsm

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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/. */
     5 this.EXPORTED_SYMBOLS = ["MockPermissionPrompt"];
     7 const Cc = Components.classes;
     8 const Ci = Components.interfaces;
     9 const Cm = Components.manager;
    10 const Cu = Components.utils;
    12 const CONTRACT_ID = "@mozilla.org/content-permission/prompt;1";
    14 Cu.import("resource://gre/modules/FileUtils.jsm");
    15 Cu.import("resource://gre/modules/Services.jsm");
    16 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    18 var registrar = Cm.QueryInterface(Ci.nsIComponentRegistrar);
    19 var oldClassID, oldFactory;
    20 var newClassID = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator).generateUUID();
    21 var newFactory = {
    22   createInstance: function(aOuter, aIID) {
    23     if (aOuter)
    24       throw Components.results.NS_ERROR_NO_AGGREGATION;
    25     return new MockPermissionPromptInstance().QueryInterface(aIID);
    26   },
    27   lockFactory: function(aLock) {
    28     throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
    29   },
    30   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory])
    31 };
    33 this.MockPermissionPrompt = {
    34   init: function() {
    35     this.reset();
    36     if (!registrar.isCIDRegistered(newClassID)) {
    37       try {
    38         oldClassID = registrar.contractIDToCID(CONTRACT_ID);
    39         oldFactory = Cm.getClassObject(Cc[CONTRACT_ID], Ci.nsIFactory);
    40       } catch (ex) {
    41         oldClassID = "";
    42         oldFactory = null;
    43         dump("TEST-INFO | can't get permission prompt registered component, " +
    44             "assuming there is none");
    45       }
    46       if (oldFactory) {
    47         registrar.unregisterFactory(oldClassID, oldFactory);
    48       }
    49       registrar.registerFactory(newClassID, "", CONTRACT_ID, newFactory);
    50     }
    51   },
    53   reset: function() {
    54   },
    56   cleanup: function() {
    57     this.reset();
    58     if (oldFactory) {
    59       registrar.unregisterFactory(newClassID, newFactory);
    60       registrar.registerFactory(oldClassID, "", CONTRACT_ID, oldFactory);
    61     }
    62   },
    63 };
    65 function MockPermissionPromptInstance() { };
    66 MockPermissionPromptInstance.prototype = {
    67   QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionPrompt]),
    69   promptResult: Ci.nsIPermissionManager.UNKNOWN_ACTION,
    71   prompt: function(request) {
    73     let perms = request.types.QueryInterface(Ci.nsIArray);
    74     for (let idx = 0; idx < perms.length; idx++) {
    75       let perm = perms.queryElementAt(idx, Ci.nsIContentPermissionType);
    76       if (Services.perms.testExactPermissionFromPrincipal(
    77            request.principal, perm.type) != Ci.nsIPermissionManager.ALLOW_ACTION) {
    78         request.cancel();
    79         return;
    80       }
    81     }
    83     request.allow();
    84   }
    85 };
    87 // Expose everything to content. We call reset() here so that all of the relevant
    88 // lazy expandos get added.
    89 MockPermissionPrompt.reset();
    90 function exposeAll(obj) {
    91   var props = {};
    92   for (var prop in obj)
    93     props[prop] = 'rw';
    94   obj.__exposedProps__ = props;
    95 }
    96 exposeAll(MockPermissionPrompt);
    97 exposeAll(MockPermissionPromptInstance.prototype);

mercurial