OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ | 5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ |
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ | 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/platform_file.h" | 13 #include "base/platform_file.h" |
14 #include "chrome/browser/extensions/extension_function.h" | 14 #include "chrome/browser/extensions/extension_function.h" |
15 #include "googleurl/src/url_util.h" | 15 #include "googleurl/src/url_util.h" |
16 #include "webkit/fileapi/file_system_callback_dispatcher.h" | 16 #include "webkit/fileapi/file_system_callback_dispatcher.h" |
17 | 17 |
18 #ifdef OS_CHROMEOS | 18 #ifdef OS_CHROMEOS |
19 #include "chrome/browser/chromeos/cros/mount_library.h" | 19 #include "chrome/browser/chromeos/disks/disk_mount_manager.h" |
20 #endif | 20 #endif |
21 | 21 |
22 class GURL; | 22 class GURL; |
23 | 23 |
24 // Implements the chrome.fileBrowserPrivate.requestLocalFileSystem method. | 24 // Implements the chrome.fileBrowserPrivate.requestLocalFileSystem method. |
25 class RequestLocalFileSystemFunction : public AsyncExtensionFunction { | 25 class RequestLocalFileSystemFunction : public AsyncExtensionFunction { |
26 protected: | 26 protected: |
27 friend class LocalFileSystemCallbackDispatcher; | |
28 // AsyncExtensionFunction overrides. | 27 // AsyncExtensionFunction overrides. |
29 virtual bool RunImpl() OVERRIDE; | 28 virtual bool RunImpl() OVERRIDE; |
| 29 |
| 30 private: |
| 31 class LocalFileSystemCallbackDispatcher; |
| 32 |
30 void RespondSuccessOnUIThread(const std::string& name, | 33 void RespondSuccessOnUIThread(const std::string& name, |
31 const GURL& root_path); | 34 const GURL& root_path); |
32 void RespondFailedOnUIThread(base::PlatformFileError error_code); | 35 void RespondFailedOnUIThread(base::PlatformFileError error_code); |
33 void RequestOnFileThread(const GURL& source_url, int child_id); | 36 void RequestOnFileThread(const GURL& source_url, int child_id); |
34 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.requestLocalFileSystem"); | 37 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.requestLocalFileSystem"); |
35 }; | 38 }; |
36 | 39 |
37 // Implements the chrome.fileBrowserPrivate.addFileWatch method. | 40 // Implements the chrome.fileBrowserPrivate.addFileWatch method. |
38 class FileWatchBrowserFunctionBase : public AsyncExtensionFunction { | 41 class FileWatchBrowserFunctionBase : public AsyncExtensionFunction { |
39 protected: | 42 protected: |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 // AsyncExtensionFunction overrides. | 95 // AsyncExtensionFunction overrides. |
93 virtual bool RunImpl() OVERRIDE; | 96 virtual bool RunImpl() OVERRIDE; |
94 | 97 |
95 private: | 98 private: |
96 struct FileDefinition { | 99 struct FileDefinition { |
97 GURL target_file_url; | 100 GURL target_file_url; |
98 FilePath virtual_path; | 101 FilePath virtual_path; |
99 bool is_directory; | 102 bool is_directory; |
100 }; | 103 }; |
101 typedef std::vector<FileDefinition> FileDefinitionList; | 104 typedef std::vector<FileDefinition> FileDefinitionList; |
102 friend class ExecuteTasksFileSystemCallbackDispatcher; | 105 class ExecuteTasksFileSystemCallbackDispatcher; |
103 // Initates execution of context menu tasks identified with |task_id| for | 106 // Initates execution of context menu tasks identified with |task_id| for |
104 // each element of |files_list|. | 107 // each element of |files_list|. |
105 bool InitiateFileTaskExecution(const std::string& task_id, | 108 bool InitiateFileTaskExecution(const std::string& task_id, |
106 base::ListValue* files_list); | 109 base::ListValue* files_list); |
107 void RequestFileEntryOnFileThread(const GURL& source_url, | 110 void RequestFileEntryOnFileThread(const GURL& source_url, |
108 const std::string& task_id, | 111 const std::string& task_id, |
109 const std::vector<GURL>& file_urls); | 112 const std::vector<GURL>& file_urls); |
110 void RespondFailedOnUIThread(base::PlatformFileError error_code); | 113 void RespondFailedOnUIThread(base::PlatformFileError error_code); |
111 void ExecuteFileActionsOnUIThread(const std::string& task_id, | 114 void ExecuteFileActionsOnUIThread(const std::string& task_id, |
112 const std::string& file_system_name, | 115 const std::string& file_system_name, |
113 const GURL& file_system_root, | 116 const GURL& file_system_root, |
114 const FileDefinitionList& file_list); | 117 const FileDefinitionList& file_list); |
115 void ExecuteFailedOnUIThread(); | 118 void ExecuteFailedOnUIThread(); |
116 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.executeTask"); | 119 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.executeTask"); |
117 }; | 120 }; |
118 | 121 |
119 // Parent class for the chromium extension APIs for the file dialog. | 122 // Parent class for the chromium extension APIs for the file dialog. |
120 class FileBrowserFunction | 123 class FileBrowserFunction |
121 : public AsyncExtensionFunction { | 124 : public AsyncExtensionFunction { |
122 public: | 125 public: |
123 FileBrowserFunction(); | 126 FileBrowserFunction(); |
124 | 127 |
125 protected: | 128 protected: |
126 typedef std::vector<GURL> UrlList; | 129 typedef std::vector<GURL> UrlList; |
127 typedef std::vector<FilePath> FilePathList; | 130 typedef std::vector<FilePath> FilePathList; |
| 131 typedef base::Callback<void(const FilePathList&)> GetLocalPathsCallback; |
128 | 132 |
129 virtual ~FileBrowserFunction(); | 133 virtual ~FileBrowserFunction(); |
130 | 134 |
131 // Convert virtual paths to local paths on the file thread. | 135 // Converts virtual paths to local paths by calling GetLocalPathsOnFileThread |
132 void GetLocalPathsOnFileThread(const UrlList& file_urls, | 136 // on the file thread and call |callback| on the UI thread with the result. |
133 void* context); | 137 void GetLocalPathsOnFileThreadAndRunCallbackOnUIThread( |
134 | 138 const UrlList& file_urls, |
135 // Callback with converted local paths. | 139 GetLocalPathsCallback callback); |
136 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | |
137 void* context) {} | |
138 | 140 |
139 // Figure out the tab_id of the hosting tab. | 141 // Figure out the tab_id of the hosting tab. |
140 int32 GetTabId() const; | 142 int32 GetTabId() const; |
| 143 |
| 144 private: |
| 145 // Converts virtual paths to local paths and call |callback| (on the UI |
| 146 // thread) with the results. |
| 147 // This method must be called from the file thread. |
| 148 void GetLocalPathsOnFileThread(const UrlList& file_urls, |
| 149 GetLocalPathsCallback callback); |
141 }; | 150 }; |
142 | 151 |
143 // Select a single file. Closes the dialog window. | 152 // Select a single file. Closes the dialog window. |
144 class SelectFileFunction | 153 class SelectFileFunction |
145 : public FileBrowserFunction { | 154 : public FileBrowserFunction { |
146 public: | 155 public: |
147 SelectFileFunction() {} | 156 SelectFileFunction() {} |
148 | 157 |
149 protected: | 158 protected: |
150 virtual ~SelectFileFunction() {} | 159 virtual ~SelectFileFunction() {} |
151 | 160 |
152 // AsyncExtensionFunction overrides. | 161 // AsyncExtensionFunction overrides. |
153 virtual bool RunImpl() OVERRIDE; | 162 virtual bool RunImpl() OVERRIDE; |
154 | 163 |
155 // FileBrowserFunction overrides. | 164 private: |
156 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | 165 // A callback method to handle the result of |
157 void* context) OVERRIDE; | 166 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 167 void GetLocalPathsResponseOnUIThread(const FilePathList& files); |
158 | 168 |
159 private: | |
160 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFile"); | 169 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFile"); |
161 }; | 170 }; |
162 | 171 |
163 // View multiple selected files. Window stays open. | 172 // View multiple selected files. Window stays open. |
164 class ViewFilesFunction | 173 class ViewFilesFunction |
165 : public FileBrowserFunction { | 174 : public FileBrowserFunction { |
166 public: | 175 public: |
167 ViewFilesFunction(); | 176 ViewFilesFunction(); |
168 | 177 |
169 protected: | 178 protected: |
170 virtual ~ViewFilesFunction(); | 179 virtual ~ViewFilesFunction(); |
171 | 180 |
172 // AsyncExtensionFunction overrides. | 181 // AsyncExtensionFunction overrides. |
173 virtual bool RunImpl() OVERRIDE; | 182 virtual bool RunImpl() OVERRIDE; |
174 | 183 |
175 // FileBrowserFunction overrides. | 184 private: |
176 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | 185 // A callback method to handle the result of |
177 void* context) OVERRIDE; | 186 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 187 void GetLocalPathsResponseOnUIThread(const std::string& internal_task_id, |
| 188 const FilePathList& files); |
178 | 189 |
179 private: | |
180 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.viewFiles"); | 190 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.viewFiles"); |
181 }; | 191 }; |
182 | 192 |
183 // Select multiple files. Closes the dialog window. | 193 // Select multiple files. Closes the dialog window. |
184 class SelectFilesFunction | 194 class SelectFilesFunction |
185 : public FileBrowserFunction { | 195 : public FileBrowserFunction { |
186 public: | 196 public: |
187 SelectFilesFunction(); | 197 SelectFilesFunction(); |
188 | 198 |
189 protected: | 199 protected: |
190 virtual ~SelectFilesFunction(); | 200 virtual ~SelectFilesFunction(); |
191 | 201 |
192 // AsyncExtensionFunction overrides. | 202 // AsyncExtensionFunction overrides. |
193 virtual bool RunImpl() OVERRIDE; | 203 virtual bool RunImpl() OVERRIDE; |
194 | 204 |
195 // FileBrowserFunction overrides. | 205 private: |
196 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | 206 // A callback method to handle the result of |
197 void* context) OVERRIDE; | 207 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 208 void GetLocalPathsResponseOnUIThread(const FilePathList& files); |
198 | 209 |
199 private: | |
200 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFiles"); | 210 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFiles"); |
201 }; | 211 }; |
202 | 212 |
203 // Cancel file selection Dialog. Closes the dialog window. | 213 // Cancel file selection Dialog. Closes the dialog window. |
204 class CancelFileDialogFunction | 214 class CancelFileDialogFunction |
205 : public FileBrowserFunction { | 215 : public FileBrowserFunction { |
206 public: | 216 public: |
207 CancelFileDialogFunction() {} | 217 CancelFileDialogFunction() {} |
208 | 218 |
209 protected: | 219 protected: |
210 virtual ~CancelFileDialogFunction() {} | 220 virtual ~CancelFileDialogFunction() {} |
211 | 221 |
212 // AsyncExtensionFunction overrides. | 222 // AsyncExtensionFunction overrides. |
213 virtual bool RunImpl() OVERRIDE; | 223 virtual bool RunImpl() OVERRIDE; |
214 | 224 |
215 private: | 225 private: |
216 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.cancelDialog"); | 226 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.cancelDialog"); |
217 }; | 227 }; |
218 | 228 |
219 // Mount a device or a file. | 229 // Mount a device or a file. |
220 class AddMountFunction | 230 class AddMountFunction |
221 : public FileBrowserFunction { | 231 : public FileBrowserFunction { |
222 public: | 232 public: |
223 AddMountFunction(); | 233 AddMountFunction(); |
224 | 234 |
225 protected: | 235 protected: |
226 virtual ~AddMountFunction(); | 236 virtual ~AddMountFunction(); |
227 | 237 |
| 238 // AsyncExtensionFunction overrides. |
228 virtual bool RunImpl() OVERRIDE; | 239 virtual bool RunImpl() OVERRIDE; |
229 | 240 |
230 // FileBrowserFunction overrides. | |
231 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | |
232 void* context) OVERRIDE; | |
233 | |
234 private: | 241 private: |
235 #if defined(OS_CHROMEOS) | 242 // A callback method to handle the result of |
236 struct MountParamaters { | 243 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
237 MountParamaters(const std::string& type, | 244 void GetLocalPathsResponseOnUIThread(const std::string& mount_type_str, |
238 const chromeos::MountPathOptions& options) | 245 const FilePathList& files); |
239 : mount_type(type), mount_options(options) {} | |
240 ~MountParamaters() {} | |
241 std::string mount_type; | |
242 chromeos::MountPathOptions mount_options; | |
243 }; | |
244 #endif | |
245 | 246 |
246 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.addMount"); | 247 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.addMount"); |
247 }; | 248 }; |
248 | 249 |
249 // Unmounts selected device. Expects mount point path as an argument. | 250 // Unmounts selected device. Expects mount point path as an argument. |
250 class RemoveMountFunction | 251 class RemoveMountFunction |
251 : public FileBrowserFunction { | 252 : public FileBrowserFunction { |
252 public: | 253 public: |
253 RemoveMountFunction(); | 254 RemoveMountFunction(); |
254 | 255 |
255 protected: | 256 protected: |
256 virtual ~RemoveMountFunction(); | 257 virtual ~RemoveMountFunction(); |
257 | 258 |
258 // FileBrowserFunction overrides. | 259 // AsyncExtensionFunction overrides. |
259 virtual bool RunImpl() OVERRIDE; | 260 virtual bool RunImpl() OVERRIDE; |
260 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | |
261 void* context) OVERRIDE; | |
262 | 261 |
263 private: | 262 private: |
| 263 // A callback method to handle the result of |
| 264 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 265 void GetLocalPathsResponseOnUIThread(const FilePathList& files); |
| 266 |
264 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.removeMount"); | 267 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.removeMount"); |
265 }; | 268 }; |
266 | 269 |
267 class GetMountPointsFunction | 270 class GetMountPointsFunction |
268 : public AsyncExtensionFunction { | 271 : public AsyncExtensionFunction { |
269 public: | 272 public: |
270 GetMountPointsFunction(); | 273 GetMountPointsFunction(); |
271 | 274 |
272 protected: | 275 protected: |
273 virtual ~GetMountPointsFunction(); | 276 virtual ~GetMountPointsFunction(); |
274 | 277 |
| 278 // AsyncExtensionFunction overrides. |
275 virtual bool RunImpl() OVERRIDE; | 279 virtual bool RunImpl() OVERRIDE; |
276 | 280 |
277 private: | 281 private: |
278 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getMountPoints"); | 282 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getMountPoints"); |
279 }; | 283 }; |
280 | 284 |
281 // Formats Device given its mount path. | 285 // Formats Device given its mount path. |
282 class FormatDeviceFunction | 286 class FormatDeviceFunction |
283 : public FileBrowserFunction { | 287 : public FileBrowserFunction { |
284 public: | 288 public: |
285 FormatDeviceFunction(); | 289 FormatDeviceFunction(); |
286 | 290 |
287 protected: | 291 protected: |
288 virtual ~FormatDeviceFunction(); | 292 virtual ~FormatDeviceFunction(); |
289 | 293 |
| 294 // AsyncExtensionFunction overrides. |
290 virtual bool RunImpl() OVERRIDE; | 295 virtual bool RunImpl() OVERRIDE; |
291 | 296 |
292 // FileBrowserFunction overrides. | 297 private: |
293 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | 298 // A callback method to handle the result of |
294 void* context) OVERRIDE; | 299 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 300 void GetLocalPathsResponseOnUIThread(const FilePathList& files); |
295 | 301 |
296 private: | |
297 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.formatDevice"); | 302 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.formatDevice"); |
298 }; | 303 }; |
299 | 304 |
300 class GetSizeStatsFunction | 305 class GetSizeStatsFunction |
301 : public FileBrowserFunction { | 306 : public FileBrowserFunction { |
302 public: | 307 public: |
303 GetSizeStatsFunction(); | 308 GetSizeStatsFunction(); |
304 | 309 |
305 protected: | 310 protected: |
306 virtual ~GetSizeStatsFunction(); | 311 virtual ~GetSizeStatsFunction(); |
307 | 312 |
308 // FileBrowserFunction overrides. | 313 // AsyncExtensionFunction overrides. |
309 virtual bool RunImpl() OVERRIDE; | 314 virtual bool RunImpl() OVERRIDE; |
310 virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files, | |
311 void* context) OVERRIDE; | |
312 | 315 |
313 private: | 316 private: |
314 void GetSizeStatsCallbackOnUIThread(const char* mount_path, | 317 // A callback method to handle the result of |
| 318 // GetLocalPathsOnFileThreadAndRunCallbackOnUIThread. |
| 319 void GetLocalPathsResponseOnUIThread(const FilePathList& files); |
| 320 |
| 321 void GetSizeStatsCallbackOnUIThread(const std::string& mount_path, |
315 size_t total_size_kb, | 322 size_t total_size_kb, |
316 size_t remaining_size_kb); | 323 size_t remaining_size_kb); |
317 void CallGetSizeStatsOnFileThread(const char* mount_path); | 324 void CallGetSizeStatsOnFileThread(const std::string& mount_path); |
318 | 325 |
319 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getSizeStats"); | 326 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getSizeStats"); |
320 }; | 327 }; |
321 | 328 |
322 // Retrieves devices meta-data. Expects volume's device path as an argument. | 329 // Retrieves devices meta-data. Expects volume's device path as an argument. |
323 class GetVolumeMetadataFunction | 330 class GetVolumeMetadataFunction |
324 : public SyncExtensionFunction { | 331 : public SyncExtensionFunction { |
325 public: | 332 public: |
326 GetVolumeMetadataFunction(); | 333 GetVolumeMetadataFunction(); |
327 | 334 |
(...skipping 19 matching lines...) Expand all Loading... |
347 virtual ~FileDialogStringsFunction() {} | 354 virtual ~FileDialogStringsFunction() {} |
348 | 355 |
349 // SyncExtensionFunction overrides. | 356 // SyncExtensionFunction overrides. |
350 virtual bool RunImpl() OVERRIDE; | 357 virtual bool RunImpl() OVERRIDE; |
351 | 358 |
352 private: | 359 private: |
353 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getStrings"); | 360 DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getStrings"); |
354 }; | 361 }; |
355 | 362 |
356 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ | 363 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_ |
OLD | NEW |