Chromium Code Reviews| Index: components/offline_pages/core/background/reconcile_task.cc |
| diff --git a/components/offline_pages/core/background/reconcile_task.cc b/components/offline_pages/core/background/reconcile_task.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..65644960e193c4a804ea056359f5e505594bc159 |
| --- /dev/null |
| +++ b/components/offline_pages/core/background/reconcile_task.cc |
| @@ -0,0 +1,70 @@ |
| +// Copyright 2016 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/offline_pages/core/background/reconcile_task.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/logging.h" |
| +#include "components/offline_pages/core/background/offliner_policy.h" |
| +#include "components/offline_pages/core/background/request_coordinator_event_logger.h" |
| +#include "components/offline_pages/core/background/request_notifier.h" |
| +#include "components/offline_pages/core/background/request_queue_store.h" |
| +#include "components/offline_pages/core/background/save_page_request.h" |
| + |
| +namespace offline_pages { |
| + |
| +ReconcileTask::ReconcileTask(RequestQueueStore* store, |
| + const RequestQueueStore::UpdateCallback& callback) |
| + : store_(store), callback_(callback), weak_ptr_factory_(this) {} |
| + |
| +ReconcileTask::~ReconcileTask() {} |
| + |
| +void ReconcileTask::Run() { |
| + GetRequests(); |
| +} |
| + |
| +void ReconcileTask::GetRequests() { |
| + // Get all the requests from the queue, we will classify them in the callback. |
|
dougarnett
2016/12/12 17:16:13
classify => reconcile
Pete Williamson
2016/12/15 18:37:43
Done.
|
| + store_->GetRequests( |
| + base::Bind(&ReconcileTask::Reconcile, weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ReconcileTask::Reconcile( |
| + bool success, |
| + std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| + // If there is nothing to do, return right away. |
| + if (requests.empty()) { |
| + TaskComplete(); |
|
fgorski
2016/12/12 17:35:18
what about calling the callback_?
Pete Williamson
2016/12/15 18:37:43
The callback is only to change state of notificati
|
| + return; |
| + } |
| + |
| + // Check for tasks in the OFFLINING state, and change the state |
| + // back to available. |
|
dougarnett
2016/12/12 17:16:13
AVAILABLE
fgorski
2016/12/12 17:35:18
nit: is the line break intended?
Pete Williamson
2016/12/15 18:37:43
Done.
Pete Williamson
2016/12/15 18:37:43
Fixed the line break, it broke too early.
|
| + std::vector<SavePageRequest> items_to_update; |
| + for (auto& request : requests) { |
| + if (request->request_state() == SavePageRequest::RequestState::OFFLINING) { |
| + request->set_request_state(SavePageRequest::RequestState::AVAILABLE); |
|
dougarnett
2016/12/12 17:16:13
Maybe TODO to add UMA since this might be pretty i
Pete Williamson
2016/12/15 18:37:42
On 2016/12/12 17:16:13, dougarnett wrote:
> Maybe
|
| + items_to_update.push_back(*request.get()); |
| + } |
| + } |
| + |
| + // If there is no work (most common case), just return. |
| + if (items_to_update.empty()) { |
| + TaskComplete(); |
|
fgorski
2016/12/12 17:35:18
ditto: callback_
Pete Williamson
2016/12/15 18:37:43
Comment updated here too.
|
| + return; |
| + } |
| + |
| + store_->UpdateRequests(items_to_update, |
| + base::Bind(&ReconcileTask::UpdateCompleted, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ReconcileTask::UpdateCompleted( |
| + std::unique_ptr<UpdateRequestsResult> update_result) { |
| + // Send a notification to the UI that these items have updated |
|
dougarnett
2016/12/12 17:16:13
nit - period at end of sentence
Pete Williamson
2016/12/15 18:37:43
Done.
|
| + callback_.Run(std::move(update_result)); |
| + TaskComplete(); |
| +} |
| + |
| +} // namespace offlnie_pages |
|
dougarnett
2016/12/12 17:16:13
offline_pages
Pete Williamson
2016/12/15 18:37:43
Done.
|