Include all dupe types (event when value is zero) in scan stats.
[chromium-blink-merge.git] / storage / browser / fileapi / file_writer_delegate.h
blob01c89a94f30a0481d707cad1882c6c4bf25a80f3
1 // Copyright (c) 2012 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.
5 #ifndef STORAGE_BROWSER_FILEAPI_FILE_WRITER_DELEGATE_H_
6 #define STORAGE_BROWSER_FILEAPI_FILE_WRITER_DELEGATE_H_
8 #include "base/files/file.h"
9 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/time/time.h"
13 #include "net/base/file_stream.h"
14 #include "net/base/io_buffer.h"
15 #include "net/url_request/url_request.h"
16 #include "storage/browser/storage_browser_export.h"
18 namespace storage {
20 class FileStreamWriter;
21 enum class FlushPolicy;
23 class STORAGE_EXPORT_PRIVATE FileWriterDelegate
24 : public net::URLRequest::Delegate {
25 public:
26 enum WriteProgressStatus {
27 SUCCESS_IO_PENDING,
28 SUCCESS_COMPLETED,
29 ERROR_WRITE_STARTED,
30 ERROR_WRITE_NOT_STARTED,
33 typedef base::Callback<void(base::File::Error result,
34 int64 bytes,
35 WriteProgressStatus write_status)>
36 DelegateWriteCallback;
38 FileWriterDelegate(scoped_ptr<FileStreamWriter> file_writer,
39 FlushPolicy flush_policy);
40 ~FileWriterDelegate() override;
42 void Start(scoped_ptr<net::URLRequest> request,
43 const DelegateWriteCallback& write_callback);
45 // Cancels the current write operation. This will synchronously or
46 // asynchronously call the given write callback (which may result in
47 // deleting this).
48 void Cancel();
50 void OnReceivedRedirect(net::URLRequest* request,
51 const net::RedirectInfo& redirect_info,
52 bool* defer_redirect) override;
53 void OnAuthRequired(net::URLRequest* request,
54 net::AuthChallengeInfo* auth_info) override;
55 void OnCertificateRequested(
56 net::URLRequest* request,
57 net::SSLCertRequestInfo* cert_request_info) override;
58 void OnSSLCertificateError(net::URLRequest* request,
59 const net::SSLInfo& ssl_info,
60 bool fatal) override;
61 void OnResponseStarted(net::URLRequest* request) override;
62 void OnReadCompleted(net::URLRequest* request, int bytes_read) override;
64 private:
65 void OnGetFileInfoAndStartRequest(
66 scoped_ptr<net::URLRequest> request,
67 base::File::Error error,
68 const base::File::Info& file_info);
69 void Read();
70 void OnDataReceived(int bytes_read);
71 void Write();
72 void OnDataWritten(int write_response);
73 void OnError(base::File::Error error);
74 void OnProgress(int bytes_read, bool done);
75 void OnWriteCancelled(int status);
76 void MaybeFlushForCompletion(base::File::Error error,
77 int bytes_written,
78 WriteProgressStatus progress_status);
79 void OnFlushed(base::File::Error error,
80 int bytes_written,
81 WriteProgressStatus progress_status,
82 int flush_error);
84 WriteProgressStatus GetCompletionStatusOnError() const;
86 DelegateWriteCallback write_callback_;
87 scoped_ptr<FileStreamWriter> file_stream_writer_;
88 base::Time last_progress_event_time_;
89 bool writing_started_;
90 FlushPolicy flush_policy_;
91 int bytes_written_backlog_;
92 int bytes_written_;
93 int bytes_read_;
94 scoped_refptr<net::IOBufferWithSize> io_buffer_;
95 scoped_refptr<net::DrainableIOBuffer> cursor_;
96 scoped_ptr<net::URLRequest> request_;
98 base::WeakPtrFactory<FileWriterDelegate> weak_factory_;
100 DISALLOW_COPY_AND_ASSIGN(FileWriterDelegate);
103 } // namespace storage
105 #endif // STORAGE_BROWSER_FILEAPI_FILE_WRITER_DELEGATE_H_