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 13namespace blink { 14class WebFileWriterClient; 15class WebURL; 16} 17 18namespace content { 19 20class 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