// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/http/http_stream_request.h" #include #include "base/callback.h" #include "base/logging.h" #include "base/stl_util.h" #include "net/http/bidirectional_stream_impl.h" #include "net/log/net_log_event_type.h" #include "net/spdy/spdy_http_stream.h" #include "net/spdy/spdy_session.h" namespace net { HttpStreamRequest::HttpStreamRequest( const GURL& url, Helper* helper, HttpStreamRequest::Delegate* delegate, WebSocketHandshakeStreamBase::CreateHelper* websocket_handshake_stream_create_helper, const NetLogWithSource& net_log, StreamType stream_type) : url_(url), helper_(helper), websocket_handshake_stream_create_helper_( websocket_handshake_stream_create_helper), net_log_(net_log), completed_(false), was_alpn_negotiated_(false), negotiated_protocol_(kProtoUnknown), using_spdy_(false), stream_type_(stream_type) { net_log_.BeginEvent(NetLogEventType::HTTP_STREAM_REQUEST); } HttpStreamRequest::~HttpStreamRequest() { net_log_.EndEvent(NetLogEventType::HTTP_STREAM_REQUEST); helper_->OnRequestComplete(); } void HttpStreamRequest::Complete(bool was_alpn_negotiated, NextProto negotiated_protocol, bool using_spdy) { DCHECK(!completed_); completed_ = true; was_alpn_negotiated_ = was_alpn_negotiated; negotiated_protocol_ = negotiated_protocol; using_spdy_ = using_spdy; } void HttpStreamRequest::OnStreamReadyOnPooledConnection( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, std::unique_ptr stream) { DCHECK(completed_); helper_->OnStreamReadyOnPooledConnection(used_ssl_config, used_proxy_info, std::move(stream)); } void HttpStreamRequest::OnBidirectionalStreamImplReadyOnPooledConnection( const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, std::unique_ptr stream) { DCHECK(completed_); helper_->OnBidirectionalStreamImplReadyOnPooledConnection( used_ssl_config, used_proxy_info, std::move(stream)); } int HttpStreamRequest::RestartTunnelWithProxyAuth() { return helper_->RestartTunnelWithProxyAuth(); } void HttpStreamRequest::SetPriority(RequestPriority priority) { helper_->SetPriority(priority); } LoadState HttpStreamRequest::GetLoadState() const { return helper_->GetLoadState(); } bool HttpStreamRequest::was_alpn_negotiated() const { DCHECK(completed_); return was_alpn_negotiated_; } NextProto HttpStreamRequest::negotiated_protocol() const { DCHECK(completed_); return negotiated_protocol_; } bool HttpStreamRequest::using_spdy() const { DCHECK(completed_); return using_spdy_; } const ConnectionAttempts& HttpStreamRequest::connection_attempts() const { return connection_attempts_; } void HttpStreamRequest::AddConnectionAttempts( const ConnectionAttempts& attempts) { for (const auto& attempt : attempts) connection_attempts_.push_back(attempt); } WebSocketHandshakeStreamBase::CreateHelper* HttpStreamRequest::websocket_handshake_stream_create_helper() const { return websocket_handshake_stream_create_helper_; } } // namespace net