| 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/usage_tracker.h" | 5 #include "webkit/quota/usage_tracker.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> |
| 11 | 12 |
| 13 #include "base/bind.h" |
| 12 #include "base/message_loop_proxy.h" | 14 #include "base/message_loop_proxy.h" |
| 13 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
| 14 #include "net/base/net_util.h" | 16 #include "net/base/net_util.h" |
| 15 | 17 |
| 16 namespace quota { | 18 namespace quota { |
| 17 | 19 |
| 18 namespace { | 20 namespace { |
| 19 bool SortByHost(const GURL& lhs, const GURL& rhs) { | 21 bool SortByHost(const GURL& lhs, const GURL& rhs) { |
| 20 return net::GetHostOrSpecFromURL(lhs) > net::GetHostOrSpecFromURL(rhs); | 22 return net::GetHostOrSpecFromURL(lhs) > net::GetHostOrSpecFromURL(rhs); |
| 21 } | 23 } |
| 22 } | 24 } |
| 23 | 25 |
| 24 // A task class for getting the total amount of data used for a collection of | 26 // A task class for getting the total amount of data used for a collection of |
| 25 // origins. This class is self-destructed. | 27 // origins. This class is self-destructed. |
| 26 class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask { | 28 class ClientUsageTracker::GatherUsageTaskBase : public QuotaTask { |
| 27 public: | 29 public: |
| 28 GatherUsageTaskBase( | 30 GatherUsageTaskBase( |
| 29 UsageTracker* tracker, | 31 UsageTracker* tracker, |
| 30 QuotaClient* client) | 32 QuotaClient* client) |
| 31 : QuotaTask(tracker), | 33 : QuotaTask(tracker), |
| 32 client_(client), | 34 client_(client), |
| 33 tracker_(tracker), | 35 tracker_(tracker), |
| 34 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 36 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 35 DCHECK(tracker_); | 37 DCHECK(tracker_); |
| 36 DCHECK(client_); | 38 DCHECK(client_); |
| 37 client_tracker_ = tracker_->GetClientTracker(client_->id()); | 39 client_tracker_ = tracker_->GetClientTracker(client_->id()); |
| 38 DCHECK(client_tracker_); | 40 DCHECK(client_tracker_); |
| 39 } | 41 } |
| 40 virtual ~GatherUsageTaskBase() {} | 42 virtual ~GatherUsageTaskBase() {} |
| 41 | 43 |
| 42 // Get total usage for the given |origins|. | 44 // Get total usage for the given |origins|. |
| 43 void GetUsageForOrigins(const std::set<GURL>& origins, StorageType type) { | 45 void GetUsageForOrigins(const std::set<GURL>& origins, StorageType type) { |
| 44 DCHECK(original_message_loop()->BelongsToCurrentThread()); | 46 DCHECK(original_message_loop()->BelongsToCurrentThread()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 68 // the completion callback immediately. | 70 // the completion callback immediately. |
| 69 for (std::vector<GURL>::const_iterator iter = origins_to_gather.begin(); | 71 for (std::vector<GURL>::const_iterator iter = origins_to_gather.begin(); |
| 70 iter != origins_to_gather.end(); iter++) | 72 iter != origins_to_gather.end(); iter++) |
| 71 pending_origins_.push_back(*iter); | 73 pending_origins_.push_back(*iter); |
| 72 | 74 |
| 73 for (std::vector<GURL>::const_iterator iter = origins_to_gather.begin(); | 75 for (std::vector<GURL>::const_iterator iter = origins_to_gather.begin(); |
| 74 iter != origins_to_gather.end(); iter++) | 76 iter != origins_to_gather.end(); iter++) |
| 75 client_->GetOriginUsage( | 77 client_->GetOriginUsage( |
| 76 *iter, | 78 *iter, |
| 77 tracker_->type(), | 79 tracker_->type(), |
| 78 callback_factory_.NewCallback(&GatherUsageTaskBase::DidGetUsage)); | 80 base::Bind(&GatherUsageTaskBase::DidGetUsage, |
| 81 weak_factory_.GetWeakPtr())); |
| 79 } | 82 } |
| 80 | 83 |
| 81 protected: | 84 protected: |
| 82 virtual void Aborted() OVERRIDE { | 85 virtual void Aborted() OVERRIDE { |
| 83 DeleteSoon(); | 86 DeleteSoon(); |
| 84 } | 87 } |
| 85 | 88 |
| 86 UsageTracker* tracker() const { return tracker_; } | 89 UsageTracker* tracker() const { return tracker_; } |
| 87 ClientUsageTracker* client_tracker() const { return client_tracker_; } | 90 ClientUsageTracker* client_tracker() const { return client_tracker_; } |
| 88 | 91 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 114 CallCompleted(); | 117 CallCompleted(); |
| 115 DeleteSoon(); | 118 DeleteSoon(); |
| 116 } | 119 } |
| 117 } | 120 } |
| 118 | 121 |
| 119 QuotaClient* client_; | 122 QuotaClient* client_; |
| 120 UsageTracker* tracker_; | 123 UsageTracker* tracker_; |
| 121 ClientUsageTracker* client_tracker_; | 124 ClientUsageTracker* client_tracker_; |
| 122 std::deque<GURL> pending_origins_; | 125 std::deque<GURL> pending_origins_; |
| 123 std::map<GURL, int64> origin_usage_map_; | 126 std::map<GURL, int64> origin_usage_map_; |
| 124 base::ScopedCallbackFactory<GatherUsageTaskBase> callback_factory_; | 127 base::WeakPtrFactory<GatherUsageTaskBase> weak_factory_; |
| 125 | 128 |
| 126 DISALLOW_COPY_AND_ASSIGN(GatherUsageTaskBase); | 129 DISALLOW_COPY_AND_ASSIGN(GatherUsageTaskBase); |
| 127 }; | 130 }; |
| 128 | 131 |
| 129 // A task class for getting the total amount of data used for a given storage | 132 // A task class for getting the total amount of data used for a given storage |
| 130 // type. This class is self-destructed. | 133 // type. This class is self-destructed. |
| 131 class ClientUsageTracker::GatherGlobalUsageTask | 134 class ClientUsageTracker::GatherGlobalUsageTask |
| 132 : public GatherUsageTaskBase { | 135 : public GatherUsageTaskBase { |
| 133 public: | 136 public: |
| 134 GatherGlobalUsageTask( | 137 GatherGlobalUsageTask( |
| 135 UsageTracker* tracker, | 138 UsageTracker* tracker, |
| 136 QuotaClient* client) | 139 QuotaClient* client) |
| 137 : GatherUsageTaskBase(tracker, client), | 140 : GatherUsageTaskBase(tracker, client), |
| 138 client_(client), | 141 client_(client), |
| 139 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 142 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 140 DCHECK(tracker); | 143 DCHECK(tracker); |
| 141 DCHECK(client); | 144 DCHECK(client); |
| 142 } | 145 } |
| 143 virtual ~GatherGlobalUsageTask() {} | 146 virtual ~GatherGlobalUsageTask() {} |
| 144 | 147 |
| 145 protected: | 148 protected: |
| 146 virtual void Run() OVERRIDE { | 149 virtual void Run() OVERRIDE { |
| 147 client_->GetOriginsForType(tracker()->type(), | 150 client_->GetOriginsForType(tracker()->type(), |
| 148 callback_factory_.NewCallback( | 151 base::Bind(&GatherUsageTaskBase::GetUsageForOrigins, |
| 149 &GatherUsageTaskBase::GetUsageForOrigins)); | 152 weak_factory_.GetWeakPtr())); |
| 150 } | 153 } |
| 151 | 154 |
| 152 virtual void Completed() OVERRIDE { | 155 virtual void Completed() OVERRIDE { |
| 153 client_tracker()->GatherGlobalUsageComplete(); | 156 client_tracker()->GatherGlobalUsageComplete(); |
| 154 } | 157 } |
| 155 | 158 |
| 156 private: | 159 private: |
| 157 QuotaClient* client_; | 160 QuotaClient* client_; |
| 158 base::ScopedCallbackFactory<GatherUsageTaskBase> callback_factory_; | 161 base::WeakPtrFactory<GatherUsageTaskBase> weak_factory_; |
| 159 | 162 |
| 160 DISALLOW_COPY_AND_ASSIGN(GatherGlobalUsageTask); | 163 DISALLOW_COPY_AND_ASSIGN(GatherGlobalUsageTask); |
| 161 }; | 164 }; |
| 162 | 165 |
| 163 // A task class for getting the total amount of data used for a given host. | 166 // A task class for getting the total amount of data used for a given host. |
| 164 // This class is self-destructed. | 167 // This class is self-destructed. |
| 165 class ClientUsageTracker::GatherHostUsageTask | 168 class ClientUsageTracker::GatherHostUsageTask |
| 166 : public GatherUsageTaskBase { | 169 : public GatherUsageTaskBase { |
| 167 public: | 170 public: |
| 168 GatherHostUsageTask( | 171 GatherHostUsageTask( |
| 169 UsageTracker* tracker, | 172 UsageTracker* tracker, |
| 170 QuotaClient* client, | 173 QuotaClient* client, |
| 171 const std::string& host) | 174 const std::string& host) |
| 172 : GatherUsageTaskBase(tracker, client), | 175 : GatherUsageTaskBase(tracker, client), |
| 173 client_(client), | 176 client_(client), |
| 174 host_(host), | 177 host_(host), |
| 175 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 178 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 176 DCHECK(client_); | 179 DCHECK(client_); |
| 177 } | 180 } |
| 178 virtual ~GatherHostUsageTask() {} | 181 virtual ~GatherHostUsageTask() {} |
| 179 | 182 |
| 180 protected: | 183 protected: |
| 181 virtual void Run() OVERRIDE { | 184 virtual void Run() OVERRIDE { |
| 182 client_->GetOriginsForHost(tracker()->type(), host_, | 185 client_->GetOriginsForHost(tracker()->type(), host_, |
| 183 callback_factory_.NewCallback( | 186 base::Bind(&GatherUsageTaskBase::GetUsageForOrigins, |
| 184 &GatherUsageTaskBase::GetUsageForOrigins)); | 187 weak_factory_.GetWeakPtr())); |
| 185 } | 188 } |
| 186 | 189 |
| 187 virtual void Completed() OVERRIDE { | 190 virtual void Completed() OVERRIDE { |
| 188 client_tracker()->GatherHostUsageComplete(host_); | 191 client_tracker()->GatherHostUsageComplete(host_); |
| 189 } | 192 } |
| 190 | 193 |
| 191 private: | 194 private: |
| 192 QuotaClient* client_; | 195 QuotaClient* client_; |
| 193 std::string host_; | 196 std::string host_; |
| 194 base::ScopedCallbackFactory<GatherUsageTaskBase> callback_factory_; | 197 base::WeakPtrFactory<GatherUsageTaskBase> weak_factory_; |
| 195 | 198 |
| 196 DISALLOW_COPY_AND_ASSIGN(GatherHostUsageTask); | 199 DISALLOW_COPY_AND_ASSIGN(GatherHostUsageTask); |
| 197 }; | 200 }; |
| 198 | 201 |
| 199 // UsageTracker ---------------------------------------------------------- | 202 // UsageTracker ---------------------------------------------------------- |
| 200 | 203 |
| 201 UsageTracker::UsageTracker(const QuotaClientList& clients, StorageType type, | 204 UsageTracker::UsageTracker(const QuotaClientList& clients, StorageType type, |
| 202 SpecialStoragePolicy* special_storage_policy) | 205 SpecialStoragePolicy* special_storage_policy) |
| 203 : type_(type), | 206 : type_(type), |
| 204 callback_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 207 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
| 205 for (QuotaClientList::const_iterator iter = clients.begin(); | 208 for (QuotaClientList::const_iterator iter = clients.begin(); |
| 206 iter != clients.end(); | 209 iter != clients.end(); |
| 207 ++iter) { | 210 ++iter) { |
| 208 client_tracker_map_.insert(std::make_pair( | 211 client_tracker_map_.insert(std::make_pair( |
| 209 (*iter)->id(), | 212 (*iter)->id(), |
| 210 new ClientUsageTracker(this, *iter, type, special_storage_policy))); | 213 new ClientUsageTracker(this, *iter, type, special_storage_policy))); |
| 211 } | 214 } |
| 212 } | 215 } |
| 213 | 216 |
| 214 UsageTracker::~UsageTracker() { | 217 UsageTracker::~UsageTracker() { |
| 215 STLDeleteValues(&client_tracker_map_); | 218 STLDeleteValues(&client_tracker_map_); |
| 216 } | 219 } |
| 217 | 220 |
| 218 ClientUsageTracker* UsageTracker::GetClientTracker(QuotaClient::ID client_id) { | 221 ClientUsageTracker* UsageTracker::GetClientTracker(QuotaClient::ID client_id) { |
| 219 ClientTrackerMap::iterator found = client_tracker_map_.find(client_id); | 222 ClientTrackerMap::iterator found = client_tracker_map_.find(client_id); |
| 220 if (found != client_tracker_map_.end()) | 223 if (found != client_tracker_map_.end()) |
| 221 return found->second; | 224 return found->second; |
| 222 return NULL; | 225 return NULL; |
| 223 } | 226 } |
| 224 | 227 |
| 225 void UsageTracker::GetGlobalUsage(GlobalUsageCallback* callback) { | 228 void UsageTracker::GetGlobalUsage(GlobalUsageCallback callback) { |
| 226 if (client_tracker_map_.size() == 0) { | 229 if (client_tracker_map_.size() == 0) { |
| 227 // No clients registered. | 230 // No clients registered. |
| 228 callback->Run(type_, 0, 0); | 231 callback.Run(type_, 0, 0); |
| 229 delete callback; | |
| 230 return; | 232 return; |
| 231 } | 233 } |
| 232 if (global_usage_callbacks_.Add(callback)) { | 234 if (global_usage_callbacks_.Add(callback)) { |
| 233 // This is the first call. Asks each ClientUsageTracker to collect | 235 // This is the first call. Asks each ClientUsageTracker to collect |
| 234 // usage information. | 236 // usage information. |
| 235 global_usage_.pending_clients = client_tracker_map_.size(); | 237 global_usage_.pending_clients = client_tracker_map_.size(); |
| 236 global_usage_.usage = 0; | 238 global_usage_.usage = 0; |
| 237 global_usage_.unlimited_usage = 0; | 239 global_usage_.unlimited_usage = 0; |
| 238 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); | 240 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); |
| 239 iter != client_tracker_map_.end(); | 241 iter != client_tracker_map_.end(); |
| 240 ++iter) { | 242 ++iter) { |
| 241 iter->second->GetGlobalUsage(callback_factory_.NewCallback( | 243 iter->second->GetGlobalUsage( |
| 242 &UsageTracker::DidGetClientGlobalUsage)); | 244 base::Bind(&UsageTracker::DidGetClientGlobalUsage, |
| 245 weak_factory_.GetWeakPtr())); |
| 243 } | 246 } |
| 244 } | 247 } |
| 245 } | 248 } |
| 246 | 249 |
| 247 void UsageTracker::GetHostUsage( | 250 void UsageTracker::GetHostUsage( |
| 248 const std::string& host, HostUsageCallback* callback) { | 251 const std::string& host, HostUsageCallback callback) { |
| 249 if (client_tracker_map_.size() == 0) { | 252 if (client_tracker_map_.size() == 0) { |
| 250 // No clients registered. | 253 // No clients registered. |
| 251 callback->Run(host, type_, 0); | 254 callback.Run(host, type_, 0); |
| 252 delete callback; | |
| 253 return; | 255 return; |
| 254 } | 256 } |
| 255 if (host_usage_callbacks_.Add(host, callback)) { | 257 if (host_usage_callbacks_.Add(host, callback)) { |
| 256 // This is the first call for the given host. | 258 // This is the first call for the given host. |
| 257 DCHECK(outstanding_host_usage_.find(host) == outstanding_host_usage_.end()); | 259 DCHECK(outstanding_host_usage_.find(host) == outstanding_host_usage_.end()); |
| 258 outstanding_host_usage_[host].pending_clients = client_tracker_map_.size(); | 260 outstanding_host_usage_[host].pending_clients = client_tracker_map_.size(); |
| 259 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); | 261 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); |
| 260 iter != client_tracker_map_.end(); | 262 iter != client_tracker_map_.end(); |
| 261 ++iter) { | 263 ++iter) { |
| 262 iter->second->GetHostUsage(host, callback_factory_.NewCallback( | 264 iter->second->GetHostUsage(host, |
| 263 &UsageTracker::DidGetClientHostUsage)); | 265 base::Bind(&UsageTracker::DidGetClientHostUsage, |
| 266 weak_factory_.GetWeakPtr())); |
| 264 } | 267 } |
| 265 } | 268 } |
| 266 } | 269 } |
| 267 | 270 |
| 268 void UsageTracker::UpdateUsageCache( | 271 void UsageTracker::UpdateUsageCache( |
| 269 QuotaClient::ID client_id, const GURL& origin, int64 delta) { | 272 QuotaClient::ID client_id, const GURL& origin, int64 delta) { |
| 270 ClientUsageTracker* client_tracker = GetClientTracker(client_id); | 273 ClientUsageTracker* client_tracker = GetClientTracker(client_id); |
| 271 DCHECK(client_tracker); | 274 DCHECK(client_tracker); |
| 272 client_tracker->UpdateUsageCache(origin, delta); | 275 client_tracker->UpdateUsageCache(origin, delta); |
| 273 } | 276 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 DCHECK(client_); | 343 DCHECK(client_); |
| 341 if (special_storage_policy_) | 344 if (special_storage_policy_) |
| 342 special_storage_policy_->AddObserver(this); | 345 special_storage_policy_->AddObserver(this); |
| 343 } | 346 } |
| 344 | 347 |
| 345 ClientUsageTracker::~ClientUsageTracker() { | 348 ClientUsageTracker::~ClientUsageTracker() { |
| 346 if (special_storage_policy_) | 349 if (special_storage_policy_) |
| 347 special_storage_policy_->RemoveObserver(this); | 350 special_storage_policy_->RemoveObserver(this); |
| 348 } | 351 } |
| 349 | 352 |
| 350 void ClientUsageTracker::GetGlobalUsage(GlobalUsageCallback* callback) { | 353 void ClientUsageTracker::GetGlobalUsage(GlobalUsageCallback callback) { |
| 351 if (global_usage_retrieved_) { | 354 if (global_usage_retrieved_) { |
| 352 callback->Run(type_, global_usage_, GetCachedGlobalUnlimitedUsage()); | 355 callback.Run(type_, global_usage_, GetCachedGlobalUnlimitedUsage()); |
| 353 delete callback; | |
| 354 return; | 356 return; |
| 355 } | 357 } |
| 356 DCHECK(!global_usage_callback_.HasCallbacks()); | 358 DCHECK(!global_usage_callback_.HasCallbacks()); |
| 357 global_usage_callback_.Add(callback); | 359 global_usage_callback_.Add(callback); |
| 358 global_usage_task_ = new GatherGlobalUsageTask(tracker_, client_); | 360 global_usage_task_ = new GatherGlobalUsageTask(tracker_, client_); |
| 359 global_usage_task_->Start(); | 361 global_usage_task_->Start(); |
| 360 } | 362 } |
| 361 | 363 |
| 362 void ClientUsageTracker::GetHostUsage( | 364 void ClientUsageTracker::GetHostUsage( |
| 363 const std::string& host, HostUsageCallback* callback) { | 365 const std::string& host, HostUsageCallback callback) { |
| 364 HostSet::const_iterator found = cached_hosts_.find(host); | 366 HostSet::const_iterator found = cached_hosts_.find(host); |
| 365 if (found != cached_hosts_.end()) { | 367 if (found != cached_hosts_.end()) { |
| 366 // TODO(kinuko): Drop host_usage_map_ cache periodically. | 368 // TODO(kinuko): Drop host_usage_map_ cache periodically. |
| 367 callback->Run(host, type_, GetCachedHostUsage(host)); | 369 callback.Run(host, type_, GetCachedHostUsage(host)); |
| 368 delete callback; | |
| 369 return; | 370 return; |
| 370 } | 371 } |
| 371 if (!host_usage_callbacks_.Add(host, callback) || global_usage_task_) | 372 if (!host_usage_callbacks_.Add(host, callback) || global_usage_task_) |
| 372 return; | 373 return; |
| 373 GatherHostUsageTask* task = new GatherHostUsageTask(tracker_, client_, host); | 374 GatherHostUsageTask* task = new GatherHostUsageTask(tracker_, client_, host); |
| 374 host_usage_tasks_[host] = task; | 375 host_usage_tasks_[host] = task; |
| 375 task->Start(); | 376 task->Start(); |
| 376 } | 377 } |
| 377 | 378 |
| 378 void ClientUsageTracker::UpdateUsageCache( | 379 void ClientUsageTracker::UpdateUsageCache( |
| 379 const GURL& origin, int64 delta) { | 380 const GURL& origin, int64 delta) { |
| 380 std::string host = net::GetHostOrSpecFromURL(origin); | 381 std::string host = net::GetHostOrSpecFromURL(origin); |
| 381 if (cached_hosts_.find(host) != cached_hosts_.end()) { | 382 if (cached_hosts_.find(host) != cached_hosts_.end()) { |
| 382 cached_usage_[host][origin] += delta; | 383 cached_usage_[host][origin] += delta; |
| 383 global_usage_ += delta; | 384 global_usage_ += delta; |
| 384 if (global_unlimited_usage_is_valid_ && IsStorageUnlimited(origin)) | 385 if (global_unlimited_usage_is_valid_ && IsStorageUnlimited(origin)) |
| 385 global_unlimited_usage_ += delta; | 386 global_unlimited_usage_ += delta; |
| 386 DCHECK_GE(cached_usage_[host][origin], 0); | 387 DCHECK_GE(cached_usage_[host][origin], 0); |
| 387 DCHECK_GE(global_usage_, 0); | 388 DCHECK_GE(global_usage_, 0); |
| 388 return; | 389 return; |
| 389 } | 390 } |
| 390 | 391 |
| 391 // We don't know about this host yet, so populate our cache for it. | 392 // We don't know about this host yet, so populate our cache for it. |
| 392 GetHostUsage(host, | 393 GetHostUsage(host, |
| 393 NewCallback(this, &ClientUsageTracker::NoopHostUsageCallback)); | 394 base::Bind(&ClientUsageTracker::NoopHostUsageCallback, |
| 395 base::Unretained(this))); |
| 394 } | 396 } |
| 395 | 397 |
| 396 void ClientUsageTracker::GetCachedOrigins(std::set<GURL>* origins) const { | 398 void ClientUsageTracker::GetCachedOrigins(std::set<GURL>* origins) const { |
| 397 DCHECK(origins); | 399 DCHECK(origins); |
| 398 for (HostUsageMap::const_iterator host_iter = cached_usage_.begin(); | 400 for (HostUsageMap::const_iterator host_iter = cached_usage_.begin(); |
| 399 host_iter != cached_usage_.end(); host_iter++) { | 401 host_iter != cached_usage_.end(); host_iter++) { |
| 400 const UsageMap& origin_map = host_iter->second; | 402 const UsageMap& origin_map = host_iter->second; |
| 401 for (UsageMap::const_iterator origin_iter = origin_map.begin(); | 403 for (UsageMap::const_iterator origin_iter = origin_map.begin(); |
| 402 origin_iter != origin_map.end(); origin_iter++) { | 404 origin_iter != origin_map.end(); origin_iter++) { |
| 403 origins->insert(origin_iter->first); | 405 origins->insert(origin_iter->first); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 void ClientUsageTracker::NoopHostUsageCallback( | 490 void ClientUsageTracker::NoopHostUsageCallback( |
| 489 const std::string& host, StorageType type, int64 usage) { | 491 const std::string& host, StorageType type, int64 usage) { |
| 490 } | 492 } |
| 491 | 493 |
| 492 bool ClientUsageTracker::IsStorageUnlimited(const GURL& origin) const { | 494 bool ClientUsageTracker::IsStorageUnlimited(const GURL& origin) const { |
| 493 return special_storage_policy_.get() && | 495 return special_storage_policy_.get() && |
| 494 special_storage_policy_->IsStorageUnlimited(origin); | 496 special_storage_policy_->IsStorageUnlimited(origin); |
| 495 } | 497 } |
| 496 | 498 |
| 497 } // namespace quota | 499 } // namespace quota |
| OLD | NEW |