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

Side by Side Diff: net/extras/sqlite/sqlite_persistent_cookie_store.cc

Issue 2383393002: Remove stl_util's deletion functions from net/cookies/ and net/extras/. (Closed)
Patch Set: removing Created 4 years, 2 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
OLDNEW
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 <map> 8 #include <map>
8 #include <memory> 9 #include <memory>
9 #include <set> 10 #include <set>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "base/callback.h" 13 #include "base/callback.h"
13 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
14 #include "base/files/file_util.h" 15 #include "base/files/file_util.h"
15 #include "base/location.h" 16 #include "base/location.h"
16 #include "base/logging.h" 17 #include "base/logging.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 102
102 // Creates or loads the SQLite database. 103 // Creates or loads the SQLite database.
103 void Load(const LoadedCallback& loaded_callback); 104 void Load(const LoadedCallback& loaded_callback);
104 105
105 // Loads cookies for the domain key (eTLD+1). 106 // Loads cookies for the domain key (eTLD+1).
106 void LoadCookiesForKey(const std::string& domain, 107 void LoadCookiesForKey(const std::string& domain,
107 const LoadedCallback& loaded_callback); 108 const LoadedCallback& loaded_callback);
108 109
109 // Steps through all results of |smt|, makes a cookie from each, and adds the 110 // Steps through all results of |smt|, makes a cookie from each, and adds the
110 // cookie to |cookies|. This method also updates |num_cookies_read_|. 111 // cookie to |cookies|. This method also updates |num_cookies_read_|.
111 void MakeCookiesFromSQLStatement(std::vector<CanonicalCookie*>* cookies, 112 void MakeCookiesFromSQLStatement(
112 sql::Statement* statement); 113 std::vector<std::unique_ptr<CanonicalCookie>>* cookies,
114 sql::Statement* statement);
113 115
114 // Batch a cookie addition. 116 // Batch a cookie addition.
115 void AddCookie(const CanonicalCookie& cc); 117 void AddCookie(const CanonicalCookie& cc);
116 118
117 // Batch a cookie access time update. 119 // Batch a cookie access time update.
118 void UpdateCookieAccessTime(const CanonicalCookie& cc); 120 void UpdateCookieAccessTime(const CanonicalCookie& cc);
119 121
120 // Batch a cookie deletion. 122 // Batch a cookie deletion.
121 void DeleteCookie(const CanonicalCookie& cc); 123 void DeleteCookie(const CanonicalCookie& cc);
122 124
123 // Commit pending operations as soon as possible. 125 // Commit pending operations as soon as possible.
124 void Flush(const base::Closure& callback); 126 void Flush(const base::Closure& callback);
125 127
126 // Commit any pending operations and close the database. This must be called 128 // Commit any pending operations and close the database. This must be called
127 // before the object is destructed. 129 // before the object is destructed.
128 void Close(const base::Closure& callback); 130 void Close(const base::Closure& callback);
129 131
130 // Post background delete of all cookies that match |cookies|. 132 // Post background delete of all cookies that match |cookies|.
131 void DeleteAllInList(const std::list<CookieOrigin>& cookies); 133 void DeleteAllInList(const std::list<CookieOrigin>& cookies);
132 134
133 private: 135 private:
134 friend class base::RefCountedThreadSafe<SQLitePersistentCookieStore::Backend>; 136 friend class base::RefCountedThreadSafe<SQLitePersistentCookieStore::Backend>;
135 137
136 // You should call Close() before destructing this object. 138 // You should call Close() before destructing this object.
137 ~Backend() { 139 ~Backend() {
138 DCHECK(!db_.get()) << "Close should have already been called."; 140 DCHECK(!db_.get()) << "Close should have already been called.";
139 DCHECK_EQ(0u, num_pending_); 141 DCHECK_EQ(0u, num_pending_);
140 DCHECK(pending_.empty()); 142 DCHECK(pending_.empty());
141
142 for (CanonicalCookie* cookie : cookies_) {
143 delete cookie;
144 }
145 } 143 }
146 144
147 // Database upgrade statements. 145 // Database upgrade statements.
148 bool EnsureDatabaseVersion(); 146 bool EnsureDatabaseVersion();
149 147
150 class PendingOperation { 148 class PendingOperation {
151 public: 149 public:
152 enum OperationType { 150 enum OperationType {
153 COOKIE_ADD, 151 COOKIE_ADD,
154 COOKIE_UPDATEACCESS, 152 COOKIE_UPDATEACCESS,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 245
248 typedef std::list<PendingOperation*> PendingOperationsList; 246 typedef std::list<PendingOperation*> PendingOperationsList;
249 PendingOperationsList pending_; 247 PendingOperationsList pending_;
250 PendingOperationsList::size_type num_pending_; 248 PendingOperationsList::size_type num_pending_;
251 // Guard |cookies_|, |pending_|, |num_pending_|. 249 // Guard |cookies_|, |pending_|, |num_pending_|.
252 base::Lock lock_; 250 base::Lock lock_;
253 251
254 // Temporary buffer for cookies loaded from DB. Accumulates cookies to reduce 252 // Temporary buffer for cookies loaded from DB. Accumulates cookies to reduce
255 // the number of messages sent to the client runner. Sent back in response to 253 // the number of messages sent to the client runner. Sent back in response to
256 // individual load requests for domain keys or when all loading completes. 254 // individual load requests for domain keys or when all loading completes.
257 // Ownership of the cookies in this vector is transferred to the client in 255 std::vector<std::unique_ptr<CanonicalCookie>> cookies_;
258 // response to individual load requests or when all loading completes.
259 std::vector<CanonicalCookie*> cookies_;
260 256
261 // Map of domain keys(eTLD+1) to domains/hosts that are to be loaded from DB. 257 // Map of domain keys(eTLD+1) to domains/hosts that are to be loaded from DB.
262 std::map<std::string, std::set<std::string>> keys_to_load_; 258 std::map<std::string, std::set<std::string>> keys_to_load_;
263 259
264 // Indicates if DB has been initialized. 260 // Indicates if DB has been initialized.
265 bool initialized_; 261 bool initialized_;
266 262
267 // Indicates if the kill-database callback has been scheduled. 263 // Indicates if the kill-database callback has been scheduled.
268 bool corruption_detected_; 264 bool corruption_detected_;
269 265
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 609
614 if (load_success) 610 if (load_success)
615 ReportMetrics(); 611 ReportMetrics();
616 } 612 }
617 613
618 void SQLitePersistentCookieStore::Backend::Notify( 614 void SQLitePersistentCookieStore::Backend::Notify(
619 const LoadedCallback& loaded_callback, 615 const LoadedCallback& loaded_callback,
620 bool load_success) { 616 bool load_success) {
621 DCHECK(client_task_runner_->RunsTasksOnCurrentThread()); 617 DCHECK(client_task_runner_->RunsTasksOnCurrentThread());
622 618
623 std::vector<CanonicalCookie*> cookies; 619 std::vector<std::unique_ptr<CanonicalCookie>> cookies;
624 { 620 {
625 base::AutoLock locked(lock_); 621 base::AutoLock locked(lock_);
626 cookies.swap(cookies_); 622 cookies.swap(cookies_);
627 } 623 }
628 624
629 loaded_callback.Run(cookies); 625 loaded_callback.Run(std::move(cookies));
630 } 626 }
631 627
632 bool SQLitePersistentCookieStore::Backend::InitializeDatabase() { 628 bool SQLitePersistentCookieStore::Backend::InitializeDatabase() {
633 DCHECK(background_task_runner_->RunsTasksOnCurrentThread()); 629 DCHECK(background_task_runner_->RunsTasksOnCurrentThread());
634 630
635 if (initialized_ || corruption_detected_) { 631 if (initialized_ || corruption_detected_) {
636 // Return false if we were previously initialized but the DB has since been 632 // Return false if we were previously initialized but the DB has since been
637 // closed, or if corruption caused a database reset during initialization. 633 // closed, or if corruption caused a database reset during initialization.
638 return db_ != NULL; 634 return db_ != NULL;
639 } 635 }
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 "has_expires, persistent, priority FROM cookies WHERE host_key = ? " 781 "has_expires, persistent, priority FROM cookies WHERE host_key = ? "
786 "AND persistent = 1")); 782 "AND persistent = 1"));
787 } 783 }
788 if (!smt.is_valid()) { 784 if (!smt.is_valid()) {
789 smt.Clear(); // Disconnect smt_ref from db_. 785 smt.Clear(); // Disconnect smt_ref from db_.
790 meta_table_.Reset(); 786 meta_table_.Reset();
791 db_.reset(); 787 db_.reset();
792 return false; 788 return false;
793 } 789 }
794 790
795 std::vector<CanonicalCookie*> cookies; 791 std::vector<std::unique_ptr<CanonicalCookie>> cookies;
796 std::set<std::string>::const_iterator it = domains.begin(); 792 std::set<std::string>::const_iterator it = domains.begin();
797 for (; it != domains.end(); ++it) { 793 for (; it != domains.end(); ++it) {
798 smt.BindString(0, *it); 794 smt.BindString(0, *it);
799 MakeCookiesFromSQLStatement(&cookies, &smt); 795 MakeCookiesFromSQLStatement(&cookies, &smt);
800 smt.Reset(true); 796 smt.Reset(true);
801 } 797 }
802 { 798 {
803 base::AutoLock locked(lock_); 799 base::AutoLock locked(lock_);
804 cookies_.insert(cookies_.end(), cookies.begin(), cookies.end()); 800 std::move(cookies.begin(), cookies.end(), std::back_inserter(cookies_));
805 } 801 }
806 return true; 802 return true;
807 } 803 }
808 804
809 void SQLitePersistentCookieStore::Backend::MakeCookiesFromSQLStatement( 805 void SQLitePersistentCookieStore::Backend::MakeCookiesFromSQLStatement(
810 std::vector<CanonicalCookie*>* cookies, 806 std::vector<std::unique_ptr<CanonicalCookie>>* cookies,
811 sql::Statement* statement) { 807 sql::Statement* statement) {
812 sql::Statement& smt = *statement; 808 sql::Statement& smt = *statement;
813 while (smt.Step()) { 809 while (smt.Step()) {
814 std::string value; 810 std::string value;
815 std::string encrypted_value = smt.ColumnString(4); 811 std::string encrypted_value = smt.ColumnString(4);
816 if (!encrypted_value.empty() && crypto_) { 812 if (!encrypted_value.empty() && crypto_) {
817 if (!crypto_->DecryptString(encrypted_value, &value)) 813 if (!crypto_->DecryptString(encrypted_value, &value))
818 continue; 814 continue;
819 } else { 815 } else {
820 value = smt.ColumnString(3); 816 value = smt.ColumnString(3);
821 } 817 }
822 std::unique_ptr<CanonicalCookie> cc(CanonicalCookie::Create( 818 std::unique_ptr<CanonicalCookie> cc(CanonicalCookie::Create(
823 smt.ColumnString(2), // name 819 smt.ColumnString(2), // name
824 value, // value 820 value, // value
825 smt.ColumnString(1), // domain 821 smt.ColumnString(1), // domain
826 smt.ColumnString(5), // path 822 smt.ColumnString(5), // path
827 Time::FromInternalValue(smt.ColumnInt64(0)), // creation_utc 823 Time::FromInternalValue(smt.ColumnInt64(0)), // creation_utc
828 Time::FromInternalValue(smt.ColumnInt64(6)), // expires_utc 824 Time::FromInternalValue(smt.ColumnInt64(6)), // expires_utc
829 Time::FromInternalValue(smt.ColumnInt64(10)), // last_access_utc 825 Time::FromInternalValue(smt.ColumnInt64(10)), // last_access_utc
830 smt.ColumnInt(7) != 0, // secure 826 smt.ColumnInt(7) != 0, // secure
831 smt.ColumnInt(8) != 0, // http_only 827 smt.ColumnInt(8) != 0, // http_only
832 DBCookieSameSiteToCookieSameSite( 828 DBCookieSameSiteToCookieSameSite(
833 static_cast<DBCookieSameSite>(smt.ColumnInt(9))), // samesite 829 static_cast<DBCookieSameSite>(smt.ColumnInt(9))), // samesite
834 DBCookiePriorityToCookiePriority( 830 DBCookiePriorityToCookiePriority(
835 static_cast<DBCookiePriority>(smt.ColumnInt(13))))); // priority 831 static_cast<DBCookiePriority>(smt.ColumnInt(13))))); // priority
836 DLOG_IF(WARNING, cc->CreationDate() > Time::Now()) 832 DLOG_IF(WARNING, cc->CreationDate() > Time::Now())
837 << L"CreationDate too recent"; 833 << L"CreationDate too recent";
838 cookies->push_back(cc.release()); 834 cookies->push_back(std::move(cc));
839 ++num_cookies_read_; 835 ++num_cookies_read_;
840 } 836 }
841 } 837 }
842 838
843 bool SQLitePersistentCookieStore::Backend::EnsureDatabaseVersion() { 839 bool SQLitePersistentCookieStore::Backend::EnsureDatabaseVersion() {
844 // Version check. 840 // Version check.
845 if (!meta_table_.Init(db_.get(), kCurrentVersionNumber, 841 if (!meta_table_.Init(db_.get(), kCurrentVersionNumber,
846 kCompatibleVersionNumber)) { 842 kCompatibleVersionNumber)) {
847 return false; 843 return false;
848 } 844 }
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 // Backend::InternalBackgroundClose() yet. 1391 // Backend::InternalBackgroundClose() yet.
1396 backend_ = nullptr; 1392 backend_ = nullptr;
1397 } 1393 }
1398 } 1394 }
1399 1395
1400 void SQLitePersistentCookieStore::Load(const LoadedCallback& loaded_callback) { 1396 void SQLitePersistentCookieStore::Load(const LoadedCallback& loaded_callback) {
1401 DCHECK(!loaded_callback.is_null()); 1397 DCHECK(!loaded_callback.is_null());
1402 if (backend_) 1398 if (backend_)
1403 backend_->Load(loaded_callback); 1399 backend_->Load(loaded_callback);
1404 else 1400 else
1405 loaded_callback.Run(std::vector<CanonicalCookie*>()); 1401 loaded_callback.Run(std::vector<std::unique_ptr<CanonicalCookie>>());
1406 } 1402 }
1407 1403
1408 void SQLitePersistentCookieStore::LoadCookiesForKey( 1404 void SQLitePersistentCookieStore::LoadCookiesForKey(
1409 const std::string& key, 1405 const std::string& key,
1410 const LoadedCallback& loaded_callback) { 1406 const LoadedCallback& loaded_callback) {
1411 DCHECK(!loaded_callback.is_null()); 1407 DCHECK(!loaded_callback.is_null());
1412 if (backend_) 1408 if (backend_)
1413 backend_->LoadCookiesForKey(key, loaded_callback); 1409 backend_->LoadCookiesForKey(key, loaded_callback);
1414 else 1410 else
1415 loaded_callback.Run(std::vector<CanonicalCookie*>()); 1411 loaded_callback.Run(std::vector<std::unique_ptr<CanonicalCookie>>());
1416 } 1412 }
1417 1413
1418 void SQLitePersistentCookieStore::AddCookie(const CanonicalCookie& cc) { 1414 void SQLitePersistentCookieStore::AddCookie(const CanonicalCookie& cc) {
1419 if (backend_) 1415 if (backend_)
1420 backend_->AddCookie(cc); 1416 backend_->AddCookie(cc);
1421 } 1417 }
1422 1418
1423 void SQLitePersistentCookieStore::UpdateCookieAccessTime( 1419 void SQLitePersistentCookieStore::UpdateCookieAccessTime(
1424 const CanonicalCookie& cc) { 1420 const CanonicalCookie& cc) {
1425 if (backend_) 1421 if (backend_)
(...skipping 12 matching lines...) Expand all
1438 void SQLitePersistentCookieStore::Flush(const base::Closure& callback) { 1434 void SQLitePersistentCookieStore::Flush(const base::Closure& callback) {
1439 if (backend_) 1435 if (backend_)
1440 backend_->Flush(callback); 1436 backend_->Flush(callback);
1441 } 1437 }
1442 1438
1443 SQLitePersistentCookieStore::~SQLitePersistentCookieStore() { 1439 SQLitePersistentCookieStore::~SQLitePersistentCookieStore() {
1444 Close(base::Closure()); 1440 Close(base::Closure());
1445 } 1441 }
1446 1442
1447 } // namespace net 1443 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster_unittest.cc ('k') | net/extras/sqlite/sqlite_persistent_cookie_store_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698