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/socks_client_socket_pool.h" | 5 #include "net/socket/socks_client_socket_pool.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
10 #include "net/base/load_timing_info.h" | 10 #include "net/base/load_timing_info.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 // None of these tests use a NetLog. | 34 // None of these tests use a NetLog. |
35 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 35 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
36 | 36 |
37 EXPECT_FALSE(load_timing_info.socket_reused); | 37 EXPECT_FALSE(load_timing_info.socket_reused); |
38 | 38 |
39 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 39 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
40 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 40 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
41 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); | 41 ExpectLoadTimingHasOnlyConnectionTimes(load_timing_info); |
42 } | 42 } |
43 | 43 |
44 | |
45 scoped_refptr<TransportSocketParams> CreateProxyHostParams() { | 44 scoped_refptr<TransportSocketParams> CreateProxyHostParams() { |
46 return new TransportSocketParams( | 45 return new TransportSocketParams( |
47 HostPortPair("proxy", 80), false, false, | 46 HostPortPair("proxy", 80), false, false, OnHostResolutionCallback()); |
48 OnHostResolutionCallback()); | |
49 } | 47 } |
50 | 48 |
51 scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { | 49 scoped_refptr<SOCKSSocketParams> CreateSOCKSv4Params() { |
52 return new SOCKSSocketParams( | 50 return new SOCKSSocketParams( |
53 CreateProxyHostParams(), false /* socks_v5 */, | 51 CreateProxyHostParams(), false /* socks_v5 */, HostPortPair("host", 80)); |
54 HostPortPair("host", 80)); | |
55 } | 52 } |
56 | 53 |
57 scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { | 54 scoped_refptr<SOCKSSocketParams> CreateSOCKSv5Params() { |
58 return new SOCKSSocketParams( | 55 return new SOCKSSocketParams( |
59 CreateProxyHostParams(), true /* socks_v5 */, | 56 CreateProxyHostParams(), true /* socks_v5 */, HostPortPair("host", 80)); |
60 HostPortPair("host", 80)); | |
61 } | 57 } |
62 | 58 |
63 class SOCKSClientSocketPoolTest : public testing::Test { | 59 class SOCKSClientSocketPoolTest : public testing::Test { |
64 protected: | 60 protected: |
65 class SOCKS5MockData { | 61 class SOCKS5MockData { |
66 public: | 62 public: |
67 explicit SOCKS5MockData(IoMode mode) { | 63 explicit SOCKS5MockData(IoMode mode) { |
68 writes_.reset(new MockWrite[3]); | 64 writes_.reset(new MockWrite[3]); |
69 writes_[0] = MockWrite(mode, kSOCKS5GreetRequest, | 65 writes_[0] = |
70 kSOCKS5GreetRequestLength); | 66 MockWrite(mode, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength); |
71 writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength); | 67 writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength); |
72 writes_[2] = MockWrite(mode, 0); | 68 writes_[2] = MockWrite(mode, 0); |
73 | 69 |
74 reads_.reset(new MockRead[3]); | 70 reads_.reset(new MockRead[3]); |
75 reads_[0] = MockRead(mode, kSOCKS5GreetResponse, | 71 reads_[0] = |
76 kSOCKS5GreetResponseLength); | 72 MockRead(mode, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength); |
77 reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength); | 73 reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength); |
78 reads_[2] = MockRead(mode, 0); | 74 reads_[2] = MockRead(mode, 0); |
79 | 75 |
80 data_.reset(new StaticSocketDataProvider(reads_.get(), 3, | 76 data_.reset( |
81 writes_.get(), 3)); | 77 new StaticSocketDataProvider(reads_.get(), 3, writes_.get(), 3)); |
82 } | 78 } |
83 | 79 |
84 SocketDataProvider* data_provider() { return data_.get(); } | 80 SocketDataProvider* data_provider() { return data_.get(); } |
85 | 81 |
86 private: | 82 private: |
87 scoped_ptr<StaticSocketDataProvider> data_; | 83 scoped_ptr<StaticSocketDataProvider> data_; |
88 scoped_ptr<MockWrite[]> writes_; | 84 scoped_ptr<MockWrite[]> writes_; |
89 scoped_ptr<MockRead[]> reads_; | 85 scoped_ptr<MockRead[]> reads_; |
90 }; | 86 }; |
91 | 87 |
92 SOCKSClientSocketPoolTest() | 88 SOCKSClientSocketPoolTest() |
93 : transport_histograms_("MockTCP"), | 89 : transport_histograms_("MockTCP"), |
94 transport_socket_pool_( | 90 transport_socket_pool_(kMaxSockets, |
95 kMaxSockets, kMaxSocketsPerGroup, | 91 kMaxSocketsPerGroup, |
96 &transport_histograms_, | 92 &transport_histograms_, |
97 &transport_client_socket_factory_), | 93 &transport_client_socket_factory_), |
98 socks_histograms_("SOCKSUnitTest"), | 94 socks_histograms_("SOCKSUnitTest"), |
99 pool_(kMaxSockets, kMaxSocketsPerGroup, | 95 pool_(kMaxSockets, |
| 96 kMaxSocketsPerGroup, |
100 &socks_histograms_, | 97 &socks_histograms_, |
101 &host_resolver_, | 98 &host_resolver_, |
102 &transport_socket_pool_, | 99 &transport_socket_pool_, |
103 NULL) { | 100 NULL) {} |
104 } | |
105 | 101 |
106 virtual ~SOCKSClientSocketPoolTest() {} | 102 virtual ~SOCKSClientSocketPoolTest() {} |
107 | 103 |
108 int StartRequestV5(const std::string& group_name, RequestPriority priority) { | 104 int StartRequestV5(const std::string& group_name, RequestPriority priority) { |
109 return test_base_.StartRequestUsingPool( | 105 return test_base_.StartRequestUsingPool( |
110 &pool_, group_name, priority, CreateSOCKSv5Params()); | 106 &pool_, group_name, priority, CreateSOCKSv5Params()); |
111 } | 107 } |
112 | 108 |
113 int GetOrderOfRequest(size_t index) const { | 109 int GetOrderOfRequest(size_t index) const { |
114 return test_base_.GetOrderOfRequest(index); | 110 return test_base_.GetOrderOfRequest(index); |
(...skipping 10 matching lines...) Expand all Loading... |
125 SOCKSClientSocketPool pool_; | 121 SOCKSClientSocketPool pool_; |
126 ClientSocketPoolTest test_base_; | 122 ClientSocketPoolTest test_base_; |
127 }; | 123 }; |
128 | 124 |
129 TEST_F(SOCKSClientSocketPoolTest, Simple) { | 125 TEST_F(SOCKSClientSocketPoolTest, Simple) { |
130 SOCKS5MockData data(SYNCHRONOUS); | 126 SOCKS5MockData data(SYNCHRONOUS); |
131 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 127 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
132 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 128 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
133 | 129 |
134 ClientSocketHandle handle; | 130 ClientSocketHandle handle; |
135 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 131 int rv = handle.Init("a", |
136 &pool_, BoundNetLog()); | 132 CreateSOCKSv5Params(), |
| 133 LOW, |
| 134 CompletionCallback(), |
| 135 &pool_, |
| 136 BoundNetLog()); |
137 EXPECT_EQ(OK, rv); | 137 EXPECT_EQ(OK, rv); |
138 EXPECT_TRUE(handle.is_initialized()); | 138 EXPECT_TRUE(handle.is_initialized()); |
139 EXPECT_TRUE(handle.socket()); | 139 EXPECT_TRUE(handle.socket()); |
140 TestLoadTimingInfo(handle); | 140 TestLoadTimingInfo(handle); |
141 } | 141 } |
142 | 142 |
143 // Make sure that SOCKSConnectJob passes on its priority to its | 143 // Make sure that SOCKSConnectJob passes on its priority to its |
144 // socket request on Init. | 144 // socket request on Init. |
145 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { | 145 TEST_F(SOCKSClientSocketPoolTest, SetSocketRequestPriorityOnInit) { |
146 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 146 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
147 RequestPriority priority = static_cast<RequestPriority>(i); | 147 RequestPriority priority = static_cast<RequestPriority>(i); |
148 SOCKS5MockData data(SYNCHRONOUS); | 148 SOCKS5MockData data(SYNCHRONOUS); |
149 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 149 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
150 transport_client_socket_factory_.AddSocketDataProvider( | 150 transport_client_socket_factory_.AddSocketDataProvider( |
151 data.data_provider()); | 151 data.data_provider()); |
152 | 152 |
153 ClientSocketHandle handle; | 153 ClientSocketHandle handle; |
154 EXPECT_EQ(OK, | 154 EXPECT_EQ(OK, |
155 handle.Init("a", CreateSOCKSv5Params(), priority, | 155 handle.Init("a", |
156 CompletionCallback(), &pool_, BoundNetLog())); | 156 CreateSOCKSv5Params(), |
| 157 priority, |
| 158 CompletionCallback(), |
| 159 &pool_, |
| 160 BoundNetLog())); |
157 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 161 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
158 handle.socket()->Disconnect(); | 162 handle.socket()->Disconnect(); |
159 } | 163 } |
160 } | 164 } |
161 | 165 |
162 // Make sure that SOCKSConnectJob passes on its priority to its | 166 // Make sure that SOCKSConnectJob passes on its priority to its |
163 // HostResolver request (for non-SOCKS5) on Init. | 167 // HostResolver request (for non-SOCKS5) on Init. |
164 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { | 168 TEST_F(SOCKSClientSocketPoolTest, SetResolvePriorityOnInit) { |
165 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { | 169 for (int i = MINIMUM_PRIORITY; i <= MAXIMUM_PRIORITY; ++i) { |
166 RequestPriority priority = static_cast<RequestPriority>(i); | 170 RequestPriority priority = static_cast<RequestPriority>(i); |
167 SOCKS5MockData data(SYNCHRONOUS); | 171 SOCKS5MockData data(SYNCHRONOUS); |
168 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 172 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
169 transport_client_socket_factory_.AddSocketDataProvider( | 173 transport_client_socket_factory_.AddSocketDataProvider( |
170 data.data_provider()); | 174 data.data_provider()); |
171 | 175 |
172 ClientSocketHandle handle; | 176 ClientSocketHandle handle; |
173 EXPECT_EQ(ERR_IO_PENDING, | 177 EXPECT_EQ(ERR_IO_PENDING, |
174 handle.Init("a", CreateSOCKSv4Params(), priority, | 178 handle.Init("a", |
175 CompletionCallback(), &pool_, BoundNetLog())); | 179 CreateSOCKSv4Params(), |
| 180 priority, |
| 181 CompletionCallback(), |
| 182 &pool_, |
| 183 BoundNetLog())); |
176 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); | 184 EXPECT_EQ(priority, transport_socket_pool_.last_request_priority()); |
177 EXPECT_EQ(priority, host_resolver_.last_request_priority()); | 185 EXPECT_EQ(priority, host_resolver_.last_request_priority()); |
178 EXPECT_TRUE(handle.socket() == NULL); | 186 EXPECT_TRUE(handle.socket() == NULL); |
179 } | 187 } |
180 } | 188 } |
181 | 189 |
182 TEST_F(SOCKSClientSocketPoolTest, Async) { | 190 TEST_F(SOCKSClientSocketPoolTest, Async) { |
183 SOCKS5MockData data(ASYNC); | 191 SOCKS5MockData data(ASYNC); |
184 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); | 192 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); |
185 | 193 |
186 TestCompletionCallback callback; | 194 TestCompletionCallback callback; |
187 ClientSocketHandle handle; | 195 ClientSocketHandle handle; |
188 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 196 int rv = handle.Init("a", |
189 &pool_, BoundNetLog()); | 197 CreateSOCKSv5Params(), |
| 198 LOW, |
| 199 callback.callback(), |
| 200 &pool_, |
| 201 BoundNetLog()); |
190 EXPECT_EQ(ERR_IO_PENDING, rv); | 202 EXPECT_EQ(ERR_IO_PENDING, rv); |
191 EXPECT_FALSE(handle.is_initialized()); | 203 EXPECT_FALSE(handle.is_initialized()); |
192 EXPECT_FALSE(handle.socket()); | 204 EXPECT_FALSE(handle.socket()); |
193 | 205 |
194 EXPECT_EQ(OK, callback.WaitForResult()); | 206 EXPECT_EQ(OK, callback.WaitForResult()); |
195 EXPECT_TRUE(handle.is_initialized()); | 207 EXPECT_TRUE(handle.is_initialized()); |
196 EXPECT_TRUE(handle.socket()); | 208 EXPECT_TRUE(handle.socket()); |
197 TestLoadTimingInfo(handle); | 209 TestLoadTimingInfo(handle); |
198 } | 210 } |
199 | 211 |
200 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { | 212 TEST_F(SOCKSClientSocketPoolTest, TransportConnectError) { |
201 StaticSocketDataProvider socket_data; | 213 StaticSocketDataProvider socket_data; |
202 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, | 214 socket_data.set_connect_data( |
203 ERR_CONNECTION_REFUSED)); | 215 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED)); |
204 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 216 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
205 | 217 |
206 ClientSocketHandle handle; | 218 ClientSocketHandle handle; |
207 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 219 int rv = handle.Init("a", |
208 &pool_, BoundNetLog()); | 220 CreateSOCKSv5Params(), |
| 221 LOW, |
| 222 CompletionCallback(), |
| 223 &pool_, |
| 224 BoundNetLog()); |
209 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 225 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
210 EXPECT_FALSE(handle.is_initialized()); | 226 EXPECT_FALSE(handle.is_initialized()); |
211 EXPECT_FALSE(handle.socket()); | 227 EXPECT_FALSE(handle.socket()); |
212 } | 228 } |
213 | 229 |
214 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { | 230 TEST_F(SOCKSClientSocketPoolTest, AsyncTransportConnectError) { |
215 StaticSocketDataProvider socket_data; | 231 StaticSocketDataProvider socket_data; |
216 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); | 232 socket_data.set_connect_data(MockConnect(ASYNC, ERR_CONNECTION_REFUSED)); |
217 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 233 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
218 | 234 |
219 TestCompletionCallback callback; | 235 TestCompletionCallback callback; |
220 ClientSocketHandle handle; | 236 ClientSocketHandle handle; |
221 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 237 int rv = handle.Init("a", |
222 &pool_, BoundNetLog()); | 238 CreateSOCKSv5Params(), |
| 239 LOW, |
| 240 callback.callback(), |
| 241 &pool_, |
| 242 BoundNetLog()); |
223 EXPECT_EQ(ERR_IO_PENDING, rv); | 243 EXPECT_EQ(ERR_IO_PENDING, rv); |
224 EXPECT_FALSE(handle.is_initialized()); | 244 EXPECT_FALSE(handle.is_initialized()); |
225 EXPECT_FALSE(handle.socket()); | 245 EXPECT_FALSE(handle.socket()); |
226 | 246 |
227 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); | 247 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); |
228 EXPECT_FALSE(handle.is_initialized()); | 248 EXPECT_FALSE(handle.is_initialized()); |
229 EXPECT_FALSE(handle.socket()); | 249 EXPECT_FALSE(handle.socket()); |
230 } | 250 } |
231 | 251 |
232 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { | 252 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { |
233 MockRead failed_read[] = { | 253 MockRead failed_read[] = { |
234 MockRead(SYNCHRONOUS, 0), | 254 MockRead(SYNCHRONOUS, 0), |
235 }; | 255 }; |
236 StaticSocketDataProvider socket_data( | 256 StaticSocketDataProvider socket_data( |
237 failed_read, arraysize(failed_read), NULL, 0); | 257 failed_read, arraysize(failed_read), NULL, 0); |
238 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 258 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
239 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 259 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
240 | 260 |
241 ClientSocketHandle handle; | 261 ClientSocketHandle handle; |
242 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 262 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
243 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, CompletionCallback(), | 263 int rv = handle.Init("a", |
244 &pool_, BoundNetLog()); | 264 CreateSOCKSv5Params(), |
| 265 LOW, |
| 266 CompletionCallback(), |
| 267 &pool_, |
| 268 BoundNetLog()); |
245 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); | 269 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); |
246 EXPECT_FALSE(handle.is_initialized()); | 270 EXPECT_FALSE(handle.is_initialized()); |
247 EXPECT_FALSE(handle.socket()); | 271 EXPECT_FALSE(handle.socket()); |
248 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 272 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
249 } | 273 } |
250 | 274 |
251 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { | 275 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { |
252 MockRead failed_read[] = { | 276 MockRead failed_read[] = { |
253 MockRead(ASYNC, 0), | 277 MockRead(ASYNC, 0), |
254 }; | 278 }; |
255 StaticSocketDataProvider socket_data( | 279 StaticSocketDataProvider socket_data( |
256 failed_read, arraysize(failed_read), NULL, 0); | 280 failed_read, arraysize(failed_read), NULL, 0); |
257 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); | 281 socket_data.set_connect_data(MockConnect(SYNCHRONOUS, OK)); |
258 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); | 282 transport_client_socket_factory_.AddSocketDataProvider(&socket_data); |
259 | 283 |
260 TestCompletionCallback callback; | 284 TestCompletionCallback callback; |
261 ClientSocketHandle handle; | 285 ClientSocketHandle handle; |
262 EXPECT_EQ(0, transport_socket_pool_.release_count()); | 286 EXPECT_EQ(0, transport_socket_pool_.release_count()); |
263 int rv = handle.Init("a", CreateSOCKSv5Params(), LOW, callback.callback(), | 287 int rv = handle.Init("a", |
264 &pool_, BoundNetLog()); | 288 CreateSOCKSv5Params(), |
| 289 LOW, |
| 290 callback.callback(), |
| 291 &pool_, |
| 292 BoundNetLog()); |
265 EXPECT_EQ(ERR_IO_PENDING, rv); | 293 EXPECT_EQ(ERR_IO_PENDING, rv); |
266 EXPECT_FALSE(handle.is_initialized()); | 294 EXPECT_FALSE(handle.is_initialized()); |
267 EXPECT_FALSE(handle.socket()); | 295 EXPECT_FALSE(handle.socket()); |
268 | 296 |
269 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); | 297 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); |
270 EXPECT_FALSE(handle.is_initialized()); | 298 EXPECT_FALSE(handle.is_initialized()); |
271 EXPECT_FALSE(handle.socket()); | 299 EXPECT_FALSE(handle.socket()); |
272 EXPECT_EQ(1, transport_socket_pool_.release_count()); | 300 EXPECT_EQ(1, transport_socket_pool_.release_count()); |
273 } | 301 } |
274 | 302 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 | 367 |
340 (*requests())[0]->handle()->Reset(); | 368 (*requests())[0]->handle()->Reset(); |
341 (*requests())[1]->handle()->Reset(); | 369 (*requests())[1]->handle()->Reset(); |
342 } | 370 } |
343 | 371 |
344 // It would be nice to also test the timeouts in SOCKSClientSocketPool. | 372 // It would be nice to also test the timeouts in SOCKSClientSocketPool. |
345 | 373 |
346 } // namespace | 374 } // namespace |
347 | 375 |
348 } // namespace net | 376 } // namespace net |
OLD | NEW |