dom/permission/PermissionPromptService.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/permission/PermissionPromptService.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,95 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     1.6 + * You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +"use strict";
     1.9 +
    1.10 +/* static functions */
    1.11 +let DEBUG = 0;
    1.12 +let debug;
    1.13 +if (DEBUG) {
    1.14 +  debug = function (s) { dump("-*- PermissionPromptService: " + s + "\n"); };
    1.15 +}
    1.16 +else {
    1.17 +  debug = function (s) {};
    1.18 +}
    1.19 +
    1.20 +const Cc = Components.classes;
    1.21 +const Ci = Components.interfaces;
    1.22 +const Cu = Components.utils;
    1.23 +
    1.24 +Cu.import("resource://gre/modules/XPCOMUtils.jsm");
    1.25 +Cu.import("resource://gre/modules/Services.jsm");
    1.26 +Cu.import("resource://gre/modules/PermissionsInstaller.jsm");
    1.27 +
    1.28 +const PERMISSIONPROMPTSERVICE_CONTRACTID = "@mozilla.org/permission-prompt-service;1";
    1.29 +const PERMISSIONPROMPTSERVICE_CID = Components.ID("{e5f953b3-a6ca-444e-a88d-cdc81383741c}");
    1.30 +const permissionPromptService = Ci.nsIPermissionPromptService;
    1.31 +
    1.32 +var permissionManager = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
    1.33 +var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager);
    1.34 +
    1.35 +function makePrompt()
    1.36 +{
    1.37 +  return Cc["@mozilla.org/content-permission/prompt;1"].createInstance(Ci.nsIContentPermissionPrompt);
    1.38 +}
    1.39 +
    1.40 +function PermissionPromptService()
    1.41 +{
    1.42 +  debug("Constructor");
    1.43 +}
    1.44 +
    1.45 +PermissionPromptService.prototype = {
    1.46 +
    1.47 +  classID : PERMISSIONPROMPTSERVICE_CID,
    1.48 +
    1.49 +  QueryInterface : XPCOMUtils.generateQI([permissionPromptService, Ci.nsIObserver]),
    1.50 +
    1.51 +  classInfo : XPCOMUtils.generateCI({classID: PERMISSIONPROMPTSERVICE_CID,
    1.52 +                                     contractID: PERMISSIONPROMPTSERVICE_CONTRACTID,
    1.53 +                                     classDescription: "PermissionPromptService",
    1.54 +                                     interfaces: [permissionPromptService]
    1.55 +                                     }),
    1.56 +  /**
    1.57 +   * getPermission
    1.58 +   *   Ask for permission for an API, device, etc.
    1.59 +   * @param nsIContentPermissionRequest aRequest
    1.60 +   * @returns void
    1.61 +   **/
    1.62 +  getPermission: function PS_getPermission(aRequest)
    1.63 +  {
    1.64 +    if (!(aRequest instanceof Ci.nsIContentPermissionRequest)) {
    1.65 +      throw new Error("PermissionService.getPermission: "
    1.66 +                      + "2nd argument must be type 'nsIContentPermissionRequest'");
    1.67 +    }
    1.68 +
    1.69 +    // Only allow exactly one permission request here.
    1.70 +    let types = aRequest.types.QueryInterface(Ci.nsIArray);
    1.71 +    if (types.length != 1) {
    1.72 +      aRequest.cancel();
    1.73 +      return;
    1.74 +    }
    1.75 +    let reqType = types.queryElementAt(0, Ci.nsIContentPermissionType);
    1.76 +
    1.77 +    let type = reqType.access !== "unused" ? reqType.type + "-" + reqType.access
    1.78 +                                           : reqType.type;
    1.79 +    let perm =
    1.80 +      permissionManager.testExactPermissionFromPrincipal(aRequest.principal, type);
    1.81 +
    1.82 +    switch (perm) {
    1.83 +      case Ci.nsIPermissionManager.ALLOW_ACTION:
    1.84 +        aRequest.allow();
    1.85 +        break;
    1.86 +      case Ci.nsIPermissionManager.PROMPT_ACTION:
    1.87 +        makePrompt().prompt(aRequest);
    1.88 +        break;
    1.89 +      case Ci.nsIPermissionManager.DENY_ACTION:
    1.90 +      case Ci.nsIPermissionManager.UNKNOWN_ACTION:
    1.91 +    default:
    1.92 +      aRequest.cancel();
    1.93 +      break;
    1.94 +    }
    1.95 +  },
    1.96 +};
    1.97 +
    1.98 +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PermissionPromptService]);

mercurial