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); |