1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "webkit/browser/fileapi/quota/quota_reservation_manager.h" 6 7 #include "webkit/browser/fileapi/quota/quota_reservation.h" 8 #include "webkit/browser/fileapi/quota/quota_reservation_buffer.h" 9 10 namespace fileapi { 11 12 QuotaReservationManager::QuotaReservationManager( 13 scoped_ptr<QuotaBackend> backend) 14 : backend_(backend.Pass()), 15 weak_ptr_factory_(this) { 16 sequence_checker_.DetachFromSequence(); 17 } 18 19 QuotaReservationManager::~QuotaReservationManager() { 20 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 21 } 22 23 void QuotaReservationManager::ReserveQuota( 24 const GURL& origin, 25 FileSystemType type, 26 int64 size, 27 const ReserveQuotaCallback& callback) { 28 DCHECK(origin.is_valid()); 29 backend_->ReserveQuota(origin, type, size, callback); 30 } 31 32 void QuotaReservationManager::ReleaseReservedQuota( 33 const GURL& origin, 34 FileSystemType type, 35 int64 size) { 36 DCHECK(origin.is_valid()); 37 backend_->ReleaseReservedQuota(origin, type, size); 38 } 39 40 void QuotaReservationManager::CommitQuotaUsage( 41 const GURL& origin, 42 FileSystemType type, 43 int64 delta) { 44 DCHECK(origin.is_valid()); 45 backend_->CommitQuotaUsage(origin, type, delta); 46 } 47 48 void QuotaReservationManager::IncrementDirtyCount(const GURL& origin, 49 FileSystemType type) { 50 DCHECK(origin.is_valid()); 51 backend_->IncrementDirtyCount(origin, type); 52 } 53 54 void QuotaReservationManager::DecrementDirtyCount(const GURL& origin, 55 FileSystemType type) { 56 DCHECK(origin.is_valid()); 57 backend_->DecrementDirtyCount(origin, type); 58 } 59 60 scoped_refptr<QuotaReservationBuffer> 61 QuotaReservationManager::GetReservationBuffer( 62 const GURL& origin, 63 FileSystemType type) { 64 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 65 DCHECK(origin.is_valid()); 66 QuotaReservationBuffer** buffer = 67 &reservation_buffers_[std::make_pair(origin, type)]; 68 if (!*buffer) { 69 *buffer = new QuotaReservationBuffer( 70 weak_ptr_factory_.GetWeakPtr(), origin, type); 71 } 72 return make_scoped_refptr(*buffer); 73 } 74 75 void QuotaReservationManager::ReleaseReservationBuffer( 76 QuotaReservationBuffer* reservation_buffer) { 77 DCHECK(sequence_checker_.CalledOnValidSequencedThread()); 78 std::pair<GURL, FileSystemType> key(reservation_buffer->origin(), 79 reservation_buffer->type()); 80 DCHECK_EQ(reservation_buffers_[key], reservation_buffer); 81 reservation_buffers_.erase(key); 82 } 83 84 scoped_refptr<QuotaReservation> QuotaReservationManager::CreateReservation( 85 const GURL& origin, 86 FileSystemType type) { 87 DCHECK(origin.is_valid()); 88 return GetReservationBuffer(origin, type)->CreateReservation();; 89 } 90 91 } // namespace fileapi 92