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