OLD | NEW |
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 "content/browser/indexed_db/indexed_db_context_impl.h" | 5 #include "content/browser/indexed_db/indexed_db_context_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
280 base::FileEnumerator file_enumerator( | 280 base::FileEnumerator file_enumerator( |
281 GetBlobPath(storage::GetIdentifierFromOrigin(origin_url)), true, | 281 GetBlobPath(storage::GetIdentifierFromOrigin(origin_url)), true, |
282 base::FileEnumerator::FILES); | 282 base::FileEnumerator::FILES); |
283 for (base::FilePath file_path = file_enumerator.Next(); !file_path.empty(); | 283 for (base::FilePath file_path = file_enumerator.Next(); !file_path.empty(); |
284 file_path = file_enumerator.Next()) { | 284 file_path = file_enumerator.Next()) { |
285 count++; | 285 count++; |
286 } | 286 } |
287 return count; | 287 return count; |
288 } | 288 } |
289 | 289 |
290 int64 IndexedDBContextImpl::GetOriginDiskUsage(const GURL& origin_url) { | 290 int64_t IndexedDBContextImpl::GetOriginDiskUsage(const GURL& origin_url) { |
291 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); | 291 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); |
292 if (data_path_.empty() || !IsInOriginSet(origin_url)) | 292 if (data_path_.empty() || !IsInOriginSet(origin_url)) |
293 return 0; | 293 return 0; |
294 EnsureDiskUsageCacheInitialized(origin_url); | 294 EnsureDiskUsageCacheInitialized(origin_url); |
295 return origin_size_map_[origin_url]; | 295 return origin_size_map_[origin_url]; |
296 } | 296 } |
297 | 297 |
298 base::Time IndexedDBContextImpl::GetOriginLastModified(const GURL& origin_url) { | 298 base::Time IndexedDBContextImpl::GetOriginLastModified(const GURL& origin_url) { |
299 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); | 299 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); |
300 if (data_path_.empty() || !IsInOriginSet(origin_url)) | 300 if (data_path_.empty() || !IsInOriginSet(origin_url)) |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 QueryAvailableQuota(origin_url); | 457 QueryAvailableQuota(origin_url); |
458 } | 458 } |
459 | 459 |
460 void IndexedDBContextImpl::DatabaseDeleted(const GURL& origin_url) { | 460 void IndexedDBContextImpl::DatabaseDeleted(const GURL& origin_url) { |
461 AddToOriginSet(origin_url); | 461 AddToOriginSet(origin_url); |
462 QueryDiskAndUpdateQuotaUsage(origin_url); | 462 QueryDiskAndUpdateQuotaUsage(origin_url); |
463 QueryAvailableQuota(origin_url); | 463 QueryAvailableQuota(origin_url); |
464 } | 464 } |
465 | 465 |
466 bool IndexedDBContextImpl::WouldBeOverQuota(const GURL& origin_url, | 466 bool IndexedDBContextImpl::WouldBeOverQuota(const GURL& origin_url, |
467 int64 additional_bytes) { | 467 int64_t additional_bytes) { |
468 if (space_available_map_.find(origin_url) == space_available_map_.end()) { | 468 if (space_available_map_.find(origin_url) == space_available_map_.end()) { |
469 // We haven't heard back from the QuotaManager yet, just let it through. | 469 // We haven't heard back from the QuotaManager yet, just let it through. |
470 return false; | 470 return false; |
471 } | 471 } |
472 bool over_quota = additional_bytes > space_available_map_[origin_url]; | 472 bool over_quota = additional_bytes > space_available_map_[origin_url]; |
473 return over_quota; | 473 return over_quota; |
474 } | 474 } |
475 | 475 |
476 bool IndexedDBContextImpl::IsOverQuota(const GURL& origin_url) { | 476 bool IndexedDBContextImpl::IsOverQuota(const GURL& origin_url) { |
477 const int kOneAdditionalByte = 1; | 477 const int kOneAdditionalByte = 1; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
516 .AddExtension(kBlobExtension); | 516 .AddExtension(kBlobExtension); |
517 } | 517 } |
518 | 518 |
519 base::FilePath IndexedDBContextImpl::GetLevelDBPath( | 519 base::FilePath IndexedDBContextImpl::GetLevelDBPath( |
520 const std::string& origin_id) const { | 520 const std::string& origin_id) const { |
521 DCHECK(!data_path_.empty()); | 521 DCHECK(!data_path_.empty()); |
522 return data_path_.AppendASCII(origin_id).AddExtension(kIndexedDBExtension) | 522 return data_path_.AppendASCII(origin_id).AddExtension(kIndexedDBExtension) |
523 .AddExtension(kLevelDBExtension); | 523 .AddExtension(kLevelDBExtension); |
524 } | 524 } |
525 | 525 |
526 int64 IndexedDBContextImpl::ReadUsageFromDisk(const GURL& origin_url) const { | 526 int64_t IndexedDBContextImpl::ReadUsageFromDisk(const GURL& origin_url) const { |
527 if (data_path_.empty()) | 527 if (data_path_.empty()) |
528 return 0; | 528 return 0; |
529 int64 total_size = 0; | 529 int64_t total_size = 0; |
530 for (const base::FilePath& path : GetStoragePaths(origin_url)) | 530 for (const base::FilePath& path : GetStoragePaths(origin_url)) |
531 total_size += base::ComputeDirectorySize(path); | 531 total_size += base::ComputeDirectorySize(path); |
532 return total_size; | 532 return total_size; |
533 } | 533 } |
534 | 534 |
535 void IndexedDBContextImpl::EnsureDiskUsageCacheInitialized( | 535 void IndexedDBContextImpl::EnsureDiskUsageCacheInitialized( |
536 const GURL& origin_url) { | 536 const GURL& origin_url) { |
537 if (origin_size_map_.find(origin_url) == origin_size_map_.end()) | 537 if (origin_size_map_.find(origin_url) == origin_size_map_.end()) |
538 origin_size_map_[origin_url] = ReadUsageFromDisk(origin_url); | 538 origin_size_map_[origin_url] = ReadUsageFromDisk(origin_url); |
539 } | 539 } |
540 | 540 |
541 void IndexedDBContextImpl::QueryDiskAndUpdateQuotaUsage( | 541 void IndexedDBContextImpl::QueryDiskAndUpdateQuotaUsage( |
542 const GURL& origin_url) { | 542 const GURL& origin_url) { |
543 int64 former_disk_usage = origin_size_map_[origin_url]; | 543 int64_t former_disk_usage = origin_size_map_[origin_url]; |
544 int64 current_disk_usage = ReadUsageFromDisk(origin_url); | 544 int64_t current_disk_usage = ReadUsageFromDisk(origin_url); |
545 int64 difference = current_disk_usage - former_disk_usage; | 545 int64_t difference = current_disk_usage - former_disk_usage; |
546 if (difference) { | 546 if (difference) { |
547 origin_size_map_[origin_url] = current_disk_usage; | 547 origin_size_map_[origin_url] = current_disk_usage; |
548 // quota_manager_proxy() is NULL in unit tests. | 548 // quota_manager_proxy() is NULL in unit tests. |
549 if (quota_manager_proxy()) { | 549 if (quota_manager_proxy()) { |
550 quota_manager_proxy()->NotifyStorageModified( | 550 quota_manager_proxy()->NotifyStorageModified( |
551 storage::QuotaClient::kIndexedDatabase, | 551 storage::QuotaClient::kIndexedDatabase, |
552 origin_url, | 552 origin_url, |
553 storage::kStorageTypeTemporary, | 553 storage::kStorageTypeTemporary, |
554 difference); | 554 difference); |
555 } | 555 } |
556 } | 556 } |
557 } | 557 } |
558 | 558 |
559 void IndexedDBContextImpl::GotUsageAndQuota(const GURL& origin_url, | 559 void IndexedDBContextImpl::GotUsageAndQuota(const GURL& origin_url, |
560 storage::QuotaStatusCode status, | 560 storage::QuotaStatusCode status, |
561 int64 usage, | 561 int64_t usage, |
562 int64 quota) { | 562 int64_t quota) { |
563 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 563 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
564 DCHECK(status == storage::kQuotaStatusOk || | 564 DCHECK(status == storage::kQuotaStatusOk || |
565 status == storage::kQuotaErrorAbort) | 565 status == storage::kQuotaErrorAbort) |
566 << "status was " << status; | 566 << "status was " << status; |
567 if (status == storage::kQuotaErrorAbort) { | 567 if (status == storage::kQuotaErrorAbort) { |
568 // We seem to no longer care to wait around for the answer. | 568 // We seem to no longer care to wait around for the answer. |
569 return; | 569 return; |
570 } | 570 } |
571 TaskRunner()->PostTask(FROM_HERE, | 571 TaskRunner()->PostTask(FROM_HERE, |
572 base::Bind(&IndexedDBContextImpl::GotUpdatedQuota, | 572 base::Bind(&IndexedDBContextImpl::GotUpdatedQuota, |
573 this, | 573 this, |
574 origin_url, | 574 origin_url, |
575 usage, | 575 usage, |
576 quota)); | 576 quota)); |
577 } | 577 } |
578 | 578 |
579 void IndexedDBContextImpl::GotUpdatedQuota(const GURL& origin_url, | 579 void IndexedDBContextImpl::GotUpdatedQuota(const GURL& origin_url, |
580 int64 usage, | 580 int64_t usage, |
581 int64 quota) { | 581 int64_t quota) { |
582 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); | 582 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); |
583 space_available_map_[origin_url] = quota - usage; | 583 space_available_map_[origin_url] = quota - usage; |
584 } | 584 } |
585 | 585 |
586 void IndexedDBContextImpl::QueryAvailableQuota(const GURL& origin_url) { | 586 void IndexedDBContextImpl::QueryAvailableQuota(const GURL& origin_url) { |
587 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 587 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
588 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); | 588 DCHECK(TaskRunner()->RunsTasksOnCurrentThread()); |
589 if (quota_manager_proxy()) { | 589 if (quota_manager_proxy()) { |
590 BrowserThread::PostTask( | 590 BrowserThread::PostTask( |
591 BrowserThread::IO, | 591 BrowserThread::IO, |
(...skipping 29 matching lines...) Expand all Loading... |
621 origin_set_.reset(); | 621 origin_set_.reset(); |
622 origin_size_map_.clear(); | 622 origin_size_map_.clear(); |
623 space_available_map_.clear(); | 623 space_available_map_.clear(); |
624 } | 624 } |
625 | 625 |
626 base::SequencedTaskRunner* IndexedDBContextImpl::TaskRunner() const { | 626 base::SequencedTaskRunner* IndexedDBContextImpl::TaskRunner() const { |
627 return task_runner_.get(); | 627 return task_runner_.get(); |
628 } | 628 } |
629 | 629 |
630 } // namespace content | 630 } // namespace content |
OLD | NEW |