1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/http/http_stream_request.h"
6
7 #include <utility>
8
9 #include "base/check.h"
10 #include "base/functional/callback.h"
11 #include "net/http/bidirectional_stream_impl.h"
12 #include "net/log/net_log_event_type.h"
13 #include "net/spdy/bidirectional_stream_spdy_impl.h"
14 #include "net/spdy/spdy_http_stream.h"
15 #include "net/spdy/spdy_session.h"
16
17 namespace net {
18
HttpStreamRequest(Helper * helper,WebSocketHandshakeStreamBase::CreateHelper * websocket_handshake_stream_create_helper,const NetLogWithSource & net_log,StreamType stream_type)19 HttpStreamRequest::HttpStreamRequest(
20 Helper* helper,
21 WebSocketHandshakeStreamBase::CreateHelper*
22 websocket_handshake_stream_create_helper,
23 const NetLogWithSource& net_log,
24 StreamType stream_type)
25 : helper_(helper),
26 websocket_handshake_stream_create_helper_(
27 websocket_handshake_stream_create_helper),
28 net_log_(net_log),
29 stream_type_(stream_type) {
30 net_log_.BeginEvent(NetLogEventType::HTTP_STREAM_REQUEST);
31 }
32
~HttpStreamRequest()33 HttpStreamRequest::~HttpStreamRequest() {
34 net_log_.EndEvent(NetLogEventType::HTTP_STREAM_REQUEST);
35 helper_.ExtractAsDangling()->OnRequestComplete(); // May delete `*helper_`;
36 }
37
Complete(NextProto negotiated_protocol,AlternateProtocolUsage alternate_protocol_usage)38 void HttpStreamRequest::Complete(
39 NextProto negotiated_protocol,
40 AlternateProtocolUsage alternate_protocol_usage) {
41 DCHECK(!completed_);
42 completed_ = true;
43 negotiated_protocol_ = negotiated_protocol;
44 alternate_protocol_usage_ = alternate_protocol_usage;
45 }
46
RestartTunnelWithProxyAuth()47 int HttpStreamRequest::RestartTunnelWithProxyAuth() {
48 return helper_->RestartTunnelWithProxyAuth();
49 }
50
SetPriority(RequestPriority priority)51 void HttpStreamRequest::SetPriority(RequestPriority priority) {
52 helper_->SetPriority(priority);
53 }
54
GetLoadState() const55 LoadState HttpStreamRequest::GetLoadState() const {
56 return helper_->GetLoadState();
57 }
58
negotiated_protocol() const59 NextProto HttpStreamRequest::negotiated_protocol() const {
60 DCHECK(completed_);
61 return negotiated_protocol_;
62 }
63
alternate_protocol_usage() const64 AlternateProtocolUsage HttpStreamRequest::alternate_protocol_usage() const {
65 DCHECK(completed_);
66 return alternate_protocol_usage_;
67 }
68
connection_attempts() const69 const ConnectionAttempts& HttpStreamRequest::connection_attempts() const {
70 return connection_attempts_;
71 }
72
AddConnectionAttempts(const ConnectionAttempts & attempts)73 void HttpStreamRequest::AddConnectionAttempts(
74 const ConnectionAttempts& attempts) {
75 for (const auto& attempt : attempts) {
76 connection_attempts_.push_back(attempt);
77 }
78 }
79
80 WebSocketHandshakeStreamBase::CreateHelper*
websocket_handshake_stream_create_helper() const81 HttpStreamRequest::websocket_handshake_stream_create_helper() const {
82 return websocket_handshake_stream_create_helper_;
83 }
84
SetDnsResolutionTimeOverrides(base::TimeTicks dns_resolution_start_time_override,base::TimeTicks dns_resolution_end_time_override)85 void HttpStreamRequest::SetDnsResolutionTimeOverrides(
86 base::TimeTicks dns_resolution_start_time_override,
87 base::TimeTicks dns_resolution_end_time_override) {
88 CHECK(!dns_resolution_start_time_override.is_null());
89 CHECK(!dns_resolution_end_time_override.is_null());
90 if (dns_resolution_start_time_override_.is_null() ||
91 (dns_resolution_start_time_override <
92 dns_resolution_start_time_override_)) {
93 dns_resolution_start_time_override_ = dns_resolution_start_time_override;
94 }
95 if (dns_resolution_end_time_override_.is_null() ||
96 (dns_resolution_end_time_override < dns_resolution_end_time_override_)) {
97 dns_resolution_end_time_override_ = dns_resolution_end_time_override;
98 }
99 }
100
101 } // namespace net
102