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

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

Issue 2176453002: Update the request count when a request fails. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 20 matching lines...) Expand all
31 void AddRequestDone(const RequestQueue::AddRequestCallback& callback, 31 void AddRequestDone(const RequestQueue::AddRequestCallback& callback,
32 const SavePageRequest& request, 32 const SavePageRequest& request,
33 RequestQueueStore::UpdateStatus status) { 33 RequestQueueStore::UpdateStatus status) {
34 RequestQueue::AddRequestResult result = 34 RequestQueue::AddRequestResult result =
35 (status == RequestQueueStore::UpdateStatus::UPDATED) 35 (status == RequestQueueStore::UpdateStatus::UPDATED)
36 ? RequestQueue::AddRequestResult::SUCCESS 36 ? RequestQueue::AddRequestResult::SUCCESS
37 : RequestQueue::AddRequestResult::STORE_FAILURE; 37 : RequestQueue::AddRequestResult::STORE_FAILURE;
38 callback.Run(result, request); 38 callback.Run(result, request);
39 } 39 }
40 40
41 // Completes the update request call.
42 void UpdateRequestDone(const RequestQueue::UpdateRequestCallback& callback,
43 RequestQueueStore::UpdateStatus status) {
44 RequestQueue::UpdateRequestResult result =
45 (status == RequestQueueStore::UpdateStatus::UPDATED)
46 ? RequestQueue::UpdateRequestResult::SUCCESS
47 : RequestQueue::UpdateRequestResult::STORE_FAILURE;
48 callback.Run(result);
49 }
50
51
41 // Completes the remove request call. 52 // Completes the remove request call.
42 void RemoveRequestDone(const RequestQueue::UpdateRequestCallback& callback, 53 void RemoveRequestDone(const RequestQueue::UpdateRequestCallback& callback,
43 bool success, 54 bool success,
44 int deleted_requests_count) { 55 int deleted_requests_count) {
45 DCHECK_EQ(1, deleted_requests_count); 56 DCHECK_EQ(1, deleted_requests_count);
46 RequestQueue::UpdateRequestResult result = 57 RequestQueue::UpdateRequestResult result =
47 success ? RequestQueue::UpdateRequestResult::SUCCESS 58 success ? RequestQueue::UpdateRequestResult::SUCCESS
48 : RequestQueue::UpdateRequestResult::STORE_FAILURE; 59 : RequestQueue::UpdateRequestResult::STORE_FAILURE;
49 callback.Run(result); 60 callback.Run(result);
50 } 61 }
51 } // namespace 62 } // namespace
52 63
53 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store) 64 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store)
54 : store_(std::move(store)) {} 65 : store_(std::move(store)), weak_ptr_factory_(this) {}
55 66
56 RequestQueue::~RequestQueue() {} 67 RequestQueue::~RequestQueue() {}
57 68
58 void RequestQueue::GetRequests(const GetRequestsCallback& callback) { 69 void RequestQueue::GetRequests(const GetRequestsCallback& callback) {
59 store_->GetRequests(base::Bind(&GetRequestsDone, callback)); 70 store_->GetRequests(base::Bind(&GetRequestsDone, callback));
60 } 71 }
61 72
62 void RequestQueue::AddRequest(const SavePageRequest& request, 73 void RequestQueue::AddRequest(const SavePageRequest& request,
63 const AddRequestCallback& callback) { 74 const AddRequestCallback& callback) {
64 // TODO(fgorski): check that request makes sense. 75 // TODO(fgorski): check that request makes sense.
65 // TODO(fgorski): check that request does not violate policy. 76 // TODO(fgorski): check that request does not violate policy.
66 store_->AddOrUpdateRequest(request, 77 store_->AddOrUpdateRequest(request,
67 base::Bind(&AddRequestDone, callback, request)); 78 base::Bind(&AddRequestDone, callback, request));
68 } 79 }
69 80
70 void RequestQueue::UpdateRequest(const SavePageRequest& request, 81 void RequestQueue::UpdateRequest(const SavePageRequest& update_request,
71 const UpdateRequestCallback& callback) {} 82 const UpdateRequestCallback& update_callback) {
83 // We have to pass the update_callback *through* the get callback. We do this
84 // by currying the update_callback as a parameter to be used when calling
85 // GetForUpdateDone. The actual request queue store get operation will not
86 // see this bound parameter, but just pass it along. GetForUpdateDone then
87 // passes it into the AddOrUpdateRequest method, where it ends up calling back
88 // to the request queue client.
89 store_->GetRequests(base::Bind(
fgorski 2016/07/22 16:14:58 This is probably going to be more efficient if we
Pete Williamson 2016/07/22 18:27:00 TODO added. crbug.com/630657.
90 &RequestQueue::GetForUpdateDone, weak_ptr_factory_.GetWeakPtr(),
91 update_callback, update_request));
92 }
93
94 // We need a different version of the GetCallback that can take the curried
95 // update_callback as a parameter, and call back into the request queue store
96 // implementation. This must be a member function because we need access to
97 // the store pointer to call AddOrUpdateRequest.
98 void RequestQueue::GetForUpdateDone(
99 const UpdateRequestCallback& update_callback,
100 const SavePageRequest& update_request,
101 bool success,
102 const std::vector<SavePageRequest>& found_requests) {
103 // If the result was not found, return now.
104 if (!success) {
fgorski 2016/07/22 16:14:58 what about the case where found_request does not c
Pete Williamson 2016/07/22 18:27:00 Added case.
105 update_callback.Run(
106 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
107 return;
108 }
109
110 // Since the request exists, update it.
111 store_->AddOrUpdateRequest(update_request,
112 base::Bind(&UpdateRequestDone, update_callback));
113 }
72 114
73 void RequestQueue::RemoveRequest(int64_t request_id, 115 void RequestQueue::RemoveRequest(int64_t request_id,
74 const UpdateRequestCallback& callback) { 116 const UpdateRequestCallback& callback) {
75 std::vector<int64_t> request_ids{request_id}; 117 std::vector<int64_t> request_ids{request_id};
76 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestDone, callback)); 118 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestDone, callback));
77 } 119 }
78 120
79 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {} 121 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {}
80 122
81 } // namespace offline_pages 123 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698