OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_ | |
6 #define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_ | |
7 | |
8 #include "chrome/browser/chromeos/gdata/gdata_errorcode.h" | |
9 #include "chrome/browser/chromeos/gdata/gdata_file_system_interface.h" | |
10 #include "webkit/chromeos/fileapi/remote_file_system_proxy.h" | |
11 | |
12 namespace fileapi { | |
13 class FileSystemURL; | |
14 } | |
15 | |
16 namespace gdata { | |
17 | |
18 class DriveEntryProto; | |
19 class GDataFileSystemInterface; | |
20 | |
21 typedef std::vector<DriveEntryProto> DriveEntryProtoVector; | |
22 | |
23 // Implementation of File API's remote file system proxy for GData file system. | |
24 class GDataFileSystemProxy : public fileapi::RemoteFileSystemProxyInterface { | |
25 public: | |
26 // |file_system| is the GDataFileSystem instance owned by GDataSystemService. | |
27 explicit GDataFileSystemProxy(GDataFileSystemInterface* file_system); | |
28 | |
29 // fileapi::RemoteFileSystemProxyInterface overrides. | |
30 virtual void GetFileInfo( | |
31 const fileapi::FileSystemURL& url, | |
32 const fileapi::FileSystemOperationInterface::GetMetadataCallback& | |
33 callback) OVERRIDE; | |
34 virtual void Copy( | |
35 const fileapi::FileSystemURL& src_url, | |
36 const fileapi::FileSystemURL& dest_url, | |
37 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
38 OVERRIDE; | |
39 virtual void Move( | |
40 const fileapi::FileSystemURL& src_url, | |
41 const fileapi::FileSystemURL& dest_url, | |
42 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
43 OVERRIDE; | |
44 virtual void ReadDirectory(const fileapi::FileSystemURL& url, | |
45 const fileapi::FileSystemOperationInterface::ReadDirectoryCallback& | |
46 callback) OVERRIDE; | |
47 virtual void Remove( | |
48 const fileapi::FileSystemURL& url, bool recursive, | |
49 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
50 OVERRIDE; | |
51 virtual void CreateDirectory( | |
52 const fileapi::FileSystemURL& file_url, | |
53 bool exclusive, | |
54 bool recursive, | |
55 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
56 OVERRIDE; | |
57 virtual void CreateFile( | |
58 const fileapi::FileSystemURL& file_url, | |
59 bool exclusive, | |
60 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
61 OVERRIDE; | |
62 virtual void Truncate( | |
63 const fileapi::FileSystemURL& file_url, int64 length, | |
64 const fileapi::FileSystemOperationInterface::StatusCallback& callback) | |
65 OVERRIDE; | |
66 virtual void CreateSnapshotFile( | |
67 const fileapi::FileSystemURL& url, | |
68 const fileapi::FileSystemOperationInterface::SnapshotFileCallback& | |
69 callback) OVERRIDE; | |
70 virtual void CreateWritableSnapshotFile( | |
71 const fileapi::FileSystemURL& url, | |
72 const fileapi::WritableSnapshotFile& callback) OVERRIDE; | |
73 virtual void OpenFile( | |
74 const fileapi::FileSystemURL& url, | |
75 int file_flags, | |
76 base::ProcessHandle peer_handle, | |
77 const fileapi::FileSystemOperationInterface::OpenFileCallback& | |
78 callback) OVERRIDE; | |
79 virtual void NotifyCloseFile(const fileapi::FileSystemURL& url) OVERRIDE; | |
80 // TODO(zelidrag): More methods to follow as we implement other parts of FSO. | |
81 | |
82 protected: | |
83 virtual ~GDataFileSystemProxy(); | |
84 | |
85 private: | |
86 // Checks if a given |url| belongs to this file system. If it does, | |
87 // the call will return true and fill in |file_path| with a file path of | |
88 // a corresponding element within this file system. | |
89 static bool ValidateUrl(const fileapi::FileSystemURL& url, | |
90 FilePath* file_path); | |
91 | |
92 // Helper callback for relaying reply for status callbacks to the | |
93 // calling thread. | |
94 void OnStatusCallback( | |
95 const fileapi::FileSystemOperationInterface::StatusCallback& callback, | |
96 DriveFileError error); | |
97 | |
98 // Helper callback for relaying reply for metadata retrieval request to the | |
99 // calling thread. | |
100 void OnGetMetadata( | |
101 const FilePath& file_path, | |
102 const fileapi::FileSystemOperationInterface::GetMetadataCallback& | |
103 callback, | |
104 DriveFileError error, | |
105 scoped_ptr<DriveEntryProto> entry_proto); | |
106 | |
107 // Helper callback for relaying reply for GetEntryInfoByPath() to the | |
108 // calling thread. | |
109 void OnGetEntryInfoByPath( | |
110 const FilePath& entry_path, | |
111 const fileapi::FileSystemOperationInterface::SnapshotFileCallback& | |
112 callback, | |
113 DriveFileError error, | |
114 scoped_ptr<DriveEntryProto> entry_proto); | |
115 | |
116 // Helper callback for relaying reply for ReadDirectory() to the calling | |
117 // thread. | |
118 void OnReadDirectory( | |
119 const fileapi::FileSystemOperationInterface::ReadDirectoryCallback& | |
120 callback, | |
121 DriveFileError error, | |
122 bool hide_hosted_documents, | |
123 scoped_ptr<DriveEntryProtoVector> proto_entries); | |
124 | |
125 // Helper callback for relaying reply for CreateWritableSnapshotFile() to | |
126 // the calling thread. | |
127 void OnCreateWritableSnapshotFile( | |
128 const FilePath& virtual_path, | |
129 const fileapi::WritableSnapshotFile& callback, | |
130 DriveFileError result, | |
131 const FilePath& local_path); | |
132 | |
133 // Helper callback for closing the local cache file and committing the dirty | |
134 // flag. This is triggered when the callback for CreateWritableSnapshotFile | |
135 // released the refcounted reference to the file. | |
136 void CloseWritableSnapshotFile( | |
137 const FilePath& virtual_path, | |
138 const FilePath& local_path); | |
139 | |
140 // Invoked during Truncate() operation. This is called when a local modifiable | |
141 // cache is ready for truncation. | |
142 void OnFileOpenedForTruncate( | |
143 const FilePath& virtual_path, | |
144 int64 length, | |
145 const fileapi::FileSystemOperationInterface::StatusCallback& callback, | |
146 DriveFileError open_result, | |
147 const FilePath& local_cache_path); | |
148 | |
149 // Invoked during Truncate() operation. This is called when the truncation of | |
150 // a local cache file is finished on FILE thread. | |
151 void DidTruncate( | |
152 const FilePath& virtual_path, | |
153 const fileapi::FileSystemOperationInterface::StatusCallback& callback, | |
154 base::PlatformFileError* truncate_result); | |
155 | |
156 // Invoked during OpenFile() operation when truncate or write flags are set. | |
157 // This is called when a local modifiable cached file is ready for such | |
158 // operation. | |
159 void OnOpenFileForWriting( | |
160 int file_flags, | |
161 base::ProcessHandle peer_handle, | |
162 const fileapi::FileSystemOperationInterface::OpenFileCallback& callback, | |
163 DriveFileError file_error, | |
164 const FilePath& local_cache_path); | |
165 | |
166 // Invoked during OpenFile() operation when file create flags are set. | |
167 void OnCreateFileForOpen( | |
168 const FilePath& file_path, | |
169 int file_flags, | |
170 base::ProcessHandle peer_handle, | |
171 const fileapi::FileSystemOperationInterface::OpenFileCallback& callback, | |
172 DriveFileError file_error); | |
173 | |
174 // Invoked during OpenFile() operation when base::PLATFORM_FILE_OPEN_TRUNCATED | |
175 // flag is set. This is called when the truncation of a local cache file is | |
176 // finished on FILE thread. | |
177 void OnOpenAndTruncate( | |
178 base::ProcessHandle peer_handle, | |
179 const fileapi::FileSystemOperationInterface::OpenFileCallback& callback, | |
180 base::PlatformFile* platform_file, | |
181 base::PlatformFileError* truncate_result); | |
182 | |
183 // GDataFileSystem is owned by Profile, which outlives GDataFileSystemProxy, | |
184 // which is owned by CrosMountPointProvider (i.e. by the time Profile is | |
185 // removed, the file manager is already gone). Hence it's safe to use this as | |
186 // a raw pointer. | |
187 GDataFileSystemInterface* file_system_; | |
188 }; | |
189 | |
190 } // namespace chromeos | |
191 | |
192 #endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_FILE_SYSTEM_PROXY_H_ | |
OLD | NEW |