Index: storage/browser/fileapi/recursive_operation_delegate.h |
diff --git a/storage/browser/fileapi/recursive_operation_delegate.h b/storage/browser/fileapi/recursive_operation_delegate.h |
index f7f07c2549c9163eabd7c971c49afe9e2f9e6929..d120c3366d4113f50d7b4c2cf0645a6878429640 100644 |
--- a/storage/browser/fileapi/recursive_operation_delegate.h |
+++ b/storage/browser/fileapi/recursive_operation_delegate.h |
@@ -28,6 +28,7 @@ class STORAGE_EXPORT RecursiveOperationDelegate |
: public base::SupportsWeakPtr<RecursiveOperationDelegate> { |
public: |
typedef FileSystemOperation::StatusCallback StatusCallback; |
+ typedef FileSystemOperation::ErrorCallback ErrorCallback; |
typedef FileSystemOperation::FileEntryList FileEntryList; |
virtual ~RecursiveOperationDelegate(); |
@@ -108,6 +109,20 @@ class STORAGE_EXPORT RecursiveOperationDelegate |
void StartRecursiveOperation(const FileSystemURL& root, |
const StatusCallback& callback); |
+ // Starts to process files/directories recursively from the given |root|. |
+ // Compared with StartRecursiveOperation, this continues operation with |
+ // ignoring erros of ProcessFile. |
+ // |
+ // |error_callback| is fired when a ProcessFile has failed in the middle of |
+ // operations. If some errors had happened, |status_callback| is fired with |
+ // base::File::FILE_ERROR_FAILED at the end. |
+ // |
+ // TODO(yawano): Handle errors of ProcessDirectory as well. |
+ void StartRecursiveOperationWithIgnoringError( |
+ const FileSystemURL& root, |
+ const ErrorCallback& error_callback, |
+ const StatusCallback& status_callback); |
+ |
FileSystemContext* file_system_context() { return file_system_context_; } |
const FileSystemContext* file_system_context() const { |
return file_system_context_; |
@@ -120,6 +135,7 @@ class STORAGE_EXPORT RecursiveOperationDelegate |
virtual void OnCancel(); |
private: |
+ void TryProcessFile(const FileSystemURL& root); |
void DidTryProcessFile(const FileSystemURL& root, |
base::File::Error error); |
void ProcessNextDirectory(); |
@@ -129,7 +145,7 @@ class STORAGE_EXPORT RecursiveOperationDelegate |
const FileEntryList& entries, |
bool has_more); |
void ProcessPendingFiles(); |
- void DidProcessFile(base::File::Error error); |
+ void DidProcessFile(const FileSystemURL& url, base::File::Error error); |
void ProcessSubDirectory(); |
void DidPostProcessDirectory(base::File::Error error); |
@@ -138,11 +154,14 @@ class STORAGE_EXPORT RecursiveOperationDelegate |
FileSystemContext* file_system_context_; |
StatusCallback callback_; |
+ ErrorCallback error_callback_; |
std::stack<FileSystemURL> pending_directories_; |
std::stack<std::queue<FileSystemURL> > pending_directory_stack_; |
std::queue<FileSystemURL> pending_files_; |
int inflight_operations_; |
bool canceled_; |
+ bool ignore_error_; |
+ bool failed_some_operations_; |
DISALLOW_COPY_AND_ASSIGN(RecursiveOperationDelegate); |
}; |