| Index: components/update_client/action_update.cc
 | 
| diff --git a/components/update_client/action_update.cc b/components/update_client/action_update.cc
 | 
| index be64b23288acc769aeee89cd14785ef8fb7fa0e4..5123f5c136fcc695d1463146136769f33c57265f 100644
 | 
| --- a/components/update_client/action_update.cc
 | 
| +++ b/components/update_client/action_update.cc
 | 
| @@ -35,6 +35,21 @@
 | 
|    destination->insert(destination->end(), source.begin(), source.end());
 | 
|  }
 | 
|  
 | 
| +ErrorCategory UnpackerErrorToErrorCategory(UnpackerError error) {
 | 
| +  ErrorCategory error_category = ErrorCategory::kErrorNone;
 | 
| +  switch (error) {
 | 
| +    case UnpackerError::kNone:
 | 
| +      break;
 | 
| +    case UnpackerError::kInstallerError:
 | 
| +      error_category = ErrorCategory::kInstallError;
 | 
| +      break;
 | 
| +    default:
 | 
| +      error_category = ErrorCategory::kUnpackError;
 | 
| +      break;
 | 
| +  }
 | 
| +  return error_category;
 | 
| +}
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
|  ActionUpdate::ActionUpdate() {
 | 
| @@ -154,8 +169,7 @@
 | 
|      update_context_->blocking_task_runner->PostTask(
 | 
|          FROM_HERE,
 | 
|          base::Bind(&ActionUpdate::InstallCompleteOnBlockingTaskRunner,
 | 
| -                   base::Unretained(this), item, crx_path,
 | 
| -                   ErrorCategory::kUnpackError, static_cast<int>(result.error),
 | 
| +                   base::Unretained(this), item, crx_path, result.error,
 | 
|                     result.extended_error));
 | 
|    }
 | 
|  }
 | 
| @@ -167,52 +181,47 @@
 | 
|    DCHECK(update_context_->blocking_task_runner->RunsTasksOnCurrentThread());
 | 
|    DCHECK(!unpack_path.empty());
 | 
|  
 | 
| -  const auto result = DoInstall(item, crx_path, unpack_path);
 | 
| -  const ErrorCategory error_category =
 | 
| -      result.error ? ErrorCategory::kInstallError : ErrorCategory::kErrorNone;
 | 
| +  const auto error = DoInstall(item, crx_path, unpack_path);
 | 
|    update_context_->blocking_task_runner->PostTask(
 | 
| -      FROM_HERE,
 | 
| -      base::Bind(&ActionUpdate::InstallCompleteOnBlockingTaskRunner,
 | 
| -                 base::Unretained(this), item, crx_path, error_category,
 | 
| -                 result.error, result.extended_error));
 | 
| +      FROM_HERE, base::Bind(&ActionUpdate::InstallCompleteOnBlockingTaskRunner,
 | 
| +                            base::Unretained(this), item, crx_path, error, 0));
 | 
|  }
 | 
|  
 | 
|  void ActionUpdate::InstallCompleteOnBlockingTaskRunner(
 | 
|      CrxUpdateItem* item,
 | 
|      const base::FilePath& crx_path,
 | 
| -    ErrorCategory error_category,
 | 
| -    int error,
 | 
| +    UnpackerError error,
 | 
|      int extended_error) {
 | 
|    update_client::DeleteFileAndEmptyParentDirectory(crx_path);
 | 
|    update_context_->main_task_runner->PostDelayedTask(
 | 
|        FROM_HERE,
 | 
|        base::Bind(&ActionUpdate::InstallComplete, base::Unretained(this),
 | 
| -                 item->id, error_category, error, extended_error),
 | 
| +                 item->id, error, extended_error),
 | 
|        base::TimeDelta::FromMilliseconds(update_context_->config->StepDelay()));
 | 
|  }
 | 
|  
 | 
| -CrxInstaller::Result ActionUpdate::DoInstall(
 | 
| -    CrxUpdateItem* item,
 | 
| -    const base::FilePath& crx_path,
 | 
| -    const base::FilePath& unpack_path) {
 | 
| +UnpackerError ActionUpdate::DoInstall(CrxUpdateItem* item,
 | 
| +                                      const base::FilePath& crx_path,
 | 
| +                                      const base::FilePath& unpack_path) {
 | 
|    const auto& fingerprint = item->next_fp;
 | 
|    if (static_cast<int>(fingerprint.size()) !=
 | 
|        base::WriteFile(
 | 
|            unpack_path.Append(FILE_PATH_LITERAL("manifest.fingerprint")),
 | 
|            fingerprint.c_str(), base::checked_cast<int>(fingerprint.size()))) {
 | 
| -    return CrxInstaller::Result(InstallError::FINGERPRINT_WRITE_FAILED);
 | 
| +    return UnpackerError::kFingerprintWriteFailed;
 | 
|    }
 | 
|  
 | 
|    std::unique_ptr<base::DictionaryValue> manifest = ReadManifest(unpack_path);
 | 
|    if (!manifest.get())
 | 
| -    return CrxInstaller::Result(InstallError::BAD_MANIFEST);
 | 
| -
 | 
| -  return item->component.installer->Install(*manifest, unpack_path);
 | 
| +    return UnpackerError::kBadManifest;
 | 
| +
 | 
| +  return item->component.installer->Install(*manifest, unpack_path)
 | 
| +             ? UnpackerError::kNone
 | 
| +             : UnpackerError::kInstallerError;
 | 
|  }
 | 
|  
 | 
|  void ActionUpdate::InstallComplete(const std::string& id,
 | 
| -                                   ErrorCategory error_category,
 | 
| -                                   int error,
 | 
| +                                   UnpackerError error,
 | 
|                                     int extended_error) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|    DCHECK(id == update_context_->queue.front());
 | 
| @@ -220,13 +229,10 @@
 | 
|    CrxUpdateItem* item = FindUpdateItemById(id);
 | 
|    DCHECK(item);
 | 
|  
 | 
| -  if (error == 0) {
 | 
| -    DCHECK_EQ(ErrorCategory::kErrorNone, error_category);
 | 
| -    DCHECK_EQ(0, extended_error);
 | 
| +  if (error == UnpackerError::kNone)
 | 
|      OnInstallSuccess(item);
 | 
| -  } else {
 | 
| -    OnInstallError(item, error_category, error, extended_error);
 | 
| -  }
 | 
| +  else
 | 
| +    OnInstallError(item, error, extended_error);
 | 
|  }
 | 
|  
 | 
|  ActionUpdateDiff::ActionUpdateDiff() {
 | 
| @@ -315,13 +321,13 @@
 | 
|  }
 | 
|  
 | 
|  void ActionUpdateDiff::OnInstallError(CrxUpdateItem* item,
 | 
| -                                      ErrorCategory error_category,
 | 
| -                                      int error,
 | 
| +                                      UnpackerError error,
 | 
|                                        int extended_error) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|  
 | 
| -  item->diff_error_category = static_cast<int>(error_category);
 | 
| -  item->diff_error_code = error;
 | 
| +  item->diff_error_category =
 | 
| +      static_cast<int>(UnpackerErrorToErrorCategory(error));
 | 
| +  item->diff_error_code = static_cast<int>(error);
 | 
|    item->diff_extra_code1 = extended_error;
 | 
|    item->diff_update_failed = true;
 | 
|  
 | 
| @@ -408,14 +414,13 @@
 | 
|  }
 | 
|  
 | 
|  void ActionUpdateFull::OnInstallError(CrxUpdateItem* item,
 | 
| -                                      ErrorCategory error_category,
 | 
| -                                      int error,
 | 
| +                                      UnpackerError error,
 | 
|                                        int extended_error) {
 | 
|    DCHECK(thread_checker_.CalledOnValidThread());
 | 
|    DCHECK(item->state == CrxUpdateItem::State::kUpdating);
 | 
|  
 | 
| -  item->error_category = static_cast<int>(error_category);
 | 
| -  item->error_code = error;
 | 
| +  item->error_category = static_cast<int>(UnpackerErrorToErrorCategory(error));
 | 
| +  item->error_code = static_cast<int>(error);
 | 
|    item->extra_code1 = extended_error;
 | 
|    ChangeItemState(item, CrxUpdateItem::State::kNoUpdate);
 | 
|  
 | 
| 
 |