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