OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_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/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; | 209 const scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_; |
210 HttpServerPropertiesImpl http_server_properties_; | 210 HttpServerPropertiesImpl http_server_properties_; |
211 const scoped_refptr<HttpNetworkSession> session_; | 211 const scoped_refptr<HttpNetworkSession> session_; |
212 ClientSocketPoolHistograms http_proxy_histograms_; | 212 ClientSocketPoolHistograms http_proxy_histograms_; |
213 | 213 |
214 protected: | 214 protected: |
215 scoped_ptr<SSLSocketDataProvider> ssl_data_; | 215 scoped_ptr<SSLSocketDataProvider> ssl_data_; |
216 scoped_refptr<DeterministicSocketData> data_; | 216 scoped_refptr<DeterministicSocketData> data_; |
217 HttpProxyClientSocketPool pool_; | 217 HttpProxyClientSocketPool pool_; |
218 ClientSocketHandle handle_; | 218 ClientSocketHandle handle_; |
219 TestOldCompletionCallback callback_; | 219 TestCompletionCallback callback_; |
220 }; | 220 }; |
221 | 221 |
222 //----------------------------------------------------------------------------- | 222 //----------------------------------------------------------------------------- |
223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) | 223 // All tests are run with three different proxy types: HTTP, HTTPS (non-SPDY) |
224 // and SPDY. | 224 // and SPDY. |
225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, | 225 INSTANTIATE_TEST_CASE_P(HttpProxyClientSocketPoolTests, |
226 HttpProxyClientSocketPoolTest, | 226 HttpProxyClientSocketPoolTest, |
227 ::testing::Values(HTTP, HTTPS, SPDY)); | 227 ::testing::Values(HTTP, HTTPS, SPDY)); |
228 | 228 |
229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { | 229 TEST_P(HttpProxyClientSocketPoolTest, NoTunnel) { |
230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0); | 230 Initialize(false, NULL, 0, NULL, 0, NULL, 0, NULL, 0); |
231 | 231 |
232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, NULL, &pool_, | 232 int rv = handle_.Init("a", GetNoTunnelParams(), LOW, CompletionCallback(), |
233 BoundNetLog()); | 233 &pool_, BoundNetLog()); |
234 EXPECT_EQ(OK, rv); | 234 EXPECT_EQ(OK, rv); |
235 EXPECT_TRUE(handle_.is_initialized()); | 235 EXPECT_TRUE(handle_.is_initialized()); |
236 ASSERT_TRUE(handle_.socket()); | 236 ASSERT_TRUE(handle_.socket()); |
237 HttpProxyClientSocket* tunnel_socket = | 237 HttpProxyClientSocket* tunnel_socket = |
238 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 238 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
239 EXPECT_TRUE(tunnel_socket->IsConnected()); | 239 EXPECT_TRUE(tunnel_socket->IsConnected()); |
240 } | 240 } |
241 | 241 |
242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { | 242 TEST_P(HttpProxyClientSocketPoolTest, NeedAuth) { |
243 MockWrite writes[] = { | 243 MockWrite writes[] = { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 MockRead spdy_reads[] = { | 277 MockRead spdy_reads[] = { |
278 CreateMockWrite(*resp, 1, true), | 278 CreateMockWrite(*resp, 1, true), |
279 MockRead(true, 0, 3) | 279 MockRead(true, 0, 3) |
280 }; | 280 }; |
281 | 281 |
282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 282 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
283 spdy_reads, arraysize(spdy_reads), spdy_writes, | 283 spdy_reads, arraysize(spdy_reads), spdy_writes, |
284 arraysize(spdy_writes)); | 284 arraysize(spdy_writes)); |
285 | 285 |
286 data_->StopAfter(4); | 286 data_->StopAfter(4); |
287 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 287 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
288 BoundNetLog()); | 288 &pool_, BoundNetLog()); |
289 EXPECT_EQ(ERR_IO_PENDING, rv); | 289 EXPECT_EQ(ERR_IO_PENDING, rv); |
290 EXPECT_FALSE(handle_.is_initialized()); | 290 EXPECT_FALSE(handle_.is_initialized()); |
291 EXPECT_FALSE(handle_.socket()); | 291 EXPECT_FALSE(handle_.socket()); |
292 | 292 |
293 data_->RunFor(GetParam() == SPDY ? 2 : 4); | 293 data_->RunFor(GetParam() == SPDY ? 2 : 4); |
294 rv = callback_.WaitForResult(); | 294 rv = callback_.WaitForResult(); |
295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); | 295 EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, rv); |
296 EXPECT_TRUE(handle_.is_initialized()); | 296 EXPECT_TRUE(handle_.is_initialized()); |
297 ASSERT_TRUE(handle_.socket()); | 297 ASSERT_TRUE(handle_.socket()); |
298 if (GetParam() != SPDY) { | 298 if (GetParam() != SPDY) { |
299 HttpProxyClientSocket* tunnel_socket = | 299 HttpProxyClientSocket* tunnel_socket = |
300 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 300 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
301 EXPECT_FALSE(tunnel_socket->IsConnected()); | 301 EXPECT_FALSE(tunnel_socket->IsConnected()); |
302 EXPECT_FALSE(tunnel_socket->using_spdy()); | 302 EXPECT_FALSE(tunnel_socket->using_spdy()); |
303 } | 303 } |
304 } | 304 } |
305 | 305 |
306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { | 306 TEST_P(HttpProxyClientSocketPoolTest, HaveAuth) { |
307 // It's pretty much impossible to make the SPDY case becave synchronously | 307 // It's pretty much impossible to make the SPDY case behave synchronously |
308 // so we skip this test for SPDY | 308 // so we skip this test for SPDY |
309 if (GetParam() == SPDY) | 309 if (GetParam() == SPDY) |
310 return; | 310 return; |
311 MockWrite writes[] = { | 311 MockWrite writes[] = { |
312 MockWrite(false, 0, | 312 MockWrite(false, 0, |
313 "CONNECT www.google.com:443 HTTP/1.1\r\n" | 313 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
314 "Host: www.google.com\r\n" | 314 "Host: www.google.com\r\n" |
315 "Proxy-Connection: keep-alive\r\n" | 315 "Proxy-Connection: keep-alive\r\n" |
316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 316 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
317 }; | 317 }; |
318 MockRead reads[] = { | 318 MockRead reads[] = { |
319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), | 319 MockRead(false, 1, "HTTP/1.1 200 Connection Established\r\n\r\n"), |
320 }; | 320 }; |
321 | 321 |
322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0, | 322 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), NULL, 0, |
323 NULL, 0); | 323 NULL, 0); |
324 AddAuthToCache(); | 324 AddAuthToCache(); |
325 | 325 |
326 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 326 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
327 BoundNetLog()); | 327 &pool_, BoundNetLog()); |
328 EXPECT_EQ(OK, rv); | 328 EXPECT_EQ(OK, rv); |
329 EXPECT_TRUE(handle_.is_initialized()); | 329 EXPECT_TRUE(handle_.is_initialized()); |
330 ASSERT_TRUE(handle_.socket()); | 330 ASSERT_TRUE(handle_.socket()); |
331 HttpProxyClientSocket* tunnel_socket = | 331 HttpProxyClientSocket* tunnel_socket = |
332 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 332 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
333 EXPECT_TRUE(tunnel_socket->IsConnected()); | 333 EXPECT_TRUE(tunnel_socket->IsConnected()); |
334 } | 334 } |
335 | 335 |
336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { | 336 TEST_P(HttpProxyClientSocketPoolTest, AsyncHaveAuth) { |
337 MockWrite writes[] = { | 337 MockWrite writes[] = { |
(...skipping 15 matching lines...) Expand all Loading... |
353 MockRead spdy_reads[] = { | 353 MockRead spdy_reads[] = { |
354 CreateMockRead(*resp, 1, true), | 354 CreateMockRead(*resp, 1, true), |
355 MockRead(true, 0, 2) | 355 MockRead(true, 0, 2) |
356 }; | 356 }; |
357 | 357 |
358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 358 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
359 spdy_reads, arraysize(spdy_reads), spdy_writes, | 359 spdy_reads, arraysize(spdy_reads), spdy_writes, |
360 arraysize(spdy_writes)); | 360 arraysize(spdy_writes)); |
361 AddAuthToCache(); | 361 AddAuthToCache(); |
362 | 362 |
363 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 363 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
364 BoundNetLog()); | 364 &pool_, BoundNetLog()); |
365 EXPECT_EQ(ERR_IO_PENDING, rv); | 365 EXPECT_EQ(ERR_IO_PENDING, rv); |
366 EXPECT_FALSE(handle_.is_initialized()); | 366 EXPECT_FALSE(handle_.is_initialized()); |
367 EXPECT_FALSE(handle_.socket()); | 367 EXPECT_FALSE(handle_.socket()); |
368 | 368 |
369 data_->RunFor(2); | 369 data_->RunFor(2); |
370 EXPECT_EQ(OK, callback_.WaitForResult()); | 370 EXPECT_EQ(OK, callback_.WaitForResult()); |
371 EXPECT_TRUE(handle_.is_initialized()); | 371 EXPECT_TRUE(handle_.is_initialized()); |
372 ASSERT_TRUE(handle_.socket()); | 372 ASSERT_TRUE(handle_.socket()); |
373 HttpProxyClientSocket* tunnel_socket = | 373 HttpProxyClientSocket* tunnel_socket = |
374 static_cast<HttpProxyClientSocket*>(handle_.socket()); | 374 static_cast<HttpProxyClientSocket*>(handle_.socket()); |
375 EXPECT_TRUE(tunnel_socket->IsConnected()); | 375 EXPECT_TRUE(tunnel_socket->IsConnected()); |
376 } | 376 } |
377 | 377 |
378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { | 378 TEST_P(HttpProxyClientSocketPoolTest, TCPError) { |
379 if (GetParam() == SPDY) return; | 379 if (GetParam() == SPDY) return; |
380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 380 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); | 381 data_->set_connect_data(MockConnect(true, ERR_CONNECTION_CLOSED)); |
382 | 382 |
383 socket_factory().AddSocketDataProvider(data_.get()); | 383 socket_factory().AddSocketDataProvider(data_.get()); |
384 | 384 |
385 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 385 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
386 BoundNetLog()); | 386 &pool_, BoundNetLog()); |
387 EXPECT_EQ(ERR_IO_PENDING, rv); | 387 EXPECT_EQ(ERR_IO_PENDING, rv); |
388 EXPECT_FALSE(handle_.is_initialized()); | 388 EXPECT_FALSE(handle_.is_initialized()); |
389 EXPECT_FALSE(handle_.socket()); | 389 EXPECT_FALSE(handle_.socket()); |
390 | 390 |
391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); | 391 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback_.WaitForResult()); |
392 | 392 |
393 EXPECT_FALSE(handle_.is_initialized()); | 393 EXPECT_FALSE(handle_.is_initialized()); |
394 EXPECT_FALSE(handle_.socket()); | 394 EXPECT_FALSE(handle_.socket()); |
395 } | 395 } |
396 | 396 |
397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { | 397 TEST_P(HttpProxyClientSocketPoolTest, SSLError) { |
398 if (GetParam() == HTTP) return; | 398 if (GetParam() == HTTP) return; |
399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 399 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
400 data_->set_connect_data(MockConnect(true, OK)); | 400 data_->set_connect_data(MockConnect(true, OK)); |
401 socket_factory().AddSocketDataProvider(data_.get()); | 401 socket_factory().AddSocketDataProvider(data_.get()); |
402 | 402 |
403 ssl_data_.reset(new SSLSocketDataProvider(true, | 403 ssl_data_.reset(new SSLSocketDataProvider(true, |
404 ERR_CERT_AUTHORITY_INVALID)); | 404 ERR_CERT_AUTHORITY_INVALID)); |
405 if (GetParam() == SPDY) { | 405 if (GetParam() == SPDY) { |
406 InitializeSpdySsl(); | 406 InitializeSpdySsl(); |
407 } | 407 } |
408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 408 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
409 | 409 |
410 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 410 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
411 BoundNetLog()); | 411 &pool_, BoundNetLog()); |
412 EXPECT_EQ(ERR_IO_PENDING, rv); | 412 EXPECT_EQ(ERR_IO_PENDING, rv); |
413 EXPECT_FALSE(handle_.is_initialized()); | 413 EXPECT_FALSE(handle_.is_initialized()); |
414 EXPECT_FALSE(handle_.socket()); | 414 EXPECT_FALSE(handle_.socket()); |
415 | 415 |
416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); | 416 EXPECT_EQ(ERR_PROXY_CERTIFICATE_INVALID, callback_.WaitForResult()); |
417 | 417 |
418 EXPECT_FALSE(handle_.is_initialized()); | 418 EXPECT_FALSE(handle_.is_initialized()); |
419 EXPECT_FALSE(handle_.socket()); | 419 EXPECT_FALSE(handle_.socket()); |
420 } | 420 } |
421 | 421 |
422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { | 422 TEST_P(HttpProxyClientSocketPoolTest, SslClientAuth) { |
423 if (GetParam() == HTTP) return; | 423 if (GetParam() == HTTP) return; |
424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); | 424 data_ = new DeterministicSocketData(NULL, 0, NULL, 0); |
425 data_->set_connect_data(MockConnect(true, OK)); | 425 data_->set_connect_data(MockConnect(true, OK)); |
426 socket_factory().AddSocketDataProvider(data_.get()); | 426 socket_factory().AddSocketDataProvider(data_.get()); |
427 | 427 |
428 ssl_data_.reset(new SSLSocketDataProvider(true, | 428 ssl_data_.reset(new SSLSocketDataProvider(true, |
429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); | 429 ERR_SSL_CLIENT_AUTH_CERT_NEEDED)); |
430 if (GetParam() == SPDY) { | 430 if (GetParam() == SPDY) { |
431 InitializeSpdySsl(); | 431 InitializeSpdySsl(); |
432 } | 432 } |
433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); | 433 socket_factory().AddSSLSocketDataProvider(ssl_data_.get()); |
434 | 434 |
435 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 435 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
436 BoundNetLog()); | 436 &pool_, BoundNetLog()); |
437 EXPECT_EQ(ERR_IO_PENDING, rv); | 437 EXPECT_EQ(ERR_IO_PENDING, rv); |
438 EXPECT_FALSE(handle_.is_initialized()); | 438 EXPECT_FALSE(handle_.is_initialized()); |
439 EXPECT_FALSE(handle_.socket()); | 439 EXPECT_FALSE(handle_.socket()); |
440 | 440 |
441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); | 441 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, callback_.WaitForResult()); |
442 | 442 |
443 EXPECT_FALSE(handle_.is_initialized()); | 443 EXPECT_FALSE(handle_.is_initialized()); |
444 EXPECT_FALSE(handle_.socket()); | 444 EXPECT_FALSE(handle_.socket()); |
445 } | 445 } |
446 | 446 |
(...skipping 16 matching lines...) Expand all Loading... |
463 }; | 463 }; |
464 MockRead spdy_reads[] = { | 464 MockRead spdy_reads[] = { |
465 MockRead(true, ERR_CONNECTION_CLOSED, 1), | 465 MockRead(true, ERR_CONNECTION_CLOSED, 1), |
466 }; | 466 }; |
467 | 467 |
468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 468 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
469 spdy_reads, arraysize(spdy_reads), spdy_writes, | 469 spdy_reads, arraysize(spdy_reads), spdy_writes, |
470 arraysize(spdy_writes)); | 470 arraysize(spdy_writes)); |
471 AddAuthToCache(); | 471 AddAuthToCache(); |
472 | 472 |
473 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 473 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
474 BoundNetLog()); | 474 &pool_, BoundNetLog()); |
475 EXPECT_EQ(ERR_IO_PENDING, rv); | 475 EXPECT_EQ(ERR_IO_PENDING, rv); |
476 EXPECT_FALSE(handle_.is_initialized()); | 476 EXPECT_FALSE(handle_.is_initialized()); |
477 EXPECT_FALSE(handle_.socket()); | 477 EXPECT_FALSE(handle_.socket()); |
478 | 478 |
479 data_->RunFor(3); | 479 data_->RunFor(3); |
480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); | 480 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback_.WaitForResult()); |
481 EXPECT_FALSE(handle_.is_initialized()); | 481 EXPECT_FALSE(handle_.is_initialized()); |
482 EXPECT_FALSE(handle_.socket()); | 482 EXPECT_FALSE(handle_.socket()); |
483 } | 483 } |
484 | 484 |
(...skipping 19 matching lines...) Expand all Loading... |
504 MockRead spdy_reads[] = { | 504 MockRead spdy_reads[] = { |
505 CreateMockRead(*resp, 1, true), | 505 CreateMockRead(*resp, 1, true), |
506 MockRead(true, 0, 3), | 506 MockRead(true, 0, 3), |
507 }; | 507 }; |
508 | 508 |
509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), | 509 Initialize(false, reads, arraysize(reads), writes, arraysize(writes), |
510 spdy_reads, arraysize(spdy_reads), spdy_writes, | 510 spdy_reads, arraysize(spdy_reads), spdy_writes, |
511 arraysize(spdy_writes)); | 511 arraysize(spdy_writes)); |
512 AddAuthToCache(); | 512 AddAuthToCache(); |
513 | 513 |
514 int rv = handle_.Init("a", GetTunnelParams(), LOW, &callback_, &pool_, | 514 int rv = handle_.Init("a", GetTunnelParams(), LOW, callback_.callback(), |
515 BoundNetLog()); | 515 &pool_, BoundNetLog()); |
516 EXPECT_EQ(ERR_IO_PENDING, rv); | 516 EXPECT_EQ(ERR_IO_PENDING, rv); |
517 EXPECT_FALSE(handle_.is_initialized()); | 517 EXPECT_FALSE(handle_.is_initialized()); |
518 EXPECT_FALSE(handle_.socket()); | 518 EXPECT_FALSE(handle_.socket()); |
519 | 519 |
520 data_->RunFor(2); | 520 data_->RunFor(2); |
521 | 521 |
522 rv = callback_.WaitForResult(); | 522 rv = callback_.WaitForResult(); |
523 if (GetParam() == HTTP) { | 523 if (GetParam() == HTTP) { |
524 // HTTP Proxy CONNECT responses are not trustworthy | 524 // HTTP Proxy CONNECT responses are not trustworthy |
525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 525 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
526 EXPECT_FALSE(handle_.is_initialized()); | 526 EXPECT_FALSE(handle_.is_initialized()); |
527 EXPECT_FALSE(handle_.socket()); | 527 EXPECT_FALSE(handle_.socket()); |
528 } else { | 528 } else { |
529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy | 529 // HTTPS or SPDY Proxy CONNECT responses are trustworthy |
530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); | 530 EXPECT_EQ(ERR_HTTPS_PROXY_TUNNEL_RESPONSE, rv); |
531 EXPECT_TRUE(handle_.is_initialized()); | 531 EXPECT_TRUE(handle_.is_initialized()); |
532 EXPECT_TRUE(handle_.socket()); | 532 EXPECT_TRUE(handle_.socket()); |
533 } | 533 } |
534 } | 534 } |
535 | 535 |
536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. | 536 // It would be nice to also test the timeouts in HttpProxyClientSocketPool. |
537 | 537 |
538 } // namespace net | 538 } // namespace net |
OLD | NEW |