| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 #ifndef WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ | 5 #ifndef WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ |
| 6 #define WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ | 6 #define WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <utility> | 11 #include <utility> |
| 12 | 12 |
| 13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 14 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
| 15 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
| 16 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
| 17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
| 18 #include "base/threading/thread_checker.h" | 18 #include "base/threading/thread_checker.h" |
| 19 #include "base/time/time.h" | 19 #include "base/time/time.h" |
| 20 #include "webkit/browser/fileapi/file_system_backend.h" | 20 #include "storage/browser/fileapi/file_system_backend.h" |
| 21 #include "webkit/browser/fileapi/file_system_options.h" | 21 #include "storage/browser/fileapi/file_system_options.h" |
| 22 #include "webkit/browser/fileapi/file_system_quota_util.h" | 22 #include "storage/browser/fileapi/file_system_quota_util.h" |
| 23 #include "webkit/browser/webkit_storage_browser_export.h" | 23 #include "storage/common/storage_export.h" |
| 24 | 24 |
| 25 namespace base { | 25 namespace base { |
| 26 class SequencedTaskRunner; | 26 class SequencedTaskRunner; |
| 27 } | 27 } |
| 28 | 28 |
| 29 namespace content { | 29 namespace content { |
| 30 class SandboxFileSystemBackendDelegateTest; | 30 class SandboxFileSystemBackendDelegateTest; |
| 31 class SandboxFileSystemTestHelper; | 31 class SandboxFileSystemTestHelper; |
| 32 } | 32 } |
| 33 | 33 |
| 34 namespace quota { | 34 namespace quota { |
| 35 class QuotaManagerProxy; | 35 class QuotaManagerProxy; |
| 36 class SpecialStoragePolicy; | 36 class SpecialStoragePolicy; |
| 37 } | 37 } |
| 38 | 38 |
| 39 namespace webkit_blob { | 39 namespace storage { |
| 40 class FileStreamReader; | 40 class FileStreamReader; |
| 41 } | 41 } |
| 42 | 42 |
| 43 namespace fileapi { | 43 namespace storage { |
| 44 | 44 |
| 45 class AsyncFileUtil; | 45 class AsyncFileUtil; |
| 46 class FileStreamWriter; | 46 class FileStreamWriter; |
| 47 class FileSystemFileUtil; | 47 class FileSystemFileUtil; |
| 48 class FileSystemOperationContext; | 48 class FileSystemOperationContext; |
| 49 class FileSystemURL; | 49 class FileSystemURL; |
| 50 class FileSystemUsageCache; | 50 class FileSystemUsageCache; |
| 51 class ObfuscatedFileUtil; | 51 class ObfuscatedFileUtil; |
| 52 class QuotaReservationManager; | 52 class QuotaReservationManager; |
| 53 class SandboxFileSystemBackend; | 53 class SandboxFileSystemBackend; |
| 54 class SandboxQuotaObserver; | 54 class SandboxQuotaObserver; |
| 55 | 55 |
| 56 // Delegate implementation of the some methods in Sandbox/SyncFileSystemBackend. | 56 // Delegate implementation of the some methods in Sandbox/SyncFileSystemBackend. |
| 57 // An instance of this class is created and owned by FileSystemContext. | 57 // An instance of this class is created and owned by FileSystemContext. |
| 58 class WEBKIT_STORAGE_BROWSER_EXPORT SandboxFileSystemBackendDelegate | 58 class STORAGE_EXPORT SandboxFileSystemBackendDelegate |
| 59 : public FileSystemQuotaUtil { | 59 : public FileSystemQuotaUtil { |
| 60 public: | 60 public: |
| 61 typedef FileSystemBackend::OpenFileSystemCallback OpenFileSystemCallback; | 61 typedef FileSystemBackend::OpenFileSystemCallback OpenFileSystemCallback; |
| 62 | 62 |
| 63 // The FileSystem directory name. | 63 // The FileSystem directory name. |
| 64 static const base::FilePath::CharType kFileSystemDirectory[]; | 64 static const base::FilePath::CharType kFileSystemDirectory[]; |
| 65 | 65 |
| 66 // Origin enumerator interface. | 66 // Origin enumerator interface. |
| 67 // An instance of this interface is assumed to be called on the file thread. | 67 // An instance of this interface is assumed to be called on the file thread. |
| 68 class OriginEnumerator { | 68 class OriginEnumerator { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 91 // Returns an origin enumerator of sandbox filesystem. | 91 // Returns an origin enumerator of sandbox filesystem. |
| 92 // This method can only be called on the file thread. | 92 // This method can only be called on the file thread. |
| 93 OriginEnumerator* CreateOriginEnumerator(); | 93 OriginEnumerator* CreateOriginEnumerator(); |
| 94 | 94 |
| 95 // Gets a base directory path of the sandboxed filesystem that is | 95 // Gets a base directory path of the sandboxed filesystem that is |
| 96 // specified by |origin_url| and |type|. | 96 // specified by |origin_url| and |type|. |
| 97 // (The path is similar to the origin's root path but doesn't contain | 97 // (The path is similar to the origin's root path but doesn't contain |
| 98 // the 'unique' part.) | 98 // the 'unique' part.) |
| 99 // Returns an empty path if the given type is invalid. | 99 // Returns an empty path if the given type is invalid. |
| 100 // This method can only be called on the file thread. | 100 // This method can only be called on the file thread. |
| 101 base::FilePath GetBaseDirectoryForOriginAndType( | 101 base::FilePath GetBaseDirectoryForOriginAndType(const GURL& origin_url, |
| 102 const GURL& origin_url, | 102 FileSystemType type, |
| 103 FileSystemType type, | 103 bool create); |
| 104 bool create); | |
| 105 | 104 |
| 106 // FileSystemBackend helpers. | 105 // FileSystemBackend helpers. |
| 107 void OpenFileSystem( | 106 void OpenFileSystem(const GURL& origin_url, |
| 108 const GURL& origin_url, | 107 FileSystemType type, |
| 109 FileSystemType type, | 108 OpenFileSystemMode mode, |
| 110 OpenFileSystemMode mode, | 109 const OpenFileSystemCallback& callback, |
| 111 const OpenFileSystemCallback& callback, | 110 const GURL& root_url); |
| 112 const GURL& root_url); | |
| 113 scoped_ptr<FileSystemOperationContext> CreateFileSystemOperationContext( | 111 scoped_ptr<FileSystemOperationContext> CreateFileSystemOperationContext( |
| 114 const FileSystemURL& url, | 112 const FileSystemURL& url, |
| 115 FileSystemContext* context, | 113 FileSystemContext* context, |
| 116 base::File::Error* error_code) const; | 114 base::File::Error* error_code) const; |
| 117 scoped_ptr<webkit_blob::FileStreamReader> CreateFileStreamReader( | 115 scoped_ptr<storage::FileStreamReader> CreateFileStreamReader( |
| 118 const FileSystemURL& url, | 116 const FileSystemURL& url, |
| 119 int64 offset, | 117 int64 offset, |
| 120 const base::Time& expected_modification_time, | 118 const base::Time& expected_modification_time, |
| 121 FileSystemContext* context) const; | 119 FileSystemContext* context) const; |
| 122 scoped_ptr<FileStreamWriter> CreateFileStreamWriter( | 120 scoped_ptr<FileStreamWriter> CreateFileStreamWriter( |
| 123 const FileSystemURL& url, | 121 const FileSystemURL& url, |
| 124 int64 offset, | 122 int64 offset, |
| 125 FileSystemContext* context, | 123 FileSystemContext* context, |
| 126 FileSystemType type) const; | 124 FileSystemType type) const; |
| 127 | 125 |
| 128 // FileSystemQuotaUtil overrides. | 126 // FileSystemQuotaUtil overrides. |
| 129 virtual base::File::Error DeleteOriginDataOnFileTaskRunner( | 127 virtual base::File::Error DeleteOriginDataOnFileTaskRunner( |
| 130 FileSystemContext* context, | 128 FileSystemContext* context, |
| 131 quota::QuotaManagerProxy* proxy, | 129 quota::QuotaManagerProxy* proxy, |
| 132 const GURL& origin_url, | 130 const GURL& origin_url, |
| 133 FileSystemType type) OVERRIDE; | 131 FileSystemType type) OVERRIDE; |
| 134 virtual void GetOriginsForTypeOnFileTaskRunner( | 132 virtual void GetOriginsForTypeOnFileTaskRunner( |
| 135 FileSystemType type, | 133 FileSystemType type, |
| 136 std::set<GURL>* origins) OVERRIDE; | 134 std::set<GURL>* origins) OVERRIDE; |
| 137 virtual void GetOriginsForHostOnFileTaskRunner( | 135 virtual void GetOriginsForHostOnFileTaskRunner( |
| 138 FileSystemType type, | 136 FileSystemType type, |
| 139 const std::string& host, | 137 const std::string& host, |
| 140 std::set<GURL>* origins) OVERRIDE; | 138 std::set<GURL>* origins) OVERRIDE; |
| 141 virtual int64 GetOriginUsageOnFileTaskRunner( | 139 virtual int64 GetOriginUsageOnFileTaskRunner(FileSystemContext* context, |
| 142 FileSystemContext* context, | 140 const GURL& origin_url, |
| 143 const GURL& origin_url, | 141 FileSystemType type) OVERRIDE; |
| 144 FileSystemType type) OVERRIDE; | |
| 145 virtual scoped_refptr<QuotaReservation> | 142 virtual scoped_refptr<QuotaReservation> |
| 146 CreateQuotaReservationOnFileTaskRunner( | 143 CreateQuotaReservationOnFileTaskRunner(const GURL& origin_url, |
| 147 const GURL& origin_url, | 144 FileSystemType type) OVERRIDE; |
| 148 FileSystemType type) OVERRIDE; | |
| 149 virtual void AddFileUpdateObserver( | 145 virtual void AddFileUpdateObserver( |
| 150 FileSystemType type, | 146 FileSystemType type, |
| 151 FileUpdateObserver* observer, | 147 FileUpdateObserver* observer, |
| 152 base::SequencedTaskRunner* task_runner) OVERRIDE; | 148 base::SequencedTaskRunner* task_runner) OVERRIDE; |
| 153 virtual void AddFileChangeObserver( | 149 virtual void AddFileChangeObserver( |
| 154 FileSystemType type, | 150 FileSystemType type, |
| 155 FileChangeObserver* observer, | 151 FileChangeObserver* observer, |
| 156 base::SequencedTaskRunner* task_runner) OVERRIDE; | 152 base::SequencedTaskRunner* task_runner) OVERRIDE; |
| 157 virtual void AddFileAccessObserver( | 153 virtual void AddFileAccessObserver( |
| 158 FileSystemType type, | 154 FileSystemType type, |
| 159 FileAccessObserver* observer, | 155 FileAccessObserver* observer, |
| 160 base::SequencedTaskRunner* task_runner) OVERRIDE; | 156 base::SequencedTaskRunner* task_runner) OVERRIDE; |
| 161 virtual const UpdateObserverList* GetUpdateObservers( | 157 virtual const UpdateObserverList* GetUpdateObservers( |
| 162 FileSystemType type) const OVERRIDE; | 158 FileSystemType type) const OVERRIDE; |
| 163 virtual const ChangeObserverList* GetChangeObservers( | 159 virtual const ChangeObserverList* GetChangeObservers( |
| 164 FileSystemType type) const OVERRIDE; | 160 FileSystemType type) const OVERRIDE; |
| 165 virtual const AccessObserverList* GetAccessObservers( | 161 virtual const AccessObserverList* GetAccessObservers( |
| 166 FileSystemType type) const OVERRIDE; | 162 FileSystemType type) const OVERRIDE; |
| 167 | 163 |
| 168 // Registers quota observer for file updates on filesystem of |type|. | 164 // Registers quota observer for file updates on filesystem of |type|. |
| 169 void RegisterQuotaUpdateObserver(FileSystemType type); | 165 void RegisterQuotaUpdateObserver(FileSystemType type); |
| 170 | 166 |
| 171 void InvalidateUsageCache(const GURL& origin_url, | 167 void InvalidateUsageCache(const GURL& origin_url, FileSystemType type); |
| 172 FileSystemType type); | 168 void StickyInvalidateUsageCache(const GURL& origin_url, FileSystemType type); |
| 173 void StickyInvalidateUsageCache(const GURL& origin_url, | |
| 174 FileSystemType type); | |
| 175 | 169 |
| 176 void CollectOpenFileSystemMetrics(base::File::Error error_code); | 170 void CollectOpenFileSystemMetrics(base::File::Error error_code); |
| 177 | 171 |
| 178 base::SequencedTaskRunner* file_task_runner() { | 172 base::SequencedTaskRunner* file_task_runner() { |
| 179 return file_task_runner_.get(); | 173 return file_task_runner_.get(); |
| 180 } | 174 } |
| 181 | 175 |
| 182 AsyncFileUtil* file_util() { return sandbox_file_util_.get(); } | 176 AsyncFileUtil* file_util() { return sandbox_file_util_.get(); } |
| 183 FileSystemUsageCache* usage_cache() { return file_system_usage_cache_.get(); } | 177 FileSystemUsageCache* usage_cache() { return file_system_usage_cache_.get(); } |
| 184 SandboxQuotaObserver* quota_observer() { return quota_observer_.get(); } | 178 SandboxQuotaObserver* quota_observer() { return quota_observer_.get(); } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 201 | 195 |
| 202 // Performs API-specific validity checks on the given path |url|. | 196 // Performs API-specific validity checks on the given path |url|. |
| 203 // Returns true if access to |url| is valid in this filesystem. | 197 // Returns true if access to |url| is valid in this filesystem. |
| 204 bool IsAccessValid(const FileSystemURL& url) const; | 198 bool IsAccessValid(const FileSystemURL& url) const; |
| 205 | 199 |
| 206 // Returns true if the given |url|'s scheme is allowed to access | 200 // Returns true if the given |url|'s scheme is allowed to access |
| 207 // filesystem. | 201 // filesystem. |
| 208 bool IsAllowedScheme(const GURL& url) const; | 202 bool IsAllowedScheme(const GURL& url) const; |
| 209 | 203 |
| 210 // Returns a path to the usage cache file. | 204 // Returns a path to the usage cache file. |
| 211 base::FilePath GetUsageCachePathForOriginAndType( | 205 base::FilePath GetUsageCachePathForOriginAndType(const GURL& origin_url, |
| 212 const GURL& origin_url, | 206 FileSystemType type); |
| 213 FileSystemType type); | |
| 214 | 207 |
| 215 // Returns a path to the usage cache file (static version). | 208 // Returns a path to the usage cache file (static version). |
| 216 static base::FilePath GetUsageCachePathForOriginAndType( | 209 static base::FilePath GetUsageCachePathForOriginAndType( |
| 217 ObfuscatedFileUtil* sandbox_file_util, | 210 ObfuscatedFileUtil* sandbox_file_util, |
| 218 const GURL& origin_url, | 211 const GURL& origin_url, |
| 219 FileSystemType type, | 212 FileSystemType type, |
| 220 base::File::Error* error_out); | 213 base::File::Error* error_out); |
| 221 | 214 |
| 222 int64 RecalculateUsage(FileSystemContext* context, | 215 int64 RecalculateUsage(FileSystemContext* context, |
| 223 const GURL& origin, | 216 const GURL& origin, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 248 std::map<FileSystemType, ChangeObserverList> change_observers_; | 241 std::map<FileSystemType, ChangeObserverList> change_observers_; |
| 249 std::map<FileSystemType, AccessObserverList> access_observers_; | 242 std::map<FileSystemType, AccessObserverList> access_observers_; |
| 250 | 243 |
| 251 base::Time next_release_time_for_open_filesystem_stat_; | 244 base::Time next_release_time_for_open_filesystem_stat_; |
| 252 | 245 |
| 253 base::WeakPtrFactory<SandboxFileSystemBackendDelegate> weak_factory_; | 246 base::WeakPtrFactory<SandboxFileSystemBackendDelegate> weak_factory_; |
| 254 | 247 |
| 255 DISALLOW_COPY_AND_ASSIGN(SandboxFileSystemBackendDelegate); | 248 DISALLOW_COPY_AND_ASSIGN(SandboxFileSystemBackendDelegate); |
| 256 }; | 249 }; |
| 257 | 250 |
| 258 } // namespace fileapi | 251 } // namespace storage |
| 259 | 252 |
| 260 #endif // WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ | 253 #endif // WEBKIT_BROWSER_FILEAPI_SANDBOX_FILE_SYSTEM_BACKEND_DELEGATE_H_ |
| OLD | NEW |