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#ifndef STORAGE_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 6#define STORAGE_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/memory/weak_ptr.h" 10#include "storage/browser/fileapi/quota/quota_reservation_manager.h" 11#include "storage/browser/fileapi/sandbox_file_system_backend_delegate.h" 12#include "storage/browser/storage_browser_export.h" 13#include "storage/common/quota/quota_status_code.h" 14 15namespace base { 16class SequencedTaskRunner; 17} 18 19namespace content { 20class QuotaBackendImplTest; 21} 22 23namespace storage { 24class QuotaManagerProxy; 25} 26 27namespace storage { 28 29class FileSystemUsageCache; 30class ObfuscatedFileUtil; 31 32// An instance of this class is owned by QuotaReservationManager. 33class STORAGE_EXPORT QuotaBackendImpl 34 : public QuotaReservationManager::QuotaBackend { 35 public: 36 typedef QuotaReservationManager::ReserveQuotaCallback 37 ReserveQuotaCallback; 38 39 QuotaBackendImpl(base::SequencedTaskRunner* file_task_runner, 40 ObfuscatedFileUtil* obfuscated_file_util, 41 FileSystemUsageCache* file_system_usage_cache, 42 storage::QuotaManagerProxy* quota_manager_proxy); 43 virtual ~QuotaBackendImpl(); 44 45 // QuotaReservationManager::QuotaBackend overrides. 46 virtual void ReserveQuota( 47 const GURL& origin, 48 FileSystemType type, 49 int64 delta, 50 const ReserveQuotaCallback& callback) OVERRIDE; 51 virtual void ReleaseReservedQuota( 52 const GURL& origin, 53 FileSystemType type, 54 int64 size) OVERRIDE; 55 virtual void CommitQuotaUsage( 56 const GURL& origin, 57 FileSystemType type, 58 int64 delta) OVERRIDE; 59 virtual void IncrementDirtyCount( 60 const GURL& origin, 61 FileSystemType type) OVERRIDE; 62 virtual void DecrementDirtyCount( 63 const GURL& origin, 64 FileSystemType type) OVERRIDE; 65 66 private: 67 friend class content::QuotaBackendImplTest; 68 69 struct QuotaReservationInfo { 70 QuotaReservationInfo(const GURL& origin, FileSystemType type, int64 delta); 71 ~QuotaReservationInfo(); 72 73 GURL origin; 74 FileSystemType type; 75 int64 delta; 76 }; 77 78 void DidGetUsageAndQuotaForReserveQuota(const QuotaReservationInfo& info, 79 const ReserveQuotaCallback& callback, 80 storage::QuotaStatusCode status, 81 int64 usage, 82 int64 quota); 83 84 void ReserveQuotaInternal( 85 const QuotaReservationInfo& info); 86 base::File::Error GetUsageCachePath( 87 const GURL& origin, 88 FileSystemType type, 89 base::FilePath* usage_file_path); 90 91 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; 92 93 // Owned by SandboxFileSystemBackendDelegate. 94 ObfuscatedFileUtil* obfuscated_file_util_; 95 FileSystemUsageCache* file_system_usage_cache_; 96 97 scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy_; 98 99 base::WeakPtrFactory<QuotaBackendImpl> weak_ptr_factory_; 100 101 DISALLOW_COPY_AND_ASSIGN(QuotaBackendImpl); 102}; 103 104} // namespace storage 105 106#endif // STORAGE_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 107