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 #include "chrome/browser/chromeos/fileapi/file_system_backend.h" | 5 #include "chrome/browser/chromeos/fileapi/file_system_backend.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 namespace chromeos { | 27 namespace chromeos { |
28 | 28 |
29 // static | 29 // static |
30 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { | 30 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { |
31 if (!url.is_valid()) | 31 if (!url.is_valid()) |
32 return false; | 32 return false; |
33 return url.type() == storage::kFileSystemTypeNativeLocal || | 33 return url.type() == storage::kFileSystemTypeNativeLocal || |
34 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 34 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
35 url.type() == storage::kFileSystemTypeDrive || | 35 url.type() == storage::kFileSystemTypeDrive || |
36 url.type() == storage::kFileSystemTypeProvided || | 36 url.type() == storage::kFileSystemTypeProvided || |
| 37 url.type() == storage::kFileSystemTypePluginProvided || |
37 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; | 38 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; |
38 } | 39 } |
39 | 40 |
40 FileSystemBackend::FileSystemBackend( | 41 FileSystemBackend::FileSystemBackend( |
41 FileSystemBackendDelegate* drive_delegate, | 42 FileSystemBackendDelegate* drive_delegate, |
42 FileSystemBackendDelegate* file_system_provider_delegate, | 43 FileSystemBackendDelegate* file_system_provider_delegate, |
43 FileSystemBackendDelegate* mtp_delegate, | 44 FileSystemBackendDelegate* mtp_delegate, |
44 scoped_refptr<storage::ExternalMountPoints> mount_points, | 45 scoped_refptr<storage::ExternalMountPoints> mount_points, |
45 storage::ExternalMountPoints* system_mount_points) | 46 storage::ExternalMountPoints* system_mount_points) |
46 : file_access_permissions_(new FileAccessPermissions()), | 47 : file_access_permissions_(new FileAccessPermissions()), |
(...skipping 30 matching lines...) Expand all Loading... |
77 | 78 |
78 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { | 79 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { |
79 switch (type) { | 80 switch (type) { |
80 case storage::kFileSystemTypeExternal: | 81 case storage::kFileSystemTypeExternal: |
81 case storage::kFileSystemTypeDrive: | 82 case storage::kFileSystemTypeDrive: |
82 case storage::kFileSystemTypeRestrictedNativeLocal: | 83 case storage::kFileSystemTypeRestrictedNativeLocal: |
83 case storage::kFileSystemTypeNativeLocal: | 84 case storage::kFileSystemTypeNativeLocal: |
84 case storage::kFileSystemTypeNativeForPlatformApp: | 85 case storage::kFileSystemTypeNativeForPlatformApp: |
85 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 86 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
86 case storage::kFileSystemTypeProvided: | 87 case storage::kFileSystemTypeProvided: |
| 88 case storage::kFileSystemTypePluginProvided: |
87 return true; | 89 return true; |
88 default: | 90 default: |
89 return false; | 91 return false; |
90 } | 92 } |
91 } | 93 } |
92 | 94 |
93 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { | 95 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { |
94 } | 96 } |
95 | 97 |
96 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, | 98 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 root_dirs.push_back(mount_points[i].path); | 223 root_dirs.push_back(mount_points[i].path); |
222 return root_dirs; | 224 return root_dirs; |
223 } | 225 } |
224 | 226 |
225 storage::AsyncFileUtil* FileSystemBackend::GetAsyncFileUtil( | 227 storage::AsyncFileUtil* FileSystemBackend::GetAsyncFileUtil( |
226 storage::FileSystemType type) { | 228 storage::FileSystemType type) { |
227 switch (type) { | 229 switch (type) { |
228 case storage::kFileSystemTypeDrive: | 230 case storage::kFileSystemTypeDrive: |
229 return drive_delegate_->GetAsyncFileUtil(type); | 231 return drive_delegate_->GetAsyncFileUtil(type); |
230 case storage::kFileSystemTypeProvided: | 232 case storage::kFileSystemTypeProvided: |
| 233 case storage::kFileSystemTypePluginProvided: |
231 return file_system_provider_delegate_->GetAsyncFileUtil(type); | 234 return file_system_provider_delegate_->GetAsyncFileUtil(type); |
232 case storage::kFileSystemTypeNativeLocal: | 235 case storage::kFileSystemTypeNativeLocal: |
233 case storage::kFileSystemTypeRestrictedNativeLocal: | 236 case storage::kFileSystemTypeRestrictedNativeLocal: |
234 return local_file_util_.get(); | 237 return local_file_util_.get(); |
235 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 238 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
236 return mtp_delegate_->GetAsyncFileUtil(type); | 239 return mtp_delegate_->GetAsyncFileUtil(type); |
237 default: | 240 default: |
238 NOTREACHED(); | 241 NOTREACHED(); |
239 } | 242 } |
240 return NULL; | 243 return NULL; |
241 } | 244 } |
242 | 245 |
243 storage::WatcherManager* FileSystemBackend::GetWatcherManager( | 246 storage::WatcherManager* FileSystemBackend::GetWatcherManager( |
244 storage::FileSystemType type) { | 247 storage::FileSystemType type) { |
245 if (type == storage::kFileSystemTypeProvided) | 248 if (type == storage::kFileSystemTypeProvided || |
| 249 type == storage::kFileSystemTypePluginProvided) |
246 return file_system_provider_delegate_->GetWatcherManager(type); | 250 return file_system_provider_delegate_->GetWatcherManager(type); |
247 | 251 |
248 if (type == storage::kFileSystemTypeDeviceMediaAsFileStorage && | 252 if (type == storage::kFileSystemTypeDeviceMediaAsFileStorage && |
249 !base::CommandLine::ForCurrentProcess()->HasSwitch( | 253 !base::CommandLine::ForCurrentProcess()->HasSwitch( |
250 chromeos::switches::kDisableMtpWriteSupport)) { | 254 chromeos::switches::kDisableMtpWriteSupport)) { |
251 return mtp_delegate_->GetWatcherManager(type); | 255 return mtp_delegate_->GetWatcherManager(type); |
252 } | 256 } |
253 | 257 |
254 // TODO(mtomasz): Add support for other backends. | 258 // TODO(mtomasz): Add support for other backends. |
255 return NULL; | 259 return NULL; |
(...skipping 24 matching lines...) Expand all Loading... |
280 return storage::FileSystemOperation::Create( | 284 return storage::FileSystemOperation::Create( |
281 url, | 285 url, |
282 context, | 286 context, |
283 make_scoped_ptr(new storage::FileSystemOperationContext( | 287 make_scoped_ptr(new storage::FileSystemOperationContext( |
284 context, MediaFileSystemBackend::MediaTaskRunner().get()))); | 288 context, MediaFileSystemBackend::MediaTaskRunner().get()))); |
285 } | 289 } |
286 | 290 |
287 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || | 291 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || |
288 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 292 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
289 url.type() == storage::kFileSystemTypeDrive || | 293 url.type() == storage::kFileSystemTypeDrive || |
290 url.type() == storage::kFileSystemTypeProvided); | 294 url.type() == storage::kFileSystemTypeProvided || |
| 295 url.type() == storage::kFileSystemTypePluginProvided); |
291 return storage::FileSystemOperation::Create( | 296 return storage::FileSystemOperation::Create( |
292 url, | 297 url, |
293 context, | 298 context, |
294 make_scoped_ptr(new storage::FileSystemOperationContext(context))); | 299 make_scoped_ptr(new storage::FileSystemOperationContext(context))); |
295 } | 300 } |
296 | 301 |
297 bool FileSystemBackend::SupportsStreaming( | 302 bool FileSystemBackend::SupportsStreaming( |
298 const storage::FileSystemURL& url) const { | 303 const storage::FileSystemURL& url) const { |
299 return url.type() == storage::kFileSystemTypeDrive || | 304 return url.type() == storage::kFileSystemTypeDrive || |
300 url.type() == storage::kFileSystemTypeProvided || | 305 url.type() == storage::kFileSystemTypeProvided || |
| 306 url.type() == storage::kFileSystemTypePluginProvided || |
301 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; | 307 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage; |
302 } | 308 } |
303 | 309 |
304 bool FileSystemBackend::HasInplaceCopyImplementation( | 310 bool FileSystemBackend::HasInplaceCopyImplementation( |
305 storage::FileSystemType type) const { | 311 storage::FileSystemType type) const { |
306 switch (type) { | 312 switch (type) { |
307 case storage::kFileSystemTypeDrive: | 313 case storage::kFileSystemTypeDrive: |
308 case storage::kFileSystemTypeProvided: | 314 case storage::kFileSystemTypeProvided: |
| 315 case storage::kFileSystemTypePluginProvided: |
309 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 316 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
310 return true; | 317 return true; |
311 case storage::kFileSystemTypeNativeLocal: | 318 case storage::kFileSystemTypeNativeLocal: |
312 case storage::kFileSystemTypeRestrictedNativeLocal: | 319 case storage::kFileSystemTypeRestrictedNativeLocal: |
313 return false; | 320 return false; |
314 default: | 321 default: |
315 NOTREACHED(); | 322 NOTREACHED(); |
316 } | 323 } |
317 return true; | 324 return true; |
318 } | 325 } |
319 | 326 |
320 scoped_ptr<storage::FileStreamReader> FileSystemBackend::CreateFileStreamReader( | 327 scoped_ptr<storage::FileStreamReader> FileSystemBackend::CreateFileStreamReader( |
321 const storage::FileSystemURL& url, | 328 const storage::FileSystemURL& url, |
322 int64 offset, | 329 int64 offset, |
323 int64 max_bytes_to_read, | 330 int64 max_bytes_to_read, |
324 const base::Time& expected_modification_time, | 331 const base::Time& expected_modification_time, |
325 storage::FileSystemContext* context) const { | 332 storage::FileSystemContext* context) const { |
326 DCHECK(url.is_valid()); | 333 DCHECK(url.is_valid()); |
327 | 334 |
328 if (!IsAccessAllowed(url)) | 335 if (!IsAccessAllowed(url)) |
329 return scoped_ptr<storage::FileStreamReader>(); | 336 return scoped_ptr<storage::FileStreamReader>(); |
330 | 337 |
331 switch (url.type()) { | 338 switch (url.type()) { |
332 case storage::kFileSystemTypeDrive: | 339 case storage::kFileSystemTypeDrive: |
333 return drive_delegate_->CreateFileStreamReader( | 340 return drive_delegate_->CreateFileStreamReader( |
334 url, offset, max_bytes_to_read, expected_modification_time, context); | 341 url, offset, max_bytes_to_read, expected_modification_time, context); |
335 case storage::kFileSystemTypeProvided: | 342 case storage::kFileSystemTypeProvided: |
| 343 case storage::kFileSystemTypePluginProvided: |
336 return file_system_provider_delegate_->CreateFileStreamReader( | 344 return file_system_provider_delegate_->CreateFileStreamReader( |
337 url, offset, max_bytes_to_read, expected_modification_time, context); | 345 url, offset, max_bytes_to_read, expected_modification_time, context); |
338 case storage::kFileSystemTypeNativeLocal: | 346 case storage::kFileSystemTypeNativeLocal: |
339 case storage::kFileSystemTypeRestrictedNativeLocal: | 347 case storage::kFileSystemTypeRestrictedNativeLocal: |
340 return scoped_ptr<storage::FileStreamReader>( | 348 return scoped_ptr<storage::FileStreamReader>( |
341 storage::FileStreamReader::CreateForFileSystemFile( | 349 storage::FileStreamReader::CreateForFileSystemFile( |
342 context, url, offset, expected_modification_time)); | 350 context, url, offset, expected_modification_time)); |
343 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 351 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
344 return mtp_delegate_->CreateFileStreamReader( | 352 return mtp_delegate_->CreateFileStreamReader( |
345 url, offset, max_bytes_to_read, expected_modification_time, context); | 353 url, offset, max_bytes_to_read, expected_modification_time, context); |
346 default: | 354 default: |
347 NOTREACHED(); | 355 NOTREACHED(); |
348 } | 356 } |
349 return scoped_ptr<storage::FileStreamReader>(); | 357 return scoped_ptr<storage::FileStreamReader>(); |
350 } | 358 } |
351 | 359 |
352 scoped_ptr<storage::FileStreamWriter> FileSystemBackend::CreateFileStreamWriter( | 360 scoped_ptr<storage::FileStreamWriter> FileSystemBackend::CreateFileStreamWriter( |
353 const storage::FileSystemURL& url, | 361 const storage::FileSystemURL& url, |
354 int64 offset, | 362 int64 offset, |
355 storage::FileSystemContext* context) const { | 363 storage::FileSystemContext* context) const { |
356 DCHECK(url.is_valid()); | 364 DCHECK(url.is_valid()); |
357 | 365 |
358 if (!IsAccessAllowed(url)) | 366 if (!IsAccessAllowed(url)) |
359 return scoped_ptr<storage::FileStreamWriter>(); | 367 return scoped_ptr<storage::FileStreamWriter>(); |
360 | 368 |
361 switch (url.type()) { | 369 switch (url.type()) { |
362 case storage::kFileSystemTypeDrive: | 370 case storage::kFileSystemTypeDrive: |
363 return drive_delegate_->CreateFileStreamWriter(url, offset, context); | 371 return drive_delegate_->CreateFileStreamWriter(url, offset, context); |
364 case storage::kFileSystemTypeProvided: | 372 case storage::kFileSystemTypeProvided: |
| 373 case storage::kFileSystemTypePluginProvided: |
365 return file_system_provider_delegate_->CreateFileStreamWriter( | 374 return file_system_provider_delegate_->CreateFileStreamWriter( |
366 url, offset, context); | 375 url, offset, context); |
367 case storage::kFileSystemTypeNativeLocal: | 376 case storage::kFileSystemTypeNativeLocal: |
368 return scoped_ptr<storage::FileStreamWriter>( | 377 return scoped_ptr<storage::FileStreamWriter>( |
369 storage::FileStreamWriter::CreateForLocalFile( | 378 storage::FileStreamWriter::CreateForLocalFile( |
370 context->default_file_task_runner(), | 379 context->default_file_task_runner(), |
371 url.path(), | 380 url.path(), |
372 offset, | 381 offset, |
373 storage::FileStreamWriter::OPEN_EXISTING_FILE)); | 382 storage::FileStreamWriter::OPEN_EXISTING_FILE)); |
374 case storage::kFileSystemTypeRestrictedNativeLocal: | 383 case storage::kFileSystemTypeRestrictedNativeLocal: |
(...skipping 19 matching lines...) Expand all Loading... |
394 DCHECK(url.is_valid()); | 403 DCHECK(url.is_valid()); |
395 | 404 |
396 if (!IsAccessAllowed(url)) | 405 if (!IsAccessAllowed(url)) |
397 return callback.Run(GURL()); | 406 return callback.Run(GURL()); |
398 | 407 |
399 switch (url.type()) { | 408 switch (url.type()) { |
400 case storage::kFileSystemTypeDrive: | 409 case storage::kFileSystemTypeDrive: |
401 drive_delegate_->GetRedirectURLForContents(url, callback); | 410 drive_delegate_->GetRedirectURLForContents(url, callback); |
402 return; | 411 return; |
403 case storage::kFileSystemTypeProvided: | 412 case storage::kFileSystemTypeProvided: |
| 413 case storage::kFileSystemTypePluginProvided: |
404 file_system_provider_delegate_->GetRedirectURLForContents(url, | 414 file_system_provider_delegate_->GetRedirectURLForContents(url, |
405 callback); | 415 callback); |
406 return; | 416 return; |
407 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 417 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
408 mtp_delegate_->GetRedirectURLForContents(url, callback); | 418 mtp_delegate_->GetRedirectURLForContents(url, callback); |
409 return; | 419 return; |
410 case storage::kFileSystemTypeNativeLocal: | 420 case storage::kFileSystemTypeNativeLocal: |
411 case storage::kFileSystemTypeRestrictedNativeLocal: | 421 case storage::kFileSystemTypeRestrictedNativeLocal: |
412 callback.Run(GURL()); | 422 callback.Run(GURL()); |
413 return; | 423 return; |
414 default: | 424 default: |
415 NOTREACHED(); | 425 NOTREACHED(); |
416 } | 426 } |
417 callback.Run(GURL()); | 427 callback.Run(GURL()); |
418 } | 428 } |
419 | 429 |
420 storage::FileSystemURL FileSystemBackend::CreateInternalURL( | 430 storage::FileSystemURL FileSystemBackend::CreateInternalURL( |
421 storage::FileSystemContext* context, | 431 storage::FileSystemContext* context, |
422 const base::FilePath& entry_path) const { | 432 const base::FilePath& entry_path) const { |
423 base::FilePath virtual_path; | 433 base::FilePath virtual_path; |
424 if (!GetVirtualPath(entry_path, &virtual_path)) | 434 if (!GetVirtualPath(entry_path, &virtual_path)) |
425 return storage::FileSystemURL(); | 435 return storage::FileSystemURL(); |
426 | 436 |
427 return context->CreateCrackedFileSystemURL( | 437 return context->CreateCrackedFileSystemURL( |
428 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); | 438 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); |
429 } | 439 } |
430 | 440 |
431 } // namespace chromeos | 441 } // namespace chromeos |
OLD | NEW |