| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/extras/sqlite/sqlite_persistent_cookie_store.h" | 5 #include "net/extras/sqlite/sqlite_persistent_cookie_store.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 // Batch a cookie addition. | 117 // Batch a cookie addition. |
| 118 void AddCookie(const CanonicalCookie& cc); | 118 void AddCookie(const CanonicalCookie& cc); |
| 119 | 119 |
| 120 // Batch a cookie access time update. | 120 // Batch a cookie access time update. |
| 121 void UpdateCookieAccessTime(const CanonicalCookie& cc); | 121 void UpdateCookieAccessTime(const CanonicalCookie& cc); |
| 122 | 122 |
| 123 // Batch a cookie deletion. | 123 // Batch a cookie deletion. |
| 124 void DeleteCookie(const CanonicalCookie& cc); | 124 void DeleteCookie(const CanonicalCookie& cc); |
| 125 | 125 |
| 126 // Commit pending operations as soon as possible. | 126 // Commit pending operations as soon as possible. |
| 127 void Flush(const base::Closure& callback); | 127 void Flush(base::OnceClosure callback); |
| 128 | 128 |
| 129 // Commit any pending operations and close the database. This must be called | 129 // Commit any pending operations and close the database. This must be called |
| 130 // before the object is destructed. | 130 // before the object is destructed. |
| 131 void Close(const base::Closure& callback); | 131 void Close(const base::Closure& callback); |
| 132 | 132 |
| 133 // Post background delete of all cookies that match |cookies|. | 133 // Post background delete of all cookies that match |cookies|. |
| 134 void DeleteAllInList(const std::list<CookieOrigin>& cookies); | 134 void DeleteAllInList(const std::list<CookieOrigin>& cookies); |
| 135 | 135 |
| 136 private: | 136 private: |
| 137 friend class base::RefCountedThreadSafe<SQLitePersistentCookieStore::Backend>; | 137 friend class base::RefCountedThreadSafe<SQLitePersistentCookieStore::Backend>; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 const LoadedCallback& loaded_callback, | 175 const LoadedCallback& loaded_callback, |
| 176 const base::Time& posted_at); | 176 const base::Time& posted_at); |
| 177 | 177 |
| 178 // Notifies the CookieMonster when loading completes for a specific domain key | 178 // Notifies the CookieMonster when loading completes for a specific domain key |
| 179 // or for all domain keys. Triggers the callback and passes it all cookies | 179 // or for all domain keys. Triggers the callback and passes it all cookies |
| 180 // that have been loaded from DB since last IO notification. | 180 // that have been loaded from DB since last IO notification. |
| 181 void Notify(const LoadedCallback& loaded_callback, bool load_success); | 181 void Notify(const LoadedCallback& loaded_callback, bool load_success); |
| 182 | 182 |
| 183 // Flushes (Commits) pending operations on the background runner, and invokes | 183 // Flushes (Commits) pending operations on the background runner, and invokes |
| 184 // |callback| on the client thread when done. | 184 // |callback| on the client thread when done. |
| 185 void FlushAndNotifyInBackground(const base::Closure& callback); | 185 void FlushAndNotifyInBackground(base::OnceClosure callback); |
| 186 | 186 |
| 187 // Sends notification when the entire store is loaded, and reports metrics | 187 // Sends notification when the entire store is loaded, and reports metrics |
| 188 // for the total time to load and aggregated results from any priority loads | 188 // for the total time to load and aggregated results from any priority loads |
| 189 // that occurred. | 189 // that occurred. |
| 190 void CompleteLoadInForeground(const LoadedCallback& loaded_callback, | 190 void CompleteLoadInForeground(const LoadedCallback& loaded_callback, |
| 191 bool load_success); | 191 bool load_success); |
| 192 | 192 |
| 193 // Sends notification when a single priority load completes. Updates priority | 193 // Sends notification when a single priority load completes. Updates priority |
| 194 // load metric data. The data is sent only after the final load completes. | 194 // load metric data. The data is sent only after the final load completes. |
| 195 void CompleteLoadForKeyInForeground(const LoadedCallback& loaded_callback, | 195 void CompleteLoadForKeyInForeground(const LoadedCallback& loaded_callback, |
| (...skipping 28 matching lines...) Expand all Loading... |
| 224 void InternalBackgroundClose(const base::Closure& callback); | 224 void InternalBackgroundClose(const base::Closure& callback); |
| 225 | 225 |
| 226 void DeleteSessionCookiesOnStartup(); | 226 void DeleteSessionCookiesOnStartup(); |
| 227 | 227 |
| 228 void BackgroundDeleteAllInList(const std::list<CookieOrigin>& cookies); | 228 void BackgroundDeleteAllInList(const std::list<CookieOrigin>& cookies); |
| 229 | 229 |
| 230 void DatabaseErrorCallback(int error, sql::Statement* stmt); | 230 void DatabaseErrorCallback(int error, sql::Statement* stmt); |
| 231 void KillDatabase(); | 231 void KillDatabase(); |
| 232 | 232 |
| 233 void PostBackgroundTask(const tracked_objects::Location& origin, | 233 void PostBackgroundTask(const tracked_objects::Location& origin, |
| 234 const base::Closure& task); | 234 base::OnceClosure task); |
| 235 void PostClientTask(const tracked_objects::Location& origin, | 235 void PostClientTask(const tracked_objects::Location& origin, |
| 236 const base::Closure& task); | 236 base::OnceClosure task); |
| 237 | 237 |
| 238 // Shared code between the different load strategies to be used after all | 238 // Shared code between the different load strategies to be used after all |
| 239 // cookies have been loaded. | 239 // cookies have been loaded. |
| 240 void FinishedLoadingCookies(const LoadedCallback& loaded_callback, | 240 void FinishedLoadingCookies(const LoadedCallback& loaded_callback, |
| 241 bool success); | 241 bool success); |
| 242 | 242 |
| 243 const base::FilePath path_; | 243 const base::FilePath path_; |
| 244 std::unique_ptr<sql::Connection> db_; | 244 std::unique_ptr<sql::Connection> db_; |
| 245 sql::MetaTable meta_table_; | 245 sql::MetaTable meta_table_; |
| 246 | 246 |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 } | 539 } |
| 540 | 540 |
| 541 PostClientTask( | 541 PostClientTask( |
| 542 FROM_HERE, | 542 FROM_HERE, |
| 543 base::Bind( | 543 base::Bind( |
| 544 &SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground, | 544 &SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground, |
| 545 this, loaded_callback, success, posted_at)); | 545 this, loaded_callback, success, posted_at)); |
| 546 } | 546 } |
| 547 | 547 |
| 548 void SQLitePersistentCookieStore::Backend::FlushAndNotifyInBackground( | 548 void SQLitePersistentCookieStore::Backend::FlushAndNotifyInBackground( |
| 549 const base::Closure& callback) { | 549 base::OnceClosure callback) { |
| 550 Commit(); | 550 Commit(); |
| 551 if (!callback.is_null()) | 551 if (!callback.is_null()) |
| 552 PostClientTask(FROM_HERE, callback); | 552 PostClientTask(FROM_HERE, std::move(callback)); |
| 553 } | 553 } |
| 554 | 554 |
| 555 void SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground( | 555 void SQLitePersistentCookieStore::Backend::CompleteLoadForKeyInForeground( |
| 556 const LoadedCallback& loaded_callback, | 556 const LoadedCallback& loaded_callback, |
| 557 bool load_success, | 557 bool load_success, |
| 558 const ::Time& requested_at) { | 558 const ::Time& requested_at) { |
| 559 DCHECK(client_task_runner_->RunsTasksInCurrentSequence()); | 559 DCHECK(client_task_runner_->RunsTasksInCurrentSequence()); |
| 560 | 560 |
| 561 UMA_HISTOGRAM_CUSTOM_TIMES("Cookie.TimeKeyLoadTotalWait", | 561 UMA_HISTOGRAM_CUSTOM_TIMES("Cookie.TimeKeyLoadTotalWait", |
| 562 base::Time::Now() - requested_at, | 562 base::Time::Now() - requested_at, |
| (...skipping 631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 default: | 1194 default: |
| 1195 NOTREACHED(); | 1195 NOTREACHED(); |
| 1196 break; | 1196 break; |
| 1197 } | 1197 } |
| 1198 } | 1198 } |
| 1199 bool succeeded = transaction.Commit(); | 1199 bool succeeded = transaction.Commit(); |
| 1200 UMA_HISTOGRAM_ENUMERATION("Cookie.BackingStoreUpdateResults", | 1200 UMA_HISTOGRAM_ENUMERATION("Cookie.BackingStoreUpdateResults", |
| 1201 succeeded ? 0 : 1, 2); | 1201 succeeded ? 0 : 1, 2); |
| 1202 } | 1202 } |
| 1203 | 1203 |
| 1204 void SQLitePersistentCookieStore::Backend::Flush( | 1204 void SQLitePersistentCookieStore::Backend::Flush(base::OnceClosure callback) { |
| 1205 const base::Closure& callback) { | |
| 1206 DCHECK(!background_task_runner_->RunsTasksInCurrentSequence()); | 1205 DCHECK(!background_task_runner_->RunsTasksInCurrentSequence()); |
| 1207 PostBackgroundTask(FROM_HERE, base::Bind(&Backend::FlushAndNotifyInBackground, | 1206 PostBackgroundTask(FROM_HERE, |
| 1208 this, callback)); | 1207 base::BindOnce(&Backend::FlushAndNotifyInBackground, this, |
| 1208 std::move(callback))); |
| 1209 } | 1209 } |
| 1210 | 1210 |
| 1211 // Fire off a close message to the background runner. We could still have a | 1211 // Fire off a close message to the background runner. We could still have a |
| 1212 // pending commit timer or Load operations holding references on us, but if/when | 1212 // pending commit timer or Load operations holding references on us, but if/when |
| 1213 // this fires we will already have been cleaned up and it will be ignored. | 1213 // this fires we will already have been cleaned up and it will be ignored. |
| 1214 void SQLitePersistentCookieStore::Backend::Close( | 1214 void SQLitePersistentCookieStore::Backend::Close( |
| 1215 const base::Closure& callback) { | 1215 const base::Closure& callback) { |
| 1216 if (background_task_runner_->RunsTasksInCurrentSequence()) { | 1216 if (background_task_runner_->RunsTasksInCurrentSequence()) { |
| 1217 InternalBackgroundClose(callback); | 1217 InternalBackgroundClose(callback); |
| 1218 } else { | 1218 } else { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 if (!del_smt.Run()) | 1335 if (!del_smt.Run()) |
| 1336 NOTREACHED() << "Could not delete a cookie from the DB."; | 1336 NOTREACHED() << "Could not delete a cookie from the DB."; |
| 1337 } | 1337 } |
| 1338 | 1338 |
| 1339 if (!transaction.Commit()) | 1339 if (!transaction.Commit()) |
| 1340 LOG(WARNING) << "Unable to delete cookies on shutdown."; | 1340 LOG(WARNING) << "Unable to delete cookies on shutdown."; |
| 1341 } | 1341 } |
| 1342 | 1342 |
| 1343 void SQLitePersistentCookieStore::Backend::PostBackgroundTask( | 1343 void SQLitePersistentCookieStore::Backend::PostBackgroundTask( |
| 1344 const tracked_objects::Location& origin, | 1344 const tracked_objects::Location& origin, |
| 1345 const base::Closure& task) { | 1345 base::OnceClosure task) { |
| 1346 if (!background_task_runner_->PostTask(origin, task)) { | 1346 if (!background_task_runner_->PostTask(origin, std::move(task))) { |
| 1347 LOG(WARNING) << "Failed to post task from " << origin.ToString() | 1347 LOG(WARNING) << "Failed to post task from " << origin.ToString() |
| 1348 << " to background_task_runner_."; | 1348 << " to background_task_runner_."; |
| 1349 } | 1349 } |
| 1350 } | 1350 } |
| 1351 | 1351 |
| 1352 void SQLitePersistentCookieStore::Backend::PostClientTask( | 1352 void SQLitePersistentCookieStore::Backend::PostClientTask( |
| 1353 const tracked_objects::Location& origin, | 1353 const tracked_objects::Location& origin, |
| 1354 const base::Closure& task) { | 1354 base::OnceClosure task) { |
| 1355 if (!client_task_runner_->PostTask(origin, task)) { | 1355 if (!client_task_runner_->PostTask(origin, std::move(task))) { |
| 1356 LOG(WARNING) << "Failed to post task from " << origin.ToString() | 1356 LOG(WARNING) << "Failed to post task from " << origin.ToString() |
| 1357 << " to client_task_runner_."; | 1357 << " to client_task_runner_."; |
| 1358 } | 1358 } |
| 1359 } | 1359 } |
| 1360 | 1360 |
| 1361 void SQLitePersistentCookieStore::Backend::FinishedLoadingCookies( | 1361 void SQLitePersistentCookieStore::Backend::FinishedLoadingCookies( |
| 1362 const LoadedCallback& loaded_callback, | 1362 const LoadedCallback& loaded_callback, |
| 1363 bool success) { | 1363 bool success) { |
| 1364 PostClientTask(FROM_HERE, base::Bind(&Backend::CompleteLoadInForeground, this, | 1364 PostClientTask(FROM_HERE, base::Bind(&Backend::CompleteLoadInForeground, this, |
| 1365 loaded_callback, success)); | 1365 loaded_callback, success)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1426 | 1426 |
| 1427 void SQLitePersistentCookieStore::DeleteCookie(const CanonicalCookie& cc) { | 1427 void SQLitePersistentCookieStore::DeleteCookie(const CanonicalCookie& cc) { |
| 1428 if (backend_) | 1428 if (backend_) |
| 1429 backend_->DeleteCookie(cc); | 1429 backend_->DeleteCookie(cc); |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 void SQLitePersistentCookieStore::SetForceKeepSessionState() { | 1432 void SQLitePersistentCookieStore::SetForceKeepSessionState() { |
| 1433 // This store never discards session-only cookies, so this call has no effect. | 1433 // This store never discards session-only cookies, so this call has no effect. |
| 1434 } | 1434 } |
| 1435 | 1435 |
| 1436 void SQLitePersistentCookieStore::Flush(const base::Closure& callback) { | 1436 void SQLitePersistentCookieStore::Flush(base::OnceClosure callback) { |
| 1437 if (backend_) | 1437 if (backend_) |
| 1438 backend_->Flush(callback); | 1438 backend_->Flush(std::move(callback)); |
| 1439 } | 1439 } |
| 1440 | 1440 |
| 1441 SQLitePersistentCookieStore::~SQLitePersistentCookieStore() { | 1441 SQLitePersistentCookieStore::~SQLitePersistentCookieStore() { |
| 1442 Close(base::Closure()); | 1442 Close(base::Closure()); |
| 1443 } | 1443 } |
| 1444 | 1444 |
| 1445 } // namespace net | 1445 } // namespace net |
| OLD | NEW |