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

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

Issue 2283813003: [Offline pages] Eliminating duplicate notifications, by fixing request queue store (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
« no previous file with comments | « no previous file | components/offline_pages/background/request_queue_store_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_store_sql.h" 5 #include "components/offline_pages/background/request_queue_store_sql.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 } 107 }
108 108
109 void BuildFailedResultList(const std::vector<int64_t>& request_ids, 109 void BuildFailedResultList(const std::vector<int64_t>& request_ids,
110 RequestQueue::UpdateMultipleRequestResults results) { 110 RequestQueue::UpdateMultipleRequestResults results) {
111 results.clear(); 111 results.clear();
112 for (int64_t request_id : request_ids) 112 for (int64_t request_id : request_ids)
113 results.push_back(std::make_pair( 113 results.push_back(std::make_pair(
114 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE)); 114 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE));
115 } 115 }
116 116
117 bool DeleteRequestById(sql::Connection* db, int64_t request_id) { 117 RequestQueue::UpdateRequestResult DeleteRequestById(sql::Connection* db,
118 int64_t request_id) {
118 const char kSql[] = 119 const char kSql[] =
119 "DELETE FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?"; 120 "DELETE FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?";
120 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); 121 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
121 statement.BindInt64(0, request_id); 122 statement.BindInt64(0, request_id);
122 return statement.Run(); 123 if (!statement.Run())
124 return RequestQueue::UpdateRequestResult::STORE_FAILURE;
125 else if (db->GetLastChangeCount() == 0)
126 return RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
127 else
128 return RequestQueue::UpdateRequestResult::SUCCESS;
123 } 129 }
124 130
125 bool ChangeRequestState(sql::Connection* db, 131 bool ChangeRequestState(sql::Connection* db,
126 const int64_t request_id, 132 const int64_t request_id,
127 const SavePageRequest::RequestState new_state) { 133 const SavePageRequest::RequestState new_state) {
128 const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME 134 const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME
129 " SET state=?" 135 " SET state=?"
130 " WHERE request_id=?"; 136 " WHERE request_id=?";
131 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); 137 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
132 statement.BindInt64(0, static_cast<int64_t>(new_state)); 138 statement.BindInt64(0, static_cast<int64_t>(new_state));
(...skipping 10 matching lines...) Expand all
143 sql::Transaction transaction(db); 149 sql::Transaction transaction(db);
144 if (!transaction.Begin()) { 150 if (!transaction.Begin()) {
145 BuildFailedResultList(request_ids, results); 151 BuildFailedResultList(request_ids, results);
146 return false; 152 return false;
147 } 153 }
148 154
149 // Read the request before we delete it, and if the delete worked, put it on 155 // Read the request before we delete it, and if the delete worked, put it on
150 // the queue of requests that got deleted. 156 // the queue of requests that got deleted.
151 for (int64_t request_id : request_ids) { 157 for (int64_t request_id : request_ids) {
152 SavePageRequest request = GetOneRequest(db, request_id); 158 SavePageRequest request = GetOneRequest(db, request_id);
153 RequestQueue::UpdateRequestResult result; 159 RequestQueue::UpdateRequestResult result =
154 if (DeleteRequestById(db, request_id)) { 160 DeleteRequestById(db, request_id);
155 result = RequestQueue::UpdateRequestResult::SUCCESS; 161 results.push_back(std::make_pair(request_id, result));
162 if (result == RequestQueue::UpdateRequestResult::SUCCESS)
156 requests.push_back(request); 163 requests.push_back(request);
157 } else {
158 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
159 }
160 results.push_back(std::make_pair(request_id, result));
161 requests.push_back(request);
162 } 164 }
163 165
164 if (!transaction.Commit()) { 166 if (!transaction.Commit()) {
165 requests.clear(); 167 requests.clear();
166 BuildFailedResultList(request_ids, results); 168 BuildFailedResultList(request_ids, results);
167 return false; 169 return false;
168 } 170 }
169 171
170 return true; 172 return true;
171 } 173 }
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } 457 }
456 458
457 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback, 459 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback,
458 bool success) { 460 bool success) {
459 // Complete connection initialization post reset. 461 // Complete connection initialization post reset.
460 OnOpenConnectionDone(success); 462 OnOpenConnectionDone(success);
461 callback.Run(success); 463 callback.Run(success);
462 } 464 }
463 465
464 } // namespace offline_pages 466 } // namespace offline_pages
OLDNEW
« no previous file with comments | « no previous file | components/offline_pages/background/request_queue_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698