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, |