Index: components/update_client/action_update.cc |
diff --git a/components/update_client/action_update.cc b/components/update_client/action_update.cc |
deleted file mode 100644 |
index 4d4fce297c24bf6537bd38dd063986e6e1436b41..0000000000000000000000000000000000000000 |
--- a/components/update_client/action_update.cc |
+++ /dev/null |
@@ -1,422 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/update_client/action_update.h" |
- |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/callback.h" |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/location.h" |
-#include "base/logging.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
-#include "base/values.h" |
-#include "base/version.h" |
-#include "components/update_client/component_unpacker.h" |
-#include "components/update_client/configurator.h" |
-#include "components/update_client/update_client_errors.h" |
-#include "components/update_client/utils.h" |
- |
-using std::string; |
-using std::vector; |
- |
-namespace update_client { |
- |
-namespace { |
- |
-void AppendDownloadMetrics( |
- const std::vector<CrxDownloader::DownloadMetrics>& source, |
- std::vector<CrxDownloader::DownloadMetrics>* destination) { |
- destination->insert(destination->end(), source.begin(), source.end()); |
-} |
- |
-} // namespace |
- |
-ActionUpdate::ActionUpdate() { |
-} |
- |
-ActionUpdate::~ActionUpdate() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-void ActionUpdate::Run(UpdateContext* update_context, Callback callback) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ActionImpl::Run(update_context, callback); |
- |
- DCHECK(!update_context_->queue.empty()); |
- |
- const std::string& id = update_context_->queue.front(); |
- CrxUpdateItem* item = FindUpdateItemById(id); |
- DCHECK(item); |
- |
- StartDownload(item); |
-} |
- |
-void ActionUpdate::StartDownload(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- crx_downloader_.reset((*update_context_->crx_downloader_factory)( |
- IsBackgroundDownload(item), |
- update_context_->config->RequestContext(), |
- update_context_->blocking_task_runner) |
- .release()); |
- OnDownloadStart(item); |
- |
- const std::string id = item->id; |
- crx_downloader_->set_progress_callback( |
- base::Bind(&ActionUpdate::DownloadProgress, base::Unretained(this), id)); |
- crx_downloader_->StartDownload( |
- GetUrls(item), GetHash(item), |
- base::Bind(&ActionUpdate::DownloadComplete, base::Unretained(this), id)); |
-} |
- |
-void ActionUpdate::DownloadProgress( |
- const std::string& id, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(id == update_context_->queue.front()); |
- |
- using Events = UpdateClient::Observer::Events; |
- NotifyObservers(Events::COMPONENT_UPDATE_DOWNLOADING, id); |
-} |
- |
-void ActionUpdate::DownloadComplete( |
- const std::string& id, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(id == update_context_->queue.front()); |
- |
- CrxUpdateItem* item = FindUpdateItemById(id); |
- DCHECK(item); |
- |
- AppendDownloadMetrics(crx_downloader_->download_metrics(), |
- &item->download_metrics); |
- |
- crx_downloader_.reset(); |
- |
- if (download_result.error) { |
- OnDownloadError(item, download_result); |
- } else { |
- OnDownloadSuccess(item, download_result); |
- update_context_->main_task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(&ActionUpdate::StartInstall, base::Unretained(this), item, |
- download_result.response)); |
- } |
-} |
- |
-void ActionUpdate::StartInstall(CrxUpdateItem* item, |
- const base::FilePath& crx_path) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->id == update_context_->queue.front()); |
- |
- OnInstallStart(item); |
- |
- update_context_->blocking_task_runner->PostTask( |
- FROM_HERE, base::Bind(&ActionUpdate::StartUnpackOnBlockingTaskRunner, |
- base::Unretained(this), item, crx_path)); |
-} |
- |
-void ActionUpdate::StartUnpackOnBlockingTaskRunner( |
- CrxUpdateItem* item, |
- const base::FilePath& crx_path) { |
- DCHECK(update_context_->blocking_task_runner->RunsTasksOnCurrentThread()); |
- unpacker_ = new ComponentUnpacker( |
- item->component.pk_hash, crx_path, |
- item->component.installer, |
- update_context_->config->CreateOutOfProcessPatcher(), |
- update_context_->blocking_task_runner); |
- unpacker_->Unpack( |
- base::Bind(&ActionUpdate::UnpackCompleteOnBlockingTaskRunner, |
- base::Unretained(this), item, crx_path)); |
-} |
- |
-void ActionUpdate::UnpackCompleteOnBlockingTaskRunner( |
- CrxUpdateItem* item, |
- const base::FilePath& crx_path, |
- const ComponentUnpacker::Result& result) { |
- DCHECK(update_context_->blocking_task_runner->RunsTasksOnCurrentThread()); |
- unpacker_ = nullptr; |
- |
- if (result.error == UnpackerError::kNone) { |
- update_context_->blocking_task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(&ActionUpdate::StartInstallOnBlockingTaskRunner, |
- base::Unretained(this), item, crx_path, result.unpack_path)); |
- } else { |
- 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), |
- result.extended_error)); |
- } |
-} |
- |
-void ActionUpdate::StartInstallOnBlockingTaskRunner( |
- CrxUpdateItem* item, |
- const base::FilePath& crx_path, |
- const base::FilePath& unpack_path) { |
- 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; |
- 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)); |
-} |
- |
-void ActionUpdate::InstallCompleteOnBlockingTaskRunner( |
- CrxUpdateItem* item, |
- const base::FilePath& crx_path, |
- ErrorCategory error_category, |
- int error, |
- int extended_error) { |
- update_client::DeleteFileAndEmptyParentDirectory(crx_path); |
- update_context_->main_task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(&ActionUpdate::InstallComplete, base::Unretained(this), |
- item->id, error_category, error, extended_error)); |
-} |
- |
-CrxInstaller::Result 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); |
- } |
- |
- 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); |
-} |
- |
-void ActionUpdate::InstallComplete(const std::string& id, |
- ErrorCategory error_category, |
- int error, |
- int extended_error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(id == update_context_->queue.front()); |
- |
- CrxUpdateItem* item = FindUpdateItemById(id); |
- DCHECK(item); |
- |
- if (error == 0) { |
- DCHECK_EQ(ErrorCategory::kErrorNone, error_category); |
- DCHECK_EQ(0, extended_error); |
- OnInstallSuccess(item); |
- } else { |
- OnInstallError(item, error_category, error, extended_error); |
- } |
-} |
- |
-ActionUpdateDiff::ActionUpdateDiff() { |
-} |
- |
-ActionUpdateDiff::~ActionUpdateDiff() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-std::unique_ptr<Action> ActionUpdateDiff::Create() { |
- return std::unique_ptr<Action>(new ActionUpdateDiff); |
-} |
- |
-void ActionUpdateDiff::TryUpdateFull() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- std::unique_ptr<Action> update_action(ActionUpdateFull::Create()); |
- |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, base::Bind(&Action::Run, base::Unretained(update_action.get()), |
- update_context_, callback_)); |
- |
- update_context_->current_action = std::move(update_action); |
-} |
- |
-bool ActionUpdateDiff::IsBackgroundDownload(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return false; |
-} |
- |
-std::vector<GURL> ActionUpdateDiff::GetUrls(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return item->crx_diffurls; |
-} |
- |
-std::string ActionUpdateDiff::GetHash(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return item->hashdiff_sha256; |
-} |
- |
-void ActionUpdateDiff::OnDownloadStart(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kCanUpdate); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kDownloadingDiff); |
-} |
- |
-void ActionUpdateDiff::OnDownloadSuccess( |
- CrxUpdateItem* item, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kDownloadingDiff); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kDownloaded); |
-} |
- |
-void ActionUpdateDiff::OnDownloadError( |
- CrxUpdateItem* item, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kDownloadingDiff); |
- |
- item->diff_error_category = static_cast<int>(ErrorCategory::kNetworkError); |
- item->diff_error_code = download_result.error; |
- item->diff_update_failed = true; |
- |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, |
- base::Bind(&ActionUpdateDiff::TryUpdateFull, base::Unretained(this))); |
-} |
- |
-void ActionUpdateDiff::OnInstallStart(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kUpdatingDiff); |
-} |
- |
-void ActionUpdateDiff::OnInstallSuccess(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kUpdatingDiff); |
- |
- item->component.version = item->next_version; |
- item->component.fingerprint = item->next_fp; |
- ChangeItemState(item, CrxUpdateItem::State::kUpdated); |
- |
- UpdateCrxComplete(item); |
-} |
- |
-void ActionUpdateDiff::OnInstallError(CrxUpdateItem* item, |
- ErrorCategory error_category, |
- int error, |
- int extended_error) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- item->diff_error_category = static_cast<int>(error_category); |
- item->diff_error_code = error; |
- item->diff_extra_code1 = extended_error; |
- item->diff_update_failed = true; |
- |
- base::ThreadTaskRunnerHandle::Get()->PostTask( |
- FROM_HERE, |
- base::Bind(&ActionUpdateDiff::TryUpdateFull, base::Unretained(this))); |
-} |
- |
-ActionUpdateFull::ActionUpdateFull() { |
-} |
- |
-ActionUpdateFull::~ActionUpdateFull() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-std::unique_ptr<Action> ActionUpdateFull::Create() { |
- return std::unique_ptr<Action>(new ActionUpdateFull); |
-} |
- |
-bool ActionUpdateFull::IsBackgroundDownload(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- // On demand component updates are always downloaded in foreground. |
- return !item->on_demand && item->component.allows_background_download && |
- update_context_->config->EnabledBackgroundDownloader(); |
-} |
- |
-std::vector<GURL> ActionUpdateFull::GetUrls(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return item->crx_urls; |
-} |
- |
-std::string ActionUpdateFull::GetHash(const CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return item->hash_sha256; |
-} |
- |
-void ActionUpdateFull::OnDownloadStart(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kCanUpdate || |
- item->diff_update_failed); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kDownloading); |
-} |
- |
-void ActionUpdateFull::OnDownloadSuccess( |
- CrxUpdateItem* item, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kDownloading); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kDownloaded); |
-} |
- |
-void ActionUpdateFull::OnDownloadError( |
- CrxUpdateItem* item, |
- const CrxDownloader::Result& download_result) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kDownloading); |
- |
- item->error_category = static_cast<int>(ErrorCategory::kNetworkError); |
- item->error_code = download_result.error; |
- ChangeItemState(item, CrxUpdateItem::State::kNoUpdate); |
- |
- UpdateCrxComplete(item); |
-} |
- |
-void ActionUpdateFull::OnInstallStart(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kDownloaded); |
- |
- ChangeItemState(item, CrxUpdateItem::State::kUpdating); |
-} |
- |
-void ActionUpdateFull::OnInstallSuccess(CrxUpdateItem* item) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(item->state == CrxUpdateItem::State::kUpdating); |
- |
- item->component.version = item->next_version; |
- item->component.fingerprint = item->next_fp; |
- ChangeItemState(item, CrxUpdateItem::State::kUpdated); |
- |
- UpdateCrxComplete(item); |
-} |
- |
-void ActionUpdateFull::OnInstallError(CrxUpdateItem* item, |
- ErrorCategory error_category, |
- int 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->extra_code1 = extended_error; |
- ChangeItemState(item, CrxUpdateItem::State::kNoUpdate); |
- |
- UpdateCrxComplete(item); |
-} |
- |
-} // namespace update_client |