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]);