| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "storage/browser/fileapi/remove_operation_delegate.h" |
| |
| #include "base/bind.h" |
| #include "storage/browser/fileapi/file_system_context.h" |
| #include "storage/browser/fileapi/file_system_operation_runner.h" |
| |
| namespace storage { |
| |
| RemoveOperationDelegate::RemoveOperationDelegate( |
| FileSystemContext* file_system_context, |
| const FileSystemURL& url, |
| const StatusCallback& callback) |
| : RecursiveOperationDelegate(file_system_context), |
| url_(url), |
| callback_(callback), |
| weak_factory_(this) { |
| } |
| |
| RemoveOperationDelegate::~RemoveOperationDelegate() {} |
| |
| void RemoveOperationDelegate::Run() { |
| operation_runner()->RemoveFile(url_, base::Bind( |
| &RemoveOperationDelegate::DidTryRemoveFile, weak_factory_.GetWeakPtr())); |
| } |
| |
| void RemoveOperationDelegate::RunRecursively() { |
| StartRecursiveOperation(url_, FileSystemOperation::ERROR_BEHAVIOR_ABORT, |
| callback_); |
| } |
| |
| void RemoveOperationDelegate::ProcessFile(const FileSystemURL& url, |
| const StatusCallback& callback) { |
| operation_runner()->RemoveFile( |
| url, |
| base::Bind(&RemoveOperationDelegate::DidRemoveFile, |
| weak_factory_.GetWeakPtr(), callback)); |
| } |
| |
| void RemoveOperationDelegate::ProcessDirectory(const FileSystemURL& url, |
| const StatusCallback& callback) { |
| callback.Run(base::File::FILE_OK); |
| } |
| |
| void RemoveOperationDelegate::PostProcessDirectory( |
| const FileSystemURL& url, const StatusCallback& callback) { |
| operation_runner()->RemoveDirectory(url, callback); |
| } |
| |
| void RemoveOperationDelegate::DidTryRemoveFile(base::File::Error error) { |
| if (error != base::File::FILE_ERROR_NOT_A_FILE && |
| error != base::File::FILE_ERROR_SECURITY) { |
| callback_.Run(error); |
| return; |
| } |
| operation_runner()->RemoveDirectory( |
| url_, |
| base::Bind(&RemoveOperationDelegate::DidTryRemoveDirectory, |
| weak_factory_.GetWeakPtr(), error)); |
| } |
| |
| void RemoveOperationDelegate::DidTryRemoveDirectory( |
| base::File::Error remove_file_error, |
| base::File::Error remove_directory_error) { |
| callback_.Run( |
| remove_directory_error == base::File::FILE_ERROR_NOT_A_DIRECTORY ? |
| remove_file_error : |
| remove_directory_error); |
| } |
| |
| void RemoveOperationDelegate::DidRemoveFile(const StatusCallback& callback, |
| base::File::Error error) { |
| if (error == base::File::FILE_ERROR_NOT_FOUND) { |
| callback.Run(base::File::FILE_OK); |
| return; |
| } |
| callback.Run(error); |
| } |
| |
| } // namespace storage |