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

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

Issue 2363563002: [Offline pages] Implementation of RQStore.UpdateRequests with StoreUpdateResult (Closed)
Patch Set: Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/background/request_queue.h" 5 #include "components/offline_pages/background/request_queue.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "components/offline_pages/background/request_queue_store.h" 10 #include "components/offline_pages/background/request_queue_store.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 break; 44 break;
45 case ItemActionStatus::NOT_FOUND: 45 case ItemActionStatus::NOT_FOUND:
46 default: 46 default:
47 NOTREACHED(); 47 NOTREACHED();
48 return; 48 return;
49 } 49 }
50 callback.Run(result, request); 50 callback.Run(result, request);
51 } 51 }
52 52
53 // Completes the update request call. 53 // Completes the update request call.
54 // TODO(petewil): Move callers to the UpdateMultipleRequestDone callback 54 // TODO(fgorski): For specific cases, check that appropriate items were updated.
55 void UpdateRequestDone(const RequestQueue::UpdateRequestCallback& callback, 55 void UpdateRequestsDone(const RequestQueue::UpdateRequestCallback& callback,
56 RequestQueueStore::UpdateStatus status) { 56 std::unique_ptr<UpdateRequestsResult> store_result) {
57 RequestQueue::UpdateRequestResult result = 57 RequestQueue::UpdateRequestResult result;
58 (status == RequestQueueStore::UpdateStatus::UPDATED) 58 if (store_result->store_state != StoreState::LOADED) {
59 ? RequestQueue::UpdateRequestResult::SUCCESS 59 result = RequestQueue::UpdateRequestResult::STORE_FAILURE;
60 : RequestQueue::UpdateRequestResult::STORE_FAILURE; 60 } else if (store_result->item_statuses.size() == 0) {
61 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
62 } else {
63 ItemActionStatus status = store_result->item_statuses.begin()->second;
64 if (status == ItemActionStatus::STORE_ERROR)
65 result = RequestQueue::UpdateRequestResult::STORE_FAILURE;
66 else if (status == ItemActionStatus::NOT_FOUND)
67 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
68 else
69 result = RequestQueue::UpdateRequestResult::SUCCESS;
70 }
71
61 callback.Run(result); 72 callback.Run(result);
62 } 73 }
63 74
64 // Handles updating multiple requests at the same time. 75 // Handles updating multiple requests at the same time.
65 void UpdateMultipleRequestsDone( 76 void UpdateMultipleRequestsDone(
Pete Williamson 2016/09/22 00:12:50 We should remove all references to UpdateMultipleR
fgorski 2016/09/22 15:47:53 I agree with you, but let's go step by step. This
66 const RequestQueue::UpdateMultipleRequestsCallback& callback, 77 const RequestQueue::UpdateMultipleRequestsCallback& callback,
67 const RequestQueue::UpdateMultipleRequestResults& results, 78 const RequestQueue::UpdateMultipleRequestResults& results,
68 std::vector<std::unique_ptr<SavePageRequest>> requests) { 79 std::vector<std::unique_ptr<SavePageRequest>> requests) {
69 callback.Run(results, std::move(requests)); 80 callback.Run(results, std::move(requests));
70 } 81 }
71 82
72 // Completes the remove request call. 83 // Completes the remove request call.
73 void RemoveRequestsDone( 84 void RemoveRequestsDone(
74 const RequestQueue::RemoveRequestsCallback& callback, 85 const RequestQueue::RemoveRequestsCallback& callback,
75 const RequestQueue::UpdateMultipleRequestResults& results, 86 const RequestQueue::UpdateMultipleRequestResults& results,
(...skipping 18 matching lines...) Expand all
94 // TODO(fgorski): check that request does not violate policy. 105 // TODO(fgorski): check that request does not violate policy.
95 store_->AddRequest(request, base::Bind(&AddRequestDone, callback, request)); 106 store_->AddRequest(request, base::Bind(&AddRequestDone, callback, request));
96 } 107 }
97 108
98 void RequestQueue::UpdateRequest(const SavePageRequest& update_request, 109 void RequestQueue::UpdateRequest(const SavePageRequest& update_request,
99 const UpdateRequestCallback& update_callback) { 110 const UpdateRequestCallback& update_callback) {
100 // We have to pass the update_callback *through* the get callback. We do this 111 // We have to pass the update_callback *through* the get callback. We do this
101 // by currying the update_callback as a parameter to be used when calling 112 // by currying the update_callback as a parameter to be used when calling
102 // GetForUpdateDone. The actual request queue store get operation will not 113 // GetForUpdateDone. The actual request queue store get operation will not
103 // see this bound parameter, but just pass it along. GetForUpdateDone then 114 // see this bound parameter, but just pass it along. GetForUpdateDone then
104 // passes it into the AddOrUpdateRequest method, where it ends up calling back 115 // passes it into the UpdateRequests method, where it ends up calling back
105 // to the request queue client. 116 // to the request queue client.
106 // TODO(petewil): This would be more efficient if the store supported a call 117 // TODO(petewil): This would be more efficient if the store supported a call
107 // to get a single item by ID. Change this code to use that API when added. 118 // to get a single item by ID. Change this code to use that API when added.
108 // crbug.com/630657. 119 // crbug.com/630657.
109 store_->GetRequests(base::Bind( 120 store_->GetRequests(base::Bind(
110 &RequestQueue::GetForUpdateDone, weak_ptr_factory_.GetWeakPtr(), 121 &RequestQueue::GetForUpdateDone, weak_ptr_factory_.GetWeakPtr(),
111 update_callback, update_request)); 122 update_callback, update_request));
112 } 123 }
113 124
114 // We need a different version of the GetCallback that can take the curried 125 // We need a different version of the GetCallback that can take the curried
115 // update_callback as a parameter, and call back into the request queue store 126 // update_callback as a parameter, and call back into the request queue store
116 // implementation. This must be a member function because we need access to 127 // implementation. This must be a member function because we need access to
117 // the store pointer to call AddOrUpdateRequest. 128 // the store pointer to call UpdateRequests.
118 void RequestQueue::GetForUpdateDone( 129 void RequestQueue::GetForUpdateDone(
119 const UpdateRequestCallback& update_callback, 130 const UpdateRequestCallback& update_callback,
120 const SavePageRequest& update_request, 131 const SavePageRequest& update_request,
121 bool success, 132 bool success,
122 std::vector<std::unique_ptr<SavePageRequest>> found_requests) { 133 std::vector<std::unique_ptr<SavePageRequest>> found_requests) {
123 // If the result was not found, return now. 134 // If the result was not found, return now.
124 if (!success) { 135 if (!success) {
125 update_callback.Run( 136 update_callback.Run(
126 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST); 137 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
127 return; 138 return;
128 } 139 }
129 // If the found result does not contain the request we are looking for, return 140 // If the found result does not contain the request we are looking for, return
130 // now. 141 // now.
131 bool found = false; 142 bool found = false;
132 std::vector<std::unique_ptr<SavePageRequest>>::const_iterator iter; 143 std::vector<std::unique_ptr<SavePageRequest>>::const_iterator iter;
133 for (iter = found_requests.begin(); iter != found_requests.end(); ++iter) { 144 for (iter = found_requests.begin(); iter != found_requests.end(); ++iter) {
134 if ((*iter)->request_id() == update_request.request_id()) 145 if ((*iter)->request_id() == update_request.request_id())
135 found = true; 146 found = true;
136 } 147 }
137 if (!found) { 148 if (!found) {
138 update_callback.Run( 149 update_callback.Run(
139 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST); 150 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
140 return; 151 return;
141 } 152 }
142 153
143 // Since the request exists, update it. 154 // Since the request exists, update it.
144 store_->AddOrUpdateRequest(update_request, 155 std::vector<SavePageRequest> update_requests{update_request};
145 base::Bind(&UpdateRequestDone, update_callback)); 156 store_->UpdateRequests(update_requests,
157 base::Bind(&UpdateRequestsDone, update_callback));
146 } 158 }
147 159
148 void RequestQueue::RemoveRequests(const std::vector<int64_t>& request_ids, 160 void RequestQueue::RemoveRequests(const std::vector<int64_t>& request_ids,
149 const RemoveRequestsCallback& callback) { 161 const RemoveRequestsCallback& callback) {
150 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestsDone, callback)); 162 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestsDone, callback));
151 } 163 }
152 164
153 void RequestQueue::ChangeRequestsState( 165 void RequestQueue::ChangeRequestsState(
154 const std::vector<int64_t>& request_ids, 166 const std::vector<int64_t>& request_ids,
155 const SavePageRequest::RequestState new_state, 167 const SavePageRequest::RequestState new_state,
156 const UpdateMultipleRequestsCallback& callback) { 168 const UpdateMultipleRequestsCallback& callback) {
157 store_->ChangeRequestsState(request_ids, new_state, 169 store_->ChangeRequestsState(request_ids, new_state,
158 base::Bind(UpdateMultipleRequestsDone, callback)); 170 base::Bind(UpdateMultipleRequestsDone, callback));
159 } 171 }
160 172
161 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {} 173 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {}
162 174
163 } // namespace offline_pages 175 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698