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/socket/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 RequestPriority priority, | 187 RequestPriority priority, |
188 const scoped_refptr<TransportSocketParams>& params, | 188 const scoped_refptr<TransportSocketParams>& params, |
189 base::TimeDelta timeout_duration, | 189 base::TimeDelta timeout_duration, |
190 ClientSocketFactory* client_socket_factory, | 190 ClientSocketFactory* client_socket_factory, |
191 HostResolver* host_resolver, | 191 HostResolver* host_resolver, |
192 Delegate* delegate, | 192 Delegate* delegate, |
193 NetLog* net_log) | 193 NetLog* net_log) |
194 : ConnectJob(group_name, timeout_duration, priority, delegate, | 194 : ConnectJob(group_name, timeout_duration, priority, delegate, |
195 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), | 195 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), |
196 helper_(params, client_socket_factory, host_resolver, &connect_timing_), | 196 helper_(params, client_socket_factory, host_resolver, &connect_timing_), |
197 interval_between_connects_(CONNECT_INTERVAL_GT_20MS) { | 197 interval_between_connects_(CONNECT_INTERVAL_GT_20MS), |
198 group_name_(group_name) { | |
Randy Smith (Not in Mondays)
2014/08/11 19:07:01
Make sure to get the socket pool changes reviewed
| |
198 helper_.SetOnIOComplete(this); | 199 helper_.SetOnIOComplete(this); |
199 } | 200 } |
200 | 201 |
201 TransportConnectJob::~TransportConnectJob() { | 202 TransportConnectJob::~TransportConnectJob() { |
202 // We don't worry about cancelling the host resolution and TCP connect, since | 203 // We don't worry about cancelling the host resolution and TCP connect, since |
203 // ~SingleRequestHostResolver and ~StreamSocket will take care of it. | 204 // ~SingleRequestHostResolver and ~StreamSocket will take care of it. |
204 } | 205 } |
205 | 206 |
206 LoadState TransportConnectJob::GetLoadState() const { | 207 LoadState TransportConnectJob::GetLoadState() const { |
207 switch (helper_.next_state()) { | 208 switch (helper_.next_state()) { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
254 interval_between_connects_ = CONNECT_INTERVAL_LE_20MS; | 255 interval_between_connects_ = CONNECT_INTERVAL_LE_20MS; |
255 else | 256 else |
256 interval_between_connects_ = CONNECT_INTERVAL_GT_20MS; | 257 interval_between_connects_ = CONNECT_INTERVAL_GT_20MS; |
257 } | 258 } |
258 | 259 |
259 helper_.set_next_state( | 260 helper_.set_next_state( |
260 TransportConnectJobHelper::STATE_TRANSPORT_CONNECT_COMPLETE); | 261 TransportConnectJobHelper::STATE_TRANSPORT_CONNECT_COMPLETE); |
261 transport_socket_ = | 262 transport_socket_ = |
262 helper_.client_socket_factory()->CreateTransportClientSocket( | 263 helper_.client_socket_factory()->CreateTransportClientSocket( |
263 helper_.addresses(), net_log().net_log(), net_log().source()); | 264 helper_.addresses(), net_log().net_log(), net_log().source()); |
265 | |
266 // Enable TCP FastOpen if SSL socket. (This is a quite a hackish | |
267 // approach, but using TFO requires a more substantial change in the | |
268 // socket create/connect path.) | |
269 // TODO (jri): Finch trial this. | |
270 if (group_name_.substr(0, 3) == "ssl") { | |
Adam Rice
2014/08/11 05:33:38
Should this also be enabled for pm/ssl sockets? I
| |
271 transport_socket_->EnableTCPFastOpen(); | |
272 } | |
273 | |
264 int rv = transport_socket_->Connect(helper_.on_io_complete()); | 274 int rv = transport_socket_->Connect(helper_.on_io_complete()); |
265 if (rv == ERR_IO_PENDING && | 275 if (rv == ERR_IO_PENDING && |
266 helper_.addresses().front().GetFamily() == ADDRESS_FAMILY_IPV6 && | 276 helper_.addresses().front().GetFamily() == ADDRESS_FAMILY_IPV6 && |
267 !AddressListOnlyContainsIPv6(helper_.addresses())) { | 277 !AddressListOnlyContainsIPv6(helper_.addresses())) { |
268 fallback_timer_.Start( | 278 fallback_timer_.Start( |
269 FROM_HERE, | 279 FROM_HERE, |
270 base::TimeDelta::FromMilliseconds( | 280 base::TimeDelta::FromMilliseconds( |
271 TransportConnectJobHelper::kIPv6FallbackTimerInMs), | 281 TransportConnectJobHelper::kIPv6FallbackTimerInMs), |
272 this, | 282 this, |
273 &TransportConnectJob::DoIPv6FallbackTransportConnect); | 283 &TransportConnectJob::DoIPv6FallbackTransportConnect); |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
535 HigherLayeredPool* higher_pool) { | 545 HigherLayeredPool* higher_pool) { |
536 base_.AddHigherLayeredPool(higher_pool); | 546 base_.AddHigherLayeredPool(higher_pool); |
537 } | 547 } |
538 | 548 |
539 void TransportClientSocketPool::RemoveHigherLayeredPool( | 549 void TransportClientSocketPool::RemoveHigherLayeredPool( |
540 HigherLayeredPool* higher_pool) { | 550 HigherLayeredPool* higher_pool) { |
541 base_.RemoveHigherLayeredPool(higher_pool); | 551 base_.RemoveHigherLayeredPool(higher_pool); |
542 } | 552 } |
543 | 553 |
544 } // namespace net | 554 } // namespace net |
OLD | NEW |