summaryrefslogtreecommitdiffstats
path: root/webkit/fileapi/webfilewriter_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/fileapi/webfilewriter_base.h')
-rw-r--r--webkit/fileapi/webfilewriter_base.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/webkit/fileapi/webfilewriter_base.h b/webkit/fileapi/webfilewriter_base.h
new file mode 100644
index 0000000..790e48b
--- /dev/null
+++ b/webkit/fileapi/webfilewriter_base.h
@@ -0,0 +1,69 @@
+// Copyright (c) 2010 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_WEBFILEWRITER_BASE_H_
+#define WEBKIT_FILEAPI_WEBFILEWRITER_BASE_H_
+
+#include "base/file_path.h"
+#include "base/platform_file.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebFileWriter.h"
+
+class GURL;
+
+namespace WebKit {
+class WebFileWriterClient;
+class WebString;
+class WebURL;
+}
+
+namespace fileapi {
+
+class WebFileWriterBase : public WebKit::WebFileWriter {
+ public:
+ WebFileWriterBase(
+ const WebKit::WebString& path, WebKit::WebFileWriterClient* client);
+ virtual ~WebFileWriterBase();
+
+ // WebFileWriter implementation
+ virtual void truncate(long long length);
+ virtual void write(long long position, const WebKit::WebURL& blobURL);
+ virtual void cancel();
+
+ protected:
+ // Derived classes must provide these methods to asynchronously perform
+ // the requested operation, and they must call the appropiate DidSomething
+ // method upon completion and as progress is made in the Write case.
+ virtual void DoTruncate(const FilePath& path, int64 offset) = 0;
+ virtual void DoWrite(const FilePath& path, const GURL& blob_url,
+ int64 offset) = 0;
+ virtual void DoCancel() = 0;
+
+ void DidSucceed();
+ void DidFail(base::PlatformFileError error_code);
+ void DidWrite(int64 bytes, bool complete);
+
+ private:
+ enum OperationType {
+ kOperationNone,
+ kOperationWrite,
+ kOperationTruncate
+ };
+
+ enum CancelState {
+ kCancelNotInProgress,
+ kCancelSent,
+ kCancelReceivedWriteResponse,
+ };
+
+ void FinishCancel();
+
+ FilePath path_;
+ WebKit::WebFileWriterClient* client_;
+ OperationType operation_;
+ CancelState cancel_state_;
+};
+
+} // namespace fileapi
+
+#endif // WEBKIT_FILEAPI_WEBFILEWRITER_BASE_H_