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

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: fix test 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 }
62
51 } // namespace 63 } // namespace
52 64
53 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store) 65 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store)
54 : store_(std::move(store)) {} 66 : store_(std::move(store)), weak_ptr_factory_(this) {}
55 67
56 RequestQueue::~RequestQueue() {} 68 RequestQueue::~RequestQueue() {}
57 69
58 void RequestQueue::GetRequests(const GetRequestsCallback& callback) { 70 void RequestQueue::GetRequests(const GetRequestsCallback& callback) {
59 store_->GetRequests(base::Bind(&GetRequestsDone, callback)); 71 store_->GetRequests(base::Bind(&GetRequestsDone, callback));
60 } 72 }
61 73
62 void RequestQueue::AddRequest(const SavePageRequest& request, 74 void RequestQueue::AddRequest(const SavePageRequest& request,
63 const AddRequestCallback& callback) { 75 const AddRequestCallback& callback) {
64 // TODO(fgorski): check that request makes sense. 76 // TODO(fgorski): check that request makes sense.
65 // TODO(fgorski): check that request does not violate policy. 77 // TODO(fgorski): check that request does not violate policy.
66 store_->AddOrUpdateRequest(request, 78 store_->AddOrUpdateRequest(request,
67 base::Bind(&AddRequestDone, callback, request)); 79 base::Bind(&AddRequestDone, callback, request));
68 } 80 }
69 81
70 void RequestQueue::UpdateRequest(const SavePageRequest& request, 82 void RequestQueue::UpdateRequest(const SavePageRequest& update_request,
71 const UpdateRequestCallback& callback) {} 83 const UpdateRequestCallback& update_callback) {
84 // We have to pass the update_callback *through* the get callback. We do this
85 // by currying the update_callback as a parameter to be used when calling
86 // GetForUpdateDone. The actual request queue store get operation will not
87 // see this bound parameter, but just pass it along. GetForUpdateDone then
88 // passes it into the AddOrUpdateRequest method, where it ends up calling back
89 // to the request queue client.
90 // TODO(petewil): This would be more efficient if the store supported a call
91 // to get a single item by ID. Change this code to use that API when added.
92 // crbug.com/630657.
93 store_->GetRequests(base::Bind(
94 &RequestQueue::GetForUpdateDone, weak_ptr_factory_.GetWeakPtr(),
95 update_callback, update_request));
96 }
97
98 // We need a different version of the GetCallback that can take the curried
99 // update_callback as a parameter, and call back into the request queue store
100 // implementation. This must be a member function because we need access to
101 // the store pointer to call AddOrUpdateRequest.
102 void RequestQueue::GetForUpdateDone(
103 const UpdateRequestCallback& update_callback,
104 const SavePageRequest& update_request,
105 bool success,
106 const std::vector<SavePageRequest>& found_requests) {
107 // If the result was not found, return now.
108 if (!success) {
109 update_callback.Run(
110 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
111 return;
112 }
113 // If the found result does not contain the request we are looking for, return
114 // now.
115 bool found = false;
116 std::vector<SavePageRequest>::const_iterator iter;
117 for (iter = found_requests.begin(); iter != found_requests.end(); ++iter) {
118 if (iter->request_id() == update_request.request_id())
119 found = true;
120 }
121 if (!found) {
122 update_callback.Run(
123 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
124 return;
125 }
126
127 // Since the request exists, update it.
128 store_->AddOrUpdateRequest(update_request,
129 base::Bind(&UpdateRequestDone, update_callback));
130 }
72 131
73 void RequestQueue::RemoveRequest(int64_t request_id, 132 void RequestQueue::RemoveRequest(int64_t request_id,
74 const UpdateRequestCallback& callback) { 133 const UpdateRequestCallback& callback) {
75 std::vector<int64_t> request_ids{request_id}; 134 std::vector<int64_t> request_ids{request_id};
76 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestDone, callback)); 135 store_->RemoveRequests(request_ids, base::Bind(RemoveRequestDone, callback));
77 } 136 }
78 137
79 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {} 138 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {}
80 139
81 } // namespace offline_pages 140 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/background/request_queue.h ('k') | components/offline_pages/background/request_queue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698