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

Side by Side Diff: components/offline_pages/background/change_requests_state_task.cc

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: update Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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.
4
5 #include "components/offline_pages/background/change_requests_state_task.h"
6
7 #include "base/bind.h"
8
9 namespace offline_pages {
10
11 ChangeRequestsStateTask::ChangeRequestsStateTask(
12 RequestQueueStore* store,
13 const std::vector<int64_t>& request_ids,
14 const SavePageRequest::RequestState new_state,
15 const RequestQueueStore::UpdateCallback& callback)
16 : store_(store),
17 request_ids_(request_ids.begin(), request_ids.end()),
18 new_state_(new_state),
19 callback_(callback),
20 weak_ptr_factory_(this) {}
21
22 ChangeRequestsStateTask::~ChangeRequestsStateTask() {}
23
24 void ChangeRequestsStateTask::Run() {
25 ReadRequests();
26 }
27
28 void ChangeRequestsStateTask::ReadRequests() {
29 if (request_ids_.empty()) {
30 CompleteEarly(ItemActionStatus::NOT_FOUND);
31 return;
32 }
33
34 store_->GetRequests(base::Bind(&ChangeRequestsStateTask::SelectItemsToUpdate,
35 weak_ptr_factory_.GetWeakPtr()));
36 }
37
38 void ChangeRequestsStateTask::SelectItemsToUpdate(
39 bool success,
40 std::vector<std::unique_ptr<SavePageRequest>> requests) {
41 if (!success) {
42 CompleteEarly(ItemActionStatus::STORE_ERROR);
43 return;
44 }
45
46 std::vector<SavePageRequest> items_to_update;
47 for (const auto& request : requests) {
48 // If this request is in our list, update it.
49 if (request_ids_.count(request->request_id()) > 0) {
50 request->set_request_state(new_state_);
51 items_to_update.push_back(*request);
52 // Items that are missing before the update will be marked as not found
53 // before the callback.
54 request_ids_.erase(request->request_id());
55 }
56 }
57
58 if (items_to_update.empty()) {
59 CompleteEarly(ItemActionStatus::NOT_FOUND);
60 return;
61 }
62
63 store_->UpdateRequests(items_to_update,
64 base::Bind(&ChangeRequestsStateTask::UpdateCompleted,
65 weak_ptr_factory_.GetWeakPtr()));
66 }
67
68 void ChangeRequestsStateTask::UpdateCompleted(
69 std::unique_ptr<UpdateRequestsResult> update_result) {
70 CompleteWithStatus(std::move(update_result), ItemActionStatus::NOT_FOUND);
71 }
72
73 void ChangeRequestsStateTask::CompleteEarly(ItemActionStatus status) {
74 // TODO(fgorski): store_->state() once implemented
75 std::unique_ptr<UpdateRequestsResult> result(
76 new UpdateRequestsResult(StoreState::LOADED));
77 CompleteWithStatus(std::move(result), status);
78 }
79
80 void ChangeRequestsStateTask::CompleteWithStatus(
81 std::unique_ptr<UpdateRequestsResult> result,
82 ItemActionStatus status) {
83 // Mark items as not found, if they are still in the request IDs set.
84 for (int64_t request_id : request_ids_)
85 result->item_statuses.push_back(std::make_pair(request_id, status));
86 callback_.Run(std::move(result));
87 TaskComplete();
88 }
89
90 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698