Chromium Code Reviews| OLD | NEW |
|---|---|
| 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> |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 #include "webkit/quota/quota_types.h" | 22 #include "webkit/quota/quota_types.h" |
| 23 | 23 |
| 24 namespace base { | 24 namespace base { |
| 25 class MessageLoopProxy; | 25 class MessageLoopProxy; |
| 26 } | 26 } |
| 27 class FilePath; | 27 class FilePath; |
| 28 | 28 |
| 29 namespace quota { | 29 namespace quota { |
| 30 | 30 |
| 31 class QuotaDatabase; | 31 class QuotaDatabase; |
| 32 class QuotaTemporaryStorageEvictor; | |
| 32 class UsageTracker; | 33 class UsageTracker; |
| 33 | 34 |
| 34 struct QuotaManagerDeleter; | 35 struct QuotaManagerDeleter; |
| 35 class QuotaManagerProxy; | 36 class QuotaManagerProxy; |
| 36 | 37 |
| 37 // An interface called by QuotaTemporaryStorageEvictor. | 38 // An interface called by QuotaTemporaryStorageEvictor. |
| 38 class QuotaEvictionHandler { | 39 class QuotaEvictionHandler { |
| 39 public: | 40 public: |
| 40 typedef Callback1<GURL>::Type GetLRUOriginCallback; | 41 typedef Callback1<GURL>::Type GetLRUOriginCallback; |
| 41 typedef Callback4<QuotaStatusCode, | 42 typedef Callback4<QuotaStatusCode, |
| 42 int64 /* usage */, | 43 int64 /* usage */, |
| 43 int64 /* quota */, | 44 int64 /* quota */, |
| 44 int64 /* physical_avail */ >::Type DeleteOriginDataCallback; | 45 int64 /* physical_avail */ >::Type DeleteOriginDataCallback; |
| 45 | 46 |
| 46 virtual void GetUsageAndQuotaForEviction( | 47 virtual void GetUsageAndQuotaForEviction( |
| 47 DeleteOriginDataCallback* callback) = 0; | 48 DeleteOriginDataCallback* callback) = 0; |
| 48 | 49 |
| 49 virtual void DeleteOriginData( | 50 virtual void DeleteOriginData( |
|
michaeln
2011/05/17 00:19:45
Delete sounds more generic than this really is giv
Dai Mikurube (NOT FULLTIME)
2011/05/17 09:18:40
Done.
| |
| 50 const GURL& origin, | 51 const GURL& origin, |
| 51 StorageType type, | 52 StorageType type, |
| 52 DeleteOriginDataCallback* callback) = 0; | 53 DeleteOriginDataCallback* callback) = 0; |
| 53 | 54 |
| 54 virtual void GetLRUOrigin( | 55 virtual void GetLRUOrigin( |
| 55 StorageType type, | 56 StorageType type, |
| 56 GetLRUOriginCallback* callback) = 0; | 57 GetLRUOriginCallback* callback) = 0; |
| 57 }; | 58 }; |
| 58 | 59 |
| 59 // The quota manager class. This class is instantiated per profile and | 60 // The quota manager class. This class is instantiated per profile and |
| 60 // held by the profile. With the exception of the constructor and the | 61 // held by the profile. With the exception of the constructor and the |
| 61 // proxy() method, all methods should only be called on the IO thread. | 62 // proxy() method, all methods should only be called on the IO thread. |
| 62 class QuotaManager : public QuotaTaskObserver, | 63 class QuotaManager : public QuotaTaskObserver, |
| 64 public QuotaEvictionHandler, | |
| 63 public base::RefCountedThreadSafe< | 65 public base::RefCountedThreadSafe< |
| 64 QuotaManager, QuotaManagerDeleter> { | 66 QuotaManager, QuotaManagerDeleter> { |
| 65 public: | 67 public: |
| 66 typedef Callback3<QuotaStatusCode, | 68 typedef Callback3<QuotaStatusCode, |
| 67 int64 /* usage */, | 69 int64 /* usage */, |
| 68 int64 /* quota */>::Type GetUsageAndQuotaCallback; | 70 int64 /* quota */>::Type GetUsageAndQuotaCallback; |
| 69 typedef Callback2<QuotaStatusCode, | 71 typedef Callback2<QuotaStatusCode, |
| 70 int64 /* granted_quota */>::Type RequestQuotaCallback; | 72 int64 /* granted_quota */>::Type RequestQuotaCallback; |
| 71 typedef Callback1<GURL>::Type GetLRUOriginCallback; | |
| 72 | 73 |
| 73 QuotaManager(bool is_incognito, | 74 QuotaManager(bool is_incognito, |
| 74 const FilePath& profile_path, | 75 const FilePath& profile_path, |
| 75 base::MessageLoopProxy* io_thread, | 76 base::MessageLoopProxy* io_thread, |
| 76 base::MessageLoopProxy* db_thread); | 77 base::MessageLoopProxy* db_thread); |
| 77 | 78 |
| 78 virtual ~QuotaManager(); | 79 virtual ~QuotaManager(); |
| 79 | 80 |
| 80 // Returns a proxy object that can be used on any thread. | 81 // Returns a proxy object that can be used on any thread. |
| 81 QuotaManagerProxy* proxy() { return proxy_.get(); } | 82 QuotaManagerProxy* proxy() { return proxy_.get(); } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 122 void GetPersistentHostQuota(const std::string& host, | 123 void GetPersistentHostQuota(const std::string& host, |
| 123 HostQuotaCallback* callback); | 124 HostQuotaCallback* callback); |
| 124 void SetPersistentHostQuota(const std::string& host, | 125 void SetPersistentHostQuota(const std::string& host, |
| 125 int64 new_quota, | 126 int64 new_quota, |
| 126 HostQuotaCallback* callback); | 127 HostQuotaCallback* callback); |
| 127 | 128 |
| 128 void GetGlobalUsage(StorageType type, UsageCallback* callback); | 129 void GetGlobalUsage(StorageType type, UsageCallback* callback); |
| 129 void GetHostUsage(const std::string& host, StorageType type, | 130 void GetHostUsage(const std::string& host, StorageType type, |
| 130 HostUsageCallback* callback); | 131 HostUsageCallback* callback); |
| 131 | 132 |
| 133 // TODO(dmikurube): Make it a friend? | |
| 134 void RegisterTemporaryStorageEvictor( | |
| 135 scoped_refptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor); | |
| 136 | |
| 132 static const int64 kTemporaryStorageQuotaDefaultSize; | 137 static const int64 kTemporaryStorageQuotaDefaultSize; |
| 133 static const int64 kTemporaryStorageQuotaMaxSize; | 138 static const int64 kTemporaryStorageQuotaMaxSize; |
| 134 static const char kDatabaseName[]; | 139 static const char kDatabaseName[]; |
| 135 | 140 |
| 136 static const int64 kIncognitoDefaultTemporaryQuota; | 141 static const int64 kIncognitoDefaultTemporaryQuota; |
| 137 | 142 |
| 138 private: | 143 private: |
| 139 class InitializeTask; | 144 class InitializeTask; |
| 140 class TemporaryGlobalQuotaUpdateTask; | 145 class TemporaryGlobalQuotaUpdateTask; |
| 141 class PersistentHostQuotaUpdateTask; | 146 class PersistentHostQuotaUpdateTask; |
| 142 class PersistentHostQuotaQueryTask; | 147 class PersistentHostQuotaQueryTask; |
| 143 class GetLRUOriginTask; | 148 class GetLRUOriginTask; |
| 144 | 149 |
| 145 class UsageAndQuotaDispatcherTask; | 150 class UsageAndQuotaDispatcherTask; |
| 146 class UsageAndQuotaDispatcherTaskForTemporary; | 151 class UsageAndQuotaDispatcherTaskForTemporary; |
| 147 class UsageAndQuotaDispatcherTaskForPersistent; | 152 class UsageAndQuotaDispatcherTaskForPersistent; |
| 148 | 153 |
| 149 typedef std::pair<std::string, StorageType> HostAndType; | 154 typedef std::pair<std::string, StorageType> HostAndType; |
| 150 typedef std::map<HostAndType, UsageAndQuotaDispatcherTask*> | 155 typedef std::map<HostAndType, UsageAndQuotaDispatcherTask*> |
| 151 UsageAndQuotaDispatcherTaskMap; | 156 UsageAndQuotaDispatcherTaskMap; |
| 152 | 157 |
| 153 friend struct QuotaManagerDeleter; | 158 friend struct QuotaManagerDeleter; |
| 154 friend class QuotaManagerProxy; | 159 friend class QuotaManagerProxy; |
| 160 friend class QuotaTemporaryStorageEvictor; | |
| 155 | 161 |
| 156 // This initialization method is lazily called on the IO thread | 162 // This initialization method is lazily called on the IO thread |
| 157 // when the first quota manager API is called. | 163 // when the first quota manager API is called. |
| 158 // Initialize must be called after all quota clients are added to the | 164 // Initialize must be called after all quota clients are added to the |
| 159 // manager by RegisterStorage. | 165 // manager by RegisterStorage. |
| 160 void LazyInitialize(); | 166 void LazyInitialize(); |
| 161 | 167 |
| 162 // Called by clients via proxy. | 168 // Called by clients via proxy. |
| 163 // Registers a quota client to the manager. | 169 // Registers a quota client to the manager. |
| 164 // The client must remain valid until OnQuotaManagerDestored is called. | 170 // The client must remain valid until OnQuotaManagerDestored is called. |
| 165 void RegisterClient(QuotaClient* client); | 171 void RegisterClient(QuotaClient* client); |
| 166 | 172 |
| 167 // TODO(dmikurube): Add a test for this method. | |
| 168 virtual void GetLRUOrigin( | 173 virtual void GetLRUOrigin( |
| 169 StorageType type, | 174 StorageType type, |
| 170 GetLRUOriginCallback* callback); | 175 GetLRUOriginCallback* callback) OVERRIDE; |
| 176 | |
| 177 void StartEviction(); | |
| 178 | |
| 179 virtual void GetUsageAndQuotaForEviction( | |
| 180 DeleteOriginDataCallback* callback) OVERRIDE; | |
| 181 | |
| 182 void OnOriginDataDeleted( | |
| 183 QuotaStatusCode status, | |
| 184 DeleteOriginDataCallback* callback); | |
| 185 | |
| 186 virtual void DeleteOriginData( | |
| 187 const GURL& origin, | |
| 188 StorageType type, | |
| 189 DeleteOriginDataCallback* callback) OVERRIDE; | |
|
kinuko
2011/05/16 13:48:01
style-nit: Can you put derived methods together wi
Dai Mikurube (NOT FULLTIME)
2011/05/17 09:18:40
Done.
| |
| 171 | 190 |
| 172 UsageTracker* GetUsageTracker(StorageType type) const; | 191 UsageTracker* GetUsageTracker(StorageType type) const; |
| 173 | 192 |
| 174 void DidGetTemporaryGlobalQuota(int64 quota); | 193 void DidGetTemporaryGlobalQuota(int64 quota); |
| 175 | 194 |
| 176 void DeleteOnCorrectThread() const; | 195 void DeleteOnCorrectThread() const; |
| 177 | 196 |
| 178 const bool is_incognito_; | 197 const bool is_incognito_; |
| 179 const FilePath profile_path_; | 198 const FilePath profile_path_; |
| 180 | 199 |
| 181 scoped_refptr<QuotaManagerProxy> proxy_; | 200 scoped_refptr<QuotaManagerProxy> proxy_; |
| 182 bool db_initialized_; | 201 bool db_initialized_; |
| 183 bool db_disabled_; | 202 bool db_disabled_; |
| 184 scoped_refptr<base::MessageLoopProxy> io_thread_; | 203 scoped_refptr<base::MessageLoopProxy> io_thread_; |
| 185 scoped_refptr<base::MessageLoopProxy> db_thread_; | 204 scoped_refptr<base::MessageLoopProxy> db_thread_; |
| 186 mutable scoped_ptr<QuotaDatabase> database_; | 205 mutable scoped_ptr<QuotaDatabase> database_; |
| 187 | 206 |
| 188 QuotaClientList clients_; | 207 QuotaClientList clients_; |
| 189 | 208 |
| 190 scoped_ptr<UsageTracker> temporary_usage_tracker_; | 209 scoped_ptr<UsageTracker> temporary_usage_tracker_; |
| 191 scoped_ptr<UsageTracker> persistent_usage_tracker_; | 210 scoped_ptr<UsageTracker> persistent_usage_tracker_; |
| 211 scoped_refptr<QuotaTemporaryStorageEvictor> temporary_storage_evictor_; | |
| 192 | 212 |
| 193 UsageAndQuotaDispatcherTaskMap usage_and_quota_dispatchers_; | 213 UsageAndQuotaDispatcherTaskMap usage_and_quota_dispatchers_; |
| 194 | 214 |
| 215 int num_deletion_requested_clients_; | |
| 216 int num_deleted_clients_; | |
| 217 | |
| 195 int64 temporary_global_quota_; | 218 int64 temporary_global_quota_; |
| 196 QuotaCallbackQueue temporary_global_quota_callbacks_; | 219 QuotaCallbackQueue temporary_global_quota_callbacks_; |
| 197 | 220 |
| 198 // Map from origin to count. | 221 // Map from origin to count. |
| 199 std::map<GURL, int> origins_in_use_; | 222 std::map<GURL, int> origins_in_use_; |
| 200 | 223 |
| 201 DISALLOW_COPY_AND_ASSIGN(QuotaManager); | 224 DISALLOW_COPY_AND_ASSIGN(QuotaManager); |
| 202 }; | 225 }; |
| 203 | 226 |
| 204 struct QuotaManagerDeleter { | 227 struct QuotaManagerDeleter { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 QuotaManager* manager_; // only accessed on the io thread | 259 QuotaManager* manager_; // only accessed on the io thread |
| 237 scoped_refptr<base::MessageLoopProxy> io_thread_; | 260 scoped_refptr<base::MessageLoopProxy> io_thread_; |
| 238 | 261 |
| 239 DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy); | 262 DISALLOW_COPY_AND_ASSIGN(QuotaManagerProxy); |
| 240 }; | 263 }; |
| 241 | 264 |
| 242 | 265 |
| 243 } // namespace quota | 266 } // namespace quota |
| 244 | 267 |
| 245 #endif // WEBKIT_QUOTA_QUOTA_MANAGER_H_ | 268 #endif // WEBKIT_QUOTA_QUOTA_MANAGER_H_ |
| OLD | NEW |