| Index: webkit/browser/fileapi/recursive_operation_delegate.h
|
| diff --git a/webkit/browser/fileapi/recursive_operation_delegate.h b/webkit/browser/fileapi/recursive_operation_delegate.h
|
| index 638663243b4e7a84276ae84531bbe11a4a8ed88a..b1fbd66550458a810c6bbc08f42fb7f9b2cc03bc 100644
|
| --- a/webkit/browser/fileapi/recursive_operation_delegate.h
|
| +++ b/webkit/browser/fileapi/recursive_operation_delegate.h
|
| @@ -1,152 +1,5 @@
|
| -// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Copyright 2014 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.
|
|
|
| -#ifndef WEBKIT_BROWSER_FILEAPI_RECURSIVE_OPERATION_DELEGATE_H_
|
| -#define WEBKIT_BROWSER_FILEAPI_RECURSIVE_OPERATION_DELEGATE_H_
|
| -
|
| -#include <queue>
|
| -#include <stack>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/callback.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "webkit/browser/fileapi/file_system_operation.h"
|
| -#include "webkit/browser/fileapi/file_system_url.h"
|
| -
|
| -namespace storage {
|
| -
|
| -class FileSystemContext;
|
| -class FileSystemOperationRunner;
|
| -
|
| -// A base class for recursive operation delegates.
|
| -//
|
| -// In short, each subclass should override ProcessFile and ProcessDirectory
|
| -// to process a directory or a file. To start the recursive operation it
|
| -// should also call StartRecursiveOperation.
|
| -class STORAGE_EXPORT RecursiveOperationDelegate
|
| - : public base::SupportsWeakPtr<RecursiveOperationDelegate> {
|
| - public:
|
| - typedef FileSystemOperation::StatusCallback StatusCallback;
|
| - typedef FileSystemOperation::FileEntryList FileEntryList;
|
| -
|
| - virtual ~RecursiveOperationDelegate();
|
| -
|
| - // This is called when the consumer of this instance starts a non-recursive
|
| - // operation.
|
| - virtual void Run() = 0;
|
| -
|
| - // This is called when the consumer of this instance starts a recursive
|
| - // operation.
|
| - virtual void RunRecursively() = 0;
|
| -
|
| - // This is called each time a file is found while recursively
|
| - // performing an operation.
|
| - virtual void ProcessFile(const FileSystemURL& url,
|
| - const StatusCallback& callback) = 0;
|
| -
|
| - // This is called each time a directory is found while recursively
|
| - // performing an operation.
|
| - virtual void ProcessDirectory(const FileSystemURL& url,
|
| - const StatusCallback& callback) = 0;
|
| -
|
| -
|
| - // This is called each time after files and subdirectories for a
|
| - // directory is processed while recursively performing an operation.
|
| - virtual void PostProcessDirectory(const FileSystemURL& url,
|
| - const StatusCallback& callback) = 0;
|
| -
|
| - // Cancels the currently running operation.
|
| - void Cancel();
|
| -
|
| - protected:
|
| - explicit RecursiveOperationDelegate(FileSystemContext* file_system_context);
|
| -
|
| - // Starts to process files/directories recursively from the given |root|.
|
| - // This will call ProcessFile and ProcessDirectory on each file or directory.
|
| - //
|
| - // First, this tries to call ProcessFile with |root| regardless whether it is
|
| - // actually a file or a directory. If it is a directory, ProcessFile should
|
| - // return File::FILE_NOT_A_FILE.
|
| - //
|
| - // For each directory, the recursive operation works as follows:
|
| - // ProcessDirectory is called first for the directory.
|
| - // Then the directory contents are read (to obtain its sub directories and
|
| - // files in it).
|
| - // ProcessFile is called for found files. This may run in parallel.
|
| - // The same step is recursively applied to each subdirectory.
|
| - // After all files and subdirectories in a directory are processed,
|
| - // PostProcessDirectory is called for the directory.
|
| - // Here is an example;
|
| - // a_dir/ -+- b1_dir/ -+- c1_dir/ -+- d1_file
|
| - // | | |
|
| - // | +- c2_file +- d2_file
|
| - // |
|
| - // +- b2_dir/ --- e_dir/
|
| - // |
|
| - // +- b3_file
|
| - // |
|
| - // +- b4_file
|
| - // Then traverse order is:
|
| - // ProcessFile(a_dir) (This should return File::FILE_NOT_A_FILE).
|
| - // ProcessDirectory(a_dir).
|
| - // ProcessFile(b3_file), ProcessFile(b4_file). (in parallel).
|
| - // ProcessDirectory(b1_dir).
|
| - // ProcessFile(c2_file)
|
| - // ProcessDirectory(c1_dir).
|
| - // ProcessFile(d1_file), ProcessFile(d2_file). (in parallel).
|
| - // PostProcessDirectory(c1_dir)
|
| - // PostProcessDirectory(b1_dir).
|
| - // ProcessDirectory(b2_dir)
|
| - // ProcessDirectory(e_dir)
|
| - // PostProcessDirectory(e_dir)
|
| - // PostProcessDirectory(b2_dir)
|
| - // PostProcessDirectory(a_dir)
|
| - //
|
| - // |callback| is fired with base::File::FILE_OK when every file/directory
|
| - // under |root| is processed, or fired earlier when any suboperation fails.
|
| - void StartRecursiveOperation(const FileSystemURL& root,
|
| - const StatusCallback& callback);
|
| -
|
| - FileSystemContext* file_system_context() { return file_system_context_; }
|
| - const FileSystemContext* file_system_context() const {
|
| - return file_system_context_;
|
| - }
|
| -
|
| - FileSystemOperationRunner* operation_runner();
|
| -
|
| - // Called when Cancel() is called. This is a hook to do something more
|
| - // in a derived class. By default, do nothing.
|
| - virtual void OnCancel();
|
| -
|
| - private:
|
| - void DidTryProcessFile(const FileSystemURL& root,
|
| - base::File::Error error);
|
| - void ProcessNextDirectory();
|
| - void DidProcessDirectory(base::File::Error error);
|
| - void DidReadDirectory(const FileSystemURL& parent,
|
| - base::File::Error error,
|
| - const FileEntryList& entries,
|
| - bool has_more);
|
| - void ProcessPendingFiles();
|
| - void DidProcessFile(base::File::Error error);
|
| - void ProcessSubDirectory();
|
| - void DidPostProcessDirectory(base::File::Error error);
|
| -
|
| - // Called when all recursive operation is done (or an error occurs).
|
| - void Done(base::File::Error error);
|
| -
|
| - FileSystemContext* file_system_context_;
|
| - StatusCallback callback_;
|
| - std::stack<FileSystemURL> pending_directories_;
|
| - std::stack<std::queue<FileSystemURL> > pending_directory_stack_;
|
| - std::queue<FileSystemURL> pending_files_;
|
| - int inflight_operations_;
|
| - bool canceled_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RecursiveOperationDelegate);
|
| -};
|
| -
|
| -} // namespace storage
|
| -
|
| -#endif // WEBKIT_BROWSER_FILEAPI_RECURSIVE_OPERATION_DELEGATE_H_
|
| +#include "storage/browser/fileapi/recursive_operation_delegate.h"
|
|
|