| 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 #include "net/http/http_stream_factory_impl_job.h" | 5 #include "net/http/http_stream_factory_impl_job.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 12 #include "base/feature_list.h" | 12 #include "base/feature_list.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/memory/ptr_util.h" |
| 15 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
| 16 #include "base/metrics/sparse_histogram.h" | 17 #include "base/metrics/sparse_histogram.h" |
| 17 #include "base/profiler/scoped_tracker.h" | 18 #include "base/profiler/scoped_tracker.h" |
| 18 #include "base/single_thread_task_runner.h" | 19 #include "base/single_thread_task_runner.h" |
| 19 #include "base/stl_util.h" | 20 #include "base/stl_util.h" |
| 20 #include "base/strings/string_number_conversions.h" | 21 #include "base/strings/string_number_conversions.h" |
| 21 #include "base/strings/string_util.h" | 22 #include "base/strings/string_util.h" |
| 22 #include "base/threading/thread_task_runner_handle.h" | 23 #include "base/threading/thread_task_runner_handle.h" |
| 23 #include "base/trace_event/trace_event.h" | 24 #include "base/trace_event/trace_event.h" |
| 24 #include "base/values.h" | 25 #include "base/values.h" |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 } // namespace | 121 } // namespace |
| 121 | 122 |
| 122 // Returns parameters associated with the start of a HTTP stream job. | 123 // Returns parameters associated with the start of a HTTP stream job. |
| 123 std::unique_ptr<base::Value> NetLogHttpStreamJobCallback( | 124 std::unique_ptr<base::Value> NetLogHttpStreamJobCallback( |
| 124 const NetLogSource& source, | 125 const NetLogSource& source, |
| 125 const GURL* original_url, | 126 const GURL* original_url, |
| 126 const GURL* url, | 127 const GURL* url, |
| 127 const AlternativeService* alternative_service, | 128 const AlternativeService* alternative_service, |
| 128 RequestPriority priority, | 129 RequestPriority priority, |
| 129 NetLogCaptureMode /* capture_mode */) { | 130 NetLogCaptureMode /* capture_mode */) { |
| 130 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 131 auto dict = base::MakeUnique<base::DictionaryValue>(); |
| 131 if (source.IsValid()) | 132 if (source.IsValid()) |
| 132 source.AddToEventParameters(dict.get()); | 133 source.AddToEventParameters(dict.get()); |
| 133 dict->SetString("original_url", original_url->GetOrigin().spec()); | 134 dict->SetString("original_url", original_url->GetOrigin().spec()); |
| 134 dict->SetString("url", url->GetOrigin().spec()); | 135 dict->SetString("url", url->GetOrigin().spec()); |
| 135 dict->SetString("alternative_service", alternative_service->ToString()); | 136 dict->SetString("alternative_service", alternative_service->ToString()); |
| 136 dict->SetString("priority", RequestPriorityToString(priority)); | 137 dict->SetString("priority", RequestPriorityToString(priority)); |
| 137 return std::move(dict); | 138 return std::move(dict); |
| 138 } | 139 } |
| 139 | 140 |
| 140 // Returns parameters associated with the Proto (with NPN negotiation) of a HTTP | 141 // Returns parameters associated with the Proto (with NPN negotiation) of a HTTP |
| 141 // stream. | 142 // stream. |
| 142 std::unique_ptr<base::Value> NetLogHttpStreamProtoCallback( | 143 std::unique_ptr<base::Value> NetLogHttpStreamProtoCallback( |
| 143 NextProto negotiated_protocol, | 144 NextProto negotiated_protocol, |
| 144 NetLogCaptureMode /* capture_mode */) { | 145 NetLogCaptureMode /* capture_mode */) { |
| 145 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 146 auto dict = base::MakeUnique<base::DictionaryValue>(); |
| 146 | 147 |
| 147 dict->SetString("proto", NextProtoToString(negotiated_protocol)); | 148 dict->SetString("proto", NextProtoToString(negotiated_protocol)); |
| 148 return std::move(dict); | 149 return std::move(dict); |
| 149 } | 150 } |
| 150 | 151 |
| 151 // Returns parameters associated with the proxy resolution. | 152 // Returns parameters associated with the proxy resolution. |
| 152 std::unique_ptr<base::Value> NetLogHttpStreamJobProxyServerResolved( | 153 std::unique_ptr<base::Value> NetLogHttpStreamJobProxyServerResolved( |
| 153 const ProxyServer& proxy_server, | 154 const ProxyServer& proxy_server, |
| 154 NetLogCaptureMode /* capture_mode */) { | 155 NetLogCaptureMode /* capture_mode */) { |
| 155 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 156 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| (...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1176 } | 1177 } |
| 1177 | 1178 |
| 1178 int HttpStreamFactoryImpl::Job::SetSpdyHttpStreamOrBidirectionalStreamImpl( | 1179 int HttpStreamFactoryImpl::Job::SetSpdyHttpStreamOrBidirectionalStreamImpl( |
| 1179 base::WeakPtr<SpdySession> session, | 1180 base::WeakPtr<SpdySession> session, |
| 1180 bool direct) { | 1181 bool direct) { |
| 1181 // TODO(ricea): Restore the code for WebSockets over SPDY once it's | 1182 // TODO(ricea): Restore the code for WebSockets over SPDY once it's |
| 1182 // implemented. | 1183 // implemented. |
| 1183 if (delegate_->for_websockets()) | 1184 if (delegate_->for_websockets()) |
| 1184 return ERR_NOT_IMPLEMENTED; | 1185 return ERR_NOT_IMPLEMENTED; |
| 1185 if (stream_type_ == HttpStreamRequest::BIDIRECTIONAL_STREAM) { | 1186 if (stream_type_ == HttpStreamRequest::BIDIRECTIONAL_STREAM) { |
| 1186 bidirectional_stream_impl_.reset( | 1187 bidirectional_stream_impl_ = base::MakeUnique<BidirectionalStreamSpdyImpl>( |
| 1187 new BidirectionalStreamSpdyImpl(session, net_log_.source())); | 1188 session, net_log_.source()); |
| 1188 return OK; | 1189 return OK; |
| 1189 } | 1190 } |
| 1190 | 1191 |
| 1191 // TODO(willchan): Delete this code, because eventually, the | 1192 // TODO(willchan): Delete this code, because eventually, the |
| 1192 // HttpStreamFactoryImpl will be creating all the SpdyHttpStreams, since it | 1193 // HttpStreamFactoryImpl will be creating all the SpdyHttpStreams, since it |
| 1193 // will know when SpdySessions become available. | 1194 // will know when SpdySessions become available. |
| 1194 | 1195 |
| 1195 bool use_relative_url = | 1196 bool use_relative_url = |
| 1196 direct || request_info_.url.SchemeIs(url::kHttpsScheme); | 1197 direct || request_info_.url.SchemeIs(url::kHttpsScheme); |
| 1197 stream_.reset( | 1198 stream_ = base::MakeUnique<SpdyHttpStream>(session, use_relative_url, |
| 1198 new SpdyHttpStream(session, use_relative_url, net_log_.source())); | 1199 net_log_.source()); |
| 1199 return OK; | 1200 return OK; |
| 1200 } | 1201 } |
| 1201 | 1202 |
| 1202 int HttpStreamFactoryImpl::Job::DoCreateStream() { | 1203 int HttpStreamFactoryImpl::Job::DoCreateStream() { |
| 1203 // TODO(pkasting): Remove ScopedTracker below once crbug.com/462811 is fixed. | 1204 // TODO(pkasting): Remove ScopedTracker below once crbug.com/462811 is fixed. |
| 1204 tracked_objects::ScopedTracker tracking_profile( | 1205 tracked_objects::ScopedTracker tracking_profile( |
| 1205 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1206 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1206 "462811 HttpStreamFactoryImpl::Job::DoCreateStream")); | 1207 "462811 HttpStreamFactoryImpl::Job::DoCreateStream")); |
| 1207 DCHECK(connection_->socket() || existing_spdy_session_.get() || using_quic_); | 1208 DCHECK(connection_->socket() || existing_spdy_session_.get() || using_quic_); |
| 1208 DCHECK(!IsQuicAlternative()); | 1209 DCHECK(!IsQuicAlternative()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1228 bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) && | 1229 bool using_proxy = (proxy_info_.is_http() || proxy_info_.is_https()) && |
| 1229 (request_info_.url.SchemeIs(url::kHttpScheme) || | 1230 (request_info_.url.SchemeIs(url::kHttpScheme) || |
| 1230 request_info_.url.SchemeIs(url::kFtpScheme)); | 1231 request_info_.url.SchemeIs(url::kFtpScheme)); |
| 1231 if (delegate_->for_websockets()) { | 1232 if (delegate_->for_websockets()) { |
| 1232 DCHECK_NE(job_type_, PRECONNECT); | 1233 DCHECK_NE(job_type_, PRECONNECT); |
| 1233 DCHECK(delegate_->websocket_handshake_stream_create_helper()); | 1234 DCHECK(delegate_->websocket_handshake_stream_create_helper()); |
| 1234 websocket_stream_ = | 1235 websocket_stream_ = |
| 1235 delegate_->websocket_handshake_stream_create_helper() | 1236 delegate_->websocket_handshake_stream_create_helper() |
| 1236 ->CreateBasicStream(std::move(connection_), using_proxy); | 1237 ->CreateBasicStream(std::move(connection_), using_proxy); |
| 1237 } else { | 1238 } else { |
| 1238 stream_.reset(new HttpBasicStream( | 1239 stream_ = base::MakeUnique<HttpBasicStream>( |
| 1239 std::move(connection_), using_proxy, | 1240 std::move(connection_), using_proxy, |
| 1240 session_->params().http_09_on_non_default_ports_enabled)); | 1241 session_->params().http_09_on_non_default_ports_enabled); |
| 1241 } | 1242 } |
| 1242 return OK; | 1243 return OK; |
| 1243 } | 1244 } |
| 1244 | 1245 |
| 1245 CHECK(!stream_.get()); | 1246 CHECK(!stream_.get()); |
| 1246 | 1247 |
| 1247 SpdySessionKey spdy_session_key = GetSpdySessionKey(); | 1248 SpdySessionKey spdy_session_key = GetSpdySessionKey(); |
| 1248 if (!existing_spdy_session_) { | 1249 if (!existing_spdy_session_) { |
| 1249 existing_spdy_session_ = | 1250 existing_spdy_session_ = |
| 1250 session_->spdy_session_pool()->FindAvailableSession( | 1251 session_->spdy_session_pool()->FindAvailableSession( |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1557 | 1558 |
| 1558 ConnectionAttempts socket_attempts = connection_->connection_attempts(); | 1559 ConnectionAttempts socket_attempts = connection_->connection_attempts(); |
| 1559 if (connection_->socket()) { | 1560 if (connection_->socket()) { |
| 1560 connection_->socket()->GetConnectionAttempts(&socket_attempts); | 1561 connection_->socket()->GetConnectionAttempts(&socket_attempts); |
| 1561 } | 1562 } |
| 1562 | 1563 |
| 1563 delegate_->AddConnectionAttemptsToRequest(this, socket_attempts); | 1564 delegate_->AddConnectionAttemptsToRequest(this, socket_attempts); |
| 1564 } | 1565 } |
| 1565 | 1566 |
| 1566 } // namespace net | 1567 } // namespace net |
| OLD | NEW |