OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ | 5 #ifndef NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ |
6 #define NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ | 6 #define NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 17 matching lines...) Expand all Loading... |
28 | 28 |
29 namespace net { | 29 namespace net { |
30 | 30 |
31 namespace test { | 31 namespace test { |
32 class QuicHttpStreamPeer; | 32 class QuicHttpStreamPeer; |
33 } // namespace test | 33 } // namespace test |
34 | 34 |
35 // The QuicHttpStream is a QUIC-specific HttpStream subclass. It holds a | 35 // The QuicHttpStream is a QUIC-specific HttpStream subclass. It holds a |
36 // non-owning pointer to a QuicChromiumClientStream which it uses to | 36 // non-owning pointer to a QuicChromiumClientStream which it uses to |
37 // send and receive data. | 37 // send and receive data. |
38 class NET_EXPORT_PRIVATE QuicHttpStream | 38 class NET_EXPORT_PRIVATE QuicHttpStream : public MultiplexedHttpStream { |
39 : public QuicClientPushPromiseIndex::Delegate, | |
40 public MultiplexedHttpStream { | |
41 public: | 39 public: |
42 explicit QuicHttpStream( | 40 explicit QuicHttpStream( |
43 std::unique_ptr<QuicChromiumClientSession::Handle> session); | 41 std::unique_ptr<QuicChromiumClientSession::Handle> session); |
44 | 42 |
45 ~QuicHttpStream() override; | 43 ~QuicHttpStream() override; |
46 | 44 |
47 // HttpStream implementation. | 45 // HttpStream implementation. |
48 int InitializeStream(const HttpRequestInfo* request_info, | 46 int InitializeStream(const HttpRequestInfo* request_info, |
49 RequestPriority priority, | 47 RequestPriority priority, |
50 const NetLogWithSource& net_log, | 48 const NetLogWithSource& net_log, |
51 const CompletionCallback& callback) override; | 49 const CompletionCallback& callback) override; |
52 int SendRequest(const HttpRequestHeaders& request_headers, | 50 int SendRequest(const HttpRequestHeaders& request_headers, |
53 HttpResponseInfo* response, | 51 HttpResponseInfo* response, |
54 const CompletionCallback& callback) override; | 52 const CompletionCallback& callback) override; |
55 int ReadResponseHeaders(const CompletionCallback& callback) override; | 53 int ReadResponseHeaders(const CompletionCallback& callback) override; |
56 int ReadResponseBody(IOBuffer* buf, | 54 int ReadResponseBody(IOBuffer* buf, |
57 int buf_len, | 55 int buf_len, |
58 const CompletionCallback& callback) override; | 56 const CompletionCallback& callback) override; |
59 void Close(bool not_reusable) override; | 57 void Close(bool not_reusable) override; |
60 bool IsResponseBodyComplete() const override; | 58 bool IsResponseBodyComplete() const override; |
61 bool IsConnectionReused() const override; | 59 bool IsConnectionReused() const override; |
62 int64_t GetTotalReceivedBytes() const override; | 60 int64_t GetTotalReceivedBytes() const override; |
63 int64_t GetTotalSentBytes() const override; | 61 int64_t GetTotalSentBytes() const override; |
64 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; | 62 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; |
65 bool GetAlternativeService( | 63 bool GetAlternativeService( |
66 AlternativeService* alternative_service) const override; | 64 AlternativeService* alternative_service) const override; |
67 void PopulateNetErrorDetails(NetErrorDetails* details) override; | 65 void PopulateNetErrorDetails(NetErrorDetails* details) override; |
68 void SetPriority(RequestPriority priority) override; | 66 void SetPriority(RequestPriority priority) override; |
69 | 67 |
70 // QuicClientPushPromiseIndex::Delegate implementation | |
71 bool CheckVary(const SpdyHeaderBlock& client_request, | |
72 const SpdyHeaderBlock& promise_request, | |
73 const SpdyHeaderBlock& promise_response) override; | |
74 // TODO(rch): QuicClientPushPromiseIndex::Delegate is part of shared code. | |
75 // Figure out how to make the QuicHttpStream receive a Handle in this | |
76 // case instead of a QuicSpdyStream. | |
77 void OnRendezvousResult(QuicSpdyStream* stream) override; | |
78 | |
79 static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion( | 68 static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion( |
80 QuicVersion quic_version); | 69 QuicVersion quic_version); |
81 | 70 |
82 private: | 71 private: |
83 friend class test::QuicHttpStreamPeer; | 72 friend class test::QuicHttpStreamPeer; |
84 | 73 |
85 enum State { | 74 enum State { |
86 STATE_NONE, | 75 STATE_NONE, |
87 STATE_HANDLE_PROMISE, | 76 STATE_HANDLE_PROMISE, |
88 STATE_HANDLE_PROMISE_COMPLETE, | 77 STATE_HANDLE_PROMISE_COMPLETE, |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 // Temporary buffer used to read the request body from UploadDataStream. | 199 // Temporary buffer used to read the request body from UploadDataStream. |
211 scoped_refptr<IOBufferWithSize> raw_request_body_buf_; | 200 scoped_refptr<IOBufferWithSize> raw_request_body_buf_; |
212 // Wraps raw_request_body_buf_ to read the remaining data progressively. | 201 // Wraps raw_request_body_buf_ to read the remaining data progressively. |
213 scoped_refptr<DrainableIOBuffer> request_body_buf_; | 202 scoped_refptr<DrainableIOBuffer> request_body_buf_; |
214 | 203 |
215 NetLogWithSource stream_net_log_; | 204 NetLogWithSource stream_net_log_; |
216 | 205 |
217 int session_error_; // Error code from the connection shutdown. | 206 int session_error_; // Error code from the connection shutdown. |
218 | 207 |
219 bool found_promise_; | 208 bool found_promise_; |
220 // |QuicClientPromisedInfo| owns this. It will be set when |Try()| | |
221 // is asynchronous, i.e. it returned QUIC_PENDING, and remains valid | |
222 // until |OnRendezvouResult()| fires or |push_handle_->Cancel()| is | |
223 // invoked. | |
224 QuicClientPushPromiseIndex::TryHandle* push_handle_; | |
225 | 209 |
226 // Set to true when DoLoop() is being executed, false otherwise. | 210 // Set to true when DoLoop() is being executed, false otherwise. |
227 bool in_loop_; | 211 bool in_loop_; |
228 | 212 |
229 // Session connect timing info. | 213 // Session connect timing info. |
230 LoadTimingInfo::ConnectTiming connect_timing_; | 214 LoadTimingInfo::ConnectTiming connect_timing_; |
231 | 215 |
232 base::WeakPtrFactory<QuicHttpStream> weak_factory_; | 216 base::WeakPtrFactory<QuicHttpStream> weak_factory_; |
233 | 217 |
234 DISALLOW_COPY_AND_ASSIGN(QuicHttpStream); | 218 DISALLOW_COPY_AND_ASSIGN(QuicHttpStream); |
235 }; | 219 }; |
236 | 220 |
237 } // namespace net | 221 } // namespace net |
238 | 222 |
239 #endif // NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ | 223 #endif // NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ |
OLD | NEW |