Chromium Code Reviews| Index: chrome/browser/extensions/extension_permissions_api_helpers.cc |
| diff --git a/chrome/browser/extensions/extension_permissions_api_helpers.cc b/chrome/browser/extensions/extension_permissions_api_helpers.cc |
| index a63909ba729154464010c6b7a8fe75539151bd6f..ca0a8ac9642c48e630e623c3f09a9f939c30509c 100644 |
| --- a/chrome/browser/extensions/extension_permissions_api_helpers.cc |
| +++ b/chrome/browser/extensions/extension_permissions_api_helpers.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/extensions/extension_permissions_api_helpers.h" |
| #include "base/values.h" |
| +#include "chrome/common/extensions/api/permissions_api.h" |
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/common/extensions/extension_error_utils.h" |
| #include "chrome/common/extensions/extension_permission_set.h" |
| @@ -20,93 +21,63 @@ const char kInvalidOrigin[] = |
| const char kUnknownPermissionError[] = |
| "'*' is not a recognized permission."; |
| -const char kApisKey[] = "permissions"; |
| -const char kOriginsKey[] = "origins"; |
| - |
| } // namespace |
| DictionaryValue* PackPermissionsToValue(const ExtensionPermissionSet* set) { |
| - DictionaryValue* value = new DictionaryValue(); |
| + Permissions permissions; |
| - // Generate the list of API permissions. |
| - ListValue* apis = new ListValue(); |
| + permissions.permissions.reset(new std::vector<std::string>()); |
| ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
| for (ExtensionAPIPermissionSet::const_iterator i = set->apis().begin(); |
| - i != set->apis().end(); ++i) |
| - apis->Append(Value::CreateStringValue(info->GetByID(*i)->name())); |
| + i != set->apis().end(); ++i) { |
| + permissions.permissions->push_back(info->GetByID(*i)->name()); |
| + } |
| - // Generate the list of origin permissions. |
| + permissions.origins.reset(new std::vector<std::string>()); |
| URLPatternSet hosts = set->explicit_hosts(); |
| - ListValue* origins = new ListValue(); |
| - for (URLPatternSet::const_iterator i = hosts.begin(); i != hosts.end(); ++i) |
| - origins->Append(Value::CreateStringValue(i->GetAsString())); |
| + for (URLPatternSet::const_iterator i = hosts.begin(); i != hosts.end(); ++i) { |
| + permissions.origins->push_back(i->GetAsString()); |
| + } |
| - value->Set(kApisKey, apis); |
| - value->Set(kOriginsKey, origins); |
| - return value; |
| + return permissions.ToValue(); |
| } |
| -// Creates a new ExtensionPermissionSet from its |value| and passes ownership to |
| -// the caller through |ptr|. Sets |bad_message| to true if the message is badly |
| -// formed. Returns false if the method fails to unpack a permission set. |
| -bool UnpackPermissionsFromValue(DictionaryValue* value, |
| - scoped_refptr<ExtensionPermissionSet>* ptr, |
| - bool* bad_message, |
| - std::string* error) { |
| - ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
| +ExtensionPermissionSet* UnpackPermissionSet( |
| + const Permissions& permissions, std::string* error) { |
| ExtensionAPIPermissionSet apis; |
| - if (value->HasKey(kApisKey)) { |
| - ListValue* api_list = NULL; |
| - if (!value->GetList(kApisKey, &api_list)) { |
| - *bad_message = true; |
| - return false; |
| - } |
| - for (size_t i = 0; i < api_list->GetSize(); ++i) { |
| - std::string api_name; |
| - if (!api_list->GetString(i, &api_name)) { |
| - *bad_message = true; |
| - return false; |
| - } |
| - |
| - ExtensionAPIPermission* permission = info->GetByName(api_name); |
| + if (permissions.permissions.get()) { |
| + ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
| + for (std::vector<std::string>::iterator it = |
| + permissions.permissions->begin(); |
| + it != permissions.permissions->end(); ++it) { |
| + ExtensionAPIPermission* permission = info->GetByName(*it); |
| if (!permission) { |
| *error = ExtensionErrorUtils::FormatErrorMessage( |
| - kUnknownPermissionError, api_name); |
| - return false; |
| + kUnknownPermissionError, *it); |
| + return NULL; |
| } |
| apis.insert(permission->id()); |
| } |
| } |
| URLPatternSet origins; |
| - if (value->HasKey(kOriginsKey)) { |
| - ListValue* origin_list = NULL; |
| - if (!value->GetList(kOriginsKey, &origin_list)) { |
| - *bad_message = true; |
| - return false; |
| - } |
| - for (size_t i = 0; i < origin_list->GetSize(); ++i) { |
| - std::string pattern; |
| - if (!origin_list->GetString(i, &pattern)) { |
| - *bad_message = true; |
| - return false; |
| - } |
| - |
| + if (permissions.origins.get()) { |
| + for (std::vector<std::string>::iterator it = permissions.origins->begin(); |
| + it != permissions.origins->end(); ++it) { |
| URLPattern origin(Extension::kValidHostPermissionSchemes); |
| - URLPattern::ParseResult parse_result = origin.Parse(pattern); |
| + URLPattern::ParseResult parse_result = origin.Parse(*it); |
| if (URLPattern::PARSE_SUCCESS != parse_result) { |
| *error = ExtensionErrorUtils::FormatErrorMessage( |
| kInvalidOrigin, |
| - pattern, |
| + *it, |
| URLPattern::GetParseResultString(parse_result)); |
| - return false; |
| + return NULL; |
| } |
| origins.AddPattern(origin); |
| } |
| } |
| - *ptr = new ExtensionPermissionSet(apis, origins, URLPatternSet()); |
| - return true; |
| + return new ExtensionPermissionSet(apis, origins, URLPatternSet()); |
|
Aaron Boodman
2012/01/19 23:31:13
I agree with Yoyo's comment in the header: The com
calamity
2012/01/20 01:10:25
Done.
|
| } |
| } // namespace permissions_api |