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

Side by Side Diff: storage/browser/quota/quota_manager.h

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 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 | « storage/browser/quota/quota_database.cc ('k') | storage/browser/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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_BROWSER_QUOTA_QUOTA_MANAGER_H_ 5 #ifndef WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_H_
6 #define WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_H_ 6 #define WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
11 #include <set> 11 #include <set>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 #include <vector> 14 #include <vector>
15 15
16 #include "base/basictypes.h" 16 #include "base/basictypes.h"
17 #include "base/callback.h" 17 #include "base/callback.h"
18 #include "base/files/file_path.h" 18 #include "base/files/file_path.h"
19 #include "base/memory/ref_counted.h" 19 #include "base/memory/ref_counted.h"
20 #include "base/memory/scoped_ptr.h" 20 #include "base/memory/scoped_ptr.h"
21 #include "base/memory/weak_ptr.h" 21 #include "base/memory/weak_ptr.h"
22 #include "base/sequenced_task_runner_helpers.h" 22 #include "base/sequenced_task_runner_helpers.h"
23 #include "webkit/browser/quota/quota_callbacks.h" 23 #include "storage/browser/quota/quota_callbacks.h"
24 #include "webkit/browser/quota/quota_client.h" 24 #include "storage/browser/quota/quota_client.h"
25 #include "webkit/browser/quota/quota_database.h" 25 #include "storage/browser/quota/quota_database.h"
26 #include "webkit/browser/quota/quota_task.h" 26 #include "storage/browser/quota/quota_task.h"
27 #include "webkit/browser/quota/special_storage_policy.h" 27 #include "storage/browser/quota/special_storage_policy.h"
28 #include "webkit/browser/quota/storage_observer.h" 28 #include "storage/browser/quota/storage_observer.h"
29 #include "webkit/browser/webkit_storage_browser_export.h" 29 #include "storage/common/storage_export.h"
30 30
31 namespace base { 31 namespace base {
32 class FilePath; 32 class FilePath;
33 class SequencedTaskRunner; 33 class SequencedTaskRunner;
34 class SingleThreadTaskRunner; 34 class SingleThreadTaskRunner;
35 } 35 }
36 36
37 namespace quota_internals { 37 namespace quota_internals {
38 class QuotaInternalsProxy; 38 class QuotaInternalsProxy;
39 } 39 }
40 40
41 namespace content { 41 namespace content {
42 class MockQuotaManager; 42 class MockQuotaManager;
43 class MockStorageClient; 43 class MockStorageClient;
44 class QuotaManagerTest; 44 class QuotaManagerTest;
45 class StorageMonitorTest; 45 class StorageMonitorTest;
46
47 } 46 }
48 47
49 namespace quota { 48 namespace quota {
50 49
51 class QuotaDatabase; 50 class QuotaDatabase;
52 class QuotaManagerProxy; 51 class QuotaManagerProxy;
53 class QuotaTemporaryStorageEvictor; 52 class QuotaTemporaryStorageEvictor;
54 class StorageMonitor; 53 class StorageMonitor;
55 class UsageTracker; 54 class UsageTracker;
56 55
57 struct QuotaManagerDeleter; 56 struct QuotaManagerDeleter;
58 57
59 struct WEBKIT_STORAGE_BROWSER_EXPORT UsageAndQuota { 58 struct STORAGE_EXPORT UsageAndQuota {
60 int64 usage; 59 int64 usage;
61 int64 global_limited_usage; 60 int64 global_limited_usage;
62 int64 quota; 61 int64 quota;
63 int64 available_disk_space; 62 int64 available_disk_space;
64 63
65 UsageAndQuota(); 64 UsageAndQuota();
66 UsageAndQuota(int64 usage, 65 UsageAndQuota(int64 usage,
67 int64 global_limited_usage, 66 int64 global_limited_usage,
68 int64 quota, 67 int64 quota,
69 int64 available_disk_space); 68 int64 available_disk_space);
70 }; 69 };
71 70
72 // An interface called by QuotaTemporaryStorageEvictor. 71 // An interface called by QuotaTemporaryStorageEvictor.
73 class WEBKIT_STORAGE_BROWSER_EXPORT QuotaEvictionHandler { 72 class STORAGE_EXPORT QuotaEvictionHandler {
74 public: 73 public:
75 typedef base::Callback<void(const GURL&)> GetLRUOriginCallback; 74 typedef base::Callback<void(const GURL&)> GetLRUOriginCallback;
76 typedef StatusCallback EvictOriginDataCallback; 75 typedef StatusCallback EvictOriginDataCallback;
77 typedef base::Callback<void(QuotaStatusCode status, 76 typedef base::Callback<
78 const UsageAndQuota& usage_and_quota)> 77 void(QuotaStatusCode status, const UsageAndQuota& usage_and_quota)>
79 UsageAndQuotaCallback; 78 UsageAndQuotaCallback;
80 79
81 // Returns the least recently used origin. It might return empty 80 // Returns the least recently used origin. It might return empty
82 // GURL when there are no evictable origins. 81 // GURL when there are no evictable origins.
83 virtual void GetLRUOrigin( 82 virtual void GetLRUOrigin(StorageType type,
84 StorageType type, 83 const GetLRUOriginCallback& callback) = 0;
85 const GetLRUOriginCallback& callback) = 0;
86 84
87 virtual void EvictOriginData( 85 virtual void EvictOriginData(const GURL& origin,
88 const GURL& origin, 86 StorageType type,
89 StorageType type, 87 const EvictOriginDataCallback& callback) = 0;
90 const EvictOriginDataCallback& callback) = 0;
91 88
92 virtual void GetUsageAndQuotaForEviction( 89 virtual void GetUsageAndQuotaForEviction(
93 const UsageAndQuotaCallback& callback) = 0; 90 const UsageAndQuotaCallback& callback) = 0;
94 91
95 protected: 92 protected:
96 virtual ~QuotaEvictionHandler() {} 93 virtual ~QuotaEvictionHandler() {}
97 }; 94 };
98 95
99 struct UsageInfo { 96 struct UsageInfo {
100 UsageInfo(const std::string& host, StorageType type, int64 usage) 97 UsageInfo(const std::string& host, StorageType type, int64 usage)
101 : host(host), 98 : host(host), type(type), usage(usage) {}
102 type(type),
103 usage(usage) {}
104 std::string host; 99 std::string host;
105 StorageType type; 100 StorageType type;
106 int64 usage; 101 int64 usage;
107 }; 102 };
108 103
109 // The quota manager class. This class is instantiated per profile and 104 // The quota manager class. This class is instantiated per profile and
110 // held by the profile. With the exception of the constructor and the 105 // held by the profile. With the exception of the constructor and the
111 // proxy() method, all methods should only be called on the IO thread. 106 // proxy() method, all methods should only be called on the IO thread.
112 class WEBKIT_STORAGE_BROWSER_EXPORT QuotaManager 107 class STORAGE_EXPORT QuotaManager
113 : public QuotaTaskObserver, 108 : public QuotaTaskObserver,
114 public QuotaEvictionHandler, 109 public QuotaEvictionHandler,
115 public base::RefCountedThreadSafe<QuotaManager, QuotaManagerDeleter> { 110 public base::RefCountedThreadSafe<QuotaManager, QuotaManagerDeleter> {
116 public: 111 public:
117 typedef base::Callback<void(QuotaStatusCode, 112 typedef base::Callback<
118 int64 /* usage */, 113 void(QuotaStatusCode, int64 /* usage */, int64 /* quota */)>
119 int64 /* quota */)>
120 GetUsageAndQuotaCallback; 114 GetUsageAndQuotaCallback;
121 115
122 static const int64 kIncognitoDefaultQuotaLimit; 116 static const int64 kIncognitoDefaultQuotaLimit;
123 static const int64 kNoLimit; 117 static const int64 kNoLimit;
124 118
125 QuotaManager(bool is_incognito, 119 QuotaManager(bool is_incognito,
126 const base::FilePath& profile_path, 120 const base::FilePath& profile_path,
127 base::SingleThreadTaskRunner* io_thread, 121 base::SingleThreadTaskRunner* io_thread,
128 base::SequencedTaskRunner* db_thread, 122 base::SequencedTaskRunner* db_thread,
129 SpecialStoragePolicy* special_storage_policy); 123 SpecialStoragePolicy* special_storage_policy);
(...skipping 10 matching lines...) Expand all
140 const GURL& origin, 134 const GURL& origin,
141 StorageType type, 135 StorageType type,
142 const GetUsageAndQuotaCallback& callback); 136 const GetUsageAndQuotaCallback& callback);
143 137
144 // Called by StorageClients. 138 // Called by StorageClients.
145 // This method is declared as virtual to allow test code to override it. 139 // This method is declared as virtual to allow test code to override it.
146 // 140 //
147 // For UnlimitedStorage origins, this version skips usage and quota handling 141 // For UnlimitedStorage origins, this version skips usage and quota handling
148 // to avoid extra query cost. 142 // to avoid extra query cost.
149 // Do not call this method for apps/user-facing code. 143 // Do not call this method for apps/user-facing code.
150 virtual void GetUsageAndQuota( 144 virtual void GetUsageAndQuota(const GURL& origin,
151 const GURL& origin, 145 StorageType type,
152 StorageType type, 146 const GetUsageAndQuotaCallback& callback);
153 const GetUsageAndQuotaCallback& callback);
154 147
155 // Called by clients via proxy. 148 // Called by clients via proxy.
156 // Client storage should call this method when storage is accessed. 149 // Client storage should call this method when storage is accessed.
157 // Used to maintain LRU ordering. 150 // Used to maintain LRU ordering.
158 void NotifyStorageAccessed(QuotaClient::ID client_id, 151 void NotifyStorageAccessed(QuotaClient::ID client_id,
159 const GURL& origin, 152 const GURL& origin,
160 StorageType type); 153 StorageType type);
161 154
162 // Called by clients via proxy. 155 // Called by clients via proxy.
163 // Client storage must call this method whenever they have made any 156 // Client storage must call this method whenever they have made any
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 // Ok to call with NULL callback. 197 // Ok to call with NULL callback.
205 void SetTemporaryGlobalOverrideQuota(int64 new_quota, 198 void SetTemporaryGlobalOverrideQuota(int64 new_quota,
206 const QuotaCallback& callback); 199 const QuotaCallback& callback);
207 200
208 void GetPersistentHostQuota(const std::string& host, 201 void GetPersistentHostQuota(const std::string& host,
209 const QuotaCallback& callback); 202 const QuotaCallback& callback);
210 void SetPersistentHostQuota(const std::string& host, 203 void SetPersistentHostQuota(const std::string& host,
211 int64 new_quota, 204 int64 new_quota,
212 const QuotaCallback& callback); 205 const QuotaCallback& callback);
213 void GetGlobalUsage(StorageType type, const GlobalUsageCallback& callback); 206 void GetGlobalUsage(StorageType type, const GlobalUsageCallback& callback);
214 void GetHostUsage(const std::string& host, StorageType type, 207 void GetHostUsage(const std::string& host,
208 StorageType type,
215 const UsageCallback& callback); 209 const UsageCallback& callback);
216 void GetHostUsage(const std::string& host, StorageType type, 210 void GetHostUsage(const std::string& host,
211 StorageType type,
217 QuotaClient::ID client_id, 212 QuotaClient::ID client_id,
218 const UsageCallback& callback); 213 const UsageCallback& callback);
219 214
220 bool IsTrackingHostUsage(StorageType type, QuotaClient::ID client_id) const; 215 bool IsTrackingHostUsage(StorageType type, QuotaClient::ID client_id) const;
221 216
222 void GetStatistics(std::map<std::string, std::string>* statistics); 217 void GetStatistics(std::map<std::string, std::string>* statistics);
223 218
224 bool IsStorageUnlimited(const GURL& origin, StorageType type) const; 219 bool IsStorageUnlimited(const GURL& origin, StorageType type) const;
225 220
226 bool CanQueryDiskSize(const GURL& origin) const { 221 bool CanQueryDiskSize(const GURL& origin) const {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 280
286 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry; 281 typedef QuotaDatabase::QuotaTableEntry QuotaTableEntry;
287 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry; 282 typedef QuotaDatabase::OriginInfoTableEntry OriginInfoTableEntry;
288 typedef std::vector<QuotaTableEntry> QuotaTableEntries; 283 typedef std::vector<QuotaTableEntry> QuotaTableEntries;
289 typedef std::vector<OriginInfoTableEntry> OriginInfoTableEntries; 284 typedef std::vector<OriginInfoTableEntry> OriginInfoTableEntries;
290 285
291 // Function pointer type used to store the function which returns the 286 // Function pointer type used to store the function which returns the
292 // available disk space for the disk containing the given FilePath. 287 // available disk space for the disk containing the given FilePath.
293 typedef int64 (*GetAvailableDiskSpaceFn)(const base::FilePath&); 288 typedef int64 (*GetAvailableDiskSpaceFn)(const base::FilePath&);
294 289
295 typedef base::Callback<void(const QuotaTableEntries&)> 290 typedef base::Callback<void(const QuotaTableEntries&)> DumpQuotaTableCallback;
296 DumpQuotaTableCallback;
297 typedef base::Callback<void(const OriginInfoTableEntries&)> 291 typedef base::Callback<void(const OriginInfoTableEntries&)>
298 DumpOriginInfoTableCallback; 292 DumpOriginInfoTableCallback;
299 293
300 struct EvictionContext { 294 struct EvictionContext {
301 EvictionContext(); 295 EvictionContext();
302 virtual ~EvictionContext(); 296 virtual ~EvictionContext();
303 GURL evicted_origin; 297 GURL evicted_origin;
304 StorageType evicted_type; 298 StorageType evicted_type;
305 299
306 EvictOriginDataCallback evict_origin_data_callback; 300 EvictOriginDataCallback evict_origin_data_callback;
(...skipping 13 matching lines...) Expand all
320 // The client must remain valid until OnQuotaManagerDestored is called. 314 // The client must remain valid until OnQuotaManagerDestored is called.
321 void RegisterClient(QuotaClient* client); 315 void RegisterClient(QuotaClient* client);
322 316
323 UsageTracker* GetUsageTracker(StorageType type) const; 317 UsageTracker* GetUsageTracker(StorageType type) const;
324 318
325 // Extract cached origins list from the usage tracker. 319 // Extract cached origins list from the usage tracker.
326 // (Might return empty list if no origin is tracked by the tracker.) 320 // (Might return empty list if no origin is tracked by the tracker.)
327 void GetCachedOrigins(StorageType type, std::set<GURL>* origins); 321 void GetCachedOrigins(StorageType type, std::set<GURL>* origins);
328 322
329 // These internal methods are separately defined mainly for testing. 323 // These internal methods are separately defined mainly for testing.
330 void NotifyStorageAccessedInternal( 324 void NotifyStorageAccessedInternal(QuotaClient::ID client_id,
331 QuotaClient::ID client_id, 325 const GURL& origin,
332 const GURL& origin, 326 StorageType type,
333 StorageType type, 327 base::Time accessed_time);
334 base::Time accessed_time); 328 void NotifyStorageModifiedInternal(QuotaClient::ID client_id,
335 void NotifyStorageModifiedInternal( 329 const GURL& origin,
336 QuotaClient::ID client_id, 330 StorageType type,
337 const GURL& origin, 331 int64 delta,
338 StorageType type, 332 base::Time modified_time);
339 int64 delta,
340 base::Time modified_time);
341 333
342 void DumpQuotaTable(const DumpQuotaTableCallback& callback); 334 void DumpQuotaTable(const DumpQuotaTableCallback& callback);
343 void DumpOriginInfoTable(const DumpOriginInfoTableCallback& callback); 335 void DumpOriginInfoTable(const DumpOriginInfoTableCallback& callback);
344 336
345 // Methods for eviction logic. 337 // Methods for eviction logic.
346 void StartEviction(); 338 void StartEviction();
347 void DeleteOriginFromDatabase(const GURL& origin, StorageType type); 339 void DeleteOriginFromDatabase(const GURL& origin, StorageType type);
348 340
349 void DidOriginDataEvicted(QuotaStatusCode status); 341 void DidOriginDataEvicted(QuotaStatusCode status);
350 342
351 void ReportHistogram(); 343 void ReportHistogram();
352 void DidGetTemporaryGlobalUsageForHistogram(int64 usage, 344 void DidGetTemporaryGlobalUsageForHistogram(int64 usage,
353 int64 unlimited_usage); 345 int64 unlimited_usage);
354 void DidGetPersistentGlobalUsageForHistogram(int64 usage, 346 void DidGetPersistentGlobalUsageForHistogram(int64 usage,
355 int64 unlimited_usage); 347 int64 unlimited_usage);
356 348
357 // QuotaEvictionHandler. 349 // QuotaEvictionHandler.
358 virtual void GetLRUOrigin( 350 virtual void GetLRUOrigin(StorageType type,
359 StorageType type, 351 const GetLRUOriginCallback& callback) OVERRIDE;
360 const GetLRUOriginCallback& callback) OVERRIDE;
361 virtual void EvictOriginData( 352 virtual void EvictOriginData(
362 const GURL& origin, 353 const GURL& origin,
363 StorageType type, 354 StorageType type,
364 const EvictOriginDataCallback& callback) OVERRIDE; 355 const EvictOriginDataCallback& callback) OVERRIDE;
365 virtual void GetUsageAndQuotaForEviction( 356 virtual void GetUsageAndQuotaForEviction(
366 const UsageAndQuotaCallback& callback) OVERRIDE; 357 const UsageAndQuotaCallback& callback) OVERRIDE;
367 358
368 void DidSetTemporaryGlobalOverrideQuota(const QuotaCallback& callback, 359 void DidSetTemporaryGlobalOverrideQuota(const QuotaCallback& callback,
369 const int64* new_quota, 360 const int64* new_quota,
370 bool success); 361 bool success);
371 void DidGetPersistentHostQuota(const std::string& host, 362 void DidGetPersistentHostQuota(const std::string& host,
372 const int64* quota, 363 const int64* quota,
373 bool success); 364 bool success);
374 void DidSetPersistentHostQuota(const std::string& host, 365 void DidSetPersistentHostQuota(const std::string& host,
375 const QuotaCallback& callback, 366 const QuotaCallback& callback,
376 const int64* new_quota, 367 const int64* new_quota,
377 bool success); 368 bool success);
378 void DidInitialize(int64* temporary_quota_override, 369 void DidInitialize(int64* temporary_quota_override,
379 int64* desired_available_space, 370 int64* desired_available_space,
380 bool success); 371 bool success);
381 void DidGetLRUOrigin(const GURL* origin, 372 void DidGetLRUOrigin(const GURL* origin, bool success);
382 bool success);
383 void DidGetInitialTemporaryGlobalQuota(QuotaStatusCode status, 373 void DidGetInitialTemporaryGlobalQuota(QuotaStatusCode status,
384 int64 quota_unused); 374 int64 quota_unused);
385 void DidInitializeTemporaryOriginsInfo(bool success); 375 void DidInitializeTemporaryOriginsInfo(bool success);
386 void DidGetAvailableSpace(int64 space); 376 void DidGetAvailableSpace(int64 space);
387 void DidDatabaseWork(bool success); 377 void DidDatabaseWork(bool success);
388 378
389 void DeleteOnCorrectThread() const; 379 void DeleteOnCorrectThread() const;
390 380
391 void PostTaskAndReplyWithResultForDBThread( 381 void PostTaskAndReplyWithResultForDBThread(
392 const tracked_objects::Location& from_here, 382 const tracked_objects::Location& from_here,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 440
451 struct QuotaManagerDeleter { 441 struct QuotaManagerDeleter {
452 static void Destruct(const QuotaManager* manager) { 442 static void Destruct(const QuotaManager* manager) {
453 manager->DeleteOnCorrectThread(); 443 manager->DeleteOnCorrectThread();
454 } 444 }
455 }; 445 };
456 446
457 } // namespace quota 447 } // namespace quota
458 448
459 #endif // WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_H_ 449 #endif // WEBKIT_BROWSER_QUOTA_QUOTA_MANAGER_H_
OLDNEW
« no previous file with comments | « storage/browser/quota/quota_database.cc ('k') | storage/browser/quota/quota_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698