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 "webkit/browser/fileapi/remove_operation_delegate.h"
      6 
      7 #include "base/bind.h"
      8 #include "webkit/browser/fileapi/file_system_context.h"
      9 #include "webkit/browser/fileapi/file_system_operation_runner.h"
     10 
     11 namespace fileapi {
     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::PLATFORM_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(
     53     base::PlatformFileError error) {
     54   if (error != base::PLATFORM_FILE_ERROR_NOT_A_FILE &&
     55       error != base::PLATFORM_FILE_ERROR_SECURITY) {
     56     callback_.Run(error);
     57     return;
     58   }
     59   operation_runner()->RemoveDirectory(
     60       url_,
     61       base::Bind(&RemoveOperationDelegate::DidTryRemoveDirectory,
     62                  weak_factory_.GetWeakPtr(), error));
     63 }
     64 
     65 void RemoveOperationDelegate::DidTryRemoveDirectory(
     66     base::PlatformFileError remove_file_error,
     67     base::PlatformFileError remove_directory_error) {
     68   callback_.Run(
     69       remove_directory_error == base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY ?
     70       remove_file_error :
     71       remove_directory_error);
     72 }
     73 
     74 void RemoveOperationDelegate::DidRemoveFile(const StatusCallback& callback,
     75                                             base::PlatformFileError error) {
     76   if (error == base::PLATFORM_FILE_ERROR_NOT_FOUND) {
     77     callback.Run(base::PLATFORM_FILE_OK);
     78     return;
     79   }
     80   callback.Run(error);
     81 }
     82 
     83 }  // namespace fileapi
     84