Chromium Code Reviews| Index: chrome/browser/extensions/extension_prefs.cc |
| diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc |
| index 7f34c42a4eee37363c54f48f97367f41d89c428a..af36f528e926f4ccc4ac309886e7b47576896cc0 100644 |
| --- a/chrome/browser/extensions/extension_prefs.cc |
| +++ b/chrome/browser/extensions/extension_prefs.cc |
| @@ -22,6 +22,7 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/host_desktop.h" |
| #include "chrome/common/chrome_switches.h" |
| +#include "chrome/common/extensions/chrome_manifest_permission_set.h" |
| #include "chrome/common/extensions/feature_switch.h" |
| #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" |
| #include "chrome/common/pref_names.h" |
| @@ -157,6 +158,7 @@ const char kPrefGrantedPermissions[] = "granted_permissions"; |
| // The preference names for PermissionSet values. |
| const char kPrefAPIs[] = "api"; |
| +const char kPrefManifestPermissions[] = "manifest_permissions"; |
| const char kPrefExplicitHosts[] = "explicit_host"; |
| const char kPrefScriptableHosts[] = "scriptable_host"; |
| @@ -542,6 +544,18 @@ PermissionSet* ExtensionPrefs::ReadPrefAsPermissionSet( |
| &apis, NULL, NULL); |
| } |
| + // Retrieve the Manifest Keys permissions. Please refer |
|
Yoyo Zhou
2013/11/09 01:15:30
nit: add "to"
rpaquay
2013/11/12 21:40:31
Done.
|
| + // SetExtensionPrefPermissionSet() for manifest_permissions_values format. |
| + ManifestPermissionSet manifest_permissions; |
| + const ListValue* manifest_permissions_values = NULL; |
| + std::string manifest_permission_pref = |
| + JoinPrefs(pref_key, kPrefManifestPermissions); |
| + if (ReadPrefAsList(extension_id, manifest_permission_pref, |
| + &manifest_permissions_values)) { |
| + ChromeManifestPermissionSet::ParseFromJSON( |
| + manifest_permissions_values, &manifest_permissions, NULL, NULL); |
| + } |
| + |
| // Retrieve the explicit host permissions. |
| URLPatternSet explicit_hosts; |
| ReadPrefAsURLPatternSet( |
| @@ -554,37 +568,50 @@ PermissionSet* ExtensionPrefs::ReadPrefAsPermissionSet( |
| extension_id, JoinPrefs(pref_key, kPrefScriptableHosts), |
| &scriptable_hosts, UserScript::ValidUserScriptSchemes()); |
| - return new PermissionSet(apis, explicit_hosts, scriptable_hosts); |
| -} |
| - |
| -void ExtensionPrefs::SetExtensionPrefPermissionSet( |
| - const std::string& extension_id, |
| - const std::string& pref_key, |
| - const PermissionSet* new_value) { |
| - // Set the API permissions. |
| - // The format of api_values is: |
| - // [ "permission_name1", // permissions do not support detail. |
| - // "permission_name2", |
| - // {"permission_name3": value }, |
| - // // permission supports detail, permission detail will be stored in value. |
| - // ... |
| - // ] |
| - ListValue* api_values = new ListValue(); |
| - APIPermissionSet apis = new_value->apis(); |
| - std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); |
| - for (APIPermissionSet::const_iterator i = apis.begin(); |
| - i != apis.end(); ++i) { |
| + return new PermissionSet( |
| + apis, manifest_permissions, explicit_hosts, scriptable_hosts); |
| +} |
| + |
| +// Set the API permissions. |
|
Yoyo Zhou
2013/11/12 02:39:29
Or manifest permissions.
rpaquay
2013/11/12 21:40:31
Done.
|
| +// The format of api_values is: |
| +// [ "permission_name1", // permissions do not support detail. |
| +// "permission_name2", |
| +// {"permission_name3": value }, |
| +// // permission supports detail, permission detail will be stored in value. |
| +// ... |
| +// ] |
| +template<typename T> |
| +static ListValue* CreatePermisionList(const T& permissions) { |
|
Yoyo Zhou
2013/11/12 02:39:29
typo: Permission
rpaquay
2013/11/12 21:40:31
Done.
|
| + ListValue* values = new ListValue(); |
| + for (T::const_iterator i = permissions.begin(); i != permissions.end(); ++i) { |
| scoped_ptr<Value> detail(i->ToValue()); |
| if (detail) { |
| DictionaryValue* tmp = new DictionaryValue(); |
| tmp->Set(i->name(), detail.release()); |
| - api_values->Append(tmp); |
| + values->Append(tmp); |
| } else { |
| - api_values->Append(new base::StringValue(i->name())); |
| + values->Append(new base::StringValue(i->name())); |
| } |
| } |
| + return values; |
| +} |
| + |
| +void ExtensionPrefs::SetExtensionPrefPermissionSet( |
| + const std::string& extension_id, |
| + const std::string& pref_key, |
| + const PermissionSet* new_value) { |
| + std::string api_pref = JoinPrefs(pref_key, kPrefAPIs); |
| + ListValue* api_values = CreatePermisionList(new_value->apis()); |
| UpdateExtensionPref(extension_id, api_pref, api_values); |
| + std::string manifest_permissions_pref = |
| + JoinPrefs(pref_key, kPrefManifestPermissions); |
| + ListValue* manifest_permissions_values = CreatePermisionList( |
| + new_value->manifest_permissions()); |
| + UpdateExtensionPref(extension_id, |
| + manifest_permissions_pref, |
| + manifest_permissions_values); |
| + |
| // Set the explicit host permissions. |
| if (!new_value->explicit_hosts().is_empty()) { |
| SetExtensionPrefURLPatternSet(extension_id, |