| Index: chrome/browser/extensions/api/permissions/permissions_api.cc
 | 
| diff --git a/chrome/browser/extensions/api/permissions/permissions_api.cc b/chrome/browser/extensions/api/permissions/permissions_api.cc
 | 
| index 357b8205ee09b75347be995550b0b6e98b195661..40b31bb3c12699767aebeb35625706f760376f9f 100644
 | 
| --- a/chrome/browser/extensions/api/permissions/permissions_api.cc
 | 
| +++ b/chrome/browser/extensions/api/permissions/permissions_api.cc
 | 
| @@ -5,20 +5,21 @@
 | 
|  #include "chrome/browser/extensions/api/permissions/permissions_api.h"
 | 
|  
 | 
|  #include "base/memory/scoped_ptr.h"
 | 
| -#include "base/values.h"
 | 
|  #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h"
 | 
|  #include "chrome/browser/extensions/extension_service.h"
 | 
|  #include "chrome/browser/extensions/permissions_updater.h"
 | 
|  #include "chrome/browser/profiles/profile.h"
 | 
|  #include "chrome/common/chrome_notification_types.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/url_pattern_set.h"
 | 
|  #include "googleurl/src/gurl.h"
 | 
|  
 | 
|  using extensions::PermissionsUpdater;
 | 
| -using extensions::permissions_api::PackPermissionsToValue;
 | 
| -using extensions::permissions_api::UnpackPermissionsFromValue;
 | 
| +using extensions::permissions_api_helpers::PackPermissionSet;
 | 
| +using extensions::permissions_api_helpers::UnpackPermissionSet;
 | 
| +using namespace extensions::api::permissions;
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| @@ -42,38 +43,34 @@ bool ignore_user_gesture_for_tests = false;
 | 
|  } // namespace
 | 
|  
 | 
|  bool ContainsPermissionsFunction::RunImpl() {
 | 
| -  DictionaryValue* args = NULL;
 | 
| -  EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
 | 
| -  std::string error;
 | 
| -  if (!args)
 | 
| -    return false;
 | 
| +  scoped_ptr<Contains::Params> params(Contains::Params::Create(*args_));
 | 
| +  EXTENSION_FUNCTION_VALIDATE(params.get());
 | 
|  
 | 
| -  scoped_refptr<ExtensionPermissionSet> permissions;
 | 
| -  if (!UnpackPermissionsFromValue(args, &permissions, &bad_message_, &error_))
 | 
| +  scoped_refptr<ExtensionPermissionSet> permissions =
 | 
| +      UnpackPermissionSet(params->permissions, &error_);
 | 
| +  if (!permissions.get())
 | 
|      return false;
 | 
| -  CHECK(permissions.get());
 | 
|  
 | 
| -  result_.reset(Value::CreateBooleanValue(
 | 
| +  result_.reset(Contains::Result::Create(
 | 
|        GetExtension()->GetActivePermissions()->Contains(*permissions)));
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
|  bool GetAllPermissionsFunction::RunImpl() {
 | 
| -  result_.reset(PackPermissionsToValue(
 | 
| -      GetExtension()->GetActivePermissions()));
 | 
| +  scoped_ptr<Permissions> permissions =
 | 
| +      PackPermissionSet(GetExtension()->GetActivePermissions());
 | 
| +  result_.reset(GetAll::Result::Create(*permissions));
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
|  bool RemovePermissionsFunction::RunImpl() {
 | 
| -  DictionaryValue* args = NULL;
 | 
| -  EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
 | 
| -  if (!args)
 | 
| -    return false;
 | 
| +  scoped_ptr<Remove::Params> params(Remove::Params::Create(*args_));
 | 
| +  EXTENSION_FUNCTION_VALIDATE(params.get());
 | 
|  
 | 
| -  scoped_refptr<ExtensionPermissionSet> permissions;
 | 
| -  if (!UnpackPermissionsFromValue(args, &permissions, &bad_message_, &error_))
 | 
| +  scoped_refptr<ExtensionPermissionSet> permissions =
 | 
| +      UnpackPermissionSet(params->permissions, &error_);
 | 
| +  if (!permissions.get())
 | 
|      return false;
 | 
| -  CHECK(permissions.get());
 | 
|  
 | 
|    const Extension* extension = GetExtension();
 | 
|    ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
 | 
| @@ -96,12 +93,12 @@ bool RemovePermissionsFunction::RunImpl() {
 | 
|        ExtensionPermissionSet::CreateIntersection(permissions.get(), required));
 | 
|    if (!intersection->IsEmpty()) {
 | 
|      error_ = kCantRemoveRequiredPermissionsError;
 | 
| -    result_.reset(Value::CreateBooleanValue(false));
 | 
| +    result_.reset(Remove::Result::Create(false));
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
|    PermissionsUpdater(profile()).RemovePermissions(extension, permissions.get());
 | 
| -  result_.reset(Value::CreateBooleanValue(true));
 | 
| +  result_.reset(Remove::Result::Create(true));
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| @@ -125,15 +122,12 @@ bool RequestPermissionsFunction::RunImpl() {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  DictionaryValue* args = NULL;
 | 
| -  EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args));
 | 
| -  if (!args)
 | 
| -    return false;
 | 
| +  scoped_ptr<Request::Params> params(Request::Params::Create(*args_));
 | 
| +  EXTENSION_FUNCTION_VALIDATE(params.get());
 | 
|  
 | 
| -  if (!UnpackPermissionsFromValue(
 | 
| -          args, &requested_permissions_, &bad_message_, &error_))
 | 
| +  requested_permissions_ = UnpackPermissionSet(params->permissions, &error_);
 | 
| +  if (!requested_permissions_.get())
 | 
|      return false;
 | 
| -  CHECK(requested_permissions_.get());
 | 
|  
 | 
|    ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
 | 
|    ExtensionPrefs* prefs = profile()->GetExtensionService()->extension_prefs();
 | 
| @@ -154,7 +148,7 @@ bool RequestPermissionsFunction::RunImpl() {
 | 
|    if (!GetExtension()->optional_permission_set()->Contains(
 | 
|            *requested_permissions_)) {
 | 
|      error_ = kNotInOptionalPermissionsError;
 | 
| -    result_.reset(Value::CreateBooleanValue(false));
 | 
| +    result_.reset(Request::Result::Create(false));
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| @@ -165,7 +159,7 @@ bool RequestPermissionsFunction::RunImpl() {
 | 
|    if (granted && granted->Contains(*requested_permissions_)) {
 | 
|      PermissionsUpdater perms_updater(profile());
 | 
|      perms_updater.AddPermissions(GetExtension(), requested_permissions_.get());
 | 
| -    result_.reset(Value::CreateBooleanValue(true));
 | 
| +    result_.reset(Request::Result::Create(true));
 | 
|      SendResponse(true);
 | 
|      return true;
 | 
|    }
 | 
| @@ -199,14 +193,14 @@ void RequestPermissionsFunction::InstallUIProceed() {
 | 
|    PermissionsUpdater perms_updater(profile());
 | 
|    perms_updater.AddPermissions(GetExtension(), requested_permissions_.get());
 | 
|  
 | 
| -  result_.reset(Value::CreateBooleanValue(true));
 | 
| +  result_.reset(Request::Result::Create(true));
 | 
|    SendResponse(true);
 | 
|  
 | 
|    Release();  // Balanced in RunImpl().
 | 
|  }
 | 
|  
 | 
|  void RequestPermissionsFunction::InstallUIAbort(bool user_initiated) {
 | 
| -  result_.reset(Value::CreateBooleanValue(false));
 | 
| +  result_.reset(Request::Result::Create(false));
 | 
|    SendResponse(true);
 | 
|  
 | 
|    Release();  // Balanced in RunImpl().
 | 
| 
 |