- add sources.
[platform/framework/web/crosswalk.git] / src / content / child / fileapi / webfilewriter_base.h
1 // Copyright 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 #ifndef CONTENT_CHILD_FILEAPI_WEBFILEWRITER_BASE_H_
6 #define CONTENT_CHILD_FILEAPI_WEBFILEWRITER_BASE_H_
7
8 #include "base/platform_file.h"
9 #include "content/common/content_export.h"
10 #include "third_party/WebKit/public/platform/WebFileWriter.h"
11 #include "url/gurl.h"
12
13 namespace WebKit {
14 class WebFileWriterClient;
15 class WebURL;
16 }
17
18 namespace content {
19
20 class CONTENT_EXPORT WebFileWriterBase
21     : public NON_EXPORTED_BASE(WebKit::WebFileWriter) {
22  public:
23   WebFileWriterBase(const GURL& path, WebKit::WebFileWriterClient* client);
24   virtual ~WebFileWriterBase();
25
26   // WebFileWriter implementation
27   virtual void truncate(long long length);
28   virtual void write(long long position, const WebKit::WebString& id);
29   virtual void cancel();
30
31  protected:
32   // This calls DidSucceed() or DidFail() based on the value of |error_code|.
33   void DidFinish(base::PlatformFileError error_code);
34
35   void DidWrite(int64 bytes, bool complete);
36   void DidSucceed();
37   void DidFail(base::PlatformFileError error_code);
38
39   // Derived classes must provide these methods to asynchronously perform
40   // the requested operation, and they must call the appropiate DidSomething
41   // method upon completion and as progress is made in the Write case.
42   virtual void DoTruncate(const GURL& path, int64 offset) = 0;
43   virtual void DoWrite(const GURL& path,
44                        const std::string& blob_id,
45                        int64 offset) = 0;
46   virtual void DoCancel() = 0;
47
48  private:
49   enum OperationType {
50     kOperationNone,
51     kOperationWrite,
52     kOperationTruncate
53   };
54
55   enum CancelState {
56     kCancelNotInProgress,
57     kCancelSent,
58     kCancelReceivedWriteResponse,
59   };
60
61   void FinishCancel();
62
63   GURL path_;
64   WebKit::WebFileWriterClient* client_;
65   OperationType operation_;
66   CancelState cancel_state_;
67 };
68
69 }  // namespace content
70
71 #endif  // CONTENT_CHILD_FILEAPI_WEBFILEWRITER_BASE_H_