| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/media_galleries/fileapi/device_media_async_file_util.h" | 5 #include "chrome/browser/media_galleries/fileapi/device_media_async_file_util.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/task_runner_util.h" | 10 #include "base/task_runner_util.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 // Called when ReadDirectory method call failed to enumerate the directory | 73 // Called when ReadDirectory method call failed to enumerate the directory |
| 74 // objects. |callback| is invoked to notify the caller about the |error| | 74 // objects. |callback| is invoked to notify the caller about the |error| |
| 75 // that occured while reading the directory objects. | 75 // that occured while reading the directory objects. |
| 76 void OnReadDirectoryError(const AsyncFileUtil::ReadDirectoryCallback& callback, | 76 void OnReadDirectoryError(const AsyncFileUtil::ReadDirectoryCallback& callback, |
| 77 base::File::Error error) { | 77 base::File::Error error) { |
| 78 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 78 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 79 callback.Run(error, AsyncFileUtil::EntryList(), false /*no more*/); | 79 callback.Run(error, AsyncFileUtil::EntryList(), false /*no more*/); |
| 80 } | 80 } |
| 81 | 81 |
| 82 // Called when CopyInForeignFile method call failed. |
| 83 void OnCopyInForeignFileError(const AsyncFileUtil::StatusCallback& callback, |
| 84 base::File::Error error) { |
| 85 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 86 callback.Run(error); |
| 87 } |
| 88 |
| 82 // Called on a blocking pool thread to create a snapshot file to hold the | 89 // Called on a blocking pool thread to create a snapshot file to hold the |
| 83 // contents of |device_file_path|. The snapshot file is created in the | 90 // contents of |device_file_path|. The snapshot file is created in the |
| 84 // "profile_path/kDeviceMediaAsyncFileUtilTempDir" directory. Return the | 91 // "profile_path/kDeviceMediaAsyncFileUtilTempDir" directory. Return the |
| 85 // snapshot file path or an empty path on failure. | 92 // snapshot file path or an empty path on failure. |
| 86 base::FilePath CreateSnapshotFileOnBlockingPool( | 93 base::FilePath CreateSnapshotFileOnBlockingPool( |
| 87 const base::FilePath& device_file_path, | 94 const base::FilePath& device_file_path, |
| 88 const base::FilePath& profile_path) { | 95 const base::FilePath& profile_path) { |
| 89 base::FilePath snapshot_file_path; | 96 base::FilePath snapshot_file_path; |
| 90 base::FilePath media_file_system_dir_path = | 97 base::FilePath media_file_system_dir_path = |
| 91 profile_path.AppendASCII(kDeviceMediaAsyncFileUtilTempDir); | 98 profile_path.AppendASCII(kDeviceMediaAsyncFileUtilTempDir); |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 void DeviceMediaAsyncFileUtil::ReadDirectory( | 330 void DeviceMediaAsyncFileUtil::ReadDirectory( |
| 324 scoped_ptr<FileSystemOperationContext> context, | 331 scoped_ptr<FileSystemOperationContext> context, |
| 325 const FileSystemURL& url, | 332 const FileSystemURL& url, |
| 326 const ReadDirectoryCallback& callback) { | 333 const ReadDirectoryCallback& callback) { |
| 327 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 334 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 328 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); | 335 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(url); |
| 329 if (!delegate) { | 336 if (!delegate) { |
| 330 OnReadDirectoryError(callback, base::File::FILE_ERROR_NOT_FOUND); | 337 OnReadDirectoryError(callback, base::File::FILE_ERROR_NOT_FOUND); |
| 331 return; | 338 return; |
| 332 } | 339 } |
| 340 |
| 333 delegate->ReadDirectory( | 341 delegate->ReadDirectory( |
| 334 url.path(), | 342 url.path(), |
| 335 base::Bind(&DeviceMediaAsyncFileUtil::OnDidReadDirectory, | 343 base::Bind(&DeviceMediaAsyncFileUtil::OnDidReadDirectory, |
| 336 weak_ptr_factory_.GetWeakPtr(), | 344 weak_ptr_factory_.GetWeakPtr(), |
| 337 make_scoped_refptr(context->task_runner()), | 345 make_scoped_refptr(context->task_runner()), |
| 338 callback), | 346 callback), |
| 339 base::Bind(&OnReadDirectoryError, callback)); | 347 base::Bind(&OnReadDirectoryError, callback)); |
| 340 } | 348 } |
| 341 | 349 |
| 342 void DeviceMediaAsyncFileUtil::Touch( | 350 void DeviceMediaAsyncFileUtil::Touch( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 NOTIMPLEMENTED(); | 390 NOTIMPLEMENTED(); |
| 383 callback.Run(base::File::FILE_ERROR_SECURITY); | 391 callback.Run(base::File::FILE_ERROR_SECURITY); |
| 384 } | 392 } |
| 385 | 393 |
| 386 void DeviceMediaAsyncFileUtil::CopyInForeignFile( | 394 void DeviceMediaAsyncFileUtil::CopyInForeignFile( |
| 387 scoped_ptr<FileSystemOperationContext> context, | 395 scoped_ptr<FileSystemOperationContext> context, |
| 388 const base::FilePath& src_file_path, | 396 const base::FilePath& src_file_path, |
| 389 const FileSystemURL& dest_url, | 397 const FileSystemURL& dest_url, |
| 390 const StatusCallback& callback) { | 398 const StatusCallback& callback) { |
| 391 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 399 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 392 NOTIMPLEMENTED(); | 400 |
| 393 callback.Run(base::File::FILE_ERROR_SECURITY); | 401 MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(dest_url); |
| 402 if (!delegate) { |
| 403 OnCopyInForeignFileError(callback, base::File::FILE_ERROR_NOT_FOUND); |
| 404 return; |
| 405 } |
| 406 if (delegate->IsReadOnly()) { |
| 407 OnCopyInForeignFileError(callback, base::File::FILE_ERROR_SECURITY); |
| 408 return; |
| 409 } |
| 410 |
| 411 delegate->CopyFileFromLocal( |
| 412 src_file_path, dest_url.path(), |
| 413 base::Bind(&DeviceMediaAsyncFileUtil::OnDidCopyInForeignFile, |
| 414 weak_ptr_factory_.GetWeakPtr(), callback), |
| 415 base::Bind(&OnCopyInForeignFileError, callback)); |
| 394 } | 416 } |
| 395 | 417 |
| 396 void DeviceMediaAsyncFileUtil::DeleteFile( | 418 void DeviceMediaAsyncFileUtil::DeleteFile( |
| 397 scoped_ptr<FileSystemOperationContext> context, | 419 scoped_ptr<FileSystemOperationContext> context, |
| 398 const FileSystemURL& url, | 420 const FileSystemURL& url, |
| 399 const StatusCallback& callback) { | 421 const StatusCallback& callback) { |
| 400 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 422 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 401 NOTIMPLEMENTED(); | 423 NOTIMPLEMENTED(); |
| 402 callback.Run(base::File::FILE_ERROR_SECURITY); | 424 callback.Run(base::File::FILE_ERROR_SECURITY); |
| 403 } | 425 } |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 504 | 526 |
| 505 base::PostTaskAndReplyWithResult( | 527 base::PostTaskAndReplyWithResult( |
| 506 task_runner, | 528 task_runner, |
| 507 FROM_HERE, | 529 FROM_HERE, |
| 508 base::Bind(&MediaPathFilterWrapper::FilterMediaEntries, | 530 base::Bind(&MediaPathFilterWrapper::FilterMediaEntries, |
| 509 media_path_filter_wrapper_, | 531 media_path_filter_wrapper_, |
| 510 file_list), | 532 file_list), |
| 511 base::Bind(&OnDidCheckMediaForReadDirectory, callback, has_more)); | 533 base::Bind(&OnDidCheckMediaForReadDirectory, callback, has_more)); |
| 512 } | 534 } |
| 513 | 535 |
| 536 void DeviceMediaAsyncFileUtil::OnDidCopyInForeignFile( |
| 537 const StatusCallback& callback) { |
| 538 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 539 |
| 540 callback.Run(base::File::FILE_OK); |
| 541 } |
| 542 |
| 514 bool DeviceMediaAsyncFileUtil::validate_media_files() const { | 543 bool DeviceMediaAsyncFileUtil::validate_media_files() const { |
| 515 return media_path_filter_wrapper_.get() != NULL; | 544 return media_path_filter_wrapper_.get() != NULL; |
| 516 } | 545 } |
| OLD | NEW |