| Index: chrome/browser/extensions/extension_prefs.cc
|
| diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
|
| index 2246e49a0413563493c7c38cd8ac057d76f6d812..d8f46646dc2f4b958050433cb68e74f0c68b89ad 100644
|
| --- a/chrome/browser/extensions/extension_prefs.cc
|
| +++ b/chrome/browser/extensions/extension_prefs.cc
|
| @@ -495,18 +495,32 @@ 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 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);
|
| + }
|
| }
|
| }
|
| }
|
| @@ -531,15 +545,28 @@ 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) {
|
| + 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);
|
|
|
|
|