OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 5 #ifndef WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
6 #define WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 6 #define WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
| 10 #include <vector> |
10 | 11 |
11 #include "base/callback.h" | 12 #include "base/callback.h" |
12 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
14 #include "base/platform_file.h" | 15 #include "base/platform_file.h" |
15 #include "base/sequenced_task_runner_helpers.h" | 16 #include "base/sequenced_task_runner_helpers.h" |
16 #include "webkit/fileapi/file_system_types.h" | 17 #include "webkit/fileapi/file_system_types.h" |
| 18 #include "webkit/fileapi/file_system_url.h" |
17 #include "webkit/fileapi/task_runner_bound_observer_list.h" | 19 #include "webkit/fileapi/task_runner_bound_observer_list.h" |
18 #include "webkit/storage/webkit_storage_export.h" | 20 #include "webkit/storage/webkit_storage_export.h" |
19 | 21 |
20 class FilePath; | 22 class FilePath; |
21 | 23 |
22 namespace quota { | 24 namespace quota { |
23 class QuotaManagerProxy; | 25 class QuotaManagerProxy; |
24 class SpecialStoragePolicy; | 26 class SpecialStoragePolicy; |
25 } | 27 } |
26 | 28 |
27 namespace webkit_blob { | 29 namespace webkit_blob { |
28 class FileStreamReader; | 30 class FileStreamReader; |
29 } | 31 } |
30 | 32 |
31 namespace fileapi { | 33 namespace fileapi { |
32 | 34 |
33 class ExternalFileSystemMountPointProvider; | 35 class ExternalFileSystemMountPointProvider; |
| 36 class ExternalMountPoints; |
34 class FileSystemFileUtil; | 37 class FileSystemFileUtil; |
35 class FileSystemMountPointProvider; | 38 class FileSystemMountPointProvider; |
36 class FileSystemOperation; | 39 class FileSystemOperation; |
37 class FileSystemOptions; | 40 class FileSystemOptions; |
38 class FileSystemQuotaUtil; | 41 class FileSystemQuotaUtil; |
39 class FileSystemTaskRunners; | 42 class FileSystemTaskRunners; |
40 class FileSystemURL; | 43 class FileSystemURL; |
41 class IsolatedMountPointProvider; | 44 class IsolatedMountPointProvider; |
42 class LocalFileChangeTracker; | 45 class LocalFileChangeTracker; |
| 46 class LocalFileSyncContext; |
| 47 class MountPoints; |
43 class SandboxMountPointProvider; | 48 class SandboxMountPointProvider; |
44 class LocalFileSyncContext; | |
45 | 49 |
46 struct DefaultContextDeleter; | 50 struct DefaultContextDeleter; |
47 | 51 |
48 // This class keeps and provides a file system context for FileSystem API. | 52 // This class keeps and provides a file system context for FileSystem API. |
49 // An instance of this class is created and owned by profile. | 53 // An instance of this class is created and owned by profile. |
50 class WEBKIT_STORAGE_EXPORT FileSystemContext | 54 class WEBKIT_STORAGE_EXPORT FileSystemContext |
51 : public base::RefCountedThreadSafe<FileSystemContext, | 55 : public base::RefCountedThreadSafe<FileSystemContext, |
52 DefaultContextDeleter> { | 56 DefaultContextDeleter> { |
53 public: | 57 public: |
54 // task_runners->file_task_runner() is used as default TaskRunner. | 58 // task_runners->file_task_runner() is used as default TaskRunner. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 bool create, | 135 bool create, |
132 const OpenFileSystemCallback& callback); | 136 const OpenFileSystemCallback& callback); |
133 | 137 |
134 // Deletes the filesystem for the given |origin_url| and |type|. This should | 138 // Deletes the filesystem for the given |origin_url| and |type|. This should |
135 // be called on the IO Thread. | 139 // be called on the IO Thread. |
136 void DeleteFileSystem( | 140 void DeleteFileSystem( |
137 const GURL& origin_url, | 141 const GURL& origin_url, |
138 FileSystemType type, | 142 FileSystemType type, |
139 const DeleteFileSystemCallback& callback); | 143 const DeleteFileSystemCallback& callback); |
140 | 144 |
141 // Creates a new FileSystemOperation instance by cracking | 145 // Creates a new FileSystemOperation instance by getting an appropriate |
142 // the given filesystem URL |url| to get an appropriate MountPointProvider | 146 // MountPointProvider for |url| and calling the provider's corresponding |
143 // and calling the provider's corresponding CreateFileSystemOperation method. | 147 // CreateFileSystemOperation method. |
144 // The resolved MountPointProvider could perform further specialization | 148 // The resolved MountPointProvider could perform further specialization |
145 // depending on the filesystem type pointed by the |url|. | 149 // depending on the filesystem type pointed by the |url|. |
146 FileSystemOperation* CreateFileSystemOperation( | 150 FileSystemOperation* CreateFileSystemOperation( |
147 const FileSystemURL& url, | 151 const FileSystemURL& url, |
148 base::PlatformFileError* error_code); | 152 base::PlatformFileError* error_code); |
149 | 153 |
150 // Creates new FileStreamReader instance to read a file pointed by the given | 154 // Creates new FileStreamReader instance to read a file pointed by the given |
151 // filesystem URL |url| starting from |offset|. |expected_modification_time| | 155 // filesystem URL |url| starting from |offset|. |expected_modification_time| |
152 // specifies the expected last modification if the value is non-null, the | 156 // specifies the expected last modification if the value is non-null, the |
153 // reader will check the underlying file's actual modification time to see if | 157 // reader will check the underlying file's actual modification time to see if |
(...skipping 16 matching lines...) Expand all Loading... |
170 FileSystemTaskRunners* task_runners() { return task_runners_.get(); } | 174 FileSystemTaskRunners* task_runners() { return task_runners_.get(); } |
171 | 175 |
172 LocalFileChangeTracker* change_tracker() { return change_tracker_.get(); } | 176 LocalFileChangeTracker* change_tracker() { return change_tracker_.get(); } |
173 void SetLocalFileChangeTracker(scoped_ptr<LocalFileChangeTracker> tracker); | 177 void SetLocalFileChangeTracker(scoped_ptr<LocalFileChangeTracker> tracker); |
174 | 178 |
175 LocalFileSyncContext* sync_context() { return sync_context_.get(); } | 179 LocalFileSyncContext* sync_context() { return sync_context_.get(); } |
176 void set_sync_context(LocalFileSyncContext* sync_context); | 180 void set_sync_context(LocalFileSyncContext* sync_context); |
177 | 181 |
178 const FilePath& partition_path() const { return partition_path_; } | 182 const FilePath& partition_path() const { return partition_path_; } |
179 | 183 |
| 184 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from |url|. |
| 185 FileSystemURL CrackURL(const GURL& url) const; |
| 186 // Same as |CrackFileSystemURL|, but cracks FileSystemURL created from method |
| 187 // arguments. |
| 188 FileSystemURL CreateCrackedFileSystemURL(const GURL& origin, |
| 189 FileSystemType type, |
| 190 const FilePath& path) const; |
| 191 |
180 private: | 192 private: |
181 friend struct DefaultContextDeleter; | 193 friend struct DefaultContextDeleter; |
182 friend class base::DeleteHelper<FileSystemContext>; | 194 friend class base::DeleteHelper<FileSystemContext>; |
183 friend class base::RefCountedThreadSafe<FileSystemContext, | 195 friend class base::RefCountedThreadSafe<FileSystemContext, |
184 DefaultContextDeleter>; | 196 DefaultContextDeleter>; |
185 ~FileSystemContext(); | 197 ~FileSystemContext(); |
186 | 198 |
187 void DeleteOnCorrectThread() const; | 199 void DeleteOnCorrectThread() const; |
188 | 200 |
| 201 // For non-cracked isolated and external mount points, returns a FileSystemURL |
| 202 // created by cracking |url|. The url is cracked using MountPoints registered |
| 203 // as |url_crackers_|. If the url cannot be cracked, returns invalid |
| 204 // FileSystemURL. |
| 205 // |
| 206 // If the original url does not point to an isolated or external filesystem, |
| 207 // returns the original url, without attempting to crack it. |
| 208 FileSystemURL CrackFileSystemURL(const FileSystemURL& url) const; |
| 209 |
189 scoped_ptr<FileSystemTaskRunners> task_runners_; | 210 scoped_ptr<FileSystemTaskRunners> task_runners_; |
190 | 211 |
191 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; | 212 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; |
192 | 213 |
193 // Regular mount point providers. | 214 // Regular mount point providers. |
194 scoped_ptr<SandboxMountPointProvider> sandbox_provider_; | 215 scoped_ptr<SandboxMountPointProvider> sandbox_provider_; |
195 scoped_ptr<IsolatedMountPointProvider> isolated_provider_; | 216 scoped_ptr<IsolatedMountPointProvider> isolated_provider_; |
196 scoped_ptr<ExternalFileSystemMountPointProvider> external_provider_; | 217 scoped_ptr<ExternalFileSystemMountPointProvider> external_provider_; |
197 | 218 |
198 // Registered mount point providers. | 219 // Registered mount point providers. |
199 std::map<FileSystemType, FileSystemMountPointProvider*> provider_map_; | 220 std::map<FileSystemType, FileSystemMountPointProvider*> provider_map_; |
200 | 221 |
| 222 // MountPoints used to crack FileSystemURLs. The MountPoints are ordered |
| 223 // in order they should try to crack a FileSystemURL. |
| 224 std::vector<MountPoints*> url_crackers_; |
| 225 |
201 // The base path of the storage partition for this context. | 226 // The base path of the storage partition for this context. |
202 const FilePath partition_path_; | 227 const FilePath partition_path_; |
203 | 228 |
204 // For syncable file systems. | 229 // For syncable file systems. |
205 scoped_ptr<LocalFileChangeTracker> change_tracker_; | 230 scoped_ptr<LocalFileChangeTracker> change_tracker_; |
206 scoped_refptr<LocalFileSyncContext> sync_context_; | 231 scoped_refptr<LocalFileSyncContext> sync_context_; |
207 | 232 |
208 DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); | 233 DISALLOW_IMPLICIT_CONSTRUCTORS(FileSystemContext); |
209 }; | 234 }; |
210 | 235 |
211 struct DefaultContextDeleter { | 236 struct DefaultContextDeleter { |
212 static void Destruct(const FileSystemContext* context) { | 237 static void Destruct(const FileSystemContext* context) { |
213 context->DeleteOnCorrectThread(); | 238 context->DeleteOnCorrectThread(); |
214 } | 239 } |
215 }; | 240 }; |
216 | 241 |
217 } // namespace fileapi | 242 } // namespace fileapi |
218 | 243 |
219 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ | 244 #endif // WEBKIT_FILEAPI_FILE_SYSTEM_CONTEXT_H_ |
OLD | NEW |