Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2449)

Unified Diff: chrome/browser/extensions/extension_prefs.cc

Issue 51433002: Enable permission warnings from ManifestHandlers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address code review comments. Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..f22e85227cd02d0707411852c021e022146cdd5c 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -157,6 +157,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 +543,18 @@ PermissionSet* ExtensionPrefs::ReadPrefAsPermissionSet(
&apis, NULL, NULL);
}
+ // Retrieve the Manifest Keys permissions. Please refer to
+ // |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)) {
+ ManifestPermissionSet::ParseFromJSON(
+ manifest_permissions_values, &manifest_permissions, NULL, NULL);
+ }
+
// Retrieve the explicit host permissions.
URLPatternSet explicit_hosts;
ReadPrefAsURLPatternSet(
@@ -554,37 +567,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 or Manifest 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.
+// ...
+// ]
+template<typename T>
+static ListValue* CreatePermissionList(const T& permissions) {
+ 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 = CreatePermissionList(new_value->apis());
UpdateExtensionPref(extension_id, api_pref, api_values);
+ std::string manifest_permissions_pref =
+ JoinPrefs(pref_key, kPrefManifestPermissions);
+ ListValue* manifest_permissions_values = CreatePermissionList(
+ 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,

Powered by Google App Engine
This is Rietveld 408576698