Index: chrome/common/extensions/extension.cc |
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc |
index 99ad3f7f50e243b3487c812072fbe7ea5c6ec0ec..95d6120f40ccedfc1dbb56379e0e0b79a6136f3c 100644 |
--- a/chrome/common/extensions/extension.cc |
+++ b/chrome/common/extensions/extension.cc |
@@ -3320,7 +3320,10 @@ bool Extension::ParsePermissions(const char* key, |
for (size_t i = 0; i < permissions->GetSize(); ++i) { |
std::string permission_str; |
- if (!permissions->GetString(i, &permission_str)) { |
+ base::ListValue *permission_list = NULL; |
+ if (!permissions->GetString(i, &permission_str) && |
+ !(permissions->GetList(i, &permission_list) && |
+ permission_list->GetString(0, &permission_str))) { |
*error = ExtensionErrorUtils::FormatErrorMessageUTF16( |
errors::kInvalidPermission, base::IntToString(i)); |
return false; |
@@ -3364,7 +3367,17 @@ bool Extension::ParsePermissions(const char* key, |
} |
} |
- api_permissions->insert(permission->id()); |
+ scoped_refptr<APIPermissionDetail> detail = permission->CreateDetail(); |
+ base::Value *value = NULL; |
+ if (!permission_list || !permission_list->Get(1, &value)) |
+ value = NULL; |
miket_OOO
2012/07/31 18:18:37
Same comment as earlier. It's weird that a failing
Peng
2012/07/31 19:32:28
Done.
|
+ if (!detail->FromValue(value)) { |
+ *error = ExtensionErrorUtils::FormatErrorMessageUTF16( |
+ errors::kInvalidPermission, base::IntToString(i)); |
+ return false; |
+ } |
+ |
+ api_permissions->insert(detail); |
continue; |
} |