| Index: chrome/browser/extensions/api/permissions/permissions_api_helpers.cc
|
| diff --git a/chrome/browser/extensions/api/permissions/permissions_api_helpers.cc b/chrome/browser/extensions/api/permissions/permissions_api_helpers.cc
|
| index 7479770ddfdc318becf0ef5d661400c4270771c5..e5c31f64a6eca5eb109d33f8fb6ba2ec9350fca9 100644
|
| --- a/chrome/browser/extensions/api/permissions/permissions_api_helpers.cc
|
| +++ b/chrome/browser/extensions/api/permissions/permissions_api_helpers.cc
|
| @@ -5,13 +5,17 @@
|
| #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h"
|
|
|
| #include "base/values.h"
|
| +#include "chrome/common/extensions/api/permissions.h"
|
| #include "chrome/common/extensions/extension.h"
|
| #include "chrome/common/extensions/extension_error_utils.h"
|
| #include "chrome/common/extensions/extension_permission_set.h"
|
| #include "chrome/common/extensions/url_pattern_set.h"
|
|
|
| namespace extensions {
|
| -namespace permissions_api {
|
| +
|
| +using api::permissions::Permissions;
|
| +
|
| +namespace permissions_api_helpers {
|
|
|
| namespace {
|
|
|
| @@ -20,93 +24,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();
|
| +scoped_ptr<Permissions> PackPermissionSet(const ExtensionPermissionSet* set) {
|
| + Permissions* permissions(new 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()));
|
| + permissions->origins->push_back(i->GetAsString());
|
|
|
| - value->Set(kApisKey, apis);
|
| - value->Set(kOriginsKey, origins);
|
| - return value;
|
| + return scoped_ptr<Permissions>(permissions);
|
| }
|
|
|
| -// 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();
|
| +scoped_refptr<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);
|
| + std::vector<std::string>* permissions_list = permissions.permissions.get();
|
| + if (permissions_list) {
|
| + ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
|
| + for (std::vector<std::string>::iterator it = permissions_list->begin();
|
| + it != permissions_list->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 scoped_refptr<ExtensionPermissionSet>(
|
| + new ExtensionPermissionSet(apis, origins, URLPatternSet()));
|
| }
|
|
|
| } // namespace permissions_api
|
|
|