blob: e182e7ec2da2c4efe5ca656bf92e397fd99b58bf [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "storage/browser/fileapi/quota/quota_reservation_manager.h"
#include <stdint.h>
#include <memory>
#include <utility>
#include "storage/browser/fileapi/quota/quota_reservation.h"
#include "storage/browser/fileapi/quota/quota_reservation_buffer.h"
namespace storage {
QuotaReservationManager::QuotaReservationManager(
std::unique_ptr<QuotaBackend> backend)
: backend_(std::move(backend)), weak_ptr_factory_(this) {
sequence_checker_.DetachFromSequence();
}
QuotaReservationManager::~QuotaReservationManager() {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
}
void QuotaReservationManager::ReserveQuota(
const GURL& origin,
FileSystemType type,
int64_t size,
const ReserveQuotaCallback& callback) {
DCHECK(origin.is_valid());
backend_->ReserveQuota(origin, type, size, callback);
}
void QuotaReservationManager::ReleaseReservedQuota(const GURL& origin,
FileSystemType type,
int64_t size) {
DCHECK(origin.is_valid());
backend_->ReleaseReservedQuota(origin, type, size);
}
void QuotaReservationManager::CommitQuotaUsage(const GURL& origin,
FileSystemType type,
int64_t delta) {
DCHECK(origin.is_valid());
backend_->CommitQuotaUsage(origin, type, delta);
}
void QuotaReservationManager::IncrementDirtyCount(const GURL& origin,
FileSystemType type) {
DCHECK(origin.is_valid());
backend_->IncrementDirtyCount(origin, type);
}
void QuotaReservationManager::DecrementDirtyCount(const GURL& origin,
FileSystemType type) {
DCHECK(origin.is_valid());
backend_->DecrementDirtyCount(origin, type);
}
scoped_refptr<QuotaReservationBuffer>
QuotaReservationManager::GetReservationBuffer(
const GURL& origin,
FileSystemType type) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
DCHECK(origin.is_valid());
QuotaReservationBuffer** buffer =
&reservation_buffers_[std::make_pair(origin, type)];
if (!*buffer) {
*buffer = new QuotaReservationBuffer(
weak_ptr_factory_.GetWeakPtr(), origin, type);
}
return make_scoped_refptr(*buffer);
}
void QuotaReservationManager::ReleaseReservationBuffer(
QuotaReservationBuffer* reservation_buffer) {
DCHECK(sequence_checker_.CalledOnValidSequencedThread());
std::pair<GURL, FileSystemType> key(reservation_buffer->origin(),
reservation_buffer->type());
DCHECK_EQ(reservation_buffers_[key], reservation_buffer);
reservation_buffers_.erase(key);
}
scoped_refptr<QuotaReservation> QuotaReservationManager::CreateReservation(
const GURL& origin,
FileSystemType type) {
DCHECK(origin.is_valid());
return GetReservationBuffer(origin, type)->CreateReservation();
}
} // namespace storage