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 #include "webkit/quota/mock_storage_client.h" | 5 #include "webkit/quota/mock_storage_client.h" |
6 | 6 |
7 #include "base/atomic_sequence_num.h" | 7 #include "base/atomic_sequence_num.h" |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 : quota_manager_proxy_(quota_manager_proxy), | 48 : quota_manager_proxy_(quota_manager_proxy), |
49 id_(MockStorageClientIDSequencer::GetInstance()->NextMockID()), | 49 id_(MockStorageClientIDSequencer::GetInstance()->NextMockID()), |
50 mock_time_counter_(0), | 50 mock_time_counter_(0), |
51 runnable_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 51 runnable_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
52 for (size_t i = 0; i < mock_data_size; ++i) { | 52 for (size_t i = 0; i < mock_data_size; ++i) { |
53 origin_data_[make_pair(GURL(mock_data[i].origin), mock_data[i].type)] = | 53 origin_data_[make_pair(GURL(mock_data[i].origin), mock_data[i].type)] = |
54 mock_data[i].usage; | 54 mock_data[i].usage; |
55 } | 55 } |
56 } | 56 } |
57 | 57 |
58 MockStorageClient::~MockStorageClient() { | 58 MockStorageClient::~MockStorageClient() {} |
59 STLDeleteContainerPointers(usage_callbacks_.begin(), usage_callbacks_.end()); | |
60 STLDeleteContainerPointers( | |
61 origins_callbacks_.begin(), origins_callbacks_.end()); | |
62 STLDeleteContainerPointers( | |
63 deletion_callbacks_.begin(), deletion_callbacks_.end()); | |
64 } | |
65 | 59 |
66 void MockStorageClient::AddOriginAndNotify( | 60 void MockStorageClient::AddOriginAndNotify( |
67 const GURL& origin_url, StorageType type, int64 size) { | 61 const GURL& origin_url, StorageType type, int64 size) { |
68 DCHECK(origin_data_.find(make_pair(origin_url, type)) == origin_data_.end()); | 62 DCHECK(origin_data_.find(make_pair(origin_url, type)) == origin_data_.end()); |
69 DCHECK_GE(size, 0); | 63 DCHECK_GE(size, 0); |
70 origin_data_[make_pair(origin_url, type)] = size; | 64 origin_data_[make_pair(origin_url, type)] = size; |
71 quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal( | 65 quota_manager_proxy_->quota_manager()->NotifyStorageModifiedInternal( |
72 id(), origin_url, type, size, IncrementMockTime()); | 66 id(), origin_url, type, size, IncrementMockTime()); |
73 } | 67 } |
74 | 68 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 QuotaClient::ID MockStorageClient::id() const { | 100 QuotaClient::ID MockStorageClient::id() const { |
107 return id_; | 101 return id_; |
108 } | 102 } |
109 | 103 |
110 void MockStorageClient::OnQuotaManagerDestroyed() { | 104 void MockStorageClient::OnQuotaManagerDestroyed() { |
111 delete this; | 105 delete this; |
112 } | 106 } |
113 | 107 |
114 void MockStorageClient::GetOriginUsage(const GURL& origin_url, | 108 void MockStorageClient::GetOriginUsage(const GURL& origin_url, |
115 StorageType type, | 109 StorageType type, |
116 GetUsageCallback* callback) { | 110 const GetUsageCallback& callback) { |
117 usage_callbacks_.insert(callback); | |
118 base::MessageLoopProxy::current()->PostTask( | 111 base::MessageLoopProxy::current()->PostTask( |
119 FROM_HERE, runnable_factory_.NewRunnableMethod( | 112 FROM_HERE, runnable_factory_.NewRunnableMethod( |
120 &MockStorageClient::RunGetOriginUsage, | 113 &MockStorageClient::RunGetOriginUsage, |
121 origin_url, type, callback)); | 114 origin_url, type, callback)); |
122 } | 115 } |
123 | 116 |
124 void MockStorageClient::GetOriginsForType( | 117 void MockStorageClient::GetOriginsForType( |
125 StorageType type, GetOriginsCallback* callback) { | 118 StorageType type, const GetOriginsCallback& callback) { |
126 origins_callbacks_.insert(callback); | |
127 base::MessageLoopProxy::current()->PostTask( | 119 base::MessageLoopProxy::current()->PostTask( |
128 FROM_HERE, runnable_factory_.NewRunnableMethod( | 120 FROM_HERE, runnable_factory_.NewRunnableMethod( |
129 &MockStorageClient::RunGetOriginsForType, | 121 &MockStorageClient::RunGetOriginsForType, |
130 type, callback)); | 122 type, callback)); |
131 } | 123 } |
132 | 124 |
133 void MockStorageClient::GetOriginsForHost( | 125 void MockStorageClient::GetOriginsForHost( |
134 StorageType type, const std::string& host, | 126 StorageType type, const std::string& host, |
135 GetOriginsCallback* callback) { | 127 const GetOriginsCallback& callback) { |
136 origins_callbacks_.insert(callback); | |
137 base::MessageLoopProxy::current()->PostTask( | 128 base::MessageLoopProxy::current()->PostTask( |
138 FROM_HERE, runnable_factory_.NewRunnableMethod( | 129 FROM_HERE, runnable_factory_.NewRunnableMethod( |
139 &MockStorageClient::RunGetOriginsForHost, | 130 &MockStorageClient::RunGetOriginsForHost, |
140 type, host, callback)); | 131 type, host, callback)); |
141 } | 132 } |
142 | 133 |
143 void MockStorageClient::DeleteOriginData( | 134 void MockStorageClient::DeleteOriginData( |
144 const GURL& origin, StorageType type, | 135 const GURL& origin, StorageType type, |
145 DeletionCallback* callback) { | 136 const DeletionCallback& callback) { |
146 deletion_callbacks_.insert(callback); | |
147 base::MessageLoopProxy::current()->PostTask( | 137 base::MessageLoopProxy::current()->PostTask( |
148 FROM_HERE, runnable_factory_.NewRunnableMethod( | 138 FROM_HERE, runnable_factory_.NewRunnableMethod( |
149 &MockStorageClient::RunDeleteOriginData, | 139 &MockStorageClient::RunDeleteOriginData, |
150 origin, type, callback)); | 140 origin, type, callback)); |
151 } | 141 } |
152 | 142 |
153 void MockStorageClient::RunGetOriginUsage( | 143 void MockStorageClient::RunGetOriginUsage( |
154 const GURL& origin_url, StorageType type, GetUsageCallback* callback_ptr) { | 144 const GURL& origin_url, StorageType type, |
155 usage_callbacks_.erase(callback_ptr); | 145 const GetUsageCallback& callback) { |
156 scoped_ptr<GetUsageCallback> callback(callback_ptr); | |
157 OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type)); | 146 OriginDataMap::iterator find = origin_data_.find(make_pair(origin_url, type)); |
158 if (find == origin_data_.end()) { | 147 if (find == origin_data_.end()) { |
159 callback->Run(0); | 148 callback.Run(0); |
160 } else { | 149 } else { |
161 callback->Run(find->second); | 150 callback.Run(find->second); |
162 } | 151 } |
163 } | 152 } |
164 | 153 |
165 void MockStorageClient::RunGetOriginsForType( | 154 void MockStorageClient::RunGetOriginsForType( |
166 StorageType type, GetOriginsCallback* callback_ptr) { | 155 StorageType type, const GetOriginsCallback& callback) { |
167 scoped_ptr<GetOriginsCallback> callback(callback_ptr); | |
168 origins_callbacks_.erase(callback_ptr); | |
169 std::set<GURL> origins; | 156 std::set<GURL> origins; |
170 for (OriginDataMap::iterator iter = origin_data_.begin(); | 157 for (OriginDataMap::iterator iter = origin_data_.begin(); |
171 iter != origin_data_.end(); ++iter) { | 158 iter != origin_data_.end(); ++iter) { |
172 if (type == iter->first.second) | 159 if (type == iter->first.second) |
173 origins.insert(iter->first.first); | 160 origins.insert(iter->first.first); |
174 } | 161 } |
175 callback->Run(origins, type); | 162 callback.Run(origins, type); |
176 } | 163 } |
177 | 164 |
178 void MockStorageClient::RunGetOriginsForHost( | 165 void MockStorageClient::RunGetOriginsForHost( |
179 StorageType type, const std::string& host, | 166 StorageType type, const std::string& host, |
180 GetOriginsCallback* callback_ptr) { | 167 const GetOriginsCallback& callback) { |
181 scoped_ptr<GetOriginsCallback> callback(callback_ptr); | |
182 origins_callbacks_.erase(callback_ptr); | |
183 std::set<GURL> origins; | 168 std::set<GURL> origins; |
184 for (OriginDataMap::iterator iter = origin_data_.begin(); | 169 for (OriginDataMap::iterator iter = origin_data_.begin(); |
185 iter != origin_data_.end(); ++iter) { | 170 iter != origin_data_.end(); ++iter) { |
186 std::string host_or_spec = net::GetHostOrSpecFromURL(iter->first.first); | 171 std::string host_or_spec = net::GetHostOrSpecFromURL(iter->first.first); |
187 if (type == iter->first.second && host == host_or_spec) | 172 if (type == iter->first.second && host == host_or_spec) |
188 origins.insert(iter->first.first); | 173 origins.insert(iter->first.first); |
189 } | 174 } |
190 callback->Run(origins, type); | 175 callback.Run(origins, type); |
191 } | 176 } |
192 | 177 |
193 void MockStorageClient::RunDeleteOriginData( | 178 void MockStorageClient::RunDeleteOriginData( |
194 const GURL& origin_url, | 179 const GURL& origin_url, |
195 StorageType type, | 180 StorageType type, |
196 DeletionCallback* callback_ptr) { | 181 const DeletionCallback& callback) { |
197 scoped_ptr<DeletionCallback> callback(callback_ptr); | |
198 ErrorOriginSet::iterator itr_error = | 182 ErrorOriginSet::iterator itr_error = |
199 error_origins_.find(make_pair(origin_url, type)); | 183 error_origins_.find(make_pair(origin_url, type)); |
200 if (itr_error != error_origins_.end()) { | 184 if (itr_error != error_origins_.end()) { |
201 deletion_callbacks_.erase(callback_ptr); | 185 callback.Run(kQuotaErrorInvalidModification); |
202 callback->Run(kQuotaErrorInvalidModification); | |
203 return; | 186 return; |
204 } | 187 } |
205 | 188 |
206 OriginDataMap::iterator itr = | 189 OriginDataMap::iterator itr = |
207 origin_data_.find(make_pair(origin_url, type)); | 190 origin_data_.find(make_pair(origin_url, type)); |
208 if (itr != origin_data_.end()) { | 191 if (itr != origin_data_.end()) { |
209 int64 delta = itr->second; | 192 int64 delta = itr->second; |
210 quota_manager_proxy_-> | 193 quota_manager_proxy_-> |
211 NotifyStorageModified(id(), origin_url, type, -delta); | 194 NotifyStorageModified(id(), origin_url, type, -delta); |
212 origin_data_.erase(itr); | 195 origin_data_.erase(itr); |
213 } | 196 } |
214 | 197 |
215 deletion_callbacks_.erase(callback_ptr); | 198 callback.Run(kQuotaStatusOk); |
216 callback->Run(kQuotaStatusOk); | |
217 } | 199 } |
218 | 200 |
219 } // namespace quota | 201 } // namespace quota |
OLD | NEW |