Bumping gaia.json for 1 gaia revision(s) a=gaia-bump
[gecko.git] / dom / permission / PermissionPromptService.js
blobebb0080fdac527aa54f302c7e0fb7ef8efbdfd98
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"); };
13 else {
14   debug = function (s) {};
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()
34   return Cc["@mozilla.org/content-permission/prompt;1"].createInstance(Ci.nsIContentPermissionPrompt);
37 function PermissionPromptService()
39   debug("Constructor");
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   },
95 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PermissionPromptService]);