Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(483)

Unified Diff: components/update_client/action_update_check.cc

Issue 2835803002: Refactor the UpdateEngine and its actions in the component updater. (Closed)
Patch Set: feedback up to #6 Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/update_client/action_update_check.h ('k') | components/update_client/action_wait.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/update_client/action_update_check.cc
diff --git a/components/update_client/action_update_check.cc b/components/update_client/action_update_check.cc
deleted file mode 100644
index 2215affaa13a5ae4919fb003a33cdad4196e3d9b..0000000000000000000000000000000000000000
--- a/components/update_client/action_update_check.cc
+++ /dev/null
@@ -1,242 +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_check.h"
-
-#include <stddef.h>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/version.h"
-#include "components/update_client/action_update.h"
-#include "components/update_client/configurator.h"
-#include "components/update_client/update_checker.h"
-#include "components/update_client/update_client.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 {
-
-// Returns true if the |proposed| version is newer than |current| version.
-bool IsVersionNewer(const base::Version& current, const std::string& proposed) {
- base::Version proposed_ver(proposed);
- return proposed_ver.IsValid() && current.CompareTo(proposed_ver) < 0;
-}
-
-} // namespace
-
-ActionUpdateCheck::ActionUpdateCheck(
- std::unique_ptr<UpdateChecker> update_checker,
- const base::Version& browser_version,
- const std::string& extra_request_parameters)
- : update_checker_(std::move(update_checker)),
- browser_version_(browser_version),
- extra_request_parameters_(extra_request_parameters) {}
-
-ActionUpdateCheck::~ActionUpdateCheck() {
- DCHECK(thread_checker_.CalledOnValidThread());
-}
-
-void ActionUpdateCheck::Run(UpdateContext* update_context, Callback callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- ActionImpl::Run(update_context, callback);
-
- // Calls out to get the corresponding CrxComponent data for the CRXs in this
- // update context.
- vector<CrxComponent> crx_components;
- update_context_->crx_data_callback.Run(update_context_->ids, &crx_components);
-
- for (size_t i = 0; i != crx_components.size(); ++i) {
- std::unique_ptr<CrxUpdateItem> item = base::MakeUnique<CrxUpdateItem>();
- const CrxComponent& crx_component = crx_components[i];
-
- item->id = GetCrxComponentID(crx_component);
- item->component = crx_component;
- item->last_check = base::TimeTicks::Now();
- item->crx_urls.clear();
- item->crx_diffurls.clear();
- item->previous_version = crx_component.version;
- item->next_version = base::Version();
- item->previous_fp = crx_component.fingerprint;
- item->next_fp.clear();
- item->on_demand = update_context->is_foreground;
- item->diff_update_failed = false;
- item->error_category = 0;
- item->error_code = 0;
- item->extra_code1 = 0;
- item->diff_error_category = 0;
- item->diff_error_code = 0;
- item->diff_extra_code1 = 0;
- item->download_metrics.clear();
-
- CrxUpdateItem* item_ptr = item.get();
- update_context_->update_items[item_ptr->id] = std::move(item);
-
- ChangeItemState(item_ptr, CrxUpdateItem::State::kChecking);
- }
-
- update_checker_->CheckForUpdates(
- update_context_->update_items, extra_request_parameters_,
- update_context_->enabled_component_updates,
- base::Bind(&ActionUpdateCheck::UpdateCheckComplete,
- base::Unretained(this)));
-}
-
-void ActionUpdateCheck::UpdateCheckComplete(
- int error,
- const UpdateResponse::Results& results,
- int retry_after_sec) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- update_context_->retry_after_sec = retry_after_sec;
-
- if (!error)
- OnUpdateCheckSucceeded(results);
- else
- OnUpdateCheckFailed(error);
-}
-
-void ActionUpdateCheck::OnUpdateCheckSucceeded(
- const UpdateResponse::Results& results) {
- DCHECK(thread_checker_.CalledOnValidThread());
- VLOG(1) << "Update check succeeded.";
-
- for (const auto& result : results.list) {
- CrxUpdateItem* crx = FindUpdateItemById(result.extension_id);
- if (!crx) {
- VLOG(1) << "Component not found " << result.extension_id;
- continue;
- }
-
- DCHECK_EQ(CrxUpdateItem::State::kChecking, crx->state);
-
- if (result.status == "ok")
- HandleUpdateCheckOK(result, crx);
- else if (result.status == "noupdate")
- HandleUpdateCheckNoupdate(result, crx);
- else
- HandleUpdateCheckError(result, crx);
- }
-
- // All components that are not included in the update response are
- // considered up to date.
- ChangeAllItemsState(CrxUpdateItem::State::kChecking,
- CrxUpdateItem::State::kUpToDate);
-
- if (update_context_->queue.empty()) {
- VLOG(1) << "Update check completed but no action is needed.";
- UpdateComplete(Error::NONE);
- return;
- }
-
- // Starts the execution flow of updating the CRXs in this context.
- UpdateCrx();
-}
-
-void ActionUpdateCheck::HandleUpdateCheckOK(
- const UpdateResponse::Result& result,
- CrxUpdateItem* crx) {
- DCHECK(thread_checker_.CalledOnValidThread());
-
- const auto& manifest = result.manifest;
-
- if (manifest.version.empty()) {
- // It can't update without a manifest version.
- VLOG(1) << "No manifest version available for CRX: " << crx->id;
- ChangeItemState(crx, CrxUpdateItem::State::kNoUpdate);
- return;
- }
-
- if (!IsVersionNewer(crx->component.version, manifest.version)) {
- // The CRX is up to date.
- VLOG(1) << "Component already up to date: " << crx->id;
- ChangeItemState(crx, CrxUpdateItem::State::kUpToDate);
- return;
- }
-
- if (!manifest.browser_min_version.empty()) {
- if (IsVersionNewer(browser_version_, manifest.browser_min_version)) {
- // The CRX is not compatible with this Chrome version.
- VLOG(1) << "Ignoring incompatible CRX: " << crx->id;
- ChangeItemState(crx, CrxUpdateItem::State::kNoUpdate);
- return;
- }
- }
-
- if (manifest.packages.size() != 1) {
- // Assume one and only one package per CRX.
- VLOG(1) << "Ignoring multiple packages for CRX: " << crx->id;
- ChangeItemState(crx, CrxUpdateItem::State::kNoUpdate);
- return;
- }
-
- // Parse the members of the result and queue an upgrade for this CRX.
- VLOG(1) << "Update found for CRX: " << crx->id;
-
- crx->next_version = base::Version(manifest.version);
- const auto& package = manifest.packages.front();
- crx->next_fp = package.fingerprint;
-
- // Resolve the urls by combining the base urls with the package names.
- for (const auto& crx_url : result.crx_urls) {
- const GURL url = crx_url.Resolve(package.name);
- if (url.is_valid())
- crx->crx_urls.push_back(url);
- }
- for (const auto& crx_diffurl : result.crx_diffurls) {
- const GURL url = crx_diffurl.Resolve(package.namediff);
- if (url.is_valid())
- crx->crx_diffurls.push_back(url);
- }
-
- crx->hash_sha256 = package.hash_sha256;
- crx->hashdiff_sha256 = package.hashdiff_sha256;
-
- ChangeItemState(crx, CrxUpdateItem::State::kCanUpdate);
-
- update_context_->queue.push(crx->id);
-}
-
-void ActionUpdateCheck::HandleUpdateCheckNoupdate(
- const UpdateResponse::Result& result,
- CrxUpdateItem* crx) {
- DCHECK(thread_checker_.CalledOnValidThread());
- VLOG(1) << "No update for CRX: " << crx->id;
- ChangeItemState(crx, CrxUpdateItem::State::kNoUpdate);
-}
-
-void ActionUpdateCheck::HandleUpdateCheckError(
- const UpdateResponse::Result& result,
- CrxUpdateItem* crx) {
- DCHECK(thread_checker_.CalledOnValidThread());
- VLOG(1) << "Update error for CRX: " << crx->id << ", " << result.status;
- ChangeItemState(crx, CrxUpdateItem::State::kNoUpdate);
-}
-
-void ActionUpdateCheck::OnUpdateCheckFailed(int error) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(error);
-
- VLOG(1) << "Update check failed." << error;
-
- ChangeAllItemsState(CrxUpdateItem::State::kChecking,
- CrxUpdateItem::State::kNoUpdate);
-
- UpdateComplete(Error::UPDATE_CHECK_ERROR);
-}
-
-} // namespace update_client
« no previous file with comments | « components/update_client/action_update_check.h ('k') | components/update_client/action_wait.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698