| Index: webkit/fileapi/cross_operation_delegate.h
|
| diff --git a/webkit/fileapi/cross_operation_delegate.h b/webkit/fileapi/cross_operation_delegate.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1b169f77d83384627f84beb5b3993879bbcff538
|
| --- /dev/null
|
| +++ b/webkit/fileapi/cross_operation_delegate.h
|
| @@ -0,0 +1,104 @@
|
| +// 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.
|
| +
|
| +#ifndef WEBKIT_FILEAPI_CROSS_OPERATION_DELEGATE_H_
|
| +#define WEBKIT_FILEAPI_CROSS_OPERATION_DELEGATE_H_
|
| +
|
| +#include <stack>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "webkit/fileapi/recursive_operation_delegate.h"
|
| +
|
| +namespace webkit_blob {
|
| +class ShareableFileReference;
|
| +}
|
| +
|
| +namespace fileapi {
|
| +
|
| +// A delegate class for recursive copy or move operations.
|
| +class CrossOperationDelegate
|
| + : public RecursiveOperationDelegate,
|
| + public base::SupportsWeakPtr<CrossOperationDelegate> {
|
| + public:
|
| + enum OperationType {
|
| + OPERATION_COPY,
|
| + OPERATION_MOVE
|
| + };
|
| +
|
| + CrossOperationDelegate(LocalFileSystemOperation* original_operation,
|
| + const FileSystemURL& src_root,
|
| + const FileSystemURL& dest_root,
|
| + OperationType operation_type,
|
| + const StatusCallback& callback);
|
| + virtual ~CrossOperationDelegate();
|
| +
|
| + // RecursiveOperationDelegate overrides:
|
| + virtual void Run() OVERRIDE;
|
| + virtual void RunRecursively() OVERRIDE;
|
| + virtual void ProcessFile(const FileSystemURL& url,
|
| + const StatusCallback& callback) OVERRIDE;
|
| + virtual void ProcessDirectory(const FileSystemURL& url,
|
| + const StatusCallback& callback) OVERRIDE;
|
| +
|
| + using base::SupportsWeakPtr<CrossOperationDelegate>::AsWeakPtr;
|
| +
|
| + private:
|
| + void DidTryCopyOrMoveFile(base::PlatformFileError error);
|
| + void DidTryRemoveDestRoot(base::PlatformFileError error);
|
| + void CopyOrMoveFile(
|
| + const FileSystemURL& src,
|
| + const FileSystemURL& dest,
|
| + const StatusCallback& callback);
|
| + void DidCreateSnapshot(
|
| + const FileSystemURL& dest,
|
| + const StatusCallback& callback,
|
| + base::PlatformFileError error,
|
| + const base::PlatformFileInfo& file_info,
|
| + const FilePath& platform_path,
|
| + const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref);
|
| + void DidFinishCopy(
|
| + const FileSystemURL& src,
|
| + const StatusCallback& callback,
|
| + base::PlatformFileError error);
|
| + void DidRemoveSourceForMove(
|
| + const StatusCallback& callback,
|
| + base::PlatformFileError error);
|
| +
|
| + FileSystemURL CreateDestURL(const FileSystemURL& src_url) const;
|
| +
|
| + // Create nested operations for recursive task.
|
| + // When the creation fails it fires callback_ with the
|
| + // error code and returns NULL.
|
| + //
|
| + // - NewDestOperation is basically a thin wrapper of
|
| + // RecursiveOperationDelegate::NewOperation().
|
| + // (Since the original_operation must have been created for the destination
|
| + // URL. TODO(kinuko): we should have some assertion for this assumption)
|
| + //
|
| + // - NewSourceOperation also redirects the request to
|
| + // RecursiveOperationDelegate::NewOperation() **iff** same_file_system_
|
| + // is true.
|
| + // Otherwise it's for cross-filesystem operation and it needs a
|
| + // separate FileSystemOperationContext, so it creates a new operation
|
| + // which inherits context from src_root_operation_.
|
| + //
|
| + LocalFileSystemOperation* NewSourceOperation(const FileSystemURL& url);
|
| + LocalFileSystemOperation* NewDestOperation(const FileSystemURL& url);
|
| +
|
| + FileSystemURL src_root_;
|
| + FileSystemURL dest_root_;
|
| + bool same_file_system_;
|
| + OperationType operation_type_;
|
| + StatusCallback callback_;
|
| +
|
| + LocalFileSystemOperation* src_root_operation_;
|
| +
|
| + scoped_refptr<webkit_blob::ShareableFileReference> current_file_ref_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CrossOperationDelegate);
|
| +};
|
| +
|
| +} // namespace fileapi
|
| +
|
| +#endif // WEBKIT_FILEAPI_CROSS_OPERATION_DELEGATE_H_
|
|
|