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

Unified Diff: components/update_client/update_engine.h

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/update_client_unittest.cc ('k') | components/update_client/update_engine.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/update_client/update_engine.h
diff --git a/components/update_client/update_engine.h b/components/update_client/update_engine.h
index e24b2a178cbda12b92e8547bb9af10c2d213a3ff..cec91f987dcf5e200d36f75e730e6240bebb57e5 100644
--- a/components/update_client/update_engine.h
+++ b/components/update_client/update_engine.h
@@ -5,6 +5,7 @@
#ifndef COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_
#define COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_
+#include <iterator>
#include <list>
#include <map>
#include <memory>
@@ -17,7 +18,8 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/threading/thread_checker.h"
-#include "components/update_client/action.h"
+#include "base/time/time.h"
+#include "components/update_client/component.h"
#include "components/update_client/component_patcher_operation.h"
#include "components/update_client/crx_downloader.h"
#include "components/update_client/crx_update_item.h"
@@ -28,7 +30,6 @@
namespace base {
class TimeTicks;
class SequencedTaskRunner;
-class SingleThreadTaskRunner;
} // namespace base
namespace update_client {
@@ -61,13 +62,37 @@ class UpdateEngine {
const UpdateClient::CrxDataCallback& crx_data_callback,
const Callback& update_callback);
+ void SendUninstallPing(const std::string& id,
+ const base::Version& version,
+ int reason,
+ const Callback& update_callback);
+
private:
- void UpdateComplete(UpdateContext* update_context, Error error);
+ using UpdateContexts = std::set<std::unique_ptr<UpdateContext>>;
+ using UpdateContextIterator = UpdateContexts::iterator;
+
+ void UpdateComplete(const UpdateContextIterator& it, Error error);
+
+ void ComponentCheckingForUpdatesStart(const UpdateContextIterator& it,
+ const Component& component);
+ void ComponentCheckingForUpdatesComplete(const UpdateContextIterator& it,
+ const Component& component);
+ void UpdateCheckComplete(const UpdateContextIterator& it);
+
+ void DoUpdateCheck(const UpdateContextIterator& it);
+ void UpdateCheckDone(const UpdateContextIterator& it,
+ int error,
+ int retry_after_sec);
+
+ void HandleComponent(const UpdateContextIterator& it);
+ void HandleComponentComplete(const UpdateContextIterator& it);
// Returns true if the update engine rejects this update call because it
// occurs too soon.
bool IsThrottled(bool is_foreground) const;
+ // base::TimeDelta GetNextUpdateDelay(const Component& component) const;
+
base::ThreadChecker thread_checker_;
scoped_refptr<Configurator> config_;
@@ -84,7 +109,7 @@ class UpdateEngine {
const NotifyObserversCallback notify_observers_callback_;
// Contains the contexts associated with each update in progress.
- std::set<UpdateContext*> update_contexts_;
+ UpdateContexts update_contexts_;
// Implements a rate limiting mechanism for background update checks. Has the
// effect of rejecting the update call if the update call occurs before
@@ -104,16 +129,14 @@ struct UpdateContext {
const UpdateClient::CrxDataCallback& crx_data_callback,
const UpdateEngine::NotifyObserversCallback& notify_observers_callback,
const UpdateEngine::Callback& callback,
- UpdateChecker::Factory update_checker_factory,
- CrxDownloader::Factory crx_downloader_factory,
- PingManager* ping_manager);
+ CrxDownloader::Factory crx_downloader_factory);
~UpdateContext();
scoped_refptr<Configurator> config;
// True if this update has been initiated by the user.
- bool is_foreground;
+ bool is_foreground = false;
// True if the component updates are enabled in this context.
const bool enabled_component_updates;
@@ -130,30 +153,34 @@ struct UpdateContext {
// Called when the all updates associated with this context have completed.
const UpdateEngine::Callback callback;
- // Posts replies back to the main thread.
- scoped_refptr<base::SingleThreadTaskRunner> main_task_runner;
-
// Runs tasks in a blocking thread pool.
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner;
- // Creates instances of UpdateChecker;
- UpdateChecker::Factory update_checker_factory;
-
// Creates instances of CrxDownloader;
CrxDownloader::Factory crx_downloader_factory;
- PingManager* ping_manager; // Not owned by this class.
+ std::unique_ptr<UpdateChecker> update_checker;
- std::unique_ptr<Action> current_action;
+ // The time in seconds to wait until doing further update checks.
+ int retry_after_sec = 0;
- // Contains the CrxUpdateItem instances of the items to update.
- IdToCrxUpdateItemMap update_items;
+ int update_check_error = 0;
+ size_t num_components_ready_to_check = 0;
+ size_t num_components_checked = 0;
- // Contains the ids of the items to update.
- std::queue<std::string> queue;
+ IdToComponentPtrMap components;
- // The time in seconds to wait until doing further update checks.
- int retry_after_sec;
+ std::queue<std::string> component_queue;
+
+ // The time to wait before handling the update for a component.
+ // The wait time is proportional with the cost incurred by updating
+ // the component. The more time it takes to download and apply the
+ // update for the current component, the longer the wait until the engine
+ // is handling the next component in the queue.
+ base::TimeDelta next_update_delay;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(UpdateContext);
};
} // namespace update_client
« no previous file with comments | « components/update_client/update_client_unittest.cc ('k') | components/update_client/update_engine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698