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/. */
11 debug = function (s) { dump("-*- PermissionPromptService: " + s + "\n"); };
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);
34 return Cc["@mozilla.org/content-permission/prompt;1"].createInstance(Ci.nsIContentPermissionPrompt);
37 function PermissionPromptService()
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]
55 * Ask for permission for an API, device, etc.
56 * @param nsIContentPermissionRequest aRequest
59 getPermission: function PS_getPermission(aRequest)
61 if (!(aRequest instanceof Ci.nsIContentPermissionRequest)) {
62 throw new Error("PermissionService.getPermission: "
63 + "2nd argument must be type 'nsIContentPermissionRequest'");
66 // Only allow exactly one permission request here.
67 let types = aRequest.types.QueryInterface(Ci.nsIArray);
68 if (types.length != 1) {
72 let reqType = types.queryElementAt(0, Ci.nsIContentPermissionType);
74 let type = reqType.access !== "unused" ? reqType.type + "-" + reqType.access
77 permissionManager.testExactPermissionFromPrincipal(aRequest.principal, type);
80 case Ci.nsIPermissionManager.ALLOW_ACTION:
83 case Ci.nsIPermissionManager.PROMPT_ACTION:
84 makePrompt().prompt(aRequest);
86 case Ci.nsIPermissionManager.DENY_ACTION:
87 case Ci.nsIPermissionManager.UNKNOWN_ACTION:
95 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PermissionPromptService]);