| 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 18 matching lines...) Expand all Loading... |
| 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 |
| 39 : public QuicChromiumClientStream::Delegate, | 39 : public QuicClientPushPromiseIndex::Delegate, |
| 40 public QuicClientPushPromiseIndex::Delegate, | |
| 41 public MultiplexedHttpStream { | 40 public MultiplexedHttpStream { |
| 42 public: | 41 public: |
| 43 explicit QuicHttpStream( | 42 explicit QuicHttpStream( |
| 44 std::unique_ptr<QuicChromiumClientSession::Handle> session); | 43 std::unique_ptr<QuicChromiumClientSession::Handle> session); |
| 45 | 44 |
| 46 ~QuicHttpStream() override; | 45 ~QuicHttpStream() override; |
| 47 | 46 |
| 48 // HttpStream implementation. | 47 // HttpStream implementation. |
| 49 int InitializeStream(const HttpRequestInfo* request_info, | 48 int InitializeStream(const HttpRequestInfo* request_info, |
| 50 RequestPriority priority, | 49 RequestPriority priority, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 61 bool IsResponseBodyComplete() const override; | 60 bool IsResponseBodyComplete() const override; |
| 62 bool IsConnectionReused() const override; | 61 bool IsConnectionReused() const override; |
| 63 int64_t GetTotalReceivedBytes() const override; | 62 int64_t GetTotalReceivedBytes() const override; |
| 64 int64_t GetTotalSentBytes() const override; | 63 int64_t GetTotalSentBytes() const override; |
| 65 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; | 64 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; |
| 66 bool GetAlternativeService( | 65 bool GetAlternativeService( |
| 67 AlternativeService* alternative_service) const override; | 66 AlternativeService* alternative_service) const override; |
| 68 void PopulateNetErrorDetails(NetErrorDetails* details) override; | 67 void PopulateNetErrorDetails(NetErrorDetails* details) override; |
| 69 void SetPriority(RequestPriority priority) override; | 68 void SetPriority(RequestPriority priority) override; |
| 70 | 69 |
| 71 // QuicChromiumClientStream::Delegate implementation | |
| 72 void OnClose() override; | |
| 73 void OnError(int error) override; | |
| 74 | |
| 75 // QuicClientPushPromiseIndex::Delegate implementation | 70 // QuicClientPushPromiseIndex::Delegate implementation |
| 76 bool CheckVary(const SpdyHeaderBlock& client_request, | 71 bool CheckVary(const SpdyHeaderBlock& client_request, |
| 77 const SpdyHeaderBlock& promise_request, | 72 const SpdyHeaderBlock& promise_request, |
| 78 const SpdyHeaderBlock& promise_response) override; | 73 const SpdyHeaderBlock& promise_response) override; |
| 79 // TODO(rch): QuicClientPushPromiseIndex::Delegate is part of shared code. | 74 // TODO(rch): QuicClientPushPromiseIndex::Delegate is part of shared code. |
| 80 // Figure out how to make the QuicHttpStream receive a Handle in this | 75 // Figure out how to make the QuicHttpStream receive a Handle in this |
| 81 // case instead of a QuicSpdyStream. | 76 // case instead of a QuicSpdyStream. |
| 82 void OnRendezvousResult(QuicSpdyStream* stream) override; | 77 void OnRendezvousResult(QuicSpdyStream* stream) override; |
| 83 | 78 |
| 84 static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion( | 79 static HttpResponseInfo::ConnectionInfo ConnectionInfoFromQuicVersion( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 void ReadTrailingHeaders(); | 119 void ReadTrailingHeaders(); |
| 125 void OnReadTrailingHeadersComplete(int rv); | 120 void OnReadTrailingHeadersComplete(int rv); |
| 126 | 121 |
| 127 void OnReadBodyComplete(int rv); | 122 void OnReadBodyComplete(int rv); |
| 128 int HandleReadComplete(int rv); | 123 int HandleReadComplete(int rv); |
| 129 | 124 |
| 130 void EnterStateSendHeaders(); | 125 void EnterStateSendHeaders(); |
| 131 | 126 |
| 132 void ResetStream(); | 127 void ResetStream(); |
| 133 | 128 |
| 129 // Returns ERR_QUIC_HANDSHAKE_FAILED, if |rv| is ERR_QUIC_PROTOCOL_ERROR and |
| 130 // the handshake was never confirmed. Otherwise, returns |rv|. |
| 131 int MapStreamError(int rv); |
| 132 |
| 134 // If |has_response_status_| is false, sets |response_status| to the result | 133 // If |has_response_status_| is false, sets |response_status| to the result |
| 135 // of ComputeResponseStatus(). Returns |response_status_|. | 134 // of ComputeResponseStatus(). Returns |response_status_|. |
| 136 int GetResponseStatus(); | 135 int GetResponseStatus(); |
| 137 // Sets the result of |ComputeResponseStatus()| as the |response_status_|. | 136 // Sets the result of |ComputeResponseStatus()| as the |response_status_|. |
| 138 void SaveResponseStatus(); | 137 void SaveResponseStatus(); |
| 139 // Sets |response_status_| to |response_status| and sets | 138 // Sets |response_status_| to |response_status| and sets |
| 140 // |has_response_status_| to true. | 139 // |has_response_status_| to true. |
| 141 void SetResponseStatus(int response_status); | 140 void SetResponseStatus(int response_status); |
| 142 // Computes the correct response status based on the status of the handshake, | 141 // Computes the correct response status based on the status of the handshake, |
| 143 // |session_error|, |connection_error| and |stream_error|. | 142 // |session_error|, |connection_error| and |stream_error|. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 int user_buffer_len_; | 208 int user_buffer_len_; |
| 210 | 209 |
| 211 // Temporary buffer used to read the request body from UploadDataStream. | 210 // Temporary buffer used to read the request body from UploadDataStream. |
| 212 scoped_refptr<IOBufferWithSize> raw_request_body_buf_; | 211 scoped_refptr<IOBufferWithSize> raw_request_body_buf_; |
| 213 // Wraps raw_request_body_buf_ to read the remaining data progressively. | 212 // Wraps raw_request_body_buf_ to read the remaining data progressively. |
| 214 scoped_refptr<DrainableIOBuffer> request_body_buf_; | 213 scoped_refptr<DrainableIOBuffer> request_body_buf_; |
| 215 | 214 |
| 216 NetLogWithSource stream_net_log_; | 215 NetLogWithSource stream_net_log_; |
| 217 | 216 |
| 218 int session_error_; // Error code from the connection shutdown. | 217 int session_error_; // Error code from the connection shutdown. |
| 219 QuicErrorCode quic_connection_error_; // Cached connection error code. | |
| 220 QuicRstStreamErrorCode quic_stream_error_; // Cached stream error code. | |
| 221 | 218 |
| 222 bool found_promise_; | 219 bool found_promise_; |
| 223 // |QuicClientPromisedInfo| owns this. It will be set when |Try()| | 220 // |QuicClientPromisedInfo| owns this. It will be set when |Try()| |
| 224 // is asynchronous, i.e. it returned QUIC_PENDING, and remains valid | 221 // is asynchronous, i.e. it returned QUIC_PENDING, and remains valid |
| 225 // until |OnRendezvouResult()| fires or |push_handle_->Cancel()| is | 222 // until |OnRendezvouResult()| fires or |push_handle_->Cancel()| is |
| 226 // invoked. | 223 // invoked. |
| 227 QuicClientPushPromiseIndex::TryHandle* push_handle_; | 224 QuicClientPushPromiseIndex::TryHandle* push_handle_; |
| 228 | 225 |
| 229 // Set to true when DoLoop() is being executed, false otherwise. | 226 // Set to true when DoLoop() is being executed, false otherwise. |
| 230 bool in_loop_; | 227 bool in_loop_; |
| 231 | 228 |
| 232 // Session connect timing info. | 229 // Session connect timing info. |
| 233 LoadTimingInfo::ConnectTiming connect_timing_; | 230 LoadTimingInfo::ConnectTiming connect_timing_; |
| 234 | 231 |
| 235 base::WeakPtrFactory<QuicHttpStream> weak_factory_; | 232 base::WeakPtrFactory<QuicHttpStream> weak_factory_; |
| 236 | 233 |
| 237 DISALLOW_COPY_AND_ASSIGN(QuicHttpStream); | 234 DISALLOW_COPY_AND_ASSIGN(QuicHttpStream); |
| 238 }; | 235 }; |
| 239 | 236 |
| 240 } // namespace net | 237 } // namespace net |
| 241 | 238 |
| 242 #endif // NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ | 239 #endif // NET_QUIC_CHROMIUM_QUIC_HTTP_STREAM_H_ |
| OLD | NEW |