Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Unified Diff: chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc

Issue 947943002: Implement CopyFileFromLocal of MTPDeviceAsyncDelegate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
diff --git a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
index 2245ba6f6a3746a1e431e052432a3e4fcad0878a..c106f65417ded470ee026eeda78e4e847d6a9852 100644
--- a/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
+++ b/chrome/browser/media_galleries/fileapi/device_media_async_file_util.cc
@@ -79,6 +79,13 @@ void OnReadDirectoryError(const AsyncFileUtil::ReadDirectoryCallback& callback,
callback.Run(error, AsyncFileUtil::EntryList(), false /*no more*/);
}
+// Called when CopyInForeignFile method call failed.
+void OnCopyInForeignFileError(const AsyncFileUtil::StatusCallback& callback,
+ base::File::Error error) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ callback.Run(error);
+}
+
// Called on a blocking pool thread to create a snapshot file to hold the
// contents of |device_file_path|. The snapshot file is created in the
// "profile_path/kDeviceMediaAsyncFileUtilTempDir" directory. Return the
@@ -330,6 +337,7 @@ void DeviceMediaAsyncFileUtil::ReadDirectory(
OnReadDirectoryError(callback, base::File::FILE_ERROR_NOT_FOUND);
return;
}
+
delegate->ReadDirectory(
url.path(),
base::Bind(&DeviceMediaAsyncFileUtil::OnDidReadDirectory,
@@ -389,8 +397,22 @@ void DeviceMediaAsyncFileUtil::CopyInForeignFile(
const FileSystemURL& dest_url,
const StatusCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- NOTIMPLEMENTED();
- callback.Run(base::File::FILE_ERROR_SECURITY);
+
+ MTPDeviceAsyncDelegate* delegate = GetMTPDeviceDelegate(dest_url);
+ if (!delegate) {
+ OnCopyInForeignFileError(callback, base::File::FILE_ERROR_NOT_FOUND);
+ return;
+ }
+ if (delegate->IsReadOnly()) {
+ OnCopyInForeignFileError(callback, base::File::FILE_ERROR_SECURITY);
+ return;
+ }
+
+ delegate->CopyFileFromLocal(
+ src_file_path, dest_url.path(),
+ base::Bind(&DeviceMediaAsyncFileUtil::OnDidCopyInForeignFile,
+ weak_ptr_factory_.GetWeakPtr(), callback),
+ base::Bind(&OnCopyInForeignFileError, callback));
}
void DeviceMediaAsyncFileUtil::DeleteFile(
@@ -511,6 +533,13 @@ void DeviceMediaAsyncFileUtil::OnDidReadDirectory(
base::Bind(&OnDidCheckMediaForReadDirectory, callback, has_more));
}
+void DeviceMediaAsyncFileUtil::OnDidCopyInForeignFile(
+ const StatusCallback& callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ callback.Run(base::File::FILE_OK);
+}
+
bool DeviceMediaAsyncFileUtil::validate_media_files() const {
return media_path_filter_wrapper_.get() != NULL;
}

Powered by Google App Engine
This is Rietveld 408576698