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 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::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 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