From b99fa2723b47c016e174af2c5b882cea05355dfa Mon Sep 17 00:00:00 2001 From: Benjamin Chen Date: Wed, 9 Jan 2013 13:25:34 +0800 Subject: [PATCH] Bug 816900 - 1. Use |expandedPermNames[idx]| instead |msg.type + "-" + msg.access|. 2. Add |write, create| permissions in test_sim_contacts.js. r=gwagner --- .../tests/marionette/test_sim_contacts.js | 9 +++++++++ dom/permission/PermissionPromptHelper.jsm | 17 ++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dom/contacts/tests/marionette/test_sim_contacts.js b/dom/contacts/tests/marionette/test_sim_contacts.js index a32c0d0a1f3c..bd10e4a74f3d 100644 --- a/dom/contacts/tests/marionette/test_sim_contacts.js +++ b/dom/contacts/tests/marionette/test_sim_contacts.js @@ -4,6 +4,13 @@ MARIONETTE_TIMEOUT = 30000; SpecialPowers.addPermission("contacts-read", true, document); +// TODO: see bug 804623, We are preventing "read" operations +// even if just "write" has been set to DENY_ACTION. +// Bug 816900: Because PermissionPromptHelper.jsm will expand the +// contacts-read to contacts-read, contacts-write, contacts-create, +// we add the other two permissions here. +SpecialPowers.addPermission("contacts-write", true, document); +SpecialPowers.addPermission("contacts-create", true, document); let mozContacts = window.navigator.mozContacts; ok(mozContacts); @@ -53,6 +60,8 @@ function runNextTest() { function cleanUp() { SpecialPowers.removePermission("contacts-read", document); + SpecialPowers.removePermission("contacts-write", document); + SpecialPowers.removePermission("contacts-create", document); finish(); } diff --git a/dom/permission/PermissionPromptHelper.jsm b/dom/permission/PermissionPromptHelper.jsm index 70855e51dc29..dea59ffc39ef 100644 --- a/dom/permission/PermissionPromptHelper.jsm +++ b/dom/permission/PermissionPromptHelper.jsm @@ -45,9 +45,9 @@ XPCOMUtils.defineLazyServiceGetter(this, "permissionPromptService", "@mozilla.org/permission-prompt-service;1", "nsIPermissionPromptService"); -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 permissionManager = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager); +let secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager); +let appsService = Cc["@mozilla.org/AppsService;1"].getService(Ci.nsIAppsService); this.PermissionPromptHelper = { init: function init() { @@ -64,15 +64,14 @@ this.PermissionPromptHelper = { access = "readwrite"; // XXXddahl: Not sure if this should be set to READWRITE } // Expand permission names. - var expandedPermNames = expandPermissions(msg.type, access); + let expandedPermNames = expandPermissions(msg.type, access); let installedPermValues = []; - let principal; + let uri = Services.io.newURI(msg.origin, null, null); + let principal = + secMan.getAppCodebasePrincipal(uri, msg.appID, msg.browserFlag); for (let idx in expandedPermNames) { - let uri = Services.io.newURI(msg.origin, null, null); - principal = - secMan.getAppCodebasePrincipal(uri, msg.appID, msg.browserFlag); - let access = msg.access ? msg.type + "-" + msg.access : msg.type; + let access = msg.access ? expandedPermNames[idx] : msg.type; let permValue = permissionManager.testExactPermissionFromPrincipal(principal, access); installedPermValues.push(permValue);