| Index: chrome/browser/extensions/extension_prefs.cc
|
| diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
|
| index 79ae16aa6633d1ac6f9d1c611332862190469378..e2e073f250b5527b1231a4f6515b961c6551e70e 100644
|
| --- a/chrome/browser/extensions/extension_prefs.cc
|
| +++ b/chrome/browser/extensions/extension_prefs.cc
|
| @@ -493,11 +493,24 @@ PermissionSet* ExtensionPrefs::ReadExtensionPrefPermissionSet(
|
| if (ReadExtensionPrefList(extension_id, api_pref, &api_values)) {
|
| PermissionsInfo* info = PermissionsInfo::GetInstance();
|
| for (size_t i = 0; i < api_values->GetSize(); ++i) {
|
| + const ListValue* permission_list = NULL;
|
| std::string permission_name;
|
| - if (api_values->GetString(i, &permission_name)) {
|
| + if (api_values->GetString(i, &permission_name) ||
|
| + (api_values->GetList(i, &permission_list) &&
|
| + permission_list->GetString(0, &permission_name))) {
|
| APIPermission *permission = info->GetByName(permission_name);
|
| - if (permission)
|
| - apis.insert(permission->id());
|
| + if (permission) {
|
| + const Value* tmp = NULL;
|
| + scoped_refptr<APIPermissionDetail> detail =
|
| + permission->CreateDetail();
|
| + if (permission_list) {
|
| + if (permission_list->Get(1, &tmp))
|
| + detail->FromValue(tmp);
|
| + else
|
| + DLOG(WARNING) << "Get detail from permission_list failed.";
|
| + }
|
| + apis.insert(detail);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -524,13 +537,19 @@ void ExtensionPrefs::SetExtensionPrefPermissionSet(
|
| // Set the API permissions.
|
| 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) {
|
| + api_values->Append(Value::CreateStringValue(i->name()));
|
| + } else {
|
| + ListValue* tmp = new ListValue();
|
| + tmp->Append(Value::CreateStringValue(i->name()));
|
| + tmp->Append(detail);
|
| + api_values->Append(tmp);
|
| + }
|
| }
|
| UpdateExtensionPref(extension_id, api_pref, api_values);
|
|
|
|
|