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

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

Issue 10692160: Support socket endpoint permissions for AppsV2 Socket API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase and fix a unit test Created 8 years, 4 months 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 584ed3b94dad2d92fce8691557ac85a41d4afee6..5f2001839d871a4d0d66e5898001e3d9ad70d068 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -509,19 +509,45 @@ PermissionSet* ExtensionPrefs::ReadExtensionPrefPermissionSet(
if (!GetExtensionPref(extension_id))
return NULL;
- // Retrieve the API permissions.
+ // Retrieve the API permissions. Please refer SetExtensionPrefPermissionSet()
+ // for api_values format.
APIPermissionSet apis;
const ListValue* api_values = NULL;
std::string api_pref = JoinPrefs(pref_key, kPrefAPIs);
if (ReadExtensionPrefList(extension_id, api_pref, &api_values)) {
PermissionsInfo* info = PermissionsInfo::GetInstance();
for (size_t i = 0; i < api_values->GetSize(); ++i) {
+ const DictionaryValue* permission_dict = NULL;
std::string permission_name;
- if (api_values->GetString(i, &permission_name)) {
- APIPermission *permission = info->GetByName(permission_name);
- if (permission)
- apis.insert(permission->id());
+ if (!api_values->GetString(i, &permission_name) &&
+ !api_values->GetDictionary(i, &permission_dict)) {
+ NOTREACHED() << "Permission is not a string or dict. ";
+ continue;
+ }
+
+ const base::Value *permission_detail = NULL;
+ if (permission_dict) {
+ if (permission_dict->size() != 1u) {
+ NOTREACHED() << "Permission is not a single key dict.";
+ continue;
+ }
+ base::DictionaryValue::Iterator it(*permission_dict);
+ permission_name = it.key();
+ permission_detail = &it.value();
+ }
+
+ APIPermission *permission = info->GetByName(permission_name);
+ if (!permission) {
+ NOTREACHED() << "Unknown permission[" << permission_name << "].";
+ continue;
+ }
+
+ scoped_refptr<APIPermissionDetail> detail = permission->CreateDetail();
+ if (!detail->FromValue(permission_detail)) {
+ NOTREACHED() << "Parse permission detail failed.";
+ continue;
}
+ apis.insert(detail);
}
}
@@ -545,15 +571,27 @@ void ExtensionPrefs::SetExtensionPrefPermissionSet(
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();
- PermissionsInfo* info = PermissionsInfo::GetInstance();
std::string api_pref = JoinPrefs(pref_key, kPrefAPIs);
for (APIPermissionSet::const_iterator i = apis.begin();
i != apis.end(); ++i) {
- APIPermission* perm = info->GetByID(*i);
- if (perm)
- api_values->Append(Value::CreateStringValue(perm->name()));
+ Value* detail = NULL;
+ i->ToValue(&detail);
+ if (detail) {
+ DictionaryValue* tmp = new DictionaryValue();
+ tmp->Set(i->name(), detail);
+ api_values->Append(tmp);
+ } else {
+ api_values->Append(Value::CreateStringValue(i->name()));
+ }
}
UpdateExtensionPref(extension_id, api_pref, api_values);
« no previous file with comments | « chrome/browser/extensions/api/socket/udp_socket.cc ('k') | chrome/browser/extensions/extension_prefs_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698