webfilewriter_base.h revision 58537e28ecd584eab876aee8be7156509866d23a
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 13namespace WebKit { 14class WebFileWriterClient; 15class WebURL; 16} 17 18namespace content { 19 20class 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 // DEPRECATED: see crbug/174200 32 virtual void write(long long position, const WebKit::WebURL& blobURL); 33 34 protected: 35 // This calls DidSucceed() or DidFail() based on the value of |error_code|. 36 void DidFinish(base::PlatformFileError error_code); 37 38 void DidWrite(int64 bytes, bool complete); 39 void DidSucceed(); 40 void DidFail(base::PlatformFileError error_code); 41 42 // Derived classes must provide these methods to asynchronously perform 43 // the requested operation, and they must call the appropiate DidSomething 44 // method upon completion and as progress is made in the Write case. 45 virtual void DoTruncate(const GURL& path, int64 offset) = 0; 46 virtual void DoWriteDeprecated(const GURL& path, 47 const GURL& blob_url, 48 int64 offset) = 0; 49 virtual void DoWrite(const GURL& path, 50 const std::string& blob_id, 51 int64 offset) = 0; 52 virtual void DoCancel() = 0; 53 54 private: 55 enum OperationType { 56 kOperationNone, 57 kOperationWrite, 58 kOperationTruncate 59 }; 60 61 enum CancelState { 62 kCancelNotInProgress, 63 kCancelSent, 64 kCancelReceivedWriteResponse, 65 }; 66 67 void FinishCancel(); 68 69 GURL path_; 70 WebKit::WebFileWriterClient* client_; 71 OperationType operation_; 72 CancelState cancel_state_; 73}; 74 75} // namespace content 76 77#endif // CONTENT_CHILD_FILEAPI_WEBFILEWRITER_BASE_H_ 78