Bug 804623 - Permission Prompt Helper needs more access context to enable/disable permissions. r=sicking

This commit is contained in:
Gregor Wagner 2013-04-04 17:47:46 -07:00
parent 81b4a55b18
commit deccc07486

View File

@ -59,58 +59,43 @@ this.PermissionPromptHelper = {
askPermission: function askPermission(aMessage, aCallbacks) { askPermission: function askPermission(aMessage, aCallbacks) {
let msg = aMessage.json; let msg = aMessage.json;
let access; let access = msg.type;
if (PermissionsTable[msg.type].access) { if (msg.access) {
access = "readwrite"; // XXXddahl: Not sure if this should be set to READWRITE access = access + "-" + msg.access;
} }
// Expand permission names.
let expandedPermNames = expandPermissions(msg.type, access);
let installedPermValues = [];
let uri = Services.io.newURI(msg.origin, null, null); let uri = Services.io.newURI(msg.origin, null, null);
let principal = let principal =
secMan.getAppCodebasePrincipal(uri, msg.appID, msg.browserFlag); secMan.getAppCodebasePrincipal(uri, msg.appID, msg.browserFlag);
for (let idx in expandedPermNames) { let permValue =
let access = msg.access ? expandedPermNames[idx] : msg.type; permissionManager.testExactPermissionFromPrincipal(principal, access);
let permValue =
permissionManager.testExactPermissionFromPrincipal(principal, access); if (permValue == Ci.nsIPermissionManager.DENY_ACTION ||
installedPermValues.push(permValue); permValue == Ci.nsIPermissionManager.UNKNOWN_ACTION) {
aCallbacks.cancel();
return;
} }
// TODO: see bug 804623, We are preventing "read" operations if (permValue == Ci.nsIPermissionManager.PROMPT_ACTION) {
// even if just "write" has been set to DENY_ACTION // create a nsIContentPermissionRequest
for (let idx in installedPermValues) { let request = {
// if any of the installedPermValues are deny, run aCallbacks.cancel type: msg.type,
if (installedPermValues[idx] == Ci.nsIPermissionManager.DENY_ACTION || access: msg.access ? msg.access : "unused",
installedPermValues[idx] == Ci.nsIPermissionManager.UNKNOWN_ACTION) { principal: principal,
aCallbacks.cancel(); QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionRequest]),
return; allow: aCallbacks.allow,
} cancel: aCallbacks.cancel,
window: Services.wm.getMostRecentWindow("navigator:browser")
};
permissionPromptService.getPermission(request);
return;
} }
for (let idx in installedPermValues) { if (permValue == Ci.nsIPermissionManager.ALLOW_ACTION) {
if (installedPermValues[idx] == Ci.nsIPermissionManager.PROMPT_ACTION) { aCallbacks.allow();
// create a nsIContentPermissionRequest return;
let request = {
type: msg.type,
access: msg.access ? msg.access : "unused",
principal: principal,
QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionRequest]),
allow: aCallbacks.allow,
cancel: aCallbacks.cancel,
window: Services.wm.getMostRecentWindow("navigator:browser")
};
permissionPromptService.getPermission(request);
return;
}
}
for (let idx in installedPermValues) {
if (installedPermValues[idx] == Ci.nsIPermissionManager.ALLOW_ACTION) {
aCallbacks.allow();
return;
}
} }
}, },