Home | History | Annotate | Download | only in fileapi
      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
      3 // found in the LICENSE file.
      4 
      5 #include "storage/browser/fileapi/remove_operation_delegate.h"
      6 
      7 #include "base/bind.h"
      8 #include "storage/browser/fileapi/file_system_context.h"
      9 #include "storage/browser/fileapi/file_system_operation_runner.h"
     10 
     11 namespace storage {
     12 
     13 RemoveOperationDelegate::RemoveOperationDelegate(
     14     FileSystemContext* file_system_context,
     15     const FileSystemURL& url,
     16     const StatusCallback& callback)
     17     : RecursiveOperationDelegate(file_system_context),
     18       url_(url),
     19       callback_(callback),
     20       weak_factory_(this) {
     21 }
     22 
     23 RemoveOperationDelegate::~RemoveOperationDelegate() {}
     24 
     25 void RemoveOperationDelegate::Run() {
     26   operation_runner()->RemoveFile(url_, base::Bind(
     27       &RemoveOperationDelegate::DidTryRemoveFile, weak_factory_.GetWeakPtr()));
     28 }
     29 
     30 void RemoveOperationDelegate::RunRecursively() {
     31   StartRecursiveOperation(url_, callback_);
     32 }
     33 
     34 void RemoveOperationDelegate::ProcessFile(const FileSystemURL& url,
     35                                           const StatusCallback& callback) {
     36   operation_runner()->RemoveFile(
     37       url,
     38       base::Bind(&RemoveOperationDelegate::DidRemoveFile,
     39                  weak_factory_.GetWeakPtr(), callback));
     40 }
     41 
     42 void RemoveOperationDelegate::ProcessDirectory(const FileSystemURL& url,
     43                                                const StatusCallback& callback) {
     44   callback.Run(base::File::FILE_OK);
     45 }
     46 
     47 void RemoveOperationDelegate::PostProcessDirectory(
     48     const FileSystemURL& url, const StatusCallback& callback) {
     49   operation_runner()->RemoveDirectory(url, callback);
     50 }
     51 
     52 void RemoveOperationDelegate::DidTryRemoveFile(base::File::Error error) {
     53   if (error != base::File::FILE_ERROR_NOT_A_FILE &&
     54       error != base::File::FILE_ERROR_SECURITY) {
     55     callback_.Run(error);
     56     return;
     57   }
     58   operation_runner()->RemoveDirectory(
     59       url_,
     60       base::Bind(&RemoveOperationDelegate::DidTryRemoveDirectory,
     61                  weak_factory_.GetWeakPtr(), error));
     62 }
     63 
     64 void RemoveOperationDelegate::DidTryRemoveDirectory(
     65     base::File::Error remove_file_error,
     66     base::File::Error remove_directory_error) {
     67   callback_.Run(
     68       remove_directory_error == base::File::FILE_ERROR_NOT_A_DIRECTORY ?
     69       remove_file_error :
     70       remove_directory_error);
     71 }
     72 
     73 void RemoveOperationDelegate::DidRemoveFile(const StatusCallback& callback,
     74                                             base::File::Error error) {
     75   if (error == base::File::FILE_ERROR_NOT_FOUND) {
     76     callback.Run(base::File::FILE_OK);
     77     return;
     78   }
     79   callback.Run(error);
     80 }
     81 
     82 }  // namespace storage
     83