OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |