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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
54 if (!CreateRequestQueueTable(db)) | 54 if (!CreateRequestQueueTable(db)) |
55 return false; | 55 return false; |
56 | 56 |
57 // TODO(fgorski): Add indices here. | 57 // TODO(fgorski): Add indices here. |
58 return true; | 58 return true; |
59 } | 59 } |
60 | 60 |
61 // Create a save page request from a SQL result. Expects complete rows with | 61 // Create a save page request from a SQL result. Expects complete rows with |
62 // all columns present. Columns are in order they are defined in select query | 62 // all columns present. Columns are in order they are defined in select query |
63 // in |RequestQueueStore::RequestSync| method. | 63 // in |RequestQueueStore::RequestSync| method. |
64 SavePageRequest MakeSavePageRequest(const sql::Statement& statement) { | 64 std::unique_ptr<SavePageRequest> MakeSavePageRequest( |
65 const sql::Statement& statement) { | |
65 const int64_t id = statement.ColumnInt64(0); | 66 const int64_t id = statement.ColumnInt64(0); |
66 const base::Time creation_time = | 67 const base::Time creation_time = |
67 base::Time::FromInternalValue(statement.ColumnInt64(1)); | 68 base::Time::FromInternalValue(statement.ColumnInt64(1)); |
68 const base::Time activation_time = | 69 const base::Time activation_time = |
69 base::Time::FromInternalValue(statement.ColumnInt64(2)); | 70 base::Time::FromInternalValue(statement.ColumnInt64(2)); |
70 const base::Time last_attempt_time = | 71 const base::Time last_attempt_time = |
71 base::Time::FromInternalValue(statement.ColumnInt64(3)); | 72 base::Time::FromInternalValue(statement.ColumnInt64(3)); |
72 const int64_t started_attempt_count = statement.ColumnInt64(4); | 73 const int64_t started_attempt_count = statement.ColumnInt64(4); |
73 const int64_t completed_attempt_count = statement.ColumnInt64(5); | 74 const int64_t completed_attempt_count = statement.ColumnInt64(5); |
74 const SavePageRequest::RequestState state = | 75 const SavePageRequest::RequestState state = |
75 static_cast<SavePageRequest::RequestState>(statement.ColumnInt64(6)); | 76 static_cast<SavePageRequest::RequestState>(statement.ColumnInt64(6)); |
76 const GURL url(statement.ColumnString(7)); | 77 const GURL url(statement.ColumnString(7)); |
77 const ClientId client_id(statement.ColumnString(8), | 78 const ClientId client_id(statement.ColumnString(8), |
78 statement.ColumnString(9)); | 79 statement.ColumnString(9)); |
79 | 80 |
80 DVLOG(2) << "making save page request - id " << id << " url " << url | 81 DVLOG(2) << "making save page request - id " << id << " url " << url |
81 << " client_id " << client_id.name_space << "-" << client_id.id | 82 << " client_id " << client_id.name_space << "-" << client_id.id |
82 << " creation time " << creation_time << " user requested " | 83 << " creation time " << creation_time << " user requested " |
83 << kUserRequested; | 84 << kUserRequested; |
84 | 85 |
85 SavePageRequest request(id, url, client_id, creation_time, activation_time, | 86 std::unique_ptr<SavePageRequest> request(new SavePageRequest( |
86 kUserRequested); | 87 id, url, client_id, creation_time, activation_time, kUserRequested)); |
87 request.set_last_attempt_time(last_attempt_time); | 88 request->set_last_attempt_time(last_attempt_time); |
88 request.set_started_attempt_count(started_attempt_count); | 89 request->set_started_attempt_count(started_attempt_count); |
89 request.set_completed_attempt_count(completed_attempt_count); | 90 request->set_completed_attempt_count(completed_attempt_count); |
90 request.set_request_state(state); | 91 request->set_request_state(state); |
91 return request; | 92 return request; |
92 } | 93 } |
93 | 94 |
94 // Get a request for a specific id. | 95 // Get a request for a specific id. |
95 SavePageRequest GetOneRequest(sql::Connection* db, const int64_t request_id) { | 96 std::unique_ptr<SavePageRequest> GetOneRequest(sql::Connection* db, |
97 const int64_t request_id) { | |
96 const char kSql[] = | 98 const char kSql[] = |
97 "SELECT request_id, creation_time, activation_time," | 99 "SELECT request_id, creation_time, activation_time," |
98 " last_attempt_time, started_attempt_count, completed_attempt_count," | 100 " last_attempt_time, started_attempt_count, completed_attempt_count," |
99 " state, url, client_namespace, client_id" | 101 " state, url, client_namespace, client_id" |
100 " FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?"; | 102 " FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?"; |
101 | 103 |
102 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); | 104 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); |
103 statement.BindInt64(0, request_id); | 105 statement.BindInt64(0, request_id); |
104 | 106 |
105 statement.Run(); | 107 statement.Run(); |
106 return MakeSavePageRequest(statement); | 108 return MakeSavePageRequest(statement); |
107 } | 109 } |
108 | 110 |
109 void BuildFailedResultList(const std::vector<int64_t>& request_ids, | 111 void BuildFailedResultList(const std::vector<int64_t>& request_ids, |
110 RequestQueue::UpdateMultipleRequestResults results) { | 112 RequestQueue::UpdateMultipleRequestResults results) { |
111 results.clear(); | 113 results.clear(); |
112 for (int64_t request_id : request_ids) | 114 for (int64_t request_id : request_ids) { |
113 results.push_back(std::make_pair( | 115 results.push_back(std::make_pair( |
114 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE)); | 116 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE)); |
117 } | |
115 } | 118 } |
116 | 119 |
117 RequestQueue::UpdateRequestResult DeleteRequestById(sql::Connection* db, | 120 RequestQueue::UpdateRequestResult DeleteRequestById(sql::Connection* db, |
118 int64_t request_id) { | 121 int64_t request_id) { |
119 const char kSql[] = | 122 const char kSql[] = |
120 "DELETE FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?"; | 123 "DELETE FROM " REQUEST_QUEUE_TABLE_NAME " WHERE request_id=?"; |
121 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); | 124 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); |
122 statement.BindInt64(0, request_id); | 125 statement.BindInt64(0, request_id); |
123 if (!statement.Run()) | 126 if (!statement.Run()) |
124 return RequestQueue::UpdateRequestResult::STORE_FAILURE; | 127 return RequestQueue::UpdateRequestResult::STORE_FAILURE; |
125 else if (db->GetLastChangeCount() == 0) | 128 else if (db->GetLastChangeCount() == 0) |
126 return RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST; | 129 return RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST; |
127 else | 130 else |
128 return RequestQueue::UpdateRequestResult::SUCCESS; | 131 return RequestQueue::UpdateRequestResult::SUCCESS; |
129 } | 132 } |
130 | 133 |
131 bool ChangeRequestState(sql::Connection* db, | 134 bool ChangeRequestState(sql::Connection* db, |
132 const int64_t request_id, | 135 const int64_t request_id, |
133 const SavePageRequest::RequestState new_state) { | 136 const SavePageRequest::RequestState new_state) { |
134 const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME | 137 const char kSql[] = "UPDATE " REQUEST_QUEUE_TABLE_NAME |
135 " SET state=?" | 138 " SET state=?" |
136 " WHERE request_id=?"; | 139 " WHERE request_id=?"; |
137 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); | 140 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); |
138 statement.BindInt64(0, static_cast<int64_t>(new_state)); | 141 statement.BindInt64(0, static_cast<int64_t>(new_state)); |
139 statement.BindInt64(1, request_id); | 142 statement.BindInt64(1, request_id); |
140 return statement.Run(); | 143 return statement.Run(); |
141 } | 144 } |
142 | 145 |
143 bool DeleteRequestsByIds(sql::Connection* db, | 146 // Helper function to delete requests corresponding to passed in requestIds, |
144 const std::vector<int64_t>& request_ids, | 147 // and fill an outparam with the removed requests. |
145 RequestQueue::UpdateMultipleRequestResults& results, | 148 bool DeleteRequestsByIds( |
146 std::vector<SavePageRequest>& requests) { | 149 sql::Connection* db, |
150 const std::vector<int64_t>& request_ids, | |
151 RequestQueue::UpdateMultipleRequestResults& results, | |
152 std::vector<std::unique_ptr<SavePageRequest>>& requests) { | |
Bernhard Bauer
2016/09/08 09:01:57
Pointer.
Pete Williamson
2016/09/08 17:27:00
Done.
| |
147 // If you create a transaction but don't Commit() it is automatically | 153 // If you create a transaction but don't Commit() it is automatically |
148 // rolled back by its destructor when it falls out of scope. | 154 // rolled back by its destructor when it falls out of scope. |
149 sql::Transaction transaction(db); | 155 sql::Transaction transaction(db); |
150 if (!transaction.Begin()) { | 156 if (!transaction.Begin()) { |
151 BuildFailedResultList(request_ids, results); | 157 BuildFailedResultList(request_ids, results); |
152 return false; | 158 return false; |
153 } | 159 } |
154 | 160 |
155 // Read the request before we delete it, and if the delete worked, put it on | 161 // Read the request before we delete it, and if the delete worked, put it on |
156 // the queue of requests that got deleted. | 162 // the queue of requests that got deleted. |
157 for (int64_t request_id : request_ids) { | 163 for (int64_t request_id : request_ids) { |
158 SavePageRequest request = GetOneRequest(db, request_id); | 164 std::unique_ptr<SavePageRequest> request = GetOneRequest(db, request_id); |
159 RequestQueue::UpdateRequestResult result = | 165 RequestQueue::UpdateRequestResult result = |
160 DeleteRequestById(db, request_id); | 166 DeleteRequestById(db, request_id); |
161 results.push_back(std::make_pair(request_id, result)); | 167 results.push_back(std::make_pair(request_id, result)); |
162 if (result == RequestQueue::UpdateRequestResult::SUCCESS) | 168 if (result == RequestQueue::UpdateRequestResult::SUCCESS) |
163 requests.push_back(request); | 169 requests.push_back(std::move(request)); |
164 } | 170 } |
165 | 171 |
166 if (!transaction.Commit()) { | 172 if (!transaction.Commit()) { |
167 requests.clear(); | 173 requests.clear(); |
168 BuildFailedResultList(request_ids, results); | 174 BuildFailedResultList(request_ids, results); |
169 return false; | 175 return false; |
170 } | 176 } |
171 | 177 |
172 return true; | 178 return true; |
173 } | 179 } |
174 | 180 |
175 bool ChangeRequestsState(sql::Connection* db, | 181 bool ChangeRequestsState( |
176 const std::vector<int64_t>& request_ids, | 182 sql::Connection* db, |
177 SavePageRequest::RequestState new_state, | 183 const std::vector<int64_t>& request_ids, |
178 RequestQueue::UpdateMultipleRequestResults& results, | 184 SavePageRequest::RequestState new_state, |
179 std::vector<SavePageRequest>& requests) { | 185 RequestQueue::UpdateMultipleRequestResults& results, |
186 std::vector<std::unique_ptr<SavePageRequest>>& requests) { | |
Bernhard Bauer
2016/09/08 09:01:57
Pointer.
Pete Williamson
2016/09/08 17:27:00
If it's OK, I'd like to leave this for now - the C
Bernhard Bauer
2016/09/08 19:14:56
OK.
| |
180 // If you create a transaction but don't Commit() it is automatically | 187 // If you create a transaction but don't Commit() it is automatically |
181 // rolled back by its destructor when it falls out of scope. | 188 // rolled back by its destructor when it falls out of scope. |
182 sql::Transaction transaction(db); | 189 sql::Transaction transaction(db); |
183 if (!transaction.Begin()) { | 190 if (!transaction.Begin()) { |
184 BuildFailedResultList(request_ids, results); | 191 BuildFailedResultList(request_ids, results); |
185 return false; | 192 return false; |
186 } | 193 } |
187 | 194 |
188 // Update a request, then get it, and put the item we got on the output list. | 195 // Update a request, then get it, and put the item we got on the output list. |
189 for (const auto& request_id : request_ids) { | 196 for (const auto& request_id : request_ids) { |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
287 scoped_refptr<base::SingleThreadTaskRunner> runner, | 294 scoped_refptr<base::SingleThreadTaskRunner> runner, |
288 const GetRequestsCallback& callback) { | 295 const GetRequestsCallback& callback) { |
289 const char kSql[] = | 296 const char kSql[] = |
290 "SELECT request_id, creation_time, activation_time," | 297 "SELECT request_id, creation_time, activation_time," |
291 " last_attempt_time, started_attempt_count, completed_attempt_count," | 298 " last_attempt_time, started_attempt_count, completed_attempt_count," |
292 " state, url, client_namespace, client_id" | 299 " state, url, client_namespace, client_id" |
293 " FROM " REQUEST_QUEUE_TABLE_NAME; | 300 " FROM " REQUEST_QUEUE_TABLE_NAME; |
294 | 301 |
295 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); | 302 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); |
296 | 303 |
297 std::vector<SavePageRequest> result; | 304 std::vector<std::unique_ptr<SavePageRequest>> requests; |
298 while (statement.Step()) | 305 while (statement.Step()) |
299 result.push_back(MakeSavePageRequest(statement)); | 306 requests.push_back(MakeSavePageRequest(statement)); |
300 | 307 |
301 runner->PostTask(FROM_HERE, | 308 runner->PostTask(FROM_HERE, base::Bind(callback, statement.Succeeded(), |
302 base::Bind(callback, statement.Succeeded(), result)); | 309 base::Passed(std::move(requests)))); |
Bernhard Bauer
2016/09/08 09:01:57
FYI, you can also use base::Passed(&requests), whi
Pete Williamson
2016/09/08 17:27:00
Done everywhere in this file.
| |
303 } | 310 } |
304 | 311 |
305 // static | 312 // static |
306 void RequestQueueStoreSQL::AddOrUpdateRequestSync( | 313 void RequestQueueStoreSQL::AddOrUpdateRequestSync( |
307 sql::Connection* db, | 314 sql::Connection* db, |
308 scoped_refptr<base::SingleThreadTaskRunner> runner, | 315 scoped_refptr<base::SingleThreadTaskRunner> runner, |
309 const SavePageRequest& request, | 316 const SavePageRequest& request, |
310 const UpdateCallback& callback) { | 317 const UpdateCallback& callback) { |
311 // TODO(fgorski): add UMA metrics here. | 318 // TODO(fgorski): add UMA metrics here. |
312 RequestQueueStore::UpdateStatus status = InsertOrReplace(db, request); | 319 RequestQueueStore::UpdateStatus status = InsertOrReplace(db, request); |
313 runner->PostTask(FROM_HERE, base::Bind(callback, status)); | 320 runner->PostTask(FROM_HERE, base::Bind(callback, status)); |
314 } | 321 } |
315 | 322 |
316 // static | 323 // static |
317 void RequestQueueStoreSQL::RemoveRequestsSync( | 324 void RequestQueueStoreSQL::RemoveRequestsSync( |
318 sql::Connection* db, | 325 sql::Connection* db, |
319 scoped_refptr<base::SingleThreadTaskRunner> runner, | 326 scoped_refptr<base::SingleThreadTaskRunner> runner, |
320 const std::vector<int64_t>& request_ids, | 327 const std::vector<int64_t>& request_ids, |
321 const RemoveCallback& callback) { | 328 const RemoveCallback& callback) { |
322 RequestQueue::UpdateMultipleRequestResults results; | 329 RequestQueue::UpdateMultipleRequestResults results; |
323 std::vector<SavePageRequest> requests; | 330 std::vector<std::unique_ptr<SavePageRequest>> requests; |
324 // TODO(fgorski): add UMA metrics here. | 331 // TODO(fgorski): add UMA metrics here. |
325 DeleteRequestsByIds(db, request_ids, results, requests); | 332 DeleteRequestsByIds(db, request_ids, results, requests); |
326 runner->PostTask(FROM_HERE, base::Bind(callback, results, requests)); | 333 runner->PostTask(FROM_HERE, base::Bind(callback, results, |
334 base::Passed(std::move(requests)))); | |
327 } | 335 } |
328 | 336 |
329 // static | 337 // static |
330 void RequestQueueStoreSQL::ChangeRequestsStateSync( | 338 void RequestQueueStoreSQL::ChangeRequestsStateSync( |
331 sql::Connection* db, | 339 sql::Connection* db, |
332 scoped_refptr<base::SingleThreadTaskRunner> runner, | 340 scoped_refptr<base::SingleThreadTaskRunner> runner, |
333 const std::vector<int64_t>& request_ids, | 341 const std::vector<int64_t>& request_ids, |
334 const SavePageRequest::RequestState new_state, | 342 const SavePageRequest::RequestState new_state, |
335 const UpdateMultipleRequestsCallback& callback) { | 343 const UpdateMultipleRequestsCallback& callback) { |
336 RequestQueue::UpdateMultipleRequestResults results; | 344 RequestQueue::UpdateMultipleRequestResults results; |
337 std::vector<SavePageRequest> requests; | 345 std::vector<std::unique_ptr<SavePageRequest>> requests; |
338 // TODO(fgorski): add UMA metrics here. | 346 // TODO(fgorski): add UMA metrics here. |
339 offline_pages::ChangeRequestsState(db, request_ids, new_state, results, | 347 offline_pages::ChangeRequestsState(db, request_ids, new_state, results, |
340 requests); | 348 requests); |
341 runner->PostTask(FROM_HERE, base::Bind(callback, results, requests)); | 349 runner->PostTask(FROM_HERE, base::Bind(callback, results, |
350 base::Passed(std::move(requests)))); | |
342 } | 351 } |
343 | 352 |
344 // static | 353 // static |
345 void RequestQueueStoreSQL::ResetSync( | 354 void RequestQueueStoreSQL::ResetSync( |
346 sql::Connection* db, | 355 sql::Connection* db, |
347 const base::FilePath& db_file_path, | 356 const base::FilePath& db_file_path, |
348 scoped_refptr<base::SingleThreadTaskRunner> runner, | 357 scoped_refptr<base::SingleThreadTaskRunner> runner, |
349 const ResetCallback& callback) { | 358 const ResetCallback& callback) { |
350 // This method deletes the content of the whole store and reinitializes it. | 359 // This method deletes the content of the whole store and reinitializes it. |
351 bool success = db->Raze(); | 360 bool success = db->Raze(); |
(...skipping 10 matching lines...) Expand all Loading... | |
362 // to preserve the async style behavior to prevent bugs. | 371 // to preserve the async style behavior to prevent bugs. |
363 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 372 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
364 base::Bind(callback)); | 373 base::Bind(callback)); |
365 return false; | 374 return false; |
366 } | 375 } |
367 return true; | 376 return true; |
368 } | 377 } |
369 | 378 |
370 void RequestQueueStoreSQL::GetRequests(const GetRequestsCallback& callback) { | 379 void RequestQueueStoreSQL::GetRequests(const GetRequestsCallback& callback) { |
371 DCHECK(db_.get()); | 380 DCHECK(db_.get()); |
372 if (!CheckDb(base::Bind(callback, false, std::vector<SavePageRequest>()))) | 381 std::vector<std::unique_ptr<SavePageRequest>> requests; |
382 if (!CheckDb(base::Bind(callback, false, base::Passed(std::move(requests))))) | |
373 return; | 383 return; |
374 | 384 |
375 background_task_runner_->PostTask( | 385 background_task_runner_->PostTask( |
376 FROM_HERE, base::Bind(&RequestQueueStoreSQL::GetRequestsSync, db_.get(), | 386 FROM_HERE, base::Bind(&RequestQueueStoreSQL::GetRequestsSync, db_.get(), |
377 base::ThreadTaskRunnerHandle::Get(), callback)); | 387 base::ThreadTaskRunnerHandle::Get(), callback)); |
378 } | 388 } |
379 | 389 |
380 void RequestQueueStoreSQL::AddOrUpdateRequest(const SavePageRequest& request, | 390 void RequestQueueStoreSQL::AddOrUpdateRequest(const SavePageRequest& request, |
381 const UpdateCallback& callback) { | 391 const UpdateCallback& callback) { |
382 DCHECK(db_.get()); | 392 DCHECK(db_.get()); |
383 if (!CheckDb(base::Bind(callback, UpdateStatus::FAILED))) | 393 if (!CheckDb(base::Bind(callback, UpdateStatus::FAILED))) |
384 return; | 394 return; |
385 | 395 |
386 background_task_runner_->PostTask( | 396 background_task_runner_->PostTask( |
387 FROM_HERE, | 397 FROM_HERE, |
388 base::Bind(&RequestQueueStoreSQL::AddOrUpdateRequestSync, db_.get(), | 398 base::Bind(&RequestQueueStoreSQL::AddOrUpdateRequestSync, db_.get(), |
389 base::ThreadTaskRunnerHandle::Get(), request, callback)); | 399 base::ThreadTaskRunnerHandle::Get(), request, callback)); |
390 } | 400 } |
391 | 401 |
392 // RemoveRequestsByRequestId to be more parallell with RemoveRequestsByClientId. | 402 // RemoveRequestsByRequestId to be more parallell with RemoveRequestsByClientId. |
393 void RequestQueueStoreSQL::RemoveRequests( | 403 void RequestQueueStoreSQL::RemoveRequests( |
394 const std::vector<int64_t>& request_ids, | 404 const std::vector<int64_t>& request_ids, |
395 const RemoveCallback& callback) { | 405 const RemoveCallback& callback) { |
396 // Set up a failed set of results in case we fail the DB check. | 406 // Set up a failed set of results in case we fail the DB check. |
397 RequestQueue::UpdateMultipleRequestResults results; | 407 RequestQueue::UpdateMultipleRequestResults results; |
398 std::vector<SavePageRequest> requests; | 408 for (int64_t request_id : request_ids) { |
399 for (int64_t request_id : request_ids) | |
400 results.push_back(std::make_pair( | 409 results.push_back(std::make_pair( |
401 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE)); | 410 request_id, RequestQueue::UpdateRequestResult::STORE_FAILURE)); |
411 } | |
402 | 412 |
403 if (!CheckDb(base::Bind(callback, results, requests))) | 413 if (!CheckDb(base::Bind( |
414 callback, results, | |
415 base::Passed(std::vector<std::unique_ptr<SavePageRequest>>())))) { | |
404 return; | 416 return; |
417 } | |
405 | 418 |
406 background_task_runner_->PostTask( | 419 background_task_runner_->PostTask( |
407 FROM_HERE, | 420 FROM_HERE, |
408 base::Bind(&RequestQueueStoreSQL::RemoveRequestsSync, db_.get(), | 421 base::Bind(&RequestQueueStoreSQL::RemoveRequestsSync, db_.get(), |
409 base::ThreadTaskRunnerHandle::Get(), request_ids, callback)); | 422 base::ThreadTaskRunnerHandle::Get(), request_ids, callback)); |
410 } | 423 } |
411 | 424 |
412 void RequestQueueStoreSQL::ChangeRequestsState( | 425 void RequestQueueStoreSQL::ChangeRequestsState( |
413 const std::vector<int64_t>& request_ids, | 426 const std::vector<int64_t>& request_ids, |
414 const SavePageRequest::RequestState new_state, | 427 const SavePageRequest::RequestState new_state, |
415 const UpdateMultipleRequestsCallback& callback) { | 428 const UpdateMultipleRequestsCallback& callback) { |
416 RequestQueue::UpdateMultipleRequestResults results; | 429 RequestQueue::UpdateMultipleRequestResults results; |
417 std::vector<SavePageRequest> requests; | 430 std::vector<std::unique_ptr<SavePageRequest>> requests; |
418 if (!CheckDb(base::Bind(callback, results, requests))) | 431 if (!CheckDb( |
432 base::Bind(callback, results, base::Passed(std::move(requests))))) { | |
419 return; | 433 return; |
434 } | |
420 | 435 |
421 background_task_runner_->PostTask( | 436 background_task_runner_->PostTask( |
422 FROM_HERE, base::Bind(&RequestQueueStoreSQL::ChangeRequestsStateSync, | 437 FROM_HERE, base::Bind(&RequestQueueStoreSQL::ChangeRequestsStateSync, |
423 db_.get(), base::ThreadTaskRunnerHandle::Get(), | 438 db_.get(), base::ThreadTaskRunnerHandle::Get(), |
424 request_ids, new_state, callback)); | 439 request_ids, new_state, callback)); |
425 } | 440 } |
426 | 441 |
427 void RequestQueueStoreSQL::Reset(const ResetCallback& callback) { | 442 void RequestQueueStoreSQL::Reset(const ResetCallback& callback) { |
428 DCHECK(db_.get()); | 443 DCHECK(db_.get()); |
429 if (!CheckDb(base::Bind(callback, false))) | 444 if (!CheckDb(base::Bind(callback, false))) |
(...skipping 27 matching lines...) Expand all Loading... | |
457 } | 472 } |
458 | 473 |
459 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback, | 474 void RequestQueueStoreSQL::OnResetDone(const ResetCallback& callback, |
460 bool success) { | 475 bool success) { |
461 // Complete connection initialization post reset. | 476 // Complete connection initialization post reset. |
462 OnOpenConnectionDone(success); | 477 OnOpenConnectionDone(success); |
463 callback.Run(success); | 478 callback.Run(success); |
464 } | 479 } |
465 | 480 |
466 } // namespace offline_pages | 481 } // namespace offline_pages |
OLD | NEW |