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_TYPES_H_ | 5 #ifndef WEBKIT_QUOTA_QUOTA_TYPES_H_ |
| 6 #define WEBKIT_QUOTA_QUOTA_TYPES_H_ | 6 #define WEBKIT_QUOTA_QUOTA_TYPES_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <deque> | 9 #include <deque> |
| 10 #include <map> | 10 #include <map> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <string> | 12 #include <string> |
| 13 | 13 |
| 14 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
| 15 #include "base/callback_old.h" | 15 #include "base/callback.h" |
| 16 #include "base/stl_util.h" | |
| 17 | 16 |
| 18 class GURL; | 17 class GURL; |
| 19 | 18 |
| 20 namespace quota { | 19 namespace quota { |
| 21 | 20 |
| 22 enum StorageType { | 21 enum StorageType { |
| 23 kStorageTypeTemporary, | 22 kStorageTypeTemporary, |
| 24 kStorageTypePersistent, | 23 kStorageTypePersistent, |
| 25 kStorageTypeUnknown, | 24 kStorageTypeUnknown, |
| 26 }; | 25 }; |
| 27 | 26 |
| 28 // The numbers should match with the error code defined in | 27 // The numbers should match with the error code defined in |
| 29 // third_party/WebKit/Source/WebCore/dom/ExceptionCode.h. | 28 // third_party/WebKit/Source/WebCore/dom/ExceptionCode.h. |
| 30 enum QuotaStatusCode { | 29 enum QuotaStatusCode { |
| 31 kQuotaStatusOk = 0, | 30 kQuotaStatusOk = 0, |
| 32 kQuotaErrorNotSupported = 9, // NOT_SUPPORTED_ERR | 31 kQuotaErrorNotSupported = 9, // NOT_SUPPORTED_ERR |
| 33 kQuotaErrorInvalidModification = 13, // INVALID_MODIFICATION_ERR | 32 kQuotaErrorInvalidModification = 13, // INVALID_MODIFICATION_ERR |
| 34 kQuotaErrorInvalidAccess = 15, // INVALID_ACCESS_ERR | 33 kQuotaErrorInvalidAccess = 15, // INVALID_ACCESS_ERR |
| 35 kQuotaErrorAbort = 20, // ABORT_ERR | 34 kQuotaErrorAbort = 20, // ABORT_ERR |
| 36 kQuotaStatusUnknown = -1, | 35 kQuotaStatusUnknown = -1, |
| 37 }; | 36 }; |
| 38 | 37 |
| 39 // Common callback types that are used throughout in the quota module. | 38 // Common callback types that are used throughout in the quota module. |
| 40 typedef Callback2<StorageType, int64>::Type UsageCallback; | 39 typedef base::Callback<void (StorageType, int64)> UsageCallback; |
|
awong
2011/09/29 18:05:15
remove space after void.
tzik
2011/10/11 04:53:57
Done.
| |
| 41 typedef Callback3<StorageType, int64, int64>::Type GlobalUsageCallback; | 40 typedef base::Callback<void (StorageType, int64, int64)> GlobalUsageCallback; |
| 42 typedef Callback3<QuotaStatusCode, | 41 typedef base::Callback<void (QuotaStatusCode, StorageType, int64)> |
| 43 StorageType, | 42 QuotaCallback; |
| 44 int64>::Type QuotaCallback; | 43 typedef base::Callback<void (const std::string&, StorageType, int64)> |
| 45 typedef Callback3<const std::string& /* host */, | 44 HostUsageCallback; |
| 46 StorageType, | 45 typedef base::Callback<void (QuotaStatusCode, |
| 47 int64>::Type HostUsageCallback; | 46 const std::string&, |
| 48 typedef Callback4<QuotaStatusCode, | 47 StorageType, |
| 49 const std::string& /* host */, | 48 int64)> HostQuotaCallback; |
| 50 StorageType, | 49 typedef base::Callback<void (QuotaStatusCode, int64)> AvailableSpaceCallback; |
| 51 int64>::Type HostQuotaCallback; | 50 typedef base::Callback<void (QuotaStatusCode)> StatusCallback; |
| 52 typedef Callback2<QuotaStatusCode, | 51 typedef base::Callback<void (const std::set<GURL>&, StorageType)> |
| 53 int64>::Type AvailableSpaceCallback; | 52 GetOriginsCallback; |
| 54 typedef Callback1<QuotaStatusCode>::Type StatusCallback; | |
| 55 typedef Callback2<const std::set<GURL>&, StorageType>::Type GetOriginsCallback; | |
| 56 | 53 |
| 57 // Simple template wrapper for a callback queue. | 54 // Simple template wrapper for a callback queue. |
| 58 template <typename CallbackType> | 55 template <typename CallbackType> |
| 59 class CallbackQueueBase { | 56 class CallbackQueueBase { |
| 60 public: | 57 public: |
| 61 typedef typename std::deque<CallbackType> Queue; | 58 typedef typename std::deque<CallbackType> Queue; |
| 62 typedef typename Queue::iterator iterator; | 59 typedef typename Queue::iterator iterator; |
| 63 | 60 |
| 64 virtual ~CallbackQueueBase() { | 61 virtual ~CallbackQueueBase() {} |
| 65 STLDeleteContainerPointers(callbacks_.begin(), callbacks_.end()); | |
| 66 } | |
| 67 | 62 |
| 68 // Returns true if the given |callback| is the first one added to the queue. | 63 // Returns true if the given |callback| is the first one added to the queue. |
| 69 bool Add(CallbackType callback) { | 64 bool Add(CallbackType callback) { |
| 70 callbacks_.push_back(callback); | 65 callbacks_.push_back(callback); |
| 71 return (callbacks_.size() == 1); | 66 return (callbacks_.size() == 1); |
| 72 } | 67 } |
| 73 | 68 |
| 74 bool HasCallbacks() const { | 69 bool HasCallbacks() const { |
| 75 return !callbacks_.empty(); | 70 return !callbacks_.empty(); |
| 76 } | 71 } |
| 77 | 72 |
| 78 protected: | 73 protected: |
| 79 std::deque<CallbackType> callbacks_; | 74 std::deque<CallbackType> callbacks_; |
| 80 }; | 75 }; |
| 81 | 76 |
| 82 template <typename CallbackType1, typename A1> | 77 template <typename CallbackType1, typename A1> |
| 83 class CallbackQueue1 : public CallbackQueueBase<CallbackType1> { | 78 class CallbackQueue1 : public CallbackQueueBase<CallbackType1> { |
| 84 public: | 79 public: |
| 85 typedef typename CallbackQueueBase<CallbackType1>::Queue Queue; | 80 typedef typename CallbackQueueBase<CallbackType1>::Queue Queue; |
| 86 // Runs the callbacks added to the queue and clears the queue. | 81 // Runs the callbacks added to the queue and clears the queue. |
| 87 void Run(A1 arg) { | 82 void Run(A1 arg) { |
| 88 // Note: template-derived class needs 'this->' to access its base class. | 83 // Note: template-derived class needs 'this->' to access its base class. |
| 89 for (typename Queue::iterator iter = this->callbacks_.begin(); | 84 for (typename Queue::iterator iter = this->callbacks_.begin(); |
| 90 iter != this->callbacks_.end(); ++iter) { | 85 iter != this->callbacks_.end(); ++iter) { |
| 91 (*iter)->Run(arg); | 86 iter->Run(arg); |
| 92 delete *iter; | |
| 93 } | 87 } |
| 94 this->callbacks_.clear(); | 88 this->callbacks_.clear(); |
| 95 } | 89 } |
| 96 }; | 90 }; |
| 97 | 91 |
| 98 template <typename CallbackType2, typename A1, typename A2> | 92 template <typename CallbackType2, typename A1, typename A2> |
| 99 class CallbackQueue2 : public CallbackQueueBase<CallbackType2> { | 93 class CallbackQueue2 : public CallbackQueueBase<CallbackType2> { |
| 100 public: | 94 public: |
| 101 typedef typename CallbackQueueBase<CallbackType2>::Queue Queue; | 95 typedef typename CallbackQueueBase<CallbackType2>::Queue Queue; |
| 102 // Runs the callbacks added to the queue and clears the queue. | 96 // Runs the callbacks added to the queue and clears the queue. |
| 103 void Run(A1 arg1, A2 arg2) { | 97 void Run(A1 arg1, A2 arg2) { |
| 104 for (typename Queue::iterator iter = this->callbacks_.begin(); | 98 for (typename Queue::iterator iter = this->callbacks_.begin(); |
| 105 iter != this->callbacks_.end(); ++iter) { | 99 iter != this->callbacks_.end(); ++iter) { |
| 106 (*iter)->Run(arg1, arg2); | 100 iter->Run(arg1, arg2); |
| 107 delete *iter; | |
| 108 } | 101 } |
| 109 this->callbacks_.clear(); | 102 this->callbacks_.clear(); |
| 110 } | 103 } |
| 111 }; | 104 }; |
| 112 | 105 |
| 113 template <typename CallbackType3, typename A1, typename A2, typename A3> | 106 template <typename CallbackType3, typename A1, typename A2, typename A3> |
| 114 class CallbackQueue3 : public CallbackQueueBase<CallbackType3> { | 107 class CallbackQueue3 : public CallbackQueueBase<CallbackType3> { |
| 115 public: | 108 public: |
| 116 typedef typename CallbackQueueBase<CallbackType3>::Queue Queue; | 109 typedef typename CallbackQueueBase<CallbackType3>::Queue Queue; |
| 117 // Runs the callbacks added to the queue and clears the queue. | 110 // Runs the callbacks added to the queue and clears the queue. |
| 118 void Run(A1 arg1, A2 arg2, A3 arg3) { | 111 void Run(A1 arg1, A2 arg2, A3 arg3) { |
| 119 for (typename Queue::iterator iter = this->callbacks_.begin(); | 112 for (typename Queue::iterator iter = this->callbacks_.begin(); |
| 120 iter != this->callbacks_.end(); ++iter) { | 113 iter != this->callbacks_.end(); ++iter) { |
| 121 (*iter)->Run(arg1, arg2, arg3); | 114 iter->Run(arg1, arg2, arg3); |
| 122 delete *iter; | |
| 123 } | 115 } |
| 124 this->callbacks_.clear(); | 116 this->callbacks_.clear(); |
| 125 } | 117 } |
| 126 }; | 118 }; |
| 127 | 119 |
| 128 template <typename CallbackType4, | 120 template <typename CallbackType4, |
| 129 typename A1, typename A2, typename A3, typename A4> | 121 typename A1, typename A2, typename A3, typename A4> |
| 130 class CallbackQueue4 : public CallbackQueueBase<CallbackType4> { | 122 class CallbackQueue4 : public CallbackQueueBase<CallbackType4> { |
| 131 public: | 123 public: |
| 132 typedef typename CallbackQueueBase<CallbackType4>::Queue Queue; | 124 typedef typename CallbackQueueBase<CallbackType4>::Queue Queue; |
| 133 // Runs the callbacks added to the queue and clears the queue. | 125 // Runs the callbacks added to the queue and clears the queue. |
| 134 void Run(A1 arg1, A2 arg2, A3 arg3, A4 arg4) { | 126 void Run(A1 arg1, A2 arg2, A3 arg3, A4 arg4) { |
| 135 for (typename Queue::iterator iter = this->callbacks_.begin(); | 127 for (typename Queue::iterator iter = this->callbacks_.begin(); |
| 136 iter != this->callbacks_.end(); ++iter) { | 128 iter != this->callbacks_.end(); ++iter) { |
| 137 (*iter)->Run(arg1, arg2, arg3, arg4); | 129 iter->Run(arg1, arg2, arg3, arg4); |
| 138 delete *iter; | |
| 139 } | 130 } |
| 140 this->callbacks_.clear(); | 131 this->callbacks_.clear(); |
| 141 } | 132 } |
| 142 }; | 133 }; |
| 143 | 134 |
| 144 typedef CallbackQueue2<UsageCallback*, | 135 typedef CallbackQueue2<UsageCallback, |
| 145 StorageType, int64> UsageCallbackQueue; | 136 StorageType, int64> UsageCallbackQueue; |
| 146 typedef CallbackQueue3<GlobalUsageCallback*, | 137 typedef CallbackQueue3<GlobalUsageCallback, |
| 147 StorageType, int64, int64> GlobalUsageCallbackQueue; | 138 StorageType, int64, int64> GlobalUsageCallbackQueue; |
| 148 typedef CallbackQueue3<QuotaCallback*, | 139 typedef CallbackQueue3<QuotaCallback, |
| 149 QuotaStatusCode, | 140 QuotaStatusCode, |
| 150 StorageType, int64> QuotaCallbackQueue; | 141 StorageType, int64> QuotaCallbackQueue; |
| 151 | 142 |
| 152 template <typename CallbackType, typename CallbackQueueType, typename KEY> | 143 template <typename CallbackType, typename CallbackQueueType, typename KEY> |
| 153 class CallbackQueueMapBase { | 144 class CallbackQueueMapBase { |
| 154 public: | 145 public: |
| 155 typedef std::map<KEY, CallbackQueueType> CallbackMap; | 146 typedef std::map<KEY, CallbackQueueType> CallbackMap; |
| 156 typedef typename CallbackMap::iterator iterator; | 147 typedef typename CallbackMap::iterator iterator; |
| 157 | 148 |
| 158 bool Add(const KEY& key, CallbackType callback) { | 149 bool Add(const KEY& key, CallbackType callback) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 265 // from the map. | 256 // from the map. |
| 266 void Run(const KEY& key, ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) { | 257 void Run(const KEY& key, ARG1 arg1, ARG2 arg2, ARG3 arg3, ARG4 arg4) { |
| 267 if (!this->HasCallbacks(key)) | 258 if (!this->HasCallbacks(key)) |
| 268 return; | 259 return; |
| 269 Queue& queue = this->callback_map_[key]; | 260 Queue& queue = this->callback_map_[key]; |
| 270 queue.Run(arg1, arg2, arg3, arg4); | 261 queue.Run(arg1, arg2, arg3, arg4); |
| 271 this->callback_map_.erase(key); | 262 this->callback_map_.erase(key); |
| 272 } | 263 } |
| 273 }; | 264 }; |
| 274 | 265 |
| 275 typedef CallbackQueueMap3<HostUsageCallback*, std::string, | 266 typedef CallbackQueueMap3<HostUsageCallback, std::string, |
| 276 const std::string&, | 267 const std::string&, |
| 277 StorageType, int64> HostUsageCallbackMap; | 268 StorageType, int64> HostUsageCallbackMap; |
| 278 typedef CallbackQueueMap4<HostQuotaCallback*, std::string, | 269 typedef CallbackQueueMap4<HostQuotaCallback, std::string, |
| 279 QuotaStatusCode, | 270 QuotaStatusCode, |
| 280 const std::string&, | 271 const std::string&, |
| 281 StorageType, int64> HostQuotaCallbackMap; | 272 StorageType, int64> HostQuotaCallbackMap; |
| 282 | 273 |
| 283 } // namespace quota | 274 } // namespace quota |
| 284 | 275 |
| 285 #endif // WEBKIT_QUOTA_QUOTA_TYPES_H_ | 276 #endif // WEBKIT_QUOTA_QUOTA_TYPES_H_ |
| OLD | NEW |