dom/permission/PermissionPromptService.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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 file,
     3  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 "use strict";
     7 /* static functions */
     8 let DEBUG = 0;
     9 let debug;
    10 if (DEBUG) {
    11   debug = function (s) { dump("-*- PermissionPromptService: " + s + "\n"); };
    12 }
    13 else {
    14   debug = function (s) {};
    15 }
    17 const Cc = Components.classes;
    18 const Ci = Components.interfaces;
    19 const Cu = Components.utils;
    21 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    22 Cu.import("resource://gre/modules/Services.jsm");
    23 Cu.import("resource://gre/modules/PermissionsInstaller.jsm");
    25 const PERMISSIONPROMPTSERVICE_CONTRACTID = "@mozilla.org/permission-prompt-service;1";
    26 const PERMISSIONPROMPTSERVICE_CID = Components.ID("{e5f953b3-a6ca-444e-a88d-cdc81383741c}");
    27 const permissionPromptService = Ci.nsIPermissionPromptService;
    29 var permissionManager = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
    30 var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager);
    32 function makePrompt()
    33 {
    34   return Cc["@mozilla.org/content-permission/prompt;1"].createInstance(Ci.nsIContentPermissionPrompt);
    35 }
    37 function PermissionPromptService()
    38 {
    39   debug("Constructor");
    40 }
    42 PermissionPromptService.prototype = {
    44   classID : PERMISSIONPROMPTSERVICE_CID,
    46   QueryInterface : XPCOMUtils.generateQI([permissionPromptService, Ci.nsIObserver]),
    48   classInfo : XPCOMUtils.generateCI({classID: PERMISSIONPROMPTSERVICE_CID,
    49                                      contractID: PERMISSIONPROMPTSERVICE_CONTRACTID,
    50                                      classDescription: "PermissionPromptService",
    51                                      interfaces: [permissionPromptService]
    52                                      }),
    53   /**
    54    * getPermission
    55    *   Ask for permission for an API, device, etc.
    56    * @param nsIContentPermissionRequest aRequest
    57    * @returns void
    58    **/
    59   getPermission: function PS_getPermission(aRequest)
    60   {
    61     if (!(aRequest instanceof Ci.nsIContentPermissionRequest)) {
    62       throw new Error("PermissionService.getPermission: "
    63                       + "2nd argument must be type 'nsIContentPermissionRequest'");
    64     }
    66     // Only allow exactly one permission request here.
    67     let types = aRequest.types.QueryInterface(Ci.nsIArray);
    68     if (types.length != 1) {
    69       aRequest.cancel();
    70       return;
    71     }
    72     let reqType = types.queryElementAt(0, Ci.nsIContentPermissionType);
    74     let type = reqType.access !== "unused" ? reqType.type + "-" + reqType.access
    75                                            : reqType.type;
    76     let perm =
    77       permissionManager.testExactPermissionFromPrincipal(aRequest.principal, type);
    79     switch (perm) {
    80       case Ci.nsIPermissionManager.ALLOW_ACTION:
    81         aRequest.allow();
    82         break;
    83       case Ci.nsIPermissionManager.PROMPT_ACTION:
    84         makePrompt().prompt(aRequest);
    85         break;
    86       case Ci.nsIPermissionManager.DENY_ACTION:
    87       case Ci.nsIPermissionManager.UNKNOWN_ACTION:
    88     default:
    89       aRequest.cancel();
    90       break;
    91     }
    92   },
    93 };
    95 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PermissionPromptService]);

mercurial