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 WEBKIT_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 6 #define WEBKIT_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/weak_ptr.h" 10 #include "webkit/browser/fileapi/quota/quota_reservation_manager.h" 11 #include "webkit/browser/fileapi/sandbox_file_system_backend_delegate.h" 12 #include "webkit/browser/webkit_storage_browser_export.h" 13 #include "webkit/common/quota/quota_status_code.h" 14 15 namespace base { 16 class SequencedTaskRunner; 17 } 18 19 namespace content { 20 class QuotaBackendImplTest; 21 } 22 23 namespace quota { 24 class QuotaManagerProxy; 25 } 26 27 namespace fileapi { 28 29 class FileSystemUsageCache; 30 class ObfuscatedFileUtil; 31 32 // An instance of this class is owned by QuotaReservationManager. 33 class WEBKIT_STORAGE_BROWSER_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 quota::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( 79 const QuotaReservationInfo& info, 80 const ReserveQuotaCallback& callback, 81 quota::QuotaStatusCode status, 82 int64 usage, 83 int64 quota); 84 85 void ReserveQuotaInternal( 86 const QuotaReservationInfo& info); 87 base::File::Error GetUsageCachePath( 88 const GURL& origin, 89 FileSystemType type, 90 base::FilePath* usage_file_path); 91 92 scoped_refptr<base::SequencedTaskRunner> file_task_runner_; 93 94 // Owned by SandboxFileSystemBackendDelegate. 95 ObfuscatedFileUtil* obfuscated_file_util_; 96 FileSystemUsageCache* file_system_usage_cache_; 97 98 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; 99 100 base::WeakPtrFactory<QuotaBackendImpl> weak_ptr_factory_; 101 102 DISALLOW_COPY_AND_ASSIGN(QuotaBackendImpl); 103 }; 104 105 } // namespace fileapi 106 107 #endif // WEBKIT_BROWSER_FILEAPI_QUOTA_QUOTA_BACKEND_IMPL_H_ 108