mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-14 04:03:47 +00:00
Bug 804623 - Permission Prompt Helper needs more access context to enable/disable permissions. r=sicking
This commit is contained in:
parent
3ee37d2232
commit
e788304d93
@ -59,58 +59,43 @@ this.PermissionPromptHelper = {
|
||||
askPermission: function askPermission(aMessage, aCallbacks) {
|
||||
let msg = aMessage.json;
|
||||
|
||||
let access;
|
||||
if (PermissionsTable[msg.type].access) {
|
||||
access = "readwrite"; // XXXddahl: Not sure if this should be set to READWRITE
|
||||
let access = msg.type;
|
||||
if (msg.access) {
|
||||
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 principal =
|
||||
secMan.getAppCodebasePrincipal(uri, msg.appID, msg.browserFlag);
|
||||
|
||||
for (let idx in expandedPermNames) {
|
||||
let access = msg.access ? expandedPermNames[idx] : msg.type;
|
||||
let permValue =
|
||||
permissionManager.testExactPermissionFromPrincipal(principal, access);
|
||||
installedPermValues.push(permValue);
|
||||
let permValue =
|
||||
permissionManager.testExactPermissionFromPrincipal(principal, access);
|
||||
|
||||
if (permValue == Ci.nsIPermissionManager.DENY_ACTION ||
|
||||
permValue == Ci.nsIPermissionManager.UNKNOWN_ACTION) {
|
||||
aCallbacks.cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: see bug 804623, We are preventing "read" operations
|
||||
// even if just "write" has been set to DENY_ACTION
|
||||
for (let idx in installedPermValues) {
|
||||
// if any of the installedPermValues are deny, run aCallbacks.cancel
|
||||
if (installedPermValues[idx] == Ci.nsIPermissionManager.DENY_ACTION ||
|
||||
installedPermValues[idx] == Ci.nsIPermissionManager.UNKNOWN_ACTION) {
|
||||
aCallbacks.cancel();
|
||||
return;
|
||||
}
|
||||
if (permValue == Ci.nsIPermissionManager.PROMPT_ACTION) {
|
||||
// create a nsIContentPermissionRequest
|
||||
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.PROMPT_ACTION) {
|
||||
// create a nsIContentPermissionRequest
|
||||
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;
|
||||
}
|
||||
if (permValue == Ci.nsIPermissionManager.ALLOW_ACTION) {
|
||||
aCallbacks.allow();
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user