Commit ac01799a authored by Sorin Jianu's avatar Sorin Jianu Committed by Commit Bot

Replace the iterator with a reference in the update_client::UpdateEngine.

Since the UpdateContext is now a ref counted type, using the iterator
adds an unnecessary level of obfuscation.

Also, to implement task cancellation, a mechanism is needed to relate
the update task and its context, and the iterator is not appropriate
for that.

TBR: waffles
Bug: 822990
Change-Id: I8db51b24e4ef0f9b30f434820fa6d3bd1b066e98
Reviewed-on: https://chromium-review.googlesource.com/966966
Commit-Queue: Sorin Jianu <sorin@chromium.org>
Reviewed-by: default avatarSorin Jianu <sorin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544069}
parent 4a72cea3
...@@ -94,9 +94,9 @@ void UpdateEngine::Update(bool is_foreground, ...@@ -94,9 +94,9 @@ void UpdateEngine::Update(bool is_foreground,
DCHECK(result.second); DCHECK(result.second);
const auto it = result.first; const auto update_context = *result.first;
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
DCHECK(!update_context->session_id.empty());
// Calls out to get the corresponding CrxComponent data for the CRXs in this // Calls out to get the corresponding CrxComponent data for the CRXs in this
// update context. // update context.
...@@ -123,16 +123,14 @@ void UpdateEngine::Update(bool is_foreground, ...@@ -123,16 +123,14 @@ void UpdateEngine::Update(bool is_foreground,
// Handle |kNew| state. This will transition the components to |kChecking|. // Handle |kNew| state. This will transition the components to |kChecking|.
component.Handle( component.Handle(
base::BindOnce(&UpdateEngine::ComponentCheckingForUpdatesStart, base::BindOnce(&UpdateEngine::ComponentCheckingForUpdatesStart,
base::Unretained(this), it, id)); base::Unretained(this), update_context, id));
} }
} }
void UpdateEngine::ComponentCheckingForUpdatesStart( void UpdateEngine::ComponentCheckingForUpdatesStart(
const UpdateContextIterator it, scoped_refptr<UpdateContext> update_context,
const std::string& id) { const std::string& id) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
DCHECK_EQ(1u, update_context->components.count(id)); DCHECK_EQ(1u, update_context->components.count(id));
...@@ -142,7 +140,7 @@ void UpdateEngine::ComponentCheckingForUpdatesStart( ...@@ -142,7 +140,7 @@ void UpdateEngine::ComponentCheckingForUpdatesStart(
auto& component = *update_context->components.at(id); auto& component = *update_context->components.at(id);
component.Handle( component.Handle(
base::BindOnce(&UpdateEngine::ComponentCheckingForUpdatesComplete, base::BindOnce(&UpdateEngine::ComponentCheckingForUpdatesComplete,
base::Unretained(this), it)); base::Unretained(this), update_context));
++update_context->num_components_ready_to_check; ++update_context->num_components_ready_to_check;
if (update_context->num_components_ready_to_check < if (update_context->num_components_ready_to_check <
...@@ -151,14 +149,12 @@ void UpdateEngine::ComponentCheckingForUpdatesStart( ...@@ -151,14 +149,12 @@ void UpdateEngine::ComponentCheckingForUpdatesStart(
} }
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, FROM_HERE, base::BindOnce(&UpdateEngine::DoUpdateCheck,
base::BindOnce(&UpdateEngine::DoUpdateCheck, base::Unretained(this), it)); base::Unretained(this), update_context));
} }
void UpdateEngine::DoUpdateCheck(const UpdateContextIterator it) { void UpdateEngine::DoUpdateCheck(scoped_refptr<UpdateContext> update_context) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
update_context->update_checker = update_context->update_checker =
...@@ -169,15 +165,13 @@ void UpdateEngine::DoUpdateCheck(const UpdateContextIterator it) { ...@@ -169,15 +165,13 @@ void UpdateEngine::DoUpdateCheck(const UpdateContextIterator it) {
update_context->components, config_->ExtraRequestParams(), update_context->components, config_->ExtraRequestParams(),
update_context->enabled_component_updates, update_context->enabled_component_updates,
base::BindOnce(&UpdateEngine::UpdateCheckDone, base::Unretained(this), base::BindOnce(&UpdateEngine::UpdateCheckDone, base::Unretained(this),
it)); update_context));
} }
void UpdateEngine::UpdateCheckDone(const UpdateContextIterator it, void UpdateEngine::UpdateCheckDone(scoped_refptr<UpdateContext> update_context,
int error, int error,
int retry_after_sec) { int retry_after_sec) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
update_context->retry_after_sec = retry_after_sec; update_context->retry_after_sec = retry_after_sec;
...@@ -207,10 +201,8 @@ void UpdateEngine::UpdateCheckDone(const UpdateContextIterator it, ...@@ -207,10 +201,8 @@ void UpdateEngine::UpdateCheckDone(const UpdateContextIterator it,
} }
void UpdateEngine::ComponentCheckingForUpdatesComplete( void UpdateEngine::ComponentCheckingForUpdatesComplete(
const UpdateContextIterator it) { scoped_refptr<UpdateContext> update_context) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
++update_context->num_components_checked; ++update_context->num_components_checked;
...@@ -220,13 +212,12 @@ void UpdateEngine::ComponentCheckingForUpdatesComplete( ...@@ -220,13 +212,12 @@ void UpdateEngine::ComponentCheckingForUpdatesComplete(
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&UpdateEngine::UpdateCheckComplete, FROM_HERE, base::BindOnce(&UpdateEngine::UpdateCheckComplete,
base::Unretained(this), it)); base::Unretained(this), update_context));
} }
void UpdateEngine::UpdateCheckComplete(const UpdateContextIterator it) { void UpdateEngine::UpdateCheckComplete(
scoped_refptr<UpdateContext> update_context) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
for (const auto& id : update_context->ids) for (const auto& id : update_context->ids)
...@@ -234,13 +225,12 @@ void UpdateEngine::UpdateCheckComplete(const UpdateContextIterator it) { ...@@ -234,13 +225,12 @@ void UpdateEngine::UpdateCheckComplete(const UpdateContextIterator it) {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent, FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent,
base::Unretained(this), it)); base::Unretained(this), update_context));
} }
void UpdateEngine::HandleComponent(const UpdateContextIterator it) { void UpdateEngine::HandleComponent(
scoped_refptr<UpdateContext> update_context) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
auto& queue = update_context->component_queue; auto& queue = update_context->component_queue;
...@@ -251,8 +241,9 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) { ...@@ -251,8 +241,9 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) {
: Error::NONE; : Error::NONE;
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&UpdateEngine::UpdateComplete, FROM_HERE,
base::Unretained(this), it, error)); base::BindOnce(&UpdateEngine::UpdateComplete, base::Unretained(this),
update_context, error));
return; return;
} }
...@@ -261,12 +252,12 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) { ...@@ -261,12 +252,12 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) {
const auto& component = update_context->components.at(id); const auto& component = update_context->components.at(id);
DCHECK(component); DCHECK(component);
auto& next_update_delay = (*it)->next_update_delay; auto& next_update_delay = update_context->next_update_delay;
if (!next_update_delay.is_zero() && component->IsUpdateAvailable()) { if (!next_update_delay.is_zero() && component->IsUpdateAvailable()) {
base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&UpdateEngine::HandleComponent, base::Unretained(this), base::BindOnce(&UpdateEngine::HandleComponent, base::Unretained(this),
it), update_context),
next_update_delay); next_update_delay);
next_update_delay = base::TimeDelta(); next_update_delay = base::TimeDelta();
...@@ -276,13 +267,12 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) { ...@@ -276,13 +267,12 @@ void UpdateEngine::HandleComponent(const UpdateContextIterator it) {
} }
component->Handle(base::BindOnce(&UpdateEngine::HandleComponentComplete, component->Handle(base::BindOnce(&UpdateEngine::HandleComponentComplete,
base::Unretained(this), it)); base::Unretained(this), update_context));
} }
void UpdateEngine::HandleComponentComplete(const UpdateContextIterator it) { void UpdateEngine::HandleComponentComplete(
scoped_refptr<UpdateContext> update_context) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
auto& queue = update_context->component_queue; auto& queue = update_context->component_queue;
...@@ -306,18 +296,23 @@ void UpdateEngine::HandleComponentComplete(const UpdateContextIterator it) { ...@@ -306,18 +296,23 @@ void UpdateEngine::HandleComponentComplete(const UpdateContextIterator it) {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent, FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent,
base::Unretained(this), it)); base::Unretained(this), update_context));
} }
void UpdateEngine::UpdateComplete(const UpdateContextIterator it, Error error) { void UpdateEngine::UpdateComplete(scoped_refptr<UpdateContext> update_context,
Error error) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(update_context->callback), error)); FROM_HERE, base::BindOnce(std::move(update_context->callback), error));
const auto it =
std::find_if(update_contexts_.begin(), update_contexts_.end(),
[update_context](scoped_refptr<UpdateContext> other) {
return update_context->session_id == other->session_id;
});
DCHECK(it != update_contexts_.end());
update_contexts_.erase(it); update_contexts_.erase(it);
} }
...@@ -362,9 +357,7 @@ void UpdateEngine::SendUninstallPing(const std::string& id, ...@@ -362,9 +357,7 @@ void UpdateEngine::SendUninstallPing(const std::string& id,
nullptr)); nullptr));
DCHECK(result.second); DCHECK(result.second);
const auto update_context = *result.first;
const auto it = result.first;
const auto& update_context = *it;
DCHECK(update_context); DCHECK(update_context);
DCHECK_EQ(1u, update_context->ids.size()); DCHECK_EQ(1u, update_context->ids.size());
DCHECK_EQ(1u, update_context->components.count(id)); DCHECK_EQ(1u, update_context->components.count(id));
...@@ -376,7 +369,7 @@ void UpdateEngine::SendUninstallPing(const std::string& id, ...@@ -376,7 +369,7 @@ void UpdateEngine::SendUninstallPing(const std::string& id,
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent, FROM_HERE, base::BindOnce(&UpdateEngine::HandleComponent,
base::Unretained(this), it)); base::Unretained(this), update_context));
} }
} // namespace update_client } // namespace update_client
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
#ifndef COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_ #ifndef COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_
#define COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_ #define COMPONENTS_UPDATE_CLIENT_UPDATE_ENGINE_H_
#include <iterator>
#include <list> #include <list>
#include <map> #include <map>
#include <memory> #include <memory>
...@@ -69,22 +68,23 @@ class UpdateEngine : public base::RefCounted<UpdateEngine> { ...@@ -69,22 +68,23 @@ class UpdateEngine : public base::RefCounted<UpdateEngine> {
~UpdateEngine(); ~UpdateEngine();
using UpdateContexts = std::set<scoped_refptr<UpdateContext>>; using UpdateContexts = std::set<scoped_refptr<UpdateContext>>;
using UpdateContextIterator = UpdateContexts::iterator;
void UpdateComplete(UpdateContextIterator it, Error error); void UpdateComplete(scoped_refptr<UpdateContext> update_context, Error error);
void ComponentCheckingForUpdatesStart(UpdateContextIterator it, void ComponentCheckingForUpdatesStart(
const std::string& id); scoped_refptr<UpdateContext> update_context,
void ComponentCheckingForUpdatesComplete(UpdateContextIterator it); const std::string& id);
void UpdateCheckComplete(UpdateContextIterator it); void ComponentCheckingForUpdatesComplete(
scoped_refptr<UpdateContext> update_context);
void UpdateCheckComplete(scoped_refptr<UpdateContext> update_context);
void DoUpdateCheck(UpdateContextIterator it); void DoUpdateCheck(scoped_refptr<UpdateContext> update_context);
void UpdateCheckDone(UpdateContextIterator it, void UpdateCheckDone(scoped_refptr<UpdateContext> update_context,
int error, int error,
int retry_after_sec); int retry_after_sec);
void HandleComponent(UpdateContextIterator it); void HandleComponent(scoped_refptr<UpdateContext> update_context);
void HandleComponentComplete(UpdateContextIterator it); void HandleComponentComplete(scoped_refptr<UpdateContext> update_context);
// Returns true if the update engine rejects this update call because it // Returns true if the update engine rejects this update call because it
// occurs too soon. // occurs too soon.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment