Home | History | Annotate | Download | only in fileapi
      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/files/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 blink {
     14 class WebFileWriterClient;
     15 class WebURL;
     16 }
     17 
     18 namespace content {
     19 
     20 class CONTENT_EXPORT WebFileWriterBase
     21     : public NON_EXPORTED_BASE(blink::WebFileWriter) {
     22  public:
     23   WebFileWriterBase(const GURL& path, blink::WebFileWriterClient* client);
     24   virtual ~WebFileWriterBase();
     25 
     26   // WebFileWriter implementation
     27   virtual void truncate(long long length);
     28   virtual void write(long long position, const blink::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::File::Error error_code);
     34 
     35   void DidWrite(int64 bytes, bool complete);
     36   void DidSucceed();
     37   void DidFail(base::File::Error 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   blink::WebFileWriterClient* client_;
     65   OperationType operation_;
     66   CancelState cancel_state_;
     67 };
     68 
     69 }  // namespace content
     70 
     71 #endif  // CONTENT_CHILD_FILEAPI_WEBFILEWRITER_BASE_H_
     72