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

Side by Side Diff: webkit/quota/quota_manager.h

Issue 8070001: Use base::Callback in Quota related code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 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 | Annotate | Revision Log
« no previous file with comments | « webkit/quota/quota_client.h ('k') | webkit/quota/quota_manager.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_QUOTA_QUOTA_MANAGER_H_ 5 #ifndef WEBKIT_QUOTA_QUOTA_MANAGER_H_
6 #define WEBKIT_QUOTA_QUOTA_MANAGER_H_ 6 #define WEBKIT_QUOTA_QUOTA_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <deque> 9 #include <deque>
10 #include <list> 10 #include <list>
11 #include <map> 11 #include <map>
12 #include <set> 12 #include <set>
13 #include <string> 13 #include <string>
14 #include <utility>
14 #include <vector> 15 #include <vector>
15 16
16 #include "base/basictypes.h" 17 #include "base/basictypes.h"
17 #include "base/callback.h" 18 #include "base/callback.h"
18 #include "base/file_path.h" 19 #include "base/file_path.h"
19 #include "base/memory/ref_counted.h" 20 #include "base/memory/ref_counted.h"
20 #include "base/memory/scoped_callback_factory.h" 21 #include "base/memory/weak_ptr.h"
21 #include "base/memory/scoped_ptr.h" 22 #include "base/memory/scoped_ptr.h"
22 #include "base/memory/weak_ptr.h" 23 #include "base/memory/weak_ptr.h"
23 #include "webkit/quota/quota_database.h" 24 #include "webkit/quota/quota_database.h"
24 #include "webkit/quota/quota_client.h" 25 #include "webkit/quota/quota_client.h"
25 #include "webkit/quota/quota_task.h" 26 #include "webkit/quota/quota_task.h"
26 #include "webkit/quota/quota_types.h" 27 #include "webkit/quota/quota_types.h"
27 #include "webkit/quota/special_storage_policy.h" 28 #include "webkit/quota/special_storage_policy.h"
28 29
29 class FilePath; 30 class FilePath;
30 31
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 67
67 // Returns the least recently used origin. It might return empty 68 // Returns the least recently used origin. It might return empty
68 // GURL when there are no evictable origins. 69 // GURL when there are no evictable origins.
69 virtual void GetLRUOrigin( 70 virtual void GetLRUOrigin(
70 StorageType type, 71 StorageType type,
71 const GetLRUOriginCallback& callback) = 0; 72 const GetLRUOriginCallback& callback) = 0;
72 73
73 virtual void EvictOriginData( 74 virtual void EvictOriginData(
74 const GURL& origin, 75 const GURL& origin,
75 StorageType type, 76 StorageType type,
76 EvictOriginDataCallback* callback) = 0; 77 const EvictOriginDataCallback& callback) = 0;
77 78
78 virtual void GetUsageAndQuotaForEviction( 79 virtual void GetUsageAndQuotaForEviction(
79 const GetUsageAndQuotaForEvictionCallback& callback) = 0; 80 const GetUsageAndQuotaForEvictionCallback& callback) = 0;
80 }; 81 };
81 82
82 struct UsageInfo { 83 struct UsageInfo {
83 UsageInfo(const std::string& host, StorageType type, int64 usage) 84 UsageInfo(const std::string& host, StorageType type, int64 usage)
84 : host(host), 85 : host(host),
85 type(type), 86 type(type),
86 usage(usage) {} 87 usage(usage) {}
87 std::string host; 88 std::string host;
88 StorageType type; 89 StorageType type;
89 int64 usage; 90 int64 usage;
90 }; 91 };
91 92
92 // The quota manager class. This class is instantiated per profile and 93 // The quota manager class. This class is instantiated per profile and
93 // held by the profile. With the exception of the constructor and the 94 // held by the profile. With the exception of the constructor and the
94 // proxy() method, all methods should only be called on the IO thread. 95 // proxy() method, all methods should only be called on the IO thread.
95 class QuotaManager : public QuotaTaskObserver, 96 class QuotaManager : public QuotaTaskObserver,
96 public QuotaEvictionHandler, 97 public QuotaEvictionHandler,
97 public base::RefCountedThreadSafe< 98 public base::RefCountedThreadSafe<
98 QuotaManager, QuotaManagerDeleter> { 99 QuotaManager, QuotaManagerDeleter> {
99 public: 100 public:
100 typedef Callback3<QuotaStatusCode, 101 typedef base::Callback<void(QuotaStatusCode,
101 int64 /* usage */, 102 int64 /* usage */,
102 int64 /* quota */>::Type GetUsageAndQuotaCallback; 103 int64 /* quota */)>
104 GetUsageAndQuotaCallback;
103 105
104 QuotaManager(bool is_incognito, 106 QuotaManager(bool is_incognito,
105 const FilePath& profile_path, 107 const FilePath& profile_path,
106 base::MessageLoopProxy* io_thread, 108 base::MessageLoopProxy* io_thread,
107 base::MessageLoopProxy* db_thread, 109 base::MessageLoopProxy* db_thread,
108 SpecialStoragePolicy* special_storage_policy); 110 SpecialStoragePolicy* special_storage_policy);
109 111
110 virtual ~QuotaManager(); 112 virtual ~QuotaManager();
111 113
112 // Returns a proxy object that can be used on any thread. 114 // Returns a proxy object that can be used on any thread.
113 QuotaManagerProxy* proxy() { return proxy_.get(); } 115 QuotaManagerProxy* proxy() { return proxy_.get(); }
114 116
115 // Called by clients or webapps. Returns usage per host. 117 // Called by clients or webapps. Returns usage per host.
116 void GetUsageInfo(GetUsageInfoCallback* callback); 118 void GetUsageInfo(const GetUsageInfoCallback& callback);
117 119
118 // Called by clients or webapps. 120 // Called by clients or webapps.
119 // This method is declared as virtual to allow test code to override it. 121 // This method is declared as virtual to allow test code to override it.
120 // note: returns host usage and quota 122 // note: returns host usage and quota
121 virtual void GetUsageAndQuota(const GURL& origin, 123 virtual void GetUsageAndQuota(const GURL& origin,
122 StorageType type, 124 StorageType type,
123 GetUsageAndQuotaCallback* callback); 125 const GetUsageAndQuotaCallback& callback);
124 126
125 // Called by clients via proxy. 127 // Called by clients via proxy.
126 // Client storage should call this method when storage is accessed. 128 // Client storage should call this method when storage is accessed.
127 // Used to maintain LRU ordering. 129 // Used to maintain LRU ordering.
128 void NotifyStorageAccessed(QuotaClient::ID client_id, 130 void NotifyStorageAccessed(QuotaClient::ID client_id,
129 const GURL& origin, 131 const GURL& origin,
130 StorageType type); 132 StorageType type);
131 133
132 // Called by clients via proxy. 134 // Called by clients via proxy.
133 // Client storage must call this method whenever they have made any 135 // Client storage must call this method whenever they have made any
134 // modifications that change the amount of data stored in their storage. 136 // modifications that change the amount of data stored in their storage.
135 void NotifyStorageModified(QuotaClient::ID client_id, 137 void NotifyStorageModified(QuotaClient::ID client_id,
136 const GURL& origin, 138 const GURL& origin,
137 StorageType type, 139 StorageType type,
138 int64 delta); 140 int64 delta);
139 141
140 // Used to avoid evicting origins with open pages. 142 // Used to avoid evicting origins with open pages.
141 // A call to NotifyOriginInUse must be balanced by a later call 143 // A call to NotifyOriginInUse must be balanced by a later call
142 // to NotifyOriginNoLongerInUse. 144 // to NotifyOriginNoLongerInUse.
143 void NotifyOriginInUse(const GURL& origin); 145 void NotifyOriginInUse(const GURL& origin);
144 void NotifyOriginNoLongerInUse(const GURL& origin); 146 void NotifyOriginNoLongerInUse(const GURL& origin);
145 bool IsOriginInUse(const GURL& origin) const { 147 bool IsOriginInUse(const GURL& origin) const {
146 return origins_in_use_.find(origin) != origins_in_use_.end(); 148 return origins_in_use_.find(origin) != origins_in_use_.end();
147 } 149 }
148 150
149 // Called by UI. 151 // Called by UI.
150 virtual void DeleteOriginData(const GURL& origin, 152 virtual void DeleteOriginData(const GURL& origin,
151 StorageType type, 153 StorageType type,
152 StatusCallback* callback); 154 const StatusCallback& callback);
153 155
154 // Called by UI and internal modules. 156 // Called by UI and internal modules.
155 void GetAvailableSpace(AvailableSpaceCallback* callback); 157 void GetAvailableSpace(const AvailableSpaceCallback& callback);
156 void GetTemporaryGlobalQuota(QuotaCallback* callback); 158 void GetTemporaryGlobalQuota(const QuotaCallback& callback);
157 159
158 // Ok to call with NULL callback. 160 // Ok to call with NULL callback.
159 void SetTemporaryGlobalOverrideQuota(int64 new_quota, 161 void SetTemporaryGlobalOverrideQuota(int64 new_quota,
160 QuotaCallback* callback); 162 const QuotaCallback& callback);
161 163
162 void GetPersistentHostQuota(const std::string& host, 164 void GetPersistentHostQuota(const std::string& host,
163 HostQuotaCallback* callback); 165 const HostQuotaCallback& callback);
164 void SetPersistentHostQuota(const std::string& host, 166 void SetPersistentHostQuota(const std::string& host,
165 int64 new_quota, 167 int64 new_quota,
166 HostQuotaCallback* callback); 168 const HostQuotaCallback& callback);
167 void GetGlobalUsage(StorageType type, GlobalUsageCallback* callback); 169 void GetGlobalUsage(StorageType type, const GlobalUsageCallback& callback);
168 void GetHostUsage(const std::string& host, StorageType type, 170 void GetHostUsage(const std::string& host, StorageType type,
169 HostUsageCallback* callback); 171 const HostUsageCallback& callback);
170 172
171 void GetStatistics(std::map<std::string, std::string>* statistics); 173 void GetStatistics(std::map<std::string, std::string>* statistics);
172 174
173 bool IsStorageUnlimited(const GURL& origin) const { 175 bool IsStorageUnlimited(const GURL& origin) const {
174 return special_storage_policy_.get() && 176 return special_storage_policy_.get() &&
175 special_storage_policy_->IsStorageUnlimited(origin); 177 special_storage_policy_->IsStorageUnlimited(origin);
176 } 178 }
177 179
178 virtual void GetOriginsModifiedSince(StorageType type, 180 virtual void GetOriginsModifiedSince(StorageType type,
179 base::Time modified_since, 181 base::Time modified_since,
180 GetOriginsCallback* callback); 182 const GetOriginsCallback& callback);
181 183
182 bool ResetUsageTracker(StorageType type); 184 bool ResetUsageTracker(StorageType type);
183 185
184 // Determines the portion of the temp pool that can be 186 // Determines the portion of the temp pool that can be
185 // utilized by a single host (ie. 5 for 20%). 187 // utilized by a single host (ie. 5 for 20%).
186 static const int kPerHostTemporaryPortion; 188 static const int kPerHostTemporaryPortion;
187 189
188 static const char kDatabaseName[]; 190 static const char kDatabaseName[];
189 191
190 static const int kThresholdOfErrorsToBeBlacklisted; 192 static const int kThresholdOfErrorsToBeBlacklisted;
(...skipping 23 matching lines...) Expand all
214 216
215 class AvailableSpaceQueryTask; 217 class AvailableSpaceQueryTask;
216 class DumpQuotaTableTask; 218 class DumpQuotaTableTask;
217 class DumpOriginInfoTableTask; 219 class DumpOriginInfoTableTask;
218 220
219 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry; 221 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
220 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry; 222 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry;
221 typedef std::vector<QuotaTableEntry> QuotaTableEntries; 223 typedef std::vector<QuotaTableEntry> QuotaTableEntries;
222 typedef std::vector<OriginInfoTableEntry> OriginInfoTableEntries; 224 typedef std::vector<OriginInfoTableEntry> OriginInfoTableEntries;
223 225
224 typedef Callback1<const QuotaTableEntries&>::Type DumpQuotaTableCallback; 226 typedef base::Callback<void(const QuotaTableEntries&)>
225 typedef Callback1<const OriginInfoTableEntries&>::Type 227 DumpQuotaTableCallback;
228 typedef base::Callback<void(const OriginInfoTableEntries&)>
226 DumpOriginInfoTableCallback; 229 DumpOriginInfoTableCallback;
227 230
228 struct EvictionContext { 231 struct EvictionContext {
229 EvictionContext() : evicted_type(kStorageTypeUnknown) {} 232 EvictionContext() : evicted_type(kStorageTypeUnknown) {}
230 virtual ~EvictionContext() {} 233 virtual ~EvictionContext() {}
231 GURL evicted_origin; 234 GURL evicted_origin;
232 StorageType evicted_type; 235 StorageType evicted_type;
233 scoped_ptr<EvictOriginDataCallback> evict_origin_data_callback; 236
237 EvictOriginDataCallback evict_origin_data_callback;
234 }; 238 };
235 239
236 typedef std::pair<std::string, StorageType> HostAndType; 240 typedef std::pair<std::string, StorageType> HostAndType;
237 typedef std::map<HostAndType, UsageAndQuotaDispatcherTask*> 241 typedef std::map<HostAndType, UsageAndQuotaDispatcherTask*>
238 UsageAndQuotaDispatcherTaskMap; 242 UsageAndQuotaDispatcherTaskMap;
239 243
240 typedef QuotaEvictionHandler::GetUsageAndQuotaForEvictionCallback 244 typedef QuotaEvictionHandler::GetUsageAndQuotaForEvictionCallback
241 UsageAndQuotaDispatcherCallback; 245 UsageAndQuotaDispatcherCallback;
242 246
243 friend class quota_internals::QuotaInternalsProxy; 247 friend class quota_internals::QuotaInternalsProxy;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 int64 delta, 282 int64 delta,
279 base::Time modified_time); 283 base::Time modified_time);
280 284
281 // |origin| can be empty if |global| is true. 285 // |origin| can be empty if |global| is true.
282 void GetUsageAndQuotaInternal( 286 void GetUsageAndQuotaInternal(
283 const GURL& origin, 287 const GURL& origin,
284 StorageType type, 288 StorageType type,
285 bool global, 289 bool global,
286 const UsageAndQuotaDispatcherCallback& callback); 290 const UsageAndQuotaDispatcherCallback& callback);
287 291
288 void DumpQuotaTable(DumpQuotaTableCallback* callback); 292 void DumpQuotaTable(const DumpQuotaTableCallback& callback);
289 void DumpOriginInfoTable(DumpOriginInfoTableCallback* callback); 293 void DumpOriginInfoTable(const DumpOriginInfoTableCallback& callback);
290 294
291 // Methods for eviction logic. 295 // Methods for eviction logic.
292 void StartEviction(); 296 void StartEviction();
293 void DeleteOriginFromDatabase(const GURL& origin, StorageType type); 297 void DeleteOriginFromDatabase(const GURL& origin, StorageType type);
294 298
295 void DidOriginDataEvicted(QuotaStatusCode status); 299 void DidOriginDataEvicted(QuotaStatusCode status);
296 void DidGetGlobalUsageAndQuotaForEviction(QuotaStatusCode status, 300 void DidGetGlobalUsageAndQuotaForEviction(QuotaStatusCode status,
297 StorageType type, 301 StorageType type,
298 int64 usage, 302 int64 usage,
299 int64 unlimited_usage, 303 int64 unlimited_usage,
300 int64 quota, 304 int64 quota,
301 int64 available_space); 305 int64 available_space);
302 306
303 void ReportHistogram(); 307 void ReportHistogram();
304 void DidGetTemporaryGlobalUsageForHistogram(StorageType type, 308 void DidGetTemporaryGlobalUsageForHistogram(StorageType type,
305 int64 usage, 309 int64 usage,
306 int64 unlimited_usage); 310 int64 unlimited_usage);
307 void DidGetPersistentGlobalUsageForHistogram(StorageType type, 311 void DidGetPersistentGlobalUsageForHistogram(StorageType type,
308 int64 usage, 312 int64 usage,
309 int64 unlimited_usage); 313 int64 unlimited_usage);
310 314
311 // QuotaEvictionHandler. 315 // QuotaEvictionHandler.
312 virtual void GetLRUOrigin( 316 virtual void GetLRUOrigin(
313 StorageType type, 317 StorageType type,
314 const GetLRUOriginCallback& callback) OVERRIDE; 318 const GetLRUOriginCallback& callback) OVERRIDE;
315 virtual void EvictOriginData( 319 virtual void EvictOriginData(
316 const GURL& origin, 320 const GURL& origin,
317 StorageType type, 321 StorageType type,
318 EvictOriginDataCallback* callback) OVERRIDE; 322 const EvictOriginDataCallback& callback) OVERRIDE;
319 virtual void GetUsageAndQuotaForEviction( 323 virtual void GetUsageAndQuotaForEviction(
320 const GetUsageAndQuotaForEvictionCallback& callback) OVERRIDE; 324 const GetUsageAndQuotaForEvictionCallback& callback) OVERRIDE;
321 325
322 void DidRunInitializeTask(); 326 void DidRunInitializeTask();
323 void DidGetInitialTemporaryGlobalQuota(QuotaStatusCode status, 327 void DidGetInitialTemporaryGlobalQuota(QuotaStatusCode status,
324 StorageType type, 328 StorageType type,
325 int64 quota_unused); 329 int64 quota_unused);
326 void DidGetDatabaseLRUOrigin(const GURL& origin); 330 void DidGetDatabaseLRUOrigin(const GURL& origin);
327 331
328 void DeleteOnCorrectThread() const; 332 void DeleteOnCorrectThread() const;
(...skipping 28 matching lines...) Expand all
357 361
358 int64 desired_available_space_; 362 int64 desired_available_space_;
359 363
360 // Map from origin to count. 364 // Map from origin to count.
361 std::map<GURL, int> origins_in_use_; 365 std::map<GURL, int> origins_in_use_;
362 // Map from origin to error count. 366 // Map from origin to error count.
363 std::map<GURL, int> origins_in_error_; 367 std::map<GURL, int> origins_in_error_;
364 368
365 scoped_refptr<SpecialStoragePolicy> special_storage_policy_; 369 scoped_refptr<SpecialStoragePolicy> special_storage_policy_;
366 370
367 base::ScopedCallbackFactory<QuotaManager> callback_factory_;
368 base::WeakPtrFactory<QuotaManager> weak_factory_; 371 base::WeakPtrFactory<QuotaManager> weak_factory_;
369 base::RepeatingTimer<QuotaManager> histogram_timer_; 372 base::RepeatingTimer<QuotaManager> histogram_timer_;
370 373
371 DISALLOW_COPY_AND_ASSIGN(QuotaManager); 374 DISALLOW_COPY_AND_ASSIGN(QuotaManager);
372 }; 375 };
373 376
374 struct QuotaManagerDeleter { 377 struct QuotaManagerDeleter {
375 static void Destruct(const QuotaManager* manager) { 378 static void Destruct(const QuotaManager* manager) {
376 manager->DeleteOnCorrectThread(); 379 manager->DeleteOnCorrectThread();
377 } 380 }
(...skipping 27 matching lines...) Expand all
405 408
406 QuotaManager* manager_; // only accessed on the io thread 409 QuotaManager* manager_; // only accessed on the io thread
407 scoped_refptr<base::MessageLoopProxy> io_thread_; 410 scoped_refptr<base::MessageLoopProxy> io_thread_;
408 411
409 DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy); 412 DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy);
410 }; 413 };
411 414
412 } // namespace quota 415 } // namespace quota
413 416
414 #endif // WEBKIT_QUOTA_QUOTA_MANAGER_H_ 417 #endif // WEBKIT_QUOTA_QUOTA_MANAGER_H_
OLDNEW
« no previous file with comments | « webkit/quota/quota_client.h ('k') | webkit/quota/quota_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698