PermissionPromptService.js 3.1 KB

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