2012-09-19 11:19:00 -07:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
let DEBUG = 0;
|
|
|
|
if (DEBUG)
|
|
|
|
debug = function (s) { dump("-*- PermissionSettings Module: " + s + "\n"); }
|
|
|
|
else
|
|
|
|
debug = function (s) {}
|
|
|
|
|
2012-09-28 15:16:29 -07:00
|
|
|
const Cu = Components.utils;
|
2012-09-19 11:19:00 -07:00
|
|
|
const Cc = Components.classes;
|
|
|
|
const Ci = Components.interfaces;
|
|
|
|
|
|
|
|
let EXPORTED_SYMBOLS = ["PermissionSettingsModule"];
|
|
|
|
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(this, "ppmm",
|
|
|
|
"@mozilla.org/parentprocessmessagemanager;1",
|
|
|
|
"nsIMessageListenerManager");
|
|
|
|
|
|
|
|
var permissionManager = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
|
|
|
|
var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager);
|
|
|
|
var appsService = Cc["@mozilla.org/AppsService;1"].getService(Ci.nsIAppsService);
|
|
|
|
|
|
|
|
let PermissionSettingsModule = {
|
|
|
|
init: function() {
|
|
|
|
debug("Init");
|
|
|
|
ppmm.addMessageListener("PermissionSettings:AddPermission", this);
|
|
|
|
Services.obs.addObserver(this, "profile-before-change", false);
|
|
|
|
},
|
|
|
|
|
|
|
|
addPermission: function(aData, aCallbacks) {
|
|
|
|
let uri = Services.io.newURI(aData.origin, null, null);
|
|
|
|
let appID = appsService.getAppLocalIdByManifestURL(aData.manifestURL);
|
|
|
|
let principal = secMan.getAppCodebasePrincipal(uri, appID, aData.browserFlag);
|
|
|
|
|
|
|
|
let action;
|
|
|
|
switch (aData.value)
|
|
|
|
{
|
|
|
|
case "unknown":
|
|
|
|
action = Ci.nsIPermissionManager.UNKNOWN_ACTION;
|
|
|
|
break;
|
|
|
|
case "allow":
|
|
|
|
action = Ci.nsIPermissionManager.ALLOW_ACTION;
|
|
|
|
break;
|
|
|
|
case "deny":
|
|
|
|
action = Ci.nsIPermissionManager.DENY_ACTION;
|
|
|
|
break;
|
|
|
|
case "prompt":
|
|
|
|
action = Ci.nsIPermissionManager.PROMPT_ACTION;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
dump("Unsupported PermisionSettings Action: " + aData.value +"\n");
|
|
|
|
action = Ci.nsIPermissionManager.UNKNOWN_ACTION;
|
|
|
|
}
|
|
|
|
debug("add: " + aData.origin + " " + appID + " " + action);
|
|
|
|
permissionManager.addFromPrincipal(principal, aData.type, action);
|
|
|
|
},
|
|
|
|
|
|
|
|
observe: function(aSubject, aTopic, aData) {
|
|
|
|
ppmm.removeMessageListener("PermissionSettings:AddPermission", this);
|
|
|
|
Services.obs.removeObserver(this, "profile-before-change");
|
|
|
|
ppmm = null;
|
|
|
|
},
|
|
|
|
|
|
|
|
receiveMessage: function(aMessage) {
|
|
|
|
debug("PermissionSettings::receiveMessage " + aMessage.name);
|
|
|
|
let mm = aMessage.target;
|
|
|
|
let msg = aMessage.data;
|
|
|
|
|
|
|
|
let result;
|
|
|
|
switch (aMessage.name) {
|
|
|
|
case "PermissionSettings:AddPermission":
|
|
|
|
this.addPermission(msg);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PermissionSettingsModule.init();
|