| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 | 42 |
| 43 // static | 43 // static |
| 44 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { | 44 bool FileSystemBackend::CanHandleURL(const storage::FileSystemURL& url) { |
| 45 if (!url.is_valid()) | 45 if (!url.is_valid()) |
| 46 return false; | 46 return false; |
| 47 return url.type() == storage::kFileSystemTypeNativeLocal || | 47 return url.type() == storage::kFileSystemTypeNativeLocal || |
| 48 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 48 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
| 49 url.type() == storage::kFileSystemTypeDrive || | 49 url.type() == storage::kFileSystemTypeDrive || |
| 50 url.type() == storage::kFileSystemTypeProvided || | 50 url.type() == storage::kFileSystemTypeProvided || |
| 51 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage || | 51 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage || |
| 52 url.type() == storage::kFileSystemTypeArcContent; | 52 url.type() == storage::kFileSystemTypeArcContent || |
| 53 url.type() == storage::kFileSystemTypeArcDocumentsProvider; |
| 53 } | 54 } |
| 54 | 55 |
| 55 FileSystemBackend::FileSystemBackend( | 56 FileSystemBackend::FileSystemBackend( |
| 56 std::unique_ptr<FileSystemBackendDelegate> drive_delegate, | 57 std::unique_ptr<FileSystemBackendDelegate> drive_delegate, |
| 57 std::unique_ptr<FileSystemBackendDelegate> file_system_provider_delegate, | 58 std::unique_ptr<FileSystemBackendDelegate> file_system_provider_delegate, |
| 58 std::unique_ptr<FileSystemBackendDelegate> mtp_delegate, | 59 std::unique_ptr<FileSystemBackendDelegate> mtp_delegate, |
| 59 std::unique_ptr<FileSystemBackendDelegate> arc_content_delegate, | 60 std::unique_ptr<FileSystemBackendDelegate> arc_content_delegate, |
| 61 std::unique_ptr<FileSystemBackendDelegate> arc_documents_provider_delegate, |
| 60 scoped_refptr<storage::ExternalMountPoints> mount_points, | 62 scoped_refptr<storage::ExternalMountPoints> mount_points, |
| 61 storage::ExternalMountPoints* system_mount_points) | 63 storage::ExternalMountPoints* system_mount_points) |
| 62 : file_access_permissions_(new FileAccessPermissions()), | 64 : file_access_permissions_(new FileAccessPermissions()), |
| 63 local_file_util_(storage::AsyncFileUtil::CreateForLocalFileSystem()), | 65 local_file_util_(storage::AsyncFileUtil::CreateForLocalFileSystem()), |
| 64 drive_delegate_(std::move(drive_delegate)), | 66 drive_delegate_(std::move(drive_delegate)), |
| 65 file_system_provider_delegate_(std::move(file_system_provider_delegate)), | 67 file_system_provider_delegate_(std::move(file_system_provider_delegate)), |
| 66 mtp_delegate_(std::move(mtp_delegate)), | 68 mtp_delegate_(std::move(mtp_delegate)), |
| 67 arc_content_delegate_(std::move(arc_content_delegate)), | 69 arc_content_delegate_(std::move(arc_content_delegate)), |
| 70 arc_documents_provider_delegate_( |
| 71 std::move(arc_documents_provider_delegate)), |
| 68 mount_points_(mount_points), | 72 mount_points_(mount_points), |
| 69 system_mount_points_(system_mount_points) {} | 73 system_mount_points_(system_mount_points) {} |
| 70 | 74 |
| 71 FileSystemBackend::~FileSystemBackend() { | 75 FileSystemBackend::~FileSystemBackend() { |
| 72 } | 76 } |
| 73 | 77 |
| 74 void FileSystemBackend::AddSystemMountPoints() { | 78 void FileSystemBackend::AddSystemMountPoints() { |
| 75 // RegisterFileSystem() is no-op if the mount point with the same name | 79 // RegisterFileSystem() is no-op if the mount point with the same name |
| 76 // already exists, hence it's safe to call without checking if a mount | 80 // already exists, hence it's safe to call without checking if a mount |
| 77 // point already exists or not. | 81 // point already exists or not. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 94 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { | 98 bool FileSystemBackend::CanHandleType(storage::FileSystemType type) const { |
| 95 switch (type) { | 99 switch (type) { |
| 96 case storage::kFileSystemTypeExternal: | 100 case storage::kFileSystemTypeExternal: |
| 97 case storage::kFileSystemTypeDrive: | 101 case storage::kFileSystemTypeDrive: |
| 98 case storage::kFileSystemTypeRestrictedNativeLocal: | 102 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 99 case storage::kFileSystemTypeNativeLocal: | 103 case storage::kFileSystemTypeNativeLocal: |
| 100 case storage::kFileSystemTypeNativeForPlatformApp: | 104 case storage::kFileSystemTypeNativeForPlatformApp: |
| 101 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 105 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 102 case storage::kFileSystemTypeProvided: | 106 case storage::kFileSystemTypeProvided: |
| 103 case storage::kFileSystemTypeArcContent: | 107 case storage::kFileSystemTypeArcContent: |
| 108 case storage::kFileSystemTypeArcDocumentsProvider: |
| 104 return true; | 109 return true; |
| 105 default: | 110 default: |
| 106 return false; | 111 return false; |
| 107 } | 112 } |
| 108 } | 113 } |
| 109 | 114 |
| 110 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { | 115 void FileSystemBackend::Initialize(storage::FileSystemContext* context) { |
| 111 } | 116 } |
| 112 | 117 |
| 113 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, | 118 void FileSystemBackend::ResolveURL(const storage::FileSystemURL& url, |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 return drive_delegate_->GetAsyncFileUtil(type); | 251 return drive_delegate_->GetAsyncFileUtil(type); |
| 247 case storage::kFileSystemTypeProvided: | 252 case storage::kFileSystemTypeProvided: |
| 248 return file_system_provider_delegate_->GetAsyncFileUtil(type); | 253 return file_system_provider_delegate_->GetAsyncFileUtil(type); |
| 249 case storage::kFileSystemTypeNativeLocal: | 254 case storage::kFileSystemTypeNativeLocal: |
| 250 case storage::kFileSystemTypeRestrictedNativeLocal: | 255 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 251 return local_file_util_.get(); | 256 return local_file_util_.get(); |
| 252 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 257 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 253 return mtp_delegate_->GetAsyncFileUtil(type); | 258 return mtp_delegate_->GetAsyncFileUtil(type); |
| 254 case storage::kFileSystemTypeArcContent: | 259 case storage::kFileSystemTypeArcContent: |
| 255 return arc_content_delegate_->GetAsyncFileUtil(type); | 260 return arc_content_delegate_->GetAsyncFileUtil(type); |
| 261 case storage::kFileSystemTypeArcDocumentsProvider: |
| 262 return arc_documents_provider_delegate_->GetAsyncFileUtil(type); |
| 256 default: | 263 default: |
| 257 NOTREACHED(); | 264 NOTREACHED(); |
| 258 } | 265 } |
| 259 return NULL; | 266 return NULL; |
| 260 } | 267 } |
| 261 | 268 |
| 262 storage::WatcherManager* FileSystemBackend::GetWatcherManager( | 269 storage::WatcherManager* FileSystemBackend::GetWatcherManager( |
| 263 storage::FileSystemType type) { | 270 storage::FileSystemType type) { |
| 264 if (type == storage::kFileSystemTypeProvided) | 271 if (type == storage::kFileSystemTypeProvided) |
| 265 return file_system_provider_delegate_->GetWatcherManager(type); | 272 return file_system_provider_delegate_->GetWatcherManager(type); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 299 return storage::FileSystemOperation::Create( | 306 return storage::FileSystemOperation::Create( |
| 300 url, context, | 307 url, context, |
| 301 base::MakeUnique<storage::FileSystemOperationContext>( | 308 base::MakeUnique<storage::FileSystemOperationContext>( |
| 302 context, MediaFileSystemBackend::MediaTaskRunner().get())); | 309 context, MediaFileSystemBackend::MediaTaskRunner().get())); |
| 303 } | 310 } |
| 304 | 311 |
| 305 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || | 312 DCHECK(url.type() == storage::kFileSystemTypeNativeLocal || |
| 306 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || | 313 url.type() == storage::kFileSystemTypeRestrictedNativeLocal || |
| 307 url.type() == storage::kFileSystemTypeDrive || | 314 url.type() == storage::kFileSystemTypeDrive || |
| 308 url.type() == storage::kFileSystemTypeProvided || | 315 url.type() == storage::kFileSystemTypeProvided || |
| 309 url.type() == storage::kFileSystemTypeArcContent); | 316 url.type() == storage::kFileSystemTypeArcContent || |
| 317 url.type() == storage::kFileSystemTypeArcDocumentsProvider); |
| 310 return storage::FileSystemOperation::Create( | 318 return storage::FileSystemOperation::Create( |
| 311 url, context, | 319 url, context, |
| 312 base::MakeUnique<storage::FileSystemOperationContext>(context)); | 320 base::MakeUnique<storage::FileSystemOperationContext>(context)); |
| 313 } | 321 } |
| 314 | 322 |
| 315 bool FileSystemBackend::SupportsStreaming( | 323 bool FileSystemBackend::SupportsStreaming( |
| 316 const storage::FileSystemURL& url) const { | 324 const storage::FileSystemURL& url) const { |
| 317 return url.type() == storage::kFileSystemTypeDrive || | 325 return url.type() == storage::kFileSystemTypeDrive || |
| 318 url.type() == storage::kFileSystemTypeProvided || | 326 url.type() == storage::kFileSystemTypeProvided || |
| 319 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage || | 327 url.type() == storage::kFileSystemTypeDeviceMediaAsFileStorage || |
| 320 url.type() == storage::kFileSystemTypeArcContent; | 328 url.type() == storage::kFileSystemTypeArcContent || |
| 329 url.type() == storage::kFileSystemTypeArcDocumentsProvider; |
| 321 } | 330 } |
| 322 | 331 |
| 323 bool FileSystemBackend::HasInplaceCopyImplementation( | 332 bool FileSystemBackend::HasInplaceCopyImplementation( |
| 324 storage::FileSystemType type) const { | 333 storage::FileSystemType type) const { |
| 325 switch (type) { | 334 switch (type) { |
| 326 case storage::kFileSystemTypeDrive: | 335 case storage::kFileSystemTypeDrive: |
| 327 case storage::kFileSystemTypeProvided: | 336 case storage::kFileSystemTypeProvided: |
| 328 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 337 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 329 return true; | 338 return true; |
| 330 case storage::kFileSystemTypeNativeLocal: | 339 case storage::kFileSystemTypeNativeLocal: |
| 331 case storage::kFileSystemTypeRestrictedNativeLocal: | 340 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 332 case storage::kFileSystemTypeArcContent: | 341 case storage::kFileSystemTypeArcContent: |
| 342 case storage::kFileSystemTypeArcDocumentsProvider: |
| 333 return false; | 343 return false; |
| 334 default: | 344 default: |
| 335 NOTREACHED(); | 345 NOTREACHED(); |
| 336 } | 346 } |
| 337 return true; | 347 return true; |
| 338 } | 348 } |
| 339 | 349 |
| 340 std::unique_ptr<storage::FileStreamReader> | 350 std::unique_ptr<storage::FileStreamReader> |
| 341 FileSystemBackend::CreateFileStreamReader( | 351 FileSystemBackend::CreateFileStreamReader( |
| 342 const storage::FileSystemURL& url, | 352 const storage::FileSystemURL& url, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 360 case storage::kFileSystemTypeRestrictedNativeLocal: | 370 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 361 return std::unique_ptr<storage::FileStreamReader>( | 371 return std::unique_ptr<storage::FileStreamReader>( |
| 362 storage::FileStreamReader::CreateForFileSystemFile( | 372 storage::FileStreamReader::CreateForFileSystemFile( |
| 363 context, url, offset, expected_modification_time)); | 373 context, url, offset, expected_modification_time)); |
| 364 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 374 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 365 return mtp_delegate_->CreateFileStreamReader( | 375 return mtp_delegate_->CreateFileStreamReader( |
| 366 url, offset, max_bytes_to_read, expected_modification_time, context); | 376 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 367 case storage::kFileSystemTypeArcContent: | 377 case storage::kFileSystemTypeArcContent: |
| 368 return arc_content_delegate_->CreateFileStreamReader( | 378 return arc_content_delegate_->CreateFileStreamReader( |
| 369 url, offset, max_bytes_to_read, expected_modification_time, context); | 379 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 380 case storage::kFileSystemTypeArcDocumentsProvider: |
| 381 return arc_documents_provider_delegate_->CreateFileStreamReader( |
| 382 url, offset, max_bytes_to_read, expected_modification_time, context); |
| 370 default: | 383 default: |
| 371 NOTREACHED(); | 384 NOTREACHED(); |
| 372 } | 385 } |
| 373 return std::unique_ptr<storage::FileStreamReader>(); | 386 return std::unique_ptr<storage::FileStreamReader>(); |
| 374 } | 387 } |
| 375 | 388 |
| 376 std::unique_ptr<storage::FileStreamWriter> | 389 std::unique_ptr<storage::FileStreamWriter> |
| 377 FileSystemBackend::CreateFileStreamWriter( | 390 FileSystemBackend::CreateFileStreamWriter( |
| 378 const storage::FileSystemURL& url, | 391 const storage::FileSystemURL& url, |
| 379 int64_t offset, | 392 int64_t offset, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 392 case storage::kFileSystemTypeNativeLocal: | 405 case storage::kFileSystemTypeNativeLocal: |
| 393 return std::unique_ptr<storage::FileStreamWriter>( | 406 return std::unique_ptr<storage::FileStreamWriter>( |
| 394 storage::FileStreamWriter::CreateForLocalFile( | 407 storage::FileStreamWriter::CreateForLocalFile( |
| 395 context->default_file_task_runner(), url.path(), offset, | 408 context->default_file_task_runner(), url.path(), offset, |
| 396 storage::FileStreamWriter::OPEN_EXISTING_FILE)); | 409 storage::FileStreamWriter::OPEN_EXISTING_FILE)); |
| 397 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 410 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 398 return mtp_delegate_->CreateFileStreamWriter(url, offset, context); | 411 return mtp_delegate_->CreateFileStreamWriter(url, offset, context); |
| 399 // Read only file systems. | 412 // Read only file systems. |
| 400 case storage::kFileSystemTypeRestrictedNativeLocal: | 413 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 401 case storage::kFileSystemTypeArcContent: | 414 case storage::kFileSystemTypeArcContent: |
| 415 case storage::kFileSystemTypeArcDocumentsProvider: |
| 402 return std::unique_ptr<storage::FileStreamWriter>(); | 416 return std::unique_ptr<storage::FileStreamWriter>(); |
| 403 default: | 417 default: |
| 404 NOTREACHED(); | 418 NOTREACHED(); |
| 405 } | 419 } |
| 406 return std::unique_ptr<storage::FileStreamWriter>(); | 420 return std::unique_ptr<storage::FileStreamWriter>(); |
| 407 } | 421 } |
| 408 | 422 |
| 409 bool FileSystemBackend::GetVirtualPath(const base::FilePath& filesystem_path, | 423 bool FileSystemBackend::GetVirtualPath(const base::FilePath& filesystem_path, |
| 410 base::FilePath* virtual_path) const { | 424 base::FilePath* virtual_path) const { |
| 411 return mount_points_->GetVirtualPath(filesystem_path, virtual_path) || | 425 return mount_points_->GetVirtualPath(filesystem_path, virtual_path) || |
| (...skipping 15 matching lines...) Expand all Loading... |
| 427 case storage::kFileSystemTypeProvided: | 441 case storage::kFileSystemTypeProvided: |
| 428 file_system_provider_delegate_->GetRedirectURLForContents(url, | 442 file_system_provider_delegate_->GetRedirectURLForContents(url, |
| 429 callback); | 443 callback); |
| 430 return; | 444 return; |
| 431 case storage::kFileSystemTypeDeviceMediaAsFileStorage: | 445 case storage::kFileSystemTypeDeviceMediaAsFileStorage: |
| 432 mtp_delegate_->GetRedirectURLForContents(url, callback); | 446 mtp_delegate_->GetRedirectURLForContents(url, callback); |
| 433 return; | 447 return; |
| 434 case storage::kFileSystemTypeNativeLocal: | 448 case storage::kFileSystemTypeNativeLocal: |
| 435 case storage::kFileSystemTypeRestrictedNativeLocal: | 449 case storage::kFileSystemTypeRestrictedNativeLocal: |
| 436 case storage::kFileSystemTypeArcContent: | 450 case storage::kFileSystemTypeArcContent: |
| 451 case storage::kFileSystemTypeArcDocumentsProvider: |
| 437 callback.Run(GURL()); | 452 callback.Run(GURL()); |
| 438 return; | 453 return; |
| 439 default: | 454 default: |
| 440 NOTREACHED(); | 455 NOTREACHED(); |
| 441 } | 456 } |
| 442 callback.Run(GURL()); | 457 callback.Run(GURL()); |
| 443 } | 458 } |
| 444 | 459 |
| 445 storage::FileSystemURL FileSystemBackend::CreateInternalURL( | 460 storage::FileSystemURL FileSystemBackend::CreateInternalURL( |
| 446 storage::FileSystemContext* context, | 461 storage::FileSystemContext* context, |
| 447 const base::FilePath& entry_path) const { | 462 const base::FilePath& entry_path) const { |
| 448 base::FilePath virtual_path; | 463 base::FilePath virtual_path; |
| 449 if (!GetVirtualPath(entry_path, &virtual_path)) | 464 if (!GetVirtualPath(entry_path, &virtual_path)) |
| 450 return storage::FileSystemURL(); | 465 return storage::FileSystemURL(); |
| 451 | 466 |
| 452 return context->CreateCrackedFileSystemURL( | 467 return context->CreateCrackedFileSystemURL( |
| 453 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); | 468 GURL() /* origin */, storage::kFileSystemTypeExternal, virtual_path); |
| 454 } | 469 } |
| 455 | 470 |
| 456 } // namespace chromeos | 471 } // namespace chromeos |
| OLD | NEW |