| // Copyright 2020 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 "chrome/browser/updater/browser_updater_client.h" |
| |
| #include <string> |
| #include <utility> |
| |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/logging.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/task/post_task.h" |
| #include "base/threading/sequenced_task_runner_handle.h" |
| #include "chrome/updater/update_service.h" |
| #include "components/version_info/version_info.h" |
| |
| BrowserUpdaterClient::BrowserUpdaterClient() |
| : callback_task_runner_(base::SequencedTaskRunnerHandle::Get()) {} |
| |
| BrowserUpdaterClient::~BrowserUpdaterClient() = default; |
| |
| void BrowserUpdaterClient::Register() { |
| BeginRegister( |
| {}, {}, version_info::GetVersionNumber(), |
| base::BindOnce(&BrowserUpdaterClient::RegistrationCompleted, this)); |
| } |
| |
| void BrowserUpdaterClient::RegistrationCompleted( |
| updater::UpdateService::Result result) { |
| if (result != updater::UpdateService::Result::kSuccess) { |
| VLOG(1) << "Updater registration error: " << result; |
| } |
| } |
| |
| void BrowserUpdaterClient::CheckForUpdate( |
| base::RepeatingCallback<void(updater::UpdateService::UpdateState)> |
| version_updater_callback) { |
| DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
| |
| updater::UpdateService::UpdateState update_state; |
| update_state.state = |
| updater::UpdateService::UpdateState::State::kCheckingForUpdates; |
| callback_task_runner_->PostTask( |
| FROM_HERE, base::BindRepeating(version_updater_callback, update_state)); |
| BeginUpdateCheck( |
| base::BindRepeating(&BrowserUpdaterClient::HandleStatusUpdate, this, |
| std::move(version_updater_callback)), |
| base::BindOnce(&BrowserUpdaterClient::UpdateCompleted, this, |
| std::move(version_updater_callback))); |
| } |
| |
| void BrowserUpdaterClient::HandleStatusUpdate( |
| base::RepeatingCallback<void(updater::UpdateService::UpdateState)> callback, |
| updater::UpdateService::UpdateState update_state) { |
| callback_task_runner_->PostTask(FROM_HERE, |
| base::BindRepeating(callback, update_state)); |
| } |
| |
| void BrowserUpdaterClient::UpdateCompleted( |
| base::RepeatingCallback<void(updater::UpdateService::UpdateState)> callback, |
| updater::UpdateService::Result result) { |
| VLOG(1) << "Result of update was: " << result; |
| |
| if (result != updater::UpdateService::Result::kSuccess) { |
| updater::UpdateService::UpdateState update_state; |
| update_state.state = |
| updater::UpdateService::UpdateState::State::kUpdateError; |
| update_state.error_category = |
| updater::UpdateService::ErrorCategory::kUpdateCheck; |
| update_state.error_code = static_cast<int>(result); |
| |
| callback_task_runner_->PostTask( |
| FROM_HERE, base::BindRepeating(callback, update_state)); |
| } |
| } |