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

Side by Side Diff: webkit/database/database_tracker.h

Issue 600104: Actually delete databases in CookiesTreeModel. (Closed)
Patch Set: fixed comments Created 10 years, 10 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
« no previous file with comments | « chrome/browser/views/options/cookies_view.cc ('k') | webkit/database/database_tracker.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef WEBKIT_DATABASE_DATABASE_TRACKER_H_ 5 #ifndef WEBKIT_DATABASE_DATABASE_TRACKER_H_
6 #define WEBKIT_DATABASE_DATABASE_TRACKER_H_ 6 #define WEBKIT_DATABASE_DATABASE_TRACKER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 10
(...skipping 23 matching lines...) Expand all
34 public: 34 public:
35 OriginInfo(const OriginInfo& origin_info) 35 OriginInfo(const OriginInfo& origin_info)
36 : origin_(origin_info.origin_), 36 : origin_(origin_info.origin_),
37 total_size_(origin_info.total_size_), 37 total_size_(origin_info.total_size_),
38 quota_(origin_info.quota_), 38 quota_(origin_info.quota_),
39 database_info_(origin_info.database_info_) {} 39 database_info_(origin_info.database_info_) {}
40 const string16& GetOrigin() const { return origin_; } 40 const string16& GetOrigin() const { return origin_; }
41 int64 TotalSize() const { return total_size_; } 41 int64 TotalSize() const { return total_size_; }
42 int64 Quota() const { return quota_; } 42 int64 Quota() const { return quota_; }
43 void GetAllDatabaseNames(std::vector<string16>* databases) const { 43 void GetAllDatabaseNames(std::vector<string16>* databases) const {
44 for (std::map<string16, DatabaseInfo>::const_iterator it = 44 for (DatabaseInfoMap::const_iterator it = database_info_.begin();
45 database_info_.begin(); it != database_info_.end(); it++) { 45 it != database_info_.end(); it++) {
46 databases->push_back(it->first); 46 databases->push_back(it->first);
47 } 47 }
48 } 48 }
49 int64 GetDatabaseSize(const string16& database_name) const { 49 int64 GetDatabaseSize(const string16& database_name) const {
50 std::map<string16, DatabaseInfo>::const_iterator it = 50 DatabaseInfoMap::const_iterator it = database_info_.find(database_name);
51 database_info_.find(database_name);
52 if (it != database_info_.end()) 51 if (it != database_info_.end())
53 return it->second.first; 52 return it->second.first;
54 return 0; 53 return 0;
55 } 54 }
56 string16 GetDatabaseDescription(const string16& database_name) const { 55 string16 GetDatabaseDescription(const string16& database_name) const {
57 std::map<string16, DatabaseInfo>::const_iterator it = 56 DatabaseInfoMap::const_iterator it = database_info_.find(database_name);
58 database_info_.find(database_name);
59 if (it != database_info_.end()) 57 if (it != database_info_.end())
60 return it->second.second; 58 return it->second.second;
61 return string16(); 59 return string16();
62 } 60 }
63 61
64 protected: 62 protected:
65 typedef std::pair<int64, string16> DatabaseInfo; 63 typedef std::map<string16, std::pair<int64, string16> > DatabaseInfoMap;
66 64
67 OriginInfo(const string16& origin, int64 total_size, int64 quota) 65 OriginInfo(const string16& origin, int64 total_size, int64 quota)
68 : origin_(origin), total_size_(total_size), quota_(quota) { } 66 : origin_(origin), total_size_(total_size), quota_(quota) { }
69 67
70 string16 origin_; 68 string16 origin_;
71 int64 total_size_; 69 int64 total_size_;
72 int64 quota_; 70 int64 quota_;
73 std::map<string16, DatabaseInfo> database_info_; 71 DatabaseInfoMap database_info_;
74 }; 72 };
75 73
76 // This class manages the main database, and keeps track of per origin quotas. 74 // This class manages the main database, and keeps track of per origin quotas.
77 // 75 //
78 // The data in this class is not thread-safe, so all methods of this class 76 // The data in this class is not thread-safe, so all methods of this class
79 // should be called on the same thread. The only exception is 77 // should be called on the same thread. The only exception is
80 // database_directory() which returns a constant that is initialized when 78 // database_directory() which returns a constant that is initialized when
81 // the DatabaseTracker instance is created. 79 // the DatabaseTracker instance is created.
82 // 80 //
83 // Furthermore, some methods of this class have to read/write data from/to 81 // Furthermore, some methods of this class have to read/write data from/to
(...skipping 10 matching lines...) Expand all
94 int64 database_size, 92 int64 database_size,
95 int64 space_available) = 0; 93 int64 space_available) = 0;
96 virtual void OnDatabaseScheduledForDeletion( 94 virtual void OnDatabaseScheduledForDeletion(
97 const string16& origin_identifier, 95 const string16& origin_identifier,
98 const string16& database_name) = 0; 96 const string16& database_name) = 0;
99 virtual ~Observer() {} 97 virtual ~Observer() {}
100 }; 98 };
101 99
102 explicit DatabaseTracker(const FilePath& profile_path); 100 explicit DatabaseTracker(const FilePath& profile_path);
103 101
104 // Sets the default quota for all origins. Should be used in tests only.
105 void SetDefaultQuota(int64 quota);
106
107 void DatabaseOpened(const string16& origin_identifier, 102 void DatabaseOpened(const string16& origin_identifier,
108 const string16& database_name, 103 const string16& database_name,
109 const string16& database_details, 104 const string16& database_details,
110 int64 estimated_size, 105 int64 estimated_size,
111 int64* database_size, 106 int64* database_size,
112 int64* space_available); 107 int64* space_available);
113 void DatabaseModified(const string16& origin_identifier, 108 void DatabaseModified(const string16& origin_identifier,
114 const string16& database_name); 109 const string16& database_name);
115 void DatabaseClosed(const string16& origin_identifier, 110 void DatabaseClosed(const string16& origin_identifier,
116 const string16& database_name); 111 const string16& database_name);
117 void CloseDatabases(const DatabaseConnections& connections); 112 void CloseDatabases(const DatabaseConnections& connections);
118 void DeleteDatabaseIfNeeded(const string16& origin_identifier, 113 void DeleteDatabaseIfNeeded(const string16& origin_identifier,
119 const string16& database_name); 114 const string16& database_name);
120 115
121 void AddObserver(Observer* observer); 116 void AddObserver(Observer* observer);
122 void RemoveObserver(Observer* observer); 117 void RemoveObserver(Observer* observer);
123 118
124 void CloseTrackerDatabaseAndClearCaches(); 119 void CloseTrackerDatabaseAndClearCaches();
125 120
126 const FilePath& DatabaseDirectory() const { return db_dir_; } 121 const FilePath& DatabaseDirectory() const { return db_dir_; }
127 FilePath GetFullDBFilePath(const string16& origin_identifier, 122 FilePath GetFullDBFilePath(const string16& origin_identifier,
128 const string16& database_name) const; 123 const string16& database_name) const;
129 124
130 bool GetAllOriginsInfo(std::vector<OriginInfo>* origins_info); 125 bool GetAllOriginsInfo(std::vector<OriginInfo>* origins_info);
131 void SetOriginQuota(const string16& origin_identifier, int64 new_quota); 126 void SetOriginQuota(const string16& origin_identifier, int64 new_quota);
132 bool DeleteDatabase(const string16& origin_identifier, 127
133 const string16& database_name); 128 // Sets the default quota for all origins. Should be used in tests only.
134 bool DeleteOrigin(const string16& origin_identifier); 129 void SetDefaultQuota(int64 quota);
130
135 bool IsDatabaseScheduledForDeletion(const string16& origin_identifier, 131 bool IsDatabaseScheduledForDeletion(const string16& origin_identifier,
136 const string16& database_name); 132 const string16& database_name);
137 133
134 // Deletes a single database. Returns net::OK on success, net::FAILED on
135 // failure, or net::ERR_IO_PENDING and |callback| is invoked upon completion,
136 // if non-NULL.
137 int DeleteDatabase(const string16& origin_identifier,
138 const string16& database_name,
139 net::CompletionCallback* callback);
140
138 // Delete any databases that have been touched since the cutoff date that's 141 // Delete any databases that have been touched since the cutoff date that's
139 // supplied. Returns net::OK on success, net::FAILED if not all databases 142 // supplied. Returns net::OK on success, net::FAILED if not all databases
140 // could be deleted, and net::ERR_IO_PENDING and |callback| is invoked upon 143 // could be deleted, and net::ERR_IO_PENDING and |callback| is invoked upon
141 // completion. 144 // completion, if non-NULL.
142 int DeleteDataModifiedSince(const base::Time& cutoff, 145 int DeleteDataModifiedSince(const base::Time& cutoff,
143 net::CompletionCallback* callback); 146 net::CompletionCallback* callback);
144 147
145 static void ClearLocalState(const FilePath& profile_path); 148 static void ClearLocalState(const FilePath& profile_path);
146 149
147 private: 150 private:
148 // Need this here to allow RefCountedThreadSafe to call ~DatabaseTracker(). 151 // Need this here to allow RefCountedThreadSafe to call ~DatabaseTracker().
149 friend class base::RefCountedThreadSafe<DatabaseTracker>; 152 friend class base::RefCountedThreadSafe<DatabaseTracker>;
150 153
154 typedef std::map<string16, std::set<string16> > DatabaseSet;
155 typedef std::map<net::CompletionCallback*, DatabaseSet> PendingCompletionMap;
156
151 class CachedOriginInfo : public OriginInfo { 157 class CachedOriginInfo : public OriginInfo {
152 public: 158 public:
153 CachedOriginInfo() : OriginInfo(string16(), 0, 0) {} 159 CachedOriginInfo() : OriginInfo(string16(), 0, 0) {}
154 void SetOrigin(const string16& origin) { origin_ = origin; } 160 void SetOrigin(const string16& origin) { origin_ = origin; }
155 void SetQuota(int64 new_quota) { quota_ = new_quota; } 161 void SetQuota(int64 new_quota) { quota_ = new_quota; }
156 void SetDatabaseSize(const string16& database_name, int64 new_size) { 162 void SetDatabaseSize(const string16& database_name, int64 new_size) {
157 int64 old_size = 0; 163 int64 old_size = 0;
158 if (database_info_.find(database_name) != database_info_.end()) 164 if (database_info_.find(database_name) != database_info_.end())
159 old_size = database_info_[database_name].first; 165 old_size = database_info_[database_name].first;
160 database_info_[database_name].first = new_size; 166 database_info_[database_name].first = new_size;
161 if (new_size != old_size) 167 if (new_size != old_size)
162 total_size_ += new_size - old_size; 168 total_size_ += new_size - old_size;
163 } 169 }
164 void SetDatabaseDescription(const string16& database_name, 170 void SetDatabaseDescription(const string16& database_name,
165 const string16& description) { 171 const string16& description) {
166 database_info_[database_name].second = description; 172 database_info_[database_name].second = description;
167 } 173 }
168 }; 174 };
169 175
170 ~DatabaseTracker(); 176 ~DatabaseTracker();
171 177
178 bool DeleteClosedDatabase(const string16& origin_identifier,
179 const string16& database_name);
180 bool DeleteOrigin(const string16& origin_identifier);
181
172 bool LazyInit(); 182 bool LazyInit();
173 bool UpgradeToCurrentVersion(); 183 bool UpgradeToCurrentVersion();
174 void InsertOrUpdateDatabaseDetails(const string16& origin_identifier, 184 void InsertOrUpdateDatabaseDetails(const string16& origin_identifier,
175 const string16& database_name, 185 const string16& database_name,
176 const string16& database_details, 186 const string16& database_details,
177 int64 estimated_size); 187 int64 estimated_size);
178 188
179 void ClearAllCachedOriginInfo(); 189 void ClearAllCachedOriginInfo();
180 CachedOriginInfo* GetCachedOriginInfo(const string16& origin_identifier); 190 CachedOriginInfo* GetCachedOriginInfo(const string16& origin_identifier);
181 191
(...skipping 11 matching lines...) Expand all
193 const FilePath db_dir_; 203 const FilePath db_dir_;
194 scoped_ptr<sql::Connection> db_; 204 scoped_ptr<sql::Connection> db_;
195 scoped_ptr<DatabasesTable> databases_table_; 205 scoped_ptr<DatabasesTable> databases_table_;
196 scoped_ptr<QuotaTable> quota_table_; 206 scoped_ptr<QuotaTable> quota_table_;
197 scoped_ptr<sql::MetaTable> meta_table_; 207 scoped_ptr<sql::MetaTable> meta_table_;
198 ObserverList<Observer> observers_; 208 ObserverList<Observer> observers_;
199 std::map<string16, CachedOriginInfo> origins_info_map_; 209 std::map<string16, CachedOriginInfo> origins_info_map_;
200 DatabaseConnections database_connections_; 210 DatabaseConnections database_connections_;
201 211
202 // The set of databases that should be deleted but are still opened 212 // The set of databases that should be deleted but are still opened
203 std::map<string16, std::set<string16> > dbs_to_be_deleted_; 213 DatabaseSet dbs_to_be_deleted_;
204 net::CompletionCallback* dbs_deleted_callback_; 214 PendingCompletionMap deletion_callbacks_;
205 215
206 // Default quota for all origins; changed only by tests 216 // Default quota for all origins; changed only by tests
207 int64 default_quota_; 217 int64 default_quota_;
208 218
209 FRIEND_TEST(DatabaseTrackerTest, TestIt); 219 FRIEND_TEST(DatabaseTrackerTest, TestIt);
210 }; 220 };
211 221
212 } // namespace webkit_database 222 } // namespace webkit_database
213 223
214 #endif // WEBKIT_DATABASE_DATABASE_TRACKER_H_ 224 #endif // WEBKIT_DATABASE_DATABASE_TRACKER_H_
OLDNEW
« no previous file with comments | « chrome/browser/views/options/cookies_view.cc ('k') | webkit/database/database_tracker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698