1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "components/update_client/action_wait.h"
8 #include "base/bind_helpers.h"
9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "components/update_client/update_engine.h"
14 namespace update_client
{
16 ActionWait::ActionWait(const base::TimeDelta
& time_delta
)
17 : time_delta_(time_delta
) {
20 ActionWait::~ActionWait() {
21 DCHECK(thread_checker_
.CalledOnValidThread());
24 void ActionWait::Run(UpdateContext
* update_context
, Callback callback
) {
25 DCHECK(thread_checker_
.CalledOnValidThread());
26 DCHECK(update_context
);
28 ActionImpl::Run(update_context
, callback
);
30 const bool result
= base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
31 FROM_HERE
, base::Bind(&ActionWait::WaitComplete
, base::Unretained(this)),
35 // Move all items pending updates to the |kNoUpdate| state then return the
36 // control flow to the update engine, as the updates in this context are
37 // completed with an error.
38 while (!update_context
->queue
.empty()) {
39 const auto item
= FindUpdateItemById(update_context
->queue
.front());
41 item
->error_category
= static_cast<int>(ErrorCategory::kServiceError
);
42 item
->error_code
= static_cast<int>(ServiceError::ERROR_WAIT
);
43 ChangeItemState(item
, CrxUpdateItem::State::kNoUpdate
);
47 update_context
->queue
.pop();
49 callback
.Run(static_cast<int>(ServiceError::ERROR_WAIT
));
52 NotifyObservers(UpdateClient::Observer::Events::COMPONENT_WAIT
,
53 update_context_
->queue
.front());
56 void ActionWait::WaitComplete() {
57 DCHECK(thread_checker_
.CalledOnValidThread());
61 } // namespace update_client