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

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

Issue 982283002: Implement DeleteFile and DeleteDirectory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 9 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 c106f65417ded470ee026eeda78e4e847d6a9852..2475aa5fab5a5d76bf619f942604b3c90444b277 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
@@ -86,6 +86,20 @@ void OnCopyInForeignFileError(const AsyncFileUtil::StatusCallback& callback,
callback.Run(error);
}
+// Called when DeleteFile method call failed.
+void OnDeleteFileError(const AsyncFileUtil::StatusCallback& callback,
+ base::File::Error error) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ callback.Run(error);
+}
+
+// Called when DeleteDirectory method call failed.
+void OnDeleteDirectoryError(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
@@ -420,8 +434,21 @@ void DeviceMediaAsyncFileUtil::DeleteFile(
const FileSystemURL& url,
const StatusCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- NOTIMPLEMENTED();
- callback.Run(base::File::FILE_ERROR_SECURITY);
+
+ MTPDeviceAsyncDelegate* const delegate = GetMTPDeviceDelegate(url);
+ if (!delegate) {
+ OnDeleteFileError(callback, base::File::FILE_ERROR_NOT_FOUND);
+ return;
+ }
+ if (delegate->IsReadOnly()) {
+ OnDeleteFileError(callback, base::File::FILE_ERROR_SECURITY);
+ return;
+ }
+
+ delegate->DeleteFile(url.path(),
+ base::Bind(&DeviceMediaAsyncFileUtil::OnDidDeleteFile,
+ weak_ptr_factory_.GetWeakPtr(), callback),
+ base::Bind(&OnDeleteFileError, callback));
}
void DeviceMediaAsyncFileUtil::DeleteDirectory(
@@ -429,8 +456,21 @@ void DeviceMediaAsyncFileUtil::DeleteDirectory(
const FileSystemURL& url,
const StatusCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
- NOTIMPLEMENTED();
- callback.Run(base::File::FILE_ERROR_SECURITY);
+
+ MTPDeviceAsyncDelegate* const delegate = GetMTPDeviceDelegate(url);
+ if (!delegate) {
+ OnDeleteDirectoryError(callback, base::File::FILE_ERROR_NOT_FOUND);
+ return;
+ }
+ if (delegate->IsReadOnly()) {
+ OnDeleteDirectoryError(callback, base::File::FILE_ERROR_SECURITY);
+ return;
+ }
+
+ delegate->DeleteDirectory(
+ url.path(), base::Bind(&DeviceMediaAsyncFileUtil::OnDidDeleteDirectory,
+ weak_ptr_factory_.GetWeakPtr(), callback),
+ base::Bind(&OnDeleteDirectoryError, callback));
}
void DeviceMediaAsyncFileUtil::DeleteRecursively(
@@ -540,6 +580,19 @@ void DeviceMediaAsyncFileUtil::OnDidCopyInForeignFile(
callback.Run(base::File::FILE_OK);
}
+void DeviceMediaAsyncFileUtil::OnDidDeleteFile(const StatusCallback& callback) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+ callback.Run(base::File::FILE_OK);
+}
+
+void DeviceMediaAsyncFileUtil::OnDidDeleteDirectory(
+ 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