| Index: components/component_updater/default_component_installer.cc
 | 
| diff --git a/components/component_updater/default_component_installer.cc b/components/component_updater/default_component_installer.cc
 | 
| index b9bcaa9e92d874bfcf32907f727d5046513c9e94..494352223b5ab859fd21bff8456fefbfd73b8229 100644
 | 
| --- a/components/component_updater/default_component_installer.cc
 | 
| +++ b/components/component_updater/default_component_installer.cc
 | 
| @@ -22,10 +22,10 @@
 | 
|  // TODO(ddorwin): Find a better place for ReadManifest.
 | 
|  #include "components/component_updater/component_updater_service.h"
 | 
|  #include "components/update_client/component_unpacker.h"
 | 
| +#include "components/update_client/update_client.h"
 | 
| +#include "components/update_client/update_client_errors.h"
 | 
|  #include "components/update_client/utils.h"
 | 
|  
 | 
| -using update_client::CrxComponent;
 | 
| -
 | 
|  namespace component_updater {
 | 
|  
 | 
|  namespace {
 | 
| @@ -34,6 +34,9 @@ namespace {
 | 
|  // we represent it as a dotted quad.
 | 
|  const char kNullVersion[] = "0.0.0.0";
 | 
|  
 | 
| +using Result = update_client::CrxInstaller::Result;
 | 
| +using InstallError = update_client::InstallError;
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
|  ComponentInstallerTraits::~ComponentInstallerTraits() {
 | 
| @@ -72,7 +75,7 @@ void DefaultComponentInstaller::OnUpdateError(int error) {
 | 
|    LOG(ERROR) << "Component update error: " << error;
 | 
|  }
 | 
|  
 | 
| -bool DefaultComponentInstaller::InstallHelper(
 | 
| +Result DefaultComponentInstaller::InstallHelper(
 | 
|      const base::DictionaryValue& manifest,
 | 
|      const base::FilePath& unpack_path,
 | 
|      const base::FilePath& install_path) {
 | 
| @@ -81,22 +84,24 @@ bool DefaultComponentInstaller::InstallHelper(
 | 
|  
 | 
|    if (!base::Move(unpack_path, install_path)) {
 | 
|      PLOG(ERROR) << "Move failed.";
 | 
| -    return false;
 | 
| +    return Result(InstallError::GENERIC_ERROR);
 | 
|    }
 | 
| -  if (!installer_traits_->OnCustomInstall(manifest, install_path)) {
 | 
| +  const auto result =
 | 
| +      installer_traits_->OnCustomInstall(manifest, install_path);
 | 
| +  if (result.error) {
 | 
|      PLOG(ERROR) << "CustomInstall failed.";
 | 
| -    return false;
 | 
| +    return result;
 | 
|    }
 | 
|    if (!installer_traits_->VerifyInstallation(manifest, install_path)) {
 | 
|      PLOG(ERROR) << "VerifyInstallation failed.";
 | 
| -    return false;
 | 
| +    return Result(InstallError::GENERIC_ERROR);
 | 
|    }
 | 
|  
 | 
| -  return true;
 | 
| +  return Result(InstallError::NONE);
 | 
|  }
 | 
|  
 | 
| -bool DefaultComponentInstaller::Install(const base::DictionaryValue& manifest,
 | 
| -                                        const base::FilePath& unpack_path) {
 | 
| +Result DefaultComponentInstaller::Install(const base::DictionaryValue& manifest,
 | 
| +                                          const base::FilePath& unpack_path) {
 | 
|    std::string manifest_version;
 | 
|    manifest.GetStringASCII("version", &manifest_version);
 | 
|    base::Version version(manifest_version);
 | 
| @@ -105,21 +110,22 @@ bool DefaultComponentInstaller::Install(const base::DictionaryValue& manifest,
 | 
|            << " current version=" << current_version_.GetString();
 | 
|  
 | 
|    if (!version.IsValid())
 | 
| -    return false;
 | 
| +    return Result(InstallError::GENERIC_ERROR);
 | 
|    if (current_version_.CompareTo(version) > 0)
 | 
| -    return false;
 | 
| +    return Result(InstallError::GENERIC_ERROR);
 | 
|    base::FilePath install_path;
 | 
|    if (!PathService::Get(DIR_COMPONENT_USER, &install_path))
 | 
| -    return false;
 | 
| +    return Result(InstallError::GENERIC_ERROR);
 | 
|    install_path = install_path.Append(installer_traits_->GetRelativeInstallDir())
 | 
|                       .AppendASCII(version.GetString());
 | 
|    if (base::PathExists(install_path)) {
 | 
|      if (!base::DeleteFile(install_path, true))
 | 
| -      return false;
 | 
| +      return Result(InstallError::GENERIC_ERROR);
 | 
|    }
 | 
| -  if (!InstallHelper(manifest, unpack_path, install_path)) {
 | 
| +  const auto result = InstallHelper(manifest, unpack_path, install_path);
 | 
| +  if (result.error) {
 | 
|      base::DeleteFile(install_path, true);
 | 
| -    return false;
 | 
| +    return result;
 | 
|    }
 | 
|    current_version_ = version;
 | 
|    current_install_dir_ = install_path;
 | 
| @@ -132,7 +138,7 @@ bool DefaultComponentInstaller::Install(const base::DictionaryValue& manifest,
 | 
|        FROM_HERE,
 | 
|        base::Bind(&DefaultComponentInstaller::ComponentReady,
 | 
|                   this, base::Passed(&manifest_copy)));
 | 
| -  return true;
 | 
| +  return result;
 | 
|  }
 | 
|  
 | 
|  bool DefaultComponentInstaller::GetInstalledFile(
 | 
| @@ -325,7 +331,7 @@ void DefaultComponentInstaller::FinishRegistration(
 | 
|    VLOG(1) << __func__ << " for " << installer_traits_->GetName();
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|  
 | 
| -  CrxComponent crx;
 | 
| +  update_client::CrxComponent crx;
 | 
|    installer_traits_->GetHash(&crx.pk_hash);
 | 
|    crx.installer = this;
 | 
|    crx.version = current_version_;
 | 
| 
 |