| 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 |