Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Side by Side Diff: webkit/quota/usage_tracker.cc

Issue 15695003: [Quota][Clean up] Drop StorageType in GlobalUsageCallback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: testfix Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/quota/usage_tracker.h ('k') | webkit/quota/usage_tracker_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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>
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 ClientUsageTracker* UsageTracker::GetClientTracker(QuotaClient::ID client_id) { 247 ClientUsageTracker* UsageTracker::GetClientTracker(QuotaClient::ID client_id) {
248 ClientTrackerMap::iterator found = client_tracker_map_.find(client_id); 248 ClientTrackerMap::iterator found = client_tracker_map_.find(client_id);
249 if (found != client_tracker_map_.end()) 249 if (found != client_tracker_map_.end())
250 return found->second; 250 return found->second;
251 return NULL; 251 return NULL;
252 } 252 }
253 253
254 void UsageTracker::GetGlobalUsage(const GlobalUsageCallback& callback) { 254 void UsageTracker::GetGlobalUsage(const GlobalUsageCallback& callback) {
255 if (client_tracker_map_.size() == 0) { 255 if (client_tracker_map_.size() == 0) {
256 // No clients registered. 256 // No clients registered.
257 callback.Run(type_, 0, 0); 257 callback.Run(0, 0);
258 return; 258 return;
259 } 259 }
260 if (global_usage_callbacks_.Add(callback)) { 260 if (global_usage_callbacks_.Add(callback)) {
261 // This is the first call. Asks each ClientUsageTracker to collect 261 // This is the first call. Asks each ClientUsageTracker to collect
262 // usage information. 262 // usage information.
263 global_usage_.pending_clients = client_tracker_map_.size(); 263 global_usage_.pending_clients = client_tracker_map_.size();
264 global_usage_.usage = 0; 264 global_usage_.usage = 0;
265 global_usage_.unlimited_usage = 0; 265 global_usage_.unlimited_usage = 0;
266 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); 266 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin();
267 iter != client_tracker_map_.end(); 267 iter != client_tracker_map_.end();
(...skipping 14 matching lines...) Expand all
282 } 282 }
283 if (host_usage_callbacks_.Add(host, callback)) { 283 if (host_usage_callbacks_.Add(host, callback)) {
284 // This is the first call for the given host. 284 // This is the first call for the given host.
285 DCHECK(outstanding_host_usage_.find(host) == outstanding_host_usage_.end()); 285 DCHECK(outstanding_host_usage_.find(host) == outstanding_host_usage_.end());
286 outstanding_host_usage_[host].pending_clients = client_tracker_map_.size(); 286 outstanding_host_usage_[host].pending_clients = client_tracker_map_.size();
287 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin(); 287 for (ClientTrackerMap::iterator iter = client_tracker_map_.begin();
288 iter != client_tracker_map_.end(); 288 iter != client_tracker_map_.end();
289 ++iter) { 289 ++iter) {
290 iter->second->GetHostUsage(host, 290 iter->second->GetHostUsage(host,
291 base::Bind(&UsageTracker::DidGetClientHostUsage, 291 base::Bind(&UsageTracker::DidGetClientHostUsage,
292 weak_factory_.GetWeakPtr(), host, type_)); 292 weak_factory_.GetWeakPtr(), host));
293 } 293 }
294 } 294 }
295 } 295 }
296 296
297 void UsageTracker::UpdateUsageCache( 297 void UsageTracker::UpdateUsageCache(
298 QuotaClient::ID client_id, const GURL& origin, int64 delta) { 298 QuotaClient::ID client_id, const GURL& origin, int64 delta) {
299 ClientUsageTracker* client_tracker = GetClientTracker(client_id); 299 ClientUsageTracker* client_tracker = GetClientTracker(client_id);
300 DCHECK(client_tracker); 300 DCHECK(client_tracker);
301 client_tracker->UpdateUsageCache(origin, delta); 301 client_tracker->UpdateUsageCache(origin, delta);
302 } 302 }
(...skipping 19 matching lines...) Expand all
322 322
323 void UsageTracker::SetUsageCacheEnabled(QuotaClient::ID client_id, 323 void UsageTracker::SetUsageCacheEnabled(QuotaClient::ID client_id,
324 const GURL& origin, 324 const GURL& origin,
325 bool enabled) { 325 bool enabled) {
326 ClientUsageTracker* client_tracker = GetClientTracker(client_id); 326 ClientUsageTracker* client_tracker = GetClientTracker(client_id);
327 DCHECK(client_tracker); 327 DCHECK(client_tracker);
328 328
329 client_tracker->SetUsageCacheEnabled(origin, enabled); 329 client_tracker->SetUsageCacheEnabled(origin, enabled);
330 } 330 }
331 331
332 void UsageTracker::DidGetClientGlobalUsage(StorageType type, 332 void UsageTracker::DidGetClientGlobalUsage(int64 usage,
333 int64 usage,
334 int64 unlimited_usage) { 333 int64 unlimited_usage) {
335 DCHECK_EQ(type, type_);
336 global_usage_.usage += usage; 334 global_usage_.usage += usage;
337 global_usage_.unlimited_usage += unlimited_usage; 335 global_usage_.unlimited_usage += unlimited_usage;
338 if (--global_usage_.pending_clients == 0) { 336 if (--global_usage_.pending_clients == 0) {
339 // Defend against confusing inputs from clients. 337 // Defend against confusing inputs from clients.
340 if (global_usage_.usage < 0) 338 if (global_usage_.usage < 0)
341 global_usage_.usage = 0; 339 global_usage_.usage = 0;
342 // TODO(michaeln): The unlimited number is not trustworthy, it 340 // TODO(michaeln): The unlimited number is not trustworthy, it
343 // can get out of whack when apps are installed or uninstalled. 341 // can get out of whack when apps are installed or uninstalled.
344 if (global_usage_.unlimited_usage > global_usage_.usage) 342 if (global_usage_.unlimited_usage > global_usage_.usage)
345 global_usage_.unlimited_usage = global_usage_.usage; 343 global_usage_.unlimited_usage = global_usage_.usage;
346 else if (global_usage_.unlimited_usage < 0) 344 else if (global_usage_.unlimited_usage < 0)
347 global_usage_.unlimited_usage = 0; 345 global_usage_.unlimited_usage = 0;
348 346
349 // All the clients have returned their usage data. Dispatches the 347 // All the clients have returned their usage data. Dispatches the
350 // pending callbacks. 348 // pending callbacks.
351 global_usage_callbacks_.Run( 349 global_usage_callbacks_.Run(
352 MakeTuple(type, global_usage_.usage, 350 MakeTuple(global_usage_.usage, global_usage_.unlimited_usage));
353 global_usage_.unlimited_usage));
354 } 351 }
355 } 352 }
356 353
357 void UsageTracker::DidGetClientHostUsage(const std::string& host, 354 void UsageTracker::DidGetClientHostUsage(const std::string& host,
358 StorageType type,
359 int64 usage) { 355 int64 usage) {
360 DCHECK_EQ(type, type_);
361 TrackingInfo& info = outstanding_host_usage_[host]; 356 TrackingInfo& info = outstanding_host_usage_[host];
362 info.usage += usage; 357 info.usage += usage;
363 if (--info.pending_clients == 0) { 358 if (--info.pending_clients == 0) {
364 // Defend against confusing inputs from clients. 359 // Defend against confusing inputs from clients.
365 if (info.usage < 0) 360 if (info.usage < 0)
366 info.usage = 0; 361 info.usage = 0;
367 // All the clients have returned their usage data. Dispatches the 362 // All the clients have returned their usage data. Dispatches the
368 // pending callbacks. 363 // pending callbacks.
369 host_usage_callbacks_.Run(host, MakeTuple(info.usage)); 364 host_usage_callbacks_.Run(host, MakeTuple(info.usage));
370 outstanding_host_usage_.erase(host); 365 outstanding_host_usage_.erase(host);
(...skipping 19 matching lines...) Expand all
390 special_storage_policy_->AddObserver(this); 385 special_storage_policy_->AddObserver(this);
391 } 386 }
392 387
393 ClientUsageTracker::~ClientUsageTracker() { 388 ClientUsageTracker::~ClientUsageTracker() {
394 if (special_storage_policy_) 389 if (special_storage_policy_)
395 special_storage_policy_->RemoveObserver(this); 390 special_storage_policy_->RemoveObserver(this);
396 } 391 }
397 392
398 void ClientUsageTracker::GetGlobalUsage(const GlobalUsageCallback& callback) { 393 void ClientUsageTracker::GetGlobalUsage(const GlobalUsageCallback& callback) {
399 if (global_usage_retrieved_ && non_cached_origins_by_host_.empty()) { 394 if (global_usage_retrieved_ && non_cached_origins_by_host_.empty()) {
400 callback.Run(type_, global_usage_, GetCachedGlobalUnlimitedUsage()); 395 callback.Run(global_usage_, GetCachedGlobalUnlimitedUsage());
401 return; 396 return;
402 } 397 }
403 DCHECK(!global_usage_callback_.HasCallbacks()); 398 DCHECK(!global_usage_callback_.HasCallbacks());
404 global_usage_callback_.Add(callback); 399 global_usage_callback_.Add(callback);
405 global_usage_task_ = new GatherGlobalUsageTask(tracker_, client_); 400 global_usage_task_ = new GatherGlobalUsageTask(tracker_, client_);
406 global_usage_task_->Start(); 401 global_usage_task_->Start();
407 } 402 }
408 403
409 void ClientUsageTracker::GetHostUsage( 404 void ClientUsageTracker::GetHostUsage(
410 const std::string& host, const UsageCallback& callback) { 405 const std::string& host, const UsageCallback& callback) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 int64 global_usage, 543 int64 global_usage,
549 int64 non_cached_global_usage, 544 int64 non_cached_global_usage,
550 const std::map<std::string, int64>& non_cached_host_usage) { 545 const std::map<std::string, int64>& non_cached_host_usage) {
551 DCHECK(global_usage_task_ != NULL); 546 DCHECK(global_usage_task_ != NULL);
552 global_usage_task_ = NULL; 547 global_usage_task_ = NULL;
553 // TODO(kinuko): Record when it has retrieved the global usage. 548 // TODO(kinuko): Record when it has retrieved the global usage.
554 global_usage_retrieved_ = true; 549 global_usage_retrieved_ = true;
555 550
556 DCHECK(global_usage_callback_.HasCallbacks()); 551 DCHECK(global_usage_callback_.HasCallbacks());
557 global_usage_callback_.Run( 552 global_usage_callback_.Run(
558 MakeTuple(type_, global_usage, 553 MakeTuple(global_usage,
559 GetCachedGlobalUnlimitedUsage() + non_cached_global_usage)); 554 GetCachedGlobalUnlimitedUsage() + non_cached_global_usage));
560 555
561 for (HostUsageCallbackMap::iterator iter = host_usage_callbacks_.Begin(); 556 for (HostUsageCallbackMap::iterator iter = host_usage_callbacks_.Begin();
562 iter != host_usage_callbacks_.End(); ++iter) { 557 iter != host_usage_callbacks_.End(); ++iter) {
563 int64 host_usage = GetCachedHostUsage(iter->first); 558 int64 host_usage = GetCachedHostUsage(iter->first);
564 std::map<std::string, int64>::const_iterator found = 559 std::map<std::string, int64>::const_iterator found =
565 non_cached_host_usage.find(iter->first); 560 non_cached_host_usage.find(iter->first);
566 if (found != non_cached_host_usage.end()) 561 if (found != non_cached_host_usage.end())
567 host_usage += found->second; 562 host_usage += found->second;
568 iter->second.Run(MakeTuple(host_usage)); 563 iter->second.Run(MakeTuple(host_usage));
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 void ClientUsageTracker::NoopHostUsageCallback(int64 usage) {} 643 void ClientUsageTracker::NoopHostUsageCallback(int64 usage) {}
649 644
650 bool ClientUsageTracker::IsStorageUnlimited(const GURL& origin) const { 645 bool ClientUsageTracker::IsStorageUnlimited(const GURL& origin) const {
651 if (type_ == kStorageTypeSyncable) 646 if (type_ == kStorageTypeSyncable)
652 return false; 647 return false;
653 return special_storage_policy_.get() && 648 return special_storage_policy_.get() &&
654 special_storage_policy_->IsStorageUnlimited(origin); 649 special_storage_policy_->IsStorageUnlimited(origin);
655 } 650 }
656 651
657 } // namespace quota 652 } // namespace quota
OLDNEW
« no previous file with comments | « webkit/quota/usage_tracker.h ('k') | webkit/quota/usage_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698