| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
| 6 | 6 |
| 7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
| 8 #include <stdarg.h> | 8 #include <stdarg.h> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 const base::string16 kFoo(ASCIIToUTF16("foo")); | 85 const base::string16 kFoo(ASCIIToUTF16("foo")); |
| 86 const base::string16 kFoo2(ASCIIToUTF16("foo2")); | 86 const base::string16 kFoo2(ASCIIToUTF16("foo2")); |
| 87 const base::string16 kFoo3(ASCIIToUTF16("foo3")); | 87 const base::string16 kFoo3(ASCIIToUTF16("foo3")); |
| 88 const base::string16 kFou(ASCIIToUTF16("fou")); | 88 const base::string16 kFou(ASCIIToUTF16("fou")); |
| 89 const base::string16 kSecond(ASCIIToUTF16("second")); | 89 const base::string16 kSecond(ASCIIToUTF16("second")); |
| 90 const base::string16 kTestingNTLM(ASCIIToUTF16("testing-ntlm")); | 90 const base::string16 kTestingNTLM(ASCIIToUTF16("testing-ntlm")); |
| 91 const base::string16 kWrongPassword(ASCIIToUTF16("wrongpassword")); | 91 const base::string16 kWrongPassword(ASCIIToUTF16("wrongpassword")); |
| 92 | 92 |
| 93 int GetIdleSocketCountInTransportSocketPool(net::HttpNetworkSession* session) { | 93 int GetIdleSocketCountInTransportSocketPool(net::HttpNetworkSession* session) { |
| 94 return session->GetTransportSocketPool( | 94 return session->GetTransportSocketPool( |
| 95 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IdleSocketCount(); | 95 net::HttpNetworkSession::NORMAL_SOCKET_POOL) |
| 96 ->IdleSocketCount(); |
| 96 } | 97 } |
| 97 | 98 |
| 98 int GetIdleSocketCountInSSLSocketPool(net::HttpNetworkSession* session) { | 99 int GetIdleSocketCountInSSLSocketPool(net::HttpNetworkSession* session) { |
| 99 return session->GetSSLSocketPool( | 100 return session->GetSSLSocketPool(net::HttpNetworkSession::NORMAL_SOCKET_POOL) |
| 100 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IdleSocketCount(); | 101 ->IdleSocketCount(); |
| 101 } | 102 } |
| 102 | 103 |
| 103 bool IsTransportSocketPoolStalled(net::HttpNetworkSession* session) { | 104 bool IsTransportSocketPoolStalled(net::HttpNetworkSession* session) { |
| 104 return session->GetTransportSocketPool( | 105 return session->GetTransportSocketPool( |
| 105 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IsStalled(); | 106 net::HttpNetworkSession::NORMAL_SOCKET_POOL)->IsStalled(); |
| 106 } | 107 } |
| 107 | 108 |
| 108 // Takes in a Value created from a NetLogHttpResponseParameter, and returns | 109 // Takes in a Value created from a NetLogHttpResponseParameter, and returns |
| 109 // a JSONified list of headers as a single string. Uses single quotes instead | 110 // a JSONified list of headers as a single string. Uses single quotes instead |
| 110 // of double quotes for easier comparison. Returns false on failure. | 111 // of double quotes for easier comparison. Returns false on failure. |
| 111 bool GetHeaders(base::DictionaryValue* params, std::string* headers) { | 112 bool GetHeaders(base::DictionaryValue* params, std::string* headers) { |
| 112 if (!params) | 113 if (!params) |
| 113 return false; | 114 return false; |
| 114 base::ListValue* header_list; | 115 base::ListValue* header_list; |
| 115 if (!params->GetList("headers", &header_list)) | 116 if (!params->GetList("headers", &header_list)) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 // used. | 168 // used. |
| 168 void TestLoadTimingReusedWithPac(const net::LoadTimingInfo& load_timing_info) { | 169 void TestLoadTimingReusedWithPac(const net::LoadTimingInfo& load_timing_info) { |
| 169 EXPECT_TRUE(load_timing_info.socket_reused); | 170 EXPECT_TRUE(load_timing_info.socket_reused); |
| 170 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 171 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 171 | 172 |
| 172 net::ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 173 net::ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 173 | 174 |
| 174 EXPECT_FALSE(load_timing_info.proxy_resolve_start.is_null()); | 175 EXPECT_FALSE(load_timing_info.proxy_resolve_start.is_null()); |
| 175 EXPECT_LE(load_timing_info.proxy_resolve_start, | 176 EXPECT_LE(load_timing_info.proxy_resolve_start, |
| 176 load_timing_info.proxy_resolve_end); | 177 load_timing_info.proxy_resolve_end); |
| 177 EXPECT_LE(load_timing_info.proxy_resolve_end, | 178 EXPECT_LE(load_timing_info.proxy_resolve_end, load_timing_info.send_start); |
| 178 load_timing_info.send_start); | |
| 179 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 179 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 180 | 180 |
| 181 // Set at a higher level. | 181 // Set at a higher level. |
| 182 EXPECT_TRUE(load_timing_info.request_start_time.is_null()); | 182 EXPECT_TRUE(load_timing_info.request_start_time.is_null()); |
| 183 EXPECT_TRUE(load_timing_info.request_start.is_null()); | 183 EXPECT_TRUE(load_timing_info.request_start.is_null()); |
| 184 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); | 184 EXPECT_TRUE(load_timing_info.receive_headers_end.is_null()); |
| 185 } | 185 } |
| 186 | 186 |
| 187 // Tests LoadTimingInfo in the case a new socket is used and a PAC script is | 187 // Tests LoadTimingInfo in the case a new socket is used and a PAC script is |
| 188 // used. | 188 // used. |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); | 234 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_group_sockets_); |
| 235 } | 235 } |
| 236 | 236 |
| 237 protected: | 237 protected: |
| 238 HttpNetworkTransactionTest() | 238 HttpNetworkTransactionTest() |
| 239 : spdy_util_(GetParam()), | 239 : spdy_util_(GetParam()), |
| 240 session_deps_(GetParam()), | 240 session_deps_(GetParam()), |
| 241 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( | 241 old_max_group_sockets_(ClientSocketPoolManager::max_sockets_per_group( |
| 242 HttpNetworkSession::NORMAL_SOCKET_POOL)), | 242 HttpNetworkSession::NORMAL_SOCKET_POOL)), |
| 243 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( | 243 old_max_pool_sockets_(ClientSocketPoolManager::max_sockets_per_pool( |
| 244 HttpNetworkSession::NORMAL_SOCKET_POOL)) { | 244 HttpNetworkSession::NORMAL_SOCKET_POOL)) {} |
| 245 } | |
| 246 | 245 |
| 247 struct SimpleGetHelperResult { | 246 struct SimpleGetHelperResult { |
| 248 int rv; | 247 int rv; |
| 249 std::string status_line; | 248 std::string status_line; |
| 250 std::string response_data; | 249 std::string response_data; |
| 251 int64 totalReceivedBytes; | 250 int64 totalReceivedBytes; |
| 252 LoadTimingInfo load_timing_info; | 251 LoadTimingInfo load_timing_info; |
| 253 }; | 252 }; |
| 254 | 253 |
| 255 virtual void SetUp() { | 254 virtual void SetUp() { |
| 256 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 255 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 257 base::MessageLoop::current()->RunUntilIdle(); | 256 base::MessageLoop::current()->RunUntilIdle(); |
| 258 } | 257 } |
| 259 | 258 |
| 260 virtual void TearDown() { | 259 virtual void TearDown() { |
| 261 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 260 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 262 base::MessageLoop::current()->RunUntilIdle(); | 261 base::MessageLoop::current()->RunUntilIdle(); |
| 263 // Empty the current queue. | 262 // Empty the current queue. |
| 264 base::MessageLoop::current()->RunUntilIdle(); | 263 base::MessageLoop::current()->RunUntilIdle(); |
| 265 PlatformTest::TearDown(); | 264 PlatformTest::TearDown(); |
| 266 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 265 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 267 base::MessageLoop::current()->RunUntilIdle(); | 266 base::MessageLoop::current()->RunUntilIdle(); |
| 268 HttpStreamFactory::set_use_alternate_protocols(false); | 267 HttpStreamFactory::set_use_alternate_protocols(false); |
| 269 HttpStreamFactory::SetNextProtos(std::vector<NextProto>()); | 268 HttpStreamFactory::SetNextProtos(std::vector<NextProto>()); |
| 270 } | 269 } |
| 271 | 270 |
| 272 // This is the expected return from a current server advertising SPDY. | 271 // This is the expected return from a current server advertising SPDY. |
| 273 std::string GetAlternateProtocolHttpHeader() { | 272 std::string GetAlternateProtocolHttpHeader() { |
| 274 return | 273 return std::string("Alternate-Protocol: 443:") + |
| 275 std::string("Alternate-Protocol: 443:") + | 274 AlternateProtocolToString( |
| 276 AlternateProtocolToString(AlternateProtocolFromNextProto(GetParam())) + | 275 AlternateProtocolFromNextProto(GetParam())) + |
| 277 "\r\n\r\n"; | 276 "\r\n\r\n"; |
| 278 } | 277 } |
| 279 | 278 |
| 280 // Either |write_failure| specifies a write failure or |read_failure| | 279 // Either |write_failure| specifies a write failure or |read_failure| |
| 281 // specifies a read failure when using a reused socket. In either case, the | 280 // specifies a read failure when using a reused socket. In either case, the |
| 282 // failure should cause the network transaction to resend the request, and the | 281 // failure should cause the network transaction to resend the request, and the |
| 283 // other argument should be NULL. | 282 // other argument should be NULL. |
| 284 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure, | 283 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure, |
| 285 const MockRead* read_failure); | 284 const MockRead* read_failure); |
| 286 | 285 |
| 287 // Either |write_failure| specifies a write failure or |read_failure| | 286 // Either |write_failure| specifies a write failure or |read_failure| |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 | 337 |
| 339 EXPECT_EQ("127.0.0.1", response->socket_address.host()); | 338 EXPECT_EQ("127.0.0.1", response->socket_address.host()); |
| 340 EXPECT_EQ(80, response->socket_address.port()); | 339 EXPECT_EQ(80, response->socket_address.port()); |
| 341 | 340 |
| 342 rv = ReadTransaction(trans.get(), &out.response_data); | 341 rv = ReadTransaction(trans.get(), &out.response_data); |
| 343 EXPECT_EQ(OK, rv); | 342 EXPECT_EQ(OK, rv); |
| 344 | 343 |
| 345 net::CapturingNetLog::CapturedEntryList entries; | 344 net::CapturingNetLog::CapturedEntryList entries; |
| 346 log.GetEntries(&entries); | 345 log.GetEntries(&entries); |
| 347 size_t pos = ExpectLogContainsSomewhere( | 346 size_t pos = ExpectLogContainsSomewhere( |
| 348 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, | 347 entries, |
| 348 0, |
| 349 NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST_HEADERS, |
| 349 NetLog::PHASE_NONE); | 350 NetLog::PHASE_NONE); |
| 350 ExpectLogContainsSomewhere( | 351 ExpectLogContainsSomewhere( |
| 351 entries, pos, | 352 entries, |
| 353 pos, |
| 352 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, | 354 NetLog::TYPE_HTTP_TRANSACTION_READ_RESPONSE_HEADERS, |
| 353 NetLog::PHASE_NONE); | 355 NetLog::PHASE_NONE); |
| 354 | 356 |
| 355 std::string line; | 357 std::string line; |
| 356 EXPECT_TRUE(entries[pos].GetStringValue("line", &line)); | 358 EXPECT_TRUE(entries[pos].GetStringValue("line", &line)); |
| 357 EXPECT_EQ("GET / HTTP/1.1\r\n", line); | 359 EXPECT_EQ("GET / HTTP/1.1\r\n", line); |
| 358 | 360 |
| 359 HttpRequestHeaders request_headers; | 361 HttpRequestHeaders request_headers; |
| 360 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 362 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 361 std::string value; | 363 std::string value; |
| 362 EXPECT_TRUE(request_headers.GetHeader("Host", &value)); | 364 EXPECT_TRUE(request_headers.GetHeader("Host", &value)); |
| 363 EXPECT_EQ("www.google.com", value); | 365 EXPECT_EQ("www.google.com", value); |
| 364 EXPECT_TRUE(request_headers.GetHeader("Connection", &value)); | 366 EXPECT_TRUE(request_headers.GetHeader("Connection", &value)); |
| 365 EXPECT_EQ("keep-alive", value); | 367 EXPECT_EQ("keep-alive", value); |
| 366 | 368 |
| 367 std::string response_headers; | 369 std::string response_headers; |
| 368 EXPECT_TRUE(GetHeaders(entries[pos].params.get(), &response_headers)); | 370 EXPECT_TRUE(GetHeaders(entries[pos].params.get(), &response_headers)); |
| 369 EXPECT_EQ("['Host: www.google.com','Connection: keep-alive']", | 371 EXPECT_EQ("['Host: www.google.com','Connection: keep-alive']", |
| 370 response_headers); | 372 response_headers); |
| 371 | 373 |
| 372 out.totalReceivedBytes = trans->GetTotalReceivedBytes(); | 374 out.totalReceivedBytes = trans->GetTotalReceivedBytes(); |
| 373 return out; | 375 return out; |
| 374 } | 376 } |
| 375 | 377 |
| 376 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], | 378 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], |
| 377 size_t reads_count) { | 379 size_t reads_count) { |
| 378 StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); | 380 StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); |
| 379 StaticSocketDataProvider* data[] = { &reads }; | 381 StaticSocketDataProvider* data[] = {&reads}; |
| 380 return SimpleGetHelperForData(data, 1); | 382 return SimpleGetHelperForData(data, 1); |
| 381 } | 383 } |
| 382 | 384 |
| 383 int64 ReadsSize(MockRead data_reads[], size_t reads_count) { | 385 int64 ReadsSize(MockRead data_reads[], size_t reads_count) { |
| 384 int64 size = 0; | 386 int64 size = 0; |
| 385 for (size_t i = 0; i < reads_count; ++i) | 387 for (size_t i = 0; i < reads_count; ++i) |
| 386 size += data_reads[i].data_len; | 388 size += data_reads[i].data_len; |
| 387 return size; | 389 return size; |
| 388 } | 390 } |
| 389 | 391 |
| 390 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, | 392 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, |
| 391 int expected_status); | 393 int expected_status); |
| 392 | 394 |
| 393 void ConnectStatusHelper(const MockRead& status); | 395 void ConnectStatusHelper(const MockRead& status); |
| 394 | 396 |
| 395 void BypassHostCacheOnRefreshHelper(int load_flags); | 397 void BypassHostCacheOnRefreshHelper(int load_flags); |
| 396 | 398 |
| 397 void CheckErrorIsPassedBack(int error, IoMode mode); | 399 void CheckErrorIsPassedBack(int error, IoMode mode); |
| 398 | 400 |
| 399 SpdyTestUtil spdy_util_; | 401 SpdyTestUtil spdy_util_; |
| 400 SpdySessionDependencies session_deps_; | 402 SpdySessionDependencies session_deps_; |
| 401 | 403 |
| 402 // Original socket limits. Some tests set these. Safest to always restore | 404 // Original socket limits. Some tests set these. Safest to always restore |
| 403 // them once each test has been run. | 405 // them once each test has been run. |
| 404 int old_max_group_sockets_; | 406 int old_max_group_sockets_; |
| 405 int old_max_pool_sockets_; | 407 int old_max_pool_sockets_; |
| 406 }; | 408 }; |
| 407 | 409 |
| 408 INSTANTIATE_TEST_CASE_P( | 410 INSTANTIATE_TEST_CASE_P(NextProto, |
| 409 NextProto, | 411 HttpNetworkTransactionTest, |
| 410 HttpNetworkTransactionTest, | 412 testing::Values(kProtoDeprecatedSPDY2, |
| 411 testing::Values(kProtoDeprecatedSPDY2, | 413 kProtoSPDY3, |
| 412 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); | 414 kProtoSPDY31, |
| 415 kProtoSPDY4)); |
| 413 | 416 |
| 414 namespace { | 417 namespace { |
| 415 | 418 |
| 416 class BeforeNetworkStartHandler { | 419 class BeforeNetworkStartHandler { |
| 417 public: | 420 public: |
| 418 explicit BeforeNetworkStartHandler(bool defer) | 421 explicit BeforeNetworkStartHandler(bool defer) |
| 419 : defer_on_before_network_start_(defer), | 422 : defer_on_before_network_start_(defer), |
| 420 observed_before_network_start_(false) {} | 423 observed_before_network_start_(false) {} |
| 421 | 424 |
| 422 void OnBeforeNetworkStart(bool* defer) { | 425 void OnBeforeNetworkStart(bool* defer) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 433 bool observed_before_network_start_; | 436 bool observed_before_network_start_; |
| 434 | 437 |
| 435 DISALLOW_COPY_AND_ASSIGN(BeforeNetworkStartHandler); | 438 DISALLOW_COPY_AND_ASSIGN(BeforeNetworkStartHandler); |
| 436 }; | 439 }; |
| 437 | 440 |
| 438 // Fill |str| with a long header list that consumes >= |size| bytes. | 441 // Fill |str| with a long header list that consumes >= |size| bytes. |
| 439 void FillLargeHeadersString(std::string* str, int size) { | 442 void FillLargeHeadersString(std::string* str, int size) { |
| 440 const char* row = | 443 const char* row = |
| 441 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; | 444 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; |
| 442 const int sizeof_row = strlen(row); | 445 const int sizeof_row = strlen(row); |
| 443 const int num_rows = static_cast<int>( | 446 const int num_rows = |
| 444 ceil(static_cast<float>(size) / sizeof_row)); | 447 static_cast<int>(ceil(static_cast<float>(size) / sizeof_row)); |
| 445 const int sizeof_data = num_rows * sizeof_row; | 448 const int sizeof_data = num_rows * sizeof_row; |
| 446 DCHECK(sizeof_data >= size); | 449 DCHECK(sizeof_data >= size); |
| 447 str->reserve(sizeof_data); | 450 str->reserve(sizeof_data); |
| 448 | 451 |
| 449 for (int i = 0; i < num_rows; ++i) | 452 for (int i = 0; i < num_rows; ++i) |
| 450 str->append(row, sizeof_row); | 453 str->append(row, sizeof_row); |
| 451 } | 454 } |
| 452 | 455 |
| 453 // Alternative functions that eliminate randomness and dependency on the local | 456 // Alternative functions that eliminate randomness and dependency on the local |
| 454 // host name so that the generated NTLM messages are reproducible. | 457 // host name so that the generated NTLM messages are reproducible. |
| 455 void MockGenerateRandom1(uint8* output, size_t n) { | 458 void MockGenerateRandom1(uint8* output, size_t n) { |
| 456 static const uint8 bytes[] = { | 459 static const uint8 bytes[] = {0x55, 0x29, 0x66, 0x26, 0x6b, 0x9c, 0x73, 0x54}; |
| 457 0x55, 0x29, 0x66, 0x26, 0x6b, 0x9c, 0x73, 0x54 | |
| 458 }; | |
| 459 static size_t current_byte = 0; | 460 static size_t current_byte = 0; |
| 460 for (size_t i = 0; i < n; ++i) { | 461 for (size_t i = 0; i < n; ++i) { |
| 461 output[i] = bytes[current_byte++]; | 462 output[i] = bytes[current_byte++]; |
| 462 current_byte %= arraysize(bytes); | 463 current_byte %= arraysize(bytes); |
| 463 } | 464 } |
| 464 } | 465 } |
| 465 | 466 |
| 466 void MockGenerateRandom2(uint8* output, size_t n) { | 467 void MockGenerateRandom2(uint8* output, size_t n) { |
| 467 static const uint8 bytes[] = { | 468 static const uint8 bytes[] = {0x96, 0x79, 0x85, 0xe7, 0x49, 0x93, 0x70, 0xa1, |
| 468 0x96, 0x79, 0x85, 0xe7, 0x49, 0x93, 0x70, 0xa1, | 469 0x4e, 0xe7, 0x87, 0x45, 0x31, 0x5b, 0xd3, 0x1f}; |
| 469 0x4e, 0xe7, 0x87, 0x45, 0x31, 0x5b, 0xd3, 0x1f | |
| 470 }; | |
| 471 static size_t current_byte = 0; | 470 static size_t current_byte = 0; |
| 472 for (size_t i = 0; i < n; ++i) { | 471 for (size_t i = 0; i < n; ++i) { |
| 473 output[i] = bytes[current_byte++]; | 472 output[i] = bytes[current_byte++]; |
| 474 current_byte %= arraysize(bytes); | 473 current_byte %= arraysize(bytes); |
| 475 } | 474 } |
| 476 } | 475 } |
| 477 | 476 |
| 478 std::string MockGetHostName() { | 477 std::string MockGetHostName() { |
| 479 return "WTC-WIN7"; | 478 return "WTC-WIN7"; |
| 480 } | 479 } |
| 481 | 480 |
| 482 template<typename ParentPool> | 481 template <typename ParentPool> |
| 483 class CaptureGroupNameSocketPool : public ParentPool { | 482 class CaptureGroupNameSocketPool : public ParentPool { |
| 484 public: | 483 public: |
| 485 CaptureGroupNameSocketPool(HostResolver* host_resolver, | 484 CaptureGroupNameSocketPool(HostResolver* host_resolver, |
| 486 CertVerifier* cert_verifier); | 485 CertVerifier* cert_verifier); |
| 487 | 486 |
| 488 const std::string last_group_name_received() const { | 487 const std::string last_group_name_received() const { |
| 489 return last_group_name_; | 488 return last_group_name_; |
| 490 } | 489 } |
| 491 | 490 |
| 492 virtual int RequestSocket(const std::string& group_name, | 491 virtual int RequestSocket(const std::string& group_name, |
| 493 const void* socket_params, | 492 const void* socket_params, |
| 494 RequestPriority priority, | 493 RequestPriority priority, |
| 495 ClientSocketHandle* handle, | 494 ClientSocketHandle* handle, |
| 496 const CompletionCallback& callback, | 495 const CompletionCallback& callback, |
| 497 const BoundNetLog& net_log) { | 496 const BoundNetLog& net_log) { |
| 498 last_group_name_ = group_name; | 497 last_group_name_ = group_name; |
| 499 return ERR_IO_PENDING; | 498 return ERR_IO_PENDING; |
| 500 } | 499 } |
| 501 virtual void CancelRequest(const std::string& group_name, | 500 virtual void CancelRequest(const std::string& group_name, |
| 502 ClientSocketHandle* handle) {} | 501 ClientSocketHandle* handle) {} |
| 503 virtual void ReleaseSocket(const std::string& group_name, | 502 virtual void ReleaseSocket(const std::string& group_name, |
| 504 scoped_ptr<StreamSocket> socket, | 503 scoped_ptr<StreamSocket> socket, |
| 505 int id) {} | 504 int id) {} |
| 506 virtual void CloseIdleSockets() {} | 505 virtual void CloseIdleSockets() {} |
| 507 virtual int IdleSocketCount() const { | 506 virtual int IdleSocketCount() const { return 0; } |
| 508 return 0; | |
| 509 } | |
| 510 virtual int IdleSocketCountInGroup(const std::string& group_name) const { | 507 virtual int IdleSocketCountInGroup(const std::string& group_name) const { |
| 511 return 0; | 508 return 0; |
| 512 } | 509 } |
| 513 virtual LoadState GetLoadState(const std::string& group_name, | 510 virtual LoadState GetLoadState(const std::string& group_name, |
| 514 const ClientSocketHandle* handle) const { | 511 const ClientSocketHandle* handle) const { |
| 515 return LOAD_STATE_IDLE; | 512 return LOAD_STATE_IDLE; |
| 516 } | 513 } |
| 517 virtual base::TimeDelta ConnectionTimeout() const { | 514 virtual base::TimeDelta ConnectionTimeout() const { |
| 518 return base::TimeDelta(); | 515 return base::TimeDelta(); |
| 519 } | 516 } |
| 520 | 517 |
| 521 private: | 518 private: |
| 522 std::string last_group_name_; | 519 std::string last_group_name_; |
| 523 }; | 520 }; |
| 524 | 521 |
| 525 typedef CaptureGroupNameSocketPool<TransportClientSocketPool> | 522 typedef CaptureGroupNameSocketPool<TransportClientSocketPool> |
| 526 CaptureGroupNameTransportSocketPool; | 523 CaptureGroupNameTransportSocketPool; |
| 527 typedef CaptureGroupNameSocketPool<HttpProxyClientSocketPool> | 524 typedef CaptureGroupNameSocketPool<HttpProxyClientSocketPool> |
| 528 CaptureGroupNameHttpProxySocketPool; | 525 CaptureGroupNameHttpProxySocketPool; |
| 529 typedef CaptureGroupNameSocketPool<SOCKSClientSocketPool> | 526 typedef CaptureGroupNameSocketPool<SOCKSClientSocketPool> |
| 530 CaptureGroupNameSOCKSSocketPool; | 527 CaptureGroupNameSOCKSSocketPool; |
| 531 typedef CaptureGroupNameSocketPool<SSLClientSocketPool> | 528 typedef CaptureGroupNameSocketPool<SSLClientSocketPool> |
| 532 CaptureGroupNameSSLSocketPool; | 529 CaptureGroupNameSSLSocketPool; |
| 533 | 530 |
| 534 template<typename ParentPool> | 531 template <typename ParentPool> |
| 535 CaptureGroupNameSocketPool<ParentPool>::CaptureGroupNameSocketPool( | 532 CaptureGroupNameSocketPool<ParentPool>::CaptureGroupNameSocketPool( |
| 536 HostResolver* host_resolver, | 533 HostResolver* host_resolver, |
| 537 CertVerifier* /* cert_verifier */) | 534 CertVerifier* /* cert_verifier */) |
| 538 : ParentPool(0, 0, NULL, host_resolver, NULL, NULL) {} | 535 : ParentPool(0, 0, NULL, host_resolver, NULL, NULL) { |
| 536 } |
| 539 | 537 |
| 540 template<> | 538 template <> |
| 541 CaptureGroupNameHttpProxySocketPool::CaptureGroupNameSocketPool( | 539 CaptureGroupNameHttpProxySocketPool::CaptureGroupNameSocketPool( |
| 542 HostResolver* host_resolver, | 540 HostResolver* host_resolver, |
| 543 CertVerifier* /* cert_verifier */) | 541 CertVerifier* /* cert_verifier */) |
| 544 : HttpProxyClientSocketPool(0, 0, NULL, host_resolver, NULL, NULL, NULL) {} | 542 : HttpProxyClientSocketPool(0, 0, NULL, host_resolver, NULL, NULL, NULL) { |
| 543 } |
| 545 | 544 |
| 546 template <> | 545 template <> |
| 547 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( | 546 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( |
| 548 HostResolver* host_resolver, | 547 HostResolver* host_resolver, |
| 549 CertVerifier* cert_verifier) | 548 CertVerifier* cert_verifier) |
| 550 : SSLClientSocketPool(0, | 549 : SSLClientSocketPool(0, |
| 551 0, | 550 0, |
| 552 NULL, | 551 NULL, |
| 553 host_resolver, | 552 host_resolver, |
| 554 cert_verifier, | 553 cert_verifier, |
| 555 NULL, | 554 NULL, |
| 556 NULL, | 555 NULL, |
| 557 NULL, | 556 NULL, |
| 558 std::string(), | 557 std::string(), |
| 559 NULL, | 558 NULL, |
| 560 NULL, | 559 NULL, |
| 561 NULL, | 560 NULL, |
| 562 NULL, | 561 NULL, |
| 563 NULL, | 562 NULL, |
| 564 NULL) {} | 563 NULL) { |
| 564 } |
| 565 | 565 |
| 566 //----------------------------------------------------------------------------- | 566 //----------------------------------------------------------------------------- |
| 567 | 567 |
| 568 // Helper functions for validating that AuthChallengeInfo's are correctly | 568 // Helper functions for validating that AuthChallengeInfo's are correctly |
| 569 // configured for common cases. | 569 // configured for common cases. |
| 570 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { | 570 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { |
| 571 if (!auth_challenge) | 571 if (!auth_challenge) |
| 572 return false; | 572 return false; |
| 573 EXPECT_FALSE(auth_challenge->is_proxy); | 573 EXPECT_FALSE(auth_challenge->is_proxy); |
| 574 EXPECT_EQ("www.google.com:80", auth_challenge->challenger.ToString()); | 574 EXPECT_EQ("www.google.com:80", auth_challenge->challenger.ToString()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 } // namespace | 610 } // namespace |
| 611 | 611 |
| 612 TEST_P(HttpNetworkTransactionTest, Basic) { | 612 TEST_P(HttpNetworkTransactionTest, Basic) { |
| 613 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 613 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 614 scoped_ptr<HttpTransaction> trans( | 614 scoped_ptr<HttpTransaction> trans( |
| 615 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 615 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 616 } | 616 } |
| 617 | 617 |
| 618 TEST_P(HttpNetworkTransactionTest, SimpleGET) { | 618 TEST_P(HttpNetworkTransactionTest, SimpleGET) { |
| 619 MockRead data_reads[] = { | 619 MockRead data_reads[] = { |
| 620 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 620 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 621 MockRead("hello world"), | 621 MockRead(SYNCHRONOUS, OK), |
| 622 MockRead(SYNCHRONOUS, OK), | |
| 623 }; | 622 }; |
| 624 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 623 SimpleGetHelperResult out = |
| 625 arraysize(data_reads)); | 624 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 626 EXPECT_EQ(OK, out.rv); | 625 EXPECT_EQ(OK, out.rv); |
| 627 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 626 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 628 EXPECT_EQ("hello world", out.response_data); | 627 EXPECT_EQ("hello world", out.response_data); |
| 629 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 628 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 630 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 629 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 631 } | 630 } |
| 632 | 631 |
| 633 // Response with no status line. | 632 // Response with no status line. |
| 634 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { | 633 TEST_P(HttpNetworkTransactionTest, SimpleGETNoHeaders) { |
| 635 MockRead data_reads[] = { | 634 MockRead data_reads[] = { |
| 636 MockRead("hello world"), | 635 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 637 MockRead(SYNCHRONOUS, OK), | |
| 638 }; | 636 }; |
| 639 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 637 SimpleGetHelperResult out = |
| 640 arraysize(data_reads)); | 638 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 641 EXPECT_EQ(OK, out.rv); | 639 EXPECT_EQ(OK, out.rv); |
| 642 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 640 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 643 EXPECT_EQ("hello world", out.response_data); | 641 EXPECT_EQ("hello world", out.response_data); |
| 644 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 642 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 645 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 643 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 646 } | 644 } |
| 647 | 645 |
| 648 // Allow up to 4 bytes of junk to precede status line. | 646 // Allow up to 4 bytes of junk to precede status line. |
| 649 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { | 647 TEST_P(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
| 650 MockRead data_reads[] = { | 648 MockRead data_reads[] = { |
| 651 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 649 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 652 MockRead(SYNCHRONOUS, OK), | 650 MockRead(SYNCHRONOUS, OK), |
| 653 }; | 651 }; |
| 654 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 652 SimpleGetHelperResult out = |
| 655 arraysize(data_reads)); | 653 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 656 EXPECT_EQ(OK, out.rv); | 654 EXPECT_EQ(OK, out.rv); |
| 657 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 655 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 658 EXPECT_EQ("DATA", out.response_data); | 656 EXPECT_EQ("DATA", out.response_data); |
| 659 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 657 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 660 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 658 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 661 } | 659 } |
| 662 | 660 |
| 663 // Allow up to 4 bytes of junk to precede status line. | 661 // Allow up to 4 bytes of junk to precede status line. |
| 664 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { | 662 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes) { |
| 665 MockRead data_reads[] = { | 663 MockRead data_reads[] = { |
| 666 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 664 MockRead("\n\nQJHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 667 MockRead(SYNCHRONOUS, OK), | 665 MockRead(SYNCHRONOUS, OK), |
| 668 }; | 666 }; |
| 669 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 667 SimpleGetHelperResult out = |
| 670 arraysize(data_reads)); | 668 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 671 EXPECT_EQ(OK, out.rv); | 669 EXPECT_EQ(OK, out.rv); |
| 672 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 670 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 673 EXPECT_EQ("DATA", out.response_data); | 671 EXPECT_EQ("DATA", out.response_data); |
| 674 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 672 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 675 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 673 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 676 } | 674 } |
| 677 | 675 |
| 678 // Beyond 4 bytes of slop and it should fail to find a status line. | 676 // Beyond 4 bytes of slop and it should fail to find a status line. |
| 679 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { | 677 TEST_P(HttpNetworkTransactionTest, StatusLineJunk5Bytes) { |
| 680 MockRead data_reads[] = { | 678 MockRead data_reads[] = { |
| 681 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), | 679 MockRead("xxxxxHTTP/1.1 404 Not Found\nServer: blah"), |
| 682 MockRead(SYNCHRONOUS, OK), | 680 MockRead(SYNCHRONOUS, OK), |
| 683 }; | 681 }; |
| 684 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 682 SimpleGetHelperResult out = |
| 685 arraysize(data_reads)); | 683 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 686 EXPECT_EQ(OK, out.rv); | 684 EXPECT_EQ(OK, out.rv); |
| 687 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 685 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 688 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); | 686 EXPECT_EQ("xxxxxHTTP/1.1 404 Not Found\nServer: blah", out.response_data); |
| 689 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 687 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 690 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 688 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 691 } | 689 } |
| 692 | 690 |
| 693 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. | 691 // Same as StatusLineJunk4Bytes, except the read chunks are smaller. |
| 694 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { | 692 TEST_P(HttpNetworkTransactionTest, StatusLineJunk4Bytes_Slow) { |
| 695 MockRead data_reads[] = { | 693 MockRead data_reads[] = { |
| 696 MockRead("\n"), | 694 MockRead("\n"), |
| 697 MockRead("\n"), | 695 MockRead("\n"), |
| 698 MockRead("Q"), | 696 MockRead("Q"), |
| 699 MockRead("J"), | 697 MockRead("J"), |
| 700 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 698 MockRead("HTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
| 701 MockRead(SYNCHRONOUS, OK), | 699 MockRead(SYNCHRONOUS, OK), |
| 702 }; | 700 }; |
| 703 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 701 SimpleGetHelperResult out = |
| 704 arraysize(data_reads)); | 702 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 705 EXPECT_EQ(OK, out.rv); | 703 EXPECT_EQ(OK, out.rv); |
| 706 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 704 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
| 707 EXPECT_EQ("DATA", out.response_data); | 705 EXPECT_EQ("DATA", out.response_data); |
| 708 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 706 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 709 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 707 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 710 } | 708 } |
| 711 | 709 |
| 712 // Close the connection before enough bytes to have a status line. | 710 // Close the connection before enough bytes to have a status line. |
| 713 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { | 711 TEST_P(HttpNetworkTransactionTest, StatusLinePartial) { |
| 714 MockRead data_reads[] = { | 712 MockRead data_reads[] = { |
| 715 MockRead("HTT"), | 713 MockRead("HTT"), MockRead(SYNCHRONOUS, OK), |
| 716 MockRead(SYNCHRONOUS, OK), | |
| 717 }; | 714 }; |
| 718 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 715 SimpleGetHelperResult out = |
| 719 arraysize(data_reads)); | 716 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 720 EXPECT_EQ(OK, out.rv); | 717 EXPECT_EQ(OK, out.rv); |
| 721 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 718 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
| 722 EXPECT_EQ("HTT", out.response_data); | 719 EXPECT_EQ("HTT", out.response_data); |
| 723 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 720 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 724 EXPECT_EQ(reads_size, out.totalReceivedBytes); | 721 EXPECT_EQ(reads_size, out.totalReceivedBytes); |
| 725 } | 722 } |
| 726 | 723 |
| 727 // Simulate a 204 response, lacking a Content-Length header, sent over a | 724 // Simulate a 204 response, lacking a Content-Length header, sent over a |
| 728 // persistent connection. The response should still terminate since a 204 | 725 // persistent connection. The response should still terminate since a 204 |
| 729 // cannot have a response body. | 726 // cannot have a response body. |
| 730 TEST_P(HttpNetworkTransactionTest, StopsReading204) { | 727 TEST_P(HttpNetworkTransactionTest, StopsReading204) { |
| 731 char junk[] = "junk"; | 728 char junk[] = "junk"; |
| 732 MockRead data_reads[] = { | 729 MockRead data_reads[] = { |
| 733 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 730 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
| 734 MockRead(junk), // Should not be read!! | 731 MockRead(junk), // Should not be read!! |
| 735 MockRead(SYNCHRONOUS, OK), | 732 MockRead(SYNCHRONOUS, OK), |
| 736 }; | 733 }; |
| 737 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 734 SimpleGetHelperResult out = |
| 738 arraysize(data_reads)); | 735 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 739 EXPECT_EQ(OK, out.rv); | 736 EXPECT_EQ(OK, out.rv); |
| 740 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); | 737 EXPECT_EQ("HTTP/1.1 204 No Content", out.status_line); |
| 741 EXPECT_EQ("", out.response_data); | 738 EXPECT_EQ("", out.response_data); |
| 742 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 739 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 743 int64 response_size = reads_size - strlen(junk); | 740 int64 response_size = reads_size - strlen(junk); |
| 744 EXPECT_EQ(response_size, out.totalReceivedBytes); | 741 EXPECT_EQ(response_size, out.totalReceivedBytes); |
| 745 } | 742 } |
| 746 | 743 |
| 747 // A simple request using chunked encoding with some extra data after. | 744 // A simple request using chunked encoding with some extra data after. |
| 748 // (Like might be seen in a pipelined response.) | 745 // (Like might be seen in a pipelined response.) |
| 749 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { | 746 TEST_P(HttpNetworkTransactionTest, ChunkedEncoding) { |
| 750 std::string final_chunk = "0\r\n\r\n"; | 747 std::string final_chunk = "0\r\n\r\n"; |
| 751 std::string extra_data = "HTTP/1.1 200 OK\r\n"; | 748 std::string extra_data = "HTTP/1.1 200 OK\r\n"; |
| 752 std::string last_read = final_chunk + extra_data; | 749 std::string last_read = final_chunk + extra_data; |
| 753 MockRead data_reads[] = { | 750 MockRead data_reads[] = { |
| 754 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), | 751 MockRead("HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n"), |
| 755 MockRead("5\r\nHello\r\n"), | 752 MockRead("5\r\nHello\r\n"), |
| 756 MockRead("1\r\n"), | 753 MockRead("1\r\n"), |
| 757 MockRead(" \r\n"), | 754 MockRead(" \r\n"), |
| 758 MockRead("5\r\nworld\r\n"), | 755 MockRead("5\r\nworld\r\n"), |
| 759 MockRead(last_read.data()), | 756 MockRead(last_read.data()), |
| 760 MockRead(SYNCHRONOUS, OK), | 757 MockRead(SYNCHRONOUS, OK), |
| 761 }; | 758 }; |
| 762 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 759 SimpleGetHelperResult out = |
| 763 arraysize(data_reads)); | 760 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 764 EXPECT_EQ(OK, out.rv); | 761 EXPECT_EQ(OK, out.rv); |
| 765 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 762 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 766 EXPECT_EQ("Hello world", out.response_data); | 763 EXPECT_EQ("Hello world", out.response_data); |
| 767 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 764 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| 768 int64 response_size = reads_size - extra_data.size(); | 765 int64 response_size = reads_size - extra_data.size(); |
| 769 EXPECT_EQ(response_size, out.totalReceivedBytes); | 766 EXPECT_EQ(response_size, out.totalReceivedBytes); |
| 770 } | 767 } |
| 771 | 768 |
| 772 // Next tests deal with http://crbug.com/56344. | 769 // Next tests deal with http://crbug.com/56344. |
| 773 | 770 |
| 774 TEST_P(HttpNetworkTransactionTest, | 771 TEST_P(HttpNetworkTransactionTest, |
| 775 MultipleContentLengthHeadersNoTransferEncoding) { | 772 MultipleContentLengthHeadersNoTransferEncoding) { |
| 776 MockRead data_reads[] = { | 773 MockRead data_reads[] = { |
| 777 MockRead("HTTP/1.1 200 OK\r\n"), | 774 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 10\r\n"), |
| 778 MockRead("Content-Length: 10\r\n"), | 775 MockRead("Content-Length: 5\r\n\r\n"), |
| 779 MockRead("Content-Length: 5\r\n\r\n"), | |
| 780 }; | 776 }; |
| 781 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 777 SimpleGetHelperResult out = |
| 782 arraysize(data_reads)); | 778 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 783 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 779 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); |
| 784 } | 780 } |
| 785 | 781 |
| 786 TEST_P(HttpNetworkTransactionTest, | 782 TEST_P(HttpNetworkTransactionTest, |
| 787 DuplicateContentLengthHeadersNoTransferEncoding) { | 783 DuplicateContentLengthHeadersNoTransferEncoding) { |
| 788 MockRead data_reads[] = { | 784 MockRead data_reads[] = { |
| 789 MockRead("HTTP/1.1 200 OK\r\n"), | 785 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 5\r\n"), |
| 790 MockRead("Content-Length: 5\r\n"), | 786 MockRead("Content-Length: 5\r\n\r\n"), MockRead("Hello"), |
| 791 MockRead("Content-Length: 5\r\n\r\n"), | |
| 792 MockRead("Hello"), | |
| 793 }; | 787 }; |
| 794 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 788 SimpleGetHelperResult out = |
| 795 arraysize(data_reads)); | 789 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 796 EXPECT_EQ(OK, out.rv); | 790 EXPECT_EQ(OK, out.rv); |
| 797 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 791 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 798 EXPECT_EQ("Hello", out.response_data); | 792 EXPECT_EQ("Hello", out.response_data); |
| 799 } | 793 } |
| 800 | 794 |
| 801 TEST_P(HttpNetworkTransactionTest, | 795 TEST_P(HttpNetworkTransactionTest, |
| 802 ComplexContentLengthHeadersNoTransferEncoding) { | 796 ComplexContentLengthHeadersNoTransferEncoding) { |
| 803 // More than 2 dupes. | 797 // More than 2 dupes. |
| 804 { | 798 { |
| 805 MockRead data_reads[] = { | 799 MockRead data_reads[] = { |
| 806 MockRead("HTTP/1.1 200 OK\r\n"), | 800 MockRead("HTTP/1.1 200 OK\r\n"), |
| 807 MockRead("Content-Length: 5\r\n"), | 801 MockRead("Content-Length: 5\r\n"), |
| 808 MockRead("Content-Length: 5\r\n"), | 802 MockRead("Content-Length: 5\r\n"), |
| 809 MockRead("Content-Length: 5\r\n\r\n"), | 803 MockRead("Content-Length: 5\r\n\r\n"), |
| 810 MockRead("Hello"), | 804 MockRead("Hello"), |
| 811 }; | 805 }; |
| 812 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 806 SimpleGetHelperResult out = |
| 813 arraysize(data_reads)); | 807 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 814 EXPECT_EQ(OK, out.rv); | 808 EXPECT_EQ(OK, out.rv); |
| 815 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 809 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 816 EXPECT_EQ("Hello", out.response_data); | 810 EXPECT_EQ("Hello", out.response_data); |
| 817 } | 811 } |
| 818 // HTTP/1.0 | 812 // HTTP/1.0 |
| 819 { | 813 { |
| 820 MockRead data_reads[] = { | 814 MockRead data_reads[] = { |
| 821 MockRead("HTTP/1.0 200 OK\r\n"), | 815 MockRead("HTTP/1.0 200 OK\r\n"), |
| 822 MockRead("Content-Length: 5\r\n"), | 816 MockRead("Content-Length: 5\r\n"), |
| 823 MockRead("Content-Length: 5\r\n"), | 817 MockRead("Content-Length: 5\r\n"), |
| 824 MockRead("Content-Length: 5\r\n\r\n"), | 818 MockRead("Content-Length: 5\r\n\r\n"), |
| 825 MockRead("Hello"), | 819 MockRead("Hello"), |
| 826 }; | 820 }; |
| 827 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 821 SimpleGetHelperResult out = |
| 828 arraysize(data_reads)); | 822 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 829 EXPECT_EQ(OK, out.rv); | 823 EXPECT_EQ(OK, out.rv); |
| 830 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 824 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 831 EXPECT_EQ("Hello", out.response_data); | 825 EXPECT_EQ("Hello", out.response_data); |
| 832 } | 826 } |
| 833 // 2 dupes and one mismatched. | 827 // 2 dupes and one mismatched. |
| 834 { | 828 { |
| 835 MockRead data_reads[] = { | 829 MockRead data_reads[] = { |
| 836 MockRead("HTTP/1.1 200 OK\r\n"), | 830 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 10\r\n"), |
| 837 MockRead("Content-Length: 10\r\n"), | 831 MockRead("Content-Length: 10\r\n"), |
| 838 MockRead("Content-Length: 10\r\n"), | 832 MockRead("Content-Length: 5\r\n\r\n"), |
| 839 MockRead("Content-Length: 5\r\n\r\n"), | |
| 840 }; | 833 }; |
| 841 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 834 SimpleGetHelperResult out = |
| 842 arraysize(data_reads)); | 835 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 843 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); | 836 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH, out.rv); |
| 844 } | 837 } |
| 845 } | 838 } |
| 846 | 839 |
| 847 TEST_P(HttpNetworkTransactionTest, | 840 TEST_P(HttpNetworkTransactionTest, |
| 848 MultipleContentLengthHeadersTransferEncoding) { | 841 MultipleContentLengthHeadersTransferEncoding) { |
| 849 MockRead data_reads[] = { | 842 MockRead data_reads[] = { |
| 850 MockRead("HTTP/1.1 200 OK\r\n"), | 843 MockRead("HTTP/1.1 200 OK\r\n"), |
| 851 MockRead("Content-Length: 666\r\n"), | 844 MockRead("Content-Length: 666\r\n"), |
| 852 MockRead("Content-Length: 1337\r\n"), | 845 MockRead("Content-Length: 1337\r\n"), |
| 853 MockRead("Transfer-Encoding: chunked\r\n\r\n"), | 846 MockRead("Transfer-Encoding: chunked\r\n\r\n"), |
| 854 MockRead("5\r\nHello\r\n"), | 847 MockRead("5\r\nHello\r\n"), |
| 855 MockRead("1\r\n"), | 848 MockRead("1\r\n"), |
| 856 MockRead(" \r\n"), | 849 MockRead(" \r\n"), |
| 857 MockRead("5\r\nworld\r\n"), | 850 MockRead("5\r\nworld\r\n"), |
| 858 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), | 851 MockRead("0\r\n\r\nHTTP/1.1 200 OK\r\n"), |
| 859 MockRead(SYNCHRONOUS, OK), | 852 MockRead(SYNCHRONOUS, OK), |
| 860 }; | 853 }; |
| 861 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 854 SimpleGetHelperResult out = |
| 862 arraysize(data_reads)); | 855 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 863 EXPECT_EQ(OK, out.rv); | 856 EXPECT_EQ(OK, out.rv); |
| 864 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 857 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 865 EXPECT_EQ("Hello world", out.response_data); | 858 EXPECT_EQ("Hello world", out.response_data); |
| 866 } | 859 } |
| 867 | 860 |
| 868 // Next tests deal with http://crbug.com/98895. | 861 // Next tests deal with http://crbug.com/98895. |
| 869 | 862 |
| 870 // Checks that a single Content-Disposition header results in no error. | 863 // Checks that a single Content-Disposition header results in no error. |
| 871 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { | 864 TEST_P(HttpNetworkTransactionTest, SingleContentDispositionHeader) { |
| 872 MockRead data_reads[] = { | 865 MockRead data_reads[] = { |
| 873 MockRead("HTTP/1.1 200 OK\r\n"), | 866 MockRead("HTTP/1.1 200 OK\r\n"), |
| 874 MockRead("Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), | 867 MockRead( |
| 875 MockRead("Content-Length: 5\r\n\r\n"), | 868 "Content-Disposition: attachment;filename=\"salutations.txt\"r\n"), |
| 876 MockRead("Hello"), | 869 MockRead("Content-Length: 5\r\n\r\n"), MockRead("Hello"), |
| 877 }; | 870 }; |
| 878 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 871 SimpleGetHelperResult out = |
| 879 arraysize(data_reads)); | 872 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 880 EXPECT_EQ(OK, out.rv); | 873 EXPECT_EQ(OK, out.rv); |
| 881 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 874 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 882 EXPECT_EQ("Hello", out.response_data); | 875 EXPECT_EQ("Hello", out.response_data); |
| 883 } | 876 } |
| 884 | 877 |
| 885 // Checks that two identical Content-Disposition headers result in no error. | 878 // Checks that two identical Content-Disposition headers result in no error. |
| 886 TEST_P(HttpNetworkTransactionTest, | 879 TEST_P(HttpNetworkTransactionTest, TwoIdenticalContentDispositionHeaders) { |
| 887 TwoIdenticalContentDispositionHeaders) { | |
| 888 MockRead data_reads[] = { | 880 MockRead data_reads[] = { |
| 889 MockRead("HTTP/1.1 200 OK\r\n"), | 881 MockRead("HTTP/1.1 200 OK\r\n"), |
| 890 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 882 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 891 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 883 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 892 MockRead("Content-Length: 5\r\n\r\n"), | 884 MockRead("Content-Length: 5\r\n\r\n"), |
| 893 MockRead("Hello"), | 885 MockRead("Hello"), |
| 894 }; | 886 }; |
| 895 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 887 SimpleGetHelperResult out = |
| 896 arraysize(data_reads)); | 888 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 897 EXPECT_EQ(OK, out.rv); | 889 EXPECT_EQ(OK, out.rv); |
| 898 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 890 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
| 899 EXPECT_EQ("Hello", out.response_data); | 891 EXPECT_EQ("Hello", out.response_data); |
| 900 } | 892 } |
| 901 | 893 |
| 902 // Checks that two distinct Content-Disposition headers result in an error. | 894 // Checks that two distinct Content-Disposition headers result in an error. |
| 903 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { | 895 TEST_P(HttpNetworkTransactionTest, TwoDistinctContentDispositionHeaders) { |
| 904 MockRead data_reads[] = { | 896 MockRead data_reads[] = { |
| 905 MockRead("HTTP/1.1 200 OK\r\n"), | 897 MockRead("HTTP/1.1 200 OK\r\n"), |
| 906 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), | 898 MockRead("Content-Disposition: attachment;filename=\"greetings.txt\"r\n"), |
| 907 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), | 899 MockRead("Content-Disposition: attachment;filename=\"hi.txt\"r\n"), |
| 908 MockRead("Content-Length: 5\r\n\r\n"), | 900 MockRead("Content-Length: 5\r\n\r\n"), |
| 909 MockRead("Hello"), | 901 MockRead("Hello"), |
| 910 }; | 902 }; |
| 911 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 903 SimpleGetHelperResult out = |
| 912 arraysize(data_reads)); | 904 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 913 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); | 905 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION, out.rv); |
| 914 } | 906 } |
| 915 | 907 |
| 916 // Checks that two identical Location headers result in no error. | 908 // Checks that two identical Location headers result in no error. |
| 917 // Also tests Location header behavior. | 909 // Also tests Location header behavior. |
| 918 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { | 910 TEST_P(HttpNetworkTransactionTest, TwoIdenticalLocationHeaders) { |
| 919 MockRead data_reads[] = { | 911 MockRead data_reads[] = { |
| 920 MockRead("HTTP/1.1 302 Redirect\r\n"), | 912 MockRead("HTTP/1.1 302 Redirect\r\n"), |
| 921 MockRead("Location: http://good.com/\r\n"), | 913 MockRead("Location: http://good.com/\r\n"), |
| 922 MockRead("Location: http://good.com/\r\n"), | 914 MockRead("Location: http://good.com/\r\n"), |
| 923 MockRead("Content-Length: 0\r\n\r\n"), | 915 MockRead("Content-Length: 0\r\n\r\n"), |
| 924 MockRead(SYNCHRONOUS, OK), | 916 MockRead(SYNCHRONOUS, OK), |
| 925 }; | 917 }; |
| 926 | 918 |
| 927 HttpRequestInfo request; | 919 HttpRequestInfo request; |
| 928 request.method = "GET"; | 920 request.method = "GET"; |
| 929 request.url = GURL("http://redirect.com/"); | 921 request.url = GURL("http://redirect.com/"); |
| 930 request.load_flags = 0; | 922 request.load_flags = 0; |
| 931 | 923 |
| 932 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 924 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 933 scoped_ptr<HttpTransaction> trans( | 925 scoped_ptr<HttpTransaction> trans( |
| 934 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 926 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 947 ASSERT_TRUE(response != NULL && response->headers.get() != NULL); | 939 ASSERT_TRUE(response != NULL && response->headers.get() != NULL); |
| 948 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); | 940 EXPECT_EQ("HTTP/1.1 302 Redirect", response->headers->GetStatusLine()); |
| 949 std::string url; | 941 std::string url; |
| 950 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 942 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
| 951 EXPECT_EQ("http://good.com/", url); | 943 EXPECT_EQ("http://good.com/", url); |
| 952 } | 944 } |
| 953 | 945 |
| 954 // Checks that two distinct Location headers result in an error. | 946 // Checks that two distinct Location headers result in an error. |
| 955 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { | 947 TEST_P(HttpNetworkTransactionTest, TwoDistinctLocationHeaders) { |
| 956 MockRead data_reads[] = { | 948 MockRead data_reads[] = { |
| 957 MockRead("HTTP/1.1 302 Redirect\r\n"), | 949 MockRead("HTTP/1.1 302 Redirect\r\n"), |
| 958 MockRead("Location: http://good.com/\r\n"), | 950 MockRead("Location: http://good.com/\r\n"), |
| 959 MockRead("Location: http://evil.com/\r\n"), | 951 MockRead("Location: http://evil.com/\r\n"), |
| 960 MockRead("Content-Length: 0\r\n\r\n"), | 952 MockRead("Content-Length: 0\r\n\r\n"), |
| 961 MockRead(SYNCHRONOUS, OK), | 953 MockRead(SYNCHRONOUS, OK), |
| 962 }; | 954 }; |
| 963 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 955 SimpleGetHelperResult out = |
| 964 arraysize(data_reads)); | 956 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 965 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); | 957 EXPECT_EQ(ERR_RESPONSE_HEADERS_MULTIPLE_LOCATION, out.rv); |
| 966 } | 958 } |
| 967 | 959 |
| 968 // Do a request using the HEAD method. Verify that we don't try to read the | 960 // Do a request using the HEAD method. Verify that we don't try to read the |
| 969 // message body (since HEAD has none). | 961 // message body (since HEAD has none). |
| 970 TEST_P(HttpNetworkTransactionTest, Head) { | 962 TEST_P(HttpNetworkTransactionTest, Head) { |
| 971 HttpRequestInfo request; | 963 HttpRequestInfo request; |
| 972 request.method = "HEAD"; | 964 request.method = "HEAD"; |
| 973 request.url = GURL("http://www.google.com/"); | 965 request.url = GURL("http://www.google.com/"); |
| 974 request.load_flags = 0; | 966 request.load_flags = 0; |
| 975 | 967 |
| 976 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 968 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 977 scoped_ptr<HttpTransaction> trans( | 969 scoped_ptr<HttpTransaction> trans( |
| 978 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 970 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 979 | 971 |
| 980 MockWrite data_writes1[] = { | 972 MockWrite data_writes1[] = { |
| 981 MockWrite("HEAD / HTTP/1.1\r\n" | 973 MockWrite( |
| 982 "Host: www.google.com\r\n" | 974 "HEAD / HTTP/1.1\r\n" |
| 983 "Connection: keep-alive\r\n" | 975 "Host: www.google.com\r\n" |
| 984 "Content-Length: 0\r\n\r\n"), | 976 "Connection: keep-alive\r\n" |
| 977 "Content-Length: 0\r\n\r\n"), |
| 985 }; | 978 }; |
| 986 MockRead data_reads1[] = { | 979 MockRead data_reads1[] = { |
| 987 MockRead("HTTP/1.1 404 Not Found\r\n"), | 980 MockRead("HTTP/1.1 404 Not Found\r\n"), MockRead("Server: Blah\r\n"), |
| 988 MockRead("Server: Blah\r\n"), | 981 MockRead("Content-Length: 1234\r\n\r\n"), |
| 989 MockRead("Content-Length: 1234\r\n\r\n"), | |
| 990 | 982 |
| 991 // No response body because the test stops reading here. | 983 // No response body because the test stops reading here. |
| 992 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 984 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 993 }; | 985 }; |
| 994 | 986 |
| 995 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 987 StaticSocketDataProvider data1(data_reads1, |
| 996 data_writes1, arraysize(data_writes1)); | 988 arraysize(data_reads1), |
| 989 data_writes1, |
| 990 arraysize(data_writes1)); |
| 997 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 991 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 998 | 992 |
| 999 TestCompletionCallback callback1; | 993 TestCompletionCallback callback1; |
| 1000 | 994 |
| 1001 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 995 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 1002 EXPECT_EQ(ERR_IO_PENDING, rv); | 996 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1003 | 997 |
| 1004 rv = callback1.WaitForResult(); | 998 rv = callback1.WaitForResult(); |
| 1005 EXPECT_EQ(OK, rv); | 999 EXPECT_EQ(OK, rv); |
| 1006 | 1000 |
| 1007 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1001 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1008 ASSERT_TRUE(response != NULL); | 1002 ASSERT_TRUE(response != NULL); |
| 1009 | 1003 |
| 1010 // Check that the headers got parsed. | 1004 // Check that the headers got parsed. |
| 1011 EXPECT_TRUE(response->headers.get() != NULL); | 1005 EXPECT_TRUE(response->headers.get() != NULL); |
| 1012 EXPECT_EQ(1234, response->headers->GetContentLength()); | 1006 EXPECT_EQ(1234, response->headers->GetContentLength()); |
| 1013 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); | 1007 EXPECT_EQ("HTTP/1.1 404 Not Found", response->headers->GetStatusLine()); |
| 1014 | 1008 |
| 1015 std::string server_header; | 1009 std::string server_header; |
| 1016 void* iter = NULL; | 1010 void* iter = NULL; |
| 1017 bool has_server_header = response->headers->EnumerateHeader( | 1011 bool has_server_header = |
| 1018 &iter, "Server", &server_header); | 1012 response->headers->EnumerateHeader(&iter, "Server", &server_header); |
| 1019 EXPECT_TRUE(has_server_header); | 1013 EXPECT_TRUE(has_server_header); |
| 1020 EXPECT_EQ("Blah", server_header); | 1014 EXPECT_EQ("Blah", server_header); |
| 1021 | 1015 |
| 1022 // Reading should give EOF right away, since there is no message body | 1016 // Reading should give EOF right away, since there is no message body |
| 1023 // (despite non-zero content-length). | 1017 // (despite non-zero content-length). |
| 1024 std::string response_data; | 1018 std::string response_data; |
| 1025 rv = ReadTransaction(trans.get(), &response_data); | 1019 rv = ReadTransaction(trans.get(), &response_data); |
| 1026 EXPECT_EQ(OK, rv); | 1020 EXPECT_EQ(OK, rv); |
| 1027 EXPECT_EQ("", response_data); | 1021 EXPECT_EQ("", response_data); |
| 1028 } | 1022 } |
| 1029 | 1023 |
| 1030 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { | 1024 TEST_P(HttpNetworkTransactionTest, ReuseConnection) { |
| 1031 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1025 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1032 | 1026 |
| 1033 MockRead data_reads[] = { | 1027 MockRead data_reads[] = { |
| 1034 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1028 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1035 MockRead("hello"), | 1029 MockRead("hello"), |
| 1036 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1030 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1037 MockRead("world"), | 1031 MockRead("world"), |
| 1038 MockRead(SYNCHRONOUS, OK), | 1032 MockRead(SYNCHRONOUS, OK), |
| 1039 }; | 1033 }; |
| 1040 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1034 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1041 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1035 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1042 | 1036 |
| 1043 const char* const kExpectedResponseData[] = { | 1037 const char* const kExpectedResponseData[] = {"hello", "world"}; |
| 1044 "hello", "world" | |
| 1045 }; | |
| 1046 | 1038 |
| 1047 for (int i = 0; i < 2; ++i) { | 1039 for (int i = 0; i < 2; ++i) { |
| 1048 HttpRequestInfo request; | 1040 HttpRequestInfo request; |
| 1049 request.method = "GET"; | 1041 request.method = "GET"; |
| 1050 request.url = GURL("http://www.google.com/"); | 1042 request.url = GURL("http://www.google.com/"); |
| 1051 request.load_flags = 0; | 1043 request.load_flags = 0; |
| 1052 | 1044 |
| 1053 scoped_ptr<HttpTransaction> trans( | 1045 scoped_ptr<HttpTransaction> trans( |
| 1054 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1046 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1055 | 1047 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1083 request.method = "POST"; | 1075 request.method = "POST"; |
| 1084 request.url = GURL("http://www.foo.com/"); | 1076 request.url = GURL("http://www.foo.com/"); |
| 1085 request.upload_data_stream = &upload_data_stream; | 1077 request.upload_data_stream = &upload_data_stream; |
| 1086 request.load_flags = 0; | 1078 request.load_flags = 0; |
| 1087 | 1079 |
| 1088 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1080 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1089 scoped_ptr<HttpTransaction> trans( | 1081 scoped_ptr<HttpTransaction> trans( |
| 1090 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1082 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1091 | 1083 |
| 1092 MockRead data_reads[] = { | 1084 MockRead data_reads[] = { |
| 1093 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), | 1085 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), |
| 1094 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 1086 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 1095 MockRead("hello world"), | 1087 MockRead(SYNCHRONOUS, OK), |
| 1096 MockRead(SYNCHRONOUS, OK), | |
| 1097 }; | 1088 }; |
| 1098 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1089 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1099 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1090 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1100 | 1091 |
| 1101 TestCompletionCallback callback; | 1092 TestCompletionCallback callback; |
| 1102 | 1093 |
| 1103 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1094 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1104 EXPECT_EQ(ERR_IO_PENDING, rv); | 1095 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1105 | 1096 |
| 1106 rv = callback.WaitForResult(); | 1097 rv = callback.WaitForResult(); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1125 HttpRequestInfo request; | 1116 HttpRequestInfo request; |
| 1126 request.method = "GET"; | 1117 request.method = "GET"; |
| 1127 request.url = GURL("http://www.foo.com/"); | 1118 request.url = GURL("http://www.foo.com/"); |
| 1128 request.load_flags = 0; | 1119 request.load_flags = 0; |
| 1129 | 1120 |
| 1130 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1121 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1131 scoped_ptr<HttpTransaction> trans( | 1122 scoped_ptr<HttpTransaction> trans( |
| 1132 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1123 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1133 | 1124 |
| 1134 MockRead data_reads[] = { | 1125 MockRead data_reads[] = { |
| 1135 MockRead("HTTP/1.1 102 Unspecified status code\r\n\r\n" | 1126 MockRead( |
| 1136 "HTTP/1.1 200 OK\r\n\r\n"), | 1127 "HTTP/1.1 102 Unspecified status code\r\n\r\n" |
| 1137 MockRead("hello world"), | 1128 "HTTP/1.1 200 OK\r\n\r\n"), |
| 1138 MockRead(SYNCHRONOUS, OK), | 1129 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 1139 }; | 1130 }; |
| 1140 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1131 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1141 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1132 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1142 | 1133 |
| 1143 TestCompletionCallback callback; | 1134 TestCompletionCallback callback; |
| 1144 | 1135 |
| 1145 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1136 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1146 EXPECT_EQ(ERR_IO_PENDING, rv); | 1137 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1147 | 1138 |
| 1148 rv = callback.WaitForResult(); | 1139 rv = callback.WaitForResult(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1164 HttpRequestInfo request; | 1155 HttpRequestInfo request; |
| 1165 request.method = "POST"; | 1156 request.method = "POST"; |
| 1166 request.url = GURL("http://www.foo.com/"); | 1157 request.url = GURL("http://www.foo.com/"); |
| 1167 request.load_flags = 0; | 1158 request.load_flags = 0; |
| 1168 | 1159 |
| 1169 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1160 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1170 scoped_ptr<HttpTransaction> trans( | 1161 scoped_ptr<HttpTransaction> trans( |
| 1171 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1162 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1172 | 1163 |
| 1173 MockRead data_reads[] = { | 1164 MockRead data_reads[] = { |
| 1174 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), | 1165 MockRead(SYNCHRONOUS, "HTTP/1.0 100 Continue\r\n"), MockRead(ASYNC, 0), |
| 1175 MockRead(ASYNC, 0), | |
| 1176 }; | 1166 }; |
| 1177 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1167 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1178 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1168 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1179 | 1169 |
| 1180 TestCompletionCallback callback; | 1170 TestCompletionCallback callback; |
| 1181 | 1171 |
| 1182 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1172 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1183 EXPECT_EQ(ERR_IO_PENDING, rv); | 1173 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1184 | 1174 |
| 1185 rv = callback.WaitForResult(); | 1175 rv = callback.WaitForResult(); |
| 1186 EXPECT_EQ(OK, rv); | 1176 EXPECT_EQ(OK, rv); |
| 1187 | 1177 |
| 1188 std::string response_data; | 1178 std::string response_data; |
| 1189 rv = ReadTransaction(trans.get(), &response_data); | 1179 rv = ReadTransaction(trans.get(), &response_data); |
| 1190 EXPECT_EQ(OK, rv); | 1180 EXPECT_EQ(OK, rv); |
| 1191 EXPECT_EQ("", response_data); | 1181 EXPECT_EQ("", response_data); |
| 1192 } | 1182 } |
| 1193 | 1183 |
| 1194 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { | 1184 TEST_P(HttpNetworkTransactionTest, EmptyResponse) { |
| 1195 HttpRequestInfo request; | 1185 HttpRequestInfo request; |
| 1196 request.method = "POST"; | 1186 request.method = "POST"; |
| 1197 request.url = GURL("http://www.foo.com/"); | 1187 request.url = GURL("http://www.foo.com/"); |
| 1198 request.load_flags = 0; | 1188 request.load_flags = 0; |
| 1199 | 1189 |
| 1200 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1190 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1201 scoped_ptr<HttpTransaction> trans( | 1191 scoped_ptr<HttpTransaction> trans( |
| 1202 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1192 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1203 | 1193 |
| 1204 | |
| 1205 MockRead data_reads[] = { | 1194 MockRead data_reads[] = { |
| 1206 MockRead(ASYNC, 0), | 1195 MockRead(ASYNC, 0), |
| 1207 }; | 1196 }; |
| 1208 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1197 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1209 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1198 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1210 | 1199 |
| 1211 TestCompletionCallback callback; | 1200 TestCompletionCallback callback; |
| 1212 | 1201 |
| 1213 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1202 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1214 EXPECT_EQ(ERR_IO_PENDING, rv); | 1203 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1215 | 1204 |
| 1216 rv = callback.WaitForResult(); | 1205 rv = callback.WaitForResult(); |
| 1217 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 1206 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
| 1218 } | 1207 } |
| 1219 | 1208 |
| 1220 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( | 1209 void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest( |
| 1221 const MockWrite* write_failure, | 1210 const MockWrite* write_failure, |
| 1222 const MockRead* read_failure) { | 1211 const MockRead* read_failure) { |
| 1223 HttpRequestInfo request; | 1212 HttpRequestInfo request; |
| 1224 request.method = "GET"; | 1213 request.method = "GET"; |
| 1225 request.url = GURL("http://www.foo.com/"); | 1214 request.url = GURL("http://www.foo.com/"); |
| 1226 request.load_flags = 0; | 1215 request.load_flags = 0; |
| 1227 | 1216 |
| 1228 CapturingNetLog net_log; | 1217 CapturingNetLog net_log; |
| 1229 session_deps_.net_log = &net_log; | 1218 session_deps_.net_log = &net_log; |
| 1230 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1219 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1231 | 1220 |
| 1232 // Written data for successfully sending both requests. | 1221 // Written data for successfully sending both requests. |
| 1233 MockWrite data1_writes[] = { | 1222 MockWrite data1_writes[] = {MockWrite( |
| 1234 MockWrite("GET / HTTP/1.1\r\n" | 1223 "GET / HTTP/1.1\r\n" |
| 1235 "Host: www.foo.com\r\n" | 1224 "Host: www.foo.com\r\n" |
| 1236 "Connection: keep-alive\r\n\r\n"), | 1225 "Connection: keep-alive\r\n\r\n"), |
| 1237 MockWrite("GET / HTTP/1.1\r\n" | 1226 MockWrite( |
| 1238 "Host: www.foo.com\r\n" | 1227 "GET / HTTP/1.1\r\n" |
| 1239 "Connection: keep-alive\r\n\r\n") | 1228 "Host: www.foo.com\r\n" |
| 1240 }; | 1229 "Connection: keep-alive\r\n\r\n")}; |
| 1241 | 1230 |
| 1242 // Read results for the first request. | 1231 // Read results for the first request. |
| 1243 MockRead data1_reads[] = { | 1232 MockRead data1_reads[] = { |
| 1244 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1233 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1245 MockRead("hello"), | 1234 MockRead("hello"), MockRead(ASYNC, OK), |
| 1246 MockRead(ASYNC, OK), | |
| 1247 }; | 1235 }; |
| 1248 | 1236 |
| 1249 if (write_failure) { | 1237 if (write_failure) { |
| 1250 ASSERT_FALSE(read_failure); | 1238 ASSERT_FALSE(read_failure); |
| 1251 data1_writes[1] = *write_failure; | 1239 data1_writes[1] = *write_failure; |
| 1252 } else { | 1240 } else { |
| 1253 ASSERT_TRUE(read_failure); | 1241 ASSERT_TRUE(read_failure); |
| 1254 data1_reads[2] = *read_failure; | 1242 data1_reads[2] = *read_failure; |
| 1255 } | 1243 } |
| 1256 | 1244 |
| 1257 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), | 1245 StaticSocketDataProvider data1(data1_reads, |
| 1258 data1_writes, arraysize(data1_writes)); | 1246 arraysize(data1_reads), |
| 1247 data1_writes, |
| 1248 arraysize(data1_writes)); |
| 1259 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1249 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 1260 | 1250 |
| 1261 MockRead data2_reads[] = { | 1251 MockRead data2_reads[] = { |
| 1262 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1252 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1263 MockRead("world"), | 1253 MockRead("world"), MockRead(ASYNC, OK), |
| 1264 MockRead(ASYNC, OK), | |
| 1265 }; | 1254 }; |
| 1266 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); | 1255 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); |
| 1267 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1256 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1268 | 1257 |
| 1269 const char* kExpectedResponseData[] = { | 1258 const char* kExpectedResponseData[] = {"hello", "world"}; |
| 1270 "hello", "world" | |
| 1271 }; | |
| 1272 | 1259 |
| 1273 uint32 first_socket_log_id = NetLog::Source::kInvalidId; | 1260 uint32 first_socket_log_id = NetLog::Source::kInvalidId; |
| 1274 for (int i = 0; i < 2; ++i) { | 1261 for (int i = 0; i < 2; ++i) { |
| 1275 TestCompletionCallback callback; | 1262 TestCompletionCallback callback; |
| 1276 | 1263 |
| 1277 scoped_ptr<HttpTransaction> trans( | 1264 scoped_ptr<HttpTransaction> trans( |
| 1278 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1265 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1279 | 1266 |
| 1280 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1267 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1281 EXPECT_EQ(ERR_IO_PENDING, rv); | 1268 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1330 | 1317 |
| 1331 // SPDY versions of the request and response. | 1318 // SPDY versions of the request and response. |
| 1332 scoped_ptr<SpdyFrame> spdy_request(spdy_util_.ConstructSpdyGet( | 1319 scoped_ptr<SpdyFrame> spdy_request(spdy_util_.ConstructSpdyGet( |
| 1333 request.url.spec().c_str(), false, 1, DEFAULT_PRIORITY)); | 1320 request.url.spec().c_str(), false, 1, DEFAULT_PRIORITY)); |
| 1334 scoped_ptr<SpdyFrame> spdy_response( | 1321 scoped_ptr<SpdyFrame> spdy_response( |
| 1335 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 1322 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 1336 scoped_ptr<SpdyFrame> spdy_data( | 1323 scoped_ptr<SpdyFrame> spdy_data( |
| 1337 spdy_util_.ConstructSpdyBodyFrame(1, "hello", 5, true)); | 1324 spdy_util_.ConstructSpdyBodyFrame(1, "hello", 5, true)); |
| 1338 | 1325 |
| 1339 // HTTP/1.1 versions of the request and response. | 1326 // HTTP/1.1 versions of the request and response. |
| 1340 const char kHttpRequest[] = "GET / HTTP/1.1\r\n" | 1327 const char kHttpRequest[] = |
| 1328 "GET / HTTP/1.1\r\n" |
| 1341 "Host: www.foo.com\r\n" | 1329 "Host: www.foo.com\r\n" |
| 1342 "Connection: keep-alive\r\n\r\n"; | 1330 "Connection: keep-alive\r\n\r\n"; |
| 1343 const char kHttpResponse[] = "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"; | 1331 const char kHttpResponse[] = "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"; |
| 1344 const char kHttpData[] = "hello"; | 1332 const char kHttpData[] = "hello"; |
| 1345 | 1333 |
| 1346 std::vector<MockRead> data1_reads; | 1334 std::vector<MockRead> data1_reads; |
| 1347 std::vector<MockWrite> data1_writes; | 1335 std::vector<MockWrite> data1_writes; |
| 1348 if (write_failure) { | 1336 if (write_failure) { |
| 1349 ASSERT_FALSE(read_failure); | 1337 ASSERT_FALSE(read_failure); |
| 1350 data1_writes.push_back(*write_failure); | 1338 data1_writes.push_back(*write_failure); |
| 1351 data1_reads.push_back(MockRead(ASYNC, OK)); | 1339 data1_reads.push_back(MockRead(ASYNC, OK)); |
| 1352 } else { | 1340 } else { |
| 1353 ASSERT_TRUE(read_failure); | 1341 ASSERT_TRUE(read_failure); |
| 1354 if (use_spdy) { | 1342 if (use_spdy) { |
| 1355 data1_writes.push_back(CreateMockWrite(*spdy_request)); | 1343 data1_writes.push_back(CreateMockWrite(*spdy_request)); |
| 1356 } else { | 1344 } else { |
| 1357 data1_writes.push_back(MockWrite(kHttpRequest)); | 1345 data1_writes.push_back(MockWrite(kHttpRequest)); |
| 1358 } | 1346 } |
| 1359 data1_reads.push_back(*read_failure); | 1347 data1_reads.push_back(*read_failure); |
| 1360 } | 1348 } |
| 1361 | 1349 |
| 1362 StaticSocketDataProvider data1(&data1_reads[0], data1_reads.size(), | 1350 StaticSocketDataProvider data1(&data1_reads[0], |
| 1363 &data1_writes[0], data1_writes.size()); | 1351 data1_reads.size(), |
| 1352 &data1_writes[0], |
| 1353 data1_writes.size()); |
| 1364 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1354 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 1365 | 1355 |
| 1366 std::vector<MockRead> data2_reads; | 1356 std::vector<MockRead> data2_reads; |
| 1367 std::vector<MockWrite> data2_writes; | 1357 std::vector<MockWrite> data2_writes; |
| 1368 | 1358 |
| 1369 if (use_spdy) { | 1359 if (use_spdy) { |
| 1370 data2_writes.push_back(CreateMockWrite(*spdy_request, 0, ASYNC)); | 1360 data2_writes.push_back(CreateMockWrite(*spdy_request, 0, ASYNC)); |
| 1371 | 1361 |
| 1372 data2_reads.push_back(CreateMockRead(*spdy_response, 1, ASYNC)); | 1362 data2_reads.push_back(CreateMockRead(*spdy_response, 1, ASYNC)); |
| 1373 data2_reads.push_back(CreateMockRead(*spdy_data, 2, ASYNC)); | 1363 data2_reads.push_back(CreateMockRead(*spdy_data, 2, ASYNC)); |
| 1374 data2_reads.push_back(MockRead(ASYNC, OK, 3)); | 1364 data2_reads.push_back(MockRead(ASYNC, OK, 3)); |
| 1375 } else { | 1365 } else { |
| 1376 data2_writes.push_back( | 1366 data2_writes.push_back( |
| 1377 MockWrite(ASYNC, kHttpRequest, strlen(kHttpRequest), 0)); | 1367 MockWrite(ASYNC, kHttpRequest, strlen(kHttpRequest), 0)); |
| 1378 | 1368 |
| 1379 data2_reads.push_back( | 1369 data2_reads.push_back( |
| 1380 MockRead(ASYNC, kHttpResponse, strlen(kHttpResponse), 1)); | 1370 MockRead(ASYNC, kHttpResponse, strlen(kHttpResponse), 1)); |
| 1381 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); | 1371 data2_reads.push_back(MockRead(ASYNC, kHttpData, strlen(kHttpData), 2)); |
| 1382 data2_reads.push_back(MockRead(ASYNC, OK, 3)); | 1372 data2_reads.push_back(MockRead(ASYNC, OK, 3)); |
| 1383 } | 1373 } |
| 1384 OrderedSocketData data2(&data2_reads[0], data2_reads.size(), | 1374 OrderedSocketData data2(&data2_reads[0], |
| 1385 &data2_writes[0], data2_writes.size()); | 1375 data2_reads.size(), |
| 1376 &data2_writes[0], |
| 1377 data2_writes.size()); |
| 1386 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1378 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1387 | 1379 |
| 1388 // Preconnect a socket. | 1380 // Preconnect a socket. |
| 1389 net::SSLConfig ssl_config; | 1381 net::SSLConfig ssl_config; |
| 1390 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 1382 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
| 1391 if (session->http_stream_factory()->has_next_protos()) | 1383 if (session->http_stream_factory()->has_next_protos()) |
| 1392 ssl_config.next_protos = session->http_stream_factory()->next_protos(); | 1384 ssl_config.next_protos = session->http_stream_factory()->next_protos(); |
| 1393 session->http_stream_factory()->PreconnectStreams( | 1385 session->http_stream_factory()->PreconnectStreams( |
| 1394 1, request, DEFAULT_PRIORITY, ssl_config, ssl_config); | 1386 1, request, DEFAULT_PRIORITY, ssl_config, ssl_config); |
| 1395 // Wait for the preconnect to complete. | 1387 // Wait for the preconnect to complete. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1406 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1398 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1407 EXPECT_EQ(ERR_IO_PENDING, rv); | 1399 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1408 | 1400 |
| 1409 rv = callback.WaitForResult(); | 1401 rv = callback.WaitForResult(); |
| 1410 EXPECT_EQ(OK, rv); | 1402 EXPECT_EQ(OK, rv); |
| 1411 | 1403 |
| 1412 LoadTimingInfo load_timing_info; | 1404 LoadTimingInfo load_timing_info; |
| 1413 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 1405 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 1414 TestLoadTimingNotReused( | 1406 TestLoadTimingNotReused( |
| 1415 load_timing_info, | 1407 load_timing_info, |
| 1416 CONNECT_TIMING_HAS_DNS_TIMES|CONNECT_TIMING_HAS_SSL_TIMES); | 1408 CONNECT_TIMING_HAS_DNS_TIMES | CONNECT_TIMING_HAS_SSL_TIMES); |
| 1417 | 1409 |
| 1418 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1410 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1419 ASSERT_TRUE(response != NULL); | 1411 ASSERT_TRUE(response != NULL); |
| 1420 | 1412 |
| 1421 EXPECT_TRUE(response->headers.get() != NULL); | 1413 EXPECT_TRUE(response->headers.get() != NULL); |
| 1422 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 1414 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 1423 | 1415 |
| 1424 std::string response_data; | 1416 std::string response_data; |
| 1425 rv = ReadTransaction(trans.get(), &response_data); | 1417 rv = ReadTransaction(trans.get(), &response_data); |
| 1426 EXPECT_EQ(OK, rv); | 1418 EXPECT_EQ(OK, rv); |
| 1427 EXPECT_EQ(kHttpData, response_data); | 1419 EXPECT_EQ(kHttpData, response_data); |
| 1428 } | 1420 } |
| 1429 | 1421 |
| 1430 TEST_P(HttpNetworkTransactionTest, | 1422 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionNotConnectedOnWrite) { |
| 1431 KeepAliveConnectionNotConnectedOnWrite) { | |
| 1432 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1423 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 1433 KeepAliveConnectionResendRequestTest(&write_failure, NULL); | 1424 KeepAliveConnectionResendRequestTest(&write_failure, NULL); |
| 1434 } | 1425 } |
| 1435 | 1426 |
| 1436 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { | 1427 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionReset) { |
| 1437 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); | 1428 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); |
| 1438 KeepAliveConnectionResendRequestTest(NULL, &read_failure); | 1429 KeepAliveConnectionResendRequestTest(NULL, &read_failure); |
| 1439 } | 1430 } |
| 1440 | 1431 |
| 1441 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionEOF) { | 1432 TEST_P(HttpNetworkTransactionTest, KeepAliveConnectionEOF) { |
| 1442 MockRead read_failure(SYNCHRONOUS, OK); // EOF | 1433 MockRead read_failure(SYNCHRONOUS, OK); // EOF |
| 1443 KeepAliveConnectionResendRequestTest(NULL, &read_failure); | 1434 KeepAliveConnectionResendRequestTest(NULL, &read_failure); |
| 1444 } | 1435 } |
| 1445 | 1436 |
| 1446 TEST_P(HttpNetworkTransactionTest, | 1437 TEST_P(HttpNetworkTransactionTest, PreconnectErrorNotConnectedOnWrite) { |
| 1447 PreconnectErrorNotConnectedOnWrite) { | |
| 1448 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1438 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 1449 PreconnectErrorResendRequestTest(&write_failure, NULL, false); | 1439 PreconnectErrorResendRequestTest(&write_failure, NULL, false); |
| 1450 } | 1440 } |
| 1451 | 1441 |
| 1452 TEST_P(HttpNetworkTransactionTest, PreconnectErrorReset) { | 1442 TEST_P(HttpNetworkTransactionTest, PreconnectErrorReset) { |
| 1453 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); | 1443 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); |
| 1454 PreconnectErrorResendRequestTest(NULL, &read_failure, false); | 1444 PreconnectErrorResendRequestTest(NULL, &read_failure, false); |
| 1455 } | 1445 } |
| 1456 | 1446 |
| 1457 TEST_P(HttpNetworkTransactionTest, PreconnectErrorEOF) { | 1447 TEST_P(HttpNetworkTransactionTest, PreconnectErrorEOF) { |
| 1458 MockRead read_failure(SYNCHRONOUS, OK); // EOF | 1448 MockRead read_failure(SYNCHRONOUS, OK); // EOF |
| 1459 PreconnectErrorResendRequestTest(NULL, &read_failure, false); | 1449 PreconnectErrorResendRequestTest(NULL, &read_failure, false); |
| 1460 } | 1450 } |
| 1461 | 1451 |
| 1462 TEST_P(HttpNetworkTransactionTest, PreconnectErrorAsyncEOF) { | 1452 TEST_P(HttpNetworkTransactionTest, PreconnectErrorAsyncEOF) { |
| 1463 MockRead read_failure(ASYNC, OK); // EOF | 1453 MockRead read_failure(ASYNC, OK); // EOF |
| 1464 PreconnectErrorResendRequestTest(NULL, &read_failure, false); | 1454 PreconnectErrorResendRequestTest(NULL, &read_failure, false); |
| 1465 } | 1455 } |
| 1466 | 1456 |
| 1467 TEST_P(HttpNetworkTransactionTest, | 1457 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorNotConnectedOnWrite) { |
| 1468 SpdyPreconnectErrorNotConnectedOnWrite) { | |
| 1469 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 1458 MockWrite write_failure(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
| 1470 PreconnectErrorResendRequestTest(&write_failure, NULL, true); | 1459 PreconnectErrorResendRequestTest(&write_failure, NULL, true); |
| 1471 } | 1460 } |
| 1472 | 1461 |
| 1473 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorReset) { | 1462 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorReset) { |
| 1474 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); | 1463 MockRead read_failure(ASYNC, ERR_CONNECTION_RESET); |
| 1475 PreconnectErrorResendRequestTest(NULL, &read_failure, true); | 1464 PreconnectErrorResendRequestTest(NULL, &read_failure, true); |
| 1476 } | 1465 } |
| 1477 | 1466 |
| 1478 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorEOF) { | 1467 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorEOF) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1489 HttpRequestInfo request; | 1478 HttpRequestInfo request; |
| 1490 request.method = "GET"; | 1479 request.method = "GET"; |
| 1491 request.url = GURL("http://www.google.com/"); | 1480 request.url = GURL("http://www.google.com/"); |
| 1492 request.load_flags = 0; | 1481 request.load_flags = 0; |
| 1493 | 1482 |
| 1494 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1483 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1495 scoped_ptr<HttpTransaction> trans( | 1484 scoped_ptr<HttpTransaction> trans( |
| 1496 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1485 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1497 | 1486 |
| 1498 MockRead data_reads[] = { | 1487 MockRead data_reads[] = { |
| 1499 MockRead(ASYNC, ERR_CONNECTION_RESET), | 1488 MockRead(ASYNC, ERR_CONNECTION_RESET), |
| 1500 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1489 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
| 1501 MockRead("hello world"), | 1490 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 1502 MockRead(SYNCHRONOUS, OK), | |
| 1503 }; | 1491 }; |
| 1504 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1492 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1505 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1493 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1506 | 1494 |
| 1507 TestCompletionCallback callback; | 1495 TestCompletionCallback callback; |
| 1508 | 1496 |
| 1509 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1497 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1510 EXPECT_EQ(ERR_IO_PENDING, rv); | 1498 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1511 | 1499 |
| 1512 rv = callback.WaitForResult(); | 1500 rv = callback.WaitForResult(); |
| 1513 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 1501 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 1514 | 1502 |
| 1515 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1503 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1516 EXPECT_TRUE(response == NULL); | 1504 EXPECT_TRUE(response == NULL); |
| 1517 } | 1505 } |
| 1518 | 1506 |
| 1519 // What do various browsers do when the server closes a non-keepalive | 1507 // What do various browsers do when the server closes a non-keepalive |
| 1520 // connection without sending any response header or body? | 1508 // connection without sending any response header or body? |
| 1521 // | 1509 // |
| 1522 // IE7: error page | 1510 // IE7: error page |
| 1523 // Safari 3.1.2 (Windows): error page | 1511 // Safari 3.1.2 (Windows): error page |
| 1524 // Firefox 3.0.1: blank page | 1512 // Firefox 3.0.1: blank page |
| 1525 // Opera 9.52: after five attempts, blank page | 1513 // Opera 9.52: after five attempts, blank page |
| 1526 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) | 1514 // Us with WinHTTP: error page (ERR_INVALID_RESPONSE) |
| 1527 // Us: error page (EMPTY_RESPONSE) | 1515 // Us: error page (EMPTY_RESPONSE) |
| 1528 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { | 1516 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionEOF) { |
| 1529 MockRead data_reads[] = { | 1517 MockRead data_reads[] = { |
| 1530 MockRead(SYNCHRONOUS, OK), // EOF | 1518 MockRead(SYNCHRONOUS, OK), // EOF |
| 1531 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used | 1519 MockRead("HTTP/1.0 200 OK\r\n\r\n"), // Should not be used |
| 1532 MockRead("hello world"), | 1520 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 1533 MockRead(SYNCHRONOUS, OK), | |
| 1534 }; | 1521 }; |
| 1535 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 1522 SimpleGetHelperResult out = |
| 1536 arraysize(data_reads)); | 1523 SimpleGetHelper(data_reads, arraysize(data_reads)); |
| 1537 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); | 1524 EXPECT_EQ(ERR_EMPTY_RESPONSE, out.rv); |
| 1538 } | 1525 } |
| 1539 | 1526 |
| 1540 // Test that network access can be deferred and resumed. | 1527 // Test that network access can be deferred and resumed. |
| 1541 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { | 1528 TEST_P(HttpNetworkTransactionTest, ThrottleBeforeNetworkStart) { |
| 1542 HttpRequestInfo request; | 1529 HttpRequestInfo request; |
| 1543 request.method = "GET"; | 1530 request.method = "GET"; |
| 1544 request.url = GURL("http://www.google.com/"); | 1531 request.url = GURL("http://www.google.com/"); |
| 1545 request.load_flags = 0; | 1532 request.load_flags = 0; |
| 1546 | 1533 |
| 1547 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1534 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1548 scoped_ptr<HttpTransaction> trans( | 1535 scoped_ptr<HttpTransaction> trans( |
| 1549 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1536 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1550 | 1537 |
| 1551 // Defer on OnBeforeNetworkStart. | 1538 // Defer on OnBeforeNetworkStart. |
| 1552 BeforeNetworkStartHandler net_start_handler(true); // defer | 1539 BeforeNetworkStartHandler net_start_handler(true); // defer |
| 1553 trans->SetBeforeNetworkStartCallback( | 1540 trans->SetBeforeNetworkStartCallback( |
| 1554 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, | 1541 base::Bind(&BeforeNetworkStartHandler::OnBeforeNetworkStart, |
| 1555 base::Unretained(&net_start_handler))); | 1542 base::Unretained(&net_start_handler))); |
| 1556 | 1543 |
| 1557 MockRead data_reads[] = { | 1544 MockRead data_reads[] = { |
| 1558 MockRead("HTTP/1.0 200 OK\r\n"), | 1545 MockRead("HTTP/1.0 200 OK\r\n"), MockRead("Content-Length: 5\r\n\r\n"), |
| 1559 MockRead("Content-Length: 5\r\n\r\n"), | 1546 MockRead("hello"), MockRead(SYNCHRONOUS, 0), |
| 1560 MockRead("hello"), | |
| 1561 MockRead(SYNCHRONOUS, 0), | |
| 1562 }; | 1547 }; |
| 1563 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1548 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1564 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1549 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1565 | 1550 |
| 1566 TestCompletionCallback callback; | 1551 TestCompletionCallback callback; |
| 1567 | 1552 |
| 1568 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1553 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1569 EXPECT_EQ(ERR_IO_PENDING, rv); | 1554 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1570 base::MessageLoop::current()->RunUntilIdle(); | 1555 base::MessageLoop::current()->RunUntilIdle(); |
| 1571 | 1556 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1624 HttpRequestInfo request; | 1609 HttpRequestInfo request; |
| 1625 request.method = "GET"; | 1610 request.method = "GET"; |
| 1626 request.url = GURL("http://www.google.com/"); | 1611 request.url = GURL("http://www.google.com/"); |
| 1627 request.load_flags = 0; | 1612 request.load_flags = 0; |
| 1628 | 1613 |
| 1629 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1614 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1630 scoped_ptr<HttpTransaction> trans( | 1615 scoped_ptr<HttpTransaction> trans( |
| 1631 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1616 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1632 | 1617 |
| 1633 MockRead data_reads[] = { | 1618 MockRead data_reads[] = { |
| 1634 MockRead("HTTP/1.0 200 OK\r\n"), | 1619 MockRead("HTTP/1.0 200 OK\r\n"), |
| 1635 MockRead("Connection: keep-alive\r\n"), | 1620 MockRead("Connection: keep-alive\r\n"), |
| 1636 MockRead("Content-Length: 100\r\n\r\n"), | 1621 MockRead("Content-Length: 100\r\n\r\n"), |
| 1637 MockRead("hello"), | 1622 MockRead("hello"), |
| 1638 MockRead(SYNCHRONOUS, 0), | 1623 MockRead(SYNCHRONOUS, 0), |
| 1639 }; | 1624 }; |
| 1640 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1625 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1641 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1626 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1642 | 1627 |
| 1643 TestCompletionCallback callback; | 1628 TestCompletionCallback callback; |
| 1644 | 1629 |
| 1645 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1630 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1646 EXPECT_EQ(ERR_IO_PENDING, rv); | 1631 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1647 | 1632 |
| 1648 rv = callback.WaitForResult(); | 1633 rv = callback.WaitForResult(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1665 HttpRequestInfo request; | 1650 HttpRequestInfo request; |
| 1666 request.method = "GET"; | 1651 request.method = "GET"; |
| 1667 request.url = GURL("http://www.google.com/"); | 1652 request.url = GURL("http://www.google.com/"); |
| 1668 request.load_flags = 0; | 1653 request.load_flags = 0; |
| 1669 | 1654 |
| 1670 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1655 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1671 scoped_ptr<HttpTransaction> trans( | 1656 scoped_ptr<HttpTransaction> trans( |
| 1672 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 1657 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 1673 | 1658 |
| 1674 MockRead data_reads[] = { | 1659 MockRead data_reads[] = { |
| 1675 MockRead("HTTP/1.0 200 OK\r\n"), | 1660 MockRead("HTTP/1.0 200 OK\r\n"), MockRead("Connection: keep-alive\r\n"), |
| 1676 MockRead("Connection: keep-alive\r\n"), | 1661 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, 0), |
| 1677 MockRead("Content-Length: 100\r\n\r\n"), | |
| 1678 MockRead(SYNCHRONOUS, 0), | |
| 1679 }; | 1662 }; |
| 1680 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 1663 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 1681 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1664 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1682 | 1665 |
| 1683 TestCompletionCallback callback; | 1666 TestCompletionCallback callback; |
| 1684 | 1667 |
| 1685 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1668 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1686 EXPECT_EQ(ERR_IO_PENDING, rv); | 1669 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1687 | 1670 |
| 1688 rv = callback.WaitForResult(); | 1671 rv = callback.WaitForResult(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1708 request.load_flags = 0; | 1691 request.load_flags = 0; |
| 1709 | 1692 |
| 1710 CapturingNetLog net_log; | 1693 CapturingNetLog net_log; |
| 1711 session_deps_.net_log = &net_log; | 1694 session_deps_.net_log = &net_log; |
| 1712 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1695 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1713 | 1696 |
| 1714 // Note that because all these reads happen in the same | 1697 // Note that because all these reads happen in the same |
| 1715 // StaticSocketDataProvider, it shows that the same socket is being reused for | 1698 // StaticSocketDataProvider, it shows that the same socket is being reused for |
| 1716 // all transactions. | 1699 // all transactions. |
| 1717 MockRead data1_reads[] = { | 1700 MockRead data1_reads[] = { |
| 1718 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), | 1701 MockRead("HTTP/1.1 204 No Content\r\n\r\n"), |
| 1719 MockRead("HTTP/1.1 205 Reset Content\r\n\r\n"), | 1702 MockRead("HTTP/1.1 205 Reset Content\r\n\r\n"), |
| 1720 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), | 1703 MockRead("HTTP/1.1 304 Not Modified\r\n\r\n"), |
| 1721 MockRead("HTTP/1.1 302 Found\r\n" | 1704 MockRead( |
| 1722 "Content-Length: 0\r\n\r\n"), | 1705 "HTTP/1.1 302 Found\r\n" |
| 1723 MockRead("HTTP/1.1 302 Found\r\n" | 1706 "Content-Length: 0\r\n\r\n"), |
| 1724 "Content-Length: 5\r\n\r\n" | 1707 MockRead( |
| 1725 "hello"), | 1708 "HTTP/1.1 302 Found\r\n" |
| 1726 MockRead("HTTP/1.1 301 Moved Permanently\r\n" | 1709 "Content-Length: 5\r\n\r\n" |
| 1727 "Content-Length: 0\r\n\r\n"), | 1710 "hello"), |
| 1728 MockRead("HTTP/1.1 301 Moved Permanently\r\n" | 1711 MockRead( |
| 1729 "Content-Length: 5\r\n\r\n" | 1712 "HTTP/1.1 301 Moved Permanently\r\n" |
| 1730 "hello"), | 1713 "Content-Length: 0\r\n\r\n"), |
| 1731 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 1714 MockRead( |
| 1732 MockRead("hello"), | 1715 "HTTP/1.1 301 Moved Permanently\r\n" |
| 1716 "Content-Length: 5\r\n\r\n" |
| 1717 "hello"), |
| 1718 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 1719 MockRead("hello"), |
| 1733 }; | 1720 }; |
| 1734 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), NULL, 0); | 1721 StaticSocketDataProvider data1(data1_reads, arraysize(data1_reads), NULL, 0); |
| 1735 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1722 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 1736 | 1723 |
| 1737 MockRead data2_reads[] = { | 1724 MockRead data2_reads[] = { |
| 1738 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 1725 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 1739 }; | 1726 }; |
| 1740 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); | 1727 StaticSocketDataProvider data2(data2_reads, arraysize(data2_reads), NULL, 0); |
| 1741 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1728 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1742 | 1729 |
| 1743 const int kNumUnreadBodies = arraysize(data1_reads) - 2; | 1730 const int kNumUnreadBodies = arraysize(data1_reads) - 2; |
| 1744 std::string response_lines[kNumUnreadBodies]; | 1731 std::string response_lines[kNumUnreadBodies]; |
| 1745 | 1732 |
| 1746 uint32 first_socket_log_id = NetLog::Source::kInvalidId; | 1733 uint32 first_socket_log_id = NetLog::Source::kInvalidId; |
| 1747 for (size_t i = 0; i < arraysize(data1_reads) - 2; ++i) { | 1734 for (size_t i = 0; i < arraysize(data1_reads) - 2; ++i) { |
| 1748 TestCompletionCallback callback; | 1735 TestCompletionCallback callback; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1769 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1756 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1770 ASSERT_TRUE(response != NULL); | 1757 ASSERT_TRUE(response != NULL); |
| 1771 | 1758 |
| 1772 ASSERT_TRUE(response->headers.get() != NULL); | 1759 ASSERT_TRUE(response->headers.get() != NULL); |
| 1773 response_lines[i] = response->headers->GetStatusLine(); | 1760 response_lines[i] = response->headers->GetStatusLine(); |
| 1774 | 1761 |
| 1775 // We intentionally don't read the response bodies. | 1762 // We intentionally don't read the response bodies. |
| 1776 } | 1763 } |
| 1777 | 1764 |
| 1778 const char* const kStatusLines[] = { | 1765 const char* const kStatusLines[] = { |
| 1779 "HTTP/1.1 204 No Content", | 1766 "HTTP/1.1 204 No Content", "HTTP/1.1 205 Reset Content", |
| 1780 "HTTP/1.1 205 Reset Content", | 1767 "HTTP/1.1 304 Not Modified", "HTTP/1.1 302 Found", |
| 1781 "HTTP/1.1 304 Not Modified", | 1768 "HTTP/1.1 302 Found", "HTTP/1.1 301 Moved Permanently", |
| 1782 "HTTP/1.1 302 Found", | 1769 "HTTP/1.1 301 Moved Permanently", |
| 1783 "HTTP/1.1 302 Found", | |
| 1784 "HTTP/1.1 301 Moved Permanently", | |
| 1785 "HTTP/1.1 301 Moved Permanently", | |
| 1786 }; | 1770 }; |
| 1787 | 1771 |
| 1788 COMPILE_ASSERT(kNumUnreadBodies == arraysize(kStatusLines), | 1772 COMPILE_ASSERT(kNumUnreadBodies == arraysize(kStatusLines), |
| 1789 forgot_to_update_kStatusLines); | 1773 forgot_to_update_kStatusLines); |
| 1790 | 1774 |
| 1791 for (int i = 0; i < kNumUnreadBodies; ++i) | 1775 for (int i = 0; i < kNumUnreadBodies; ++i) |
| 1792 EXPECT_EQ(kStatusLines[i], response_lines[i]); | 1776 EXPECT_EQ(kStatusLines[i], response_lines[i]); |
| 1793 | 1777 |
| 1794 TestCompletionCallback callback; | 1778 TestCompletionCallback callback; |
| 1795 scoped_ptr<HttpTransaction> trans( | 1779 scoped_ptr<HttpTransaction> trans( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1816 request.url = GURL("http://www.google.com/"); | 1800 request.url = GURL("http://www.google.com/"); |
| 1817 request.load_flags = 0; | 1801 request.load_flags = 0; |
| 1818 | 1802 |
| 1819 CapturingNetLog log; | 1803 CapturingNetLog log; |
| 1820 session_deps_.net_log = &log; | 1804 session_deps_.net_log = &log; |
| 1821 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1805 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1822 scoped_ptr<HttpTransaction> trans( | 1806 scoped_ptr<HttpTransaction> trans( |
| 1823 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1807 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1824 | 1808 |
| 1825 MockWrite data_writes1[] = { | 1809 MockWrite data_writes1[] = { |
| 1826 MockWrite("GET / HTTP/1.1\r\n" | 1810 MockWrite( |
| 1827 "Host: www.google.com\r\n" | 1811 "GET / HTTP/1.1\r\n" |
| 1828 "Connection: keep-alive\r\n\r\n"), | 1812 "Host: www.google.com\r\n" |
| 1813 "Connection: keep-alive\r\n\r\n"), |
| 1829 }; | 1814 }; |
| 1830 | 1815 |
| 1831 MockRead data_reads1[] = { | 1816 MockRead data_reads1[] = { |
| 1832 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 1817 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 1833 // Give a couple authenticate options (only the middle one is actually | 1818 // Give a couple authenticate options (only the middle one is actually |
| 1834 // supported). | 1819 // supported). |
| 1835 MockRead("WWW-Authenticate: Basic invalid\r\n"), // Malformed. | 1820 MockRead("WWW-Authenticate: Basic invalid\r\n"), // Malformed. |
| 1836 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1821 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 1837 MockRead("WWW-Authenticate: UNSUPPORTED realm=\"FOO\"\r\n"), | 1822 MockRead("WWW-Authenticate: UNSUPPORTED realm=\"FOO\"\r\n"), |
| 1838 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1823 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 1839 // Large content-length -- won't matter, as connection will be reset. | 1824 // Large content-length -- won't matter, as connection will be reset. |
| 1840 MockRead("Content-Length: 10000\r\n\r\n"), | 1825 MockRead("Content-Length: 10000\r\n\r\n"), |
| 1841 MockRead(SYNCHRONOUS, ERR_FAILED), | 1826 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 1842 }; | 1827 }; |
| 1843 | 1828 |
| 1844 // After calling trans->RestartWithAuth(), this is the request we should | 1829 // After calling trans->RestartWithAuth(), this is the request we should |
| 1845 // be issuing -- the final header line contains the credentials. | 1830 // be issuing -- the final header line contains the credentials. |
| 1846 MockWrite data_writes2[] = { | 1831 MockWrite data_writes2[] = { |
| 1847 MockWrite("GET / HTTP/1.1\r\n" | 1832 MockWrite( |
| 1848 "Host: www.google.com\r\n" | 1833 "GET / HTTP/1.1\r\n" |
| 1849 "Connection: keep-alive\r\n" | 1834 "Host: www.google.com\r\n" |
| 1850 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 1835 "Connection: keep-alive\r\n" |
| 1836 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 1851 }; | 1837 }; |
| 1852 | 1838 |
| 1853 // Lastly, the server responds with the actual content. | 1839 // Lastly, the server responds with the actual content. |
| 1854 MockRead data_reads2[] = { | 1840 MockRead data_reads2[] = { |
| 1855 MockRead("HTTP/1.0 200 OK\r\n"), | 1841 MockRead("HTTP/1.0 200 OK\r\n"), |
| 1856 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1842 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 1857 MockRead("Content-Length: 100\r\n\r\n"), | 1843 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 1858 MockRead(SYNCHRONOUS, OK), | |
| 1859 }; | 1844 }; |
| 1860 | 1845 |
| 1861 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1846 StaticSocketDataProvider data1(data_reads1, |
| 1862 data_writes1, arraysize(data_writes1)); | 1847 arraysize(data_reads1), |
| 1863 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1848 data_writes1, |
| 1864 data_writes2, arraysize(data_writes2)); | 1849 arraysize(data_writes1)); |
| 1850 StaticSocketDataProvider data2(data_reads2, |
| 1851 arraysize(data_reads2), |
| 1852 data_writes2, |
| 1853 arraysize(data_writes2)); |
| 1865 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 1854 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 1866 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 1855 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 1867 | 1856 |
| 1868 TestCompletionCallback callback1; | 1857 TestCompletionCallback callback1; |
| 1869 | 1858 |
| 1870 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 1859 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 1871 EXPECT_EQ(ERR_IO_PENDING, rv); | 1860 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1872 | 1861 |
| 1873 rv = callback1.WaitForResult(); | 1862 rv = callback1.WaitForResult(); |
| 1874 EXPECT_EQ(OK, rv); | 1863 EXPECT_EQ(OK, rv); |
| 1875 | 1864 |
| 1876 LoadTimingInfo load_timing_info1; | 1865 LoadTimingInfo load_timing_info1; |
| 1877 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 1866 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
| 1878 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 1867 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
| 1879 | 1868 |
| 1880 int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); | 1869 int64 reads_size1 = ReadsSize(data_reads1, arraysize(data_reads1)); |
| 1881 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); | 1870 EXPECT_EQ(reads_size1, trans->GetTotalReceivedBytes()); |
| 1882 | 1871 |
| 1883 const HttpResponseInfo* response = trans->GetResponseInfo(); | 1872 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 1884 ASSERT_TRUE(response != NULL); | 1873 ASSERT_TRUE(response != NULL); |
| 1885 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 1874 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 1886 | 1875 |
| 1887 TestCompletionCallback callback2; | 1876 TestCompletionCallback callback2; |
| 1888 | 1877 |
| 1889 rv = trans->RestartWithAuth( | 1878 rv = |
| 1890 AuthCredentials(kFoo, kBar), callback2.callback()); | 1879 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 1891 EXPECT_EQ(ERR_IO_PENDING, rv); | 1880 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1892 | 1881 |
| 1893 rv = callback2.WaitForResult(); | 1882 rv = callback2.WaitForResult(); |
| 1894 EXPECT_EQ(OK, rv); | 1883 EXPECT_EQ(OK, rv); |
| 1895 | 1884 |
| 1896 LoadTimingInfo load_timing_info2; | 1885 LoadTimingInfo load_timing_info2; |
| 1897 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 1886 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
| 1898 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); | 1887 TestLoadTimingNotReused(load_timing_info2, CONNECT_TIMING_HAS_DNS_TIMES); |
| 1899 // The load timing after restart should have a new socket ID, and times after | 1888 // The load timing after restart should have a new socket ID, and times after |
| 1900 // those of the first load timing. | 1889 // those of the first load timing. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1915 HttpRequestInfo request; | 1904 HttpRequestInfo request; |
| 1916 request.method = "GET"; | 1905 request.method = "GET"; |
| 1917 request.url = GURL("http://www.google.com/"); | 1906 request.url = GURL("http://www.google.com/"); |
| 1918 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 1907 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
| 1919 | 1908 |
| 1920 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1909 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1921 scoped_ptr<HttpTransaction> trans( | 1910 scoped_ptr<HttpTransaction> trans( |
| 1922 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 1911 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 1923 | 1912 |
| 1924 MockWrite data_writes[] = { | 1913 MockWrite data_writes[] = { |
| 1925 MockWrite("GET / HTTP/1.1\r\n" | 1914 MockWrite( |
| 1926 "Host: www.google.com\r\n" | 1915 "GET / HTTP/1.1\r\n" |
| 1927 "Connection: keep-alive\r\n\r\n"), | 1916 "Host: www.google.com\r\n" |
| 1917 "Connection: keep-alive\r\n\r\n"), |
| 1928 }; | 1918 }; |
| 1929 | 1919 |
| 1930 MockRead data_reads[] = { | 1920 MockRead data_reads[] = { |
| 1931 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 1921 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 1932 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1922 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 1933 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1923 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 1934 // Large content-length -- won't matter, as connection will be reset. | 1924 // Large content-length -- won't matter, as connection will be reset. |
| 1935 MockRead("Content-Length: 10000\r\n\r\n"), | 1925 MockRead("Content-Length: 10000\r\n\r\n"), |
| 1936 MockRead(SYNCHRONOUS, ERR_FAILED), | 1926 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 1937 }; | 1927 }; |
| 1938 | 1928 |
| 1939 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 1929 StaticSocketDataProvider data( |
| 1940 data_writes, arraysize(data_writes)); | 1930 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 1941 session_deps_.socket_factory->AddSocketDataProvider(&data); | 1931 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1942 TestCompletionCallback callback; | 1932 TestCompletionCallback callback; |
| 1943 | 1933 |
| 1944 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 1934 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 1945 EXPECT_EQ(ERR_IO_PENDING, rv); | 1935 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1946 | 1936 |
| 1947 rv = callback.WaitForResult(); | 1937 rv = callback.WaitForResult(); |
| 1948 EXPECT_EQ(0, rv); | 1938 EXPECT_EQ(0, rv); |
| 1949 | 1939 |
| 1950 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); | 1940 int64 reads_size = ReadsSize(data_reads, arraysize(data_reads)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1961 HttpRequestInfo request; | 1951 HttpRequestInfo request; |
| 1962 request.method = "GET"; | 1952 request.method = "GET"; |
| 1963 request.url = GURL("http://www.google.com/"); | 1953 request.url = GURL("http://www.google.com/"); |
| 1964 request.load_flags = 0; | 1954 request.load_flags = 0; |
| 1965 | 1955 |
| 1966 CapturingNetLog log; | 1956 CapturingNetLog log; |
| 1967 session_deps_.net_log = &log; | 1957 session_deps_.net_log = &log; |
| 1968 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 1958 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 1969 | 1959 |
| 1970 MockWrite data_writes1[] = { | 1960 MockWrite data_writes1[] = { |
| 1971 MockWrite("GET / HTTP/1.1\r\n" | 1961 MockWrite( |
| 1972 "Host: www.google.com\r\n" | 1962 "GET / HTTP/1.1\r\n" |
| 1973 "Connection: keep-alive\r\n\r\n"), | 1963 "Host: www.google.com\r\n" |
| 1964 "Connection: keep-alive\r\n\r\n"), |
| 1974 | 1965 |
| 1975 // After calling trans->RestartWithAuth(), this is the request we should | 1966 // After calling trans->RestartWithAuth(), this is the request we should |
| 1976 // be issuing -- the final header line contains the credentials. | 1967 // be issuing -- the final header line contains the credentials. |
| 1977 MockWrite("GET / HTTP/1.1\r\n" | 1968 MockWrite( |
| 1978 "Host: www.google.com\r\n" | 1969 "GET / HTTP/1.1\r\n" |
| 1979 "Connection: keep-alive\r\n" | 1970 "Host: www.google.com\r\n" |
| 1980 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 1971 "Connection: keep-alive\r\n" |
| 1972 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 1981 }; | 1973 }; |
| 1982 | 1974 |
| 1983 MockRead data_reads1[] = { | 1975 MockRead data_reads1[] = { |
| 1984 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 1976 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
| 1985 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 1977 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 1986 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1978 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 1987 MockRead("Content-Length: 14\r\n\r\n"), | 1979 MockRead("Content-Length: 14\r\n\r\n"), |
| 1988 MockRead("Unauthorized\r\n"), | 1980 MockRead("Unauthorized\r\n"), |
| 1989 | 1981 |
| 1990 // Lastly, the server responds with the actual content. | 1982 // Lastly, the server responds with the actual content. |
| 1991 MockRead("HTTP/1.1 200 OK\r\n"), | 1983 MockRead("HTTP/1.1 200 OK\r\n"), |
| 1992 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 1984 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 1993 MockRead("Content-Length: 5\r\n\r\n"), | 1985 MockRead("Content-Length: 5\r\n\r\n"), |
| 1994 MockRead("Hello"), | 1986 MockRead("Hello"), |
| 1995 }; | 1987 }; |
| 1996 | 1988 |
| 1997 // If there is a regression where we disconnect a Keep-Alive | 1989 // If there is a regression where we disconnect a Keep-Alive |
| 1998 // connection during an auth roundtrip, we'll end up reading this. | 1990 // connection during an auth roundtrip, we'll end up reading this. |
| 1999 MockRead data_reads2[] = { | 1991 MockRead data_reads2[] = { |
| 2000 MockRead(SYNCHRONOUS, ERR_FAILED), | 1992 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 2001 }; | 1993 }; |
| 2002 | 1994 |
| 2003 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 1995 StaticSocketDataProvider data1(data_reads1, |
| 2004 data_writes1, arraysize(data_writes1)); | 1996 arraysize(data_reads1), |
| 2005 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 1997 data_writes1, |
| 2006 NULL, 0); | 1998 arraysize(data_writes1)); |
| 1999 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 2007 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2000 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2008 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2001 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2009 | 2002 |
| 2010 TestCompletionCallback callback1; | 2003 TestCompletionCallback callback1; |
| 2011 | 2004 |
| 2012 scoped_ptr<HttpTransaction> trans( | 2005 scoped_ptr<HttpTransaction> trans( |
| 2013 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2006 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2014 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2007 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2015 EXPECT_EQ(ERR_IO_PENDING, rv); | 2008 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2016 | 2009 |
| 2017 rv = callback1.WaitForResult(); | 2010 rv = callback1.WaitForResult(); |
| 2018 EXPECT_EQ(OK, rv); | 2011 EXPECT_EQ(OK, rv); |
| 2019 | 2012 |
| 2020 LoadTimingInfo load_timing_info1; | 2013 LoadTimingInfo load_timing_info1; |
| 2021 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); | 2014 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info1)); |
| 2022 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); | 2015 TestLoadTimingNotReused(load_timing_info1, CONNECT_TIMING_HAS_DNS_TIMES); |
| 2023 | 2016 |
| 2024 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2017 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2025 ASSERT_TRUE(response != NULL); | 2018 ASSERT_TRUE(response != NULL); |
| 2026 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2019 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2027 | 2020 |
| 2028 TestCompletionCallback callback2; | 2021 TestCompletionCallback callback2; |
| 2029 | 2022 |
| 2030 rv = trans->RestartWithAuth( | 2023 rv = |
| 2031 AuthCredentials(kFoo, kBar), callback2.callback()); | 2024 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2032 EXPECT_EQ(ERR_IO_PENDING, rv); | 2025 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2033 | 2026 |
| 2034 rv = callback2.WaitForResult(); | 2027 rv = callback2.WaitForResult(); |
| 2035 EXPECT_EQ(OK, rv); | 2028 EXPECT_EQ(OK, rv); |
| 2036 | 2029 |
| 2037 LoadTimingInfo load_timing_info2; | 2030 LoadTimingInfo load_timing_info2; |
| 2038 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); | 2031 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info2)); |
| 2039 TestLoadTimingReused(load_timing_info2); | 2032 TestLoadTimingReused(load_timing_info2); |
| 2040 // The load timing after restart should have the same socket ID, and times | 2033 // The load timing after restart should have the same socket ID, and times |
| 2041 // those of the first load timing. | 2034 // those of the first load timing. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2059 // connection and with no response body to drain. | 2052 // connection and with no response body to drain. |
| 2060 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { | 2053 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveNoBody) { |
| 2061 HttpRequestInfo request; | 2054 HttpRequestInfo request; |
| 2062 request.method = "GET"; | 2055 request.method = "GET"; |
| 2063 request.url = GURL("http://www.google.com/"); | 2056 request.url = GURL("http://www.google.com/"); |
| 2064 request.load_flags = 0; | 2057 request.load_flags = 0; |
| 2065 | 2058 |
| 2066 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2059 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2067 | 2060 |
| 2068 MockWrite data_writes1[] = { | 2061 MockWrite data_writes1[] = { |
| 2069 MockWrite("GET / HTTP/1.1\r\n" | 2062 MockWrite( |
| 2070 "Host: www.google.com\r\n" | 2063 "GET / HTTP/1.1\r\n" |
| 2071 "Connection: keep-alive\r\n\r\n"), | 2064 "Host: www.google.com\r\n" |
| 2065 "Connection: keep-alive\r\n\r\n"), |
| 2072 | 2066 |
| 2073 // After calling trans->RestartWithAuth(), this is the request we should | 2067 // After calling trans->RestartWithAuth(), this is the request we should |
| 2074 // be issuing -- the final header line contains the credentials. | 2068 // be issuing -- the final header line contains the credentials. |
| 2075 MockWrite("GET / HTTP/1.1\r\n" | 2069 MockWrite( |
| 2076 "Host: www.google.com\r\n" | 2070 "GET / HTTP/1.1\r\n" |
| 2077 "Connection: keep-alive\r\n" | 2071 "Host: www.google.com\r\n" |
| 2078 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 2072 "Connection: keep-alive\r\n" |
| 2073 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 2079 }; | 2074 }; |
| 2080 | 2075 |
| 2081 MockRead data_reads1[] = { | 2076 MockRead data_reads1[] = { |
| 2082 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 2077 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
| 2083 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2078 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2084 MockRead("Content-Length: 0\r\n\r\n"), // No response body. | 2079 MockRead("Content-Length: 0\r\n\r\n"), // No response body. |
| 2085 | 2080 |
| 2086 // Lastly, the server responds with the actual content. | 2081 // Lastly, the server responds with the actual content. |
| 2087 MockRead("HTTP/1.1 200 OK\r\n"), | 2082 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2088 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2083 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2089 MockRead("Content-Length: 5\r\n\r\n"), | 2084 MockRead("Content-Length: 5\r\n\r\n"), |
| 2090 MockRead("hello"), | 2085 MockRead("hello"), |
| 2091 }; | 2086 }; |
| 2092 | 2087 |
| 2093 // An incorrect reconnect would cause this to be read. | 2088 // An incorrect reconnect would cause this to be read. |
| 2094 MockRead data_reads2[] = { | 2089 MockRead data_reads2[] = { |
| 2095 MockRead(SYNCHRONOUS, ERR_FAILED), | 2090 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 2096 }; | 2091 }; |
| 2097 | 2092 |
| 2098 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2093 StaticSocketDataProvider data1(data_reads1, |
| 2099 data_writes1, arraysize(data_writes1)); | 2094 arraysize(data_reads1), |
| 2100 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2095 data_writes1, |
| 2101 NULL, 0); | 2096 arraysize(data_writes1)); |
| 2097 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 2102 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2098 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2103 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2099 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2104 | 2100 |
| 2105 TestCompletionCallback callback1; | 2101 TestCompletionCallback callback1; |
| 2106 | 2102 |
| 2107 scoped_ptr<HttpTransaction> trans( | 2103 scoped_ptr<HttpTransaction> trans( |
| 2108 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2104 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2109 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2105 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2110 EXPECT_EQ(ERR_IO_PENDING, rv); | 2106 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2111 | 2107 |
| 2112 rv = callback1.WaitForResult(); | 2108 rv = callback1.WaitForResult(); |
| 2113 EXPECT_EQ(OK, rv); | 2109 EXPECT_EQ(OK, rv); |
| 2114 | 2110 |
| 2115 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2111 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2116 ASSERT_TRUE(response != NULL); | 2112 ASSERT_TRUE(response != NULL); |
| 2117 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2113 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2118 | 2114 |
| 2119 TestCompletionCallback callback2; | 2115 TestCompletionCallback callback2; |
| 2120 | 2116 |
| 2121 rv = trans->RestartWithAuth( | 2117 rv = |
| 2122 AuthCredentials(kFoo, kBar), callback2.callback()); | 2118 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2123 EXPECT_EQ(ERR_IO_PENDING, rv); | 2119 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2124 | 2120 |
| 2125 rv = callback2.WaitForResult(); | 2121 rv = callback2.WaitForResult(); |
| 2126 EXPECT_EQ(OK, rv); | 2122 EXPECT_EQ(OK, rv); |
| 2127 | 2123 |
| 2128 response = trans->GetResponseInfo(); | 2124 response = trans->GetResponseInfo(); |
| 2129 ASSERT_TRUE(response != NULL); | 2125 ASSERT_TRUE(response != NULL); |
| 2130 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2126 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 2131 EXPECT_EQ(5, response->headers->GetContentLength()); | 2127 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2132 } | 2128 } |
| 2133 | 2129 |
| 2134 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2130 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
| 2135 // connection and with a large response body to drain. | 2131 // connection and with a large response body to drain. |
| 2136 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { | 2132 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveLargeBody) { |
| 2137 HttpRequestInfo request; | 2133 HttpRequestInfo request; |
| 2138 request.method = "GET"; | 2134 request.method = "GET"; |
| 2139 request.url = GURL("http://www.google.com/"); | 2135 request.url = GURL("http://www.google.com/"); |
| 2140 request.load_flags = 0; | 2136 request.load_flags = 0; |
| 2141 | 2137 |
| 2142 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2138 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2143 | 2139 |
| 2144 MockWrite data_writes1[] = { | 2140 MockWrite data_writes1[] = { |
| 2145 MockWrite("GET / HTTP/1.1\r\n" | 2141 MockWrite( |
| 2146 "Host: www.google.com\r\n" | 2142 "GET / HTTP/1.1\r\n" |
| 2147 "Connection: keep-alive\r\n\r\n"), | 2143 "Host: www.google.com\r\n" |
| 2144 "Connection: keep-alive\r\n\r\n"), |
| 2148 | 2145 |
| 2149 // After calling trans->RestartWithAuth(), this is the request we should | 2146 // After calling trans->RestartWithAuth(), this is the request we should |
| 2150 // be issuing -- the final header line contains the credentials. | 2147 // be issuing -- the final header line contains the credentials. |
| 2151 MockWrite("GET / HTTP/1.1\r\n" | 2148 MockWrite( |
| 2152 "Host: www.google.com\r\n" | 2149 "GET / HTTP/1.1\r\n" |
| 2153 "Connection: keep-alive\r\n" | 2150 "Host: www.google.com\r\n" |
| 2154 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 2151 "Connection: keep-alive\r\n" |
| 2152 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 2155 }; | 2153 }; |
| 2156 | 2154 |
| 2157 // Respond with 5 kb of response body. | 2155 // Respond with 5 kb of response body. |
| 2158 std::string large_body_string("Unauthorized"); | 2156 std::string large_body_string("Unauthorized"); |
| 2159 large_body_string.append(5 * 1024, ' '); | 2157 large_body_string.append(5 * 1024, ' '); |
| 2160 large_body_string.append("\r\n"); | 2158 large_body_string.append("\r\n"); |
| 2161 | 2159 |
| 2162 MockRead data_reads1[] = { | 2160 MockRead data_reads1[] = { |
| 2163 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 2161 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
| 2164 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2162 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2165 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2163 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2166 // 5134 = 12 + 5 * 1024 + 2 | 2164 // 5134 = 12 + 5 * 1024 + 2 |
| 2167 MockRead("Content-Length: 5134\r\n\r\n"), | 2165 MockRead("Content-Length: 5134\r\n\r\n"), |
| 2168 MockRead(ASYNC, large_body_string.data(), large_body_string.size()), | 2166 MockRead(ASYNC, large_body_string.data(), large_body_string.size()), |
| 2169 | 2167 |
| 2170 // Lastly, the server responds with the actual content. | 2168 // Lastly, the server responds with the actual content. |
| 2171 MockRead("HTTP/1.1 200 OK\r\n"), | 2169 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2172 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2170 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2173 MockRead("Content-Length: 5\r\n\r\n"), | 2171 MockRead("Content-Length: 5\r\n\r\n"), |
| 2174 MockRead("hello"), | 2172 MockRead("hello"), |
| 2175 }; | 2173 }; |
| 2176 | 2174 |
| 2177 // An incorrect reconnect would cause this to be read. | 2175 // An incorrect reconnect would cause this to be read. |
| 2178 MockRead data_reads2[] = { | 2176 MockRead data_reads2[] = { |
| 2179 MockRead(SYNCHRONOUS, ERR_FAILED), | 2177 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 2180 }; | 2178 }; |
| 2181 | 2179 |
| 2182 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2180 StaticSocketDataProvider data1(data_reads1, |
| 2183 data_writes1, arraysize(data_writes1)); | 2181 arraysize(data_reads1), |
| 2184 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2182 data_writes1, |
| 2185 NULL, 0); | 2183 arraysize(data_writes1)); |
| 2184 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 2186 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2185 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2187 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2186 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2188 | 2187 |
| 2189 TestCompletionCallback callback1; | 2188 TestCompletionCallback callback1; |
| 2190 | 2189 |
| 2191 scoped_ptr<HttpTransaction> trans( | 2190 scoped_ptr<HttpTransaction> trans( |
| 2192 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2191 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2193 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2192 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2194 EXPECT_EQ(ERR_IO_PENDING, rv); | 2193 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2195 | 2194 |
| 2196 rv = callback1.WaitForResult(); | 2195 rv = callback1.WaitForResult(); |
| 2197 EXPECT_EQ(OK, rv); | 2196 EXPECT_EQ(OK, rv); |
| 2198 | 2197 |
| 2199 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2198 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2200 ASSERT_TRUE(response != NULL); | 2199 ASSERT_TRUE(response != NULL); |
| 2201 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2200 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2202 | 2201 |
| 2203 TestCompletionCallback callback2; | 2202 TestCompletionCallback callback2; |
| 2204 | 2203 |
| 2205 rv = trans->RestartWithAuth( | 2204 rv = |
| 2206 AuthCredentials(kFoo, kBar), callback2.callback()); | 2205 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2207 EXPECT_EQ(ERR_IO_PENDING, rv); | 2206 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2208 | 2207 |
| 2209 rv = callback2.WaitForResult(); | 2208 rv = callback2.WaitForResult(); |
| 2210 EXPECT_EQ(OK, rv); | 2209 EXPECT_EQ(OK, rv); |
| 2211 | 2210 |
| 2212 response = trans->GetResponseInfo(); | 2211 response = trans->GetResponseInfo(); |
| 2213 ASSERT_TRUE(response != NULL); | 2212 ASSERT_TRUE(response != NULL); |
| 2214 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2213 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 2215 EXPECT_EQ(5, response->headers->GetContentLength()); | 2214 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2216 } | 2215 } |
| 2217 | 2216 |
| 2218 // Test the request-challenge-retry sequence for basic auth, over a keep-alive | 2217 // Test the request-challenge-retry sequence for basic auth, over a keep-alive |
| 2219 // connection, but the server gets impatient and closes the connection. | 2218 // connection, but the server gets impatient and closes the connection. |
| 2220 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { | 2219 TEST_P(HttpNetworkTransactionTest, BasicAuthKeepAliveImpatientServer) { |
| 2221 HttpRequestInfo request; | 2220 HttpRequestInfo request; |
| 2222 request.method = "GET"; | 2221 request.method = "GET"; |
| 2223 request.url = GURL("http://www.google.com/"); | 2222 request.url = GURL("http://www.google.com/"); |
| 2224 request.load_flags = 0; | 2223 request.load_flags = 0; |
| 2225 | 2224 |
| 2226 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2225 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2227 | 2226 |
| 2228 MockWrite data_writes1[] = { | 2227 MockWrite data_writes1[] = { |
| 2229 MockWrite("GET / HTTP/1.1\r\n" | 2228 MockWrite( |
| 2230 "Host: www.google.com\r\n" | 2229 "GET / HTTP/1.1\r\n" |
| 2231 "Connection: keep-alive\r\n\r\n"), | 2230 "Host: www.google.com\r\n" |
| 2232 // This simulates the seemingly successful write to a closed connection | 2231 "Connection: keep-alive\r\n\r\n"), |
| 2233 // if the bug is not fixed. | 2232 // This simulates the seemingly successful write to a closed connection |
| 2234 MockWrite("GET / HTTP/1.1\r\n" | 2233 // if the bug is not fixed. |
| 2235 "Host: www.google.com\r\n" | 2234 MockWrite( |
| 2236 "Connection: keep-alive\r\n" | 2235 "GET / HTTP/1.1\r\n" |
| 2237 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 2236 "Host: www.google.com\r\n" |
| 2237 "Connection: keep-alive\r\n" |
| 2238 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 2238 }; | 2239 }; |
| 2239 | 2240 |
| 2240 MockRead data_reads1[] = { | 2241 MockRead data_reads1[] = { |
| 2241 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 2242 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
| 2242 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2243 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2243 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2244 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2244 MockRead("Content-Length: 14\r\n\r\n"), | 2245 MockRead("Content-Length: 14\r\n\r\n"), |
| 2245 // Tell MockTCPClientSocket to simulate the server closing the connection. | 2246 // Tell MockTCPClientSocket to simulate the server closing the connection. |
| 2246 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2247 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 2247 MockRead("Unauthorized\r\n"), | 2248 MockRead("Unauthorized\r\n"), |
| 2248 MockRead(SYNCHRONOUS, OK), // The server closes the connection. | 2249 MockRead(SYNCHRONOUS, OK), // The server closes the connection. |
| 2249 }; | 2250 }; |
| 2250 | 2251 |
| 2251 // After calling trans->RestartWithAuth(), this is the request we should | 2252 // After calling trans->RestartWithAuth(), this is the request we should |
| 2252 // be issuing -- the final header line contains the credentials. | 2253 // be issuing -- the final header line contains the credentials. |
| 2253 MockWrite data_writes2[] = { | 2254 MockWrite data_writes2[] = { |
| 2254 MockWrite("GET / HTTP/1.1\r\n" | 2255 MockWrite( |
| 2255 "Host: www.google.com\r\n" | 2256 "GET / HTTP/1.1\r\n" |
| 2256 "Connection: keep-alive\r\n" | 2257 "Host: www.google.com\r\n" |
| 2257 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 2258 "Connection: keep-alive\r\n" |
| 2259 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 2258 }; | 2260 }; |
| 2259 | 2261 |
| 2260 // Lastly, the server responds with the actual content. | 2262 // Lastly, the server responds with the actual content. |
| 2261 MockRead data_reads2[] = { | 2263 MockRead data_reads2[] = { |
| 2262 MockRead("HTTP/1.1 200 OK\r\n"), | 2264 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2263 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2265 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2264 MockRead("Content-Length: 5\r\n\r\n"), | 2266 MockRead("Content-Length: 5\r\n\r\n"), MockRead("hello"), |
| 2265 MockRead("hello"), | |
| 2266 }; | 2267 }; |
| 2267 | 2268 |
| 2268 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2269 StaticSocketDataProvider data1(data_reads1, |
| 2269 data_writes1, arraysize(data_writes1)); | 2270 arraysize(data_reads1), |
| 2270 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 2271 data_writes1, |
| 2271 data_writes2, arraysize(data_writes2)); | 2272 arraysize(data_writes1)); |
| 2273 StaticSocketDataProvider data2(data_reads2, |
| 2274 arraysize(data_reads2), |
| 2275 data_writes2, |
| 2276 arraysize(data_writes2)); |
| 2272 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2277 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2273 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 2278 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 2274 | 2279 |
| 2275 TestCompletionCallback callback1; | 2280 TestCompletionCallback callback1; |
| 2276 | 2281 |
| 2277 scoped_ptr<HttpTransaction> trans( | 2282 scoped_ptr<HttpTransaction> trans( |
| 2278 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2283 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2279 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 2284 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 2280 EXPECT_EQ(ERR_IO_PENDING, rv); | 2285 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2281 | 2286 |
| 2282 rv = callback1.WaitForResult(); | 2287 rv = callback1.WaitForResult(); |
| 2283 EXPECT_EQ(OK, rv); | 2288 EXPECT_EQ(OK, rv); |
| 2284 | 2289 |
| 2285 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2290 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2286 ASSERT_TRUE(response != NULL); | 2291 ASSERT_TRUE(response != NULL); |
| 2287 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 2292 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 2288 | 2293 |
| 2289 TestCompletionCallback callback2; | 2294 TestCompletionCallback callback2; |
| 2290 | 2295 |
| 2291 rv = trans->RestartWithAuth( | 2296 rv = |
| 2292 AuthCredentials(kFoo, kBar), callback2.callback()); | 2297 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2293 EXPECT_EQ(ERR_IO_PENDING, rv); | 2298 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2294 | 2299 |
| 2295 rv = callback2.WaitForResult(); | 2300 rv = callback2.WaitForResult(); |
| 2296 EXPECT_EQ(OK, rv); | 2301 EXPECT_EQ(OK, rv); |
| 2297 | 2302 |
| 2298 response = trans->GetResponseInfo(); | 2303 response = trans->GetResponseInfo(); |
| 2299 ASSERT_TRUE(response != NULL); | 2304 ASSERT_TRUE(response != NULL); |
| 2300 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 2305 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 2301 EXPECT_EQ(5, response->headers->GetContentLength()); | 2306 EXPECT_EQ(5, response->headers->GetContentLength()); |
| 2302 } | 2307 } |
| 2303 | 2308 |
| 2304 // Test the request-challenge-retry sequence for basic auth, over a connection | 2309 // Test the request-challenge-retry sequence for basic auth, over a connection |
| 2305 // that requires a restart when setting up an SSL tunnel. | 2310 // that requires a restart when setting up an SSL tunnel. |
| 2306 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAlive) { | 2311 TEST_P(HttpNetworkTransactionTest, BasicAuthProxyNoKeepAlive) { |
| 2307 HttpRequestInfo request; | 2312 HttpRequestInfo request; |
| 2308 request.method = "GET"; | 2313 request.method = "GET"; |
| 2309 request.url = GURL("https://www.google.com/"); | 2314 request.url = GURL("https://www.google.com/"); |
| 2310 // when the no authentication data flag is set. | 2315 // when the no authentication data flag is set. |
| 2311 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 2316 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
| 2312 | 2317 |
| 2313 // Configure against proxy server "myproxy:70". | 2318 // Configure against proxy server "myproxy:70". |
| 2314 session_deps_.proxy_service.reset( | 2319 session_deps_.proxy_service.reset( |
| 2315 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 2320 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
| 2316 CapturingBoundNetLog log; | 2321 CapturingBoundNetLog log; |
| 2317 session_deps_.net_log = log.bound().net_log(); | 2322 session_deps_.net_log = log.bound().net_log(); |
| 2318 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2323 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2319 | 2324 |
| 2320 // Since we have proxy, should try to establish tunnel. | 2325 // Since we have proxy, should try to establish tunnel. |
| 2321 MockWrite data_writes1[] = { | 2326 MockWrite data_writes1[] = { |
| 2322 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2327 MockWrite( |
| 2323 "Host: www.google.com\r\n" | 2328 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2324 "Proxy-Connection: keep-alive\r\n\r\n"), | 2329 "Host: www.google.com\r\n" |
| 2330 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2325 | 2331 |
| 2326 // After calling trans->RestartWithAuth(), this is the request we should | 2332 // After calling trans->RestartWithAuth(), this is the request we should |
| 2327 // be issuing -- the final header line contains the credentials. | 2333 // be issuing -- the final header line contains the credentials. |
| 2328 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2334 MockWrite( |
| 2329 "Host: www.google.com\r\n" | 2335 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2330 "Proxy-Connection: keep-alive\r\n" | 2336 "Host: www.google.com\r\n" |
| 2331 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 2337 "Proxy-Connection: keep-alive\r\n" |
| 2332 | 2338 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 2333 MockWrite("GET / HTTP/1.1\r\n" | 2339 MockWrite( |
| 2334 "Host: www.google.com\r\n" | 2340 "GET / HTTP/1.1\r\n" |
| 2335 "Connection: keep-alive\r\n\r\n"), | 2341 "Host: www.google.com\r\n" |
| 2342 "Connection: keep-alive\r\n\r\n"), |
| 2336 }; | 2343 }; |
| 2337 | 2344 |
| 2338 // The proxy responds to the connect with a 407, using a persistent | 2345 // The proxy responds to the connect with a 407, using a persistent |
| 2339 // connection. | 2346 // connection. |
| 2340 MockRead data_reads1[] = { | 2347 MockRead data_reads1[] = { |
| 2341 // No credentials. | 2348 // No credentials. |
| 2342 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 2349 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 2343 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2350 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2344 MockRead("Proxy-Connection: close\r\n\r\n"), | 2351 MockRead("Proxy-Connection: close\r\n\r\n"), |
| 2345 | 2352 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 2346 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 2353 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2347 | 2354 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2348 MockRead("HTTP/1.1 200 OK\r\n"), | 2355 MockRead("Content-Length: 5\r\n\r\n"), |
| 2349 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2356 MockRead(SYNCHRONOUS, "hello"), |
| 2350 MockRead("Content-Length: 5\r\n\r\n"), | |
| 2351 MockRead(SYNCHRONOUS, "hello"), | |
| 2352 }; | 2357 }; |
| 2353 | 2358 |
| 2354 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2359 StaticSocketDataProvider data1(data_reads1, |
| 2355 data_writes1, arraysize(data_writes1)); | 2360 arraysize(data_reads1), |
| 2361 data_writes1, |
| 2362 arraysize(data_writes1)); |
| 2356 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2363 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2357 SSLSocketDataProvider ssl(ASYNC, OK); | 2364 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2358 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2365 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2359 | 2366 |
| 2360 TestCompletionCallback callback1; | 2367 TestCompletionCallback callback1; |
| 2361 | 2368 |
| 2362 scoped_ptr<HttpTransaction> trans( | 2369 scoped_ptr<HttpTransaction> trans( |
| 2363 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2370 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2364 | 2371 |
| 2365 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2372 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 2366 EXPECT_EQ(ERR_IO_PENDING, rv); | 2373 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2367 | 2374 |
| 2368 rv = callback1.WaitForResult(); | 2375 rv = callback1.WaitForResult(); |
| 2369 EXPECT_EQ(OK, rv); | 2376 EXPECT_EQ(OK, rv); |
| 2370 net::CapturingNetLog::CapturedEntryList entries; | 2377 net::CapturingNetLog::CapturedEntryList entries; |
| 2371 log.GetEntries(&entries); | 2378 log.GetEntries(&entries); |
| 2372 size_t pos = ExpectLogContainsSomewhere( | 2379 size_t pos = ExpectLogContainsSomewhere( |
| 2373 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2380 entries, |
| 2381 0, |
| 2382 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 2374 NetLog::PHASE_NONE); | 2383 NetLog::PHASE_NONE); |
| 2375 ExpectLogContainsSomewhere( | 2384 ExpectLogContainsSomewhere( |
| 2376 entries, pos, | 2385 entries, |
| 2386 pos, |
| 2377 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2387 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 2378 NetLog::PHASE_NONE); | 2388 NetLog::PHASE_NONE); |
| 2379 | 2389 |
| 2380 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2390 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2381 ASSERT_TRUE(response != NULL); | 2391 ASSERT_TRUE(response != NULL); |
| 2382 ASSERT_FALSE(response->headers.get() == NULL); | 2392 ASSERT_FALSE(response->headers.get() == NULL); |
| 2383 EXPECT_EQ(407, response->headers->response_code()); | 2393 EXPECT_EQ(407, response->headers->response_code()); |
| 2384 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 2394 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 2385 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 2395 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 2386 | 2396 |
| 2387 LoadTimingInfo load_timing_info; | 2397 LoadTimingInfo load_timing_info; |
| 2388 // CONNECT requests and responses are handled at the connect job level, so | 2398 // CONNECT requests and responses are handled at the connect job level, so |
| 2389 // the transaction does not yet have a connection. | 2399 // the transaction does not yet have a connection. |
| 2390 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); | 2400 EXPECT_FALSE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 2391 | 2401 |
| 2392 TestCompletionCallback callback2; | 2402 TestCompletionCallback callback2; |
| 2393 | 2403 |
| 2394 rv = trans->RestartWithAuth( | 2404 rv = |
| 2395 AuthCredentials(kFoo, kBar), callback2.callback()); | 2405 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 2396 EXPECT_EQ(ERR_IO_PENDING, rv); | 2406 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2397 | 2407 |
| 2398 rv = callback2.WaitForResult(); | 2408 rv = callback2.WaitForResult(); |
| 2399 EXPECT_EQ(OK, rv); | 2409 EXPECT_EQ(OK, rv); |
| 2400 | 2410 |
| 2401 response = trans->GetResponseInfo(); | 2411 response = trans->GetResponseInfo(); |
| 2402 ASSERT_TRUE(response != NULL); | 2412 ASSERT_TRUE(response != NULL); |
| 2403 | 2413 |
| 2404 EXPECT_TRUE(response->headers->IsKeepAlive()); | 2414 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 2405 EXPECT_EQ(200, response->headers->response_code()); | 2415 EXPECT_EQ(200, response->headers->response_code()); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2431 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2441 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 2432 CapturingBoundNetLog log; | 2442 CapturingBoundNetLog log; |
| 2433 session_deps_.net_log = log.bound().net_log(); | 2443 session_deps_.net_log = log.bound().net_log(); |
| 2434 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2444 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2435 | 2445 |
| 2436 scoped_ptr<HttpTransaction> trans( | 2446 scoped_ptr<HttpTransaction> trans( |
| 2437 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2447 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2438 | 2448 |
| 2439 // Since we have proxy, should try to establish tunnel. | 2449 // Since we have proxy, should try to establish tunnel. |
| 2440 MockWrite data_writes1[] = { | 2450 MockWrite data_writes1[] = { |
| 2441 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2451 MockWrite( |
| 2442 "Host: www.google.com\r\n" | 2452 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2443 "Proxy-Connection: keep-alive\r\n\r\n"), | 2453 "Host: www.google.com\r\n" |
| 2454 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2444 | 2455 |
| 2445 // After calling trans->RestartWithAuth(), this is the request we should | 2456 // After calling trans->RestartWithAuth(), this is the request we should |
| 2446 // be issuing -- the final header line contains the credentials. | 2457 // be issuing -- the final header line contains the credentials. |
| 2447 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2458 MockWrite( |
| 2448 "Host: www.google.com\r\n" | 2459 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2449 "Proxy-Connection: keep-alive\r\n" | 2460 "Host: www.google.com\r\n" |
| 2450 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), | 2461 "Proxy-Connection: keep-alive\r\n" |
| 2462 "Proxy-Authorization: Basic Zm9vOmJheg==\r\n\r\n"), |
| 2451 }; | 2463 }; |
| 2452 | 2464 |
| 2453 // The proxy responds to the connect with a 407, using a persistent | 2465 // The proxy responds to the connect with a 407, using a persistent |
| 2454 // connection. | 2466 // connection. |
| 2455 MockRead data_reads1[] = { | 2467 MockRead data_reads1[] = { |
| 2456 // No credentials. | 2468 // No credentials. |
| 2457 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 2469 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 2458 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2470 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2459 MockRead("Content-Length: 10\r\n\r\n"), | 2471 MockRead("Content-Length: 10\r\n\r\n"), |
| 2460 MockRead("0123456789"), | 2472 MockRead("0123456789"), |
| 2461 | 2473 |
| 2462 // Wrong credentials (wrong password). | 2474 // Wrong credentials (wrong password). |
| 2463 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 2475 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 2464 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2476 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2465 MockRead("Content-Length: 10\r\n\r\n"), | 2477 MockRead("Content-Length: 10\r\n\r\n"), |
| 2466 // No response body because the test stops reading here. | 2478 // No response body because the test stops reading here. |
| 2467 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 2479 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 2468 }; | 2480 }; |
| 2469 | 2481 |
| 2470 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2482 StaticSocketDataProvider data1(data_reads1, |
| 2471 data_writes1, arraysize(data_writes1)); | 2483 arraysize(data_reads1), |
| 2484 data_writes1, |
| 2485 arraysize(data_writes1)); |
| 2472 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2486 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2473 | 2487 |
| 2474 TestCompletionCallback callback1; | 2488 TestCompletionCallback callback1; |
| 2475 | 2489 |
| 2476 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2490 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 2477 EXPECT_EQ(ERR_IO_PENDING, rv); | 2491 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2478 | 2492 |
| 2479 rv = callback1.WaitForResult(); | 2493 rv = callback1.WaitForResult(); |
| 2480 EXPECT_EQ(OK, rv); | 2494 EXPECT_EQ(OK, rv); |
| 2481 net::CapturingNetLog::CapturedEntryList entries; | 2495 net::CapturingNetLog::CapturedEntryList entries; |
| 2482 log.GetEntries(&entries); | 2496 log.GetEntries(&entries); |
| 2483 size_t pos = ExpectLogContainsSomewhere( | 2497 size_t pos = ExpectLogContainsSomewhere( |
| 2484 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2498 entries, |
| 2499 0, |
| 2500 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 2485 NetLog::PHASE_NONE); | 2501 NetLog::PHASE_NONE); |
| 2486 ExpectLogContainsSomewhere( | 2502 ExpectLogContainsSomewhere( |
| 2487 entries, pos, | 2503 entries, |
| 2504 pos, |
| 2488 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2505 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 2489 NetLog::PHASE_NONE); | 2506 NetLog::PHASE_NONE); |
| 2490 | 2507 |
| 2491 const HttpResponseInfo* response = trans->GetResponseInfo(); | 2508 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 2492 ASSERT_TRUE(response != NULL); | 2509 ASSERT_TRUE(response != NULL); |
| 2493 ASSERT_FALSE(response->headers.get() == NULL); | 2510 ASSERT_FALSE(response->headers.get() == NULL); |
| 2494 EXPECT_TRUE(response->headers->IsKeepAlive()); | 2511 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 2495 EXPECT_EQ(407, response->headers->response_code()); | 2512 EXPECT_EQ(407, response->headers->response_code()); |
| 2496 EXPECT_EQ(10, response->headers->GetContentLength()); | 2513 EXPECT_EQ(10, response->headers->GetContentLength()); |
| 2497 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 2514 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 2498 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 2515 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 2499 | 2516 |
| 2500 TestCompletionCallback callback2; | 2517 TestCompletionCallback callback2; |
| 2501 | 2518 |
| 2502 // Wrong password (should be "bar"). | 2519 // Wrong password (should be "bar"). |
| 2503 rv = trans->RestartWithAuth( | 2520 rv = |
| 2504 AuthCredentials(kFoo, kBaz), callback2.callback()); | 2521 trans->RestartWithAuth(AuthCredentials(kFoo, kBaz), callback2.callback()); |
| 2505 EXPECT_EQ(ERR_IO_PENDING, rv); | 2522 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2506 | 2523 |
| 2507 rv = callback2.WaitForResult(); | 2524 rv = callback2.WaitForResult(); |
| 2508 EXPECT_EQ(OK, rv); | 2525 EXPECT_EQ(OK, rv); |
| 2509 | 2526 |
| 2510 response = trans->GetResponseInfo(); | 2527 response = trans->GetResponseInfo(); |
| 2511 ASSERT_TRUE(response != NULL); | 2528 ASSERT_TRUE(response != NULL); |
| 2512 ASSERT_FALSE(response->headers.get() == NULL); | 2529 ASSERT_FALSE(response->headers.get() == NULL); |
| 2513 EXPECT_TRUE(response->headers->IsKeepAlive()); | 2530 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 2514 EXPECT_EQ(407, response->headers->response_code()); | 2531 EXPECT_EQ(407, response->headers->response_code()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2532 // Configure against proxy server "myproxy:70". | 2549 // Configure against proxy server "myproxy:70". |
| 2533 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2550 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 2534 | 2551 |
| 2535 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2552 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2536 | 2553 |
| 2537 scoped_ptr<HttpTransaction> trans( | 2554 scoped_ptr<HttpTransaction> trans( |
| 2538 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2555 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2539 | 2556 |
| 2540 // Since we have proxy, should try to establish tunnel. | 2557 // Since we have proxy, should try to establish tunnel. |
| 2541 MockWrite data_writes[] = { | 2558 MockWrite data_writes[] = { |
| 2542 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2559 MockWrite( |
| 2543 "Host: www.google.com\r\n" | 2560 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2544 "Proxy-Connection: keep-alive\r\n\r\n"), | 2561 "Host: www.google.com\r\n" |
| 2562 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2545 }; | 2563 }; |
| 2546 | 2564 |
| 2547 // The proxy responds to the connect with a 407. | 2565 // The proxy responds to the connect with a 407. |
| 2548 MockRead data_reads[] = { | 2566 MockRead data_reads[] = { |
| 2549 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 2567 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 2550 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2568 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2551 MockRead("Content-Length: 10\r\n\r\n"), | 2569 MockRead("Content-Length: 10\r\n\r\n"), |
| 2552 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 2570 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 2553 }; | 2571 }; |
| 2554 | 2572 |
| 2555 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 2573 StaticSocketDataProvider data( |
| 2556 data_writes, arraysize(data_writes)); | 2574 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 2557 session_deps_.socket_factory->AddSocketDataProvider(&data); | 2575 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 2558 | 2576 |
| 2559 TestCompletionCallback callback; | 2577 TestCompletionCallback callback; |
| 2560 | 2578 |
| 2561 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2579 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 2562 EXPECT_EQ(ERR_IO_PENDING, rv); | 2580 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2563 | 2581 |
| 2564 rv = callback.WaitForResult(); | 2582 rv = callback.WaitForResult(); |
| 2565 EXPECT_EQ(OK, rv); | 2583 EXPECT_EQ(OK, rv); |
| 2566 | 2584 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2587 request.method = "GET"; | 2605 request.method = "GET"; |
| 2588 request.url = GURL("http://www.google.com/"); | 2606 request.url = GURL("http://www.google.com/"); |
| 2589 request.load_flags = 0; | 2607 request.load_flags = 0; |
| 2590 | 2608 |
| 2591 // We are using a DIRECT connection (i.e. no proxy) for this session. | 2609 // We are using a DIRECT connection (i.e. no proxy) for this session. |
| 2592 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2610 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2593 scoped_ptr<HttpTransaction> trans( | 2611 scoped_ptr<HttpTransaction> trans( |
| 2594 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 2612 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 2595 | 2613 |
| 2596 MockWrite data_writes1[] = { | 2614 MockWrite data_writes1[] = { |
| 2597 MockWrite("GET / HTTP/1.1\r\n" | 2615 MockWrite( |
| 2598 "Host: www.google.com\r\n" | 2616 "GET / HTTP/1.1\r\n" |
| 2599 "Connection: keep-alive\r\n\r\n"), | 2617 "Host: www.google.com\r\n" |
| 2618 "Connection: keep-alive\r\n\r\n"), |
| 2600 }; | 2619 }; |
| 2601 | 2620 |
| 2602 MockRead data_reads1[] = { | 2621 MockRead data_reads1[] = { |
| 2603 MockRead("HTTP/1.0 407 Proxy Auth required\r\n"), | 2622 MockRead("HTTP/1.0 407 Proxy Auth required\r\n"), |
| 2604 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2623 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2605 // Large content-length -- won't matter, as connection will be reset. | 2624 // Large content-length -- won't matter, as connection will be reset. |
| 2606 MockRead("Content-Length: 10000\r\n\r\n"), | 2625 MockRead("Content-Length: 10000\r\n\r\n"), |
| 2607 MockRead(SYNCHRONOUS, ERR_FAILED), | 2626 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 2608 }; | 2627 }; |
| 2609 | 2628 |
| 2610 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2629 StaticSocketDataProvider data1(data_reads1, |
| 2611 data_writes1, arraysize(data_writes1)); | 2630 arraysize(data_reads1), |
| 2631 data_writes1, |
| 2632 arraysize(data_writes1)); |
| 2612 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2633 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2613 | 2634 |
| 2614 TestCompletionCallback callback; | 2635 TestCompletionCallback callback; |
| 2615 | 2636 |
| 2616 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 2637 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 2617 EXPECT_EQ(ERR_IO_PENDING, rv); | 2638 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2618 | 2639 |
| 2619 rv = callback.WaitForResult(); | 2640 rv = callback.WaitForResult(); |
| 2620 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 2641 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); |
| 2621 } | 2642 } |
| 2622 | 2643 |
| 2623 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) | 2644 // Tests when an HTTPS server (non-proxy) returns a 407 (proxy-authentication) |
| 2624 // through a non-authenticating proxy. The request should fail with | 2645 // through a non-authenticating proxy. The request should fail with |
| 2625 // ERR_UNEXPECTED_PROXY_AUTH. | 2646 // ERR_UNEXPECTED_PROXY_AUTH. |
| 2626 // Note that it is impossible to detect if an HTTP server returns a 407 through | 2647 // Note that it is impossible to detect if an HTTP server returns a 407 through |
| 2627 // a non-authenticating proxy - there is nothing to indicate whether the | 2648 // a non-authenticating proxy - there is nothing to indicate whether the |
| 2628 // response came from the proxy or the server, so it is treated as if the proxy | 2649 // response came from the proxy or the server, so it is treated as if the proxy |
| 2629 // issued the challenge. | 2650 // issued the challenge. |
| 2630 TEST_P(HttpNetworkTransactionTest, | 2651 TEST_P(HttpNetworkTransactionTest, HttpsServerRequestsProxyAuthThroughProxy) { |
| 2631 HttpsServerRequestsProxyAuthThroughProxy) { | |
| 2632 HttpRequestInfo request; | 2652 HttpRequestInfo request; |
| 2633 request.method = "GET"; | 2653 request.method = "GET"; |
| 2634 request.url = GURL("https://www.google.com/"); | 2654 request.url = GURL("https://www.google.com/"); |
| 2635 | 2655 |
| 2636 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 2656 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 2637 CapturingBoundNetLog log; | 2657 CapturingBoundNetLog log; |
| 2638 session_deps_.net_log = log.bound().net_log(); | 2658 session_deps_.net_log = log.bound().net_log(); |
| 2639 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2659 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2640 | 2660 |
| 2641 // Since we have proxy, should try to establish tunnel. | 2661 // Since we have proxy, should try to establish tunnel. |
| 2642 MockWrite data_writes1[] = { | 2662 MockWrite data_writes1[] = { |
| 2643 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2663 MockWrite( |
| 2644 "Host: www.google.com\r\n" | 2664 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2645 "Proxy-Connection: keep-alive\r\n\r\n"), | 2665 "Host: www.google.com\r\n" |
| 2646 | 2666 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2647 MockWrite("GET / HTTP/1.1\r\n" | 2667 MockWrite( |
| 2648 "Host: www.google.com\r\n" | 2668 "GET / HTTP/1.1\r\n" |
| 2649 "Connection: keep-alive\r\n\r\n"), | 2669 "Host: www.google.com\r\n" |
| 2670 "Connection: keep-alive\r\n\r\n"), |
| 2650 }; | 2671 }; |
| 2651 | 2672 |
| 2652 MockRead data_reads1[] = { | 2673 MockRead data_reads1[] = { |
| 2653 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 2674 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 2654 | 2675 MockRead("HTTP/1.1 407 Unauthorized\r\n"), |
| 2655 MockRead("HTTP/1.1 407 Unauthorized\r\n"), | 2676 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 2656 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 2677 MockRead("\r\n"), |
| 2657 MockRead("\r\n"), | 2678 MockRead(SYNCHRONOUS, OK), |
| 2658 MockRead(SYNCHRONOUS, OK), | |
| 2659 }; | 2679 }; |
| 2660 | 2680 |
| 2661 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2681 StaticSocketDataProvider data1(data_reads1, |
| 2662 data_writes1, arraysize(data_writes1)); | 2682 arraysize(data_reads1), |
| 2683 data_writes1, |
| 2684 arraysize(data_writes1)); |
| 2663 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2685 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2664 SSLSocketDataProvider ssl(ASYNC, OK); | 2686 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2665 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2687 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2666 | 2688 |
| 2667 TestCompletionCallback callback1; | 2689 TestCompletionCallback callback1; |
| 2668 | 2690 |
| 2669 scoped_ptr<HttpTransaction> trans( | 2691 scoped_ptr<HttpTransaction> trans( |
| 2670 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2692 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2671 | 2693 |
| 2672 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2694 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 2673 EXPECT_EQ(ERR_IO_PENDING, rv); | 2695 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2674 | 2696 |
| 2675 rv = callback1.WaitForResult(); | 2697 rv = callback1.WaitForResult(); |
| 2676 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); | 2698 EXPECT_EQ(ERR_UNEXPECTED_PROXY_AUTH, rv); |
| 2677 net::CapturingNetLog::CapturedEntryList entries; | 2699 net::CapturingNetLog::CapturedEntryList entries; |
| 2678 log.GetEntries(&entries); | 2700 log.GetEntries(&entries); |
| 2679 size_t pos = ExpectLogContainsSomewhere( | 2701 size_t pos = ExpectLogContainsSomewhere( |
| 2680 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 2702 entries, |
| 2703 0, |
| 2704 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 2681 NetLog::PHASE_NONE); | 2705 NetLog::PHASE_NONE); |
| 2682 ExpectLogContainsSomewhere( | 2706 ExpectLogContainsSomewhere( |
| 2683 entries, pos, | 2707 entries, |
| 2708 pos, |
| 2684 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 2709 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 2685 NetLog::PHASE_NONE); | 2710 NetLog::PHASE_NONE); |
| 2686 } | 2711 } |
| 2687 | 2712 |
| 2688 // Test the load timing for HTTPS requests with an HTTP proxy. | 2713 // Test the load timing for HTTPS requests with an HTTP proxy. |
| 2689 TEST_P(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { | 2714 TEST_P(HttpNetworkTransactionTest, HttpProxyLoadTimingNoPacTwoRequests) { |
| 2690 HttpRequestInfo request1; | 2715 HttpRequestInfo request1; |
| 2691 request1.method = "GET"; | 2716 request1.method = "GET"; |
| 2692 request1.url = GURL("https://www.google.com/1"); | 2717 request1.url = GURL("https://www.google.com/1"); |
| 2693 | 2718 |
| 2694 HttpRequestInfo request2; | 2719 HttpRequestInfo request2; |
| 2695 request2.method = "GET"; | 2720 request2.method = "GET"; |
| 2696 request2.url = GURL("https://www.google.com/2"); | 2721 request2.url = GURL("https://www.google.com/2"); |
| 2697 | 2722 |
| 2698 // Configure against proxy server "myproxy:70". | 2723 // Configure against proxy server "myproxy:70". |
| 2699 session_deps_.proxy_service.reset( | 2724 session_deps_.proxy_service.reset( |
| 2700 ProxyService::CreateFixed("PROXY myproxy:70")); | 2725 ProxyService::CreateFixed("PROXY myproxy:70")); |
| 2701 CapturingBoundNetLog log; | 2726 CapturingBoundNetLog log; |
| 2702 session_deps_.net_log = log.bound().net_log(); | 2727 session_deps_.net_log = log.bound().net_log(); |
| 2703 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2728 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2704 | 2729 |
| 2705 // Since we have proxy, should try to establish tunnel. | 2730 // Since we have proxy, should try to establish tunnel. |
| 2706 MockWrite data_writes1[] = { | 2731 MockWrite data_writes1[] = { |
| 2707 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2732 MockWrite( |
| 2708 "Host: www.google.com\r\n" | 2733 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2709 "Proxy-Connection: keep-alive\r\n\r\n"), | 2734 "Host: www.google.com\r\n" |
| 2710 | 2735 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2711 MockWrite("GET /1 HTTP/1.1\r\n" | 2736 MockWrite( |
| 2712 "Host: www.google.com\r\n" | 2737 "GET /1 HTTP/1.1\r\n" |
| 2713 "Connection: keep-alive\r\n\r\n"), | 2738 "Host: www.google.com\r\n" |
| 2714 | 2739 "Connection: keep-alive\r\n\r\n"), |
| 2715 MockWrite("GET /2 HTTP/1.1\r\n" | 2740 MockWrite( |
| 2716 "Host: www.google.com\r\n" | 2741 "GET /2 HTTP/1.1\r\n" |
| 2717 "Connection: keep-alive\r\n\r\n"), | 2742 "Host: www.google.com\r\n" |
| 2743 "Connection: keep-alive\r\n\r\n"), |
| 2718 }; | 2744 }; |
| 2719 | 2745 |
| 2720 // The proxy responds to the connect with a 407, using a persistent | 2746 // The proxy responds to the connect with a 407, using a persistent |
| 2721 // connection. | 2747 // connection. |
| 2722 MockRead data_reads1[] = { | 2748 MockRead data_reads1[] = { |
| 2723 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 2749 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 2724 | 2750 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2725 MockRead("HTTP/1.1 200 OK\r\n"), | 2751 MockRead("Content-Length: 1\r\n\r\n"), |
| 2726 MockRead("Content-Length: 1\r\n\r\n"), | 2752 MockRead(SYNCHRONOUS, "1"), |
| 2727 MockRead(SYNCHRONOUS, "1"), | 2753 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2728 | 2754 MockRead("Content-Length: 2\r\n\r\n"), |
| 2729 MockRead("HTTP/1.1 200 OK\r\n"), | 2755 MockRead(SYNCHRONOUS, "22"), |
| 2730 MockRead("Content-Length: 2\r\n\r\n"), | |
| 2731 MockRead(SYNCHRONOUS, "22"), | |
| 2732 }; | 2756 }; |
| 2733 | 2757 |
| 2734 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2758 StaticSocketDataProvider data1(data_reads1, |
| 2735 data_writes1, arraysize(data_writes1)); | 2759 arraysize(data_reads1), |
| 2760 data_writes1, |
| 2761 arraysize(data_writes1)); |
| 2736 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2762 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2737 SSLSocketDataProvider ssl(ASYNC, OK); | 2763 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2738 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2764 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2739 | 2765 |
| 2740 TestCompletionCallback callback1; | 2766 TestCompletionCallback callback1; |
| 2741 scoped_ptr<HttpTransaction> trans1( | 2767 scoped_ptr<HttpTransaction> trans1( |
| 2742 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2768 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2743 | 2769 |
| 2744 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 2770 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
| 2745 EXPECT_EQ(ERR_IO_PENDING, rv); | 2771 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2795 | 2821 |
| 2796 // Configure against proxy server "myproxy:70". | 2822 // Configure against proxy server "myproxy:70". |
| 2797 session_deps_.proxy_service.reset( | 2823 session_deps_.proxy_service.reset( |
| 2798 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 2824 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
| 2799 CapturingBoundNetLog log; | 2825 CapturingBoundNetLog log; |
| 2800 session_deps_.net_log = log.bound().net_log(); | 2826 session_deps_.net_log = log.bound().net_log(); |
| 2801 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2827 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2802 | 2828 |
| 2803 // Since we have proxy, should try to establish tunnel. | 2829 // Since we have proxy, should try to establish tunnel. |
| 2804 MockWrite data_writes1[] = { | 2830 MockWrite data_writes1[] = { |
| 2805 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 2831 MockWrite( |
| 2806 "Host: www.google.com\r\n" | 2832 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 2807 "Proxy-Connection: keep-alive\r\n\r\n"), | 2833 "Host: www.google.com\r\n" |
| 2808 | 2834 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2809 MockWrite("GET /1 HTTP/1.1\r\n" | 2835 MockWrite( |
| 2810 "Host: www.google.com\r\n" | 2836 "GET /1 HTTP/1.1\r\n" |
| 2811 "Connection: keep-alive\r\n\r\n"), | 2837 "Host: www.google.com\r\n" |
| 2812 | 2838 "Connection: keep-alive\r\n\r\n"), |
| 2813 MockWrite("GET /2 HTTP/1.1\r\n" | 2839 MockWrite( |
| 2814 "Host: www.google.com\r\n" | 2840 "GET /2 HTTP/1.1\r\n" |
| 2815 "Connection: keep-alive\r\n\r\n"), | 2841 "Host: www.google.com\r\n" |
| 2842 "Connection: keep-alive\r\n\r\n"), |
| 2816 }; | 2843 }; |
| 2817 | 2844 |
| 2818 // The proxy responds to the connect with a 407, using a persistent | 2845 // The proxy responds to the connect with a 407, using a persistent |
| 2819 // connection. | 2846 // connection. |
| 2820 MockRead data_reads1[] = { | 2847 MockRead data_reads1[] = { |
| 2821 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 2848 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 2822 | 2849 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2823 MockRead("HTTP/1.1 200 OK\r\n"), | 2850 MockRead("Content-Length: 1\r\n\r\n"), |
| 2824 MockRead("Content-Length: 1\r\n\r\n"), | 2851 MockRead(SYNCHRONOUS, "1"), |
| 2825 MockRead(SYNCHRONOUS, "1"), | 2852 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2826 | 2853 MockRead("Content-Length: 2\r\n\r\n"), |
| 2827 MockRead("HTTP/1.1 200 OK\r\n"), | 2854 MockRead(SYNCHRONOUS, "22"), |
| 2828 MockRead("Content-Length: 2\r\n\r\n"), | |
| 2829 MockRead(SYNCHRONOUS, "22"), | |
| 2830 }; | 2855 }; |
| 2831 | 2856 |
| 2832 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2857 StaticSocketDataProvider data1(data_reads1, |
| 2833 data_writes1, arraysize(data_writes1)); | 2858 arraysize(data_reads1), |
| 2859 data_writes1, |
| 2860 arraysize(data_writes1)); |
| 2834 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2861 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2835 SSLSocketDataProvider ssl(ASYNC, OK); | 2862 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2836 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2863 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2837 | 2864 |
| 2838 TestCompletionCallback callback1; | 2865 TestCompletionCallback callback1; |
| 2839 scoped_ptr<HttpTransaction> trans1( | 2866 scoped_ptr<HttpTransaction> trans1( |
| 2840 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2867 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2841 | 2868 |
| 2842 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); | 2869 int rv = trans1->Start(&request1, callback1.callback(), log.bound()); |
| 2843 EXPECT_EQ(ERR_IO_PENDING, rv); | 2870 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2882 session->CloseAllConnections(); | 2909 session->CloseAllConnections(); |
| 2883 } | 2910 } |
| 2884 | 2911 |
| 2885 // Test a simple get through an HTTPS Proxy. | 2912 // Test a simple get through an HTTPS Proxy. |
| 2886 TEST_P(HttpNetworkTransactionTest, HttpsProxyGet) { | 2913 TEST_P(HttpNetworkTransactionTest, HttpsProxyGet) { |
| 2887 HttpRequestInfo request; | 2914 HttpRequestInfo request; |
| 2888 request.method = "GET"; | 2915 request.method = "GET"; |
| 2889 request.url = GURL("http://www.google.com/"); | 2916 request.url = GURL("http://www.google.com/"); |
| 2890 | 2917 |
| 2891 // Configure against https proxy server "proxy:70". | 2918 // Configure against https proxy server "proxy:70". |
| 2892 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2919 session_deps_.proxy_service.reset( |
| 2893 "https://proxy:70")); | 2920 ProxyService::CreateFixed("https://proxy:70")); |
| 2894 CapturingBoundNetLog log; | 2921 CapturingBoundNetLog log; |
| 2895 session_deps_.net_log = log.bound().net_log(); | 2922 session_deps_.net_log = log.bound().net_log(); |
| 2896 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2923 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2897 | 2924 |
| 2898 // Since we have proxy, should use full url | 2925 // Since we have proxy, should use full url |
| 2899 MockWrite data_writes1[] = { | 2926 MockWrite data_writes1[] = { |
| 2900 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 2927 MockWrite( |
| 2901 "Host: www.google.com\r\n" | 2928 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 2902 "Proxy-Connection: keep-alive\r\n\r\n"), | 2929 "Host: www.google.com\r\n" |
| 2930 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 2903 }; | 2931 }; |
| 2904 | 2932 |
| 2905 MockRead data_reads1[] = { | 2933 MockRead data_reads1[] = { |
| 2906 MockRead("HTTP/1.1 200 OK\r\n"), | 2934 MockRead("HTTP/1.1 200 OK\r\n"), |
| 2907 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 2935 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 2908 MockRead("Content-Length: 100\r\n\r\n"), | 2936 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 2909 MockRead(SYNCHRONOUS, OK), | |
| 2910 }; | 2937 }; |
| 2911 | 2938 |
| 2912 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 2939 StaticSocketDataProvider data1(data_reads1, |
| 2913 data_writes1, arraysize(data_writes1)); | 2940 arraysize(data_reads1), |
| 2941 data_writes1, |
| 2942 arraysize(data_writes1)); |
| 2914 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 2943 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 2915 SSLSocketDataProvider ssl(ASYNC, OK); | 2944 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2916 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 2945 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2917 | 2946 |
| 2918 TestCompletionCallback callback1; | 2947 TestCompletionCallback callback1; |
| 2919 | 2948 |
| 2920 scoped_ptr<HttpTransaction> trans( | 2949 scoped_ptr<HttpTransaction> trans( |
| 2921 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 2950 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 2922 | 2951 |
| 2923 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 2952 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2944 } | 2973 } |
| 2945 | 2974 |
| 2946 // Test a SPDY get through an HTTPS Proxy. | 2975 // Test a SPDY get through an HTTPS Proxy. |
| 2947 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGet) { | 2976 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
| 2948 HttpRequestInfo request; | 2977 HttpRequestInfo request; |
| 2949 request.method = "GET"; | 2978 request.method = "GET"; |
| 2950 request.url = GURL("http://www.google.com/"); | 2979 request.url = GURL("http://www.google.com/"); |
| 2951 request.load_flags = 0; | 2980 request.load_flags = 0; |
| 2952 | 2981 |
| 2953 // Configure against https proxy server "proxy:70". | 2982 // Configure against https proxy server "proxy:70". |
| 2954 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 2983 session_deps_.proxy_service.reset( |
| 2955 "https://proxy:70")); | 2984 ProxyService::CreateFixed("https://proxy:70")); |
| 2956 CapturingBoundNetLog log; | 2985 CapturingBoundNetLog log; |
| 2957 session_deps_.net_log = log.bound().net_log(); | 2986 session_deps_.net_log = log.bound().net_log(); |
| 2958 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 2987 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 2959 | 2988 |
| 2960 // fetch http://www.google.com/ via SPDY | 2989 // fetch http://www.google.com/ via SPDY |
| 2961 scoped_ptr<SpdyFrame> req( | 2990 scoped_ptr<SpdyFrame> req( |
| 2962 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 2991 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
| 2963 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 2992 MockWrite spdy_writes[] = {CreateMockWrite(*req)}; |
| 2964 | 2993 |
| 2965 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 2994 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 2966 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 2995 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 2967 MockRead spdy_reads[] = { | 2996 MockRead spdy_reads[] = { |
| 2968 CreateMockRead(*resp), | 2997 CreateMockRead(*resp), CreateMockRead(*data), MockRead(ASYNC, 0, 0), |
| 2969 CreateMockRead(*data), | |
| 2970 MockRead(ASYNC, 0, 0), | |
| 2971 }; | 2998 }; |
| 2972 | 2999 |
| 2973 DelayedSocketData spdy_data( | 3000 DelayedSocketData spdy_data( |
| 2974 1, // wait for one write to finish before reading. | 3001 1, // wait for one write to finish before reading. |
| 2975 spdy_reads, arraysize(spdy_reads), | 3002 spdy_reads, |
| 2976 spdy_writes, arraysize(spdy_writes)); | 3003 arraysize(spdy_reads), |
| 3004 spdy_writes, |
| 3005 arraysize(spdy_writes)); |
| 2977 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3006 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 2978 | 3007 |
| 2979 SSLSocketDataProvider ssl(ASYNC, OK); | 3008 SSLSocketDataProvider ssl(ASYNC, OK); |
| 2980 ssl.SetNextProto(GetParam()); | 3009 ssl.SetNextProto(GetParam()); |
| 2981 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3010 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 2982 | 3011 |
| 2983 TestCompletionCallback callback1; | 3012 TestCompletionCallback callback1; |
| 2984 | 3013 |
| 2985 scoped_ptr<HttpTransaction> trans( | 3014 scoped_ptr<HttpTransaction> trans( |
| 2986 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3015 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3017 session_deps_.proxy_service.reset( | 3046 session_deps_.proxy_service.reset( |
| 3018 ProxyService::CreateFixed("https://myproxy:70")); | 3047 ProxyService::CreateFixed("https://myproxy:70")); |
| 3019 CapturingBoundNetLog log; | 3048 CapturingBoundNetLog log; |
| 3020 session_deps_.net_log = log.bound().net_log(); | 3049 session_deps_.net_log = log.bound().net_log(); |
| 3021 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3050 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3022 | 3051 |
| 3023 // The first request will be a bare GET, the second request will be a | 3052 // The first request will be a bare GET, the second request will be a |
| 3024 // GET with a Proxy-Authorization header. | 3053 // GET with a Proxy-Authorization header. |
| 3025 scoped_ptr<SpdyFrame> req_get( | 3054 scoped_ptr<SpdyFrame> req_get( |
| 3026 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 3055 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
| 3027 const char* const kExtraAuthorizationHeaders[] = { | 3056 const char* const kExtraAuthorizationHeaders[] = {"proxy-authorization", |
| 3028 "proxy-authorization", "Basic Zm9vOmJhcg==" | 3057 "Basic Zm9vOmJhcg=="}; |
| 3029 }; | |
| 3030 scoped_ptr<SpdyFrame> req_get_authorization( | 3058 scoped_ptr<SpdyFrame> req_get_authorization( |
| 3031 spdy_util_.ConstructSpdyGet(kExtraAuthorizationHeaders, | 3059 spdy_util_.ConstructSpdyGet(kExtraAuthorizationHeaders, |
| 3032 arraysize(kExtraAuthorizationHeaders) / 2, | 3060 arraysize(kExtraAuthorizationHeaders) / 2, |
| 3033 false, | 3061 false, |
| 3034 3, | 3062 3, |
| 3035 LOWEST, | 3063 LOWEST, |
| 3036 false)); | 3064 false)); |
| 3037 MockWrite spdy_writes[] = { | 3065 MockWrite spdy_writes[] = { |
| 3038 CreateMockWrite(*req_get, 1), | 3066 CreateMockWrite(*req_get, 1), CreateMockWrite(*req_get_authorization, 4), |
| 3039 CreateMockWrite(*req_get_authorization, 4), | |
| 3040 }; | 3067 }; |
| 3041 | 3068 |
| 3042 // The first response is a 407 proxy authentication challenge, and the second | 3069 // The first response is a 407 proxy authentication challenge, and the second |
| 3043 // response will be a 200 response since the second request includes a valid | 3070 // response will be a 200 response since the second request includes a valid |
| 3044 // Authorization header. | 3071 // Authorization header. |
| 3045 const char* const kExtraAuthenticationHeaders[] = { | 3072 const char* const kExtraAuthenticationHeaders[] = { |
| 3046 "proxy-authenticate", "Basic realm=\"MyRealm1\"" | 3073 "proxy-authenticate", "Basic realm=\"MyRealm1\""}; |
| 3047 }; | |
| 3048 scoped_ptr<SpdyFrame> resp_authentication( | 3074 scoped_ptr<SpdyFrame> resp_authentication( |
| 3049 spdy_util_.ConstructSpdySynReplyError( | 3075 spdy_util_.ConstructSpdySynReplyError( |
| 3050 "407 Proxy Authentication Required", | 3076 "407 Proxy Authentication Required", |
| 3051 kExtraAuthenticationHeaders, arraysize(kExtraAuthenticationHeaders)/2, | 3077 kExtraAuthenticationHeaders, |
| 3078 arraysize(kExtraAuthenticationHeaders) / 2, |
| 3052 1)); | 3079 1)); |
| 3053 scoped_ptr<SpdyFrame> body_authentication( | 3080 scoped_ptr<SpdyFrame> body_authentication( |
| 3054 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 3081 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 3055 scoped_ptr<SpdyFrame> resp_data( | 3082 scoped_ptr<SpdyFrame> resp_data( |
| 3056 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 3083 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 3057 scoped_ptr<SpdyFrame> body_data(spdy_util_.ConstructSpdyBodyFrame(3, true)); | 3084 scoped_ptr<SpdyFrame> body_data(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 3058 MockRead spdy_reads[] = { | 3085 MockRead spdy_reads[] = { |
| 3059 CreateMockRead(*resp_authentication, 2), | 3086 CreateMockRead(*resp_authentication, 2), |
| 3060 CreateMockRead(*body_authentication, 3), | 3087 CreateMockRead(*body_authentication, 3), |
| 3061 CreateMockRead(*resp_data, 5), | 3088 CreateMockRead(*resp_data, 5), |
| 3062 CreateMockRead(*body_data, 6), | 3089 CreateMockRead(*body_data, 6), |
| 3063 MockRead(ASYNC, 0, 7), | 3090 MockRead(ASYNC, 0, 7), |
| 3064 }; | 3091 }; |
| 3065 | 3092 |
| 3066 OrderedSocketData data( | 3093 OrderedSocketData data( |
| 3067 spdy_reads, arraysize(spdy_reads), | 3094 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3068 spdy_writes, arraysize(spdy_writes)); | |
| 3069 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3095 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3070 | 3096 |
| 3071 SSLSocketDataProvider ssl(ASYNC, OK); | 3097 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3072 ssl.SetNextProto(GetParam()); | 3098 ssl.SetNextProto(GetParam()); |
| 3073 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3099 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3074 | 3100 |
| 3075 TestCompletionCallback callback1; | 3101 TestCompletionCallback callback1; |
| 3076 | 3102 |
| 3077 scoped_ptr<HttpTransaction> trans( | 3103 scoped_ptr<HttpTransaction> trans( |
| 3078 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3104 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3079 | 3105 |
| 3080 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3106 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3081 EXPECT_EQ(ERR_IO_PENDING, rv); | 3107 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3082 | 3108 |
| 3083 rv = callback1.WaitForResult(); | 3109 rv = callback1.WaitForResult(); |
| 3084 EXPECT_EQ(OK, rv); | 3110 EXPECT_EQ(OK, rv); |
| 3085 | 3111 |
| 3086 const HttpResponseInfo* const response = trans->GetResponseInfo(); | 3112 const HttpResponseInfo* const response = trans->GetResponseInfo(); |
| 3087 | 3113 |
| 3088 ASSERT_TRUE(response != NULL); | 3114 ASSERT_TRUE(response != NULL); |
| 3089 ASSERT_TRUE(response->headers.get() != NULL); | 3115 ASSERT_TRUE(response->headers.get() != NULL); |
| 3090 EXPECT_EQ(407, response->headers->response_code()); | 3116 EXPECT_EQ(407, response->headers->response_code()); |
| 3091 EXPECT_TRUE(response->was_fetched_via_spdy); | 3117 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 3092 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3118 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3093 | 3119 |
| 3094 TestCompletionCallback callback2; | 3120 TestCompletionCallback callback2; |
| 3095 | 3121 |
| 3096 rv = trans->RestartWithAuth( | 3122 rv = |
| 3097 AuthCredentials(kFoo, kBar), callback2.callback()); | 3123 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 3098 EXPECT_EQ(ERR_IO_PENDING, rv); | 3124 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3099 | 3125 |
| 3100 rv = callback2.WaitForResult(); | 3126 rv = callback2.WaitForResult(); |
| 3101 EXPECT_EQ(OK, rv); | 3127 EXPECT_EQ(OK, rv); |
| 3102 | 3128 |
| 3103 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); | 3129 const HttpResponseInfo* const response_restart = trans->GetResponseInfo(); |
| 3104 | 3130 |
| 3105 ASSERT_TRUE(response_restart != NULL); | 3131 ASSERT_TRUE(response_restart != NULL); |
| 3106 ASSERT_TRUE(response_restart->headers.get() != NULL); | 3132 ASSERT_TRUE(response_restart->headers.get() != NULL); |
| 3107 EXPECT_EQ(200, response_restart->headers->response_code()); | 3133 EXPECT_EQ(200, response_restart->headers->response_code()); |
| 3108 // The password prompt info should not be set. | 3134 // The password prompt info should not be set. |
| 3109 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); | 3135 EXPECT_TRUE(response_restart->auth_challenge.get() == NULL); |
| 3110 } | 3136 } |
| 3111 | 3137 |
| 3112 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. | 3138 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server. |
| 3113 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { | 3139 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) { |
| 3114 HttpRequestInfo request; | 3140 HttpRequestInfo request; |
| 3115 request.method = "GET"; | 3141 request.method = "GET"; |
| 3116 request.url = GURL("https://www.google.com/"); | 3142 request.url = GURL("https://www.google.com/"); |
| 3117 request.load_flags = 0; | 3143 request.load_flags = 0; |
| 3118 | 3144 |
| 3119 // Configure against https proxy server "proxy:70". | 3145 // Configure against https proxy server "proxy:70". |
| 3120 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3146 session_deps_.proxy_service.reset( |
| 3121 "https://proxy:70")); | 3147 ProxyService::CreateFixed("https://proxy:70")); |
| 3122 CapturingBoundNetLog log; | 3148 CapturingBoundNetLog log; |
| 3123 session_deps_.net_log = log.bound().net_log(); | 3149 session_deps_.net_log = log.bound().net_log(); |
| 3124 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3150 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3125 | 3151 |
| 3126 scoped_ptr<HttpTransaction> trans( | 3152 scoped_ptr<HttpTransaction> trans( |
| 3127 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3153 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3128 | 3154 |
| 3129 // CONNECT to www.google.com:443 via SPDY | 3155 // CONNECT to www.google.com:443 via SPDY |
| 3130 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 3156 scoped_ptr<SpdyFrame> connect( |
| 3131 LOWEST)); | 3157 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 3132 // fetch https://www.google.com/ via HTTP | 3158 // fetch https://www.google.com/ via HTTP |
| 3133 | 3159 |
| 3134 const char get[] = "GET / HTTP/1.1\r\n" | 3160 const char get[] = |
| 3135 "Host: www.google.com\r\n" | 3161 "GET / HTTP/1.1\r\n" |
| 3136 "Connection: keep-alive\r\n\r\n"; | 3162 "Host: www.google.com\r\n" |
| 3163 "Connection: keep-alive\r\n\r\n"; |
| 3137 scoped_ptr<SpdyFrame> wrapped_get( | 3164 scoped_ptr<SpdyFrame> wrapped_get( |
| 3138 spdy_util_.ConstructSpdyBodyFrame(1, get, strlen(get), false)); | 3165 spdy_util_.ConstructSpdyBodyFrame(1, get, strlen(get), false)); |
| 3139 scoped_ptr<SpdyFrame> conn_resp( | 3166 scoped_ptr<SpdyFrame> conn_resp( |
| 3140 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 3167 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 3141 const char resp[] = "HTTP/1.1 200 OK\r\n" | 3168 const char resp[] = |
| 3169 "HTTP/1.1 200 OK\r\n" |
| 3142 "Content-Length: 10\r\n\r\n"; | 3170 "Content-Length: 10\r\n\r\n"; |
| 3143 scoped_ptr<SpdyFrame> wrapped_get_resp( | 3171 scoped_ptr<SpdyFrame> wrapped_get_resp( |
| 3144 spdy_util_.ConstructSpdyBodyFrame(1, resp, strlen(resp), false)); | 3172 spdy_util_.ConstructSpdyBodyFrame(1, resp, strlen(resp), false)); |
| 3145 scoped_ptr<SpdyFrame> wrapped_body( | 3173 scoped_ptr<SpdyFrame> wrapped_body( |
| 3146 spdy_util_.ConstructSpdyBodyFrame(1, "1234567890", 10, false)); | 3174 spdy_util_.ConstructSpdyBodyFrame(1, "1234567890", 10, false)); |
| 3147 scoped_ptr<SpdyFrame> window_update( | 3175 scoped_ptr<SpdyFrame> window_update( |
| 3148 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 3176 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
| 3149 | 3177 |
| 3150 MockWrite spdy_writes[] = { | 3178 MockWrite spdy_writes[] = { |
| 3151 CreateMockWrite(*connect, 1), | 3179 CreateMockWrite(*connect, 1), CreateMockWrite(*wrapped_get, 3), |
| 3152 CreateMockWrite(*wrapped_get, 3), | |
| 3153 CreateMockWrite(*window_update, 5), | 3180 CreateMockWrite(*window_update, 5), |
| 3154 }; | 3181 }; |
| 3155 | 3182 |
| 3156 MockRead spdy_reads[] = { | 3183 MockRead spdy_reads[] = { |
| 3157 CreateMockRead(*conn_resp, 2, ASYNC), | 3184 CreateMockRead(*conn_resp, 2, ASYNC), |
| 3158 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 3185 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
| 3159 CreateMockRead(*wrapped_body, 6, ASYNC), | 3186 CreateMockRead(*wrapped_body, 6, ASYNC), |
| 3160 CreateMockRead(*wrapped_body, 7, ASYNC), | 3187 CreateMockRead(*wrapped_body, 7, ASYNC), |
| 3161 MockRead(ASYNC, 0, 8), | 3188 MockRead(ASYNC, 0, 8), |
| 3162 }; | 3189 }; |
| 3163 | 3190 |
| 3164 OrderedSocketData spdy_data( | 3191 OrderedSocketData spdy_data( |
| 3165 spdy_reads, arraysize(spdy_reads), | 3192 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3166 spdy_writes, arraysize(spdy_writes)); | |
| 3167 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3193 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 3168 | 3194 |
| 3169 SSLSocketDataProvider ssl(ASYNC, OK); | 3195 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3170 ssl.SetNextProto(GetParam()); | 3196 ssl.SetNextProto(GetParam()); |
| 3171 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3197 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3172 SSLSocketDataProvider ssl2(ASYNC, OK); | 3198 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 3173 ssl2.was_npn_negotiated = false; | 3199 ssl2.was_npn_negotiated = false; |
| 3174 ssl2.protocol_negotiated = kProtoUnknown; | 3200 ssl2.protocol_negotiated = kProtoUnknown; |
| 3175 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3201 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 3176 | 3202 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3197 } | 3223 } |
| 3198 | 3224 |
| 3199 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. | 3225 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server. |
| 3200 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { | 3226 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) { |
| 3201 HttpRequestInfo request; | 3227 HttpRequestInfo request; |
| 3202 request.method = "GET"; | 3228 request.method = "GET"; |
| 3203 request.url = GURL("https://www.google.com/"); | 3229 request.url = GURL("https://www.google.com/"); |
| 3204 request.load_flags = 0; | 3230 request.load_flags = 0; |
| 3205 | 3231 |
| 3206 // Configure against https proxy server "proxy:70". | 3232 // Configure against https proxy server "proxy:70". |
| 3207 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3233 session_deps_.proxy_service.reset( |
| 3208 "https://proxy:70")); | 3234 ProxyService::CreateFixed("https://proxy:70")); |
| 3209 CapturingBoundNetLog log; | 3235 CapturingBoundNetLog log; |
| 3210 session_deps_.net_log = log.bound().net_log(); | 3236 session_deps_.net_log = log.bound().net_log(); |
| 3211 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3237 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3212 | 3238 |
| 3213 scoped_ptr<HttpTransaction> trans( | 3239 scoped_ptr<HttpTransaction> trans( |
| 3214 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3240 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3215 | 3241 |
| 3216 // CONNECT to www.google.com:443 via SPDY | 3242 // CONNECT to www.google.com:443 via SPDY |
| 3217 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 3243 scoped_ptr<SpdyFrame> connect( |
| 3218 LOWEST)); | 3244 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 3219 // fetch https://www.google.com/ via SPDY | 3245 // fetch https://www.google.com/ via SPDY |
| 3220 const char* const kMyUrl = "https://www.google.com/"; | 3246 const char* const kMyUrl = "https://www.google.com/"; |
| 3221 scoped_ptr<SpdyFrame> get( | 3247 scoped_ptr<SpdyFrame> get( |
| 3222 spdy_util_.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); | 3248 spdy_util_.ConstructSpdyGet(kMyUrl, false, 1, LOWEST)); |
| 3223 scoped_ptr<SpdyFrame> wrapped_get( | 3249 scoped_ptr<SpdyFrame> wrapped_get( |
| 3224 spdy_util_.ConstructWrappedSpdyFrame(get, 1)); | 3250 spdy_util_.ConstructWrappedSpdyFrame(get, 1)); |
| 3225 scoped_ptr<SpdyFrame> conn_resp( | 3251 scoped_ptr<SpdyFrame> conn_resp( |
| 3226 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 3252 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 3227 scoped_ptr<SpdyFrame> get_resp( | 3253 scoped_ptr<SpdyFrame> get_resp( |
| 3228 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 3254 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 3229 scoped_ptr<SpdyFrame> wrapped_get_resp( | 3255 scoped_ptr<SpdyFrame> wrapped_get_resp( |
| 3230 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); | 3256 spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1)); |
| 3231 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 3257 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 3232 scoped_ptr<SpdyFrame> wrapped_body( | 3258 scoped_ptr<SpdyFrame> wrapped_body( |
| 3233 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); | 3259 spdy_util_.ConstructWrappedSpdyFrame(body, 1)); |
| 3234 scoped_ptr<SpdyFrame> window_update_get_resp( | 3260 scoped_ptr<SpdyFrame> window_update_get_resp( |
| 3235 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); | 3261 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp->size())); |
| 3236 scoped_ptr<SpdyFrame> window_update_body( | 3262 scoped_ptr<SpdyFrame> window_update_body( |
| 3237 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); | 3263 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body->size())); |
| 3238 | 3264 |
| 3239 MockWrite spdy_writes[] = { | 3265 MockWrite spdy_writes[] = { |
| 3240 CreateMockWrite(*connect, 1), | 3266 CreateMockWrite(*connect, 1), CreateMockWrite(*wrapped_get, 3), |
| 3241 CreateMockWrite(*wrapped_get, 3), | |
| 3242 CreateMockWrite(*window_update_get_resp, 5), | 3267 CreateMockWrite(*window_update_get_resp, 5), |
| 3243 CreateMockWrite(*window_update_body, 7), | 3268 CreateMockWrite(*window_update_body, 7), |
| 3244 }; | 3269 }; |
| 3245 | 3270 |
| 3246 MockRead spdy_reads[] = { | 3271 MockRead spdy_reads[] = { |
| 3247 CreateMockRead(*conn_resp, 2, ASYNC), | 3272 CreateMockRead(*conn_resp, 2, ASYNC), |
| 3248 CreateMockRead(*wrapped_get_resp, 4, ASYNC), | 3273 CreateMockRead(*wrapped_get_resp, 4, ASYNC), |
| 3249 CreateMockRead(*wrapped_body, 6, ASYNC), | 3274 CreateMockRead(*wrapped_body, 6, ASYNC), MockRead(ASYNC, 0, 8), |
| 3250 MockRead(ASYNC, 0, 8), | |
| 3251 }; | 3275 }; |
| 3252 | 3276 |
| 3253 OrderedSocketData spdy_data( | 3277 OrderedSocketData spdy_data( |
| 3254 spdy_reads, arraysize(spdy_reads), | 3278 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3255 spdy_writes, arraysize(spdy_writes)); | |
| 3256 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3279 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 3257 | 3280 |
| 3258 SSLSocketDataProvider ssl(ASYNC, OK); | 3281 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3259 ssl.SetNextProto(GetParam()); | 3282 ssl.SetNextProto(GetParam()); |
| 3260 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3283 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3261 SSLSocketDataProvider ssl2(ASYNC, OK); | 3284 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 3262 ssl2.SetNextProto(GetParam()); | 3285 ssl2.SetNextProto(GetParam()); |
| 3263 ssl2.protocol_negotiated = GetParam(); | 3286 ssl2.protocol_negotiated = GetParam(); |
| 3264 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3287 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 3265 | 3288 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3286 } | 3309 } |
| 3287 | 3310 |
| 3288 // Test a SPDY CONNECT failure through an HTTPS Proxy. | 3311 // Test a SPDY CONNECT failure through an HTTPS Proxy. |
| 3289 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { | 3312 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) { |
| 3290 HttpRequestInfo request; | 3313 HttpRequestInfo request; |
| 3291 request.method = "GET"; | 3314 request.method = "GET"; |
| 3292 request.url = GURL("https://www.google.com/"); | 3315 request.url = GURL("https://www.google.com/"); |
| 3293 request.load_flags = 0; | 3316 request.load_flags = 0; |
| 3294 | 3317 |
| 3295 // Configure against https proxy server "proxy:70". | 3318 // Configure against https proxy server "proxy:70". |
| 3296 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3319 session_deps_.proxy_service.reset( |
| 3297 "https://proxy:70")); | 3320 ProxyService::CreateFixed("https://proxy:70")); |
| 3298 CapturingBoundNetLog log; | 3321 CapturingBoundNetLog log; |
| 3299 session_deps_.net_log = log.bound().net_log(); | 3322 session_deps_.net_log = log.bound().net_log(); |
| 3300 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3323 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3301 | 3324 |
| 3302 scoped_ptr<HttpTransaction> trans( | 3325 scoped_ptr<HttpTransaction> trans( |
| 3303 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3326 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3304 | 3327 |
| 3305 // CONNECT to www.google.com:443 via SPDY | 3328 // CONNECT to www.google.com:443 via SPDY |
| 3306 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 3329 scoped_ptr<SpdyFrame> connect( |
| 3307 LOWEST)); | 3330 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 3308 scoped_ptr<SpdyFrame> get( | 3331 scoped_ptr<SpdyFrame> get( |
| 3309 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 3332 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 3310 | 3333 |
| 3311 MockWrite spdy_writes[] = { | 3334 MockWrite spdy_writes[] = { |
| 3312 CreateMockWrite(*connect, 1), | 3335 CreateMockWrite(*connect, 1), CreateMockWrite(*get, 3), |
| 3313 CreateMockWrite(*get, 3), | |
| 3314 }; | 3336 }; |
| 3315 | 3337 |
| 3316 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError(1)); | 3338 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError(1)); |
| 3317 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 3339 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 3318 MockRead spdy_reads[] = { | 3340 MockRead spdy_reads[] = { |
| 3319 CreateMockRead(*resp, 2, ASYNC), | 3341 CreateMockRead(*resp, 2, ASYNC), MockRead(ASYNC, 0, 4), |
| 3320 MockRead(ASYNC, 0, 4), | |
| 3321 }; | 3342 }; |
| 3322 | 3343 |
| 3323 OrderedSocketData spdy_data( | 3344 OrderedSocketData spdy_data( |
| 3324 spdy_reads, arraysize(spdy_reads), | 3345 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3325 spdy_writes, arraysize(spdy_writes)); | |
| 3326 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 3346 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 3327 | 3347 |
| 3328 SSLSocketDataProvider ssl(ASYNC, OK); | 3348 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3329 ssl.SetNextProto(GetParam()); | 3349 ssl.SetNextProto(GetParam()); |
| 3330 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3350 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3331 SSLSocketDataProvider ssl2(ASYNC, OK); | 3351 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 3332 ssl2.SetNextProto(GetParam()); | 3352 ssl2.SetNextProto(GetParam()); |
| 3333 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 3353 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 3334 | 3354 |
| 3335 TestCompletionCallback callback1; | 3355 TestCompletionCallback callback1; |
| 3336 | 3356 |
| 3337 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3357 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3338 EXPECT_EQ(ERR_IO_PENDING, rv); | 3358 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3339 | 3359 |
| 3340 rv = callback1.WaitForResult(); | 3360 rv = callback1.WaitForResult(); |
| 3341 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 3361 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 3342 | 3362 |
| 3343 // TODO(ttuttle): Anything else to check here? | 3363 // TODO(ttuttle): Anything else to check here? |
| 3344 } | 3364 } |
| 3345 | 3365 |
| 3346 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 3366 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
| 3347 // HTTPS Proxy to different servers. | 3367 // HTTPS Proxy to different servers. |
| 3348 TEST_P(HttpNetworkTransactionTest, | 3368 TEST_P(HttpNetworkTransactionTest, |
| 3349 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { | 3369 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsTwoServers) { |
| 3350 // Configure against https proxy server "proxy:70". | 3370 // Configure against https proxy server "proxy:70". |
| 3351 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3371 session_deps_.proxy_service.reset( |
| 3352 "https://proxy:70")); | 3372 ProxyService::CreateFixed("https://proxy:70")); |
| 3353 CapturingBoundNetLog log; | 3373 CapturingBoundNetLog log; |
| 3354 session_deps_.net_log = log.bound().net_log(); | 3374 session_deps_.net_log = log.bound().net_log(); |
| 3355 scoped_refptr<HttpNetworkSession> session( | 3375 scoped_refptr<HttpNetworkSession> session( |
| 3356 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3376 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
| 3357 | 3377 |
| 3358 HttpRequestInfo request1; | 3378 HttpRequestInfo request1; |
| 3359 request1.method = "GET"; | 3379 request1.method = "GET"; |
| 3360 request1.url = GURL("https://www.google.com/"); | 3380 request1.url = GURL("https://www.google.com/"); |
| 3361 request1.load_flags = 0; | 3381 request1.load_flags = 0; |
| 3362 | 3382 |
| 3363 HttpRequestInfo request2; | 3383 HttpRequestInfo request2; |
| 3364 request2.method = "GET"; | 3384 request2.method = "GET"; |
| 3365 request2.url = GURL("https://news.google.com/"); | 3385 request2.url = GURL("https://news.google.com/"); |
| 3366 request2.load_flags = 0; | 3386 request2.load_flags = 0; |
| 3367 | 3387 |
| 3368 // CONNECT to www.google.com:443 via SPDY. | 3388 // CONNECT to www.google.com:443 via SPDY. |
| 3369 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 3389 scoped_ptr<SpdyFrame> connect1( |
| 3370 LOWEST)); | 3390 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 3371 scoped_ptr<SpdyFrame> conn_resp1( | 3391 scoped_ptr<SpdyFrame> conn_resp1( |
| 3372 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 3392 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 3373 | 3393 |
| 3374 // Fetch https://www.google.com/ via HTTP. | 3394 // Fetch https://www.google.com/ via HTTP. |
| 3375 const char get1[] = "GET / HTTP/1.1\r\n" | 3395 const char get1[] = |
| 3396 "GET / HTTP/1.1\r\n" |
| 3376 "Host: www.google.com\r\n" | 3397 "Host: www.google.com\r\n" |
| 3377 "Connection: keep-alive\r\n\r\n"; | 3398 "Connection: keep-alive\r\n\r\n"; |
| 3378 scoped_ptr<SpdyFrame> wrapped_get1( | 3399 scoped_ptr<SpdyFrame> wrapped_get1( |
| 3379 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); | 3400 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); |
| 3380 const char resp1[] = "HTTP/1.1 200 OK\r\n" | 3401 const char resp1[] = |
| 3402 "HTTP/1.1 200 OK\r\n" |
| 3381 "Content-Length: 1\r\n\r\n"; | 3403 "Content-Length: 1\r\n\r\n"; |
| 3382 scoped_ptr<SpdyFrame> wrapped_get_resp1( | 3404 scoped_ptr<SpdyFrame> wrapped_get_resp1( |
| 3383 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); | 3405 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); |
| 3384 scoped_ptr<SpdyFrame> wrapped_body1( | 3406 scoped_ptr<SpdyFrame> wrapped_body1( |
| 3385 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); | 3407 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); |
| 3386 scoped_ptr<SpdyFrame> window_update( | 3408 scoped_ptr<SpdyFrame> window_update( |
| 3387 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); | 3409 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); |
| 3388 | 3410 |
| 3389 // CONNECT to news.google.com:443 via SPDY. | 3411 // CONNECT to news.google.com:443 via SPDY. |
| 3390 SpdySynStreamIR connect2_ir(3); | 3412 SpdySynStreamIR connect2_ir(3); |
| 3391 spdy_util_.SetPriority(LOWEST, &connect2_ir); | 3413 spdy_util_.SetPriority(LOWEST, &connect2_ir); |
| 3392 connect2_ir.SetHeader(spdy_util_.GetMethodKey(), "CONNECT"); | 3414 connect2_ir.SetHeader(spdy_util_.GetMethodKey(), "CONNECT"); |
| 3393 connect2_ir.SetHeader(spdy_util_.GetPathKey(), "news.google.com:443"); | 3415 connect2_ir.SetHeader(spdy_util_.GetPathKey(), "news.google.com:443"); |
| 3394 connect2_ir.SetHeader(spdy_util_.GetHostKey(), "news.google.com"); | 3416 connect2_ir.SetHeader(spdy_util_.GetHostKey(), "news.google.com"); |
| 3395 spdy_util_.MaybeAddVersionHeader(&connect2_ir); | 3417 spdy_util_.MaybeAddVersionHeader(&connect2_ir); |
| 3396 scoped_ptr<SpdyFrame> connect2( | 3418 scoped_ptr<SpdyFrame> connect2( |
| 3397 spdy_util_.CreateFramer(false)->SerializeFrame(connect2_ir)); | 3419 spdy_util_.CreateFramer(false)->SerializeFrame(connect2_ir)); |
| 3398 | 3420 |
| 3399 scoped_ptr<SpdyFrame> conn_resp2( | 3421 scoped_ptr<SpdyFrame> conn_resp2( |
| 3400 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 3422 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 3401 | 3423 |
| 3402 // Fetch https://news.google.com/ via HTTP. | 3424 // Fetch https://news.google.com/ via HTTP. |
| 3403 const char get2[] = "GET / HTTP/1.1\r\n" | 3425 const char get2[] = |
| 3426 "GET / HTTP/1.1\r\n" |
| 3404 "Host: news.google.com\r\n" | 3427 "Host: news.google.com\r\n" |
| 3405 "Connection: keep-alive\r\n\r\n"; | 3428 "Connection: keep-alive\r\n\r\n"; |
| 3406 scoped_ptr<SpdyFrame> wrapped_get2( | 3429 scoped_ptr<SpdyFrame> wrapped_get2( |
| 3407 spdy_util_.ConstructSpdyBodyFrame(3, get2, strlen(get2), false)); | 3430 spdy_util_.ConstructSpdyBodyFrame(3, get2, strlen(get2), false)); |
| 3408 const char resp2[] = "HTTP/1.1 200 OK\r\n" | 3431 const char resp2[] = |
| 3432 "HTTP/1.1 200 OK\r\n" |
| 3409 "Content-Length: 2\r\n\r\n"; | 3433 "Content-Length: 2\r\n\r\n"; |
| 3410 scoped_ptr<SpdyFrame> wrapped_get_resp2( | 3434 scoped_ptr<SpdyFrame> wrapped_get_resp2( |
| 3411 spdy_util_.ConstructSpdyBodyFrame(3, resp2, strlen(resp2), false)); | 3435 spdy_util_.ConstructSpdyBodyFrame(3, resp2, strlen(resp2), false)); |
| 3412 scoped_ptr<SpdyFrame> wrapped_body2( | 3436 scoped_ptr<SpdyFrame> wrapped_body2( |
| 3413 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, false)); | 3437 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, false)); |
| 3414 | 3438 |
| 3415 MockWrite spdy_writes[] = { | 3439 MockWrite spdy_writes[] = { |
| 3416 CreateMockWrite(*connect1, 0), | 3440 CreateMockWrite(*connect1, 0), CreateMockWrite(*wrapped_get1, 2), |
| 3417 CreateMockWrite(*wrapped_get1, 2), | 3441 CreateMockWrite(*connect2, 5), CreateMockWrite(*wrapped_get2, 7), |
| 3418 CreateMockWrite(*connect2, 5), | |
| 3419 CreateMockWrite(*wrapped_get2, 7), | |
| 3420 }; | 3442 }; |
| 3421 | 3443 |
| 3422 MockRead spdy_reads[] = { | 3444 MockRead spdy_reads[] = { |
| 3423 CreateMockRead(*conn_resp1, 1, ASYNC), | 3445 CreateMockRead(*conn_resp1, 1, ASYNC), |
| 3424 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), | 3446 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), |
| 3425 CreateMockRead(*wrapped_body1, 4, ASYNC), | 3447 CreateMockRead(*wrapped_body1, 4, ASYNC), |
| 3426 CreateMockRead(*conn_resp2, 6, ASYNC), | 3448 CreateMockRead(*conn_resp2, 6, ASYNC), |
| 3427 CreateMockRead(*wrapped_get_resp2, 8, ASYNC), | 3449 CreateMockRead(*wrapped_get_resp2, 8, ASYNC), |
| 3428 CreateMockRead(*wrapped_body2, 9, ASYNC), | 3450 CreateMockRead(*wrapped_body2, 9, ASYNC), |
| 3429 MockRead(ASYNC, 0, 10), | 3451 MockRead(ASYNC, 0, 10), |
| 3430 }; | 3452 }; |
| 3431 | 3453 |
| 3432 DeterministicSocketData spdy_data( | 3454 DeterministicSocketData spdy_data( |
| 3433 spdy_reads, arraysize(spdy_reads), | 3455 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3434 spdy_writes, arraysize(spdy_writes)); | |
| 3435 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3456 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
| 3436 | 3457 |
| 3437 SSLSocketDataProvider ssl(ASYNC, OK); | 3458 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3438 ssl.SetNextProto(GetParam()); | 3459 ssl.SetNextProto(GetParam()); |
| 3439 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3460 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3440 SSLSocketDataProvider ssl2(ASYNC, OK); | 3461 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 3441 ssl2.was_npn_negotiated = false; | 3462 ssl2.was_npn_negotiated = false; |
| 3442 ssl2.protocol_negotiated = kProtoUnknown; | 3463 ssl2.protocol_negotiated = kProtoUnknown; |
| 3443 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 3464 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 3444 SSLSocketDataProvider ssl3(ASYNC, OK); | 3465 SSLSocketDataProvider ssl3(ASYNC, OK); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3492 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 3513 EXPECT_NE(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
| 3493 | 3514 |
| 3494 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 3515 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
| 3495 } | 3516 } |
| 3496 | 3517 |
| 3497 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY | 3518 // Test load timing in the case of two HTTPS (non-SPDY) requests through a SPDY |
| 3498 // HTTPS Proxy to the same server. | 3519 // HTTPS Proxy to the same server. |
| 3499 TEST_P(HttpNetworkTransactionTest, | 3520 TEST_P(HttpNetworkTransactionTest, |
| 3500 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsSameServer) { | 3521 HttpsProxySpdyConnectHttpsLoadTimingTwoRequestsSameServer) { |
| 3501 // Configure against https proxy server "proxy:70". | 3522 // Configure against https proxy server "proxy:70". |
| 3502 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3523 session_deps_.proxy_service.reset( |
| 3503 "https://proxy:70")); | 3524 ProxyService::CreateFixed("https://proxy:70")); |
| 3504 CapturingBoundNetLog log; | 3525 CapturingBoundNetLog log; |
| 3505 session_deps_.net_log = log.bound().net_log(); | 3526 session_deps_.net_log = log.bound().net_log(); |
| 3506 scoped_refptr<HttpNetworkSession> session( | 3527 scoped_refptr<HttpNetworkSession> session( |
| 3507 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3528 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
| 3508 | 3529 |
| 3509 HttpRequestInfo request1; | 3530 HttpRequestInfo request1; |
| 3510 request1.method = "GET"; | 3531 request1.method = "GET"; |
| 3511 request1.url = GURL("https://www.google.com/"); | 3532 request1.url = GURL("https://www.google.com/"); |
| 3512 request1.load_flags = 0; | 3533 request1.load_flags = 0; |
| 3513 | 3534 |
| 3514 HttpRequestInfo request2; | 3535 HttpRequestInfo request2; |
| 3515 request2.method = "GET"; | 3536 request2.method = "GET"; |
| 3516 request2.url = GURL("https://www.google.com/2"); | 3537 request2.url = GURL("https://www.google.com/2"); |
| 3517 request2.load_flags = 0; | 3538 request2.load_flags = 0; |
| 3518 | 3539 |
| 3519 // CONNECT to www.google.com:443 via SPDY. | 3540 // CONNECT to www.google.com:443 via SPDY. |
| 3520 scoped_ptr<SpdyFrame> connect1(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 3541 scoped_ptr<SpdyFrame> connect1( |
| 3521 LOWEST)); | 3542 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 3522 scoped_ptr<SpdyFrame> conn_resp1( | 3543 scoped_ptr<SpdyFrame> conn_resp1( |
| 3523 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 3544 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 3524 | 3545 |
| 3525 // Fetch https://www.google.com/ via HTTP. | 3546 // Fetch https://www.google.com/ via HTTP. |
| 3526 const char get1[] = "GET / HTTP/1.1\r\n" | 3547 const char get1[] = |
| 3548 "GET / HTTP/1.1\r\n" |
| 3527 "Host: www.google.com\r\n" | 3549 "Host: www.google.com\r\n" |
| 3528 "Connection: keep-alive\r\n\r\n"; | 3550 "Connection: keep-alive\r\n\r\n"; |
| 3529 scoped_ptr<SpdyFrame> wrapped_get1( | 3551 scoped_ptr<SpdyFrame> wrapped_get1( |
| 3530 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); | 3552 spdy_util_.ConstructSpdyBodyFrame(1, get1, strlen(get1), false)); |
| 3531 const char resp1[] = "HTTP/1.1 200 OK\r\n" | 3553 const char resp1[] = |
| 3554 "HTTP/1.1 200 OK\r\n" |
| 3532 "Content-Length: 1\r\n\r\n"; | 3555 "Content-Length: 1\r\n\r\n"; |
| 3533 scoped_ptr<SpdyFrame> wrapped_get_resp1( | 3556 scoped_ptr<SpdyFrame> wrapped_get_resp1( |
| 3534 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); | 3557 spdy_util_.ConstructSpdyBodyFrame(1, resp1, strlen(resp1), false)); |
| 3535 scoped_ptr<SpdyFrame> wrapped_body1( | 3558 scoped_ptr<SpdyFrame> wrapped_body1( |
| 3536 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); | 3559 spdy_util_.ConstructSpdyBodyFrame(1, "1", 1, false)); |
| 3537 scoped_ptr<SpdyFrame> window_update( | 3560 scoped_ptr<SpdyFrame> window_update( |
| 3538 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); | 3561 spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp1->size())); |
| 3539 | 3562 |
| 3540 // Fetch https://www.google.com/2 via HTTP. | 3563 // Fetch https://www.google.com/2 via HTTP. |
| 3541 const char get2[] = "GET /2 HTTP/1.1\r\n" | 3564 const char get2[] = |
| 3565 "GET /2 HTTP/1.1\r\n" |
| 3542 "Host: www.google.com\r\n" | 3566 "Host: www.google.com\r\n" |
| 3543 "Connection: keep-alive\r\n\r\n"; | 3567 "Connection: keep-alive\r\n\r\n"; |
| 3544 scoped_ptr<SpdyFrame> wrapped_get2( | 3568 scoped_ptr<SpdyFrame> wrapped_get2( |
| 3545 spdy_util_.ConstructSpdyBodyFrame(1, get2, strlen(get2), false)); | 3569 spdy_util_.ConstructSpdyBodyFrame(1, get2, strlen(get2), false)); |
| 3546 const char resp2[] = "HTTP/1.1 200 OK\r\n" | 3570 const char resp2[] = |
| 3571 "HTTP/1.1 200 OK\r\n" |
| 3547 "Content-Length: 2\r\n\r\n"; | 3572 "Content-Length: 2\r\n\r\n"; |
| 3548 scoped_ptr<SpdyFrame> wrapped_get_resp2( | 3573 scoped_ptr<SpdyFrame> wrapped_get_resp2( |
| 3549 spdy_util_.ConstructSpdyBodyFrame(1, resp2, strlen(resp2), false)); | 3574 spdy_util_.ConstructSpdyBodyFrame(1, resp2, strlen(resp2), false)); |
| 3550 scoped_ptr<SpdyFrame> wrapped_body2( | 3575 scoped_ptr<SpdyFrame> wrapped_body2( |
| 3551 spdy_util_.ConstructSpdyBodyFrame(1, "22", 2, false)); | 3576 spdy_util_.ConstructSpdyBodyFrame(1, "22", 2, false)); |
| 3552 | 3577 |
| 3553 MockWrite spdy_writes[] = { | 3578 MockWrite spdy_writes[] = { |
| 3554 CreateMockWrite(*connect1, 0), | 3579 CreateMockWrite(*connect1, 0), CreateMockWrite(*wrapped_get1, 2), |
| 3555 CreateMockWrite(*wrapped_get1, 2), | |
| 3556 CreateMockWrite(*wrapped_get2, 5), | 3580 CreateMockWrite(*wrapped_get2, 5), |
| 3557 }; | 3581 }; |
| 3558 | 3582 |
| 3559 MockRead spdy_reads[] = { | 3583 MockRead spdy_reads[] = { |
| 3560 CreateMockRead(*conn_resp1, 1, ASYNC), | 3584 CreateMockRead(*conn_resp1, 1, ASYNC), |
| 3561 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), | 3585 CreateMockRead(*wrapped_get_resp1, 3, ASYNC), |
| 3562 CreateMockRead(*wrapped_body1, 4, ASYNC), | 3586 CreateMockRead(*wrapped_body1, 4, ASYNC), |
| 3563 CreateMockRead(*wrapped_get_resp2, 6, ASYNC), | 3587 CreateMockRead(*wrapped_get_resp2, 6, ASYNC), |
| 3564 CreateMockRead(*wrapped_body2, 7, ASYNC), | 3588 CreateMockRead(*wrapped_body2, 7, ASYNC), |
| 3565 MockRead(ASYNC, 0, 8), | 3589 MockRead(ASYNC, 0, 8), |
| 3566 }; | 3590 }; |
| 3567 | 3591 |
| 3568 DeterministicSocketData spdy_data( | 3592 DeterministicSocketData spdy_data( |
| 3569 spdy_reads, arraysize(spdy_reads), | 3593 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3570 spdy_writes, arraysize(spdy_writes)); | |
| 3571 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3594 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
| 3572 | 3595 |
| 3573 SSLSocketDataProvider ssl(ASYNC, OK); | 3596 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3574 ssl.SetNextProto(GetParam()); | 3597 ssl.SetNextProto(GetParam()); |
| 3575 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3598 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3576 SSLSocketDataProvider ssl2(ASYNC, OK); | 3599 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 3577 ssl2.was_npn_negotiated = false; | 3600 ssl2.was_npn_negotiated = false; |
| 3578 ssl2.protocol_negotiated = kProtoUnknown; | 3601 ssl2.protocol_negotiated = kProtoUnknown; |
| 3579 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 3602 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 3580 | 3603 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3620 TestLoadTimingReused(load_timing_info2); | 3643 TestLoadTimingReused(load_timing_info2); |
| 3621 | 3644 |
| 3622 // The requests should have the same ID. | 3645 // The requests should have the same ID. |
| 3623 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); | 3646 EXPECT_EQ(load_timing_info.socket_log_id, load_timing_info2.socket_log_id); |
| 3624 | 3647 |
| 3625 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); | 3648 EXPECT_EQ(2, trans2->Read(buf.get(), 256, callback.callback())); |
| 3626 } | 3649 } |
| 3627 | 3650 |
| 3628 // Test load timing in the case of of two HTTP requests through a SPDY HTTPS | 3651 // Test load timing in the case of of two HTTP requests through a SPDY HTTPS |
| 3629 // Proxy to different servers. | 3652 // Proxy to different servers. |
| 3630 TEST_P(HttpNetworkTransactionTest, | 3653 TEST_P(HttpNetworkTransactionTest, HttpsProxySpdyLoadTimingTwoHttpRequests) { |
| 3631 HttpsProxySpdyLoadTimingTwoHttpRequests) { | |
| 3632 // Configure against https proxy server "proxy:70". | 3654 // Configure against https proxy server "proxy:70". |
| 3633 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 3655 session_deps_.proxy_service.reset( |
| 3634 "https://proxy:70")); | 3656 ProxyService::CreateFixed("https://proxy:70")); |
| 3635 CapturingBoundNetLog log; | 3657 CapturingBoundNetLog log; |
| 3636 session_deps_.net_log = log.bound().net_log(); | 3658 session_deps_.net_log = log.bound().net_log(); |
| 3637 scoped_refptr<HttpNetworkSession> session( | 3659 scoped_refptr<HttpNetworkSession> session( |
| 3638 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); | 3660 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps_)); |
| 3639 | 3661 |
| 3640 HttpRequestInfo request1; | 3662 HttpRequestInfo request1; |
| 3641 request1.method = "GET"; | 3663 request1.method = "GET"; |
| 3642 request1.url = GURL("http://www.google.com/"); | 3664 request1.url = GURL("http://www.google.com/"); |
| 3643 request1.load_flags = 0; | 3665 request1.load_flags = 0; |
| 3644 | 3666 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3661 scoped_ptr<SpdyHeaderBlock> headers2( | 3683 scoped_ptr<SpdyHeaderBlock> headers2( |
| 3662 spdy_util_.ConstructGetHeaderBlockForProxy("http://news.google.com/")); | 3684 spdy_util_.ConstructGetHeaderBlockForProxy("http://news.google.com/")); |
| 3663 scoped_ptr<SpdyFrame> get2(spdy_util_.ConstructSpdyControlFrame( | 3685 scoped_ptr<SpdyFrame> get2(spdy_util_.ConstructSpdyControlFrame( |
| 3664 headers2.Pass(), false, 3, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); | 3686 headers2.Pass(), false, 3, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); |
| 3665 scoped_ptr<SpdyFrame> get_resp2( | 3687 scoped_ptr<SpdyFrame> get_resp2( |
| 3666 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 3688 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 3667 scoped_ptr<SpdyFrame> body2( | 3689 scoped_ptr<SpdyFrame> body2( |
| 3668 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, true)); | 3690 spdy_util_.ConstructSpdyBodyFrame(3, "22", 2, true)); |
| 3669 | 3691 |
| 3670 MockWrite spdy_writes[] = { | 3692 MockWrite spdy_writes[] = { |
| 3671 CreateMockWrite(*get1, 0), | 3693 CreateMockWrite(*get1, 0), CreateMockWrite(*get2, 3), |
| 3672 CreateMockWrite(*get2, 3), | |
| 3673 }; | 3694 }; |
| 3674 | 3695 |
| 3675 MockRead spdy_reads[] = { | 3696 MockRead spdy_reads[] = { |
| 3676 CreateMockRead(*get_resp1, 1, ASYNC), | 3697 CreateMockRead(*get_resp1, 1, ASYNC), CreateMockRead(*body1, 2, ASYNC), |
| 3677 CreateMockRead(*body1, 2, ASYNC), | 3698 CreateMockRead(*get_resp2, 4, ASYNC), CreateMockRead(*body2, 5, ASYNC), |
| 3678 CreateMockRead(*get_resp2, 4, ASYNC), | 3699 MockRead(ASYNC, 0, 6), |
| 3679 CreateMockRead(*body2, 5, ASYNC), | |
| 3680 MockRead(ASYNC, 0, 6), | |
| 3681 }; | 3700 }; |
| 3682 | 3701 |
| 3683 DeterministicSocketData spdy_data( | 3702 DeterministicSocketData spdy_data( |
| 3684 spdy_reads, arraysize(spdy_reads), | 3703 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 3685 spdy_writes, arraysize(spdy_writes)); | |
| 3686 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); | 3704 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&spdy_data); |
| 3687 | 3705 |
| 3688 SSLSocketDataProvider ssl(ASYNC, OK); | 3706 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3689 ssl.SetNextProto(GetParam()); | 3707 ssl.SetNextProto(GetParam()); |
| 3690 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); | 3708 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3691 | 3709 |
| 3692 TestCompletionCallback callback; | 3710 TestCompletionCallback callback; |
| 3693 | 3711 |
| 3694 scoped_ptr<HttpTransaction> trans( | 3712 scoped_ptr<HttpTransaction> trans( |
| 3695 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3713 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3749 | 3767 |
| 3750 // Configure against https proxy server "myproxy:70". | 3768 // Configure against https proxy server "myproxy:70". |
| 3751 session_deps_.proxy_service.reset( | 3769 session_deps_.proxy_service.reset( |
| 3752 ProxyService::CreateFixed("https://myproxy:70")); | 3770 ProxyService::CreateFixed("https://myproxy:70")); |
| 3753 CapturingBoundNetLog log; | 3771 CapturingBoundNetLog log; |
| 3754 session_deps_.net_log = log.bound().net_log(); | 3772 session_deps_.net_log = log.bound().net_log(); |
| 3755 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3773 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3756 | 3774 |
| 3757 // Since we have proxy, should use full url | 3775 // Since we have proxy, should use full url |
| 3758 MockWrite data_writes1[] = { | 3776 MockWrite data_writes1[] = { |
| 3759 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 3777 MockWrite( |
| 3760 "Host: www.google.com\r\n" | 3778 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 3761 "Proxy-Connection: keep-alive\r\n\r\n"), | 3779 "Host: www.google.com\r\n" |
| 3780 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 3762 | 3781 |
| 3763 // After calling trans->RestartWithAuth(), this is the request we should | 3782 // After calling trans->RestartWithAuth(), this is the request we should |
| 3764 // be issuing -- the final header line contains the credentials. | 3783 // be issuing -- the final header line contains the credentials. |
| 3765 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 3784 MockWrite( |
| 3766 "Host: www.google.com\r\n" | 3785 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 3767 "Proxy-Connection: keep-alive\r\n" | 3786 "Host: www.google.com\r\n" |
| 3768 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 3787 "Proxy-Connection: keep-alive\r\n" |
| 3788 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 3769 }; | 3789 }; |
| 3770 | 3790 |
| 3771 // The proxy responds to the GET with a 407, using a persistent | 3791 // The proxy responds to the GET with a 407, using a persistent |
| 3772 // connection. | 3792 // connection. |
| 3773 MockRead data_reads1[] = { | 3793 MockRead data_reads1[] = { |
| 3774 // No credentials. | 3794 // No credentials. |
| 3775 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 3795 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 3776 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 3796 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 3777 MockRead("Proxy-Connection: keep-alive\r\n"), | 3797 MockRead("Proxy-Connection: keep-alive\r\n"), |
| 3778 MockRead("Content-Length: 0\r\n\r\n"), | 3798 MockRead("Content-Length: 0\r\n\r\n"), |
| 3779 | 3799 MockRead("HTTP/1.1 200 OK\r\n"), |
| 3780 MockRead("HTTP/1.1 200 OK\r\n"), | 3800 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 3781 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 3801 MockRead("Content-Length: 100\r\n\r\n"), |
| 3782 MockRead("Content-Length: 100\r\n\r\n"), | 3802 MockRead(SYNCHRONOUS, OK), |
| 3783 MockRead(SYNCHRONOUS, OK), | |
| 3784 }; | 3803 }; |
| 3785 | 3804 |
| 3786 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 3805 StaticSocketDataProvider data1(data_reads1, |
| 3787 data_writes1, arraysize(data_writes1)); | 3806 arraysize(data_reads1), |
| 3807 data_writes1, |
| 3808 arraysize(data_writes1)); |
| 3788 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 3809 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 3789 SSLSocketDataProvider ssl(ASYNC, OK); | 3810 SSLSocketDataProvider ssl(ASYNC, OK); |
| 3790 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 3811 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 3791 | 3812 |
| 3792 TestCompletionCallback callback1; | 3813 TestCompletionCallback callback1; |
| 3793 | 3814 |
| 3794 scoped_ptr<HttpTransaction> trans( | 3815 scoped_ptr<HttpTransaction> trans( |
| 3795 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3816 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3796 | 3817 |
| 3797 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 3818 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 3798 EXPECT_EQ(ERR_IO_PENDING, rv); | 3819 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3799 | 3820 |
| 3800 rv = callback1.WaitForResult(); | 3821 rv = callback1.WaitForResult(); |
| 3801 EXPECT_EQ(OK, rv); | 3822 EXPECT_EQ(OK, rv); |
| 3802 | 3823 |
| 3803 LoadTimingInfo load_timing_info; | 3824 LoadTimingInfo load_timing_info; |
| 3804 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3825 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 3805 TestLoadTimingNotReused(load_timing_info, | 3826 TestLoadTimingNotReused(load_timing_info, |
| 3806 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 3827 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
| 3807 | 3828 |
| 3808 const HttpResponseInfo* response = trans->GetResponseInfo(); | 3829 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 3809 ASSERT_TRUE(response != NULL); | 3830 ASSERT_TRUE(response != NULL); |
| 3810 ASSERT_FALSE(response->headers.get() == NULL); | 3831 ASSERT_FALSE(response->headers.get() == NULL); |
| 3811 EXPECT_EQ(407, response->headers->response_code()); | 3832 EXPECT_EQ(407, response->headers->response_code()); |
| 3812 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3833 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3813 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 3834 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 3814 | 3835 |
| 3815 TestCompletionCallback callback2; | 3836 TestCompletionCallback callback2; |
| 3816 | 3837 |
| 3817 rv = trans->RestartWithAuth( | 3838 rv = |
| 3818 AuthCredentials(kFoo, kBar), callback2.callback()); | 3839 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 3819 EXPECT_EQ(ERR_IO_PENDING, rv); | 3840 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3820 | 3841 |
| 3821 rv = callback2.WaitForResult(); | 3842 rv = callback2.WaitForResult(); |
| 3822 EXPECT_EQ(OK, rv); | 3843 EXPECT_EQ(OK, rv); |
| 3823 | 3844 |
| 3824 load_timing_info = LoadTimingInfo(); | 3845 load_timing_info = LoadTimingInfo(); |
| 3825 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); | 3846 EXPECT_TRUE(trans->GetLoadTimingInfo(&load_timing_info)); |
| 3826 // Retrying with HTTP AUTH is considered to be reusing a socket. | 3847 // Retrying with HTTP AUTH is considered to be reusing a socket. |
| 3827 TestLoadTimingReused(load_timing_info); | 3848 TestLoadTimingReused(load_timing_info); |
| 3828 | 3849 |
| 3829 response = trans->GetResponseInfo(); | 3850 response = trans->GetResponseInfo(); |
| 3830 ASSERT_TRUE(response != NULL); | 3851 ASSERT_TRUE(response != NULL); |
| 3831 | 3852 |
| 3832 EXPECT_TRUE(response->headers->IsKeepAlive()); | 3853 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 3833 EXPECT_EQ(200, response->headers->response_code()); | 3854 EXPECT_EQ(200, response->headers->response_code()); |
| 3834 EXPECT_EQ(100, response->headers->GetContentLength()); | 3855 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 3835 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 3856 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 3836 | 3857 |
| 3837 // The password prompt info should not be set. | 3858 // The password prompt info should not be set. |
| 3838 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 3859 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 3839 } | 3860 } |
| 3840 | 3861 |
| 3841 void HttpNetworkTransactionTest::ConnectStatusHelperWithExpectedStatus( | 3862 void HttpNetworkTransactionTest::ConnectStatusHelperWithExpectedStatus( |
| 3842 const MockRead& status, int expected_status) { | 3863 const MockRead& status, |
| 3864 int expected_status) { |
| 3843 HttpRequestInfo request; | 3865 HttpRequestInfo request; |
| 3844 request.method = "GET"; | 3866 request.method = "GET"; |
| 3845 request.url = GURL("https://www.google.com/"); | 3867 request.url = GURL("https://www.google.com/"); |
| 3846 request.load_flags = 0; | 3868 request.load_flags = 0; |
| 3847 | 3869 |
| 3848 // Configure against proxy server "myproxy:70". | 3870 // Configure against proxy server "myproxy:70". |
| 3849 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 3871 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 3850 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 3872 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 3851 | 3873 |
| 3852 // Since we have proxy, should try to establish tunnel. | 3874 // Since we have proxy, should try to establish tunnel. |
| 3853 MockWrite data_writes[] = { | 3875 MockWrite data_writes[] = { |
| 3854 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 3876 MockWrite( |
| 3855 "Host: www.google.com\r\n" | 3877 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 3856 "Proxy-Connection: keep-alive\r\n\r\n"), | 3878 "Host: www.google.com\r\n" |
| 3879 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 3857 }; | 3880 }; |
| 3858 | 3881 |
| 3859 MockRead data_reads[] = { | 3882 MockRead data_reads[] = { |
| 3860 status, | 3883 status, MockRead("Content-Length: 10\r\n\r\n"), |
| 3861 MockRead("Content-Length: 10\r\n\r\n"), | 3884 // No response body because the test stops reading here. |
| 3862 // No response body because the test stops reading here. | 3885 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 3863 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | |
| 3864 }; | 3886 }; |
| 3865 | 3887 |
| 3866 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 3888 StaticSocketDataProvider data( |
| 3867 data_writes, arraysize(data_writes)); | 3889 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 3868 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3890 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 3869 | 3891 |
| 3870 TestCompletionCallback callback; | 3892 TestCompletionCallback callback; |
| 3871 | 3893 |
| 3872 scoped_ptr<HttpTransaction> trans( | 3894 scoped_ptr<HttpTransaction> trans( |
| 3873 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 3895 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 3874 | 3896 |
| 3875 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 3897 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 3876 EXPECT_EQ(ERR_IO_PENDING, rv); | 3898 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3877 | 3899 |
| 3878 rv = callback.WaitForResult(); | 3900 rv = callback.WaitForResult(); |
| 3879 EXPECT_EQ(expected_status, rv); | 3901 EXPECT_EQ(expected_status, rv); |
| 3880 } | 3902 } |
| 3881 | 3903 |
| 3882 void HttpNetworkTransactionTest::ConnectStatusHelper( | 3904 void HttpNetworkTransactionTest::ConnectStatusHelper(const MockRead& status) { |
| 3883 const MockRead& status) { | 3905 ConnectStatusHelperWithExpectedStatus(status, ERR_TUNNEL_CONNECTION_FAILED); |
| 3884 ConnectStatusHelperWithExpectedStatus( | |
| 3885 status, ERR_TUNNEL_CONNECTION_FAILED); | |
| 3886 } | 3906 } |
| 3887 | 3907 |
| 3888 TEST_P(HttpNetworkTransactionTest, ConnectStatus100) { | 3908 TEST_P(HttpNetworkTransactionTest, ConnectStatus100) { |
| 3889 ConnectStatusHelper(MockRead("HTTP/1.1 100 Continue\r\n")); | 3909 ConnectStatusHelper(MockRead("HTTP/1.1 100 Continue\r\n")); |
| 3890 } | 3910 } |
| 3891 | 3911 |
| 3892 TEST_P(HttpNetworkTransactionTest, ConnectStatus101) { | 3912 TEST_P(HttpNetworkTransactionTest, ConnectStatus101) { |
| 3893 ConnectStatusHelper(MockRead("HTTP/1.1 101 Switching Protocols\r\n")); | 3913 ConnectStatusHelper(MockRead("HTTP/1.1 101 Switching Protocols\r\n")); |
| 3894 } | 3914 } |
| 3895 | 3915 |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4063 request.load_flags = 0; | 4083 request.load_flags = 0; |
| 4064 | 4084 |
| 4065 // Configure against proxy server "myproxy:70". | 4085 // Configure against proxy server "myproxy:70". |
| 4066 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 4086 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 4067 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4087 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4068 | 4088 |
| 4069 scoped_ptr<HttpTransaction> trans( | 4089 scoped_ptr<HttpTransaction> trans( |
| 4070 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 4090 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 4071 | 4091 |
| 4072 MockWrite data_writes1[] = { | 4092 MockWrite data_writes1[] = { |
| 4073 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 4093 MockWrite( |
| 4074 "Host: www.google.com\r\n" | 4094 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 4075 "Proxy-Connection: keep-alive\r\n\r\n"), | 4095 "Host: www.google.com\r\n" |
| 4096 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 4076 }; | 4097 }; |
| 4077 | 4098 |
| 4078 MockRead data_reads1[] = { | 4099 MockRead data_reads1[] = { |
| 4079 MockRead("HTTP/1.0 407 Unauthorized\r\n"), | 4100 MockRead("HTTP/1.0 407 Unauthorized\r\n"), |
| 4080 // Give a couple authenticate options (only the middle one is actually | 4101 // Give a couple authenticate options (only the middle one is actually |
| 4081 // supported). | 4102 // supported). |
| 4082 MockRead("Proxy-Authenticate: Basic invalid\r\n"), // Malformed. | 4103 MockRead("Proxy-Authenticate: Basic invalid\r\n"), // Malformed. |
| 4083 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 4104 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 4084 MockRead("Proxy-Authenticate: UNSUPPORTED realm=\"FOO\"\r\n"), | 4105 MockRead("Proxy-Authenticate: UNSUPPORTED realm=\"FOO\"\r\n"), |
| 4085 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 4106 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 4086 // Large content-length -- won't matter, as connection will be reset. | 4107 // Large content-length -- won't matter, as connection will be reset. |
| 4087 MockRead("Content-Length: 10000\r\n\r\n"), | 4108 MockRead("Content-Length: 10000\r\n\r\n"), |
| 4088 MockRead(SYNCHRONOUS, ERR_FAILED), | 4109 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 4089 }; | 4110 }; |
| 4090 | 4111 |
| 4091 // After calling trans->RestartWithAuth() the first time, this is the | 4112 // After calling trans->RestartWithAuth() the first time, this is the |
| 4092 // request we should be issuing -- the final header line contains the | 4113 // request we should be issuing -- the final header line contains the |
| 4093 // proxy's credentials. | 4114 // proxy's credentials. |
| 4094 MockWrite data_writes2[] = { | 4115 MockWrite data_writes2[] = { |
| 4095 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 4116 MockWrite( |
| 4096 "Host: www.google.com\r\n" | 4117 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 4097 "Proxy-Connection: keep-alive\r\n" | 4118 "Host: www.google.com\r\n" |
| 4098 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 4119 "Proxy-Connection: keep-alive\r\n" |
| 4120 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 4099 }; | 4121 }; |
| 4100 | 4122 |
| 4101 // Now the proxy server lets the request pass through to origin server. | 4123 // Now the proxy server lets the request pass through to origin server. |
| 4102 // The origin server responds with a 401. | 4124 // The origin server responds with a 401. |
| 4103 MockRead data_reads2[] = { | 4125 MockRead data_reads2[] = { |
| 4104 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 4126 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 4105 // Note: We are using the same realm-name as the proxy server. This is | 4127 // Note: We are using the same realm-name as the proxy server. This is |
| 4106 // completely valid, as realms are unique across hosts. | 4128 // completely valid, as realms are unique across hosts. |
| 4107 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 4129 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 4108 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 4130 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 4109 MockRead("Content-Length: 2000\r\n\r\n"), | 4131 MockRead("Content-Length: 2000\r\n\r\n"), |
| 4110 MockRead(SYNCHRONOUS, ERR_FAILED), // Won't be reached. | 4132 MockRead(SYNCHRONOUS, ERR_FAILED), // Won't be reached. |
| 4111 }; | 4133 }; |
| 4112 | 4134 |
| 4113 // After calling trans->RestartWithAuth() the second time, we should send | 4135 // After calling trans->RestartWithAuth() the second time, we should send |
| 4114 // the credentials for both the proxy and origin server. | 4136 // the credentials for both the proxy and origin server. |
| 4115 MockWrite data_writes3[] = { | 4137 MockWrite data_writes3[] = { |
| 4116 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 4138 MockWrite( |
| 4117 "Host: www.google.com\r\n" | 4139 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 4118 "Proxy-Connection: keep-alive\r\n" | 4140 "Host: www.google.com\r\n" |
| 4119 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" | 4141 "Proxy-Connection: keep-alive\r\n" |
| 4120 "Authorization: Basic Zm9vMjpiYXIy\r\n\r\n"), | 4142 "Proxy-Authorization: Basic Zm9vOmJhcg==\r\n" |
| 4143 "Authorization: Basic Zm9vMjpiYXIy\r\n\r\n"), |
| 4121 }; | 4144 }; |
| 4122 | 4145 |
| 4123 // Lastly we get the desired content. | 4146 // Lastly we get the desired content. |
| 4124 MockRead data_reads3[] = { | 4147 MockRead data_reads3[] = { |
| 4125 MockRead("HTTP/1.0 200 OK\r\n"), | 4148 MockRead("HTTP/1.0 200 OK\r\n"), |
| 4126 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 4149 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 4127 MockRead("Content-Length: 100\r\n\r\n"), | 4150 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 4128 MockRead(SYNCHRONOUS, OK), | |
| 4129 }; | 4151 }; |
| 4130 | 4152 |
| 4131 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4153 StaticSocketDataProvider data1(data_reads1, |
| 4132 data_writes1, arraysize(data_writes1)); | 4154 arraysize(data_reads1), |
| 4133 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4155 data_writes1, |
| 4134 data_writes2, arraysize(data_writes2)); | 4156 arraysize(data_writes1)); |
| 4135 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 4157 StaticSocketDataProvider data2(data_reads2, |
| 4136 data_writes3, arraysize(data_writes3)); | 4158 arraysize(data_reads2), |
| 4159 data_writes2, |
| 4160 arraysize(data_writes2)); |
| 4161 StaticSocketDataProvider data3(data_reads3, |
| 4162 arraysize(data_reads3), |
| 4163 data_writes3, |
| 4164 arraysize(data_writes3)); |
| 4137 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4165 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4138 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4166 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4139 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 4167 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 4140 | 4168 |
| 4141 TestCompletionCallback callback1; | 4169 TestCompletionCallback callback1; |
| 4142 | 4170 |
| 4143 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4171 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 4144 EXPECT_EQ(ERR_IO_PENDING, rv); | 4172 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4145 | 4173 |
| 4146 rv = callback1.WaitForResult(); | 4174 rv = callback1.WaitForResult(); |
| 4147 EXPECT_EQ(OK, rv); | 4175 EXPECT_EQ(OK, rv); |
| 4148 | 4176 |
| 4149 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4177 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4150 ASSERT_TRUE(response != NULL); | 4178 ASSERT_TRUE(response != NULL); |
| 4151 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 4179 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 4152 | 4180 |
| 4153 TestCompletionCallback callback2; | 4181 TestCompletionCallback callback2; |
| 4154 | 4182 |
| 4155 rv = trans->RestartWithAuth( | 4183 rv = |
| 4156 AuthCredentials(kFoo, kBar), callback2.callback()); | 4184 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 4157 EXPECT_EQ(ERR_IO_PENDING, rv); | 4185 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4158 | 4186 |
| 4159 rv = callback2.WaitForResult(); | 4187 rv = callback2.WaitForResult(); |
| 4160 EXPECT_EQ(OK, rv); | 4188 EXPECT_EQ(OK, rv); |
| 4161 | 4189 |
| 4162 response = trans->GetResponseInfo(); | 4190 response = trans->GetResponseInfo(); |
| 4163 ASSERT_TRUE(response != NULL); | 4191 ASSERT_TRUE(response != NULL); |
| 4164 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 4192 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 4165 | 4193 |
| 4166 TestCompletionCallback callback3; | 4194 TestCompletionCallback callback3; |
| 4167 | 4195 |
| 4168 rv = trans->RestartWithAuth( | 4196 rv = trans->RestartWithAuth(AuthCredentials(kFoo2, kBar2), |
| 4169 AuthCredentials(kFoo2, kBar2), callback3.callback()); | 4197 callback3.callback()); |
| 4170 EXPECT_EQ(ERR_IO_PENDING, rv); | 4198 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4171 | 4199 |
| 4172 rv = callback3.WaitForResult(); | 4200 rv = callback3.WaitForResult(); |
| 4173 EXPECT_EQ(OK, rv); | 4201 EXPECT_EQ(OK, rv); |
| 4174 | 4202 |
| 4175 response = trans->GetResponseInfo(); | 4203 response = trans->GetResponseInfo(); |
| 4176 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 4204 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 4177 EXPECT_EQ(100, response->headers->GetContentLength()); | 4205 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 4178 } | 4206 } |
| 4179 | 4207 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4193 | 4221 |
| 4194 // Ensure load is not disrupted by flags which suppress behaviour specific | 4222 // Ensure load is not disrupted by flags which suppress behaviour specific |
| 4195 // to other auth schemes. | 4223 // to other auth schemes. |
| 4196 request.load_flags = LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; | 4224 request.load_flags = LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; |
| 4197 | 4225 |
| 4198 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, | 4226 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom1, |
| 4199 MockGetHostName); | 4227 MockGetHostName); |
| 4200 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4228 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4201 | 4229 |
| 4202 MockWrite data_writes1[] = { | 4230 MockWrite data_writes1[] = { |
| 4203 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4231 MockWrite( |
| 4204 "Host: 172.22.68.17\r\n" | 4232 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4205 "Connection: keep-alive\r\n\r\n"), | 4233 "Host: 172.22.68.17\r\n" |
| 4234 "Connection: keep-alive\r\n\r\n"), |
| 4206 }; | 4235 }; |
| 4207 | 4236 |
| 4208 MockRead data_reads1[] = { | 4237 MockRead data_reads1[] = { |
| 4209 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4238 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4210 // Negotiate and NTLM are often requested together. However, we only want | 4239 // Negotiate and NTLM are often requested together. However, we only want |
| 4211 // to test NTLM. Since Negotiate is preferred over NTLM, we have to skip | 4240 // to test NTLM. Since Negotiate is preferred over NTLM, we have to skip |
| 4212 // the header that requests Negotiate for this test. | 4241 // the header that requests Negotiate for this test. |
| 4213 MockRead("WWW-Authenticate: NTLM\r\n"), | 4242 MockRead("WWW-Authenticate: NTLM\r\n"), |
| 4214 MockRead("Connection: close\r\n"), | 4243 MockRead("Connection: close\r\n"), |
| 4215 MockRead("Content-Length: 42\r\n"), | 4244 MockRead("Content-Length: 42\r\n"), |
| 4216 MockRead("Content-Type: text/html\r\n\r\n"), | 4245 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4217 // Missing content -- won't matter, as connection will be reset. | 4246 // Missing content -- won't matter, as connection will be reset. |
| 4218 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 4247 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 4219 }; | 4248 }; |
| 4220 | 4249 |
| 4221 MockWrite data_writes2[] = { | 4250 MockWrite data_writes2[] = { |
| 4222 // After restarting with a null identity, this is the | 4251 // After restarting with a null identity, this is the |
| 4223 // request we should be issuing -- the final header line contains a Type | 4252 // request we should be issuing -- the final header line contains a Type |
| 4224 // 1 message. | 4253 // 1 message. |
| 4225 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4254 MockWrite( |
| 4226 "Host: 172.22.68.17\r\n" | 4255 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4227 "Connection: keep-alive\r\n" | 4256 "Host: 172.22.68.17\r\n" |
| 4228 "Authorization: NTLM " | 4257 "Connection: keep-alive\r\n" |
| 4229 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), | 4258 "Authorization: NTLM " |
| 4259 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), |
| 4230 | 4260 |
| 4231 // After calling trans->RestartWithAuth(), we should send a Type 3 message | 4261 // After calling trans->RestartWithAuth(), we should send a Type 3 message |
| 4232 // (the credentials for the origin server). The second request continues | 4262 // (the credentials for the origin server). The second request continues |
| 4233 // on the same connection. | 4263 // on the same connection. |
| 4234 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4264 MockWrite( |
| 4235 "Host: 172.22.68.17\r\n" | 4265 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4236 "Connection: keep-alive\r\n" | 4266 "Host: 172.22.68.17\r\n" |
| 4237 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" | 4267 "Connection: keep-alive\r\n" |
| 4238 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" | 4268 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" |
| 4239 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBVKW" | 4269 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" |
| 4240 "Yma5xzVAAAAAAAAAAAAAAAAAAAAACH+gWcm+YsP9Tqb9zCR3WAeZZX" | 4270 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBVKW" |
| 4241 "ahlhx5I=\r\n\r\n"), | 4271 "Yma5xzVAAAAAAAAAAAAAAAAAAAAACH+gWcm+YsP9Tqb9zCR3WAeZZX" |
| 4272 "ahlhx5I=\r\n\r\n"), |
| 4242 }; | 4273 }; |
| 4243 | 4274 |
| 4244 MockRead data_reads2[] = { | 4275 MockRead data_reads2[] = { |
| 4245 // The origin server responds with a Type 2 message. | 4276 // The origin server responds with a Type 2 message. |
| 4246 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4277 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4247 MockRead("WWW-Authenticate: NTLM " | 4278 MockRead( |
| 4248 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCjGpMpPGlYKkAAAAAAAAAALo" | 4279 "WWW-Authenticate: NTLM " |
| 4249 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" | 4280 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCjGpMpPGlYKkAAAAAAAAAALo" |
| 4250 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" | 4281 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" |
| 4251 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" | 4282 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" |
| 4252 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" | 4283 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" |
| 4253 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" | 4284 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" |
| 4254 "BtAAAAAAA=\r\n"), | 4285 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" |
| 4255 MockRead("Content-Length: 42\r\n"), | 4286 "BtAAAAAAA=\r\n"), |
| 4256 MockRead("Content-Type: text/html\r\n\r\n"), | 4287 MockRead("Content-Length: 42\r\n"), |
| 4257 MockRead("You are not authorized to view this page\r\n"), | 4288 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4289 MockRead("You are not authorized to view this page\r\n"), |
| 4258 | 4290 |
| 4259 // Lastly we get the desired content. | 4291 // Lastly we get the desired content. |
| 4260 MockRead("HTTP/1.1 200 OK\r\n"), | 4292 MockRead("HTTP/1.1 200 OK\r\n"), |
| 4261 MockRead("Content-Type: text/html; charset=utf-8\r\n"), | 4293 MockRead("Content-Type: text/html; charset=utf-8\r\n"), |
| 4262 MockRead("Content-Length: 13\r\n\r\n"), | 4294 MockRead("Content-Length: 13\r\n\r\n"), MockRead("Please Login\r\n"), |
| 4263 MockRead("Please Login\r\n"), | 4295 MockRead(SYNCHRONOUS, OK), |
| 4264 MockRead(SYNCHRONOUS, OK), | |
| 4265 }; | 4296 }; |
| 4266 | 4297 |
| 4267 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4298 StaticSocketDataProvider data1(data_reads1, |
| 4268 data_writes1, arraysize(data_writes1)); | 4299 arraysize(data_reads1), |
| 4269 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4300 data_writes1, |
| 4270 data_writes2, arraysize(data_writes2)); | 4301 arraysize(data_writes1)); |
| 4302 StaticSocketDataProvider data2(data_reads2, |
| 4303 arraysize(data_reads2), |
| 4304 data_writes2, |
| 4305 arraysize(data_writes2)); |
| 4271 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4306 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4272 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4307 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4273 | 4308 |
| 4274 TestCompletionCallback callback1; | 4309 TestCompletionCallback callback1; |
| 4275 | 4310 |
| 4276 scoped_ptr<HttpTransaction> trans( | 4311 scoped_ptr<HttpTransaction> trans( |
| 4277 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4312 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4278 | 4313 |
| 4279 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4314 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 4280 EXPECT_EQ(ERR_IO_PENDING, rv); | 4315 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4322 HttpRequestInfo request; | 4357 HttpRequestInfo request; |
| 4323 request.method = "GET"; | 4358 request.method = "GET"; |
| 4324 request.url = GURL("http://172.22.68.17/kids/login.aspx"); | 4359 request.url = GURL("http://172.22.68.17/kids/login.aspx"); |
| 4325 request.load_flags = 0; | 4360 request.load_flags = 0; |
| 4326 | 4361 |
| 4327 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, | 4362 HttpAuthHandlerNTLM::ScopedProcSetter proc_setter(MockGenerateRandom2, |
| 4328 MockGetHostName); | 4363 MockGetHostName); |
| 4329 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4364 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4330 | 4365 |
| 4331 MockWrite data_writes1[] = { | 4366 MockWrite data_writes1[] = { |
| 4332 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4367 MockWrite( |
| 4333 "Host: 172.22.68.17\r\n" | 4368 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4334 "Connection: keep-alive\r\n\r\n"), | 4369 "Host: 172.22.68.17\r\n" |
| 4370 "Connection: keep-alive\r\n\r\n"), |
| 4335 }; | 4371 }; |
| 4336 | 4372 |
| 4337 MockRead data_reads1[] = { | 4373 MockRead data_reads1[] = { |
| 4338 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4374 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4339 // Negotiate and NTLM are often requested together. However, we only want | 4375 // Negotiate and NTLM are often requested together. However, we only want |
| 4340 // to test NTLM. Since Negotiate is preferred over NTLM, we have to skip | 4376 // to test NTLM. Since Negotiate is preferred over NTLM, we have to skip |
| 4341 // the header that requests Negotiate for this test. | 4377 // the header that requests Negotiate for this test. |
| 4342 MockRead("WWW-Authenticate: NTLM\r\n"), | 4378 MockRead("WWW-Authenticate: NTLM\r\n"), |
| 4343 MockRead("Connection: close\r\n"), | 4379 MockRead("Connection: close\r\n"), |
| 4344 MockRead("Content-Length: 42\r\n"), | 4380 MockRead("Content-Length: 42\r\n"), |
| 4345 MockRead("Content-Type: text/html\r\n\r\n"), | 4381 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4346 // Missing content -- won't matter, as connection will be reset. | 4382 // Missing content -- won't matter, as connection will be reset. |
| 4347 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | 4383 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 4348 }; | 4384 }; |
| 4349 | 4385 |
| 4350 MockWrite data_writes2[] = { | 4386 MockWrite data_writes2[] = { |
| 4351 // After restarting with a null identity, this is the | 4387 // After restarting with a null identity, this is the |
| 4352 // request we should be issuing -- the final header line contains a Type | 4388 // request we should be issuing -- the final header line contains a Type |
| 4353 // 1 message. | 4389 // 1 message. |
| 4354 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4390 MockWrite( |
| 4355 "Host: 172.22.68.17\r\n" | 4391 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4356 "Connection: keep-alive\r\n" | 4392 "Host: 172.22.68.17\r\n" |
| 4357 "Authorization: NTLM " | 4393 "Connection: keep-alive\r\n" |
| 4358 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), | 4394 "Authorization: NTLM " |
| 4395 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), |
| 4359 | 4396 |
| 4360 // After calling trans->RestartWithAuth(), we should send a Type 3 message | 4397 // After calling trans->RestartWithAuth(), we should send a Type 3 message |
| 4361 // (the credentials for the origin server). The second request continues | 4398 // (the credentials for the origin server). The second request continues |
| 4362 // on the same connection. | 4399 // on the same connection. |
| 4363 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4400 MockWrite( |
| 4364 "Host: 172.22.68.17\r\n" | 4401 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4365 "Connection: keep-alive\r\n" | 4402 "Host: 172.22.68.17\r\n" |
| 4366 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" | 4403 "Connection: keep-alive\r\n" |
| 4367 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" | 4404 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" |
| 4368 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwCWeY" | 4405 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" |
| 4369 "XnSZNwoQAAAAAAAAAAAAAAAAAAAADLa34/phTTKzNTWdub+uyFleOj" | 4406 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwCWeY" |
| 4370 "4Ww7b7E=\r\n\r\n"), | 4407 "XnSZNwoQAAAAAAAAAAAAAAAAAAAADLa34/phTTKzNTWdub+uyFleOj" |
| 4408 "4Ww7b7E=\r\n\r\n"), |
| 4371 }; | 4409 }; |
| 4372 | 4410 |
| 4373 MockRead data_reads2[] = { | 4411 MockRead data_reads2[] = { |
| 4374 // The origin server responds with a Type 2 message. | 4412 // The origin server responds with a Type 2 message. |
| 4375 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4413 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4376 MockRead("WWW-Authenticate: NTLM " | 4414 MockRead( |
| 4377 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCbVWUZezVGpAAAAAAAAAAALo" | 4415 "WWW-Authenticate: NTLM " |
| 4378 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" | 4416 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCbVWUZezVGpAAAAAAAAAAALo" |
| 4379 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" | 4417 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" |
| 4380 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" | 4418 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" |
| 4381 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" | 4419 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" |
| 4382 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" | 4420 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" |
| 4383 "BtAAAAAAA=\r\n"), | 4421 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" |
| 4384 MockRead("Content-Length: 42\r\n"), | 4422 "BtAAAAAAA=\r\n"), |
| 4385 MockRead("Content-Type: text/html\r\n\r\n"), | 4423 MockRead("Content-Length: 42\r\n"), |
| 4386 MockRead("You are not authorized to view this page\r\n"), | 4424 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4425 MockRead("You are not authorized to view this page\r\n"), |
| 4387 | 4426 |
| 4388 // Wrong password. | 4427 // Wrong password. |
| 4389 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4428 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4390 MockRead("WWW-Authenticate: NTLM\r\n"), | 4429 MockRead("WWW-Authenticate: NTLM\r\n"), MockRead("Connection: close\r\n"), |
| 4391 MockRead("Connection: close\r\n"), | 4430 MockRead("Content-Length: 42\r\n"), |
| 4392 MockRead("Content-Length: 42\r\n"), | 4431 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4393 MockRead("Content-Type: text/html\r\n\r\n"), | 4432 // Missing content -- won't matter, as connection will be reset. |
| 4394 // Missing content -- won't matter, as connection will be reset. | 4433 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), |
| 4395 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), | |
| 4396 }; | 4434 }; |
| 4397 | 4435 |
| 4398 MockWrite data_writes3[] = { | 4436 MockWrite data_writes3[] = { |
| 4399 // After restarting with a null identity, this is the | 4437 // After restarting with a null identity, this is the |
| 4400 // request we should be issuing -- the final header line contains a Type | 4438 // request we should be issuing -- the final header line contains a Type |
| 4401 // 1 message. | 4439 // 1 message. |
| 4402 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4440 MockWrite( |
| 4403 "Host: 172.22.68.17\r\n" | 4441 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4404 "Connection: keep-alive\r\n" | 4442 "Host: 172.22.68.17\r\n" |
| 4405 "Authorization: NTLM " | 4443 "Connection: keep-alive\r\n" |
| 4406 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), | 4444 "Authorization: NTLM " |
| 4445 "TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=\r\n\r\n"), |
| 4407 | 4446 |
| 4408 // After calling trans->RestartWithAuth(), we should send a Type 3 message | 4447 // After calling trans->RestartWithAuth(), we should send a Type 3 message |
| 4409 // (the credentials for the origin server). The second request continues | 4448 // (the credentials for the origin server). The second request continues |
| 4410 // on the same connection. | 4449 // on the same connection. |
| 4411 MockWrite("GET /kids/login.aspx HTTP/1.1\r\n" | 4450 MockWrite( |
| 4412 "Host: 172.22.68.17\r\n" | 4451 "GET /kids/login.aspx HTTP/1.1\r\n" |
| 4413 "Connection: keep-alive\r\n" | 4452 "Host: 172.22.68.17\r\n" |
| 4414 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" | 4453 "Connection: keep-alive\r\n" |
| 4415 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" | 4454 "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGgAAAAYABgAgA" |
| 4416 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBO54" | 4455 "AAAAAAAABAAAAAGAAYAEAAAAAQABAAWAAAAAAAAAAAAAAABYIIAHQA" |
| 4417 "dFMVvTHwAAAAAAAAAAAAAAAAAAAACS7sT6Uzw7L0L//WUqlIaVWpbI" | 4456 "ZQBzAHQAaQBuAGcALQBuAHQAbABtAFcAVABDAC0AVwBJAE4ANwBO54" |
| 4418 "+4MUm7c=\r\n\r\n"), | 4457 "dFMVvTHwAAAAAAAAAAAAAAAAAAAACS7sT6Uzw7L0L//WUqlIaVWpbI" |
| 4458 "+4MUm7c=\r\n\r\n"), |
| 4419 }; | 4459 }; |
| 4420 | 4460 |
| 4421 MockRead data_reads3[] = { | 4461 MockRead data_reads3[] = { |
| 4422 // The origin server responds with a Type 2 message. | 4462 // The origin server responds with a Type 2 message. |
| 4423 MockRead("HTTP/1.1 401 Access Denied\r\n"), | 4463 MockRead("HTTP/1.1 401 Access Denied\r\n"), |
| 4424 MockRead("WWW-Authenticate: NTLM " | 4464 MockRead( |
| 4425 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCL24VN8dgOR8AAAAAAAAAALo" | 4465 "WWW-Authenticate: NTLM " |
| 4426 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" | 4466 "TlRMTVNTUAACAAAADAAMADgAAAAFgokCL24VN8dgOR8AAAAAAAAAALo" |
| 4427 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" | 4467 "AugBEAAAABQEoCgAAAA9HAE8ATwBHAEwARQACAAwARwBPAE8ARwBMAE" |
| 4428 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" | 4468 "UAAQAaAEEASwBFAEUAUwBBAFIAQQAtAEMATwBSAFAABAAeAGMAbwByA" |
| 4429 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" | 4469 "HAALgBnAG8AbwBnAGwAZQAuAGMAbwBtAAMAQABhAGsAZQBlAHMAYQBy" |
| 4430 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" | 4470 "AGEALQBjAG8AcgBwAC4AYQBkAC4AYwBvAHIAcAAuAGcAbwBvAGcAbAB" |
| 4431 "BtAAAAAAA=\r\n"), | 4471 "lAC4AYwBvAG0ABQAeAGMAbwByAHAALgBnAG8AbwBnAGwAZQAuAGMAbw" |
| 4432 MockRead("Content-Length: 42\r\n"), | 4472 "BtAAAAAAA=\r\n"), |
| 4433 MockRead("Content-Type: text/html\r\n\r\n"), | 4473 MockRead("Content-Length: 42\r\n"), |
| 4434 MockRead("You are not authorized to view this page\r\n"), | 4474 MockRead("Content-Type: text/html\r\n\r\n"), |
| 4475 MockRead("You are not authorized to view this page\r\n"), |
| 4435 | 4476 |
| 4436 // Lastly we get the desired content. | 4477 // Lastly we get the desired content. |
| 4437 MockRead("HTTP/1.1 200 OK\r\n"), | 4478 MockRead("HTTP/1.1 200 OK\r\n"), |
| 4438 MockRead("Content-Type: text/html; charset=utf-8\r\n"), | 4479 MockRead("Content-Type: text/html; charset=utf-8\r\n"), |
| 4439 MockRead("Content-Length: 13\r\n\r\n"), | 4480 MockRead("Content-Length: 13\r\n\r\n"), MockRead("Please Login\r\n"), |
| 4440 MockRead("Please Login\r\n"), | 4481 MockRead(SYNCHRONOUS, OK), |
| 4441 MockRead(SYNCHRONOUS, OK), | |
| 4442 }; | 4482 }; |
| 4443 | 4483 |
| 4444 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4484 StaticSocketDataProvider data1(data_reads1, |
| 4445 data_writes1, arraysize(data_writes1)); | 4485 arraysize(data_reads1), |
| 4446 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4486 data_writes1, |
| 4447 data_writes2, arraysize(data_writes2)); | 4487 arraysize(data_writes1)); |
| 4448 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 4488 StaticSocketDataProvider data2(data_reads2, |
| 4449 data_writes3, arraysize(data_writes3)); | 4489 arraysize(data_reads2), |
| 4490 data_writes2, |
| 4491 arraysize(data_writes2)); |
| 4492 StaticSocketDataProvider data3(data_reads3, |
| 4493 arraysize(data_reads3), |
| 4494 data_writes3, |
| 4495 arraysize(data_writes3)); |
| 4450 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4496 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4451 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4497 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4452 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 4498 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 4453 | 4499 |
| 4454 TestCompletionCallback callback1; | 4500 TestCompletionCallback callback1; |
| 4455 | 4501 |
| 4456 scoped_ptr<HttpTransaction> trans( | 4502 scoped_ptr<HttpTransaction> trans( |
| 4457 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4503 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4458 | 4504 |
| 4459 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4505 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4528 | 4574 |
| 4529 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4575 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4530 scoped_ptr<HttpTransaction> trans( | 4576 scoped_ptr<HttpTransaction> trans( |
| 4531 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 4577 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 4532 | 4578 |
| 4533 // Respond with 300 kb of headers (we should fail after 256 kb). | 4579 // Respond with 300 kb of headers (we should fail after 256 kb). |
| 4534 std::string large_headers_string; | 4580 std::string large_headers_string; |
| 4535 FillLargeHeadersString(&large_headers_string, 300 * 1024); | 4581 FillLargeHeadersString(&large_headers_string, 300 * 1024); |
| 4536 | 4582 |
| 4537 MockRead data_reads[] = { | 4583 MockRead data_reads[] = { |
| 4538 MockRead("HTTP/1.0 200 OK\r\n"), | 4584 MockRead("HTTP/1.0 200 OK\r\n"), |
| 4539 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), | 4585 MockRead(ASYNC, large_headers_string.data(), large_headers_string.size()), |
| 4540 MockRead("\r\nBODY"), | 4586 MockRead("\r\nBODY"), MockRead(SYNCHRONOUS, OK), |
| 4541 MockRead(SYNCHRONOUS, OK), | |
| 4542 }; | 4587 }; |
| 4543 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 4588 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 4544 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4589 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4545 | 4590 |
| 4546 TestCompletionCallback callback; | 4591 TestCompletionCallback callback; |
| 4547 | 4592 |
| 4548 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4593 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4549 EXPECT_EQ(ERR_IO_PENDING, rv); | 4594 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4550 | 4595 |
| 4551 rv = callback.WaitForResult(); | 4596 rv = callback.WaitForResult(); |
| 4552 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); | 4597 EXPECT_EQ(ERR_RESPONSE_HEADERS_TOO_BIG, rv); |
| 4553 | 4598 |
| 4554 const HttpResponseInfo* response = trans->GetResponseInfo(); | 4599 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 4555 EXPECT_TRUE(response == NULL); | 4600 EXPECT_TRUE(response == NULL); |
| 4556 } | 4601 } |
| 4557 | 4602 |
| 4558 // Make sure that we don't try to reuse a TCPClientSocket when failing to | 4603 // Make sure that we don't try to reuse a TCPClientSocket when failing to |
| 4559 // establish tunnel. | 4604 // establish tunnel. |
| 4560 // http://code.google.com/p/chromium/issues/detail?id=3772 | 4605 // http://code.google.com/p/chromium/issues/detail?id=3772 |
| 4561 TEST_P(HttpNetworkTransactionTest, | 4606 TEST_P(HttpNetworkTransactionTest, DontRecycleTransportSocketForSSLTunnel) { |
| 4562 DontRecycleTransportSocketForSSLTunnel) { | |
| 4563 HttpRequestInfo request; | 4607 HttpRequestInfo request; |
| 4564 request.method = "GET"; | 4608 request.method = "GET"; |
| 4565 request.url = GURL("https://www.google.com/"); | 4609 request.url = GURL("https://www.google.com/"); |
| 4566 request.load_flags = 0; | 4610 request.load_flags = 0; |
| 4567 | 4611 |
| 4568 // Configure against proxy server "myproxy:70". | 4612 // Configure against proxy server "myproxy:70". |
| 4569 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 4613 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 4570 | 4614 |
| 4571 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4615 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4572 | 4616 |
| 4573 scoped_ptr<HttpTransaction> trans( | 4617 scoped_ptr<HttpTransaction> trans( |
| 4574 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4618 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4575 | 4619 |
| 4576 // Since we have proxy, should try to establish tunnel. | 4620 // Since we have proxy, should try to establish tunnel. |
| 4577 MockWrite data_writes1[] = { | 4621 MockWrite data_writes1[] = { |
| 4578 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 4622 MockWrite( |
| 4579 "Host: www.google.com\r\n" | 4623 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 4580 "Proxy-Connection: keep-alive\r\n\r\n"), | 4624 "Host: www.google.com\r\n" |
| 4625 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 4581 }; | 4626 }; |
| 4582 | 4627 |
| 4583 // The proxy responds to the connect with a 404, using a persistent | 4628 // The proxy responds to the connect with a 404, using a persistent |
| 4584 // connection. Usually a proxy would return 501 (not implemented), | 4629 // connection. Usually a proxy would return 501 (not implemented), |
| 4585 // or 200 (tunnel established). | 4630 // or 200 (tunnel established). |
| 4586 MockRead data_reads1[] = { | 4631 MockRead data_reads1[] = { |
| 4587 MockRead("HTTP/1.1 404 Not Found\r\n"), | 4632 MockRead("HTTP/1.1 404 Not Found\r\n"), |
| 4588 MockRead("Content-Length: 10\r\n\r\n"), | 4633 MockRead("Content-Length: 10\r\n\r\n"), |
| 4589 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 4634 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 4590 }; | 4635 }; |
| 4591 | 4636 |
| 4592 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4637 StaticSocketDataProvider data1(data_reads1, |
| 4593 data_writes1, arraysize(data_writes1)); | 4638 arraysize(data_reads1), |
| 4639 data_writes1, |
| 4640 arraysize(data_writes1)); |
| 4594 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4641 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4595 | 4642 |
| 4596 TestCompletionCallback callback1; | 4643 TestCompletionCallback callback1; |
| 4597 | 4644 |
| 4598 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 4645 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 4599 EXPECT_EQ(ERR_IO_PENDING, rv); | 4646 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4600 | 4647 |
| 4601 rv = callback1.WaitForResult(); | 4648 rv = callback1.WaitForResult(); |
| 4602 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 4649 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 4603 | 4650 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4623 request.method = "GET"; | 4670 request.method = "GET"; |
| 4624 request.url = GURL("http://www.google.com/"); | 4671 request.url = GURL("http://www.google.com/"); |
| 4625 request.load_flags = 0; | 4672 request.load_flags = 0; |
| 4626 | 4673 |
| 4627 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4674 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4628 | 4675 |
| 4629 scoped_ptr<HttpTransaction> trans( | 4676 scoped_ptr<HttpTransaction> trans( |
| 4630 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4677 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4631 | 4678 |
| 4632 MockRead data_reads[] = { | 4679 MockRead data_reads[] = { |
| 4633 // A part of the response body is received with the response headers. | 4680 // A part of the response body is received with the response headers. |
| 4634 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), | 4681 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhel"), |
| 4635 // The rest of the response body is received in two parts. | 4682 // The rest of the response body is received in two parts. |
| 4636 MockRead("lo"), | 4683 MockRead("lo"), |
| 4637 MockRead(" world"), | 4684 MockRead(" world"), |
| 4638 MockRead("junk"), // Should not be read!! | 4685 MockRead("junk"), // Should not be read!! |
| 4639 MockRead(SYNCHRONOUS, OK), | 4686 MockRead(SYNCHRONOUS, OK), |
| 4640 }; | 4687 }; |
| 4641 | 4688 |
| 4642 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 4689 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 4643 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4690 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4644 | 4691 |
| 4645 TestCompletionCallback callback; | 4692 TestCompletionCallback callback; |
| 4646 | 4693 |
| 4647 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4694 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4648 EXPECT_EQ(ERR_IO_PENDING, rv); | 4695 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4649 | 4696 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 4674 | 4721 |
| 4675 // Make sure that we recycle a SSL socket after reading all of the response | 4722 // Make sure that we recycle a SSL socket after reading all of the response |
| 4676 // body. | 4723 // body. |
| 4677 TEST_P(HttpNetworkTransactionTest, RecycleSSLSocket) { | 4724 TEST_P(HttpNetworkTransactionTest, RecycleSSLSocket) { |
| 4678 HttpRequestInfo request; | 4725 HttpRequestInfo request; |
| 4679 request.method = "GET"; | 4726 request.method = "GET"; |
| 4680 request.url = GURL("https://www.google.com/"); | 4727 request.url = GURL("https://www.google.com/"); |
| 4681 request.load_flags = 0; | 4728 request.load_flags = 0; |
| 4682 | 4729 |
| 4683 MockWrite data_writes[] = { | 4730 MockWrite data_writes[] = { |
| 4684 MockWrite("GET / HTTP/1.1\r\n" | 4731 MockWrite( |
| 4685 "Host: www.google.com\r\n" | 4732 "GET / HTTP/1.1\r\n" |
| 4686 "Connection: keep-alive\r\n\r\n"), | 4733 "Host: www.google.com\r\n" |
| 4734 "Connection: keep-alive\r\n\r\n"), |
| 4687 }; | 4735 }; |
| 4688 | 4736 |
| 4689 MockRead data_reads[] = { | 4737 MockRead data_reads[] = { |
| 4690 MockRead("HTTP/1.1 200 OK\r\n"), | 4738 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 11\r\n\r\n"), |
| 4691 MockRead("Content-Length: 11\r\n\r\n"), | 4739 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 4692 MockRead("hello world"), | |
| 4693 MockRead(SYNCHRONOUS, OK), | |
| 4694 }; | 4740 }; |
| 4695 | 4741 |
| 4696 SSLSocketDataProvider ssl(ASYNC, OK); | 4742 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4697 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4743 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4698 | 4744 |
| 4699 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4745 StaticSocketDataProvider data( |
| 4700 data_writes, arraysize(data_writes)); | 4746 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 4701 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4747 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4702 | 4748 |
| 4703 TestCompletionCallback callback; | 4749 TestCompletionCallback callback; |
| 4704 | 4750 |
| 4705 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4751 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4706 scoped_ptr<HttpTransaction> trans( | 4752 scoped_ptr<HttpTransaction> trans( |
| 4707 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4753 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4708 | 4754 |
| 4709 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4755 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4710 | 4756 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 4733 | 4779 |
| 4734 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it | 4780 // Grab a SSL socket, use it, and put it back into the pool. Then, reuse it |
| 4735 // from the pool and make sure that we recover okay. | 4781 // from the pool and make sure that we recover okay. |
| 4736 TEST_P(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { | 4782 TEST_P(HttpNetworkTransactionTest, RecycleDeadSSLSocket) { |
| 4737 HttpRequestInfo request; | 4783 HttpRequestInfo request; |
| 4738 request.method = "GET"; | 4784 request.method = "GET"; |
| 4739 request.url = GURL("https://www.google.com/"); | 4785 request.url = GURL("https://www.google.com/"); |
| 4740 request.load_flags = 0; | 4786 request.load_flags = 0; |
| 4741 | 4787 |
| 4742 MockWrite data_writes[] = { | 4788 MockWrite data_writes[] = { |
| 4743 MockWrite("GET / HTTP/1.1\r\n" | 4789 MockWrite( |
| 4744 "Host: www.google.com\r\n" | 4790 "GET / HTTP/1.1\r\n" |
| 4745 "Connection: keep-alive\r\n\r\n"), | 4791 "Host: www.google.com\r\n" |
| 4746 MockWrite("GET / HTTP/1.1\r\n" | 4792 "Connection: keep-alive\r\n\r\n"), |
| 4747 "Host: www.google.com\r\n" | 4793 MockWrite( |
| 4748 "Connection: keep-alive\r\n\r\n"), | 4794 "GET / HTTP/1.1\r\n" |
| 4795 "Host: www.google.com\r\n" |
| 4796 "Connection: keep-alive\r\n\r\n"), |
| 4749 }; | 4797 }; |
| 4750 | 4798 |
| 4751 MockRead data_reads[] = { | 4799 MockRead data_reads[] = { |
| 4752 MockRead("HTTP/1.1 200 OK\r\n"), | 4800 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 11\r\n\r\n"), |
| 4753 MockRead("Content-Length: 11\r\n\r\n"), | 4801 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 4754 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 4802 MockRead("hello world"), MockRead(ASYNC, 0, 0) // EOF |
| 4755 MockRead("hello world"), | |
| 4756 MockRead(ASYNC, 0, 0) // EOF | |
| 4757 }; | 4803 }; |
| 4758 | 4804 |
| 4759 SSLSocketDataProvider ssl(ASYNC, OK); | 4805 SSLSocketDataProvider ssl(ASYNC, OK); |
| 4760 SSLSocketDataProvider ssl2(ASYNC, OK); | 4806 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 4761 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 4807 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 4762 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 4808 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 4763 | 4809 |
| 4764 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 4810 StaticSocketDataProvider data( |
| 4765 data_writes, arraysize(data_writes)); | 4811 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 4766 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), | 4812 StaticSocketDataProvider data2( |
| 4767 data_writes, arraysize(data_writes)); | 4813 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 4768 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4814 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4769 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4815 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4770 | 4816 |
| 4771 TestCompletionCallback callback; | 4817 TestCompletionCallback callback; |
| 4772 | 4818 |
| 4773 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4819 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4774 scoped_ptr<HttpTransaction> trans( | 4820 scoped_ptr<HttpTransaction> trans( |
| 4775 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4821 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4776 | 4822 |
| 4777 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4823 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4824 | 4870 |
| 4825 // We now check to make sure the socket was added back to the pool. | 4871 // We now check to make sure the socket was added back to the pool. |
| 4826 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); | 4872 EXPECT_EQ(1, GetIdleSocketCountInSSLSocketPool(session.get())); |
| 4827 } | 4873 } |
| 4828 | 4874 |
| 4829 // Make sure that we recycle a socket after a zero-length response. | 4875 // Make sure that we recycle a socket after a zero-length response. |
| 4830 // http://crbug.com/9880 | 4876 // http://crbug.com/9880 |
| 4831 TEST_P(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { | 4877 TEST_P(HttpNetworkTransactionTest, RecycleSocketAfterZeroContentLength) { |
| 4832 HttpRequestInfo request; | 4878 HttpRequestInfo request; |
| 4833 request.method = "GET"; | 4879 request.method = "GET"; |
| 4834 request.url = GURL("http://www.google.com/csi?v=3&s=web&action=&" | 4880 request.url = GURL( |
| 4835 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" | 4881 "http://www.google.com/csi?v=3&s=web&action=&" |
| 4836 "e=17259,18167,19592,19773,19981,20133,20173,20233&" | 4882 "tran=undefined&ei=mAXcSeegAo-SMurloeUN&" |
| 4837 "rt=prt.2642,ol.2649,xjs.2951"); | 4883 "e=17259,18167,19592,19773,19981,20133,20173,20233&" |
| 4884 "rt=prt.2642,ol.2649,xjs.2951"); |
| 4838 request.load_flags = 0; | 4885 request.load_flags = 0; |
| 4839 | 4886 |
| 4840 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4887 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4841 | 4888 |
| 4842 scoped_ptr<HttpTransaction> trans( | 4889 scoped_ptr<HttpTransaction> trans( |
| 4843 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 4890 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4844 | 4891 |
| 4845 MockRead data_reads[] = { | 4892 MockRead data_reads[] = { |
| 4846 MockRead("HTTP/1.1 204 No Content\r\n" | 4893 MockRead( |
| 4847 "Content-Length: 0\r\n" | 4894 "HTTP/1.1 204 No Content\r\n" |
| 4848 "Content-Type: text/html\r\n\r\n"), | 4895 "Content-Length: 0\r\n" |
| 4849 MockRead("junk"), // Should not be read!! | 4896 "Content-Type: text/html\r\n\r\n"), |
| 4850 MockRead(SYNCHRONOUS, OK), | 4897 MockRead("junk"), // Should not be read!! |
| 4898 MockRead(SYNCHRONOUS, OK), |
| 4851 }; | 4899 }; |
| 4852 | 4900 |
| 4853 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 4901 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 4854 session_deps_.socket_factory->AddSocketDataProvider(&data); | 4902 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 4855 | 4903 |
| 4856 TestCompletionCallback callback; | 4904 TestCompletionCallback callback; |
| 4857 | 4905 |
| 4858 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 4906 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 4859 EXPECT_EQ(ERR_IO_PENDING, rv); | 4907 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4860 | 4908 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4903 request[1].upload_data_stream = &upload_data_stream; | 4951 request[1].upload_data_stream = &upload_data_stream; |
| 4904 request[1].load_flags = 0; | 4952 request[1].load_flags = 0; |
| 4905 | 4953 |
| 4906 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 4954 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4907 | 4955 |
| 4908 // The first socket is used for transaction 1 and the first attempt of | 4956 // The first socket is used for transaction 1 and the first attempt of |
| 4909 // transaction 2. | 4957 // transaction 2. |
| 4910 | 4958 |
| 4911 // The response of transaction 1. | 4959 // The response of transaction 1. |
| 4912 MockRead data_reads1[] = { | 4960 MockRead data_reads1[] = { |
| 4913 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), | 4961 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\n"), |
| 4914 MockRead("hello world"), | 4962 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 4915 MockRead(SYNCHRONOUS, OK), | |
| 4916 }; | 4963 }; |
| 4917 // The mock write results of transaction 1 and the first attempt of | 4964 // The mock write results of transaction 1 and the first attempt of |
| 4918 // transaction 2. | 4965 // transaction 2. |
| 4919 MockWrite data_writes1[] = { | 4966 MockWrite data_writes1[] = { |
| 4920 MockWrite(SYNCHRONOUS, 64), // GET | 4967 MockWrite(SYNCHRONOUS, 64), // GET |
| 4921 MockWrite(SYNCHRONOUS, 93), // POST | 4968 MockWrite(SYNCHRONOUS, 93), // POST |
| 4922 MockWrite(SYNCHRONOUS, ERR_CONNECTION_ABORTED), // POST data | 4969 MockWrite(SYNCHRONOUS, ERR_CONNECTION_ABORTED), // POST data |
| 4923 }; | 4970 }; |
| 4924 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 4971 StaticSocketDataProvider data1(data_reads1, |
| 4925 data_writes1, arraysize(data_writes1)); | 4972 arraysize(data_reads1), |
| 4973 data_writes1, |
| 4974 arraysize(data_writes1)); |
| 4926 | 4975 |
| 4927 // The second socket is used for the second attempt of transaction 2. | 4976 // The second socket is used for the second attempt of transaction 2. |
| 4928 | 4977 |
| 4929 // The response of transaction 2. | 4978 // The response of transaction 2. |
| 4930 MockRead data_reads2[] = { | 4979 MockRead data_reads2[] = { |
| 4931 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 7\r\n\r\n"), | 4980 MockRead("HTTP/1.1 200 OK\r\nContent-Length: 7\r\n\r\n"), |
| 4932 MockRead("welcome"), | 4981 MockRead("welcome"), MockRead(SYNCHRONOUS, OK), |
| 4933 MockRead(SYNCHRONOUS, OK), | |
| 4934 }; | 4982 }; |
| 4935 // The mock write results of the second attempt of transaction 2. | 4983 // The mock write results of the second attempt of transaction 2. |
| 4936 MockWrite data_writes2[] = { | 4984 MockWrite data_writes2[] = { |
| 4937 MockWrite(SYNCHRONOUS, 93), // POST | 4985 MockWrite(SYNCHRONOUS, 93), // POST |
| 4938 MockWrite(SYNCHRONOUS, 3), // POST data | 4986 MockWrite(SYNCHRONOUS, 3), // POST data |
| 4939 }; | 4987 }; |
| 4940 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 4988 StaticSocketDataProvider data2(data_reads2, |
| 4941 data_writes2, arraysize(data_writes2)); | 4989 arraysize(data_reads2), |
| 4990 data_writes2, |
| 4991 arraysize(data_writes2)); |
| 4942 | 4992 |
| 4943 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 4993 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 4944 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 4994 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 4945 | 4995 |
| 4946 const char* kExpectedResponseData[] = { | 4996 const char* kExpectedResponseData[] = {"hello world", "welcome"}; |
| 4947 "hello world", "welcome" | |
| 4948 }; | |
| 4949 | 4997 |
| 4950 for (int i = 0; i < 2; ++i) { | 4998 for (int i = 0; i < 2; ++i) { |
| 4951 scoped_ptr<HttpTransaction> trans( | 4999 scoped_ptr<HttpTransaction> trans( |
| 4952 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5000 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 4953 | 5001 |
| 4954 TestCompletionCallback callback; | 5002 TestCompletionCallback callback; |
| 4955 | 5003 |
| 4956 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); | 5004 int rv = trans->Start(&request[i], callback.callback(), BoundNetLog()); |
| 4957 EXPECT_EQ(ERR_IO_PENDING, rv); | 5005 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 4958 | 5006 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 4983 | 5031 |
| 4984 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5032 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 4985 scoped_ptr<HttpTransaction> trans( | 5033 scoped_ptr<HttpTransaction> trans( |
| 4986 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 5034 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 4987 | 5035 |
| 4988 // The password contains an escaped character -- for this test to pass it | 5036 // The password contains an escaped character -- for this test to pass it |
| 4989 // will need to be unescaped by HttpNetworkTransaction. | 5037 // will need to be unescaped by HttpNetworkTransaction. |
| 4990 EXPECT_EQ("b%40r", request.url.password()); | 5038 EXPECT_EQ("b%40r", request.url.password()); |
| 4991 | 5039 |
| 4992 MockWrite data_writes1[] = { | 5040 MockWrite data_writes1[] = { |
| 4993 MockWrite("GET / HTTP/1.1\r\n" | 5041 MockWrite( |
| 4994 "Host: www.google.com\r\n" | 5042 "GET / HTTP/1.1\r\n" |
| 4995 "Connection: keep-alive\r\n\r\n"), | 5043 "Host: www.google.com\r\n" |
| 5044 "Connection: keep-alive\r\n\r\n"), |
| 4996 }; | 5045 }; |
| 4997 | 5046 |
| 4998 MockRead data_reads1[] = { | 5047 MockRead data_reads1[] = { |
| 4999 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5048 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5000 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5049 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5001 MockRead("Content-Length: 10\r\n\r\n"), | 5050 MockRead("Content-Length: 10\r\n\r\n"), MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5002 MockRead(SYNCHRONOUS, ERR_FAILED), | |
| 5003 }; | 5051 }; |
| 5004 | 5052 |
| 5005 // After the challenge above, the transaction will be restarted using the | 5053 // After the challenge above, the transaction will be restarted using the |
| 5006 // identity from the url (foo, b@r) to answer the challenge. | 5054 // identity from the url (foo, b@r) to answer the challenge. |
| 5007 MockWrite data_writes2[] = { | 5055 MockWrite data_writes2[] = { |
| 5008 MockWrite("GET / HTTP/1.1\r\n" | 5056 MockWrite( |
| 5009 "Host: www.google.com\r\n" | 5057 "GET / HTTP/1.1\r\n" |
| 5010 "Connection: keep-alive\r\n" | 5058 "Host: www.google.com\r\n" |
| 5011 "Authorization: Basic Zm9vOmJAcg==\r\n\r\n"), | 5059 "Connection: keep-alive\r\n" |
| 5060 "Authorization: Basic Zm9vOmJAcg==\r\n\r\n"), |
| 5012 }; | 5061 }; |
| 5013 | 5062 |
| 5014 MockRead data_reads2[] = { | 5063 MockRead data_reads2[] = { |
| 5015 MockRead("HTTP/1.0 200 OK\r\n"), | 5064 MockRead("HTTP/1.0 200 OK\r\n"), MockRead("Content-Length: 100\r\n\r\n"), |
| 5016 MockRead("Content-Length: 100\r\n\r\n"), | 5065 MockRead(SYNCHRONOUS, OK), |
| 5017 MockRead(SYNCHRONOUS, OK), | |
| 5018 }; | 5066 }; |
| 5019 | 5067 |
| 5020 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5068 StaticSocketDataProvider data1(data_reads1, |
| 5021 data_writes1, arraysize(data_writes1)); | 5069 arraysize(data_reads1), |
| 5022 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5070 data_writes1, |
| 5023 data_writes2, arraysize(data_writes2)); | 5071 arraysize(data_writes1)); |
| 5072 StaticSocketDataProvider data2(data_reads2, |
| 5073 arraysize(data_reads2), |
| 5074 data_writes2, |
| 5075 arraysize(data_writes2)); |
| 5024 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5076 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5025 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5077 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5026 | 5078 |
| 5027 TestCompletionCallback callback1; | 5079 TestCompletionCallback callback1; |
| 5028 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5080 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5029 EXPECT_EQ(ERR_IO_PENDING, rv); | 5081 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5030 rv = callback1.WaitForResult(); | 5082 rv = callback1.WaitForResult(); |
| 5031 EXPECT_EQ(OK, rv); | 5083 EXPECT_EQ(OK, rv); |
| 5032 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 5084 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 5033 | 5085 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 5060 // wrong (should be "bar"). | 5112 // wrong (should be "bar"). |
| 5061 request.url = GURL("http://foo:baz@www.google.com/"); | 5113 request.url = GURL("http://foo:baz@www.google.com/"); |
| 5062 | 5114 |
| 5063 request.load_flags = LOAD_NORMAL; | 5115 request.load_flags = LOAD_NORMAL; |
| 5064 | 5116 |
| 5065 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5117 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 5066 scoped_ptr<HttpTransaction> trans( | 5118 scoped_ptr<HttpTransaction> trans( |
| 5067 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 5119 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 5068 | 5120 |
| 5069 MockWrite data_writes1[] = { | 5121 MockWrite data_writes1[] = { |
| 5070 MockWrite("GET / HTTP/1.1\r\n" | 5122 MockWrite( |
| 5071 "Host: www.google.com\r\n" | 5123 "GET / HTTP/1.1\r\n" |
| 5072 "Connection: keep-alive\r\n\r\n"), | 5124 "Host: www.google.com\r\n" |
| 5125 "Connection: keep-alive\r\n\r\n"), |
| 5073 }; | 5126 }; |
| 5074 | 5127 |
| 5075 MockRead data_reads1[] = { | 5128 MockRead data_reads1[] = { |
| 5076 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5129 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5077 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5130 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5078 MockRead("Content-Length: 10\r\n\r\n"), | 5131 MockRead("Content-Length: 10\r\n\r\n"), MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5079 MockRead(SYNCHRONOUS, ERR_FAILED), | |
| 5080 }; | 5132 }; |
| 5081 | 5133 |
| 5082 // After the challenge above, the transaction will be restarted using the | 5134 // After the challenge above, the transaction will be restarted using the |
| 5083 // identity from the url (foo, baz) to answer the challenge. | 5135 // identity from the url (foo, baz) to answer the challenge. |
| 5084 MockWrite data_writes2[] = { | 5136 MockWrite data_writes2[] = { |
| 5085 MockWrite("GET / HTTP/1.1\r\n" | 5137 MockWrite( |
| 5086 "Host: www.google.com\r\n" | 5138 "GET / HTTP/1.1\r\n" |
| 5087 "Connection: keep-alive\r\n" | 5139 "Host: www.google.com\r\n" |
| 5088 "Authorization: Basic Zm9vOmJheg==\r\n\r\n"), | 5140 "Connection: keep-alive\r\n" |
| 5141 "Authorization: Basic Zm9vOmJheg==\r\n\r\n"), |
| 5089 }; | 5142 }; |
| 5090 | 5143 |
| 5091 MockRead data_reads2[] = { | 5144 MockRead data_reads2[] = { |
| 5092 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5145 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5093 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5146 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5094 MockRead("Content-Length: 10\r\n\r\n"), | 5147 MockRead("Content-Length: 10\r\n\r\n"), MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5095 MockRead(SYNCHRONOUS, ERR_FAILED), | |
| 5096 }; | 5148 }; |
| 5097 | 5149 |
| 5098 // After the challenge above, the transaction will be restarted using the | 5150 // After the challenge above, the transaction will be restarted using the |
| 5099 // identity supplied by the user (foo, bar) to answer the challenge. | 5151 // identity supplied by the user (foo, bar) to answer the challenge. |
| 5100 MockWrite data_writes3[] = { | 5152 MockWrite data_writes3[] = { |
| 5101 MockWrite("GET / HTTP/1.1\r\n" | 5153 MockWrite( |
| 5102 "Host: www.google.com\r\n" | 5154 "GET / HTTP/1.1\r\n" |
| 5103 "Connection: keep-alive\r\n" | 5155 "Host: www.google.com\r\n" |
| 5104 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5156 "Connection: keep-alive\r\n" |
| 5157 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5105 }; | 5158 }; |
| 5106 | 5159 |
| 5107 MockRead data_reads3[] = { | 5160 MockRead data_reads3[] = { |
| 5108 MockRead("HTTP/1.0 200 OK\r\n"), | 5161 MockRead("HTTP/1.0 200 OK\r\n"), MockRead("Content-Length: 100\r\n\r\n"), |
| 5109 MockRead("Content-Length: 100\r\n\r\n"), | 5162 MockRead(SYNCHRONOUS, OK), |
| 5110 MockRead(SYNCHRONOUS, OK), | |
| 5111 }; | 5163 }; |
| 5112 | 5164 |
| 5113 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5165 StaticSocketDataProvider data1(data_reads1, |
| 5114 data_writes1, arraysize(data_writes1)); | 5166 arraysize(data_reads1), |
| 5115 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5167 data_writes1, |
| 5116 data_writes2, arraysize(data_writes2)); | 5168 arraysize(data_writes1)); |
| 5117 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 5169 StaticSocketDataProvider data2(data_reads2, |
| 5118 data_writes3, arraysize(data_writes3)); | 5170 arraysize(data_reads2), |
| 5171 data_writes2, |
| 5172 arraysize(data_writes2)); |
| 5173 StaticSocketDataProvider data3(data_reads3, |
| 5174 arraysize(data_reads3), |
| 5175 data_writes3, |
| 5176 arraysize(data_writes3)); |
| 5119 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5177 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5120 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5178 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5121 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 5179 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 5122 | 5180 |
| 5123 TestCompletionCallback callback1; | 5181 TestCompletionCallback callback1; |
| 5124 | 5182 |
| 5125 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5183 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5126 EXPECT_EQ(ERR_IO_PENDING, rv); | 5184 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5127 | 5185 |
| 5128 rv = callback1.WaitForResult(); | 5186 rv = callback1.WaitForResult(); |
| 5129 EXPECT_EQ(OK, rv); | 5187 EXPECT_EQ(OK, rv); |
| 5130 | 5188 |
| 5131 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 5189 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 5132 TestCompletionCallback callback2; | 5190 TestCompletionCallback callback2; |
| 5133 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 5191 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 5134 EXPECT_EQ(ERR_IO_PENDING, rv); | 5192 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5135 rv = callback2.WaitForResult(); | 5193 rv = callback2.WaitForResult(); |
| 5136 EXPECT_EQ(OK, rv); | 5194 EXPECT_EQ(OK, rv); |
| 5137 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5195 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5138 | 5196 |
| 5139 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5197 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5140 ASSERT_TRUE(response != NULL); | 5198 ASSERT_TRUE(response != NULL); |
| 5141 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5199 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 5142 | 5200 |
| 5143 TestCompletionCallback callback3; | 5201 TestCompletionCallback callback3; |
| 5144 rv = trans->RestartWithAuth( | 5202 rv = |
| 5145 AuthCredentials(kFoo, kBar), callback3.callback()); | 5203 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback3.callback()); |
| 5146 EXPECT_EQ(ERR_IO_PENDING, rv); | 5204 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5147 rv = callback3.WaitForResult(); | 5205 rv = callback3.WaitForResult(); |
| 5148 EXPECT_EQ(OK, rv); | 5206 EXPECT_EQ(OK, rv); |
| 5149 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5207 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5150 | 5208 |
| 5151 response = trans->GetResponseInfo(); | 5209 response = trans->GetResponseInfo(); |
| 5152 ASSERT_TRUE(response != NULL); | 5210 ASSERT_TRUE(response != NULL); |
| 5153 | 5211 |
| 5154 // There is no challenge info, since the identity worked. | 5212 // There is no challenge info, since the identity worked. |
| 5155 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5213 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 5156 | 5214 |
| 5157 EXPECT_EQ(100, response->headers->GetContentLength()); | 5215 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5158 | 5216 |
| 5159 // Empty the current queue. | 5217 // Empty the current queue. |
| 5160 base::MessageLoop::current()->RunUntilIdle(); | 5218 base::MessageLoop::current()->RunUntilIdle(); |
| 5161 } | 5219 } |
| 5162 | 5220 |
| 5163 | |
| 5164 // Test the request-challenge-retry sequence for basic auth when there is a | 5221 // Test the request-challenge-retry sequence for basic auth when there is a |
| 5165 // correct identity in the URL, but its use is being suppressed. The identity | 5222 // correct identity in the URL, but its use is being suppressed. The identity |
| 5166 // from the URL should never be used. | 5223 // from the URL should never be used. |
| 5167 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURLSuppressed) { | 5224 TEST_P(HttpNetworkTransactionTest, AuthIdentityInURLSuppressed) { |
| 5168 HttpRequestInfo request; | 5225 HttpRequestInfo request; |
| 5169 request.method = "GET"; | 5226 request.method = "GET"; |
| 5170 request.url = GURL("http://foo:bar@www.google.com/"); | 5227 request.url = GURL("http://foo:bar@www.google.com/"); |
| 5171 request.load_flags = LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; | 5228 request.load_flags = LOAD_DO_NOT_USE_EMBEDDED_IDENTITY; |
| 5172 | 5229 |
| 5173 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5230 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 5174 scoped_ptr<HttpTransaction> trans( | 5231 scoped_ptr<HttpTransaction> trans( |
| 5175 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 5232 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 5176 | 5233 |
| 5177 MockWrite data_writes1[] = { | 5234 MockWrite data_writes1[] = { |
| 5178 MockWrite("GET / HTTP/1.1\r\n" | 5235 MockWrite( |
| 5179 "Host: www.google.com\r\n" | 5236 "GET / HTTP/1.1\r\n" |
| 5180 "Connection: keep-alive\r\n\r\n"), | 5237 "Host: www.google.com\r\n" |
| 5238 "Connection: keep-alive\r\n\r\n"), |
| 5181 }; | 5239 }; |
| 5182 | 5240 |
| 5183 MockRead data_reads1[] = { | 5241 MockRead data_reads1[] = { |
| 5184 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5242 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5185 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5243 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5186 MockRead("Content-Length: 10\r\n\r\n"), | 5244 MockRead("Content-Length: 10\r\n\r\n"), MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5187 MockRead(SYNCHRONOUS, ERR_FAILED), | |
| 5188 }; | 5245 }; |
| 5189 | 5246 |
| 5190 // After the challenge above, the transaction will be restarted using the | 5247 // After the challenge above, the transaction will be restarted using the |
| 5191 // identity supplied by the user, not the one in the URL, to answer the | 5248 // identity supplied by the user, not the one in the URL, to answer the |
| 5192 // challenge. | 5249 // challenge. |
| 5193 MockWrite data_writes3[] = { | 5250 MockWrite data_writes3[] = { |
| 5194 MockWrite("GET / HTTP/1.1\r\n" | 5251 MockWrite( |
| 5195 "Host: www.google.com\r\n" | 5252 "GET / HTTP/1.1\r\n" |
| 5196 "Connection: keep-alive\r\n" | 5253 "Host: www.google.com\r\n" |
| 5197 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5254 "Connection: keep-alive\r\n" |
| 5255 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5198 }; | 5256 }; |
| 5199 | 5257 |
| 5200 MockRead data_reads3[] = { | 5258 MockRead data_reads3[] = { |
| 5201 MockRead("HTTP/1.0 200 OK\r\n"), | 5259 MockRead("HTTP/1.0 200 OK\r\n"), MockRead("Content-Length: 100\r\n\r\n"), |
| 5202 MockRead("Content-Length: 100\r\n\r\n"), | 5260 MockRead(SYNCHRONOUS, OK), |
| 5203 MockRead(SYNCHRONOUS, OK), | |
| 5204 }; | 5261 }; |
| 5205 | 5262 |
| 5206 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5263 StaticSocketDataProvider data1(data_reads1, |
| 5207 data_writes1, arraysize(data_writes1)); | 5264 arraysize(data_reads1), |
| 5208 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 5265 data_writes1, |
| 5209 data_writes3, arraysize(data_writes3)); | 5266 arraysize(data_writes1)); |
| 5267 StaticSocketDataProvider data3(data_reads3, |
| 5268 arraysize(data_reads3), |
| 5269 data_writes3, |
| 5270 arraysize(data_writes3)); |
| 5210 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5271 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5211 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 5272 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 5212 | 5273 |
| 5213 TestCompletionCallback callback1; | 5274 TestCompletionCallback callback1; |
| 5214 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5275 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5215 EXPECT_EQ(ERR_IO_PENDING, rv); | 5276 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5216 rv = callback1.WaitForResult(); | 5277 rv = callback1.WaitForResult(); |
| 5217 EXPECT_EQ(OK, rv); | 5278 EXPECT_EQ(OK, rv); |
| 5218 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5279 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5219 | 5280 |
| 5220 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5281 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5221 ASSERT_TRUE(response != NULL); | 5282 ASSERT_TRUE(response != NULL); |
| 5222 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5283 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 5223 | 5284 |
| 5224 TestCompletionCallback callback3; | 5285 TestCompletionCallback callback3; |
| 5225 rv = trans->RestartWithAuth( | 5286 rv = |
| 5226 AuthCredentials(kFoo, kBar), callback3.callback()); | 5287 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback3.callback()); |
| 5227 EXPECT_EQ(ERR_IO_PENDING, rv); | 5288 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5228 rv = callback3.WaitForResult(); | 5289 rv = callback3.WaitForResult(); |
| 5229 EXPECT_EQ(OK, rv); | 5290 EXPECT_EQ(OK, rv); |
| 5230 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5291 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5231 | 5292 |
| 5232 response = trans->GetResponseInfo(); | 5293 response = trans->GetResponseInfo(); |
| 5233 ASSERT_TRUE(response != NULL); | 5294 ASSERT_TRUE(response != NULL); |
| 5234 | 5295 |
| 5235 // There is no challenge info, since the identity worked. | 5296 // There is no challenge info, since the identity worked. |
| 5236 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5297 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 5248 { | 5309 { |
| 5249 HttpRequestInfo request; | 5310 HttpRequestInfo request; |
| 5250 request.method = "GET"; | 5311 request.method = "GET"; |
| 5251 request.url = GURL("http://www.google.com/x/y/z"); | 5312 request.url = GURL("http://www.google.com/x/y/z"); |
| 5252 request.load_flags = 0; | 5313 request.load_flags = 0; |
| 5253 | 5314 |
| 5254 scoped_ptr<HttpTransaction> trans( | 5315 scoped_ptr<HttpTransaction> trans( |
| 5255 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5316 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5256 | 5317 |
| 5257 MockWrite data_writes1[] = { | 5318 MockWrite data_writes1[] = { |
| 5258 MockWrite("GET /x/y/z HTTP/1.1\r\n" | 5319 MockWrite( |
| 5259 "Host: www.google.com\r\n" | 5320 "GET /x/y/z HTTP/1.1\r\n" |
| 5260 "Connection: keep-alive\r\n\r\n"), | 5321 "Host: www.google.com\r\n" |
| 5322 "Connection: keep-alive\r\n\r\n"), |
| 5261 }; | 5323 }; |
| 5262 | 5324 |
| 5263 MockRead data_reads1[] = { | 5325 MockRead data_reads1[] = { |
| 5264 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5326 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5265 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5327 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5266 MockRead("Content-Length: 10000\r\n\r\n"), | 5328 MockRead("Content-Length: 10000\r\n\r\n"), |
| 5267 MockRead(SYNCHRONOUS, ERR_FAILED), | 5329 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5268 }; | 5330 }; |
| 5269 | 5331 |
| 5270 // Resend with authorization (username=foo, password=bar) | 5332 // Resend with authorization (username=foo, password=bar) |
| 5271 MockWrite data_writes2[] = { | 5333 MockWrite data_writes2[] = { |
| 5272 MockWrite("GET /x/y/z HTTP/1.1\r\n" | 5334 MockWrite( |
| 5273 "Host: www.google.com\r\n" | 5335 "GET /x/y/z HTTP/1.1\r\n" |
| 5274 "Connection: keep-alive\r\n" | 5336 "Host: www.google.com\r\n" |
| 5275 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5337 "Connection: keep-alive\r\n" |
| 5338 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5276 }; | 5339 }; |
| 5277 | 5340 |
| 5278 // Sever accepts the authorization. | 5341 // Sever accepts the authorization. |
| 5279 MockRead data_reads2[] = { | 5342 MockRead data_reads2[] = { |
| 5280 MockRead("HTTP/1.0 200 OK\r\n"), | 5343 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5281 MockRead("Content-Length: 100\r\n\r\n"), | 5344 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5282 MockRead(SYNCHRONOUS, OK), | |
| 5283 }; | 5345 }; |
| 5284 | 5346 |
| 5285 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5347 StaticSocketDataProvider data1(data_reads1, |
| 5286 data_writes1, arraysize(data_writes1)); | 5348 arraysize(data_reads1), |
| 5287 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5349 data_writes1, |
| 5288 data_writes2, arraysize(data_writes2)); | 5350 arraysize(data_writes1)); |
| 5351 StaticSocketDataProvider data2(data_reads2, |
| 5352 arraysize(data_reads2), |
| 5353 data_writes2, |
| 5354 arraysize(data_writes2)); |
| 5289 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5355 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5290 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5356 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5291 | 5357 |
| 5292 TestCompletionCallback callback1; | 5358 TestCompletionCallback callback1; |
| 5293 | 5359 |
| 5294 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5360 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5295 EXPECT_EQ(ERR_IO_PENDING, rv); | 5361 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5296 | 5362 |
| 5297 rv = callback1.WaitForResult(); | 5363 rv = callback1.WaitForResult(); |
| 5298 EXPECT_EQ(OK, rv); | 5364 EXPECT_EQ(OK, rv); |
| 5299 | 5365 |
| 5300 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5366 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5301 ASSERT_TRUE(response != NULL); | 5367 ASSERT_TRUE(response != NULL); |
| 5302 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5368 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 5303 | 5369 |
| 5304 TestCompletionCallback callback2; | 5370 TestCompletionCallback callback2; |
| 5305 | 5371 |
| 5306 rv = trans->RestartWithAuth( | 5372 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 5307 AuthCredentials(kFoo, kBar), callback2.callback()); | 5373 callback2.callback()); |
| 5308 EXPECT_EQ(ERR_IO_PENDING, rv); | 5374 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5309 | 5375 |
| 5310 rv = callback2.WaitForResult(); | 5376 rv = callback2.WaitForResult(); |
| 5311 EXPECT_EQ(OK, rv); | 5377 EXPECT_EQ(OK, rv); |
| 5312 | 5378 |
| 5313 response = trans->GetResponseInfo(); | 5379 response = trans->GetResponseInfo(); |
| 5314 ASSERT_TRUE(response != NULL); | 5380 ASSERT_TRUE(response != NULL); |
| 5315 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5381 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 5316 EXPECT_EQ(100, response->headers->GetContentLength()); | 5382 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5317 } | 5383 } |
| 5318 | 5384 |
| 5319 // ------------------------------------------------------------------------ | 5385 // ------------------------------------------------------------------------ |
| 5320 | 5386 |
| 5321 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 | 5387 // Transaction 2: authenticate (foo2, bar2) on MyRealm2 |
| 5322 { | 5388 { |
| 5323 HttpRequestInfo request; | 5389 HttpRequestInfo request; |
| 5324 request.method = "GET"; | 5390 request.method = "GET"; |
| 5325 // Note that Transaction 1 was at /x/y/z, so this is in the same | 5391 // Note that Transaction 1 was at /x/y/z, so this is in the same |
| 5326 // protection space as MyRealm1. | 5392 // protection space as MyRealm1. |
| 5327 request.url = GURL("http://www.google.com/x/y/a/b"); | 5393 request.url = GURL("http://www.google.com/x/y/a/b"); |
| 5328 request.load_flags = 0; | 5394 request.load_flags = 0; |
| 5329 | 5395 |
| 5330 scoped_ptr<HttpTransaction> trans( | 5396 scoped_ptr<HttpTransaction> trans( |
| 5331 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5397 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5332 | 5398 |
| 5333 MockWrite data_writes1[] = { | 5399 MockWrite data_writes1[] = { |
| 5334 MockWrite("GET /x/y/a/b HTTP/1.1\r\n" | 5400 MockWrite( |
| 5335 "Host: www.google.com\r\n" | 5401 "GET /x/y/a/b HTTP/1.1\r\n" |
| 5336 "Connection: keep-alive\r\n" | 5402 "Host: www.google.com\r\n" |
| 5337 // Send preemptive authorization for MyRealm1 | 5403 "Connection: keep-alive\r\n" |
| 5338 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5404 // Send preemptive authorization for MyRealm1 |
| 5405 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5339 }; | 5406 }; |
| 5340 | 5407 |
| 5341 // The server didn't like the preemptive authorization, and | 5408 // The server didn't like the preemptive authorization, and |
| 5342 // challenges us for a different realm (MyRealm2). | 5409 // challenges us for a different realm (MyRealm2). |
| 5343 MockRead data_reads1[] = { | 5410 MockRead data_reads1[] = { |
| 5344 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5411 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5345 MockRead("WWW-Authenticate: Basic realm=\"MyRealm2\"\r\n"), | 5412 MockRead("WWW-Authenticate: Basic realm=\"MyRealm2\"\r\n"), |
| 5346 MockRead("Content-Length: 10000\r\n\r\n"), | 5413 MockRead("Content-Length: 10000\r\n\r\n"), |
| 5347 MockRead(SYNCHRONOUS, ERR_FAILED), | 5414 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5348 }; | 5415 }; |
| 5349 | 5416 |
| 5350 // Resend with authorization for MyRealm2 (username=foo2, password=bar2) | 5417 // Resend with authorization for MyRealm2 (username=foo2, password=bar2) |
| 5351 MockWrite data_writes2[] = { | 5418 MockWrite data_writes2[] = { |
| 5352 MockWrite("GET /x/y/a/b HTTP/1.1\r\n" | 5419 MockWrite( |
| 5353 "Host: www.google.com\r\n" | 5420 "GET /x/y/a/b HTTP/1.1\r\n" |
| 5354 "Connection: keep-alive\r\n" | 5421 "Host: www.google.com\r\n" |
| 5355 "Authorization: Basic Zm9vMjpiYXIy\r\n\r\n"), | 5422 "Connection: keep-alive\r\n" |
| 5423 "Authorization: Basic Zm9vMjpiYXIy\r\n\r\n"), |
| 5356 }; | 5424 }; |
| 5357 | 5425 |
| 5358 // Sever accepts the authorization. | 5426 // Sever accepts the authorization. |
| 5359 MockRead data_reads2[] = { | 5427 MockRead data_reads2[] = { |
| 5360 MockRead("HTTP/1.0 200 OK\r\n"), | 5428 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5361 MockRead("Content-Length: 100\r\n\r\n"), | 5429 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5362 MockRead(SYNCHRONOUS, OK), | |
| 5363 }; | 5430 }; |
| 5364 | 5431 |
| 5365 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5432 StaticSocketDataProvider data1(data_reads1, |
| 5366 data_writes1, arraysize(data_writes1)); | 5433 arraysize(data_reads1), |
| 5367 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5434 data_writes1, |
| 5368 data_writes2, arraysize(data_writes2)); | 5435 arraysize(data_writes1)); |
| 5436 StaticSocketDataProvider data2(data_reads2, |
| 5437 arraysize(data_reads2), |
| 5438 data_writes2, |
| 5439 arraysize(data_writes2)); |
| 5369 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5440 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5370 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5441 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5371 | 5442 |
| 5372 TestCompletionCallback callback1; | 5443 TestCompletionCallback callback1; |
| 5373 | 5444 |
| 5374 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5445 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5375 EXPECT_EQ(ERR_IO_PENDING, rv); | 5446 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5376 | 5447 |
| 5377 rv = callback1.WaitForResult(); | 5448 rv = callback1.WaitForResult(); |
| 5378 EXPECT_EQ(OK, rv); | 5449 EXPECT_EQ(OK, rv); |
| 5379 | 5450 |
| 5380 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5451 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5381 ASSERT_TRUE(response != NULL); | 5452 ASSERT_TRUE(response != NULL); |
| 5382 ASSERT_TRUE(response->auth_challenge.get()); | 5453 ASSERT_TRUE(response->auth_challenge.get()); |
| 5383 EXPECT_FALSE(response->auth_challenge->is_proxy); | 5454 EXPECT_FALSE(response->auth_challenge->is_proxy); |
| 5384 EXPECT_EQ("www.google.com:80", | 5455 EXPECT_EQ("www.google.com:80", |
| 5385 response->auth_challenge->challenger.ToString()); | 5456 response->auth_challenge->challenger.ToString()); |
| 5386 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); | 5457 EXPECT_EQ("MyRealm2", response->auth_challenge->realm); |
| 5387 EXPECT_EQ("basic", response->auth_challenge->scheme); | 5458 EXPECT_EQ("basic", response->auth_challenge->scheme); |
| 5388 | 5459 |
| 5389 TestCompletionCallback callback2; | 5460 TestCompletionCallback callback2; |
| 5390 | 5461 |
| 5391 rv = trans->RestartWithAuth( | 5462 rv = trans->RestartWithAuth(AuthCredentials(kFoo2, kBar2), |
| 5392 AuthCredentials(kFoo2, kBar2), callback2.callback()); | 5463 callback2.callback()); |
| 5393 EXPECT_EQ(ERR_IO_PENDING, rv); | 5464 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5394 | 5465 |
| 5395 rv = callback2.WaitForResult(); | 5466 rv = callback2.WaitForResult(); |
| 5396 EXPECT_EQ(OK, rv); | 5467 EXPECT_EQ(OK, rv); |
| 5397 | 5468 |
| 5398 response = trans->GetResponseInfo(); | 5469 response = trans->GetResponseInfo(); |
| 5399 ASSERT_TRUE(response != NULL); | 5470 ASSERT_TRUE(response != NULL); |
| 5400 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5471 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 5401 EXPECT_EQ(100, response->headers->GetContentLength()); | 5472 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5402 } | 5473 } |
| 5403 | 5474 |
| 5404 // ------------------------------------------------------------------------ | 5475 // ------------------------------------------------------------------------ |
| 5405 | 5476 |
| 5406 // Transaction 3: Resend a request in MyRealm's protection space -- | 5477 // Transaction 3: Resend a request in MyRealm's protection space -- |
| 5407 // succeed with preemptive authorization. | 5478 // succeed with preemptive authorization. |
| 5408 { | 5479 { |
| 5409 HttpRequestInfo request; | 5480 HttpRequestInfo request; |
| 5410 request.method = "GET"; | 5481 request.method = "GET"; |
| 5411 request.url = GURL("http://www.google.com/x/y/z2"); | 5482 request.url = GURL("http://www.google.com/x/y/z2"); |
| 5412 request.load_flags = 0; | 5483 request.load_flags = 0; |
| 5413 | 5484 |
| 5414 scoped_ptr<HttpTransaction> trans( | 5485 scoped_ptr<HttpTransaction> trans( |
| 5415 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5486 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5416 | 5487 |
| 5417 MockWrite data_writes1[] = { | 5488 MockWrite data_writes1[] = { |
| 5418 MockWrite("GET /x/y/z2 HTTP/1.1\r\n" | 5489 MockWrite( |
| 5419 "Host: www.google.com\r\n" | 5490 "GET /x/y/z2 HTTP/1.1\r\n" |
| 5420 "Connection: keep-alive\r\n" | 5491 "Host: www.google.com\r\n" |
| 5421 // The authorization for MyRealm1 gets sent preemptively | 5492 "Connection: keep-alive\r\n" |
| 5422 // (since the url is in the same protection space) | 5493 // The authorization for MyRealm1 gets sent preemptively |
| 5423 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5494 // (since the url is in the same protection space) |
| 5495 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5424 }; | 5496 }; |
| 5425 | 5497 |
| 5426 // Sever accepts the preemptive authorization | 5498 // Sever accepts the preemptive authorization |
| 5427 MockRead data_reads1[] = { | 5499 MockRead data_reads1[] = { |
| 5428 MockRead("HTTP/1.0 200 OK\r\n"), | 5500 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5429 MockRead("Content-Length: 100\r\n\r\n"), | 5501 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5430 MockRead(SYNCHRONOUS, OK), | |
| 5431 }; | 5502 }; |
| 5432 | 5503 |
| 5433 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5504 StaticSocketDataProvider data1(data_reads1, |
| 5434 data_writes1, arraysize(data_writes1)); | 5505 arraysize(data_reads1), |
| 5506 data_writes1, |
| 5507 arraysize(data_writes1)); |
| 5435 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5508 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5436 | 5509 |
| 5437 TestCompletionCallback callback1; | 5510 TestCompletionCallback callback1; |
| 5438 | 5511 |
| 5439 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5512 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5440 EXPECT_EQ(ERR_IO_PENDING, rv); | 5513 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5441 | 5514 |
| 5442 rv = callback1.WaitForResult(); | 5515 rv = callback1.WaitForResult(); |
| 5443 EXPECT_EQ(OK, rv); | 5516 EXPECT_EQ(OK, rv); |
| 5444 | 5517 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 5456 { | 5529 { |
| 5457 HttpRequestInfo request; | 5530 HttpRequestInfo request; |
| 5458 request.method = "GET"; | 5531 request.method = "GET"; |
| 5459 request.url = GURL("http://www.google.com/x/1"); | 5532 request.url = GURL("http://www.google.com/x/1"); |
| 5460 request.load_flags = 0; | 5533 request.load_flags = 0; |
| 5461 | 5534 |
| 5462 scoped_ptr<HttpTransaction> trans( | 5535 scoped_ptr<HttpTransaction> trans( |
| 5463 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5536 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5464 | 5537 |
| 5465 MockWrite data_writes1[] = { | 5538 MockWrite data_writes1[] = { |
| 5466 MockWrite("GET /x/1 HTTP/1.1\r\n" | 5539 MockWrite( |
| 5467 "Host: www.google.com\r\n" | 5540 "GET /x/1 HTTP/1.1\r\n" |
| 5468 "Connection: keep-alive\r\n\r\n"), | 5541 "Host: www.google.com\r\n" |
| 5542 "Connection: keep-alive\r\n\r\n"), |
| 5469 }; | 5543 }; |
| 5470 | 5544 |
| 5471 MockRead data_reads1[] = { | 5545 MockRead data_reads1[] = { |
| 5472 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5546 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5473 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5547 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5474 MockRead("Content-Length: 10000\r\n\r\n"), | 5548 MockRead("Content-Length: 10000\r\n\r\n"), |
| 5475 MockRead(SYNCHRONOUS, ERR_FAILED), | 5549 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5476 }; | 5550 }; |
| 5477 | 5551 |
| 5478 // Resend with authorization from MyRealm's cache. | 5552 // Resend with authorization from MyRealm's cache. |
| 5479 MockWrite data_writes2[] = { | 5553 MockWrite data_writes2[] = { |
| 5480 MockWrite("GET /x/1 HTTP/1.1\r\n" | 5554 MockWrite( |
| 5481 "Host: www.google.com\r\n" | 5555 "GET /x/1 HTTP/1.1\r\n" |
| 5482 "Connection: keep-alive\r\n" | 5556 "Host: www.google.com\r\n" |
| 5483 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5557 "Connection: keep-alive\r\n" |
| 5558 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5484 }; | 5559 }; |
| 5485 | 5560 |
| 5486 // Sever accepts the authorization. | 5561 // Sever accepts the authorization. |
| 5487 MockRead data_reads2[] = { | 5562 MockRead data_reads2[] = { |
| 5488 MockRead("HTTP/1.0 200 OK\r\n"), | 5563 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5489 MockRead("Content-Length: 100\r\n\r\n"), | 5564 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5490 MockRead(SYNCHRONOUS, OK), | |
| 5491 }; | 5565 }; |
| 5492 | 5566 |
| 5493 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5567 StaticSocketDataProvider data1(data_reads1, |
| 5494 data_writes1, arraysize(data_writes1)); | 5568 arraysize(data_reads1), |
| 5495 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5569 data_writes1, |
| 5496 data_writes2, arraysize(data_writes2)); | 5570 arraysize(data_writes1)); |
| 5571 StaticSocketDataProvider data2(data_reads2, |
| 5572 arraysize(data_reads2), |
| 5573 data_writes2, |
| 5574 arraysize(data_writes2)); |
| 5497 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5575 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5498 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5576 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5499 | 5577 |
| 5500 TestCompletionCallback callback1; | 5578 TestCompletionCallback callback1; |
| 5501 | 5579 |
| 5502 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5580 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5503 EXPECT_EQ(ERR_IO_PENDING, rv); | 5581 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5504 | 5582 |
| 5505 rv = callback1.WaitForResult(); | 5583 rv = callback1.WaitForResult(); |
| 5506 EXPECT_EQ(OK, rv); | 5584 EXPECT_EQ(OK, rv); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 5526 { | 5604 { |
| 5527 HttpRequestInfo request; | 5605 HttpRequestInfo request; |
| 5528 request.method = "GET"; | 5606 request.method = "GET"; |
| 5529 request.url = GURL("http://www.google.com/p/q/t"); | 5607 request.url = GURL("http://www.google.com/p/q/t"); |
| 5530 request.load_flags = 0; | 5608 request.load_flags = 0; |
| 5531 | 5609 |
| 5532 scoped_ptr<HttpTransaction> trans( | 5610 scoped_ptr<HttpTransaction> trans( |
| 5533 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5611 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5534 | 5612 |
| 5535 MockWrite data_writes1[] = { | 5613 MockWrite data_writes1[] = { |
| 5536 MockWrite("GET /p/q/t HTTP/1.1\r\n" | 5614 MockWrite( |
| 5537 "Host: www.google.com\r\n" | 5615 "GET /p/q/t HTTP/1.1\r\n" |
| 5538 "Connection: keep-alive\r\n\r\n"), | 5616 "Host: www.google.com\r\n" |
| 5617 "Connection: keep-alive\r\n\r\n"), |
| 5539 }; | 5618 }; |
| 5540 | 5619 |
| 5541 MockRead data_reads1[] = { | 5620 MockRead data_reads1[] = { |
| 5542 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5621 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5543 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5622 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5544 MockRead("Content-Length: 10000\r\n\r\n"), | 5623 MockRead("Content-Length: 10000\r\n\r\n"), |
| 5545 MockRead(SYNCHRONOUS, ERR_FAILED), | 5624 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5546 }; | 5625 }; |
| 5547 | 5626 |
| 5548 // Resend with authorization from cache for MyRealm. | 5627 // Resend with authorization from cache for MyRealm. |
| 5549 MockWrite data_writes2[] = { | 5628 MockWrite data_writes2[] = { |
| 5550 MockWrite("GET /p/q/t HTTP/1.1\r\n" | 5629 MockWrite( |
| 5551 "Host: www.google.com\r\n" | 5630 "GET /p/q/t HTTP/1.1\r\n" |
| 5552 "Connection: keep-alive\r\n" | 5631 "Host: www.google.com\r\n" |
| 5553 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 5632 "Connection: keep-alive\r\n" |
| 5633 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 5554 }; | 5634 }; |
| 5555 | 5635 |
| 5556 // Sever rejects the authorization. | 5636 // Sever rejects the authorization. |
| 5557 MockRead data_reads2[] = { | 5637 MockRead data_reads2[] = { |
| 5558 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5638 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5559 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 5639 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 5560 MockRead("Content-Length: 10000\r\n\r\n"), | 5640 MockRead("Content-Length: 10000\r\n\r\n"), |
| 5561 MockRead(SYNCHRONOUS, ERR_FAILED), | 5641 MockRead(SYNCHRONOUS, ERR_FAILED), |
| 5562 }; | 5642 }; |
| 5563 | 5643 |
| 5564 // At this point we should prompt for new credentials for MyRealm. | 5644 // At this point we should prompt for new credentials for MyRealm. |
| 5565 // Restart with username=foo3, password=foo4. | 5645 // Restart with username=foo3, password=foo4. |
| 5566 MockWrite data_writes3[] = { | 5646 MockWrite data_writes3[] = { |
| 5567 MockWrite("GET /p/q/t HTTP/1.1\r\n" | 5647 MockWrite( |
| 5568 "Host: www.google.com\r\n" | 5648 "GET /p/q/t HTTP/1.1\r\n" |
| 5569 "Connection: keep-alive\r\n" | 5649 "Host: www.google.com\r\n" |
| 5570 "Authorization: Basic Zm9vMzpiYXIz\r\n\r\n"), | 5650 "Connection: keep-alive\r\n" |
| 5651 "Authorization: Basic Zm9vMzpiYXIz\r\n\r\n"), |
| 5571 }; | 5652 }; |
| 5572 | 5653 |
| 5573 // Sever accepts the authorization. | 5654 // Sever accepts the authorization. |
| 5574 MockRead data_reads3[] = { | 5655 MockRead data_reads3[] = { |
| 5575 MockRead("HTTP/1.0 200 OK\r\n"), | 5656 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5576 MockRead("Content-Length: 100\r\n\r\n"), | 5657 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5577 MockRead(SYNCHRONOUS, OK), | |
| 5578 }; | 5658 }; |
| 5579 | 5659 |
| 5580 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5660 StaticSocketDataProvider data1(data_reads1, |
| 5581 data_writes1, arraysize(data_writes1)); | 5661 arraysize(data_reads1), |
| 5582 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5662 data_writes1, |
| 5583 data_writes2, arraysize(data_writes2)); | 5663 arraysize(data_writes1)); |
| 5584 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 5664 StaticSocketDataProvider data2(data_reads2, |
| 5585 data_writes3, arraysize(data_writes3)); | 5665 arraysize(data_reads2), |
| 5666 data_writes2, |
| 5667 arraysize(data_writes2)); |
| 5668 StaticSocketDataProvider data3(data_reads3, |
| 5669 arraysize(data_reads3), |
| 5670 data_writes3, |
| 5671 arraysize(data_writes3)); |
| 5586 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5672 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5587 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5673 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5588 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 5674 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 5589 | 5675 |
| 5590 TestCompletionCallback callback1; | 5676 TestCompletionCallback callback1; |
| 5591 | 5677 |
| 5592 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5678 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5593 EXPECT_EQ(ERR_IO_PENDING, rv); | 5679 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5594 | 5680 |
| 5595 rv = callback1.WaitForResult(); | 5681 rv = callback1.WaitForResult(); |
| 5596 EXPECT_EQ(OK, rv); | 5682 EXPECT_EQ(OK, rv); |
| 5597 | 5683 |
| 5598 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); | 5684 EXPECT_TRUE(trans->IsReadyToRestartForAuth()); |
| 5599 TestCompletionCallback callback2; | 5685 TestCompletionCallback callback2; |
| 5600 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); | 5686 rv = trans->RestartWithAuth(AuthCredentials(), callback2.callback()); |
| 5601 EXPECT_EQ(ERR_IO_PENDING, rv); | 5687 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5602 rv = callback2.WaitForResult(); | 5688 rv = callback2.WaitForResult(); |
| 5603 EXPECT_EQ(OK, rv); | 5689 EXPECT_EQ(OK, rv); |
| 5604 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); | 5690 EXPECT_FALSE(trans->IsReadyToRestartForAuth()); |
| 5605 | 5691 |
| 5606 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5692 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5607 ASSERT_TRUE(response != NULL); | 5693 ASSERT_TRUE(response != NULL); |
| 5608 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 5694 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 5609 | 5695 |
| 5610 TestCompletionCallback callback3; | 5696 TestCompletionCallback callback3; |
| 5611 | 5697 |
| 5612 rv = trans->RestartWithAuth( | 5698 rv = trans->RestartWithAuth(AuthCredentials(kFoo3, kBar3), |
| 5613 AuthCredentials(kFoo3, kBar3), callback3.callback()); | 5699 callback3.callback()); |
| 5614 EXPECT_EQ(ERR_IO_PENDING, rv); | 5700 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5615 | 5701 |
| 5616 rv = callback3.WaitForResult(); | 5702 rv = callback3.WaitForResult(); |
| 5617 EXPECT_EQ(OK, rv); | 5703 EXPECT_EQ(OK, rv); |
| 5618 | 5704 |
| 5619 response = trans->GetResponseInfo(); | 5705 response = trans->GetResponseInfo(); |
| 5620 ASSERT_TRUE(response != NULL); | 5706 ASSERT_TRUE(response != NULL); |
| 5621 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5707 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 5622 EXPECT_EQ(100, response->headers->GetContentLength()); | 5708 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5623 } | 5709 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 5638 { | 5724 { |
| 5639 HttpRequestInfo request; | 5725 HttpRequestInfo request; |
| 5640 request.method = "GET"; | 5726 request.method = "GET"; |
| 5641 request.url = GURL("http://www.google.com/x/y/z"); | 5727 request.url = GURL("http://www.google.com/x/y/z"); |
| 5642 request.load_flags = 0; | 5728 request.load_flags = 0; |
| 5643 | 5729 |
| 5644 scoped_ptr<HttpTransaction> trans( | 5730 scoped_ptr<HttpTransaction> trans( |
| 5645 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5731 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5646 | 5732 |
| 5647 MockWrite data_writes1[] = { | 5733 MockWrite data_writes1[] = { |
| 5648 MockWrite("GET /x/y/z HTTP/1.1\r\n" | 5734 MockWrite( |
| 5649 "Host: www.google.com\r\n" | 5735 "GET /x/y/z HTTP/1.1\r\n" |
| 5650 "Connection: keep-alive\r\n\r\n"), | 5736 "Host: www.google.com\r\n" |
| 5737 "Connection: keep-alive\r\n\r\n"), |
| 5651 }; | 5738 }; |
| 5652 | 5739 |
| 5653 MockRead data_reads1[] = { | 5740 MockRead data_reads1[] = { |
| 5654 MockRead("HTTP/1.0 401 Unauthorized\r\n"), | 5741 MockRead("HTTP/1.0 401 Unauthorized\r\n"), |
| 5655 MockRead("WWW-Authenticate: Digest realm=\"digestive\", nonce=\"OU812\", " | 5742 MockRead( |
| 5656 "algorithm=MD5, qop=\"auth\"\r\n\r\n"), | 5743 "WWW-Authenticate: Digest realm=\"digestive\", nonce=\"OU812\", " |
| 5657 MockRead(SYNCHRONOUS, OK), | 5744 "algorithm=MD5, qop=\"auth\"\r\n\r\n"), |
| 5745 MockRead(SYNCHRONOUS, OK), |
| 5658 }; | 5746 }; |
| 5659 | 5747 |
| 5660 // Resend with authorization (username=foo, password=bar) | 5748 // Resend with authorization (username=foo, password=bar) |
| 5661 MockWrite data_writes2[] = { | 5749 MockWrite data_writes2[] = { |
| 5662 MockWrite("GET /x/y/z HTTP/1.1\r\n" | 5750 MockWrite( |
| 5663 "Host: www.google.com\r\n" | 5751 "GET /x/y/z HTTP/1.1\r\n" |
| 5664 "Connection: keep-alive\r\n" | 5752 "Host: www.google.com\r\n" |
| 5665 "Authorization: Digest username=\"foo\", realm=\"digestive\", " | 5753 "Connection: keep-alive\r\n" |
| 5666 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, " | 5754 "Authorization: Digest username=\"foo\", realm=\"digestive\", " |
| 5667 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, " | 5755 "nonce=\"OU812\", uri=\"/x/y/z\", algorithm=MD5, " |
| 5668 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"), | 5756 "response=\"03ffbcd30add722589c1de345d7a927f\", qop=auth, " |
| 5757 "nc=00000001, cnonce=\"0123456789abcdef\"\r\n\r\n"), |
| 5669 }; | 5758 }; |
| 5670 | 5759 |
| 5671 // Sever accepts the authorization. | 5760 // Sever accepts the authorization. |
| 5672 MockRead data_reads2[] = { | 5761 MockRead data_reads2[] = { |
| 5673 MockRead("HTTP/1.0 200 OK\r\n"), | 5762 MockRead("HTTP/1.0 200 OK\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5674 MockRead(SYNCHRONOUS, OK), | |
| 5675 }; | 5763 }; |
| 5676 | 5764 |
| 5677 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5765 StaticSocketDataProvider data1(data_reads1, |
| 5678 data_writes1, arraysize(data_writes1)); | 5766 arraysize(data_reads1), |
| 5679 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 5767 data_writes1, |
| 5680 data_writes2, arraysize(data_writes2)); | 5768 arraysize(data_writes1)); |
| 5769 StaticSocketDataProvider data2(data_reads2, |
| 5770 arraysize(data_reads2), |
| 5771 data_writes2, |
| 5772 arraysize(data_writes2)); |
| 5681 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5773 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5682 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 5774 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 5683 | 5775 |
| 5684 TestCompletionCallback callback1; | 5776 TestCompletionCallback callback1; |
| 5685 | 5777 |
| 5686 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5778 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5687 EXPECT_EQ(ERR_IO_PENDING, rv); | 5779 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5688 | 5780 |
| 5689 rv = callback1.WaitForResult(); | 5781 rv = callback1.WaitForResult(); |
| 5690 EXPECT_EQ(OK, rv); | 5782 EXPECT_EQ(OK, rv); |
| 5691 | 5783 |
| 5692 const HttpResponseInfo* response = trans->GetResponseInfo(); | 5784 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5693 ASSERT_TRUE(response != NULL); | 5785 ASSERT_TRUE(response != NULL); |
| 5694 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); | 5786 EXPECT_TRUE(CheckDigestServerAuth(response->auth_challenge.get())); |
| 5695 | 5787 |
| 5696 TestCompletionCallback callback2; | 5788 TestCompletionCallback callback2; |
| 5697 | 5789 |
| 5698 rv = trans->RestartWithAuth( | 5790 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 5699 AuthCredentials(kFoo, kBar), callback2.callback()); | 5791 callback2.callback()); |
| 5700 EXPECT_EQ(ERR_IO_PENDING, rv); | 5792 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5701 | 5793 |
| 5702 rv = callback2.WaitForResult(); | 5794 rv = callback2.WaitForResult(); |
| 5703 EXPECT_EQ(OK, rv); | 5795 EXPECT_EQ(OK, rv); |
| 5704 | 5796 |
| 5705 response = trans->GetResponseInfo(); | 5797 response = trans->GetResponseInfo(); |
| 5706 ASSERT_TRUE(response != NULL); | 5798 ASSERT_TRUE(response != NULL); |
| 5707 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 5799 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 5708 } | 5800 } |
| 5709 | 5801 |
| 5710 // ------------------------------------------------------------------------ | 5802 // ------------------------------------------------------------------------ |
| 5711 | 5803 |
| 5712 // Transaction 2: Request another resource in digestive's protection space. | 5804 // Transaction 2: Request another resource in digestive's protection space. |
| 5713 // This will preemptively add an Authorization header which should have an | 5805 // This will preemptively add an Authorization header which should have an |
| 5714 // "nc" value of 2 (as compared to 1 in the first use. | 5806 // "nc" value of 2 (as compared to 1 in the first use. |
| 5715 { | 5807 { |
| 5716 HttpRequestInfo request; | 5808 HttpRequestInfo request; |
| 5717 request.method = "GET"; | 5809 request.method = "GET"; |
| 5718 // Note that Transaction 1 was at /x/y/z, so this is in the same | 5810 // Note that Transaction 1 was at /x/y/z, so this is in the same |
| 5719 // protection space as digest. | 5811 // protection space as digest. |
| 5720 request.url = GURL("http://www.google.com/x/y/a/b"); | 5812 request.url = GURL("http://www.google.com/x/y/a/b"); |
| 5721 request.load_flags = 0; | 5813 request.load_flags = 0; |
| 5722 | 5814 |
| 5723 scoped_ptr<HttpTransaction> trans( | 5815 scoped_ptr<HttpTransaction> trans( |
| 5724 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 5816 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 5725 | 5817 |
| 5726 MockWrite data_writes1[] = { | 5818 MockWrite data_writes1[] = { |
| 5727 MockWrite("GET /x/y/a/b HTTP/1.1\r\n" | 5819 MockWrite( |
| 5728 "Host: www.google.com\r\n" | 5820 "GET /x/y/a/b HTTP/1.1\r\n" |
| 5729 "Connection: keep-alive\r\n" | 5821 "Host: www.google.com\r\n" |
| 5730 "Authorization: Digest username=\"foo\", realm=\"digestive\", " | 5822 "Connection: keep-alive\r\n" |
| 5731 "nonce=\"OU812\", uri=\"/x/y/a/b\", algorithm=MD5, " | 5823 "Authorization: Digest username=\"foo\", realm=\"digestive\", " |
| 5732 "response=\"d6f9a2c07d1c5df7b89379dca1269b35\", qop=auth, " | 5824 "nonce=\"OU812\", uri=\"/x/y/a/b\", algorithm=MD5, " |
| 5733 "nc=00000002, cnonce=\"0123456789abcdef\"\r\n\r\n"), | 5825 "response=\"d6f9a2c07d1c5df7b89379dca1269b35\", qop=auth, " |
| 5826 "nc=00000002, cnonce=\"0123456789abcdef\"\r\n\r\n"), |
| 5734 }; | 5827 }; |
| 5735 | 5828 |
| 5736 // Sever accepts the authorization. | 5829 // Sever accepts the authorization. |
| 5737 MockRead data_reads1[] = { | 5830 MockRead data_reads1[] = { |
| 5738 MockRead("HTTP/1.0 200 OK\r\n"), | 5831 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5739 MockRead("Content-Length: 100\r\n\r\n"), | 5832 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5740 MockRead(SYNCHRONOUS, OK), | |
| 5741 }; | 5833 }; |
| 5742 | 5834 |
| 5743 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 5835 StaticSocketDataProvider data1(data_reads1, |
| 5744 data_writes1, arraysize(data_writes1)); | 5836 arraysize(data_reads1), |
| 5837 data_writes1, |
| 5838 arraysize(data_writes1)); |
| 5745 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 5839 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 5746 | 5840 |
| 5747 TestCompletionCallback callback1; | 5841 TestCompletionCallback callback1; |
| 5748 | 5842 |
| 5749 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 5843 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 5750 EXPECT_EQ(ERR_IO_PENDING, rv); | 5844 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5751 | 5845 |
| 5752 rv = callback1.WaitForResult(); | 5846 rv = callback1.WaitForResult(); |
| 5753 EXPECT_EQ(OK, rv); | 5847 EXPECT_EQ(OK, rv); |
| 5754 | 5848 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 5770 trans->read_buf_len_ = 15; | 5864 trans->read_buf_len_ = 15; |
| 5771 trans->request_headers_.SetHeader("Authorization", "NTLM"); | 5865 trans->request_headers_.SetHeader("Authorization", "NTLM"); |
| 5772 | 5866 |
| 5773 // Setup state in response_ | 5867 // Setup state in response_ |
| 5774 HttpResponseInfo* response = &trans->response_; | 5868 HttpResponseInfo* response = &trans->response_; |
| 5775 response->auth_challenge = new AuthChallengeInfo(); | 5869 response->auth_challenge = new AuthChallengeInfo(); |
| 5776 response->ssl_info.cert_status = static_cast<CertStatus>(-1); // Nonsensical. | 5870 response->ssl_info.cert_status = static_cast<CertStatus>(-1); // Nonsensical. |
| 5777 response->response_time = base::Time::Now(); | 5871 response->response_time = base::Time::Now(); |
| 5778 response->was_cached = true; // (Wouldn't ever actually be true...) | 5872 response->was_cached = true; // (Wouldn't ever actually be true...) |
| 5779 | 5873 |
| 5780 { // Setup state for response_.vary_data | 5874 { // Setup state for response_.vary_data |
| 5781 HttpRequestInfo request; | 5875 HttpRequestInfo request; |
| 5782 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n"); | 5876 std::string temp("HTTP/1.1 200 OK\nVary: foo, bar\n\n"); |
| 5783 std::replace(temp.begin(), temp.end(), '\n', '\0'); | 5877 std::replace(temp.begin(), temp.end(), '\n', '\0'); |
| 5784 scoped_refptr<HttpResponseHeaders> headers(new HttpResponseHeaders(temp)); | 5878 scoped_refptr<HttpResponseHeaders> headers(new HttpResponseHeaders(temp)); |
| 5785 request.extra_headers.SetHeader("Foo", "1"); | 5879 request.extra_headers.SetHeader("Foo", "1"); |
| 5786 request.extra_headers.SetHeader("bar", "23"); | 5880 request.extra_headers.SetHeader("bar", "23"); |
| 5787 EXPECT_TRUE(response->vary_data.Init(request, *headers.get())); | 5881 EXPECT_TRUE(response->vary_data.Init(request, *headers.get())); |
| 5788 } | 5882 } |
| 5789 | 5883 |
| 5790 // Cause the above state to be reset. | 5884 // Cause the above state to be reset. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 5806 HttpRequestInfo request; | 5900 HttpRequestInfo request; |
| 5807 request.method = "GET"; | 5901 request.method = "GET"; |
| 5808 request.url = GURL("https://www.google.com/"); | 5902 request.url = GURL("https://www.google.com/"); |
| 5809 request.load_flags = 0; | 5903 request.load_flags = 0; |
| 5810 | 5904 |
| 5811 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 5905 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 5812 scoped_ptr<HttpTransaction> trans( | 5906 scoped_ptr<HttpTransaction> trans( |
| 5813 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 5907 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 5814 | 5908 |
| 5815 MockWrite data_writes[] = { | 5909 MockWrite data_writes[] = { |
| 5816 MockWrite("GET / HTTP/1.1\r\n" | 5910 MockWrite( |
| 5817 "Host: www.google.com\r\n" | 5911 "GET / HTTP/1.1\r\n" |
| 5818 "Connection: keep-alive\r\n\r\n"), | 5912 "Host: www.google.com\r\n" |
| 5913 "Connection: keep-alive\r\n\r\n"), |
| 5819 }; | 5914 }; |
| 5820 | 5915 |
| 5821 MockRead data_reads[] = { | 5916 MockRead data_reads[] = { |
| 5822 MockRead("HTTP/1.0 200 OK\r\n"), | 5917 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5823 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5918 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 5824 MockRead("Content-Length: 100\r\n\r\n"), | 5919 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 5825 MockRead(SYNCHRONOUS, OK), | |
| 5826 }; | 5920 }; |
| 5827 | 5921 |
| 5828 StaticSocketDataProvider ssl_bad_certificate; | 5922 StaticSocketDataProvider ssl_bad_certificate; |
| 5829 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5923 StaticSocketDataProvider data( |
| 5830 data_writes, arraysize(data_writes)); | 5924 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 5831 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 5925 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
| 5832 SSLSocketDataProvider ssl(ASYNC, OK); | 5926 SSLSocketDataProvider ssl(ASYNC, OK); |
| 5833 | 5927 |
| 5834 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); | 5928 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
| 5835 session_deps_.socket_factory->AddSocketDataProvider(&data); | 5929 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5836 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); | 5930 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
| 5837 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 5931 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5838 | 5932 |
| 5839 TestCompletionCallback callback; | 5933 TestCompletionCallback callback; |
| 5840 | 5934 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 5860 // proxy | 5954 // proxy |
| 5861 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { | 5955 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaProxy) { |
| 5862 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 5956 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 5863 | 5957 |
| 5864 HttpRequestInfo request; | 5958 HttpRequestInfo request; |
| 5865 request.method = "GET"; | 5959 request.method = "GET"; |
| 5866 request.url = GURL("https://www.google.com/"); | 5960 request.url = GURL("https://www.google.com/"); |
| 5867 request.load_flags = 0; | 5961 request.load_flags = 0; |
| 5868 | 5962 |
| 5869 MockWrite proxy_writes[] = { | 5963 MockWrite proxy_writes[] = { |
| 5870 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 5964 MockWrite( |
| 5871 "Host: www.google.com\r\n" | 5965 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 5872 "Proxy-Connection: keep-alive\r\n\r\n"), | 5966 "Host: www.google.com\r\n" |
| 5967 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 5873 }; | 5968 }; |
| 5874 | 5969 |
| 5875 MockRead proxy_reads[] = { | 5970 MockRead proxy_reads[] = {MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
| 5876 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 5971 MockRead(SYNCHRONOUS, OK)}; |
| 5877 MockRead(SYNCHRONOUS, OK) | |
| 5878 }; | |
| 5879 | 5972 |
| 5880 MockWrite data_writes[] = { | 5973 MockWrite data_writes[] = { |
| 5881 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 5974 MockWrite( |
| 5882 "Host: www.google.com\r\n" | 5975 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 5883 "Proxy-Connection: keep-alive\r\n\r\n"), | 5976 "Host: www.google.com\r\n" |
| 5884 MockWrite("GET / HTTP/1.1\r\n" | 5977 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 5885 "Host: www.google.com\r\n" | 5978 MockWrite( |
| 5886 "Connection: keep-alive\r\n\r\n"), | 5979 "GET / HTTP/1.1\r\n" |
| 5980 "Host: www.google.com\r\n" |
| 5981 "Connection: keep-alive\r\n\r\n"), |
| 5887 }; | 5982 }; |
| 5888 | 5983 |
| 5889 MockRead data_reads[] = { | 5984 MockRead data_reads[] = { |
| 5890 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 5985 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
| 5891 MockRead("HTTP/1.0 200 OK\r\n"), | 5986 MockRead("HTTP/1.0 200 OK\r\n"), |
| 5892 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 5987 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 5893 MockRead("Content-Length: 100\r\n\r\n"), | 5988 MockRead("Content-Length: 100\r\n\r\n"), |
| 5894 MockRead(SYNCHRONOUS, OK), | 5989 MockRead(SYNCHRONOUS, OK), |
| 5895 }; | 5990 }; |
| 5896 | 5991 |
| 5897 StaticSocketDataProvider ssl_bad_certificate( | 5992 StaticSocketDataProvider ssl_bad_certificate(proxy_reads, |
| 5898 proxy_reads, arraysize(proxy_reads), | 5993 arraysize(proxy_reads), |
| 5899 proxy_writes, arraysize(proxy_writes)); | 5994 proxy_writes, |
| 5900 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 5995 arraysize(proxy_writes)); |
| 5901 data_writes, arraysize(data_writes)); | 5996 StaticSocketDataProvider data( |
| 5997 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 5902 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 5998 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
| 5903 SSLSocketDataProvider ssl(ASYNC, OK); | 5999 SSLSocketDataProvider ssl(ASYNC, OK); |
| 5904 | 6000 |
| 5905 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); | 6001 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
| 5906 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6002 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5907 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); | 6003 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
| 5908 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 6004 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 5909 | 6005 |
| 5910 TestCompletionCallback callback; | 6006 TestCompletionCallback callback; |
| 5911 | 6007 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 5928 rv = callback.WaitForResult(); | 6024 rv = callback.WaitForResult(); |
| 5929 EXPECT_EQ(OK, rv); | 6025 EXPECT_EQ(OK, rv); |
| 5930 | 6026 |
| 5931 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6027 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 5932 | 6028 |
| 5933 ASSERT_TRUE(response != NULL); | 6029 ASSERT_TRUE(response != NULL); |
| 5934 EXPECT_EQ(100, response->headers->GetContentLength()); | 6030 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 5935 } | 6031 } |
| 5936 } | 6032 } |
| 5937 | 6033 |
| 5938 | |
| 5939 // Test HTTPS connections to a site, going through an HTTPS proxy | 6034 // Test HTTPS connections to a site, going through an HTTPS proxy |
| 5940 TEST_P(HttpNetworkTransactionTest, HTTPSViaHttpsProxy) { | 6035 TEST_P(HttpNetworkTransactionTest, HTTPSViaHttpsProxy) { |
| 5941 session_deps_.proxy_service.reset( | 6036 session_deps_.proxy_service.reset( |
| 5942 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 6037 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
| 5943 CapturingNetLog net_log; | 6038 CapturingNetLog net_log; |
| 5944 session_deps_.net_log = &net_log; | 6039 session_deps_.net_log = &net_log; |
| 5945 | 6040 |
| 5946 HttpRequestInfo request; | 6041 HttpRequestInfo request; |
| 5947 request.method = "GET"; | 6042 request.method = "GET"; |
| 5948 request.url = GURL("https://www.google.com/"); | 6043 request.url = GURL("https://www.google.com/"); |
| 5949 request.load_flags = 0; | 6044 request.load_flags = 0; |
| 5950 | 6045 |
| 5951 MockWrite data_writes[] = { | 6046 MockWrite data_writes[] = { |
| 5952 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6047 MockWrite( |
| 5953 "Host: www.google.com\r\n" | 6048 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 5954 "Proxy-Connection: keep-alive\r\n\r\n"), | 6049 "Host: www.google.com\r\n" |
| 5955 MockWrite("GET / HTTP/1.1\r\n" | 6050 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 5956 "Host: www.google.com\r\n" | 6051 MockWrite( |
| 5957 "Connection: keep-alive\r\n\r\n"), | 6052 "GET / HTTP/1.1\r\n" |
| 6053 "Host: www.google.com\r\n" |
| 6054 "Connection: keep-alive\r\n\r\n"), |
| 5958 }; | 6055 }; |
| 5959 | 6056 |
| 5960 MockRead data_reads[] = { | 6057 MockRead data_reads[] = { |
| 5961 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 6058 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
| 5962 MockRead("HTTP/1.1 200 OK\r\n"), | 6059 MockRead("HTTP/1.1 200 OK\r\n"), |
| 5963 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6060 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 5964 MockRead("Content-Length: 100\r\n\r\n"), | 6061 MockRead("Content-Length: 100\r\n\r\n"), |
| 5965 MockRead(SYNCHRONOUS, OK), | 6062 MockRead(SYNCHRONOUS, OK), |
| 5966 }; | 6063 }; |
| 5967 | 6064 |
| 5968 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6065 StaticSocketDataProvider data( |
| 5969 data_writes, arraysize(data_writes)); | 6066 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 5970 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 6067 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
| 5971 SSLSocketDataProvider tunnel_ssl(ASYNC, OK); // SSL through the tunnel | 6068 SSLSocketDataProvider tunnel_ssl(ASYNC, OK); // SSL through the tunnel |
| 5972 | 6069 |
| 5973 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6070 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 5974 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 6071 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 5975 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); | 6072 session_deps_.socket_factory->AddSSLSocketDataProvider(&tunnel_ssl); |
| 5976 | 6073 |
| 5977 TestCompletionCallback callback; | 6074 TestCompletionCallback callback; |
| 5978 | 6075 |
| 5979 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6076 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 5980 scoped_ptr<HttpTransaction> trans( | 6077 scoped_ptr<HttpTransaction> trans( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 6006 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 6103 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
| 6007 CapturingNetLog net_log; | 6104 CapturingNetLog net_log; |
| 6008 session_deps_.net_log = &net_log; | 6105 session_deps_.net_log = &net_log; |
| 6009 | 6106 |
| 6010 HttpRequestInfo request; | 6107 HttpRequestInfo request; |
| 6011 request.method = "GET"; | 6108 request.method = "GET"; |
| 6012 request.url = GURL("https://www.google.com/"); | 6109 request.url = GURL("https://www.google.com/"); |
| 6013 request.load_flags = 0; | 6110 request.load_flags = 0; |
| 6014 | 6111 |
| 6015 MockWrite data_writes[] = { | 6112 MockWrite data_writes[] = { |
| 6016 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6113 MockWrite( |
| 6017 "Host: www.google.com\r\n" | 6114 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 6018 "Proxy-Connection: keep-alive\r\n\r\n"), | 6115 "Host: www.google.com\r\n" |
| 6116 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 6019 }; | 6117 }; |
| 6020 | 6118 |
| 6021 MockRead data_reads[] = { | 6119 MockRead data_reads[] = { |
| 6022 MockRead("HTTP/1.1 302 Redirect\r\n"), | 6120 MockRead("HTTP/1.1 302 Redirect\r\n"), |
| 6023 MockRead("Location: http://login.example.com/\r\n"), | 6121 MockRead("Location: http://login.example.com/\r\n"), |
| 6024 MockRead("Content-Length: 0\r\n\r\n"), | 6122 MockRead("Content-Length: 0\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6025 MockRead(SYNCHRONOUS, OK), | |
| 6026 }; | 6123 }; |
| 6027 | 6124 |
| 6028 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6125 StaticSocketDataProvider data( |
| 6029 data_writes, arraysize(data_writes)); | 6126 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6030 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 6127 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
| 6031 | 6128 |
| 6032 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6129 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6033 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 6130 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 6034 | 6131 |
| 6035 TestCompletionCallback callback; | 6132 TestCompletionCallback callback; |
| 6036 | 6133 |
| 6037 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6134 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6038 scoped_ptr<HttpTransaction> trans( | 6135 scoped_ptr<HttpTransaction> trans( |
| 6039 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6136 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6079 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request | 6176 // Test an HTTPS (SPDY) Proxy's ability to redirect a CONNECT request |
| 6080 TEST_P(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { | 6177 TEST_P(HttpNetworkTransactionTest, RedirectOfHttpsConnectViaSpdyProxy) { |
| 6081 session_deps_.proxy_service.reset( | 6178 session_deps_.proxy_service.reset( |
| 6082 ProxyService::CreateFixed("https://proxy:70")); | 6179 ProxyService::CreateFixed("https://proxy:70")); |
| 6083 | 6180 |
| 6084 HttpRequestInfo request; | 6181 HttpRequestInfo request; |
| 6085 request.method = "GET"; | 6182 request.method = "GET"; |
| 6086 request.url = GURL("https://www.google.com/"); | 6183 request.url = GURL("https://www.google.com/"); |
| 6087 request.load_flags = 0; | 6184 request.load_flags = 0; |
| 6088 | 6185 |
| 6089 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 6186 scoped_ptr<SpdyFrame> conn( |
| 6090 LOWEST)); | 6187 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 6091 scoped_ptr<SpdyFrame> goaway( | 6188 scoped_ptr<SpdyFrame> goaway( |
| 6092 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 6189 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 6093 MockWrite data_writes[] = { | 6190 MockWrite data_writes[] = { |
| 6094 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), | 6191 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), |
| 6095 CreateMockWrite(*goaway.get(), 3, SYNCHRONOUS), | 6192 CreateMockWrite(*goaway.get(), 3, SYNCHRONOUS), |
| 6096 }; | 6193 }; |
| 6097 | 6194 |
| 6098 static const char* const kExtraHeaders[] = { | 6195 static const char* const kExtraHeaders[] = { |
| 6099 "location", | 6196 "location", "http://login.example.com/", |
| 6100 "http://login.example.com/", | |
| 6101 }; | 6197 }; |
| 6102 scoped_ptr<SpdyFrame> resp( | 6198 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError( |
| 6103 spdy_util_.ConstructSpdySynReplyError("302 Redirect", kExtraHeaders, | 6199 "302 Redirect", kExtraHeaders, arraysize(kExtraHeaders) / 2, 1)); |
| 6104 arraysize(kExtraHeaders)/2, 1)); | |
| 6105 MockRead data_reads[] = { | 6200 MockRead data_reads[] = { |
| 6106 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), | 6201 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), |
| 6107 MockRead(ASYNC, 0, 2), // EOF | 6202 MockRead(ASYNC, 0, 2), // EOF |
| 6108 }; | 6203 }; |
| 6109 | 6204 |
| 6110 DelayedSocketData data( | 6205 DelayedSocketData data(1, // wait for one write to finish before reading. |
| 6111 1, // wait for one write to finish before reading. | 6206 data_reads, |
| 6112 data_reads, arraysize(data_reads), | 6207 arraysize(data_reads), |
| 6113 data_writes, arraysize(data_writes)); | 6208 data_writes, |
| 6209 arraysize(data_writes)); |
| 6114 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 6210 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
| 6115 proxy_ssl.SetNextProto(GetParam()); | 6211 proxy_ssl.SetNextProto(GetParam()); |
| 6116 | 6212 |
| 6117 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6213 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6118 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 6214 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 6119 | 6215 |
| 6120 TestCompletionCallback callback; | 6216 TestCompletionCallback callback; |
| 6121 | 6217 |
| 6122 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6218 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6123 scoped_ptr<HttpTransaction> trans( | 6219 scoped_ptr<HttpTransaction> trans( |
| 6124 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6220 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6125 | 6221 |
| 6126 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6222 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6127 EXPECT_EQ(ERR_IO_PENDING, rv); | 6223 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6128 | 6224 |
| 6129 rv = callback.WaitForResult(); | 6225 rv = callback.WaitForResult(); |
| 6130 EXPECT_EQ(OK, rv); | 6226 EXPECT_EQ(OK, rv); |
| 6131 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6227 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6132 | 6228 |
| 6133 ASSERT_TRUE(response != NULL); | 6229 ASSERT_TRUE(response != NULL); |
| 6134 | 6230 |
| 6135 EXPECT_EQ(302, response->headers->response_code()); | 6231 EXPECT_EQ(302, response->headers->response_code()); |
| 6136 std::string url; | 6232 std::string url; |
| 6137 EXPECT_TRUE(response->headers->IsRedirect(&url)); | 6233 EXPECT_TRUE(response->headers->IsRedirect(&url)); |
| 6138 EXPECT_EQ("http://login.example.com/", url); | 6234 EXPECT_EQ("http://login.example.com/", url); |
| 6139 } | 6235 } |
| 6140 | 6236 |
| 6141 // Test that an HTTPS proxy's response to a CONNECT request is filtered. | 6237 // Test that an HTTPS proxy's response to a CONNECT request is filtered. |
| 6142 TEST_P(HttpNetworkTransactionTest, | 6238 TEST_P(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaHttpsProxy) { |
| 6143 ErrorResponseToHttpsConnectViaHttpsProxy) { | |
| 6144 session_deps_.proxy_service.reset( | 6239 session_deps_.proxy_service.reset( |
| 6145 ProxyService::CreateFixed("https://proxy:70")); | 6240 ProxyService::CreateFixed("https://proxy:70")); |
| 6146 | 6241 |
| 6147 HttpRequestInfo request; | 6242 HttpRequestInfo request; |
| 6148 request.method = "GET"; | 6243 request.method = "GET"; |
| 6149 request.url = GURL("https://www.google.com/"); | 6244 request.url = GURL("https://www.google.com/"); |
| 6150 request.load_flags = 0; | 6245 request.load_flags = 0; |
| 6151 | 6246 |
| 6152 MockWrite data_writes[] = { | 6247 MockWrite data_writes[] = { |
| 6153 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6248 MockWrite( |
| 6154 "Host: www.google.com\r\n" | 6249 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 6155 "Proxy-Connection: keep-alive\r\n\r\n"), | 6250 "Host: www.google.com\r\n" |
| 6251 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 6156 }; | 6252 }; |
| 6157 | 6253 |
| 6158 MockRead data_reads[] = { | 6254 MockRead data_reads[] = { |
| 6159 MockRead("HTTP/1.1 404 Not Found\r\n"), | 6255 MockRead("HTTP/1.1 404 Not Found\r\n"), |
| 6160 MockRead("Content-Length: 23\r\n\r\n"), | 6256 MockRead("Content-Length: 23\r\n\r\n"), |
| 6161 MockRead("The host does not exist"), | 6257 MockRead("The host does not exist"), MockRead(SYNCHRONOUS, OK), |
| 6162 MockRead(SYNCHRONOUS, OK), | |
| 6163 }; | 6258 }; |
| 6164 | 6259 |
| 6165 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6260 StaticSocketDataProvider data( |
| 6166 data_writes, arraysize(data_writes)); | 6261 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6167 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 6262 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
| 6168 | 6263 |
| 6169 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6264 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6170 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 6265 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 6171 | 6266 |
| 6172 TestCompletionCallback callback; | 6267 TestCompletionCallback callback; |
| 6173 | 6268 |
| 6174 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6269 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6175 scoped_ptr<HttpTransaction> trans( | 6270 scoped_ptr<HttpTransaction> trans( |
| 6176 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6271 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6177 | 6272 |
| 6178 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6273 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6179 EXPECT_EQ(ERR_IO_PENDING, rv); | 6274 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6180 | 6275 |
| 6181 rv = callback.WaitForResult(); | 6276 rv = callback.WaitForResult(); |
| 6182 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); | 6277 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv); |
| 6183 | 6278 |
| 6184 // TODO(ttuttle): Anything else to check here? | 6279 // TODO(ttuttle): Anything else to check here? |
| 6185 } | 6280 } |
| 6186 | 6281 |
| 6187 // Test that a SPDY proxy's response to a CONNECT request is filtered. | 6282 // Test that a SPDY proxy's response to a CONNECT request is filtered. |
| 6188 TEST_P(HttpNetworkTransactionTest, | 6283 TEST_P(HttpNetworkTransactionTest, ErrorResponseToHttpsConnectViaSpdyProxy) { |
| 6189 ErrorResponseToHttpsConnectViaSpdyProxy) { | |
| 6190 session_deps_.proxy_service.reset( | 6284 session_deps_.proxy_service.reset( |
| 6191 ProxyService::CreateFixed("https://proxy:70")); | 6285 ProxyService::CreateFixed("https://proxy:70")); |
| 6192 | 6286 |
| 6193 HttpRequestInfo request; | 6287 HttpRequestInfo request; |
| 6194 request.method = "GET"; | 6288 request.method = "GET"; |
| 6195 request.url = GURL("https://www.google.com/"); | 6289 request.url = GURL("https://www.google.com/"); |
| 6196 request.load_flags = 0; | 6290 request.load_flags = 0; |
| 6197 | 6291 |
| 6198 scoped_ptr<SpdyFrame> conn(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 6292 scoped_ptr<SpdyFrame> conn( |
| 6199 LOWEST)); | 6293 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 6200 scoped_ptr<SpdyFrame> rst( | 6294 scoped_ptr<SpdyFrame> rst( |
| 6201 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 6295 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 6202 MockWrite data_writes[] = { | 6296 MockWrite data_writes[] = { |
| 6203 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), | 6297 CreateMockWrite(*conn.get(), 0, SYNCHRONOUS), |
| 6204 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS), | 6298 CreateMockWrite(*rst.get(), 3, SYNCHRONOUS), |
| 6205 }; | 6299 }; |
| 6206 | 6300 |
| 6207 static const char* const kExtraHeaders[] = { | 6301 static const char* const kExtraHeaders[] = { |
| 6208 "location", | 6302 "location", "http://login.example.com/", |
| 6209 "http://login.example.com/", | |
| 6210 }; | 6303 }; |
| 6211 scoped_ptr<SpdyFrame> resp( | 6304 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdySynReplyError( |
| 6212 spdy_util_.ConstructSpdySynReplyError("404 Not Found", kExtraHeaders, | 6305 "404 Not Found", kExtraHeaders, arraysize(kExtraHeaders) / 2, 1)); |
| 6213 arraysize(kExtraHeaders)/2, 1)); | 6306 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame( |
| 6214 scoped_ptr<SpdyFrame> body( | 6307 1, "The host does not exist", 23, true)); |
| 6215 spdy_util_.ConstructSpdyBodyFrame( | |
| 6216 1, "The host does not exist", 23, true)); | |
| 6217 MockRead data_reads[] = { | 6308 MockRead data_reads[] = { |
| 6218 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), | 6309 CreateMockRead(*resp.get(), 1, SYNCHRONOUS), |
| 6219 CreateMockRead(*body.get(), 2, SYNCHRONOUS), | 6310 CreateMockRead(*body.get(), 2, SYNCHRONOUS), |
| 6220 MockRead(ASYNC, 0, 4), // EOF | 6311 MockRead(ASYNC, 0, 4), // EOF |
| 6221 }; | 6312 }; |
| 6222 | 6313 |
| 6223 DelayedSocketData data( | 6314 DelayedSocketData data(1, // wait for one write to finish before reading. |
| 6224 1, // wait for one write to finish before reading. | 6315 data_reads, |
| 6225 data_reads, arraysize(data_reads), | 6316 arraysize(data_reads), |
| 6226 data_writes, arraysize(data_writes)); | 6317 data_writes, |
| 6318 arraysize(data_writes)); |
| 6227 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy | 6319 SSLSocketDataProvider proxy_ssl(ASYNC, OK); // SSL to the proxy |
| 6228 proxy_ssl.SetNextProto(GetParam()); | 6320 proxy_ssl.SetNextProto(GetParam()); |
| 6229 | 6321 |
| 6230 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6322 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6231 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); | 6323 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy_ssl); |
| 6232 | 6324 |
| 6233 TestCompletionCallback callback; | 6325 TestCompletionCallback callback; |
| 6234 | 6326 |
| 6235 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6327 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6236 scoped_ptr<HttpTransaction> trans( | 6328 scoped_ptr<HttpTransaction> trans( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 6255 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; | 6347 request.load_flags = net::LOAD_DO_NOT_SEND_AUTH_DATA; |
| 6256 | 6348 |
| 6257 // Configure against https proxy server "myproxy:70". | 6349 // Configure against https proxy server "myproxy:70". |
| 6258 session_deps_.proxy_service.reset( | 6350 session_deps_.proxy_service.reset( |
| 6259 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); | 6351 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); |
| 6260 CapturingBoundNetLog log; | 6352 CapturingBoundNetLog log; |
| 6261 session_deps_.net_log = log.bound().net_log(); | 6353 session_deps_.net_log = log.bound().net_log(); |
| 6262 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6354 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6263 | 6355 |
| 6264 // Since we have proxy, should try to establish tunnel. | 6356 // Since we have proxy, should try to establish tunnel. |
| 6265 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 6357 scoped_ptr<SpdyFrame> req( |
| 6266 LOWEST)); | 6358 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 6267 scoped_ptr<SpdyFrame> rst( | 6359 scoped_ptr<SpdyFrame> rst( |
| 6268 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 6360 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); |
| 6269 | 6361 |
| 6270 // After calling trans->RestartWithAuth(), this is the request we should | 6362 // After calling trans->RestartWithAuth(), this is the request we should |
| 6271 // be issuing -- the final header line contains the credentials. | 6363 // be issuing -- the final header line contains the credentials. |
| 6272 const char* const kAuthCredentials[] = { | 6364 const char* const kAuthCredentials[] = { |
| 6273 "proxy-authorization", "Basic Zm9vOmJhcg==", | 6365 "proxy-authorization", "Basic Zm9vOmJhcg==", |
| 6274 }; | 6366 }; |
| 6275 scoped_ptr<SpdyFrame> connect2(spdy_util_.ConstructSpdyConnect( | 6367 scoped_ptr<SpdyFrame> connect2(spdy_util_.ConstructSpdyConnect( |
| 6276 kAuthCredentials, arraysize(kAuthCredentials) / 2, 3, LOWEST)); | 6368 kAuthCredentials, arraysize(kAuthCredentials) / 2, 3, LOWEST)); |
| 6277 // fetch https://www.google.com/ via HTTP | 6369 // fetch https://www.google.com/ via HTTP |
| 6278 const char get[] = "GET / HTTP/1.1\r\n" | 6370 const char get[] = |
| 6279 "Host: www.google.com\r\n" | 6371 "GET / HTTP/1.1\r\n" |
| 6280 "Connection: keep-alive\r\n\r\n"; | 6372 "Host: www.google.com\r\n" |
| 6373 "Connection: keep-alive\r\n\r\n"; |
| 6281 scoped_ptr<SpdyFrame> wrapped_get( | 6374 scoped_ptr<SpdyFrame> wrapped_get( |
| 6282 spdy_util_.ConstructSpdyBodyFrame(3, get, strlen(get), false)); | 6375 spdy_util_.ConstructSpdyBodyFrame(3, get, strlen(get), false)); |
| 6283 | 6376 |
| 6284 MockWrite spdy_writes[] = { | 6377 MockWrite spdy_writes[] = { |
| 6285 CreateMockWrite(*req, 1, ASYNC), | 6378 CreateMockWrite(*req, 1, ASYNC), CreateMockWrite(*rst, 4, ASYNC), |
| 6286 CreateMockWrite(*rst, 4, ASYNC), | 6379 CreateMockWrite(*connect2, 5), CreateMockWrite(*wrapped_get, 8), |
| 6287 CreateMockWrite(*connect2, 5), | |
| 6288 CreateMockWrite(*wrapped_get, 8), | |
| 6289 }; | 6380 }; |
| 6290 | 6381 |
| 6291 // The proxy responds to the connect with a 407, using a persistent | 6382 // The proxy responds to the connect with a 407, using a persistent |
| 6292 // connection. | 6383 // connection. |
| 6293 const char* const kAuthChallenge[] = { | 6384 const char* const kAuthChallenge[] = { |
| 6294 spdy_util_.GetStatusKey(), "407 Proxy Authentication Required", | 6385 spdy_util_.GetStatusKey(), "407 Proxy Authentication Required", |
| 6295 spdy_util_.GetVersionKey(), "HTTP/1.1", | 6386 spdy_util_.GetVersionKey(), "HTTP/1.1", |
| 6296 "proxy-authenticate", "Basic realm=\"MyRealm1\"", | 6387 "proxy-authenticate", "Basic realm=\"MyRealm1\"", |
| 6297 }; | 6388 }; |
| 6298 | 6389 |
| 6299 scoped_ptr<SpdyFrame> conn_auth_resp( | 6390 scoped_ptr<SpdyFrame> conn_auth_resp( |
| 6300 spdy_util_.ConstructSpdyControlFrame(NULL, | 6391 spdy_util_.ConstructSpdyControlFrame(NULL, |
| 6301 0, | 6392 0, |
| 6302 false, | 6393 false, |
| 6303 1, | 6394 1, |
| 6304 LOWEST, | 6395 LOWEST, |
| 6305 SYN_REPLY, | 6396 SYN_REPLY, |
| 6306 CONTROL_FLAG_NONE, | 6397 CONTROL_FLAG_NONE, |
| 6307 kAuthChallenge, | 6398 kAuthChallenge, |
| 6308 arraysize(kAuthChallenge), | 6399 arraysize(kAuthChallenge), |
| 6309 0)); | 6400 0)); |
| 6310 | 6401 |
| 6311 scoped_ptr<SpdyFrame> conn_resp( | 6402 scoped_ptr<SpdyFrame> conn_resp( |
| 6312 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 6403 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 6313 const char resp[] = "HTTP/1.1 200 OK\r\n" | 6404 const char resp[] = |
| 6405 "HTTP/1.1 200 OK\r\n" |
| 6314 "Content-Length: 5\r\n\r\n"; | 6406 "Content-Length: 5\r\n\r\n"; |
| 6315 | 6407 |
| 6316 scoped_ptr<SpdyFrame> wrapped_get_resp( | 6408 scoped_ptr<SpdyFrame> wrapped_get_resp( |
| 6317 spdy_util_.ConstructSpdyBodyFrame(3, resp, strlen(resp), false)); | 6409 spdy_util_.ConstructSpdyBodyFrame(3, resp, strlen(resp), false)); |
| 6318 scoped_ptr<SpdyFrame> wrapped_body( | 6410 scoped_ptr<SpdyFrame> wrapped_body( |
| 6319 spdy_util_.ConstructSpdyBodyFrame(3, "hello", 5, false)); | 6411 spdy_util_.ConstructSpdyBodyFrame(3, "hello", 5, false)); |
| 6320 MockRead spdy_reads[] = { | 6412 MockRead spdy_reads[] = { |
| 6321 CreateMockRead(*conn_auth_resp, 2, ASYNC), | 6413 CreateMockRead(*conn_auth_resp, 2, ASYNC), |
| 6322 CreateMockRead(*conn_resp, 6, ASYNC), | 6414 CreateMockRead(*conn_resp, 6, ASYNC), |
| 6323 CreateMockRead(*wrapped_get_resp, 9, ASYNC), | 6415 CreateMockRead(*wrapped_get_resp, 9, ASYNC), |
| 6324 CreateMockRead(*wrapped_body, 10, ASYNC), | 6416 CreateMockRead(*wrapped_body, 10, ASYNC), |
| 6325 MockRead(ASYNC, OK, 11), // EOF. May or may not be read. | 6417 MockRead(ASYNC, OK, 11), // EOF. May or may not be read. |
| 6326 }; | 6418 }; |
| 6327 | 6419 |
| 6328 OrderedSocketData spdy_data( | 6420 OrderedSocketData spdy_data( |
| 6329 spdy_reads, arraysize(spdy_reads), | 6421 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 6330 spdy_writes, arraysize(spdy_writes)); | |
| 6331 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 6422 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 6332 // Negotiate SPDY to the proxy | 6423 // Negotiate SPDY to the proxy |
| 6333 SSLSocketDataProvider proxy(ASYNC, OK); | 6424 SSLSocketDataProvider proxy(ASYNC, OK); |
| 6334 proxy.SetNextProto(GetParam()); | 6425 proxy.SetNextProto(GetParam()); |
| 6335 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 6426 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 6336 // Vanilla SSL to the server | 6427 // Vanilla SSL to the server |
| 6337 SSLSocketDataProvider server(ASYNC, OK); | 6428 SSLSocketDataProvider server(ASYNC, OK); |
| 6338 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); | 6429 session_deps_.socket_factory->AddSSLSocketDataProvider(&server); |
| 6339 | 6430 |
| 6340 TestCompletionCallback callback1; | 6431 TestCompletionCallback callback1; |
| 6341 | 6432 |
| 6342 scoped_ptr<HttpTransaction> trans( | 6433 scoped_ptr<HttpTransaction> trans( |
| 6343 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6434 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6344 | 6435 |
| 6345 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 6436 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 6346 EXPECT_EQ(ERR_IO_PENDING, rv); | 6437 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6347 | 6438 |
| 6348 rv = callback1.WaitForResult(); | 6439 rv = callback1.WaitForResult(); |
| 6349 EXPECT_EQ(OK, rv); | 6440 EXPECT_EQ(OK, rv); |
| 6350 net::CapturingNetLog::CapturedEntryList entries; | 6441 net::CapturingNetLog::CapturedEntryList entries; |
| 6351 log.GetEntries(&entries); | 6442 log.GetEntries(&entries); |
| 6352 size_t pos = ExpectLogContainsSomewhere( | 6443 size_t pos = ExpectLogContainsSomewhere( |
| 6353 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 6444 entries, |
| 6445 0, |
| 6446 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 6354 NetLog::PHASE_NONE); | 6447 NetLog::PHASE_NONE); |
| 6355 ExpectLogContainsSomewhere( | 6448 ExpectLogContainsSomewhere( |
| 6356 entries, pos, | 6449 entries, |
| 6450 pos, |
| 6357 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 6451 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 6358 NetLog::PHASE_NONE); | 6452 NetLog::PHASE_NONE); |
| 6359 | 6453 |
| 6360 const HttpResponseInfo* response = trans->GetResponseInfo(); | 6454 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 6361 ASSERT_TRUE(response != NULL); | 6455 ASSERT_TRUE(response != NULL); |
| 6362 ASSERT_FALSE(response->headers.get() == NULL); | 6456 ASSERT_FALSE(response->headers.get() == NULL); |
| 6363 EXPECT_EQ(407, response->headers->response_code()); | 6457 EXPECT_EQ(407, response->headers->response_code()); |
| 6364 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 6458 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| 6365 EXPECT_TRUE(response->auth_challenge.get() != NULL); | 6459 EXPECT_TRUE(response->auth_challenge.get() != NULL); |
| 6366 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); | 6460 EXPECT_TRUE(CheckBasicProxyAuth(response->auth_challenge.get())); |
| 6367 | 6461 |
| 6368 TestCompletionCallback callback2; | 6462 TestCompletionCallback callback2; |
| 6369 | 6463 |
| 6370 rv = trans->RestartWithAuth(AuthCredentials(kFoo, kBar), | 6464 rv = |
| 6371 callback2.callback()); | 6465 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 6372 EXPECT_EQ(ERR_IO_PENDING, rv); | 6466 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6373 | 6467 |
| 6374 rv = callback2.WaitForResult(); | 6468 rv = callback2.WaitForResult(); |
| 6375 EXPECT_EQ(OK, rv); | 6469 EXPECT_EQ(OK, rv); |
| 6376 | 6470 |
| 6377 response = trans->GetResponseInfo(); | 6471 response = trans->GetResponseInfo(); |
| 6378 ASSERT_TRUE(response != NULL); | 6472 ASSERT_TRUE(response != NULL); |
| 6379 | 6473 |
| 6380 EXPECT_TRUE(response->headers->IsKeepAlive()); | 6474 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 6381 EXPECT_EQ(200, response->headers->response_code()); | 6475 EXPECT_EQ(200, response->headers->response_code()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6413 | 6507 |
| 6414 // Enable cross-origin push. | 6508 // Enable cross-origin push. |
| 6415 session_deps_.trusted_spdy_proxy = "myproxy:70"; | 6509 session_deps_.trusted_spdy_proxy = "myproxy:70"; |
| 6416 | 6510 |
| 6417 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6511 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6418 | 6512 |
| 6419 scoped_ptr<SpdyFrame> stream1_syn( | 6513 scoped_ptr<SpdyFrame> stream1_syn( |
| 6420 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 6514 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
| 6421 | 6515 |
| 6422 MockWrite spdy_writes[] = { | 6516 MockWrite spdy_writes[] = { |
| 6423 CreateMockWrite(*stream1_syn, 1, ASYNC), | 6517 CreateMockWrite(*stream1_syn, 1, ASYNC), |
| 6424 }; | 6518 }; |
| 6425 | 6519 |
| 6426 scoped_ptr<SpdyFrame> | 6520 scoped_ptr<SpdyFrame> stream1_reply( |
| 6427 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 6521 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 6428 | 6522 |
| 6429 scoped_ptr<SpdyFrame> | 6523 scoped_ptr<SpdyFrame> stream1_body( |
| 6430 stream1_body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 6524 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 6431 | 6525 |
| 6432 scoped_ptr<SpdyFrame> | 6526 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructSpdyPush( |
| 6433 stream2_syn(spdy_util_.ConstructSpdyPush(NULL, | 6527 NULL, 0, 2, 1, "http://www.another-origin.com/foo.dat")); |
| 6434 0, | |
| 6435 2, | |
| 6436 1, | |
| 6437 "http://www.another-origin.com/foo.dat")); | |
| 6438 const char kPushedData[] = "pushed"; | 6528 const char kPushedData[] = "pushed"; |
| 6439 scoped_ptr<SpdyFrame> stream2_body( | 6529 scoped_ptr<SpdyFrame> stream2_body(spdy_util_.ConstructSpdyBodyFrame( |
| 6440 spdy_util_.ConstructSpdyBodyFrame( | 6530 2, kPushedData, strlen(kPushedData), true)); |
| 6441 2, kPushedData, strlen(kPushedData), true)); | |
| 6442 | 6531 |
| 6443 MockRead spdy_reads[] = { | 6532 MockRead spdy_reads[] = { |
| 6444 CreateMockRead(*stream1_reply, 2, ASYNC), | 6533 CreateMockRead(*stream1_reply, 2, ASYNC), |
| 6445 CreateMockRead(*stream2_syn, 3, ASYNC), | 6534 CreateMockRead(*stream2_syn, 3, ASYNC), |
| 6446 CreateMockRead(*stream1_body, 4, ASYNC), | 6535 CreateMockRead(*stream1_body, 4, ASYNC), |
| 6447 CreateMockRead(*stream2_body, 5, ASYNC), | 6536 CreateMockRead(*stream2_body, 5, ASYNC), |
| 6448 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 6537 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
| 6449 }; | 6538 }; |
| 6450 | 6539 |
| 6451 OrderedSocketData spdy_data( | 6540 OrderedSocketData spdy_data( |
| 6452 spdy_reads, arraysize(spdy_reads), | 6541 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 6453 spdy_writes, arraysize(spdy_writes)); | |
| 6454 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 6542 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 6455 // Negotiate SPDY to the proxy | 6543 // Negotiate SPDY to the proxy |
| 6456 SSLSocketDataProvider proxy(ASYNC, OK); | 6544 SSLSocketDataProvider proxy(ASYNC, OK); |
| 6457 proxy.SetNextProto(GetParam()); | 6545 proxy.SetNextProto(GetParam()); |
| 6458 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 6546 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 6459 | 6547 |
| 6460 scoped_ptr<HttpTransaction> trans( | 6548 scoped_ptr<HttpTransaction> trans( |
| 6461 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6549 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6462 TestCompletionCallback callback; | 6550 TestCompletionCallback callback; |
| 6463 int rv = trans->Start(&request, callback.callback(), log.bound()); | 6551 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6531 | 6619 |
| 6532 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6620 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6533 | 6621 |
| 6534 scoped_ptr<SpdyFrame> stream1_syn( | 6622 scoped_ptr<SpdyFrame> stream1_syn( |
| 6535 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); | 6623 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, false)); |
| 6536 | 6624 |
| 6537 scoped_ptr<SpdyFrame> push_rst( | 6625 scoped_ptr<SpdyFrame> push_rst( |
| 6538 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 6626 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); |
| 6539 | 6627 |
| 6540 MockWrite spdy_writes[] = { | 6628 MockWrite spdy_writes[] = { |
| 6541 CreateMockWrite(*stream1_syn, 1, ASYNC), | 6629 CreateMockWrite(*stream1_syn, 1, ASYNC), CreateMockWrite(*push_rst, 4), |
| 6542 CreateMockWrite(*push_rst, 4), | |
| 6543 }; | 6630 }; |
| 6544 | 6631 |
| 6545 scoped_ptr<SpdyFrame> | 6632 scoped_ptr<SpdyFrame> stream1_reply( |
| 6546 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 6633 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 6547 | 6634 |
| 6548 scoped_ptr<SpdyFrame> | 6635 scoped_ptr<SpdyFrame> stream1_body( |
| 6549 stream1_body(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 6636 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 6550 | 6637 |
| 6551 scoped_ptr<SpdyFrame> | 6638 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructSpdyPush( |
| 6552 stream2_syn(spdy_util_.ConstructSpdyPush(NULL, | 6639 NULL, 0, 2, 1, "https://www.another-origin.com/foo.dat")); |
| 6553 0, | |
| 6554 2, | |
| 6555 1, | |
| 6556 "https://www.another-origin.com/foo.dat")); | |
| 6557 | 6640 |
| 6558 MockRead spdy_reads[] = { | 6641 MockRead spdy_reads[] = { |
| 6559 CreateMockRead(*stream1_reply, 2, ASYNC), | 6642 CreateMockRead(*stream1_reply, 2, ASYNC), |
| 6560 CreateMockRead(*stream2_syn, 3, ASYNC), | 6643 CreateMockRead(*stream2_syn, 3, ASYNC), |
| 6561 CreateMockRead(*stream1_body, 5, ASYNC), | 6644 CreateMockRead(*stream1_body, 5, ASYNC), |
| 6562 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause | 6645 MockRead(ASYNC, ERR_IO_PENDING, 6), // Force a pause |
| 6563 }; | 6646 }; |
| 6564 | 6647 |
| 6565 OrderedSocketData spdy_data( | 6648 OrderedSocketData spdy_data( |
| 6566 spdy_reads, arraysize(spdy_reads), | 6649 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 6567 spdy_writes, arraysize(spdy_writes)); | |
| 6568 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 6650 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 6569 // Negotiate SPDY to the proxy | 6651 // Negotiate SPDY to the proxy |
| 6570 SSLSocketDataProvider proxy(ASYNC, OK); | 6652 SSLSocketDataProvider proxy(ASYNC, OK); |
| 6571 proxy.SetNextProto(GetParam()); | 6653 proxy.SetNextProto(GetParam()); |
| 6572 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); | 6654 session_deps_.socket_factory->AddSSLSocketDataProvider(&proxy); |
| 6573 | 6655 |
| 6574 scoped_ptr<HttpTransaction> trans( | 6656 scoped_ptr<HttpTransaction> trans( |
| 6575 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 6657 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 6576 TestCompletionCallback callback; | 6658 TestCompletionCallback callback; |
| 6577 int rv = trans->Start(&request, callback.callback(), log.bound()); | 6659 int rv = trans->Start(&request, callback.callback(), log.bound()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 6592 EXPECT_EQ(OK, rv); | 6674 EXPECT_EQ(OK, rv); |
| 6593 EXPECT_EQ("hello!", response_data); | 6675 EXPECT_EQ("hello!", response_data); |
| 6594 | 6676 |
| 6595 trans.reset(); | 6677 trans.reset(); |
| 6596 session->CloseAllConnections(); | 6678 session->CloseAllConnections(); |
| 6597 } | 6679 } |
| 6598 | 6680 |
| 6599 // Test HTTPS connections to a site with a bad certificate, going through an | 6681 // Test HTTPS connections to a site with a bad certificate, going through an |
| 6600 // HTTPS proxy | 6682 // HTTPS proxy |
| 6601 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { | 6683 TEST_P(HttpNetworkTransactionTest, HTTPSBadCertificateViaHttpsProxy) { |
| 6602 session_deps_.proxy_service.reset(ProxyService::CreateFixed( | 6684 session_deps_.proxy_service.reset( |
| 6603 "https://proxy:70")); | 6685 ProxyService::CreateFixed("https://proxy:70")); |
| 6604 | 6686 |
| 6605 HttpRequestInfo request; | 6687 HttpRequestInfo request; |
| 6606 request.method = "GET"; | 6688 request.method = "GET"; |
| 6607 request.url = GURL("https://www.google.com/"); | 6689 request.url = GURL("https://www.google.com/"); |
| 6608 request.load_flags = 0; | 6690 request.load_flags = 0; |
| 6609 | 6691 |
| 6610 // Attempt to fetch the URL from a server with a bad cert | 6692 // Attempt to fetch the URL from a server with a bad cert |
| 6611 MockWrite bad_cert_writes[] = { | 6693 MockWrite bad_cert_writes[] = { |
| 6612 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6694 MockWrite( |
| 6613 "Host: www.google.com\r\n" | 6695 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 6614 "Proxy-Connection: keep-alive\r\n\r\n"), | 6696 "Host: www.google.com\r\n" |
| 6697 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 6615 }; | 6698 }; |
| 6616 | 6699 |
| 6617 MockRead bad_cert_reads[] = { | 6700 MockRead bad_cert_reads[] = {MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
| 6618 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 6701 MockRead(SYNCHRONOUS, OK)}; |
| 6619 MockRead(SYNCHRONOUS, OK) | |
| 6620 }; | |
| 6621 | 6702 |
| 6622 // Attempt to fetch the URL with a good cert | 6703 // Attempt to fetch the URL with a good cert |
| 6623 MockWrite good_data_writes[] = { | 6704 MockWrite good_data_writes[] = { |
| 6624 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6705 MockWrite( |
| 6625 "Host: www.google.com\r\n" | 6706 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 6626 "Proxy-Connection: keep-alive\r\n\r\n"), | 6707 "Host: www.google.com\r\n" |
| 6627 MockWrite("GET / HTTP/1.1\r\n" | 6708 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 6628 "Host: www.google.com\r\n" | 6709 MockWrite( |
| 6629 "Connection: keep-alive\r\n\r\n"), | 6710 "GET / HTTP/1.1\r\n" |
| 6711 "Host: www.google.com\r\n" |
| 6712 "Connection: keep-alive\r\n\r\n"), |
| 6630 }; | 6713 }; |
| 6631 | 6714 |
| 6632 MockRead good_cert_reads[] = { | 6715 MockRead good_cert_reads[] = { |
| 6633 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), | 6716 MockRead("HTTP/1.0 200 Connected\r\n\r\n"), |
| 6634 MockRead("HTTP/1.0 200 OK\r\n"), | 6717 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6635 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6718 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6636 MockRead("Content-Length: 100\r\n\r\n"), | 6719 MockRead("Content-Length: 100\r\n\r\n"), |
| 6637 MockRead(SYNCHRONOUS, OK), | 6720 MockRead(SYNCHRONOUS, OK), |
| 6638 }; | 6721 }; |
| 6639 | 6722 |
| 6640 StaticSocketDataProvider ssl_bad_certificate( | 6723 StaticSocketDataProvider ssl_bad_certificate(bad_cert_reads, |
| 6641 bad_cert_reads, arraysize(bad_cert_reads), | 6724 arraysize(bad_cert_reads), |
| 6642 bad_cert_writes, arraysize(bad_cert_writes)); | 6725 bad_cert_writes, |
| 6643 StaticSocketDataProvider data(good_cert_reads, arraysize(good_cert_reads), | 6726 arraysize(bad_cert_writes)); |
| 6644 good_data_writes, arraysize(good_data_writes)); | 6727 StaticSocketDataProvider data(good_cert_reads, |
| 6728 arraysize(good_cert_reads), |
| 6729 good_data_writes, |
| 6730 arraysize(good_data_writes)); |
| 6645 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); | 6731 SSLSocketDataProvider ssl_bad(ASYNC, ERR_CERT_AUTHORITY_INVALID); |
| 6646 SSLSocketDataProvider ssl(ASYNC, OK); | 6732 SSLSocketDataProvider ssl(ASYNC, OK); |
| 6647 | 6733 |
| 6648 // SSL to the proxy, then CONNECT request, then SSL with bad certificate | 6734 // SSL to the proxy, then CONNECT request, then SSL with bad certificate |
| 6649 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 6735 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 6650 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); | 6736 session_deps_.socket_factory->AddSocketDataProvider(&ssl_bad_certificate); |
| 6651 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); | 6737 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_bad); |
| 6652 | 6738 |
| 6653 // SSL to the proxy, then CONNECT request, then valid SSL certificate | 6739 // SSL to the proxy, then CONNECT request, then valid SSL certificate |
| 6654 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 6740 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 6684 request.method = "GET"; | 6770 request.method = "GET"; |
| 6685 request.url = GURL("http://www.google.com/"); | 6771 request.url = GURL("http://www.google.com/"); |
| 6686 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 6772 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
| 6687 "Chromium Ultra Awesome X Edition"); | 6773 "Chromium Ultra Awesome X Edition"); |
| 6688 | 6774 |
| 6689 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6775 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6690 scoped_ptr<HttpTransaction> trans( | 6776 scoped_ptr<HttpTransaction> trans( |
| 6691 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6777 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6692 | 6778 |
| 6693 MockWrite data_writes[] = { | 6779 MockWrite data_writes[] = { |
| 6694 MockWrite("GET / HTTP/1.1\r\n" | 6780 MockWrite( |
| 6695 "Host: www.google.com\r\n" | 6781 "GET / HTTP/1.1\r\n" |
| 6696 "Connection: keep-alive\r\n" | 6782 "Host: www.google.com\r\n" |
| 6697 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), | 6783 "Connection: keep-alive\r\n" |
| 6784 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), |
| 6698 }; | 6785 }; |
| 6699 | 6786 |
| 6700 // Lastly, the server responds with the actual content. | 6787 // Lastly, the server responds with the actual content. |
| 6701 MockRead data_reads[] = { | 6788 MockRead data_reads[] = { |
| 6702 MockRead("HTTP/1.0 200 OK\r\n"), | 6789 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6703 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6790 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6704 MockRead("Content-Length: 100\r\n\r\n"), | 6791 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6705 MockRead(SYNCHRONOUS, OK), | |
| 6706 }; | 6792 }; |
| 6707 | 6793 |
| 6708 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6794 StaticSocketDataProvider data( |
| 6709 data_writes, arraysize(data_writes)); | 6795 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6710 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6796 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6711 | 6797 |
| 6712 TestCompletionCallback callback; | 6798 TestCompletionCallback callback; |
| 6713 | 6799 |
| 6714 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6800 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6715 EXPECT_EQ(ERR_IO_PENDING, rv); | 6801 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6716 | 6802 |
| 6717 rv = callback.WaitForResult(); | 6803 rv = callback.WaitForResult(); |
| 6718 EXPECT_EQ(OK, rv); | 6804 EXPECT_EQ(OK, rv); |
| 6719 } | 6805 } |
| 6720 | 6806 |
| 6721 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { | 6807 TEST_P(HttpNetworkTransactionTest, BuildRequest_UserAgentOverTunnel) { |
| 6722 HttpRequestInfo request; | 6808 HttpRequestInfo request; |
| 6723 request.method = "GET"; | 6809 request.method = "GET"; |
| 6724 request.url = GURL("https://www.google.com/"); | 6810 request.url = GURL("https://www.google.com/"); |
| 6725 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, | 6811 request.extra_headers.SetHeader(HttpRequestHeaders::kUserAgent, |
| 6726 "Chromium Ultra Awesome X Edition"); | 6812 "Chromium Ultra Awesome X Edition"); |
| 6727 | 6813 |
| 6728 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 6814 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 6729 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6815 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6730 scoped_ptr<HttpTransaction> trans( | 6816 scoped_ptr<HttpTransaction> trans( |
| 6731 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6817 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6732 | 6818 |
| 6733 MockWrite data_writes[] = { | 6819 MockWrite data_writes[] = { |
| 6734 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 6820 MockWrite( |
| 6735 "Host: www.google.com\r\n" | 6821 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 6736 "Proxy-Connection: keep-alive\r\n" | 6822 "Host: www.google.com\r\n" |
| 6737 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), | 6823 "Proxy-Connection: keep-alive\r\n" |
| 6824 "User-Agent: Chromium Ultra Awesome X Edition\r\n\r\n"), |
| 6738 }; | 6825 }; |
| 6739 MockRead data_reads[] = { | 6826 MockRead data_reads[] = { |
| 6740 // Return an error, so the transaction stops here (this test isn't | 6827 // Return an error, so the transaction stops here (this test isn't |
| 6741 // interested in the rest). | 6828 // interested in the rest). |
| 6742 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), | 6829 MockRead("HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 6743 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 6830 MockRead("Proxy-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 6744 MockRead("Proxy-Connection: close\r\n\r\n"), | 6831 MockRead("Proxy-Connection: close\r\n\r\n"), |
| 6745 }; | 6832 }; |
| 6746 | 6833 |
| 6747 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6834 StaticSocketDataProvider data( |
| 6748 data_writes, arraysize(data_writes)); | 6835 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6749 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6836 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6750 | 6837 |
| 6751 TestCompletionCallback callback; | 6838 TestCompletionCallback callback; |
| 6752 | 6839 |
| 6753 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6840 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6754 EXPECT_EQ(ERR_IO_PENDING, rv); | 6841 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6755 | 6842 |
| 6756 rv = callback.WaitForResult(); | 6843 rv = callback.WaitForResult(); |
| 6757 EXPECT_EQ(OK, rv); | 6844 EXPECT_EQ(OK, rv); |
| 6758 } | 6845 } |
| 6759 | 6846 |
| 6760 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { | 6847 TEST_P(HttpNetworkTransactionTest, BuildRequest_Referer) { |
| 6761 HttpRequestInfo request; | 6848 HttpRequestInfo request; |
| 6762 request.method = "GET"; | 6849 request.method = "GET"; |
| 6763 request.url = GURL("http://www.google.com/"); | 6850 request.url = GURL("http://www.google.com/"); |
| 6764 request.load_flags = 0; | 6851 request.load_flags = 0; |
| 6765 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 6852 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
| 6766 "http://the.previous.site.com/"); | 6853 "http://the.previous.site.com/"); |
| 6767 | 6854 |
| 6768 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6855 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6769 scoped_ptr<HttpTransaction> trans( | 6856 scoped_ptr<HttpTransaction> trans( |
| 6770 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6857 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6771 | 6858 |
| 6772 MockWrite data_writes[] = { | 6859 MockWrite data_writes[] = { |
| 6773 MockWrite("GET / HTTP/1.1\r\n" | 6860 MockWrite( |
| 6774 "Host: www.google.com\r\n" | 6861 "GET / HTTP/1.1\r\n" |
| 6775 "Connection: keep-alive\r\n" | 6862 "Host: www.google.com\r\n" |
| 6776 "Referer: http://the.previous.site.com/\r\n\r\n"), | 6863 "Connection: keep-alive\r\n" |
| 6864 "Referer: http://the.previous.site.com/\r\n\r\n"), |
| 6777 }; | 6865 }; |
| 6778 | 6866 |
| 6779 // Lastly, the server responds with the actual content. | 6867 // Lastly, the server responds with the actual content. |
| 6780 MockRead data_reads[] = { | 6868 MockRead data_reads[] = { |
| 6781 MockRead("HTTP/1.0 200 OK\r\n"), | 6869 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6782 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6870 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6783 MockRead("Content-Length: 100\r\n\r\n"), | 6871 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6784 MockRead(SYNCHRONOUS, OK), | |
| 6785 }; | 6872 }; |
| 6786 | 6873 |
| 6787 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6874 StaticSocketDataProvider data( |
| 6788 data_writes, arraysize(data_writes)); | 6875 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6789 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6876 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6790 | 6877 |
| 6791 TestCompletionCallback callback; | 6878 TestCompletionCallback callback; |
| 6792 | 6879 |
| 6793 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6880 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6794 EXPECT_EQ(ERR_IO_PENDING, rv); | 6881 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6795 | 6882 |
| 6796 rv = callback.WaitForResult(); | 6883 rv = callback.WaitForResult(); |
| 6797 EXPECT_EQ(OK, rv); | 6884 EXPECT_EQ(OK, rv); |
| 6798 } | 6885 } |
| 6799 | 6886 |
| 6800 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { | 6887 TEST_P(HttpNetworkTransactionTest, BuildRequest_PostContentLengthZero) { |
| 6801 HttpRequestInfo request; | 6888 HttpRequestInfo request; |
| 6802 request.method = "POST"; | 6889 request.method = "POST"; |
| 6803 request.url = GURL("http://www.google.com/"); | 6890 request.url = GURL("http://www.google.com/"); |
| 6804 | 6891 |
| 6805 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6892 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6806 scoped_ptr<HttpTransaction> trans( | 6893 scoped_ptr<HttpTransaction> trans( |
| 6807 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6894 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6808 | 6895 |
| 6809 MockWrite data_writes[] = { | 6896 MockWrite data_writes[] = { |
| 6810 MockWrite("POST / HTTP/1.1\r\n" | 6897 MockWrite( |
| 6811 "Host: www.google.com\r\n" | 6898 "POST / HTTP/1.1\r\n" |
| 6812 "Connection: keep-alive\r\n" | 6899 "Host: www.google.com\r\n" |
| 6813 "Content-Length: 0\r\n\r\n"), | 6900 "Connection: keep-alive\r\n" |
| 6901 "Content-Length: 0\r\n\r\n"), |
| 6814 }; | 6902 }; |
| 6815 | 6903 |
| 6816 // Lastly, the server responds with the actual content. | 6904 // Lastly, the server responds with the actual content. |
| 6817 MockRead data_reads[] = { | 6905 MockRead data_reads[] = { |
| 6818 MockRead("HTTP/1.0 200 OK\r\n"), | 6906 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6819 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6907 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6820 MockRead("Content-Length: 100\r\n\r\n"), | 6908 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6821 MockRead(SYNCHRONOUS, OK), | |
| 6822 }; | 6909 }; |
| 6823 | 6910 |
| 6824 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6911 StaticSocketDataProvider data( |
| 6825 data_writes, arraysize(data_writes)); | 6912 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6826 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6913 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6827 | 6914 |
| 6828 TestCompletionCallback callback; | 6915 TestCompletionCallback callback; |
| 6829 | 6916 |
| 6830 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6917 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6831 EXPECT_EQ(ERR_IO_PENDING, rv); | 6918 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6832 | 6919 |
| 6833 rv = callback.WaitForResult(); | 6920 rv = callback.WaitForResult(); |
| 6834 EXPECT_EQ(OK, rv); | 6921 EXPECT_EQ(OK, rv); |
| 6835 } | 6922 } |
| 6836 | 6923 |
| 6837 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { | 6924 TEST_P(HttpNetworkTransactionTest, BuildRequest_PutContentLengthZero) { |
| 6838 HttpRequestInfo request; | 6925 HttpRequestInfo request; |
| 6839 request.method = "PUT"; | 6926 request.method = "PUT"; |
| 6840 request.url = GURL("http://www.google.com/"); | 6927 request.url = GURL("http://www.google.com/"); |
| 6841 | 6928 |
| 6842 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6929 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6843 scoped_ptr<HttpTransaction> trans( | 6930 scoped_ptr<HttpTransaction> trans( |
| 6844 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6931 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6845 | 6932 |
| 6846 MockWrite data_writes[] = { | 6933 MockWrite data_writes[] = { |
| 6847 MockWrite("PUT / HTTP/1.1\r\n" | 6934 MockWrite( |
| 6848 "Host: www.google.com\r\n" | 6935 "PUT / HTTP/1.1\r\n" |
| 6849 "Connection: keep-alive\r\n" | 6936 "Host: www.google.com\r\n" |
| 6850 "Content-Length: 0\r\n\r\n"), | 6937 "Connection: keep-alive\r\n" |
| 6938 "Content-Length: 0\r\n\r\n"), |
| 6851 }; | 6939 }; |
| 6852 | 6940 |
| 6853 // Lastly, the server responds with the actual content. | 6941 // Lastly, the server responds with the actual content. |
| 6854 MockRead data_reads[] = { | 6942 MockRead data_reads[] = { |
| 6855 MockRead("HTTP/1.0 200 OK\r\n"), | 6943 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6856 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6944 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6857 MockRead("Content-Length: 100\r\n\r\n"), | 6945 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6858 MockRead(SYNCHRONOUS, OK), | |
| 6859 }; | 6946 }; |
| 6860 | 6947 |
| 6861 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6948 StaticSocketDataProvider data( |
| 6862 data_writes, arraysize(data_writes)); | 6949 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6863 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6950 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6864 | 6951 |
| 6865 TestCompletionCallback callback; | 6952 TestCompletionCallback callback; |
| 6866 | 6953 |
| 6867 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6954 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6868 EXPECT_EQ(ERR_IO_PENDING, rv); | 6955 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6869 | 6956 |
| 6870 rv = callback.WaitForResult(); | 6957 rv = callback.WaitForResult(); |
| 6871 EXPECT_EQ(OK, rv); | 6958 EXPECT_EQ(OK, rv); |
| 6872 } | 6959 } |
| 6873 | 6960 |
| 6874 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { | 6961 TEST_P(HttpNetworkTransactionTest, BuildRequest_HeadContentLengthZero) { |
| 6875 HttpRequestInfo request; | 6962 HttpRequestInfo request; |
| 6876 request.method = "HEAD"; | 6963 request.method = "HEAD"; |
| 6877 request.url = GURL("http://www.google.com/"); | 6964 request.url = GURL("http://www.google.com/"); |
| 6878 | 6965 |
| 6879 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 6966 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6880 scoped_ptr<HttpTransaction> trans( | 6967 scoped_ptr<HttpTransaction> trans( |
| 6881 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 6968 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6882 | 6969 |
| 6883 MockWrite data_writes[] = { | 6970 MockWrite data_writes[] = { |
| 6884 MockWrite("HEAD / HTTP/1.1\r\n" | 6971 MockWrite( |
| 6885 "Host: www.google.com\r\n" | 6972 "HEAD / HTTP/1.1\r\n" |
| 6886 "Connection: keep-alive\r\n" | 6973 "Host: www.google.com\r\n" |
| 6887 "Content-Length: 0\r\n\r\n"), | 6974 "Connection: keep-alive\r\n" |
| 6975 "Content-Length: 0\r\n\r\n"), |
| 6888 }; | 6976 }; |
| 6889 | 6977 |
| 6890 // Lastly, the server responds with the actual content. | 6978 // Lastly, the server responds with the actual content. |
| 6891 MockRead data_reads[] = { | 6979 MockRead data_reads[] = { |
| 6892 MockRead("HTTP/1.0 200 OK\r\n"), | 6980 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6893 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 6981 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6894 MockRead("Content-Length: 100\r\n\r\n"), | 6982 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6895 MockRead(SYNCHRONOUS, OK), | |
| 6896 }; | 6983 }; |
| 6897 | 6984 |
| 6898 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 6985 StaticSocketDataProvider data( |
| 6899 data_writes, arraysize(data_writes)); | 6986 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6900 session_deps_.socket_factory->AddSocketDataProvider(&data); | 6987 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6901 | 6988 |
| 6902 TestCompletionCallback callback; | 6989 TestCompletionCallback callback; |
| 6903 | 6990 |
| 6904 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 6991 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6905 EXPECT_EQ(ERR_IO_PENDING, rv); | 6992 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6906 | 6993 |
| 6907 rv = callback.WaitForResult(); | 6994 rv = callback.WaitForResult(); |
| 6908 EXPECT_EQ(OK, rv); | 6995 EXPECT_EQ(OK, rv); |
| 6909 } | 6996 } |
| 6910 | 6997 |
| 6911 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { | 6998 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlNoCache) { |
| 6912 HttpRequestInfo request; | 6999 HttpRequestInfo request; |
| 6913 request.method = "GET"; | 7000 request.method = "GET"; |
| 6914 request.url = GURL("http://www.google.com/"); | 7001 request.url = GURL("http://www.google.com/"); |
| 6915 request.load_flags = LOAD_BYPASS_CACHE; | 7002 request.load_flags = LOAD_BYPASS_CACHE; |
| 6916 | 7003 |
| 6917 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7004 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6918 scoped_ptr<HttpTransaction> trans( | 7005 scoped_ptr<HttpTransaction> trans( |
| 6919 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7006 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6920 | 7007 |
| 6921 MockWrite data_writes[] = { | 7008 MockWrite data_writes[] = { |
| 6922 MockWrite("GET / HTTP/1.1\r\n" | 7009 MockWrite( |
| 6923 "Host: www.google.com\r\n" | 7010 "GET / HTTP/1.1\r\n" |
| 6924 "Connection: keep-alive\r\n" | 7011 "Host: www.google.com\r\n" |
| 6925 "Pragma: no-cache\r\n" | 7012 "Connection: keep-alive\r\n" |
| 6926 "Cache-Control: no-cache\r\n\r\n"), | 7013 "Pragma: no-cache\r\n" |
| 7014 "Cache-Control: no-cache\r\n\r\n"), |
| 6927 }; | 7015 }; |
| 6928 | 7016 |
| 6929 // Lastly, the server responds with the actual content. | 7017 // Lastly, the server responds with the actual content. |
| 6930 MockRead data_reads[] = { | 7018 MockRead data_reads[] = { |
| 6931 MockRead("HTTP/1.0 200 OK\r\n"), | 7019 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6932 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7020 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6933 MockRead("Content-Length: 100\r\n\r\n"), | 7021 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6934 MockRead(SYNCHRONOUS, OK), | |
| 6935 }; | 7022 }; |
| 6936 | 7023 |
| 6937 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7024 StaticSocketDataProvider data( |
| 6938 data_writes, arraysize(data_writes)); | 7025 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6939 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7026 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6940 | 7027 |
| 6941 TestCompletionCallback callback; | 7028 TestCompletionCallback callback; |
| 6942 | 7029 |
| 6943 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7030 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6944 EXPECT_EQ(ERR_IO_PENDING, rv); | 7031 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6945 | 7032 |
| 6946 rv = callback.WaitForResult(); | 7033 rv = callback.WaitForResult(); |
| 6947 EXPECT_EQ(OK, rv); | 7034 EXPECT_EQ(OK, rv); |
| 6948 } | 7035 } |
| 6949 | 7036 |
| 6950 TEST_P(HttpNetworkTransactionTest, | 7037 TEST_P(HttpNetworkTransactionTest, BuildRequest_CacheControlValidateCache) { |
| 6951 BuildRequest_CacheControlValidateCache) { | |
| 6952 HttpRequestInfo request; | 7038 HttpRequestInfo request; |
| 6953 request.method = "GET"; | 7039 request.method = "GET"; |
| 6954 request.url = GURL("http://www.google.com/"); | 7040 request.url = GURL("http://www.google.com/"); |
| 6955 request.load_flags = LOAD_VALIDATE_CACHE; | 7041 request.load_flags = LOAD_VALIDATE_CACHE; |
| 6956 | 7042 |
| 6957 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7043 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6958 scoped_ptr<HttpTransaction> trans( | 7044 scoped_ptr<HttpTransaction> trans( |
| 6959 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7045 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6960 | 7046 |
| 6961 MockWrite data_writes[] = { | 7047 MockWrite data_writes[] = { |
| 6962 MockWrite("GET / HTTP/1.1\r\n" | 7048 MockWrite( |
| 6963 "Host: www.google.com\r\n" | 7049 "GET / HTTP/1.1\r\n" |
| 6964 "Connection: keep-alive\r\n" | 7050 "Host: www.google.com\r\n" |
| 6965 "Cache-Control: max-age=0\r\n\r\n"), | 7051 "Connection: keep-alive\r\n" |
| 7052 "Cache-Control: max-age=0\r\n\r\n"), |
| 6966 }; | 7053 }; |
| 6967 | 7054 |
| 6968 // Lastly, the server responds with the actual content. | 7055 // Lastly, the server responds with the actual content. |
| 6969 MockRead data_reads[] = { | 7056 MockRead data_reads[] = { |
| 6970 MockRead("HTTP/1.0 200 OK\r\n"), | 7057 MockRead("HTTP/1.0 200 OK\r\n"), |
| 6971 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7058 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 6972 MockRead("Content-Length: 100\r\n\r\n"), | 7059 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 6973 MockRead(SYNCHRONOUS, OK), | |
| 6974 }; | 7060 }; |
| 6975 | 7061 |
| 6976 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7062 StaticSocketDataProvider data( |
| 6977 data_writes, arraysize(data_writes)); | 7063 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 6978 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7064 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 6979 | 7065 |
| 6980 TestCompletionCallback callback; | 7066 TestCompletionCallback callback; |
| 6981 | 7067 |
| 6982 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7068 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 6983 EXPECT_EQ(ERR_IO_PENDING, rv); | 7069 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 6984 | 7070 |
| 6985 rv = callback.WaitForResult(); | 7071 rv = callback.WaitForResult(); |
| 6986 EXPECT_EQ(OK, rv); | 7072 EXPECT_EQ(OK, rv); |
| 6987 } | 7073 } |
| 6988 | 7074 |
| 6989 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { | 7075 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeaders) { |
| 6990 HttpRequestInfo request; | 7076 HttpRequestInfo request; |
| 6991 request.method = "GET"; | 7077 request.method = "GET"; |
| 6992 request.url = GURL("http://www.google.com/"); | 7078 request.url = GURL("http://www.google.com/"); |
| 6993 request.extra_headers.SetHeader("FooHeader", "Bar"); | 7079 request.extra_headers.SetHeader("FooHeader", "Bar"); |
| 6994 | 7080 |
| 6995 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7081 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 6996 scoped_ptr<HttpTransaction> trans( | 7082 scoped_ptr<HttpTransaction> trans( |
| 6997 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7083 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 6998 | 7084 |
| 6999 MockWrite data_writes[] = { | 7085 MockWrite data_writes[] = { |
| 7000 MockWrite("GET / HTTP/1.1\r\n" | 7086 MockWrite( |
| 7001 "Host: www.google.com\r\n" | 7087 "GET / HTTP/1.1\r\n" |
| 7002 "Connection: keep-alive\r\n" | 7088 "Host: www.google.com\r\n" |
| 7003 "FooHeader: Bar\r\n\r\n"), | 7089 "Connection: keep-alive\r\n" |
| 7090 "FooHeader: Bar\r\n\r\n"), |
| 7004 }; | 7091 }; |
| 7005 | 7092 |
| 7006 // Lastly, the server responds with the actual content. | 7093 // Lastly, the server responds with the actual content. |
| 7007 MockRead data_reads[] = { | 7094 MockRead data_reads[] = { |
| 7008 MockRead("HTTP/1.0 200 OK\r\n"), | 7095 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7009 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7096 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 7010 MockRead("Content-Length: 100\r\n\r\n"), | 7097 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 7011 MockRead(SYNCHRONOUS, OK), | |
| 7012 }; | 7098 }; |
| 7013 | 7099 |
| 7014 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7100 StaticSocketDataProvider data( |
| 7015 data_writes, arraysize(data_writes)); | 7101 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7016 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7102 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7017 | 7103 |
| 7018 TestCompletionCallback callback; | 7104 TestCompletionCallback callback; |
| 7019 | 7105 |
| 7020 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7106 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7021 EXPECT_EQ(ERR_IO_PENDING, rv); | 7107 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7022 | 7108 |
| 7023 rv = callback.WaitForResult(); | 7109 rv = callback.WaitForResult(); |
| 7024 EXPECT_EQ(OK, rv); | 7110 EXPECT_EQ(OK, rv); |
| 7025 } | 7111 } |
| 7026 | 7112 |
| 7027 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { | 7113 TEST_P(HttpNetworkTransactionTest, BuildRequest_ExtraHeadersStripped) { |
| 7028 HttpRequestInfo request; | 7114 HttpRequestInfo request; |
| 7029 request.method = "GET"; | 7115 request.method = "GET"; |
| 7030 request.url = GURL("http://www.google.com/"); | 7116 request.url = GURL("http://www.google.com/"); |
| 7031 request.extra_headers.SetHeader("referer", "www.foo.com"); | 7117 request.extra_headers.SetHeader("referer", "www.foo.com"); |
| 7032 request.extra_headers.SetHeader("hEllo", "Kitty"); | 7118 request.extra_headers.SetHeader("hEllo", "Kitty"); |
| 7033 request.extra_headers.SetHeader("FoO", "bar"); | 7119 request.extra_headers.SetHeader("FoO", "bar"); |
| 7034 | 7120 |
| 7035 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7121 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7036 scoped_ptr<HttpTransaction> trans( | 7122 scoped_ptr<HttpTransaction> trans( |
| 7037 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7123 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7038 | 7124 |
| 7039 MockWrite data_writes[] = { | 7125 MockWrite data_writes[] = { |
| 7040 MockWrite("GET / HTTP/1.1\r\n" | 7126 MockWrite( |
| 7041 "Host: www.google.com\r\n" | 7127 "GET / HTTP/1.1\r\n" |
| 7042 "Connection: keep-alive\r\n" | 7128 "Host: www.google.com\r\n" |
| 7043 "referer: www.foo.com\r\n" | 7129 "Connection: keep-alive\r\n" |
| 7044 "hEllo: Kitty\r\n" | 7130 "referer: www.foo.com\r\n" |
| 7045 "FoO: bar\r\n\r\n"), | 7131 "hEllo: Kitty\r\n" |
| 7132 "FoO: bar\r\n\r\n"), |
| 7046 }; | 7133 }; |
| 7047 | 7134 |
| 7048 // Lastly, the server responds with the actual content. | 7135 // Lastly, the server responds with the actual content. |
| 7049 MockRead data_reads[] = { | 7136 MockRead data_reads[] = { |
| 7050 MockRead("HTTP/1.0 200 OK\r\n"), | 7137 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7051 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7138 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 7052 MockRead("Content-Length: 100\r\n\r\n"), | 7139 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 7053 MockRead(SYNCHRONOUS, OK), | |
| 7054 }; | 7140 }; |
| 7055 | 7141 |
| 7056 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7142 StaticSocketDataProvider data( |
| 7057 data_writes, arraysize(data_writes)); | 7143 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7058 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7144 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7059 | 7145 |
| 7060 TestCompletionCallback callback; | 7146 TestCompletionCallback callback; |
| 7061 | 7147 |
| 7062 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7148 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7063 EXPECT_EQ(ERR_IO_PENDING, rv); | 7149 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7064 | 7150 |
| 7065 rv = callback.WaitForResult(); | 7151 rv = callback.WaitForResult(); |
| 7066 EXPECT_EQ(OK, rv); | 7152 EXPECT_EQ(OK, rv); |
| 7067 } | 7153 } |
| 7068 | 7154 |
| 7069 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { | 7155 TEST_P(HttpNetworkTransactionTest, SOCKS4_HTTP_GET) { |
| 7070 HttpRequestInfo request; | 7156 HttpRequestInfo request; |
| 7071 request.method = "GET"; | 7157 request.method = "GET"; |
| 7072 request.url = GURL("http://www.google.com/"); | 7158 request.url = GURL("http://www.google.com/"); |
| 7073 request.load_flags = 0; | 7159 request.load_flags = 0; |
| 7074 | 7160 |
| 7075 session_deps_.proxy_service.reset( | 7161 session_deps_.proxy_service.reset( |
| 7076 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); | 7162 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); |
| 7077 CapturingNetLog net_log; | 7163 CapturingNetLog net_log; |
| 7078 session_deps_.net_log = &net_log; | 7164 session_deps_.net_log = &net_log; |
| 7079 | 7165 |
| 7080 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7166 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7081 scoped_ptr<HttpTransaction> trans( | 7167 scoped_ptr<HttpTransaction> trans( |
| 7082 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7168 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7083 | 7169 |
| 7084 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; | 7170 char write_buffer[] = {0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0}; |
| 7085 char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; | 7171 char read_buffer[] = {0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0}; |
| 7086 | 7172 |
| 7087 MockWrite data_writes[] = { | 7173 MockWrite data_writes[] = { |
| 7088 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), | 7174 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), |
| 7089 MockWrite("GET / HTTP/1.1\r\n" | 7175 MockWrite( |
| 7090 "Host: www.google.com\r\n" | 7176 "GET / HTTP/1.1\r\n" |
| 7091 "Connection: keep-alive\r\n\r\n") | 7177 "Host: www.google.com\r\n" |
| 7092 }; | 7178 "Connection: keep-alive\r\n\r\n")}; |
| 7093 | 7179 |
| 7094 MockRead data_reads[] = { | 7180 MockRead data_reads[] = { |
| 7095 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), | 7181 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), |
| 7096 MockRead("HTTP/1.0 200 OK\r\n"), | 7182 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7097 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 7183 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
| 7098 MockRead("Payload"), | 7184 MockRead("Payload"), MockRead(SYNCHRONOUS, OK)}; |
| 7099 MockRead(SYNCHRONOUS, OK) | |
| 7100 }; | |
| 7101 | 7185 |
| 7102 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7186 StaticSocketDataProvider data( |
| 7103 data_writes, arraysize(data_writes)); | 7187 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7104 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7188 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7105 | 7189 |
| 7106 TestCompletionCallback callback; | 7190 TestCompletionCallback callback; |
| 7107 | 7191 |
| 7108 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7192 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7109 EXPECT_EQ(ERR_IO_PENDING, rv); | 7193 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7110 | 7194 |
| 7111 rv = callback.WaitForResult(); | 7195 rv = callback.WaitForResult(); |
| 7112 EXPECT_EQ(OK, rv); | 7196 EXPECT_EQ(OK, rv); |
| 7113 | 7197 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 7133 | 7217 |
| 7134 session_deps_.proxy_service.reset( | 7218 session_deps_.proxy_service.reset( |
| 7135 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); | 7219 ProxyService::CreateFixedFromPacResult("SOCKS myproxy:1080")); |
| 7136 CapturingNetLog net_log; | 7220 CapturingNetLog net_log; |
| 7137 session_deps_.net_log = &net_log; | 7221 session_deps_.net_log = &net_log; |
| 7138 | 7222 |
| 7139 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7223 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7140 scoped_ptr<HttpTransaction> trans( | 7224 scoped_ptr<HttpTransaction> trans( |
| 7141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7225 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7142 | 7226 |
| 7143 unsigned char write_buffer[] = { 0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0 }; | 7227 unsigned char write_buffer[] = {0x04, 0x01, 0x01, 0xBB, 127, 0, 0, 1, 0}; |
| 7144 unsigned char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; | 7228 unsigned char read_buffer[] = {0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0}; |
| 7145 | 7229 |
| 7146 MockWrite data_writes[] = { | 7230 MockWrite data_writes[] = {MockWrite(ASYNC, |
| 7147 MockWrite(ASYNC, reinterpret_cast<char*>(write_buffer), | 7231 reinterpret_cast<char*>(write_buffer), |
| 7148 arraysize(write_buffer)), | 7232 arraysize(write_buffer)), |
| 7149 MockWrite("GET / HTTP/1.1\r\n" | 7233 MockWrite( |
| 7150 "Host: www.google.com\r\n" | 7234 "GET / HTTP/1.1\r\n" |
| 7151 "Connection: keep-alive\r\n\r\n") | 7235 "Host: www.google.com\r\n" |
| 7152 }; | 7236 "Connection: keep-alive\r\n\r\n")}; |
| 7153 | 7237 |
| 7154 MockRead data_reads[] = { | 7238 MockRead data_reads[] = { |
| 7155 MockRead(ASYNC, reinterpret_cast<char*>(read_buffer), | 7239 MockRead( |
| 7156 arraysize(read_buffer)), | 7240 ASYNC, reinterpret_cast<char*>(read_buffer), arraysize(read_buffer)), |
| 7157 MockRead("HTTP/1.0 200 OK\r\n"), | 7241 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7158 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 7242 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
| 7159 MockRead("Payload"), | 7243 MockRead("Payload"), MockRead(SYNCHRONOUS, OK)}; |
| 7160 MockRead(SYNCHRONOUS, OK) | |
| 7161 }; | |
| 7162 | 7244 |
| 7163 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7245 StaticSocketDataProvider data( |
| 7164 data_writes, arraysize(data_writes)); | 7246 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7165 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7247 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7166 | 7248 |
| 7167 SSLSocketDataProvider ssl(ASYNC, OK); | 7249 SSLSocketDataProvider ssl(ASYNC, OK); |
| 7168 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 7250 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 7169 | 7251 |
| 7170 TestCompletionCallback callback; | 7252 TestCompletionCallback callback; |
| 7171 | 7253 |
| 7172 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7254 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7173 EXPECT_EQ(ERR_IO_PENDING, rv); | 7255 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7174 | 7256 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 7197 | 7279 |
| 7198 session_deps_.proxy_service.reset( | 7280 session_deps_.proxy_service.reset( |
| 7199 ProxyService::CreateFixed("socks4://myproxy:1080")); | 7281 ProxyService::CreateFixed("socks4://myproxy:1080")); |
| 7200 CapturingNetLog net_log; | 7282 CapturingNetLog net_log; |
| 7201 session_deps_.net_log = &net_log; | 7283 session_deps_.net_log = &net_log; |
| 7202 | 7284 |
| 7203 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7285 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7204 scoped_ptr<HttpTransaction> trans( | 7286 scoped_ptr<HttpTransaction> trans( |
| 7205 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7287 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7206 | 7288 |
| 7207 char write_buffer[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; | 7289 char write_buffer[] = {0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0}; |
| 7208 char read_buffer[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; | 7290 char read_buffer[] = {0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0}; |
| 7209 | 7291 |
| 7210 MockWrite data_writes[] = { | 7292 MockWrite data_writes[] = { |
| 7211 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), | 7293 MockWrite(ASYNC, write_buffer, arraysize(write_buffer)), |
| 7212 MockWrite("GET / HTTP/1.1\r\n" | 7294 MockWrite( |
| 7213 "Host: www.google.com\r\n" | 7295 "GET / HTTP/1.1\r\n" |
| 7214 "Connection: keep-alive\r\n\r\n") | 7296 "Host: www.google.com\r\n" |
| 7215 }; | 7297 "Connection: keep-alive\r\n\r\n")}; |
| 7216 | 7298 |
| 7217 MockRead data_reads[] = { | 7299 MockRead data_reads[] = { |
| 7218 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), | 7300 MockRead(ASYNC, read_buffer, arraysize(read_buffer)), |
| 7219 MockRead("HTTP/1.0 200 OK\r\n"), | 7301 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7220 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 7302 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
| 7221 MockRead("Payload"), | 7303 MockRead("Payload"), MockRead(SYNCHRONOUS, OK)}; |
| 7222 MockRead(SYNCHRONOUS, OK) | |
| 7223 }; | |
| 7224 | 7304 |
| 7225 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7305 StaticSocketDataProvider data( |
| 7226 data_writes, arraysize(data_writes)); | 7306 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7227 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7307 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7228 | 7308 |
| 7229 TestCompletionCallback callback; | 7309 TestCompletionCallback callback; |
| 7230 | 7310 |
| 7231 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7311 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7232 EXPECT_EQ(ERR_IO_PENDING, rv); | 7312 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7233 | 7313 |
| 7234 rv = callback.WaitForResult(); | 7314 rv = callback.WaitForResult(); |
| 7235 EXPECT_EQ(OK, rv); | 7315 EXPECT_EQ(OK, rv); |
| 7236 | 7316 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 7256 | 7336 |
| 7257 session_deps_.proxy_service.reset( | 7337 session_deps_.proxy_service.reset( |
| 7258 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); | 7338 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); |
| 7259 CapturingNetLog net_log; | 7339 CapturingNetLog net_log; |
| 7260 session_deps_.net_log = &net_log; | 7340 session_deps_.net_log = &net_log; |
| 7261 | 7341 |
| 7262 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7342 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7263 scoped_ptr<HttpTransaction> trans( | 7343 scoped_ptr<HttpTransaction> trans( |
| 7264 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7344 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7265 | 7345 |
| 7266 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 7346 const char kSOCKS5GreetRequest[] = {0x05, 0x01, 0x00}; |
| 7267 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 7347 const char kSOCKS5GreetResponse[] = {0x05, 0x00}; |
| 7268 const char kSOCKS5OkRequest[] = { | 7348 const char kSOCKS5OkRequest[] = { |
| 7269 0x05, // Version | 7349 0x05, // Version |
| 7270 0x01, // Command (CONNECT) | 7350 0x01, // Command (CONNECT) |
| 7271 0x00, // Reserved. | 7351 0x00, // Reserved. |
| 7272 0x03, // Address type (DOMAINNAME). | 7352 0x03, // Address type (DOMAINNAME). |
| 7273 0x0E, // Length of domain (14) | 7353 0x0E, // Length of domain (14) |
| 7274 // Domain string: | 7354 // Domain string: |
| 7275 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', | 7355 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g', |
| 7276 0x00, 0x50, // 16-bit port (80) | 7356 'l', 'e', '.', 'c', 'o', 'm', 0x00, 0x50, // 16-bit port (80) |
| 7277 }; | 7357 }; |
| 7278 const char kSOCKS5OkResponse[] = | 7358 const char kSOCKS5OkResponse[] = {0x05, 0x00, 0x00, 0x01, 127, |
| 7279 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; | 7359 0, 0, 1, 0x00, 0x50}; |
| 7280 | 7360 |
| 7281 MockWrite data_writes[] = { | 7361 MockWrite data_writes[] = { |
| 7282 MockWrite(ASYNC, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 7362 MockWrite(ASYNC, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 7283 MockWrite(ASYNC, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)), | 7363 MockWrite(ASYNC, kSOCKS5OkRequest, arraysize(kSOCKS5OkRequest)), |
| 7284 MockWrite("GET / HTTP/1.1\r\n" | 7364 MockWrite( |
| 7285 "Host: www.google.com\r\n" | 7365 "GET / HTTP/1.1\r\n" |
| 7286 "Connection: keep-alive\r\n\r\n") | 7366 "Host: www.google.com\r\n" |
| 7287 }; | 7367 "Connection: keep-alive\r\n\r\n")}; |
| 7288 | 7368 |
| 7289 MockRead data_reads[] = { | 7369 MockRead data_reads[] = { |
| 7290 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 7370 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 7291 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), | 7371 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), |
| 7292 MockRead("HTTP/1.0 200 OK\r\n"), | 7372 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7293 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 7373 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
| 7294 MockRead("Payload"), | 7374 MockRead("Payload"), |
| 7295 MockRead(SYNCHRONOUS, OK) | 7375 MockRead(SYNCHRONOUS, OK)}; |
| 7296 }; | |
| 7297 | 7376 |
| 7298 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7377 StaticSocketDataProvider data( |
| 7299 data_writes, arraysize(data_writes)); | 7378 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7300 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7379 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7301 | 7380 |
| 7302 TestCompletionCallback callback; | 7381 TestCompletionCallback callback; |
| 7303 | 7382 |
| 7304 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7383 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7305 EXPECT_EQ(ERR_IO_PENDING, rv); | 7384 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7306 | 7385 |
| 7307 rv = callback.WaitForResult(); | 7386 rv = callback.WaitForResult(); |
| 7308 EXPECT_EQ(OK, rv); | 7387 EXPECT_EQ(OK, rv); |
| 7309 | 7388 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 7329 | 7408 |
| 7330 session_deps_.proxy_service.reset( | 7409 session_deps_.proxy_service.reset( |
| 7331 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); | 7410 ProxyService::CreateFixedFromPacResult("SOCKS5 myproxy:1080")); |
| 7332 CapturingNetLog net_log; | 7411 CapturingNetLog net_log; |
| 7333 session_deps_.net_log = &net_log; | 7412 session_deps_.net_log = &net_log; |
| 7334 | 7413 |
| 7335 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7414 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7336 scoped_ptr<HttpTransaction> trans( | 7415 scoped_ptr<HttpTransaction> trans( |
| 7337 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7338 | 7417 |
| 7339 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 7418 const char kSOCKS5GreetRequest[] = {0x05, 0x01, 0x00}; |
| 7340 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 7419 const char kSOCKS5GreetResponse[] = {0x05, 0x00}; |
| 7341 const unsigned char kSOCKS5OkRequest[] = { | 7420 const unsigned char kSOCKS5OkRequest[] = { |
| 7342 0x05, // Version | 7421 0x05, // Version |
| 7343 0x01, // Command (CONNECT) | 7422 0x01, // Command (CONNECT) |
| 7344 0x00, // Reserved. | 7423 0x00, // Reserved. |
| 7345 0x03, // Address type (DOMAINNAME). | 7424 0x03, // Address type (DOMAINNAME). |
| 7346 0x0E, // Length of domain (14) | 7425 0x0E, // Length of domain (14) |
| 7347 // Domain string: | 7426 // Domain string: |
| 7348 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', | 7427 'w', 'w', 'w', '.', 'g', 'o', 'o', 'g', |
| 7349 0x01, 0xBB, // 16-bit port (443) | 7428 'l', 'e', '.', 'c', 'o', 'm', 0x01, 0xBB, // 16-bit port (443) |
| 7350 }; | 7429 }; |
| 7351 | 7430 |
| 7352 const char kSOCKS5OkResponse[] = | 7431 const char kSOCKS5OkResponse[] = {0x05, 0x00, 0x00, 0x01, 0, |
| 7353 { 0x05, 0x00, 0x00, 0x01, 0, 0, 0, 0, 0x00, 0x00 }; | 7432 0, 0, 0, 0x00, 0x00}; |
| 7354 | 7433 |
| 7355 MockWrite data_writes[] = { | 7434 MockWrite data_writes[] = { |
| 7356 MockWrite(ASYNC, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), | 7435 MockWrite(ASYNC, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)), |
| 7357 MockWrite(ASYNC, reinterpret_cast<const char*>(kSOCKS5OkRequest), | 7436 MockWrite(ASYNC, |
| 7358 arraysize(kSOCKS5OkRequest)), | 7437 reinterpret_cast<const char*>(kSOCKS5OkRequest), |
| 7359 MockWrite("GET / HTTP/1.1\r\n" | 7438 arraysize(kSOCKS5OkRequest)), |
| 7360 "Host: www.google.com\r\n" | 7439 MockWrite( |
| 7361 "Connection: keep-alive\r\n\r\n") | 7440 "GET / HTTP/1.1\r\n" |
| 7362 }; | 7441 "Host: www.google.com\r\n" |
| 7442 "Connection: keep-alive\r\n\r\n")}; |
| 7363 | 7443 |
| 7364 MockRead data_reads[] = { | 7444 MockRead data_reads[] = { |
| 7365 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), | 7445 MockRead(ASYNC, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)), |
| 7366 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), | 7446 MockRead(ASYNC, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse)), |
| 7367 MockRead("HTTP/1.0 200 OK\r\n"), | 7447 MockRead("HTTP/1.0 200 OK\r\n"), |
| 7368 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), | 7448 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n\r\n"), |
| 7369 MockRead("Payload"), | 7449 MockRead("Payload"), |
| 7370 MockRead(SYNCHRONOUS, OK) | 7450 MockRead(SYNCHRONOUS, OK)}; |
| 7371 }; | |
| 7372 | 7451 |
| 7373 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 7452 StaticSocketDataProvider data( |
| 7374 data_writes, arraysize(data_writes)); | 7453 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 7375 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7454 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7376 | 7455 |
| 7377 SSLSocketDataProvider ssl(ASYNC, OK); | 7456 SSLSocketDataProvider ssl(ASYNC, OK); |
| 7378 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 7457 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 7379 | 7458 |
| 7380 TestCompletionCallback callback; | 7459 TestCompletionCallback callback; |
| 7381 | 7460 |
| 7382 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7461 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7383 EXPECT_EQ(ERR_IO_PENDING, rv); | 7462 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7384 | 7463 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 7411 }; | 7490 }; |
| 7412 | 7491 |
| 7413 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( | 7492 scoped_refptr<HttpNetworkSession> SetupSessionForGroupNameTests( |
| 7414 NextProto next_proto, | 7493 NextProto next_proto, |
| 7415 SpdySessionDependencies* session_deps_) { | 7494 SpdySessionDependencies* session_deps_) { |
| 7416 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps_)); | 7495 scoped_refptr<HttpNetworkSession> session(CreateSession(session_deps_)); |
| 7417 | 7496 |
| 7418 base::WeakPtr<HttpServerProperties> http_server_properties = | 7497 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 7419 session->http_server_properties(); | 7498 session->http_server_properties(); |
| 7420 http_server_properties->SetAlternateProtocol( | 7499 http_server_properties->SetAlternateProtocol( |
| 7421 HostPortPair("host.with.alternate", 80), 443, | 7500 HostPortPair("host.with.alternate", 80), |
| 7501 443, |
| 7422 AlternateProtocolFromNextProto(next_proto)); | 7502 AlternateProtocolFromNextProto(next_proto)); |
| 7423 | 7503 |
| 7424 return session; | 7504 return session; |
| 7425 } | 7505 } |
| 7426 | 7506 |
| 7427 int GroupNameTransactionHelper( | 7507 int GroupNameTransactionHelper( |
| 7428 const std::string& url, | 7508 const std::string& url, |
| 7429 const scoped_refptr<HttpNetworkSession>& session) { | 7509 const scoped_refptr<HttpNetworkSession>& session) { |
| 7430 HttpRequestInfo request; | 7510 HttpRequestInfo request; |
| 7431 request.method = "GET"; | 7511 request.method = "GET"; |
| 7432 request.url = GURL(url); | 7512 request.url = GURL(url); |
| 7433 request.load_flags = 0; | 7513 request.load_flags = 0; |
| 7434 | 7514 |
| 7435 scoped_ptr<HttpTransaction> trans( | 7515 scoped_ptr<HttpTransaction> trans( |
| 7436 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7516 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7437 | 7517 |
| 7438 TestCompletionCallback callback; | 7518 TestCompletionCallback callback; |
| 7439 | 7519 |
| 7440 // We do not complete this request, the dtor will clean the transaction up. | 7520 // We do not complete this request, the dtor will clean the transaction up. |
| 7441 return trans->Start(&request, callback.callback(), BoundNetLog()); | 7521 return trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7442 } | 7522 } |
| 7443 | 7523 |
| 7444 } // namespace | 7524 } // namespace |
| 7445 | 7525 |
| 7446 TEST_P(HttpNetworkTransactionTest, GroupNameForDirectConnections) { | 7526 TEST_P(HttpNetworkTransactionTest, GroupNameForDirectConnections) { |
| 7447 const GroupNameTest tests[] = { | 7527 const GroupNameTest tests[] = { |
| 7448 { | 7528 { |
| 7449 "", // unused | 7529 "", // unused |
| 7450 "http://www.google.com/direct", | 7530 "http://www.google.com/direct", "www.google.com:80", false, |
| 7451 "www.google.com:80", | 7531 }, |
| 7452 false, | 7532 { |
| 7453 }, | 7533 "", // unused |
| 7454 { | 7534 "http://[2001:1418:13:1::25]/direct", "[2001:1418:13:1::25]:80", false, |
| 7455 "", // unused | 7535 }, |
| 7456 "http://[2001:1418:13:1::25]/direct", | |
| 7457 "[2001:1418:13:1::25]:80", | |
| 7458 false, | |
| 7459 }, | |
| 7460 | 7536 |
| 7461 // SSL Tests | 7537 // SSL Tests |
| 7462 { | 7538 { |
| 7463 "", // unused | 7539 "", // unused |
| 7464 "https://www.google.com/direct_ssl", | 7540 "https://www.google.com/direct_ssl", "ssl/www.google.com:443", true, |
| 7465 "ssl/www.google.com:443", | 7541 }, |
| 7466 true, | 7542 { |
| 7467 }, | 7543 "", // unused |
| 7468 { | 7544 "https://[2001:1418:13:1::25]/direct", "ssl/[2001:1418:13:1::25]:443", |
| 7469 "", // unused | 7545 true, |
| 7470 "https://[2001:1418:13:1::25]/direct", | 7546 }, |
| 7471 "ssl/[2001:1418:13:1::25]:443", | 7547 { |
| 7472 true, | 7548 "", // unused |
| 7473 }, | 7549 "http://host.with.alternate/direct", "ssl/host.with.alternate:443", true, |
| 7474 { | 7550 }, |
| 7475 "", // unused | |
| 7476 "http://host.with.alternate/direct", | |
| 7477 "ssl/host.with.alternate:443", | |
| 7478 true, | |
| 7479 }, | |
| 7480 }; | 7551 }; |
| 7481 | 7552 |
| 7482 HttpStreamFactory::set_use_alternate_protocols(true); | 7553 HttpStreamFactory::set_use_alternate_protocols(true); |
| 7483 | 7554 |
| 7484 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7555 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 7485 session_deps_.proxy_service.reset( | 7556 session_deps_.proxy_service.reset( |
| 7486 ProxyService::CreateFixed(tests[i].proxy_server)); | 7557 ProxyService::CreateFixed(tests[i].proxy_server)); |
| 7487 scoped_refptr<HttpNetworkSession> session( | 7558 scoped_refptr<HttpNetworkSession> session( |
| 7488 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7559 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
| 7489 | 7560 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 7501 | 7572 |
| 7502 EXPECT_EQ(ERR_IO_PENDING, | 7573 EXPECT_EQ(ERR_IO_PENDING, |
| 7503 GroupNameTransactionHelper(tests[i].url, session)); | 7574 GroupNameTransactionHelper(tests[i].url, session)); |
| 7504 if (tests[i].ssl) | 7575 if (tests[i].ssl) |
| 7505 EXPECT_EQ(tests[i].expected_group_name, | 7576 EXPECT_EQ(tests[i].expected_group_name, |
| 7506 ssl_conn_pool->last_group_name_received()); | 7577 ssl_conn_pool->last_group_name_received()); |
| 7507 else | 7578 else |
| 7508 EXPECT_EQ(tests[i].expected_group_name, | 7579 EXPECT_EQ(tests[i].expected_group_name, |
| 7509 transport_conn_pool->last_group_name_received()); | 7580 transport_conn_pool->last_group_name_received()); |
| 7510 } | 7581 } |
| 7511 | |
| 7512 } | 7582 } |
| 7513 | 7583 |
| 7514 TEST_P(HttpNetworkTransactionTest, GroupNameForHTTPProxyConnections) { | 7584 TEST_P(HttpNetworkTransactionTest, GroupNameForHTTPProxyConnections) { |
| 7515 const GroupNameTest tests[] = { | 7585 const GroupNameTest tests[] = { |
| 7516 { | 7586 { |
| 7517 "http_proxy", | 7587 "http_proxy", "http://www.google.com/http_proxy_normal", |
| 7518 "http://www.google.com/http_proxy_normal", | 7588 "www.google.com:80", false, |
| 7519 "www.google.com:80", | 7589 }, |
| 7520 false, | |
| 7521 }, | |
| 7522 | 7590 |
| 7523 // SSL Tests | 7591 // SSL Tests |
| 7524 { | 7592 { |
| 7525 "http_proxy", | 7593 "http_proxy", "https://www.google.com/http_connect_ssl", |
| 7526 "https://www.google.com/http_connect_ssl", | 7594 "ssl/www.google.com:443", true, |
| 7527 "ssl/www.google.com:443", | 7595 }, |
| 7528 true, | 7596 { |
| 7529 }, | 7597 "http_proxy", "http://host.with.alternate/direct", |
| 7530 | 7598 "ssl/host.with.alternate:443", true, |
| 7531 { | 7599 }, |
| 7532 "http_proxy", | 7600 { |
| 7533 "http://host.with.alternate/direct", | 7601 "http_proxy", "ftp://ftp.google.com/http_proxy_normal", |
| 7534 "ssl/host.with.alternate:443", | 7602 "ftp/ftp.google.com:21", false, |
| 7535 true, | 7603 }, |
| 7536 }, | |
| 7537 | |
| 7538 { | |
| 7539 "http_proxy", | |
| 7540 "ftp://ftp.google.com/http_proxy_normal", | |
| 7541 "ftp/ftp.google.com:21", | |
| 7542 false, | |
| 7543 }, | |
| 7544 }; | 7604 }; |
| 7545 | 7605 |
| 7546 HttpStreamFactory::set_use_alternate_protocols(true); | 7606 HttpStreamFactory::set_use_alternate_protocols(true); |
| 7547 | 7607 |
| 7548 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7608 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 7549 session_deps_.proxy_service.reset( | 7609 session_deps_.proxy_service.reset( |
| 7550 ProxyService::CreateFixed(tests[i].proxy_server)); | 7610 ProxyService::CreateFixed(tests[i].proxy_server)); |
| 7551 scoped_refptr<HttpNetworkSession> session( | 7611 scoped_refptr<HttpNetworkSession> session( |
| 7552 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7612 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
| 7553 | 7613 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7572 EXPECT_EQ(tests[i].expected_group_name, | 7632 EXPECT_EQ(tests[i].expected_group_name, |
| 7573 ssl_conn_pool->last_group_name_received()); | 7633 ssl_conn_pool->last_group_name_received()); |
| 7574 else | 7634 else |
| 7575 EXPECT_EQ(tests[i].expected_group_name, | 7635 EXPECT_EQ(tests[i].expected_group_name, |
| 7576 http_proxy_pool->last_group_name_received()); | 7636 http_proxy_pool->last_group_name_received()); |
| 7577 } | 7637 } |
| 7578 } | 7638 } |
| 7579 | 7639 |
| 7580 TEST_P(HttpNetworkTransactionTest, GroupNameForSOCKSConnections) { | 7640 TEST_P(HttpNetworkTransactionTest, GroupNameForSOCKSConnections) { |
| 7581 const GroupNameTest tests[] = { | 7641 const GroupNameTest tests[] = { |
| 7582 { | 7642 { |
| 7583 "socks4://socks_proxy:1080", | 7643 "socks4://socks_proxy:1080", "http://www.google.com/socks4_direct", |
| 7584 "http://www.google.com/socks4_direct", | 7644 "socks4/www.google.com:80", false, |
| 7585 "socks4/www.google.com:80", | 7645 }, |
| 7586 false, | 7646 { |
| 7587 }, | 7647 "socks5://socks_proxy:1080", "http://www.google.com/socks5_direct", |
| 7588 { | 7648 "socks5/www.google.com:80", false, |
| 7589 "socks5://socks_proxy:1080", | 7649 }, |
| 7590 "http://www.google.com/socks5_direct", | |
| 7591 "socks5/www.google.com:80", | |
| 7592 false, | |
| 7593 }, | |
| 7594 | 7650 |
| 7595 // SSL Tests | 7651 // SSL Tests |
| 7596 { | 7652 { |
| 7597 "socks4://socks_proxy:1080", | 7653 "socks4://socks_proxy:1080", "https://www.google.com/socks4_ssl", |
| 7598 "https://www.google.com/socks4_ssl", | 7654 "socks4/ssl/www.google.com:443", true, |
| 7599 "socks4/ssl/www.google.com:443", | 7655 }, |
| 7600 true, | 7656 { |
| 7601 }, | 7657 "socks5://socks_proxy:1080", "https://www.google.com/socks5_ssl", |
| 7602 { | 7658 "socks5/ssl/www.google.com:443", true, |
| 7603 "socks5://socks_proxy:1080", | 7659 }, |
| 7604 "https://www.google.com/socks5_ssl", | 7660 { |
| 7605 "socks5/ssl/www.google.com:443", | 7661 "socks4://socks_proxy:1080", "http://host.with.alternate/direct", |
| 7606 true, | 7662 "socks4/ssl/host.with.alternate:443", true, |
| 7607 }, | 7663 }, |
| 7608 | |
| 7609 { | |
| 7610 "socks4://socks_proxy:1080", | |
| 7611 "http://host.with.alternate/direct", | |
| 7612 "socks4/ssl/host.with.alternate:443", | |
| 7613 true, | |
| 7614 }, | |
| 7615 }; | 7664 }; |
| 7616 | 7665 |
| 7617 HttpStreamFactory::set_use_alternate_protocols(true); | 7666 HttpStreamFactory::set_use_alternate_protocols(true); |
| 7618 | 7667 |
| 7619 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { | 7668 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
| 7620 session_deps_.proxy_service.reset( | 7669 session_deps_.proxy_service.reset( |
| 7621 ProxyService::CreateFixed(tests[i].proxy_server)); | 7670 ProxyService::CreateFixed(tests[i].proxy_server)); |
| 7622 scoped_refptr<HttpNetworkSession> session( | 7671 scoped_refptr<HttpNetworkSession> session( |
| 7623 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); | 7672 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); |
| 7624 | 7673 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7718 BoundNetLog()); | 7767 BoundNetLog()); |
| 7719 ASSERT_EQ(OK, rv); | 7768 ASSERT_EQ(OK, rv); |
| 7720 | 7769 |
| 7721 // Inject a failure the next time that "www.google.com" is resolved. This way | 7770 // Inject a failure the next time that "www.google.com" is resolved. This way |
| 7722 // we can tell if the next lookup hit the cache, or the "network". | 7771 // we can tell if the next lookup hit the cache, or the "network". |
| 7723 // (cache --> success, "network" --> failure). | 7772 // (cache --> success, "network" --> failure). |
| 7724 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.google.com"); | 7773 session_deps_.host_resolver->rules()->AddSimulatedFailure("www.google.com"); |
| 7725 | 7774 |
| 7726 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the | 7775 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the |
| 7727 // first read -- this won't be reached as the host resolution will fail first. | 7776 // first read -- this won't be reached as the host resolution will fail first. |
| 7728 MockRead data_reads[] = { MockRead(SYNCHRONOUS, ERR_UNEXPECTED) }; | 7777 MockRead data_reads[] = {MockRead(SYNCHRONOUS, ERR_UNEXPECTED)}; |
| 7729 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 7778 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 7730 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7779 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7731 | 7780 |
| 7732 // Run the request. | 7781 // Run the request. |
| 7733 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7782 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7734 ASSERT_EQ(ERR_IO_PENDING, rv); | 7783 ASSERT_EQ(ERR_IO_PENDING, rv); |
| 7735 rv = callback.WaitForResult(); | 7784 rv = callback.WaitForResult(); |
| 7736 | 7785 |
| 7737 // If we bypassed the cache, we would have gotten a failure while resolving | 7786 // If we bypassed the cache, we would have gotten a failure while resolving |
| 7738 // "www.google.com". | 7787 // "www.google.com". |
| (...skipping 15 matching lines...) Expand all Loading... |
| 7754 } | 7803 } |
| 7755 | 7804 |
| 7756 // Make sure we can handle an error when writing the request. | 7805 // Make sure we can handle an error when writing the request. |
| 7757 TEST_P(HttpNetworkTransactionTest, RequestWriteError) { | 7806 TEST_P(HttpNetworkTransactionTest, RequestWriteError) { |
| 7758 HttpRequestInfo request; | 7807 HttpRequestInfo request; |
| 7759 request.method = "GET"; | 7808 request.method = "GET"; |
| 7760 request.url = GURL("http://www.foo.com/"); | 7809 request.url = GURL("http://www.foo.com/"); |
| 7761 request.load_flags = 0; | 7810 request.load_flags = 0; |
| 7762 | 7811 |
| 7763 MockWrite write_failure[] = { | 7812 MockWrite write_failure[] = { |
| 7764 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 7813 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
| 7765 }; | 7814 }; |
| 7766 StaticSocketDataProvider data(NULL, 0, | 7815 StaticSocketDataProvider data( |
| 7767 write_failure, arraysize(write_failure)); | 7816 NULL, 0, write_failure, arraysize(write_failure)); |
| 7768 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7817 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7769 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7818 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7770 | 7819 |
| 7771 TestCompletionCallback callback; | 7820 TestCompletionCallback callback; |
| 7772 | 7821 |
| 7773 scoped_ptr<HttpTransaction> trans( | 7822 scoped_ptr<HttpTransaction> trans( |
| 7774 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7823 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7775 | 7824 |
| 7776 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 7825 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7777 EXPECT_EQ(ERR_IO_PENDING, rv); | 7826 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7778 | 7827 |
| 7779 rv = callback.WaitForResult(); | 7828 rv = callback.WaitForResult(); |
| 7780 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 7829 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 7781 } | 7830 } |
| 7782 | 7831 |
| 7783 // Check that a connection closed after the start of the headers finishes ok. | 7832 // Check that a connection closed after the start of the headers finishes ok. |
| 7784 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { | 7833 TEST_P(HttpNetworkTransactionTest, ConnectionClosedAfterStartOfHeaders) { |
| 7785 HttpRequestInfo request; | 7834 HttpRequestInfo request; |
| 7786 request.method = "GET"; | 7835 request.method = "GET"; |
| 7787 request.url = GURL("http://www.foo.com/"); | 7836 request.url = GURL("http://www.foo.com/"); |
| 7788 request.load_flags = 0; | 7837 request.load_flags = 0; |
| 7789 | 7838 |
| 7790 MockRead data_reads[] = { | 7839 MockRead data_reads[] = { |
| 7791 MockRead("HTTP/1."), | 7840 MockRead("HTTP/1."), MockRead(SYNCHRONOUS, OK), |
| 7792 MockRead(SYNCHRONOUS, OK), | |
| 7793 }; | 7841 }; |
| 7794 | 7842 |
| 7795 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 7843 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 7796 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7844 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7797 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7845 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7798 | 7846 |
| 7799 TestCompletionCallback callback; | 7847 TestCompletionCallback callback; |
| 7800 | 7848 |
| 7801 scoped_ptr<HttpTransaction> trans( | 7849 scoped_ptr<HttpTransaction> trans( |
| 7802 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7850 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 7821 | 7869 |
| 7822 // Make sure that a dropped connection while draining the body for auth | 7870 // Make sure that a dropped connection while draining the body for auth |
| 7823 // restart does the right thing. | 7871 // restart does the right thing. |
| 7824 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { | 7872 TEST_P(HttpNetworkTransactionTest, DrainResetOK) { |
| 7825 HttpRequestInfo request; | 7873 HttpRequestInfo request; |
| 7826 request.method = "GET"; | 7874 request.method = "GET"; |
| 7827 request.url = GURL("http://www.google.com/"); | 7875 request.url = GURL("http://www.google.com/"); |
| 7828 request.load_flags = 0; | 7876 request.load_flags = 0; |
| 7829 | 7877 |
| 7830 MockWrite data_writes1[] = { | 7878 MockWrite data_writes1[] = { |
| 7831 MockWrite("GET / HTTP/1.1\r\n" | 7879 MockWrite( |
| 7832 "Host: www.google.com\r\n" | 7880 "GET / HTTP/1.1\r\n" |
| 7833 "Connection: keep-alive\r\n\r\n"), | 7881 "Host: www.google.com\r\n" |
| 7882 "Connection: keep-alive\r\n\r\n"), |
| 7834 }; | 7883 }; |
| 7835 | 7884 |
| 7836 MockRead data_reads1[] = { | 7885 MockRead data_reads1[] = { |
| 7837 MockRead("HTTP/1.1 401 Unauthorized\r\n"), | 7886 MockRead("HTTP/1.1 401 Unauthorized\r\n"), |
| 7838 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), | 7887 MockRead("WWW-Authenticate: Basic realm=\"MyRealm1\"\r\n"), |
| 7839 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7888 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 7840 MockRead("Content-Length: 14\r\n\r\n"), | 7889 MockRead("Content-Length: 14\r\n\r\n"), |
| 7841 MockRead("Unauth"), | 7890 MockRead("Unauth"), |
| 7842 MockRead(ASYNC, ERR_CONNECTION_RESET), | 7891 MockRead(ASYNC, ERR_CONNECTION_RESET), |
| 7843 }; | 7892 }; |
| 7844 | 7893 |
| 7845 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 7894 StaticSocketDataProvider data1(data_reads1, |
| 7846 data_writes1, arraysize(data_writes1)); | 7895 arraysize(data_reads1), |
| 7896 data_writes1, |
| 7897 arraysize(data_writes1)); |
| 7847 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 7898 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 7848 | 7899 |
| 7849 // After calling trans->RestartWithAuth(), this is the request we should | 7900 // After calling trans->RestartWithAuth(), this is the request we should |
| 7850 // be issuing -- the final header line contains the credentials. | 7901 // be issuing -- the final header line contains the credentials. |
| 7851 MockWrite data_writes2[] = { | 7902 MockWrite data_writes2[] = { |
| 7852 MockWrite("GET / HTTP/1.1\r\n" | 7903 MockWrite( |
| 7853 "Host: www.google.com\r\n" | 7904 "GET / HTTP/1.1\r\n" |
| 7854 "Connection: keep-alive\r\n" | 7905 "Host: www.google.com\r\n" |
| 7855 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), | 7906 "Connection: keep-alive\r\n" |
| 7907 "Authorization: Basic Zm9vOmJhcg==\r\n\r\n"), |
| 7856 }; | 7908 }; |
| 7857 | 7909 |
| 7858 // Lastly, the server responds with the actual content. | 7910 // Lastly, the server responds with the actual content. |
| 7859 MockRead data_reads2[] = { | 7911 MockRead data_reads2[] = { |
| 7860 MockRead("HTTP/1.1 200 OK\r\n"), | 7912 MockRead("HTTP/1.1 200 OK\r\n"), |
| 7861 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 7913 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 7862 MockRead("Content-Length: 100\r\n\r\n"), | 7914 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 7863 MockRead(SYNCHRONOUS, OK), | |
| 7864 }; | 7915 }; |
| 7865 | 7916 |
| 7866 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 7917 StaticSocketDataProvider data2(data_reads2, |
| 7867 data_writes2, arraysize(data_writes2)); | 7918 arraysize(data_reads2), |
| 7919 data_writes2, |
| 7920 arraysize(data_writes2)); |
| 7868 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 7921 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 7869 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7922 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7870 | 7923 |
| 7871 TestCompletionCallback callback1; | 7924 TestCompletionCallback callback1; |
| 7872 | 7925 |
| 7873 scoped_ptr<HttpTransaction> trans( | 7926 scoped_ptr<HttpTransaction> trans( |
| 7874 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 7927 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 7875 | 7928 |
| 7876 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); | 7929 int rv = trans->Start(&request, callback1.callback(), BoundNetLog()); |
| 7877 EXPECT_EQ(ERR_IO_PENDING, rv); | 7930 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7878 | 7931 |
| 7879 rv = callback1.WaitForResult(); | 7932 rv = callback1.WaitForResult(); |
| 7880 EXPECT_EQ(OK, rv); | 7933 EXPECT_EQ(OK, rv); |
| 7881 | 7934 |
| 7882 const HttpResponseInfo* response = trans->GetResponseInfo(); | 7935 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 7883 ASSERT_TRUE(response != NULL); | 7936 ASSERT_TRUE(response != NULL); |
| 7884 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); | 7937 EXPECT_TRUE(CheckBasicServerAuth(response->auth_challenge.get())); |
| 7885 | 7938 |
| 7886 TestCompletionCallback callback2; | 7939 TestCompletionCallback callback2; |
| 7887 | 7940 |
| 7888 rv = trans->RestartWithAuth( | 7941 rv = |
| 7889 AuthCredentials(kFoo, kBar), callback2.callback()); | 7942 trans->RestartWithAuth(AuthCredentials(kFoo, kBar), callback2.callback()); |
| 7890 EXPECT_EQ(ERR_IO_PENDING, rv); | 7943 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7891 | 7944 |
| 7892 rv = callback2.WaitForResult(); | 7945 rv = callback2.WaitForResult(); |
| 7893 EXPECT_EQ(OK, rv); | 7946 EXPECT_EQ(OK, rv); |
| 7894 | 7947 |
| 7895 response = trans->GetResponseInfo(); | 7948 response = trans->GetResponseInfo(); |
| 7896 ASSERT_TRUE(response != NULL); | 7949 ASSERT_TRUE(response != NULL); |
| 7897 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 7950 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 7898 EXPECT_EQ(100, response->headers->GetContentLength()); | 7951 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 7899 } | 7952 } |
| 7900 | 7953 |
| 7901 // Test HTTPS connections going through a proxy that sends extra data. | 7954 // Test HTTPS connections going through a proxy that sends extra data. |
| 7902 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { | 7955 TEST_P(HttpNetworkTransactionTest, HTTPSViaProxyWithExtraData) { |
| 7903 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); | 7956 session_deps_.proxy_service.reset(ProxyService::CreateFixed("myproxy:70")); |
| 7904 | 7957 |
| 7905 HttpRequestInfo request; | 7958 HttpRequestInfo request; |
| 7906 request.method = "GET"; | 7959 request.method = "GET"; |
| 7907 request.url = GURL("https://www.google.com/"); | 7960 request.url = GURL("https://www.google.com/"); |
| 7908 request.load_flags = 0; | 7961 request.load_flags = 0; |
| 7909 | 7962 |
| 7910 MockRead proxy_reads[] = { | 7963 MockRead proxy_reads[] = { |
| 7911 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), | 7964 MockRead("HTTP/1.0 200 Connected\r\n\r\nExtra data"), |
| 7912 MockRead(SYNCHRONOUS, OK) | 7965 MockRead(SYNCHRONOUS, OK)}; |
| 7913 }; | |
| 7914 | 7966 |
| 7915 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); | 7967 StaticSocketDataProvider data(proxy_reads, arraysize(proxy_reads), NULL, 0); |
| 7916 SSLSocketDataProvider ssl(ASYNC, OK); | 7968 SSLSocketDataProvider ssl(ASYNC, OK); |
| 7917 | 7969 |
| 7918 session_deps_.socket_factory->AddSocketDataProvider(&data); | 7970 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7919 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 7971 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 7920 | 7972 |
| 7921 TestCompletionCallback callback; | 7973 TestCompletionCallback callback; |
| 7922 | 7974 |
| 7923 session_deps_.socket_factory->ResetNextMockIndexes(); | 7975 session_deps_.socket_factory->ResetNextMockIndexes(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 7937 HttpRequestInfo request; | 7989 HttpRequestInfo request; |
| 7938 request.method = "GET"; | 7990 request.method = "GET"; |
| 7939 request.url = GURL("http://www.google.com/"); | 7991 request.url = GURL("http://www.google.com/"); |
| 7940 request.load_flags = 0; | 7992 request.load_flags = 0; |
| 7941 | 7993 |
| 7942 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 7994 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7943 scoped_ptr<HttpTransaction> trans( | 7995 scoped_ptr<HttpTransaction> trans( |
| 7944 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 7996 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7945 | 7997 |
| 7946 MockRead data_reads[] = { | 7998 MockRead data_reads[] = { |
| 7947 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), | 7999 MockRead("HTTP/1.0 200 OK\r\nContent-Length:6719476739\r\n\r\n"), |
| 7948 MockRead(SYNCHRONOUS, OK), | 8000 MockRead(SYNCHRONOUS, OK), |
| 7949 }; | 8001 }; |
| 7950 | 8002 |
| 7951 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 8003 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 7952 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8004 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 7953 | 8005 |
| 7954 TestCompletionCallback callback; | 8006 TestCompletionCallback callback; |
| 7955 | 8007 |
| 7956 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8008 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 7957 EXPECT_EQ(ERR_IO_PENDING, rv); | 8009 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 7958 | 8010 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 7989 request.method = "POST"; | 8041 request.method = "POST"; |
| 7990 request.url = GURL("http://www.google.com/upload"); | 8042 request.url = GURL("http://www.google.com/upload"); |
| 7991 request.upload_data_stream = &upload_data_stream; | 8043 request.upload_data_stream = &upload_data_stream; |
| 7992 request.load_flags = 0; | 8044 request.load_flags = 0; |
| 7993 | 8045 |
| 7994 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8046 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 7995 scoped_ptr<HttpTransaction> trans( | 8047 scoped_ptr<HttpTransaction> trans( |
| 7996 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 8048 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 7997 | 8049 |
| 7998 MockRead data_reads[] = { | 8050 MockRead data_reads[] = { |
| 7999 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 8051 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8000 MockRead("hello world"), | 8052 MockRead(SYNCHRONOUS, OK), |
| 8001 MockRead(SYNCHRONOUS, OK), | |
| 8002 }; | 8053 }; |
| 8003 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 8054 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 8004 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8055 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8005 | 8056 |
| 8006 TestCompletionCallback callback; | 8057 TestCompletionCallback callback; |
| 8007 | 8058 |
| 8008 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 8059 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 8009 EXPECT_EQ(ERR_IO_PENDING, rv); | 8060 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8010 | 8061 |
| 8011 rv = callback.WaitForResult(); | 8062 rv = callback.WaitForResult(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 8022 EXPECT_EQ(OK, rv); | 8073 EXPECT_EQ(OK, rv); |
| 8023 EXPECT_EQ("hello world", response_data); | 8074 EXPECT_EQ("hello world", response_data); |
| 8024 | 8075 |
| 8025 base::DeleteFile(temp_file_path, false); | 8076 base::DeleteFile(temp_file_path, false); |
| 8026 } | 8077 } |
| 8027 | 8078 |
| 8028 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { | 8079 TEST_P(HttpNetworkTransactionTest, UploadUnreadableFile) { |
| 8029 base::FilePath temp_file; | 8080 base::FilePath temp_file; |
| 8030 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file)); | 8081 ASSERT_TRUE(base::CreateTemporaryFile(&temp_file)); |
| 8031 std::string temp_file_content("Unreadable file."); | 8082 std::string temp_file_content("Unreadable file."); |
| 8032 ASSERT_TRUE(base::WriteFile(temp_file, temp_file_content.c_str(), | 8083 ASSERT_TRUE(base::WriteFile( |
| 8033 temp_file_content.length())); | 8084 temp_file, temp_file_content.c_str(), temp_file_content.length())); |
| 8034 ASSERT_TRUE(file_util::MakeFileUnreadable(temp_file)); | 8085 ASSERT_TRUE(file_util::MakeFileUnreadable(temp_file)); |
| 8035 | 8086 |
| 8036 ScopedVector<UploadElementReader> element_readers; | 8087 ScopedVector<UploadElementReader> element_readers; |
| 8037 element_readers.push_back( | 8088 element_readers.push_back( |
| 8038 new UploadFileElementReader(base::MessageLoopProxy::current().get(), | 8089 new UploadFileElementReader(base::MessageLoopProxy::current().get(), |
| 8039 temp_file, | 8090 temp_file, |
| 8040 0, | 8091 0, |
| 8041 kuint64max, | 8092 kuint64max, |
| 8042 base::Time())); | 8093 base::Time())); |
| 8043 UploadDataStream upload_data_stream(element_readers.Pass(), 0); | 8094 UploadDataStream upload_data_stream(element_readers.Pass(), 0); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8121 // Transaction is pending on request body initialization. | 8172 // Transaction is pending on request body initialization. |
| 8122 ASSERT_FALSE(fake_reader->callback().is_null()); | 8173 ASSERT_FALSE(fake_reader->callback().is_null()); |
| 8123 | 8174 |
| 8124 // Return Init()'s result after the transaction gets destroyed. | 8175 // Return Init()'s result after the transaction gets destroyed. |
| 8125 trans.reset(); | 8176 trans.reset(); |
| 8126 fake_reader->callback().Run(OK); // Should not crash. | 8177 fake_reader->callback().Run(OK); // Should not crash. |
| 8127 } | 8178 } |
| 8128 | 8179 |
| 8129 // Tests that changes to Auth realms are treated like auth rejections. | 8180 // Tests that changes to Auth realms are treated like auth rejections. |
| 8130 TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) { | 8181 TEST_P(HttpNetworkTransactionTest, ChangeAuthRealms) { |
| 8131 | |
| 8132 HttpRequestInfo request; | 8182 HttpRequestInfo request; |
| 8133 request.method = "GET"; | 8183 request.method = "GET"; |
| 8134 request.url = GURL("http://www.google.com/"); | 8184 request.url = GURL("http://www.google.com/"); |
| 8135 request.load_flags = 0; | 8185 request.load_flags = 0; |
| 8136 | 8186 |
| 8137 // First transaction will request a resource and receive a Basic challenge | 8187 // First transaction will request a resource and receive a Basic challenge |
| 8138 // with realm="first_realm". | 8188 // with realm="first_realm". |
| 8139 MockWrite data_writes1[] = { | 8189 MockWrite data_writes1[] = { |
| 8140 MockWrite("GET / HTTP/1.1\r\n" | 8190 MockWrite( |
| 8141 "Host: www.google.com\r\n" | 8191 "GET / HTTP/1.1\r\n" |
| 8142 "Connection: keep-alive\r\n" | 8192 "Host: www.google.com\r\n" |
| 8143 "\r\n"), | 8193 "Connection: keep-alive\r\n" |
| 8194 "\r\n"), |
| 8144 }; | 8195 }; |
| 8145 MockRead data_reads1[] = { | 8196 MockRead data_reads1[] = { |
| 8146 MockRead("HTTP/1.1 401 Unauthorized\r\n" | 8197 MockRead( |
| 8147 "WWW-Authenticate: Basic realm=\"first_realm\"\r\n" | 8198 "HTTP/1.1 401 Unauthorized\r\n" |
| 8148 "\r\n"), | 8199 "WWW-Authenticate: Basic realm=\"first_realm\"\r\n" |
| 8200 "\r\n"), |
| 8149 }; | 8201 }; |
| 8150 | 8202 |
| 8151 // After calling trans->RestartWithAuth(), provide an Authentication header | 8203 // After calling trans->RestartWithAuth(), provide an Authentication header |
| 8152 // for first_realm. The server will reject and provide a challenge with | 8204 // for first_realm. The server will reject and provide a challenge with |
| 8153 // second_realm. | 8205 // second_realm. |
| 8154 MockWrite data_writes2[] = { | 8206 MockWrite data_writes2[] = { |
| 8155 MockWrite("GET / HTTP/1.1\r\n" | 8207 MockWrite( |
| 8156 "Host: www.google.com\r\n" | 8208 "GET / HTTP/1.1\r\n" |
| 8157 "Connection: keep-alive\r\n" | 8209 "Host: www.google.com\r\n" |
| 8158 "Authorization: Basic Zmlyc3Q6YmF6\r\n" | 8210 "Connection: keep-alive\r\n" |
| 8159 "\r\n"), | 8211 "Authorization: Basic Zmlyc3Q6YmF6\r\n" |
| 8212 "\r\n"), |
| 8160 }; | 8213 }; |
| 8161 MockRead data_reads2[] = { | 8214 MockRead data_reads2[] = { |
| 8162 MockRead("HTTP/1.1 401 Unauthorized\r\n" | 8215 MockRead( |
| 8163 "WWW-Authenticate: Basic realm=\"second_realm\"\r\n" | 8216 "HTTP/1.1 401 Unauthorized\r\n" |
| 8164 "\r\n"), | 8217 "WWW-Authenticate: Basic realm=\"second_realm\"\r\n" |
| 8218 "\r\n"), |
| 8165 }; | 8219 }; |
| 8166 | 8220 |
| 8167 // This again fails, and goes back to first_realm. Make sure that the | 8221 // This again fails, and goes back to first_realm. Make sure that the |
| 8168 // entry is removed from cache. | 8222 // entry is removed from cache. |
| 8169 MockWrite data_writes3[] = { | 8223 MockWrite data_writes3[] = { |
| 8170 MockWrite("GET / HTTP/1.1\r\n" | 8224 MockWrite( |
| 8171 "Host: www.google.com\r\n" | 8225 "GET / HTTP/1.1\r\n" |
| 8172 "Connection: keep-alive\r\n" | 8226 "Host: www.google.com\r\n" |
| 8173 "Authorization: Basic c2Vjb25kOmZvdQ==\r\n" | 8227 "Connection: keep-alive\r\n" |
| 8174 "\r\n"), | 8228 "Authorization: Basic c2Vjb25kOmZvdQ==\r\n" |
| 8229 "\r\n"), |
| 8175 }; | 8230 }; |
| 8176 MockRead data_reads3[] = { | 8231 MockRead data_reads3[] = { |
| 8177 MockRead("HTTP/1.1 401 Unauthorized\r\n" | 8232 MockRead( |
| 8178 "WWW-Authenticate: Basic realm=\"first_realm\"\r\n" | 8233 "HTTP/1.1 401 Unauthorized\r\n" |
| 8179 "\r\n"), | 8234 "WWW-Authenticate: Basic realm=\"first_realm\"\r\n" |
| 8235 "\r\n"), |
| 8180 }; | 8236 }; |
| 8181 | 8237 |
| 8182 // Try one last time (with the correct password) and get the resource. | 8238 // Try one last time (with the correct password) and get the resource. |
| 8183 MockWrite data_writes4[] = { | 8239 MockWrite data_writes4[] = { |
| 8184 MockWrite("GET / HTTP/1.1\r\n" | 8240 MockWrite( |
| 8185 "Host: www.google.com\r\n" | 8241 "GET / HTTP/1.1\r\n" |
| 8186 "Connection: keep-alive\r\n" | 8242 "Host: www.google.com\r\n" |
| 8187 "Authorization: Basic Zmlyc3Q6YmFy\r\n" | 8243 "Connection: keep-alive\r\n" |
| 8188 "\r\n"), | 8244 "Authorization: Basic Zmlyc3Q6YmFy\r\n" |
| 8245 "\r\n"), |
| 8189 }; | 8246 }; |
| 8190 MockRead data_reads4[] = { | 8247 MockRead data_reads4[] = { |
| 8191 MockRead("HTTP/1.1 200 OK\r\n" | 8248 MockRead( |
| 8192 "Content-Type: text/html; charset=iso-8859-1\r\n" | 8249 "HTTP/1.1 200 OK\r\n" |
| 8193 "Content-Length: 5\r\n" | 8250 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 8194 "\r\n" | 8251 "Content-Length: 5\r\n" |
| 8195 "hello"), | 8252 "\r\n" |
| 8253 "hello"), |
| 8196 }; | 8254 }; |
| 8197 | 8255 |
| 8198 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 8256 StaticSocketDataProvider data1(data_reads1, |
| 8199 data_writes1, arraysize(data_writes1)); | 8257 arraysize(data_reads1), |
| 8200 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 8258 data_writes1, |
| 8201 data_writes2, arraysize(data_writes2)); | 8259 arraysize(data_writes1)); |
| 8202 StaticSocketDataProvider data3(data_reads3, arraysize(data_reads3), | 8260 StaticSocketDataProvider data2(data_reads2, |
| 8203 data_writes3, arraysize(data_writes3)); | 8261 arraysize(data_reads2), |
| 8204 StaticSocketDataProvider data4(data_reads4, arraysize(data_reads4), | 8262 data_writes2, |
| 8205 data_writes4, arraysize(data_writes4)); | 8263 arraysize(data_writes2)); |
| 8264 StaticSocketDataProvider data3(data_reads3, |
| 8265 arraysize(data_reads3), |
| 8266 data_writes3, |
| 8267 arraysize(data_writes3)); |
| 8268 StaticSocketDataProvider data4(data_reads4, |
| 8269 arraysize(data_reads4), |
| 8270 data_writes4, |
| 8271 arraysize(data_writes4)); |
| 8206 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 8272 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 8207 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 8273 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 8208 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 8274 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 8209 session_deps_.socket_factory->AddSocketDataProvider(&data4); | 8275 session_deps_.socket_factory->AddSocketDataProvider(&data4); |
| 8210 | 8276 |
| 8211 TestCompletionCallback callback1; | 8277 TestCompletionCallback callback1; |
| 8212 | 8278 |
| 8213 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8279 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8214 scoped_ptr<HttpTransaction> trans( | 8280 scoped_ptr<HttpTransaction> trans( |
| 8215 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 8281 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 8227 ASSERT_FALSE(challenge == NULL); | 8293 ASSERT_FALSE(challenge == NULL); |
| 8228 EXPECT_FALSE(challenge->is_proxy); | 8294 EXPECT_FALSE(challenge->is_proxy); |
| 8229 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); | 8295 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); |
| 8230 EXPECT_EQ("first_realm", challenge->realm); | 8296 EXPECT_EQ("first_realm", challenge->realm); |
| 8231 EXPECT_EQ("basic", challenge->scheme); | 8297 EXPECT_EQ("basic", challenge->scheme); |
| 8232 | 8298 |
| 8233 // Issue the second request with an incorrect password. There should be a | 8299 // Issue the second request with an incorrect password. There should be a |
| 8234 // password prompt for second_realm waiting to be filled in after the | 8300 // password prompt for second_realm waiting to be filled in after the |
| 8235 // transaction completes. | 8301 // transaction completes. |
| 8236 TestCompletionCallback callback2; | 8302 TestCompletionCallback callback2; |
| 8237 rv = trans->RestartWithAuth( | 8303 rv = trans->RestartWithAuth(AuthCredentials(kFirst, kBaz), |
| 8238 AuthCredentials(kFirst, kBaz), callback2.callback()); | 8304 callback2.callback()); |
| 8239 EXPECT_EQ(ERR_IO_PENDING, rv); | 8305 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8240 rv = callback2.WaitForResult(); | 8306 rv = callback2.WaitForResult(); |
| 8241 EXPECT_EQ(OK, rv); | 8307 EXPECT_EQ(OK, rv); |
| 8242 response = trans->GetResponseInfo(); | 8308 response = trans->GetResponseInfo(); |
| 8243 ASSERT_TRUE(response != NULL); | 8309 ASSERT_TRUE(response != NULL); |
| 8244 challenge = response->auth_challenge.get(); | 8310 challenge = response->auth_challenge.get(); |
| 8245 ASSERT_FALSE(challenge == NULL); | 8311 ASSERT_FALSE(challenge == NULL); |
| 8246 EXPECT_FALSE(challenge->is_proxy); | 8312 EXPECT_FALSE(challenge->is_proxy); |
| 8247 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); | 8313 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); |
| 8248 EXPECT_EQ("second_realm", challenge->realm); | 8314 EXPECT_EQ("second_realm", challenge->realm); |
| 8249 EXPECT_EQ("basic", challenge->scheme); | 8315 EXPECT_EQ("basic", challenge->scheme); |
| 8250 | 8316 |
| 8251 // Issue the third request with another incorrect password. There should be | 8317 // Issue the third request with another incorrect password. There should be |
| 8252 // a password prompt for first_realm waiting to be filled in. If the password | 8318 // a password prompt for first_realm waiting to be filled in. If the password |
| 8253 // prompt is not present, it indicates that the HttpAuthCacheEntry for | 8319 // prompt is not present, it indicates that the HttpAuthCacheEntry for |
| 8254 // first_realm was not correctly removed. | 8320 // first_realm was not correctly removed. |
| 8255 TestCompletionCallback callback3; | 8321 TestCompletionCallback callback3; |
| 8256 rv = trans->RestartWithAuth( | 8322 rv = trans->RestartWithAuth(AuthCredentials(kSecond, kFou), |
| 8257 AuthCredentials(kSecond, kFou), callback3.callback()); | 8323 callback3.callback()); |
| 8258 EXPECT_EQ(ERR_IO_PENDING, rv); | 8324 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8259 rv = callback3.WaitForResult(); | 8325 rv = callback3.WaitForResult(); |
| 8260 EXPECT_EQ(OK, rv); | 8326 EXPECT_EQ(OK, rv); |
| 8261 response = trans->GetResponseInfo(); | 8327 response = trans->GetResponseInfo(); |
| 8262 ASSERT_TRUE(response != NULL); | 8328 ASSERT_TRUE(response != NULL); |
| 8263 challenge = response->auth_challenge.get(); | 8329 challenge = response->auth_challenge.get(); |
| 8264 ASSERT_FALSE(challenge == NULL); | 8330 ASSERT_FALSE(challenge == NULL); |
| 8265 EXPECT_FALSE(challenge->is_proxy); | 8331 EXPECT_FALSE(challenge->is_proxy); |
| 8266 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); | 8332 EXPECT_EQ("www.google.com:80", challenge->challenger.ToString()); |
| 8267 EXPECT_EQ("first_realm", challenge->realm); | 8333 EXPECT_EQ("first_realm", challenge->realm); |
| 8268 EXPECT_EQ("basic", challenge->scheme); | 8334 EXPECT_EQ("basic", challenge->scheme); |
| 8269 | 8335 |
| 8270 // Issue the fourth request with the correct password and username. | 8336 // Issue the fourth request with the correct password and username. |
| 8271 TestCompletionCallback callback4; | 8337 TestCompletionCallback callback4; |
| 8272 rv = trans->RestartWithAuth( | 8338 rv = trans->RestartWithAuth(AuthCredentials(kFirst, kBar), |
| 8273 AuthCredentials(kFirst, kBar), callback4.callback()); | 8339 callback4.callback()); |
| 8274 EXPECT_EQ(ERR_IO_PENDING, rv); | 8340 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8275 rv = callback4.WaitForResult(); | 8341 rv = callback4.WaitForResult(); |
| 8276 EXPECT_EQ(OK, rv); | 8342 EXPECT_EQ(OK, rv); |
| 8277 response = trans->GetResponseInfo(); | 8343 response = trans->GetResponseInfo(); |
| 8278 ASSERT_TRUE(response != NULL); | 8344 ASSERT_TRUE(response != NULL); |
| 8279 EXPECT_TRUE(response->auth_challenge.get() == NULL); | 8345 EXPECT_TRUE(response->auth_challenge.get() == NULL); |
| 8280 } | 8346 } |
| 8281 | 8347 |
| 8282 TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { | 8348 TEST_P(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { |
| 8283 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8349 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 8284 HttpStreamFactory::set_use_alternate_protocols(true); | 8350 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8285 | 8351 |
| 8286 std::string alternate_protocol_http_header = | 8352 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 8287 GetAlternateProtocolHttpHeader(); | |
| 8288 | 8353 |
| 8289 MockRead data_reads[] = { | 8354 MockRead data_reads[] = { |
| 8290 MockRead("HTTP/1.1 200 OK\r\n"), | 8355 MockRead("HTTP/1.1 200 OK\r\n"), |
| 8291 MockRead(alternate_protocol_http_header.c_str()), | 8356 MockRead(alternate_protocol_http_header.c_str()), MockRead("hello world"), |
| 8292 MockRead("hello world"), | 8357 MockRead(SYNCHRONOUS, OK), |
| 8293 MockRead(SYNCHRONOUS, OK), | |
| 8294 }; | 8358 }; |
| 8295 | 8359 |
| 8296 HttpRequestInfo request; | 8360 HttpRequestInfo request; |
| 8297 request.method = "GET"; | 8361 request.method = "GET"; |
| 8298 request.url = GURL("http://www.google.com/"); | 8362 request.url = GURL("http://www.google.com/"); |
| 8299 request.load_flags = 0; | 8363 request.load_flags = 0; |
| 8300 | 8364 |
| 8301 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 8365 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 8302 | 8366 |
| 8303 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8367 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 8332 | 8396 |
| 8333 ASSERT_TRUE(http_server_properties.HasAlternateProtocol(http_host_port_pair)); | 8397 ASSERT_TRUE(http_server_properties.HasAlternateProtocol(http_host_port_pair)); |
| 8334 const PortAlternateProtocolPair alternate = | 8398 const PortAlternateProtocolPair alternate = |
| 8335 http_server_properties.GetAlternateProtocol(http_host_port_pair); | 8399 http_server_properties.GetAlternateProtocol(http_host_port_pair); |
| 8336 PortAlternateProtocolPair expected_alternate; | 8400 PortAlternateProtocolPair expected_alternate; |
| 8337 expected_alternate.port = 443; | 8401 expected_alternate.port = 443; |
| 8338 expected_alternate.protocol = AlternateProtocolFromNextProto(GetParam()); | 8402 expected_alternate.protocol = AlternateProtocolFromNextProto(GetParam()); |
| 8339 EXPECT_TRUE(expected_alternate.Equals(alternate)); | 8403 EXPECT_TRUE(expected_alternate.Equals(alternate)); |
| 8340 } | 8404 } |
| 8341 | 8405 |
| 8342 TEST_P(HttpNetworkTransactionTest, | 8406 TEST_P(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { |
| 8343 MarkBrokenAlternateProtocolAndFallback) { | |
| 8344 HttpStreamFactory::set_use_alternate_protocols(true); | 8407 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8345 | 8408 |
| 8346 HttpRequestInfo request; | 8409 HttpRequestInfo request; |
| 8347 request.method = "GET"; | 8410 request.method = "GET"; |
| 8348 request.url = GURL("http://www.google.com/"); | 8411 request.url = GURL("http://www.google.com/"); |
| 8349 request.load_flags = 0; | 8412 request.load_flags = 0; |
| 8350 | 8413 |
| 8351 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8414 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8352 StaticSocketDataProvider first_data; | 8415 StaticSocketDataProvider first_data; |
| 8353 first_data.set_connect_data(mock_connect); | 8416 first_data.set_connect_data(mock_connect); |
| 8354 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8417 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8355 | 8418 |
| 8356 MockRead data_reads[] = { | 8419 MockRead data_reads[] = { |
| 8357 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8420 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8358 MockRead("hello world"), | 8421 MockRead(ASYNC, OK), |
| 8359 MockRead(ASYNC, OK), | |
| 8360 }; | 8422 }; |
| 8361 StaticSocketDataProvider second_data( | 8423 StaticSocketDataProvider second_data( |
| 8362 data_reads, arraysize(data_reads), NULL, 0); | 8424 data_reads, arraysize(data_reads), NULL, 0); |
| 8363 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8425 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8364 | 8426 |
| 8365 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8427 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8366 | 8428 |
| 8367 base::WeakPtr<HttpServerProperties> http_server_properties = | 8429 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8368 session->http_server_properties(); | 8430 session->http_server_properties(); |
| 8369 // Port must be < 1024, or the header will be ignored (since initial port was | 8431 // Port must be < 1024, or the header will be ignored (since initial port was |
| (...skipping 21 matching lines...) Expand all Loading... |
| 8391 EXPECT_EQ("hello world", response_data); | 8453 EXPECT_EQ("hello world", response_data); |
| 8392 | 8454 |
| 8393 ASSERT_TRUE(http_server_properties->HasAlternateProtocol( | 8455 ASSERT_TRUE(http_server_properties->HasAlternateProtocol( |
| 8394 HostPortPair::FromURL(request.url))); | 8456 HostPortPair::FromURL(request.url))); |
| 8395 const PortAlternateProtocolPair alternate = | 8457 const PortAlternateProtocolPair alternate = |
| 8396 http_server_properties->GetAlternateProtocol( | 8458 http_server_properties->GetAlternateProtocol( |
| 8397 HostPortPair::FromURL(request.url)); | 8459 HostPortPair::FromURL(request.url)); |
| 8398 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); | 8460 EXPECT_EQ(ALTERNATE_PROTOCOL_BROKEN, alternate.protocol); |
| 8399 } | 8461 } |
| 8400 | 8462 |
| 8401 TEST_P(HttpNetworkTransactionTest, | 8463 TEST_P(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedBlocked) { |
| 8402 AlternateProtocolPortRestrictedBlocked) { | |
| 8403 // Ensure that we're not allowed to redirect traffic via an alternate | 8464 // Ensure that we're not allowed to redirect traffic via an alternate |
| 8404 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8465 // protocol to an unrestricted (port >= 1024) when the original traffic was |
| 8405 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8466 // on a restricted port (port < 1024). Ensure that we can redirect in all |
| 8406 // other cases. | 8467 // other cases. |
| 8407 HttpStreamFactory::set_use_alternate_protocols(true); | 8468 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8408 | 8469 |
| 8409 HttpRequestInfo restricted_port_request; | 8470 HttpRequestInfo restricted_port_request; |
| 8410 restricted_port_request.method = "GET"; | 8471 restricted_port_request.method = "GET"; |
| 8411 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8472 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
| 8412 restricted_port_request.load_flags = 0; | 8473 restricted_port_request.load_flags = 0; |
| 8413 | 8474 |
| 8414 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8475 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8415 StaticSocketDataProvider first_data; | 8476 StaticSocketDataProvider first_data; |
| 8416 first_data.set_connect_data(mock_connect); | 8477 first_data.set_connect_data(mock_connect); |
| 8417 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8478 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8418 | 8479 |
| 8419 MockRead data_reads[] = { | 8480 MockRead data_reads[] = { |
| 8420 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8481 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8421 MockRead("hello world"), | 8482 MockRead(ASYNC, OK), |
| 8422 MockRead(ASYNC, OK), | |
| 8423 }; | 8483 }; |
| 8424 StaticSocketDataProvider second_data( | 8484 StaticSocketDataProvider second_data( |
| 8425 data_reads, arraysize(data_reads), NULL, 0); | 8485 data_reads, arraysize(data_reads), NULL, 0); |
| 8426 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8486 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8427 | 8487 |
| 8428 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8488 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8429 | 8489 |
| 8430 base::WeakPtr<HttpServerProperties> http_server_properties = | 8490 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8431 session->http_server_properties(); | 8491 session->http_server_properties(); |
| 8432 const int kUnrestrictedAlternatePort = 1024; | 8492 const int kUnrestrictedAlternatePort = 1024; |
| 8433 http_server_properties->SetAlternateProtocol( | 8493 http_server_properties->SetAlternateProtocol( |
| 8434 HostPortPair::FromURL(restricted_port_request.url), | 8494 HostPortPair::FromURL(restricted_port_request.url), |
| 8435 kUnrestrictedAlternatePort, | 8495 kUnrestrictedAlternatePort, |
| 8436 AlternateProtocolFromNextProto(GetParam())); | 8496 AlternateProtocolFromNextProto(GetParam())); |
| 8437 | 8497 |
| 8438 scoped_ptr<HttpTransaction> trans( | 8498 scoped_ptr<HttpTransaction> trans( |
| 8439 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8499 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8440 TestCompletionCallback callback; | 8500 TestCompletionCallback callback; |
| 8441 | 8501 |
| 8442 int rv = trans->Start( | 8502 int rv = trans->Start( |
| 8443 &restricted_port_request, | 8503 &restricted_port_request, callback.callback(), BoundNetLog()); |
| 8444 callback.callback(), BoundNetLog()); | |
| 8445 EXPECT_EQ(ERR_IO_PENDING, rv); | 8504 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8446 // Invalid change to unrestricted port should fail. | 8505 // Invalid change to unrestricted port should fail. |
| 8447 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); | 8506 EXPECT_EQ(ERR_CONNECTION_REFUSED, callback.WaitForResult()); |
| 8448 } | 8507 } |
| 8449 | 8508 |
| 8450 TEST_P(HttpNetworkTransactionTest, | 8509 TEST_P(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedPermitted) { |
| 8451 AlternateProtocolPortRestrictedPermitted) { | |
| 8452 // Ensure that we're allowed to redirect traffic via an alternate | 8510 // Ensure that we're allowed to redirect traffic via an alternate |
| 8453 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8511 // protocol to an unrestricted (port >= 1024) when the original traffic was |
| 8454 // on a restricted port (port < 1024) if we set | 8512 // on a restricted port (port < 1024) if we set |
| 8455 // enable_user_alternate_protocol_ports. | 8513 // enable_user_alternate_protocol_ports. |
| 8456 | 8514 |
| 8457 HttpStreamFactory::set_use_alternate_protocols(true); | 8515 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8458 session_deps_.enable_user_alternate_protocol_ports = true; | 8516 session_deps_.enable_user_alternate_protocol_ports = true; |
| 8459 | 8517 |
| 8460 HttpRequestInfo restricted_port_request; | 8518 HttpRequestInfo restricted_port_request; |
| 8461 restricted_port_request.method = "GET"; | 8519 restricted_port_request.method = "GET"; |
| 8462 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8520 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
| 8463 restricted_port_request.load_flags = 0; | 8521 restricted_port_request.load_flags = 0; |
| 8464 | 8522 |
| 8465 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8523 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8466 StaticSocketDataProvider first_data; | 8524 StaticSocketDataProvider first_data; |
| 8467 first_data.set_connect_data(mock_connect); | 8525 first_data.set_connect_data(mock_connect); |
| 8468 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8526 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8469 | 8527 |
| 8470 MockRead data_reads[] = { | 8528 MockRead data_reads[] = { |
| 8471 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8529 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8472 MockRead("hello world"), | 8530 MockRead(ASYNC, OK), |
| 8473 MockRead(ASYNC, OK), | |
| 8474 }; | 8531 }; |
| 8475 StaticSocketDataProvider second_data( | 8532 StaticSocketDataProvider second_data( |
| 8476 data_reads, arraysize(data_reads), NULL, 0); | 8533 data_reads, arraysize(data_reads), NULL, 0); |
| 8477 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8534 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8478 | 8535 |
| 8479 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8536 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8480 | 8537 |
| 8481 base::WeakPtr<HttpServerProperties> http_server_properties = | 8538 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8482 session->http_server_properties(); | 8539 session->http_server_properties(); |
| 8483 const int kUnrestrictedAlternatePort = 1024; | 8540 const int kUnrestrictedAlternatePort = 1024; |
| 8484 http_server_properties->SetAlternateProtocol( | 8541 http_server_properties->SetAlternateProtocol( |
| 8485 HostPortPair::FromURL(restricted_port_request.url), | 8542 HostPortPair::FromURL(restricted_port_request.url), |
| 8486 kUnrestrictedAlternatePort, | 8543 kUnrestrictedAlternatePort, |
| 8487 AlternateProtocolFromNextProto(GetParam())); | 8544 AlternateProtocolFromNextProto(GetParam())); |
| 8488 | 8545 |
| 8489 scoped_ptr<HttpTransaction> trans( | 8546 scoped_ptr<HttpTransaction> trans( |
| 8490 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8547 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8491 TestCompletionCallback callback; | 8548 TestCompletionCallback callback; |
| 8492 | 8549 |
| 8493 EXPECT_EQ(ERR_IO_PENDING, trans->Start( | 8550 EXPECT_EQ(ERR_IO_PENDING, |
| 8494 &restricted_port_request, | 8551 trans->Start( |
| 8495 callback.callback(), BoundNetLog())); | 8552 &restricted_port_request, callback.callback(), BoundNetLog())); |
| 8496 // Change to unrestricted port should succeed. | 8553 // Change to unrestricted port should succeed. |
| 8497 EXPECT_EQ(OK, callback.WaitForResult()); | 8554 EXPECT_EQ(OK, callback.WaitForResult()); |
| 8498 } | 8555 } |
| 8499 | 8556 |
| 8500 TEST_P(HttpNetworkTransactionTest, | 8557 TEST_P(HttpNetworkTransactionTest, AlternateProtocolPortRestrictedAllowed) { |
| 8501 AlternateProtocolPortRestrictedAllowed) { | |
| 8502 // Ensure that we're not allowed to redirect traffic via an alternate | 8558 // Ensure that we're not allowed to redirect traffic via an alternate |
| 8503 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8559 // protocol to an unrestricted (port >= 1024) when the original traffic was |
| 8504 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8560 // on a restricted port (port < 1024). Ensure that we can redirect in all |
| 8505 // other cases. | 8561 // other cases. |
| 8506 HttpStreamFactory::set_use_alternate_protocols(true); | 8562 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8507 | 8563 |
| 8508 HttpRequestInfo restricted_port_request; | 8564 HttpRequestInfo restricted_port_request; |
| 8509 restricted_port_request.method = "GET"; | 8565 restricted_port_request.method = "GET"; |
| 8510 restricted_port_request.url = GURL("http://www.google.com:1023/"); | 8566 restricted_port_request.url = GURL("http://www.google.com:1023/"); |
| 8511 restricted_port_request.load_flags = 0; | 8567 restricted_port_request.load_flags = 0; |
| 8512 | 8568 |
| 8513 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8569 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8514 StaticSocketDataProvider first_data; | 8570 StaticSocketDataProvider first_data; |
| 8515 first_data.set_connect_data(mock_connect); | 8571 first_data.set_connect_data(mock_connect); |
| 8516 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8572 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8517 | 8573 |
| 8518 MockRead data_reads[] = { | 8574 MockRead data_reads[] = { |
| 8519 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8575 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8520 MockRead("hello world"), | 8576 MockRead(ASYNC, OK), |
| 8521 MockRead(ASYNC, OK), | |
| 8522 }; | 8577 }; |
| 8523 StaticSocketDataProvider second_data( | 8578 StaticSocketDataProvider second_data( |
| 8524 data_reads, arraysize(data_reads), NULL, 0); | 8579 data_reads, arraysize(data_reads), NULL, 0); |
| 8525 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8580 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8526 | 8581 |
| 8527 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8582 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8528 | 8583 |
| 8529 base::WeakPtr<HttpServerProperties> http_server_properties = | 8584 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8530 session->http_server_properties(); | 8585 session->http_server_properties(); |
| 8531 const int kRestrictedAlternatePort = 80; | 8586 const int kRestrictedAlternatePort = 80; |
| 8532 http_server_properties->SetAlternateProtocol( | 8587 http_server_properties->SetAlternateProtocol( |
| 8533 HostPortPair::FromURL(restricted_port_request.url), | 8588 HostPortPair::FromURL(restricted_port_request.url), |
| 8534 kRestrictedAlternatePort, | 8589 kRestrictedAlternatePort, |
| 8535 AlternateProtocolFromNextProto(GetParam())); | 8590 AlternateProtocolFromNextProto(GetParam())); |
| 8536 | 8591 |
| 8537 scoped_ptr<HttpTransaction> trans( | 8592 scoped_ptr<HttpTransaction> trans( |
| 8538 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8593 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8539 TestCompletionCallback callback; | 8594 TestCompletionCallback callback; |
| 8540 | 8595 |
| 8541 int rv = trans->Start( | 8596 int rv = trans->Start( |
| 8542 &restricted_port_request, | 8597 &restricted_port_request, callback.callback(), BoundNetLog()); |
| 8543 callback.callback(), BoundNetLog()); | |
| 8544 EXPECT_EQ(ERR_IO_PENDING, rv); | 8598 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8545 // Valid change to restricted port should pass. | 8599 // Valid change to restricted port should pass. |
| 8546 EXPECT_EQ(OK, callback.WaitForResult()); | 8600 EXPECT_EQ(OK, callback.WaitForResult()); |
| 8547 } | 8601 } |
| 8548 | 8602 |
| 8549 TEST_P(HttpNetworkTransactionTest, | 8603 TEST_P(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed1) { |
| 8550 AlternateProtocolPortUnrestrictedAllowed1) { | |
| 8551 // Ensure that we're not allowed to redirect traffic via an alternate | 8604 // Ensure that we're not allowed to redirect traffic via an alternate |
| 8552 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8605 // protocol to an unrestricted (port >= 1024) when the original traffic was |
| 8553 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8606 // on a restricted port (port < 1024). Ensure that we can redirect in all |
| 8554 // other cases. | 8607 // other cases. |
| 8555 HttpStreamFactory::set_use_alternate_protocols(true); | 8608 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8556 | 8609 |
| 8557 HttpRequestInfo unrestricted_port_request; | 8610 HttpRequestInfo unrestricted_port_request; |
| 8558 unrestricted_port_request.method = "GET"; | 8611 unrestricted_port_request.method = "GET"; |
| 8559 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8612 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
| 8560 unrestricted_port_request.load_flags = 0; | 8613 unrestricted_port_request.load_flags = 0; |
| 8561 | 8614 |
| 8562 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8615 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8563 StaticSocketDataProvider first_data; | 8616 StaticSocketDataProvider first_data; |
| 8564 first_data.set_connect_data(mock_connect); | 8617 first_data.set_connect_data(mock_connect); |
| 8565 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8618 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8566 | 8619 |
| 8567 MockRead data_reads[] = { | 8620 MockRead data_reads[] = { |
| 8568 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8621 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8569 MockRead("hello world"), | 8622 MockRead(ASYNC, OK), |
| 8570 MockRead(ASYNC, OK), | |
| 8571 }; | 8623 }; |
| 8572 StaticSocketDataProvider second_data( | 8624 StaticSocketDataProvider second_data( |
| 8573 data_reads, arraysize(data_reads), NULL, 0); | 8625 data_reads, arraysize(data_reads), NULL, 0); |
| 8574 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8626 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8575 | 8627 |
| 8576 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8628 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8577 | 8629 |
| 8578 base::WeakPtr<HttpServerProperties> http_server_properties = | 8630 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8579 session->http_server_properties(); | 8631 session->http_server_properties(); |
| 8580 const int kRestrictedAlternatePort = 80; | 8632 const int kRestrictedAlternatePort = 80; |
| 8581 http_server_properties->SetAlternateProtocol( | 8633 http_server_properties->SetAlternateProtocol( |
| 8582 HostPortPair::FromURL(unrestricted_port_request.url), | 8634 HostPortPair::FromURL(unrestricted_port_request.url), |
| 8583 kRestrictedAlternatePort, | 8635 kRestrictedAlternatePort, |
| 8584 AlternateProtocolFromNextProto(GetParam())); | 8636 AlternateProtocolFromNextProto(GetParam())); |
| 8585 | 8637 |
| 8586 scoped_ptr<HttpTransaction> trans( | 8638 scoped_ptr<HttpTransaction> trans( |
| 8587 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8639 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8588 TestCompletionCallback callback; | 8640 TestCompletionCallback callback; |
| 8589 | 8641 |
| 8590 int rv = trans->Start( | 8642 int rv = trans->Start( |
| 8591 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 8643 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 8592 EXPECT_EQ(ERR_IO_PENDING, rv); | 8644 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8593 // Valid change to restricted port should pass. | 8645 // Valid change to restricted port should pass. |
| 8594 EXPECT_EQ(OK, callback.WaitForResult()); | 8646 EXPECT_EQ(OK, callback.WaitForResult()); |
| 8595 } | 8647 } |
| 8596 | 8648 |
| 8597 TEST_P(HttpNetworkTransactionTest, | 8649 TEST_P(HttpNetworkTransactionTest, AlternateProtocolPortUnrestrictedAllowed2) { |
| 8598 AlternateProtocolPortUnrestrictedAllowed2) { | |
| 8599 // Ensure that we're not allowed to redirect traffic via an alternate | 8650 // Ensure that we're not allowed to redirect traffic via an alternate |
| 8600 // protocol to an unrestricted (port >= 1024) when the original traffic was | 8651 // protocol to an unrestricted (port >= 1024) when the original traffic was |
| 8601 // on a restricted port (port < 1024). Ensure that we can redirect in all | 8652 // on a restricted port (port < 1024). Ensure that we can redirect in all |
| 8602 // other cases. | 8653 // other cases. |
| 8603 HttpStreamFactory::set_use_alternate_protocols(true); | 8654 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8604 | 8655 |
| 8605 HttpRequestInfo unrestricted_port_request; | 8656 HttpRequestInfo unrestricted_port_request; |
| 8606 unrestricted_port_request.method = "GET"; | 8657 unrestricted_port_request.method = "GET"; |
| 8607 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); | 8658 unrestricted_port_request.url = GURL("http://www.google.com:1024/"); |
| 8608 unrestricted_port_request.load_flags = 0; | 8659 unrestricted_port_request.load_flags = 0; |
| 8609 | 8660 |
| 8610 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); | 8661 MockConnect mock_connect(ASYNC, ERR_CONNECTION_REFUSED); |
| 8611 StaticSocketDataProvider first_data; | 8662 StaticSocketDataProvider first_data; |
| 8612 first_data.set_connect_data(mock_connect); | 8663 first_data.set_connect_data(mock_connect); |
| 8613 session_deps_.socket_factory->AddSocketDataProvider(&first_data); | 8664 session_deps_.socket_factory->AddSocketDataProvider(&first_data); |
| 8614 | 8665 |
| 8615 MockRead data_reads[] = { | 8666 MockRead data_reads[] = { |
| 8616 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8667 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8617 MockRead("hello world"), | 8668 MockRead(ASYNC, OK), |
| 8618 MockRead(ASYNC, OK), | |
| 8619 }; | 8669 }; |
| 8620 StaticSocketDataProvider second_data( | 8670 StaticSocketDataProvider second_data( |
| 8621 data_reads, arraysize(data_reads), NULL, 0); | 8671 data_reads, arraysize(data_reads), NULL, 0); |
| 8622 session_deps_.socket_factory->AddSocketDataProvider(&second_data); | 8672 session_deps_.socket_factory->AddSocketDataProvider(&second_data); |
| 8623 | 8673 |
| 8624 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8674 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8625 | 8675 |
| 8626 base::WeakPtr<HttpServerProperties> http_server_properties = | 8676 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8627 session->http_server_properties(); | 8677 session->http_server_properties(); |
| 8628 const int kUnrestrictedAlternatePort = 1024; | 8678 const int kUnrestrictedAlternatePort = 1024; |
| 8629 http_server_properties->SetAlternateProtocol( | 8679 http_server_properties->SetAlternateProtocol( |
| 8630 HostPortPair::FromURL(unrestricted_port_request.url), | 8680 HostPortPair::FromURL(unrestricted_port_request.url), |
| 8631 kUnrestrictedAlternatePort, | 8681 kUnrestrictedAlternatePort, |
| 8632 AlternateProtocolFromNextProto(GetParam())); | 8682 AlternateProtocolFromNextProto(GetParam())); |
| 8633 | 8683 |
| 8634 scoped_ptr<HttpTransaction> trans( | 8684 scoped_ptr<HttpTransaction> trans( |
| 8635 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 8685 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 8636 TestCompletionCallback callback; | 8686 TestCompletionCallback callback; |
| 8637 | 8687 |
| 8638 int rv = trans->Start( | 8688 int rv = trans->Start( |
| 8639 &unrestricted_port_request, callback.callback(), BoundNetLog()); | 8689 &unrestricted_port_request, callback.callback(), BoundNetLog()); |
| 8640 EXPECT_EQ(ERR_IO_PENDING, rv); | 8690 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 8641 // Valid change to an unrestricted port should pass. | 8691 // Valid change to an unrestricted port should pass. |
| 8642 EXPECT_EQ(OK, callback.WaitForResult()); | 8692 EXPECT_EQ(OK, callback.WaitForResult()); |
| 8643 } | 8693 } |
| 8644 | 8694 |
| 8645 TEST_P(HttpNetworkTransactionTest, | 8695 TEST_P(HttpNetworkTransactionTest, AlternateProtocolUnsafeBlocked) { |
| 8646 AlternateProtocolUnsafeBlocked) { | |
| 8647 // Ensure that we're not allowed to redirect traffic via an alternate | 8696 // Ensure that we're not allowed to redirect traffic via an alternate |
| 8648 // protocol to an unsafe port, and that we resume the second | 8697 // protocol to an unsafe port, and that we resume the second |
| 8649 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. | 8698 // HttpStreamFactoryImpl::Job once the alternate protocol request fails. |
| 8650 HttpStreamFactory::set_use_alternate_protocols(true); | 8699 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8651 | 8700 |
| 8652 HttpRequestInfo request; | 8701 HttpRequestInfo request; |
| 8653 request.method = "GET"; | 8702 request.method = "GET"; |
| 8654 request.url = GURL("http://www.google.com/"); | 8703 request.url = GURL("http://www.google.com/"); |
| 8655 request.load_flags = 0; | 8704 request.load_flags = 0; |
| 8656 | 8705 |
| 8657 // The alternate protocol request will error out before we attempt to connect, | 8706 // The alternate protocol request will error out before we attempt to connect, |
| 8658 // so only the standard HTTP request will try to connect. | 8707 // so only the standard HTTP request will try to connect. |
| 8659 MockRead data_reads[] = { | 8708 MockRead data_reads[] = { |
| 8660 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 8709 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
| 8661 MockRead("hello world"), | 8710 MockRead(ASYNC, OK), |
| 8662 MockRead(ASYNC, OK), | |
| 8663 }; | 8711 }; |
| 8664 StaticSocketDataProvider data( | 8712 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
| 8665 data_reads, arraysize(data_reads), NULL, 0); | |
| 8666 session_deps_.socket_factory->AddSocketDataProvider(&data); | 8713 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 8667 | 8714 |
| 8668 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8715 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8669 | 8716 |
| 8670 base::WeakPtr<HttpServerProperties> http_server_properties = | 8717 base::WeakPtr<HttpServerProperties> http_server_properties = |
| 8671 session->http_server_properties(); | 8718 session->http_server_properties(); |
| 8672 const int kUnsafePort = 7; | 8719 const int kUnsafePort = 7; |
| 8673 http_server_properties->SetAlternateProtocol( | 8720 http_server_properties->SetAlternateProtocol( |
| 8674 HostPortPair::FromURL(request.url), | 8721 HostPortPair::FromURL(request.url), |
| 8675 kUnsafePort, | 8722 kUnsafePort, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 8699 | 8746 |
| 8700 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { | 8747 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { |
| 8701 HttpStreamFactory::set_use_alternate_protocols(true); | 8748 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8702 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8749 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 8703 | 8750 |
| 8704 HttpRequestInfo request; | 8751 HttpRequestInfo request; |
| 8705 request.method = "GET"; | 8752 request.method = "GET"; |
| 8706 request.url = GURL("http://www.google.com/"); | 8753 request.url = GURL("http://www.google.com/"); |
| 8707 request.load_flags = 0; | 8754 request.load_flags = 0; |
| 8708 | 8755 |
| 8709 std::string alternate_protocol_http_header = | 8756 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 8710 GetAlternateProtocolHttpHeader(); | |
| 8711 | 8757 |
| 8712 MockRead data_reads[] = { | 8758 MockRead data_reads[] = { |
| 8713 MockRead("HTTP/1.1 200 OK\r\n"), | 8759 MockRead("HTTP/1.1 200 OK\r\n"), |
| 8714 MockRead(alternate_protocol_http_header.c_str()), | 8760 MockRead(alternate_protocol_http_header.c_str()), MockRead("hello world"), |
| 8715 MockRead("hello world"), | 8761 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 8716 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8762 MockRead(ASYNC, OK)}; |
| 8717 MockRead(ASYNC, OK) | |
| 8718 }; | |
| 8719 | 8763 |
| 8720 StaticSocketDataProvider first_transaction( | 8764 StaticSocketDataProvider first_transaction( |
| 8721 data_reads, arraysize(data_reads), NULL, 0); | 8765 data_reads, arraysize(data_reads), NULL, 0); |
| 8722 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8766 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 8723 | 8767 |
| 8724 SSLSocketDataProvider ssl(ASYNC, OK); | 8768 SSLSocketDataProvider ssl(ASYNC, OK); |
| 8725 ssl.SetNextProto(GetParam()); | 8769 ssl.SetNextProto(GetParam()); |
| 8726 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8770 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 8727 | 8771 |
| 8728 scoped_ptr<SpdyFrame> req( | 8772 scoped_ptr<SpdyFrame> req( |
| 8729 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8773 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 8730 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 8774 MockWrite spdy_writes[] = {CreateMockWrite(*req)}; |
| 8731 | 8775 |
| 8732 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 8776 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 8733 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 8777 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 8734 MockRead spdy_reads[] = { | 8778 MockRead spdy_reads[] = { |
| 8735 CreateMockRead(*resp), | 8779 CreateMockRead(*resp), CreateMockRead(*data), MockRead(ASYNC, 0, 0), |
| 8736 CreateMockRead(*data), | |
| 8737 MockRead(ASYNC, 0, 0), | |
| 8738 }; | 8780 }; |
| 8739 | 8781 |
| 8740 DelayedSocketData spdy_data( | 8782 DelayedSocketData spdy_data( |
| 8741 1, // wait for one write to finish before reading. | 8783 1, // wait for one write to finish before reading. |
| 8742 spdy_reads, arraysize(spdy_reads), | 8784 spdy_reads, |
| 8743 spdy_writes, arraysize(spdy_writes)); | 8785 arraysize(spdy_reads), |
| 8786 spdy_writes, |
| 8787 arraysize(spdy_writes)); |
| 8744 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8788 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 8745 | 8789 |
| 8746 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8790 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 8747 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 8791 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
| 8748 NULL, 0, NULL, 0); | 8792 NULL, 0, NULL, 0); |
| 8749 hanging_non_alternate_protocol_socket.set_connect_data( | 8793 hanging_non_alternate_protocol_socket.set_connect_data( |
| 8750 never_finishing_connect); | 8794 never_finishing_connect); |
| 8751 session_deps_.socket_factory->AddSocketDataProvider( | 8795 session_deps_.socket_factory->AddSocketDataProvider( |
| 8752 &hanging_non_alternate_protocol_socket); | 8796 &hanging_non_alternate_protocol_socket); |
| 8753 | 8797 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8789 | 8833 |
| 8790 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { | 8834 TEST_P(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { |
| 8791 HttpStreamFactory::set_use_alternate_protocols(true); | 8835 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8792 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8836 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 8793 | 8837 |
| 8794 HttpRequestInfo request; | 8838 HttpRequestInfo request; |
| 8795 request.method = "GET"; | 8839 request.method = "GET"; |
| 8796 request.url = GURL("http://www.google.com/"); | 8840 request.url = GURL("http://www.google.com/"); |
| 8797 request.load_flags = 0; | 8841 request.load_flags = 0; |
| 8798 | 8842 |
| 8799 std::string alternate_protocol_http_header = | 8843 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 8800 GetAlternateProtocolHttpHeader(); | |
| 8801 | 8844 |
| 8802 MockRead data_reads[] = { | 8845 MockRead data_reads[] = { |
| 8803 MockRead("HTTP/1.1 200 OK\r\n"), | 8846 MockRead("HTTP/1.1 200 OK\r\n"), |
| 8804 MockRead(alternate_protocol_http_header.c_str()), | 8847 MockRead(alternate_protocol_http_header.c_str()), |
| 8805 MockRead("hello world"), | 8848 MockRead("hello world"), |
| 8806 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8849 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 8807 MockRead(ASYNC, OK), | 8850 MockRead(ASYNC, OK), |
| 8808 }; | 8851 }; |
| 8809 | 8852 |
| 8810 StaticSocketDataProvider first_transaction( | 8853 StaticSocketDataProvider first_transaction( |
| 8811 data_reads, arraysize(data_reads), NULL, 0); | 8854 data_reads, arraysize(data_reads), NULL, 0); |
| 8812 // Socket 1 is the HTTP transaction with the Alternate-Protocol header. | 8855 // Socket 1 is the HTTP transaction with the Alternate-Protocol header. |
| 8813 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8856 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 8814 | 8857 |
| 8815 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8858 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 8816 StaticSocketDataProvider hanging_socket( | 8859 StaticSocketDataProvider hanging_socket(NULL, 0, NULL, 0); |
| 8817 NULL, 0, NULL, 0); | |
| 8818 hanging_socket.set_connect_data(never_finishing_connect); | 8860 hanging_socket.set_connect_data(never_finishing_connect); |
| 8819 // Socket 2 and 3 are the hanging Alternate-Protocol and | 8861 // Socket 2 and 3 are the hanging Alternate-Protocol and |
| 8820 // non-Alternate-Protocol jobs from the 2nd transaction. | 8862 // non-Alternate-Protocol jobs from the 2nd transaction. |
| 8821 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); | 8863 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
| 8822 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); | 8864 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
| 8823 | 8865 |
| 8824 SSLSocketDataProvider ssl(ASYNC, OK); | 8866 SSLSocketDataProvider ssl(ASYNC, OK); |
| 8825 ssl.SetNextProto(GetParam()); | 8867 ssl.SetNextProto(GetParam()); |
| 8826 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8868 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 8827 | 8869 |
| 8828 scoped_ptr<SpdyFrame> req1( | 8870 scoped_ptr<SpdyFrame> req1( |
| 8829 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 8871 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 8830 scoped_ptr<SpdyFrame> req2( | 8872 scoped_ptr<SpdyFrame> req2( |
| 8831 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); | 8873 spdy_util_.ConstructSpdyGet(NULL, 0, false, 3, LOWEST, true)); |
| 8832 MockWrite spdy_writes[] = { | 8874 MockWrite spdy_writes[] = { |
| 8833 CreateMockWrite(*req1), | 8875 CreateMockWrite(*req1), CreateMockWrite(*req2), |
| 8834 CreateMockWrite(*req2), | |
| 8835 }; | 8876 }; |
| 8836 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 8877 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 8837 scoped_ptr<SpdyFrame> data1(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 8878 scoped_ptr<SpdyFrame> data1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 8838 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 8879 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 8839 scoped_ptr<SpdyFrame> data2(spdy_util_.ConstructSpdyBodyFrame(3, true)); | 8880 scoped_ptr<SpdyFrame> data2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 8840 MockRead spdy_reads[] = { | 8881 MockRead spdy_reads[] = { |
| 8841 CreateMockRead(*resp1), | 8882 CreateMockRead(*resp1), CreateMockRead(*data1), CreateMockRead(*resp2), |
| 8842 CreateMockRead(*data1), | 8883 CreateMockRead(*data2), MockRead(ASYNC, 0, 0), |
| 8843 CreateMockRead(*resp2), | |
| 8844 CreateMockRead(*data2), | |
| 8845 MockRead(ASYNC, 0, 0), | |
| 8846 }; | 8884 }; |
| 8847 | 8885 |
| 8848 DelayedSocketData spdy_data( | 8886 DelayedSocketData spdy_data(2, // wait for writes to finish before reading. |
| 8849 2, // wait for writes to finish before reading. | 8887 spdy_reads, |
| 8850 spdy_reads, arraysize(spdy_reads), | 8888 arraysize(spdy_reads), |
| 8851 spdy_writes, arraysize(spdy_writes)); | 8889 spdy_writes, |
| 8890 arraysize(spdy_writes)); |
| 8852 // Socket 4 is the successful Alternate-Protocol for transaction 3. | 8891 // Socket 4 is the successful Alternate-Protocol for transaction 3. |
| 8853 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 8892 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 8854 | 8893 |
| 8855 // Socket 5 is the unsuccessful non-Alternate-Protocol for transaction 3. | 8894 // Socket 5 is the unsuccessful non-Alternate-Protocol for transaction 3. |
| 8856 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); | 8895 session_deps_.socket_factory->AddSocketDataProvider(&hanging_socket); |
| 8857 | 8896 |
| 8858 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8897 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8859 TestCompletionCallback callback1; | 8898 TestCompletionCallback callback1; |
| 8860 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 8899 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 8861 | 8900 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8906 | 8945 |
| 8907 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { | 8946 TEST_P(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { |
| 8908 HttpStreamFactory::set_use_alternate_protocols(true); | 8947 HttpStreamFactory::set_use_alternate_protocols(true); |
| 8909 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 8948 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 8910 | 8949 |
| 8911 HttpRequestInfo request; | 8950 HttpRequestInfo request; |
| 8912 request.method = "GET"; | 8951 request.method = "GET"; |
| 8913 request.url = GURL("http://www.google.com/"); | 8952 request.url = GURL("http://www.google.com/"); |
| 8914 request.load_flags = 0; | 8953 request.load_flags = 0; |
| 8915 | 8954 |
| 8916 std::string alternate_protocol_http_header = | 8955 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 8917 GetAlternateProtocolHttpHeader(); | |
| 8918 | 8956 |
| 8919 MockRead data_reads[] = { | 8957 MockRead data_reads[] = { |
| 8920 MockRead("HTTP/1.1 200 OK\r\n"), | 8958 MockRead("HTTP/1.1 200 OK\r\n"), |
| 8921 MockRead(alternate_protocol_http_header.c_str()), | 8959 MockRead(alternate_protocol_http_header.c_str()), |
| 8922 MockRead("hello world"), | 8960 MockRead("hello world"), |
| 8923 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 8961 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 8924 MockRead(ASYNC, OK), | 8962 MockRead(ASYNC, OK), |
| 8925 }; | 8963 }; |
| 8926 | 8964 |
| 8927 StaticSocketDataProvider first_transaction( | 8965 StaticSocketDataProvider first_transaction( |
| 8928 data_reads, arraysize(data_reads), NULL, 0); | 8966 data_reads, arraysize(data_reads), NULL, 0); |
| 8929 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8967 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 8930 | 8968 |
| 8931 SSLSocketDataProvider ssl(ASYNC, OK); | 8969 SSLSocketDataProvider ssl(ASYNC, OK); |
| 8932 ssl.SetNextProto(GetParam()); | 8970 ssl.SetNextProto(GetParam()); |
| 8933 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 8971 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 8934 | 8972 |
| 8935 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 8973 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 8936 StaticSocketDataProvider hanging_alternate_protocol_socket( | 8974 StaticSocketDataProvider hanging_alternate_protocol_socket(NULL, 0, NULL, 0); |
| 8937 NULL, 0, NULL, 0); | 8975 hanging_alternate_protocol_socket.set_connect_data(never_finishing_connect); |
| 8938 hanging_alternate_protocol_socket.set_connect_data( | |
| 8939 never_finishing_connect); | |
| 8940 session_deps_.socket_factory->AddSocketDataProvider( | 8976 session_deps_.socket_factory->AddSocketDataProvider( |
| 8941 &hanging_alternate_protocol_socket); | 8977 &hanging_alternate_protocol_socket); |
| 8942 | 8978 |
| 8943 // 2nd request is just a copy of the first one, over HTTP again. | 8979 // 2nd request is just a copy of the first one, over HTTP again. |
| 8944 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 8980 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 8945 | 8981 |
| 8946 TestCompletionCallback callback; | 8982 TestCompletionCallback callback; |
| 8947 | 8983 |
| 8948 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 8984 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 8949 scoped_ptr<HttpTransaction> trans( | 8985 scoped_ptr<HttpTransaction> trans( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8989 const CompletionCallback& callback, | 9025 const CompletionCallback& callback, |
| 8990 RequestHandle* request, | 9026 RequestHandle* request, |
| 8991 const BoundNetLog& net_log) OVERRIDE { | 9027 const BoundNetLog& net_log) OVERRIDE { |
| 8992 ProxyServer proxy_server(ProxyServer::SCHEME_HTTP, | 9028 ProxyServer proxy_server(ProxyServer::SCHEME_HTTP, |
| 8993 HostPortPair("myproxy", 80)); | 9029 HostPortPair("myproxy", 80)); |
| 8994 results->UseProxyServer(proxy_server); | 9030 results->UseProxyServer(proxy_server); |
| 8995 resolved_.push_back(url); | 9031 resolved_.push_back(url); |
| 8996 return OK; | 9032 return OK; |
| 8997 } | 9033 } |
| 8998 | 9034 |
| 8999 virtual void CancelRequest(RequestHandle request) OVERRIDE { | 9035 virtual void CancelRequest(RequestHandle request) OVERRIDE { NOTREACHED(); } |
| 9000 NOTREACHED(); | |
| 9001 } | |
| 9002 | 9036 |
| 9003 virtual LoadState GetLoadState(RequestHandle request) const OVERRIDE { | 9037 virtual LoadState GetLoadState(RequestHandle request) const OVERRIDE { |
| 9004 NOTREACHED(); | 9038 NOTREACHED(); |
| 9005 return LOAD_STATE_IDLE; | 9039 return LOAD_STATE_IDLE; |
| 9006 } | 9040 } |
| 9007 | 9041 |
| 9008 virtual void CancelSetPacScript() OVERRIDE { | 9042 virtual void CancelSetPacScript() OVERRIDE { NOTREACHED(); } |
| 9009 NOTREACHED(); | |
| 9010 } | |
| 9011 | 9043 |
| 9012 virtual int SetPacScript(const scoped_refptr<ProxyResolverScriptData>&, | 9044 virtual int SetPacScript(const scoped_refptr<ProxyResolverScriptData>&, |
| 9013 const CompletionCallback& /*callback*/) OVERRIDE { | 9045 const CompletionCallback& /*callback*/) OVERRIDE { |
| 9014 return OK; | 9046 return OK; |
| 9015 } | 9047 } |
| 9016 | 9048 |
| 9017 const std::vector<GURL>& resolved() const { return resolved_; } | 9049 const std::vector<GURL>& resolved() const { return resolved_; } |
| 9018 | 9050 |
| 9019 private: | 9051 private: |
| 9020 std::vector<GURL> resolved_; | 9052 std::vector<GURL> resolved_; |
| 9021 | 9053 |
| 9022 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); | 9054 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); |
| 9023 }; | 9055 }; |
| 9024 | 9056 |
| 9025 TEST_P(HttpNetworkTransactionTest, | 9057 TEST_P(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) { |
| 9026 UseAlternateProtocolForTunneledNpnSpdy) { | |
| 9027 HttpStreamFactory::set_use_alternate_protocols(true); | 9058 HttpStreamFactory::set_use_alternate_protocols(true); |
| 9028 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9059 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 9029 | 9060 |
| 9030 ProxyConfig proxy_config; | 9061 ProxyConfig proxy_config; |
| 9031 proxy_config.set_auto_detect(true); | 9062 proxy_config.set_auto_detect(true); |
| 9032 proxy_config.set_pac_url(GURL("http://fooproxyurl")); | 9063 proxy_config.set_pac_url(GURL("http://fooproxyurl")); |
| 9033 | 9064 |
| 9034 CapturingProxyResolver* capturing_proxy_resolver = | 9065 CapturingProxyResolver* capturing_proxy_resolver = |
| 9035 new CapturingProxyResolver(); | 9066 new CapturingProxyResolver(); |
| 9036 session_deps_.proxy_service.reset(new ProxyService( | 9067 session_deps_.proxy_service.reset( |
| 9037 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, | 9068 new ProxyService(new ProxyConfigServiceFixed(proxy_config), |
| 9038 NULL)); | 9069 capturing_proxy_resolver, |
| 9070 NULL)); |
| 9039 CapturingNetLog net_log; | 9071 CapturingNetLog net_log; |
| 9040 session_deps_.net_log = &net_log; | 9072 session_deps_.net_log = &net_log; |
| 9041 | 9073 |
| 9042 HttpRequestInfo request; | 9074 HttpRequestInfo request; |
| 9043 request.method = "GET"; | 9075 request.method = "GET"; |
| 9044 request.url = GURL("http://www.google.com/"); | 9076 request.url = GURL("http://www.google.com/"); |
| 9045 request.load_flags = 0; | 9077 request.load_flags = 0; |
| 9046 | 9078 |
| 9047 std::string alternate_protocol_http_header = | 9079 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 9048 GetAlternateProtocolHttpHeader(); | |
| 9049 | 9080 |
| 9050 MockRead data_reads[] = { | 9081 MockRead data_reads[] = { |
| 9051 MockRead("HTTP/1.1 200 OK\r\n"), | 9082 MockRead("HTTP/1.1 200 OK\r\n"), |
| 9052 MockRead(alternate_protocol_http_header.c_str()), | 9083 MockRead(alternate_protocol_http_header.c_str()), |
| 9053 MockRead("hello world"), | 9084 MockRead("hello world"), |
| 9054 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 9085 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 9055 MockRead(ASYNC, OK), | 9086 MockRead(ASYNC, OK), |
| 9056 }; | 9087 }; |
| 9057 | 9088 |
| 9058 StaticSocketDataProvider first_transaction( | 9089 StaticSocketDataProvider first_transaction( |
| 9059 data_reads, arraysize(data_reads), NULL, 0); | 9090 data_reads, arraysize(data_reads), NULL, 0); |
| 9060 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 9091 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 9061 | 9092 |
| 9062 SSLSocketDataProvider ssl(ASYNC, OK); | 9093 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9063 ssl.SetNextProto(GetParam()); | 9094 ssl.SetNextProto(GetParam()); |
| 9064 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9095 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9065 | 9096 |
| 9066 scoped_ptr<SpdyFrame> req( | 9097 scoped_ptr<SpdyFrame> req( |
| 9067 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 9098 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 9068 MockWrite spdy_writes[] = { | 9099 MockWrite spdy_writes[] = { |
| 9069 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 9100 MockWrite( |
| 9070 "Host: www.google.com\r\n" | 9101 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 9071 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 | 9102 "Host: www.google.com\r\n" |
| 9072 CreateMockWrite(*req), // 3 | 9103 "Proxy-Connection: keep-alive\r\n\r\n"), // 0 |
| 9104 CreateMockWrite(*req), // 3 |
| 9073 }; | 9105 }; |
| 9074 | 9106 |
| 9075 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; | 9107 const char kCONNECTResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; |
| 9076 | 9108 |
| 9077 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 9109 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 9078 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 9110 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 9079 MockRead spdy_reads[] = { | 9111 MockRead spdy_reads[] = { |
| 9080 MockRead(ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 | 9112 MockRead( |
| 9081 CreateMockRead(*resp.get(), 4), // 2, 4 | 9113 ASYNC, kCONNECTResponse, arraysize(kCONNECTResponse) - 1, 1), // 1 |
| 9082 CreateMockRead(*data.get(), 4), // 5 | 9114 CreateMockRead(*resp.get(), 4), // 2, 4 |
| 9083 MockRead(ASYNC, 0, 0, 4), // 6 | 9115 CreateMockRead(*data.get(), 4), // 5 |
| 9116 MockRead(ASYNC, 0, 0, 4), // 6 |
| 9084 }; | 9117 }; |
| 9085 | 9118 |
| 9086 OrderedSocketData spdy_data( | 9119 OrderedSocketData spdy_data( |
| 9087 spdy_reads, arraysize(spdy_reads), | 9120 spdy_reads, arraysize(spdy_reads), spdy_writes, arraysize(spdy_writes)); |
| 9088 spdy_writes, arraysize(spdy_writes)); | |
| 9089 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 9121 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 9090 | 9122 |
| 9091 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 9123 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 9092 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 9124 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
| 9093 NULL, 0, NULL, 0); | 9125 NULL, 0, NULL, 0); |
| 9094 hanging_non_alternate_protocol_socket.set_connect_data( | 9126 hanging_non_alternate_protocol_socket.set_connect_data( |
| 9095 never_finishing_connect); | 9127 never_finishing_connect); |
| 9096 session_deps_.socket_factory->AddSocketDataProvider( | 9128 session_deps_.socket_factory->AddSocketDataProvider( |
| 9097 &hanging_non_alternate_protocol_socket); | 9129 &hanging_non_alternate_protocol_socket); |
| 9098 | 9130 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9147 TEST_P(HttpNetworkTransactionTest, | 9179 TEST_P(HttpNetworkTransactionTest, |
| 9148 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { | 9180 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { |
| 9149 HttpStreamFactory::set_use_alternate_protocols(true); | 9181 HttpStreamFactory::set_use_alternate_protocols(true); |
| 9150 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 9182 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 9151 | 9183 |
| 9152 HttpRequestInfo request; | 9184 HttpRequestInfo request; |
| 9153 request.method = "GET"; | 9185 request.method = "GET"; |
| 9154 request.url = GURL("http://www.google.com/"); | 9186 request.url = GURL("http://www.google.com/"); |
| 9155 request.load_flags = 0; | 9187 request.load_flags = 0; |
| 9156 | 9188 |
| 9157 std::string alternate_protocol_http_header = | 9189 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 9158 GetAlternateProtocolHttpHeader(); | |
| 9159 | 9190 |
| 9160 MockRead data_reads[] = { | 9191 MockRead data_reads[] = { |
| 9161 MockRead("HTTP/1.1 200 OK\r\n"), | 9192 MockRead("HTTP/1.1 200 OK\r\n"), |
| 9162 MockRead(alternate_protocol_http_header.c_str()), | 9193 MockRead(alternate_protocol_http_header.c_str()), MockRead("hello world"), |
| 9163 MockRead("hello world"), | 9194 MockRead(ASYNC, OK), |
| 9164 MockRead(ASYNC, OK), | |
| 9165 }; | 9195 }; |
| 9166 | 9196 |
| 9167 StaticSocketDataProvider first_transaction( | 9197 StaticSocketDataProvider first_transaction( |
| 9168 data_reads, arraysize(data_reads), NULL, 0); | 9198 data_reads, arraysize(data_reads), NULL, 0); |
| 9169 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); | 9199 session_deps_.socket_factory->AddSocketDataProvider(&first_transaction); |
| 9170 | 9200 |
| 9171 SSLSocketDataProvider ssl(ASYNC, OK); | 9201 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9172 ssl.SetNextProto(GetParam()); | 9202 ssl.SetNextProto(GetParam()); |
| 9173 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 9203 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9174 | 9204 |
| 9175 scoped_ptr<SpdyFrame> req( | 9205 scoped_ptr<SpdyFrame> req( |
| 9176 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 9206 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 9177 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 9207 MockWrite spdy_writes[] = {CreateMockWrite(*req)}; |
| 9178 | 9208 |
| 9179 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 9209 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 9180 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 9210 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 9181 MockRead spdy_reads[] = { | 9211 MockRead spdy_reads[] = { |
| 9182 CreateMockRead(*resp), | 9212 CreateMockRead(*resp), CreateMockRead(*data), MockRead(ASYNC, 0, 0), |
| 9183 CreateMockRead(*data), | |
| 9184 MockRead(ASYNC, 0, 0), | |
| 9185 }; | 9213 }; |
| 9186 | 9214 |
| 9187 DelayedSocketData spdy_data( | 9215 DelayedSocketData spdy_data( |
| 9188 1, // wait for one write to finish before reading. | 9216 1, // wait for one write to finish before reading. |
| 9189 spdy_reads, arraysize(spdy_reads), | 9217 spdy_reads, |
| 9190 spdy_writes, arraysize(spdy_writes)); | 9218 arraysize(spdy_reads), |
| 9219 spdy_writes, |
| 9220 arraysize(spdy_writes)); |
| 9191 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 9221 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 9192 | 9222 |
| 9193 TestCompletionCallback callback; | 9223 TestCompletionCallback callback; |
| 9194 | 9224 |
| 9195 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 9225 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9196 | 9226 |
| 9197 scoped_ptr<HttpTransaction> trans( | 9227 scoped_ptr<HttpTransaction> trans( |
| 9198 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9228 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9199 | 9229 |
| 9200 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9230 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9201 EXPECT_EQ(ERR_IO_PENDING, rv); | 9231 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9202 EXPECT_EQ(OK, callback.WaitForResult()); | 9232 EXPECT_EQ(OK, callback.WaitForResult()); |
| 9203 | 9233 |
| 9204 const HttpResponseInfo* response = trans->GetResponseInfo(); | 9234 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 9205 ASSERT_TRUE(response != NULL); | 9235 ASSERT_TRUE(response != NULL); |
| 9206 ASSERT_TRUE(response->headers.get() != NULL); | 9236 ASSERT_TRUE(response->headers.get() != NULL); |
| 9207 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 9237 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 9208 | 9238 |
| 9209 std::string response_data; | 9239 std::string response_data; |
| 9210 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 9240 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 9211 EXPECT_EQ("hello world", response_data); | 9241 EXPECT_EQ("hello world", response_data); |
| 9212 | 9242 |
| 9213 // Set up an initial SpdySession in the pool to reuse. | 9243 // Set up an initial SpdySession in the pool to reuse. |
| 9214 HostPortPair host_port_pair("www.google.com", 443); | 9244 HostPortPair host_port_pair("www.google.com", 443); |
| 9215 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 9245 SpdySessionKey key( |
| 9216 PRIVACY_MODE_DISABLED); | 9246 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 9217 base::WeakPtr<SpdySession> spdy_session = | 9247 base::WeakPtr<SpdySession> spdy_session = |
| 9218 CreateSecureSpdySession(session, key, BoundNetLog()); | 9248 CreateSecureSpdySession(session, key, BoundNetLog()); |
| 9219 | 9249 |
| 9220 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 9250 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9221 | 9251 |
| 9222 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 9252 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9223 EXPECT_EQ(ERR_IO_PENDING, rv); | 9253 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 9224 EXPECT_EQ(OK, callback.WaitForResult()); | 9254 EXPECT_EQ(OK, callback.WaitForResult()); |
| 9225 | 9255 |
| 9226 response = trans->GetResponseInfo(); | 9256 response = trans->GetResponseInfo(); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9299 "CONNECT www.example.com:443 HTTP/1.1\r\n" | 9329 "CONNECT www.example.com:443 HTTP/1.1\r\n" |
| 9300 "Host: www.example.com\r\n" | 9330 "Host: www.example.com\r\n" |
| 9301 "Proxy-Connection: keep-alive\r\n" | 9331 "Proxy-Connection: keep-alive\r\n" |
| 9302 "Proxy-Authorization: auth_token\r\n\r\n"); | 9332 "Proxy-Authorization: auth_token\r\n\r\n"); |
| 9303 | 9333 |
| 9304 const MockRead kSuccess( | 9334 const MockRead kSuccess( |
| 9305 "HTTP/1.1 200 OK\r\n" | 9335 "HTTP/1.1 200 OK\r\n" |
| 9306 "Content-Type: text/html; charset=iso-8859-1\r\n" | 9336 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 9307 "Content-Length: 3\r\n\r\n" | 9337 "Content-Length: 3\r\n\r\n" |
| 9308 "Yes"); | 9338 "Yes"); |
| 9309 const MockRead kFailure( | 9339 const MockRead kFailure("Should not be called."); |
| 9310 "Should not be called."); | |
| 9311 const MockRead kServerChallenge( | 9340 const MockRead kServerChallenge( |
| 9312 "HTTP/1.1 401 Unauthorized\r\n" | 9341 "HTTP/1.1 401 Unauthorized\r\n" |
| 9313 "WWW-Authenticate: Mock realm=server\r\n" | 9342 "WWW-Authenticate: Mock realm=server\r\n" |
| 9314 "Content-Type: text/html; charset=iso-8859-1\r\n" | 9343 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 9315 "Content-Length: 14\r\n\r\n" | 9344 "Content-Length: 14\r\n\r\n" |
| 9316 "Unauthorized\r\n"); | 9345 "Unauthorized\r\n"); |
| 9317 const MockRead kProxyChallenge( | 9346 const MockRead kProxyChallenge( |
| 9318 "HTTP/1.1 407 Unauthorized\r\n" | 9347 "HTTP/1.1 407 Unauthorized\r\n" |
| 9319 "Proxy-Authenticate: Mock realm=proxy\r\n" | 9348 "Proxy-Authenticate: Mock realm=proxy\r\n" |
| 9320 "Proxy-Connection: close\r\n" | 9349 "Proxy-Connection: close\r\n" |
| 9321 "Content-Type: text/html; charset=iso-8859-1\r\n" | 9350 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 9322 "Content-Length: 14\r\n\r\n" | 9351 "Content-Length: 14\r\n\r\n" |
| 9323 "Unauthorized\r\n"); | 9352 "Unauthorized\r\n"); |
| 9324 const MockRead kProxyConnected( | 9353 const MockRead kProxyConnected("HTTP/1.1 200 Connection Established\r\n\r\n"); |
| 9325 "HTTP/1.1 200 Connection Established\r\n\r\n"); | |
| 9326 | 9354 |
| 9327 // NOTE(cbentzel): I wanted TestReadWriteRound to be a simple struct with | 9355 // NOTE(cbentzel): I wanted TestReadWriteRound to be a simple struct with |
| 9328 // no constructors, but the C++ compiler on Windows warns about | 9356 // no constructors, but the C++ compiler on Windows warns about |
| 9329 // unspecified data in compound literals. So, moved to using constructors, | 9357 // unspecified data in compound literals. So, moved to using constructors, |
| 9330 // and TestRound's created with the default constructor should not be used. | 9358 // and TestRound's created with the default constructor should not be used. |
| 9331 struct TestRound { | 9359 struct TestRound { |
| 9332 TestRound() | 9360 TestRound() |
| 9333 : expected_rv(ERR_UNEXPECTED), | 9361 : expected_rv(ERR_UNEXPECTED), extra_write(NULL), extra_read(NULL) {} |
| 9334 extra_write(NULL), | 9362 TestRound(const MockWrite& write_arg, |
| 9335 extra_read(NULL) { | 9363 const MockRead& read_arg, |
| 9336 } | |
| 9337 TestRound(const MockWrite& write_arg, const MockRead& read_arg, | |
| 9338 int expected_rv_arg) | 9364 int expected_rv_arg) |
| 9339 : write(write_arg), | 9365 : write(write_arg), |
| 9340 read(read_arg), | 9366 read(read_arg), |
| 9341 expected_rv(expected_rv_arg), | 9367 expected_rv(expected_rv_arg), |
| 9342 extra_write(NULL), | 9368 extra_write(NULL), |
| 9343 extra_read(NULL) { | 9369 extra_read(NULL) {} |
| 9344 } | 9370 TestRound(const MockWrite& write_arg, |
| 9345 TestRound(const MockWrite& write_arg, const MockRead& read_arg, | 9371 const MockRead& read_arg, |
| 9346 int expected_rv_arg, const MockWrite* extra_write_arg, | 9372 int expected_rv_arg, |
| 9373 const MockWrite* extra_write_arg, |
| 9347 const MockRead* extra_read_arg) | 9374 const MockRead* extra_read_arg) |
| 9348 : write(write_arg), | 9375 : write(write_arg), |
| 9349 read(read_arg), | 9376 read(read_arg), |
| 9350 expected_rv(expected_rv_arg), | 9377 expected_rv(expected_rv_arg), |
| 9351 extra_write(extra_write_arg), | 9378 extra_write(extra_write_arg), |
| 9352 extra_read(extra_read_arg) { | 9379 extra_read(extra_read_arg) {} |
| 9353 } | |
| 9354 MockWrite write; | 9380 MockWrite write; |
| 9355 MockRead read; | 9381 MockRead read; |
| 9356 int expected_rv; | 9382 int expected_rv; |
| 9357 const MockWrite* extra_write; | 9383 const MockWrite* extra_write; |
| 9358 const MockRead* extra_read; | 9384 const MockRead* extra_read; |
| 9359 }; | 9385 }; |
| 9360 | 9386 |
| 9361 static const int kNoSSL = 500; | 9387 static const int kNoSSL = 500; |
| 9362 | 9388 |
| 9363 struct TestConfig { | 9389 struct TestConfig { |
| 9364 const char* proxy_url; | 9390 const char* proxy_url; |
| 9365 AuthTiming proxy_auth_timing; | 9391 AuthTiming proxy_auth_timing; |
| 9366 int proxy_auth_rv; | 9392 int proxy_auth_rv; |
| 9367 const char* server_url; | 9393 const char* server_url; |
| 9368 AuthTiming server_auth_timing; | 9394 AuthTiming server_auth_timing; |
| 9369 int server_auth_rv; | 9395 int server_auth_rv; |
| 9370 int num_auth_rounds; | 9396 int num_auth_rounds; |
| 9371 int first_ssl_round; | 9397 int first_ssl_round; |
| 9372 TestRound rounds[3]; | 9398 TestRound rounds[3]; |
| 9373 } test_configs[] = { | 9399 } test_configs[] = { |
| 9374 // Non-authenticating HTTP server with a direct connection. | 9400 // Non-authenticating HTTP server with a direct connection. |
| 9375 { NULL, AUTH_NONE, OK, kServer, AUTH_NONE, OK, 1, kNoSSL, | 9401 {NULL, |
| 9376 { TestRound(kGet, kSuccess, OK)}}, | 9402 AUTH_NONE, |
| 9377 // Authenticating HTTP server with a direct connection. | 9403 OK, |
| 9378 { NULL, AUTH_NONE, OK, kServer, AUTH_SYNC, OK, 2, kNoSSL, | 9404 kServer, |
| 9379 { TestRound(kGet, kServerChallenge, OK), | 9405 AUTH_NONE, |
| 9380 TestRound(kGetAuth, kSuccess, OK)}}, | 9406 OK, |
| 9381 { NULL, AUTH_NONE, OK, kServer, AUTH_SYNC, kAuthErr, 2, kNoSSL, | 9407 1, |
| 9382 { TestRound(kGet, kServerChallenge, OK), | 9408 kNoSSL, |
| 9383 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9409 {TestRound(kGet, kSuccess, OK)}}, |
| 9384 { NULL, AUTH_NONE, OK, kServer, AUTH_ASYNC, OK, 2, kNoSSL, | 9410 // Authenticating HTTP server with a direct connection. |
| 9385 { TestRound(kGet, kServerChallenge, OK), | 9411 {NULL, |
| 9386 TestRound(kGetAuth, kSuccess, OK)}}, | 9412 AUTH_NONE, |
| 9387 { NULL, AUTH_NONE, OK, kServer, AUTH_ASYNC, kAuthErr, 2, kNoSSL, | 9413 OK, |
| 9388 { TestRound(kGet, kServerChallenge, OK), | 9414 kServer, |
| 9389 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9415 AUTH_SYNC, |
| 9390 // Non-authenticating HTTP server through a non-authenticating proxy. | 9416 OK, |
| 9391 { kProxy, AUTH_NONE, OK, kServer, AUTH_NONE, OK, 1, kNoSSL, | 9417 2, |
| 9392 { TestRound(kGetProxy, kSuccess, OK)}}, | 9418 kNoSSL, |
| 9393 // Authenticating HTTP server through a non-authenticating proxy. | 9419 {TestRound(kGet, kServerChallenge, OK), |
| 9394 { kProxy, AUTH_NONE, OK, kServer, AUTH_SYNC, OK, 2, kNoSSL, | 9420 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9395 { TestRound(kGetProxy, kServerChallenge, OK), | 9421 {NULL, |
| 9396 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, | 9422 AUTH_NONE, |
| 9397 { kProxy, AUTH_NONE, OK, kServer, AUTH_SYNC, kAuthErr, 2, kNoSSL, | 9423 OK, |
| 9398 { TestRound(kGetProxy, kServerChallenge, OK), | 9424 kServer, |
| 9399 TestRound(kGetAuthThroughProxy, kFailure, kAuthErr)}}, | 9425 AUTH_SYNC, |
| 9400 { kProxy, AUTH_NONE, OK, kServer, AUTH_ASYNC, OK, 2, kNoSSL, | 9426 kAuthErr, |
| 9401 { TestRound(kGetProxy, kServerChallenge, OK), | 9427 2, |
| 9402 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, | 9428 kNoSSL, |
| 9403 { kProxy, AUTH_NONE, OK, kServer, AUTH_ASYNC, kAuthErr, 2, kNoSSL, | 9429 {TestRound(kGet, kServerChallenge, OK), |
| 9404 { TestRound(kGetProxy, kServerChallenge, OK), | 9430 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9405 TestRound(kGetAuthThroughProxy, kFailure, kAuthErr)}}, | 9431 {NULL, |
| 9406 // Non-authenticating HTTP server through an authenticating proxy. | 9432 AUTH_NONE, |
| 9407 { kProxy, AUTH_SYNC, OK, kServer, AUTH_NONE, OK, 2, kNoSSL, | 9433 OK, |
| 9408 { TestRound(kGetProxy, kProxyChallenge, OK), | 9434 kServer, |
| 9409 TestRound(kGetProxyAuth, kSuccess, OK)}}, | 9435 AUTH_ASYNC, |
| 9410 { kProxy, AUTH_SYNC, kAuthErr, kServer, AUTH_NONE, OK, 2, kNoSSL, | 9436 OK, |
| 9411 { TestRound(kGetProxy, kProxyChallenge, OK), | 9437 2, |
| 9412 TestRound(kGetProxyAuth, kFailure, kAuthErr)}}, | 9438 kNoSSL, |
| 9413 { kProxy, AUTH_ASYNC, OK, kServer, AUTH_NONE, OK, 2, kNoSSL, | 9439 {TestRound(kGet, kServerChallenge, OK), |
| 9414 { TestRound(kGetProxy, kProxyChallenge, OK), | 9440 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9415 TestRound(kGetProxyAuth, kSuccess, OK)}}, | 9441 {NULL, |
| 9416 { kProxy, AUTH_ASYNC, kAuthErr, kServer, AUTH_NONE, OK, 2, kNoSSL, | 9442 AUTH_NONE, |
| 9417 { TestRound(kGetProxy, kProxyChallenge, OK), | 9443 OK, |
| 9418 TestRound(kGetProxyAuth, kFailure, kAuthErr)}}, | 9444 kServer, |
| 9419 // Authenticating HTTP server through an authenticating proxy. | 9445 AUTH_ASYNC, |
| 9420 { kProxy, AUTH_SYNC, OK, kServer, AUTH_SYNC, OK, 3, kNoSSL, | 9446 kAuthErr, |
| 9421 { TestRound(kGetProxy, kProxyChallenge, OK), | 9447 2, |
| 9422 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9448 kNoSSL, |
| 9423 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, | 9449 {TestRound(kGet, kServerChallenge, OK), |
| 9424 { kProxy, AUTH_SYNC, OK, kServer, AUTH_SYNC, kAuthErr, 3, kNoSSL, | 9450 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9425 { TestRound(kGetProxy, kProxyChallenge, OK), | 9451 // Non-authenticating HTTP server through a non-authenticating proxy. |
| 9426 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9452 {kProxy, |
| 9427 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, | 9453 AUTH_NONE, |
| 9428 { kProxy, AUTH_ASYNC, OK, kServer, AUTH_SYNC, OK, 3, kNoSSL, | 9454 OK, |
| 9429 { TestRound(kGetProxy, kProxyChallenge, OK), | 9455 kServer, |
| 9430 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9456 AUTH_NONE, |
| 9431 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, | 9457 OK, |
| 9432 { kProxy, AUTH_ASYNC, OK, kServer, AUTH_SYNC, kAuthErr, 3, kNoSSL, | 9458 1, |
| 9433 { TestRound(kGetProxy, kProxyChallenge, OK), | 9459 kNoSSL, |
| 9434 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9460 {TestRound(kGetProxy, kSuccess, OK)}}, |
| 9435 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, | 9461 // Authenticating HTTP server through a non-authenticating proxy. |
| 9436 { kProxy, AUTH_SYNC, OK, kServer, AUTH_ASYNC, OK, 3, kNoSSL, | 9462 {kProxy, |
| 9437 { TestRound(kGetProxy, kProxyChallenge, OK), | 9463 AUTH_NONE, |
| 9438 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9464 OK, |
| 9439 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, | 9465 kServer, |
| 9440 { kProxy, AUTH_SYNC, OK, kServer, AUTH_ASYNC, kAuthErr, 3, kNoSSL, | 9466 AUTH_SYNC, |
| 9441 { TestRound(kGetProxy, kProxyChallenge, OK), | 9467 OK, |
| 9442 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9468 2, |
| 9443 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, | 9469 kNoSSL, |
| 9444 { kProxy, AUTH_ASYNC, OK, kServer, AUTH_ASYNC, OK, 3, kNoSSL, | 9470 {TestRound(kGetProxy, kServerChallenge, OK), |
| 9445 { TestRound(kGetProxy, kProxyChallenge, OK), | 9471 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, |
| 9446 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9472 {kProxy, |
| 9447 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, | 9473 AUTH_NONE, |
| 9448 { kProxy, AUTH_ASYNC, OK, kServer, AUTH_ASYNC, kAuthErr, 3, kNoSSL, | 9474 OK, |
| 9449 { TestRound(kGetProxy, kProxyChallenge, OK), | 9475 kServer, |
| 9450 TestRound(kGetProxyAuth, kServerChallenge, OK), | 9476 AUTH_SYNC, |
| 9451 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, | 9477 kAuthErr, |
| 9452 // Non-authenticating HTTPS server with a direct connection. | 9478 2, |
| 9453 { NULL, AUTH_NONE, OK, kSecureServer, AUTH_NONE, OK, 1, 0, | 9479 kNoSSL, |
| 9454 { TestRound(kGet, kSuccess, OK)}}, | 9480 {TestRound(kGetProxy, kServerChallenge, OK), |
| 9455 // Authenticating HTTPS server with a direct connection. | 9481 TestRound(kGetAuthThroughProxy, kFailure, kAuthErr)}}, |
| 9456 { NULL, AUTH_NONE, OK, kSecureServer, AUTH_SYNC, OK, 2, 0, | 9482 {kProxy, |
| 9457 { TestRound(kGet, kServerChallenge, OK), | 9483 AUTH_NONE, |
| 9458 TestRound(kGetAuth, kSuccess, OK)}}, | 9484 OK, |
| 9459 { NULL, AUTH_NONE, OK, kSecureServer, AUTH_SYNC, kAuthErr, 2, 0, | 9485 kServer, |
| 9460 { TestRound(kGet, kServerChallenge, OK), | 9486 AUTH_ASYNC, |
| 9461 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9487 OK, |
| 9462 { NULL, AUTH_NONE, OK, kSecureServer, AUTH_ASYNC, OK, 2, 0, | 9488 2, |
| 9463 { TestRound(kGet, kServerChallenge, OK), | 9489 kNoSSL, |
| 9464 TestRound(kGetAuth, kSuccess, OK)}}, | 9490 {TestRound(kGetProxy, kServerChallenge, OK), |
| 9465 { NULL, AUTH_NONE, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 2, 0, | 9491 TestRound(kGetAuthThroughProxy, kSuccess, OK)}}, |
| 9466 { TestRound(kGet, kServerChallenge, OK), | 9492 {kProxy, |
| 9467 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9493 AUTH_NONE, |
| 9468 // Non-authenticating HTTPS server with a non-authenticating proxy. | 9494 OK, |
| 9469 { kProxy, AUTH_NONE, OK, kSecureServer, AUTH_NONE, OK, 1, 0, | 9495 kServer, |
| 9470 { TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, | 9496 AUTH_ASYNC, |
| 9471 // Authenticating HTTPS server through a non-authenticating proxy. | 9497 kAuthErr, |
| 9472 { kProxy, AUTH_NONE, OK, kSecureServer, AUTH_SYNC, OK, 2, 0, | 9498 2, |
| 9473 { TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), | 9499 kNoSSL, |
| 9474 TestRound(kGetAuth, kSuccess, OK)}}, | 9500 {TestRound(kGetProxy, kServerChallenge, OK), |
| 9475 { kProxy, AUTH_NONE, OK, kSecureServer, AUTH_SYNC, kAuthErr, 2, 0, | 9501 TestRound(kGetAuthThroughProxy, kFailure, kAuthErr)}}, |
| 9476 { TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), | 9502 // Non-authenticating HTTP server through an authenticating proxy. |
| 9477 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9503 {kProxy, |
| 9478 { kProxy, AUTH_NONE, OK, kSecureServer, AUTH_ASYNC, OK, 2, 0, | 9504 AUTH_SYNC, |
| 9479 { TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), | 9505 OK, |
| 9480 TestRound(kGetAuth, kSuccess, OK)}}, | 9506 kServer, |
| 9481 { kProxy, AUTH_NONE, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 2, 0, | 9507 AUTH_NONE, |
| 9482 { TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), | 9508 OK, |
| 9483 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9509 2, |
| 9484 // Non-Authenticating HTTPS server through an authenticating proxy. | 9510 kNoSSL, |
| 9485 { kProxy, AUTH_SYNC, OK, kSecureServer, AUTH_NONE, OK, 2, 1, | 9511 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9486 { TestRound(kConnect, kProxyChallenge, OK), | 9512 TestRound(kGetProxyAuth, kSuccess, OK)}}, |
| 9487 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, | 9513 {kProxy, |
| 9488 { kProxy, AUTH_SYNC, kAuthErr, kSecureServer, AUTH_NONE, OK, 2, kNoSSL, | 9514 AUTH_SYNC, |
| 9489 { TestRound(kConnect, kProxyChallenge, OK), | 9515 kAuthErr, |
| 9490 TestRound(kConnectProxyAuth, kFailure, kAuthErr)}}, | 9516 kServer, |
| 9491 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_NONE, OK, 2, 1, | 9517 AUTH_NONE, |
| 9492 { TestRound(kConnect, kProxyChallenge, OK), | 9518 OK, |
| 9493 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, | 9519 2, |
| 9494 { kProxy, AUTH_ASYNC, kAuthErr, kSecureServer, AUTH_NONE, OK, 2, kNoSSL, | 9520 kNoSSL, |
| 9495 { TestRound(kConnect, kProxyChallenge, OK), | 9521 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9496 TestRound(kConnectProxyAuth, kFailure, kAuthErr)}}, | 9522 TestRound(kGetProxyAuth, kFailure, kAuthErr)}}, |
| 9497 // Authenticating HTTPS server through an authenticating proxy. | 9523 {kProxy, |
| 9498 { kProxy, AUTH_SYNC, OK, kSecureServer, AUTH_SYNC, OK, 3, 1, | 9524 AUTH_ASYNC, |
| 9499 { TestRound(kConnect, kProxyChallenge, OK), | 9525 OK, |
| 9500 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9526 kServer, |
| 9501 &kGet, &kServerChallenge), | 9527 AUTH_NONE, |
| 9502 TestRound(kGetAuth, kSuccess, OK)}}, | 9528 OK, |
| 9503 { kProxy, AUTH_SYNC, OK, kSecureServer, AUTH_SYNC, kAuthErr, 3, 1, | 9529 2, |
| 9504 { TestRound(kConnect, kProxyChallenge, OK), | 9530 kNoSSL, |
| 9505 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9531 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9506 &kGet, &kServerChallenge), | 9532 TestRound(kGetProxyAuth, kSuccess, OK)}}, |
| 9507 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9533 {kProxy, |
| 9508 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_SYNC, OK, 3, 1, | 9534 AUTH_ASYNC, |
| 9509 { TestRound(kConnect, kProxyChallenge, OK), | 9535 kAuthErr, |
| 9510 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9536 kServer, |
| 9511 &kGet, &kServerChallenge), | 9537 AUTH_NONE, |
| 9512 TestRound(kGetAuth, kSuccess, OK)}}, | 9538 OK, |
| 9513 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_SYNC, kAuthErr, 3, 1, | 9539 2, |
| 9514 { TestRound(kConnect, kProxyChallenge, OK), | 9540 kNoSSL, |
| 9515 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9541 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9516 &kGet, &kServerChallenge), | 9542 TestRound(kGetProxyAuth, kFailure, kAuthErr)}}, |
| 9517 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9543 // Authenticating HTTP server through an authenticating proxy. |
| 9518 { kProxy, AUTH_SYNC, OK, kSecureServer, AUTH_ASYNC, OK, 3, 1, | 9544 {kProxy, |
| 9519 { TestRound(kConnect, kProxyChallenge, OK), | 9545 AUTH_SYNC, |
| 9520 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9546 OK, |
| 9521 &kGet, &kServerChallenge), | 9547 kServer, |
| 9522 TestRound(kGetAuth, kSuccess, OK)}}, | 9548 AUTH_SYNC, |
| 9523 { kProxy, AUTH_SYNC, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 3, 1, | 9549 OK, |
| 9524 { TestRound(kConnect, kProxyChallenge, OK), | 9550 3, |
| 9525 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9551 kNoSSL, |
| 9526 &kGet, &kServerChallenge), | 9552 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9527 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9553 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9528 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_ASYNC, OK, 3, 1, | 9554 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, |
| 9529 { TestRound(kConnect, kProxyChallenge, OK), | 9555 {kProxy, |
| 9530 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9556 AUTH_SYNC, |
| 9531 &kGet, &kServerChallenge), | 9557 OK, |
| 9532 TestRound(kGetAuth, kSuccess, OK)}}, | 9558 kServer, |
| 9533 { kProxy, AUTH_ASYNC, OK, kSecureServer, AUTH_ASYNC, kAuthErr, 3, 1, | 9559 AUTH_SYNC, |
| 9534 { TestRound(kConnect, kProxyChallenge, OK), | 9560 kAuthErr, |
| 9535 TestRound(kConnectProxyAuth, kProxyConnected, OK, | 9561 3, |
| 9536 &kGet, &kServerChallenge), | 9562 kNoSSL, |
| 9537 TestRound(kGetAuth, kFailure, kAuthErr)}}, | 9563 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9538 }; | 9564 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9565 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, |
| 9566 {kProxy, |
| 9567 AUTH_ASYNC, |
| 9568 OK, |
| 9569 kServer, |
| 9570 AUTH_SYNC, |
| 9571 OK, |
| 9572 3, |
| 9573 kNoSSL, |
| 9574 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9575 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9576 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, |
| 9577 {kProxy, |
| 9578 AUTH_ASYNC, |
| 9579 OK, |
| 9580 kServer, |
| 9581 AUTH_SYNC, |
| 9582 kAuthErr, |
| 9583 3, |
| 9584 kNoSSL, |
| 9585 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9586 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9587 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, |
| 9588 {kProxy, |
| 9589 AUTH_SYNC, |
| 9590 OK, |
| 9591 kServer, |
| 9592 AUTH_ASYNC, |
| 9593 OK, |
| 9594 3, |
| 9595 kNoSSL, |
| 9596 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9597 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9598 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, |
| 9599 {kProxy, |
| 9600 AUTH_SYNC, |
| 9601 OK, |
| 9602 kServer, |
| 9603 AUTH_ASYNC, |
| 9604 kAuthErr, |
| 9605 3, |
| 9606 kNoSSL, |
| 9607 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9608 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9609 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, |
| 9610 {kProxy, |
| 9611 AUTH_ASYNC, |
| 9612 OK, |
| 9613 kServer, |
| 9614 AUTH_ASYNC, |
| 9615 OK, |
| 9616 3, |
| 9617 kNoSSL, |
| 9618 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9619 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9620 TestRound(kGetAuthWithProxyAuth, kSuccess, OK)}}, |
| 9621 {kProxy, |
| 9622 AUTH_ASYNC, |
| 9623 OK, |
| 9624 kServer, |
| 9625 AUTH_ASYNC, |
| 9626 kAuthErr, |
| 9627 3, |
| 9628 kNoSSL, |
| 9629 {TestRound(kGetProxy, kProxyChallenge, OK), |
| 9630 TestRound(kGetProxyAuth, kServerChallenge, OK), |
| 9631 TestRound(kGetAuthWithProxyAuth, kFailure, kAuthErr)}}, |
| 9632 // Non-authenticating HTTPS server with a direct connection. |
| 9633 {NULL, |
| 9634 AUTH_NONE, |
| 9635 OK, |
| 9636 kSecureServer, |
| 9637 AUTH_NONE, |
| 9638 OK, |
| 9639 1, |
| 9640 0, |
| 9641 {TestRound(kGet, kSuccess, OK)}}, |
| 9642 // Authenticating HTTPS server with a direct connection. |
| 9643 {NULL, |
| 9644 AUTH_NONE, |
| 9645 OK, |
| 9646 kSecureServer, |
| 9647 AUTH_SYNC, |
| 9648 OK, |
| 9649 2, |
| 9650 0, |
| 9651 {TestRound(kGet, kServerChallenge, OK), |
| 9652 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9653 {NULL, |
| 9654 AUTH_NONE, |
| 9655 OK, |
| 9656 kSecureServer, |
| 9657 AUTH_SYNC, |
| 9658 kAuthErr, |
| 9659 2, |
| 9660 0, |
| 9661 {TestRound(kGet, kServerChallenge, OK), |
| 9662 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9663 {NULL, |
| 9664 AUTH_NONE, |
| 9665 OK, |
| 9666 kSecureServer, |
| 9667 AUTH_ASYNC, |
| 9668 OK, |
| 9669 2, |
| 9670 0, |
| 9671 {TestRound(kGet, kServerChallenge, OK), |
| 9672 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9673 {NULL, |
| 9674 AUTH_NONE, |
| 9675 OK, |
| 9676 kSecureServer, |
| 9677 AUTH_ASYNC, |
| 9678 kAuthErr, |
| 9679 2, |
| 9680 0, |
| 9681 {TestRound(kGet, kServerChallenge, OK), |
| 9682 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9683 // Non-authenticating HTTPS server with a non-authenticating proxy. |
| 9684 {kProxy, |
| 9685 AUTH_NONE, |
| 9686 OK, |
| 9687 kSecureServer, |
| 9688 AUTH_NONE, |
| 9689 OK, |
| 9690 1, |
| 9691 0, |
| 9692 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kSuccess)}}, |
| 9693 // Authenticating HTTPS server through a non-authenticating proxy. |
| 9694 {kProxy, |
| 9695 AUTH_NONE, |
| 9696 OK, |
| 9697 kSecureServer, |
| 9698 AUTH_SYNC, |
| 9699 OK, |
| 9700 2, |
| 9701 0, |
| 9702 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9703 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9704 {kProxy, |
| 9705 AUTH_NONE, |
| 9706 OK, |
| 9707 kSecureServer, |
| 9708 AUTH_SYNC, |
| 9709 kAuthErr, |
| 9710 2, |
| 9711 0, |
| 9712 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9713 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9714 {kProxy, |
| 9715 AUTH_NONE, |
| 9716 OK, |
| 9717 kSecureServer, |
| 9718 AUTH_ASYNC, |
| 9719 OK, |
| 9720 2, |
| 9721 0, |
| 9722 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9723 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9724 {kProxy, |
| 9725 AUTH_NONE, |
| 9726 OK, |
| 9727 kSecureServer, |
| 9728 AUTH_ASYNC, |
| 9729 kAuthErr, |
| 9730 2, |
| 9731 0, |
| 9732 {TestRound(kConnect, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9733 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9734 // Non-Authenticating HTTPS server through an authenticating proxy. |
| 9735 {kProxy, |
| 9736 AUTH_SYNC, |
| 9737 OK, |
| 9738 kSecureServer, |
| 9739 AUTH_NONE, |
| 9740 OK, |
| 9741 2, |
| 9742 1, |
| 9743 {TestRound(kConnect, kProxyChallenge, OK), |
| 9744 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, |
| 9745 {kProxy, |
| 9746 AUTH_SYNC, |
| 9747 kAuthErr, |
| 9748 kSecureServer, |
| 9749 AUTH_NONE, |
| 9750 OK, |
| 9751 2, |
| 9752 kNoSSL, |
| 9753 {TestRound(kConnect, kProxyChallenge, OK), |
| 9754 TestRound(kConnectProxyAuth, kFailure, kAuthErr)}}, |
| 9755 {kProxy, |
| 9756 AUTH_ASYNC, |
| 9757 OK, |
| 9758 kSecureServer, |
| 9759 AUTH_NONE, |
| 9760 OK, |
| 9761 2, |
| 9762 1, |
| 9763 {TestRound(kConnect, kProxyChallenge, OK), |
| 9764 TestRound(kConnectProxyAuth, kProxyConnected, OK, &kGet, &kSuccess)}}, |
| 9765 {kProxy, |
| 9766 AUTH_ASYNC, |
| 9767 kAuthErr, |
| 9768 kSecureServer, |
| 9769 AUTH_NONE, |
| 9770 OK, |
| 9771 2, |
| 9772 kNoSSL, |
| 9773 {TestRound(kConnect, kProxyChallenge, OK), |
| 9774 TestRound(kConnectProxyAuth, kFailure, kAuthErr)}}, |
| 9775 // Authenticating HTTPS server through an authenticating proxy. |
| 9776 {kProxy, |
| 9777 AUTH_SYNC, |
| 9778 OK, |
| 9779 kSecureServer, |
| 9780 AUTH_SYNC, |
| 9781 OK, |
| 9782 3, |
| 9783 1, |
| 9784 {TestRound(kConnect, kProxyChallenge, OK), |
| 9785 TestRound( |
| 9786 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9787 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9788 {kProxy, |
| 9789 AUTH_SYNC, |
| 9790 OK, |
| 9791 kSecureServer, |
| 9792 AUTH_SYNC, |
| 9793 kAuthErr, |
| 9794 3, |
| 9795 1, |
| 9796 {TestRound(kConnect, kProxyChallenge, OK), |
| 9797 TestRound( |
| 9798 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9799 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9800 {kProxy, |
| 9801 AUTH_ASYNC, |
| 9802 OK, |
| 9803 kSecureServer, |
| 9804 AUTH_SYNC, |
| 9805 OK, |
| 9806 3, |
| 9807 1, |
| 9808 {TestRound(kConnect, kProxyChallenge, OK), |
| 9809 TestRound( |
| 9810 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9811 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9812 {kProxy, |
| 9813 AUTH_ASYNC, |
| 9814 OK, |
| 9815 kSecureServer, |
| 9816 AUTH_SYNC, |
| 9817 kAuthErr, |
| 9818 3, |
| 9819 1, |
| 9820 {TestRound(kConnect, kProxyChallenge, OK), |
| 9821 TestRound( |
| 9822 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9823 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9824 {kProxy, |
| 9825 AUTH_SYNC, |
| 9826 OK, |
| 9827 kSecureServer, |
| 9828 AUTH_ASYNC, |
| 9829 OK, |
| 9830 3, |
| 9831 1, |
| 9832 {TestRound(kConnect, kProxyChallenge, OK), |
| 9833 TestRound( |
| 9834 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9835 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9836 {kProxy, |
| 9837 AUTH_SYNC, |
| 9838 OK, |
| 9839 kSecureServer, |
| 9840 AUTH_ASYNC, |
| 9841 kAuthErr, |
| 9842 3, |
| 9843 1, |
| 9844 {TestRound(kConnect, kProxyChallenge, OK), |
| 9845 TestRound( |
| 9846 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9847 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9848 {kProxy, |
| 9849 AUTH_ASYNC, |
| 9850 OK, |
| 9851 kSecureServer, |
| 9852 AUTH_ASYNC, |
| 9853 OK, |
| 9854 3, |
| 9855 1, |
| 9856 {TestRound(kConnect, kProxyChallenge, OK), |
| 9857 TestRound( |
| 9858 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9859 TestRound(kGetAuth, kSuccess, OK)}}, |
| 9860 {kProxy, |
| 9861 AUTH_ASYNC, |
| 9862 OK, |
| 9863 kSecureServer, |
| 9864 AUTH_ASYNC, |
| 9865 kAuthErr, |
| 9866 3, |
| 9867 1, |
| 9868 {TestRound(kConnect, kProxyChallenge, OK), |
| 9869 TestRound( |
| 9870 kConnectProxyAuth, kProxyConnected, OK, &kGet, &kServerChallenge), |
| 9871 TestRound(kGetAuth, kFailure, kAuthErr)}}, |
| 9872 }; |
| 9539 | 9873 |
| 9540 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_configs); ++i) { | 9874 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_configs); ++i) { |
| 9541 HttpAuthHandlerMock::Factory* auth_factory( | 9875 HttpAuthHandlerMock::Factory* auth_factory( |
| 9542 new HttpAuthHandlerMock::Factory()); | 9876 new HttpAuthHandlerMock::Factory()); |
| 9543 session_deps_.http_auth_handler_factory.reset(auth_factory); | 9877 session_deps_.http_auth_handler_factory.reset(auth_factory); |
| 9544 const TestConfig& test_config = test_configs[i]; | 9878 const TestConfig& test_config = test_configs[i]; |
| 9545 | 9879 |
| 9546 // Set up authentication handlers as necessary. | 9880 // Set up authentication handlers as necessary. |
| 9547 if (test_config.proxy_auth_timing != AUTH_NONE) { | 9881 if (test_config.proxy_auth_timing != AUTH_NONE) { |
| 9548 for (int n = 0; n < 2; n++) { | 9882 for (int n = 0; n < 2; n++) { |
| 9549 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 9883 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
| 9550 std::string auth_challenge = "Mock realm=proxy"; | 9884 std::string auth_challenge = "Mock realm=proxy"; |
| 9551 GURL origin(test_config.proxy_url); | 9885 GURL origin(test_config.proxy_url); |
| 9552 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 9886 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
| 9553 auth_challenge.end()); | 9887 auth_challenge.end()); |
| 9554 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_PROXY, | 9888 auth_handler->InitFromChallenge( |
| 9555 origin, BoundNetLog()); | 9889 &tokenizer, HttpAuth::AUTH_PROXY, origin, BoundNetLog()); |
| 9556 auth_handler->SetGenerateExpectation( | 9890 auth_handler->SetGenerateExpectation( |
| 9557 test_config.proxy_auth_timing == AUTH_ASYNC, | 9891 test_config.proxy_auth_timing == AUTH_ASYNC, |
| 9558 test_config.proxy_auth_rv); | 9892 test_config.proxy_auth_rv); |
| 9559 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); | 9893 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); |
| 9560 } | 9894 } |
| 9561 } | 9895 } |
| 9562 if (test_config.server_auth_timing != AUTH_NONE) { | 9896 if (test_config.server_auth_timing != AUTH_NONE) { |
| 9563 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 9897 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
| 9564 std::string auth_challenge = "Mock realm=server"; | 9898 std::string auth_challenge = "Mock realm=server"; |
| 9565 GURL origin(test_config.server_url); | 9899 GURL origin(test_config.server_url); |
| 9566 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 9900 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
| 9567 auth_challenge.end()); | 9901 auth_challenge.end()); |
| 9568 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 9902 auth_handler->InitFromChallenge( |
| 9569 origin, BoundNetLog()); | 9903 &tokenizer, HttpAuth::AUTH_SERVER, origin, BoundNetLog()); |
| 9570 auth_handler->SetGenerateExpectation( | 9904 auth_handler->SetGenerateExpectation( |
| 9571 test_config.server_auth_timing == AUTH_ASYNC, | 9905 test_config.server_auth_timing == AUTH_ASYNC, |
| 9572 test_config.server_auth_rv); | 9906 test_config.server_auth_rv); |
| 9573 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); | 9907 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); |
| 9574 } | 9908 } |
| 9575 if (test_config.proxy_url) { | 9909 if (test_config.proxy_url) { |
| 9576 session_deps_.proxy_service.reset( | 9910 session_deps_.proxy_service.reset( |
| 9577 ProxyService::CreateFixed(test_config.proxy_url)); | 9911 ProxyService::CreateFixed(test_config.proxy_url)); |
| 9578 } else { | 9912 } else { |
| 9579 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); | 9913 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9615 if (round >= test_config.first_ssl_round) | 9949 if (round >= test_config.first_ssl_round) |
| 9616 session_deps_.socket_factory->AddSSLSocketDataProvider( | 9950 session_deps_.socket_factory->AddSSLSocketDataProvider( |
| 9617 &ssl_socket_data_provider); | 9951 &ssl_socket_data_provider); |
| 9618 | 9952 |
| 9619 // Start or restart the transaction. | 9953 // Start or restart the transaction. |
| 9620 TestCompletionCallback callback; | 9954 TestCompletionCallback callback; |
| 9621 int rv; | 9955 int rv; |
| 9622 if (round == 0) { | 9956 if (round == 0) { |
| 9623 rv = trans.Start(&request, callback.callback(), BoundNetLog()); | 9957 rv = trans.Start(&request, callback.callback(), BoundNetLog()); |
| 9624 } else { | 9958 } else { |
| 9625 rv = trans.RestartWithAuth( | 9959 rv = trans.RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 9626 AuthCredentials(kFoo, kBar), callback.callback()); | 9960 callback.callback()); |
| 9627 } | 9961 } |
| 9628 if (rv == ERR_IO_PENDING) | 9962 if (rv == ERR_IO_PENDING) |
| 9629 rv = callback.WaitForResult(); | 9963 rv = callback.WaitForResult(); |
| 9630 | 9964 |
| 9631 // Compare results with expected data. | 9965 // Compare results with expected data. |
| 9632 EXPECT_EQ(read_write_round.expected_rv, rv); | 9966 EXPECT_EQ(read_write_round.expected_rv, rv); |
| 9633 const HttpResponseInfo* response = trans.GetResponseInfo(); | 9967 const HttpResponseInfo* response = trans.GetResponseInfo(); |
| 9634 if (read_write_round.expected_rv == OK) { | 9968 if (read_write_round.expected_rv == OK) { |
| 9635 ASSERT_TRUE(response != NULL); | 9969 ASSERT_TRUE(response != NULL); |
| 9636 } else { | 9970 } else { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 9655 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); | 9989 session_deps_.proxy_service.reset(ProxyService::CreateDirect()); |
| 9656 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); | 9990 session_deps_.host_resolver->rules()->AddRule("www.example.com", "10.0.0.1"); |
| 9657 session_deps_.host_resolver->set_synchronous_mode(true); | 9991 session_deps_.host_resolver->set_synchronous_mode(true); |
| 9658 | 9992 |
| 9659 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); | 9993 HttpAuthHandlerMock* auth_handler(new HttpAuthHandlerMock()); |
| 9660 auth_handler->set_connection_based(true); | 9994 auth_handler->set_connection_based(true); |
| 9661 std::string auth_challenge = "Mock realm=server"; | 9995 std::string auth_challenge = "Mock realm=server"; |
| 9662 GURL origin("http://www.example.com"); | 9996 GURL origin("http://www.example.com"); |
| 9663 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), | 9997 HttpAuthChallengeTokenizer tokenizer(auth_challenge.begin(), |
| 9664 auth_challenge.end()); | 9998 auth_challenge.end()); |
| 9665 auth_handler->InitFromChallenge(&tokenizer, HttpAuth::AUTH_SERVER, | 9999 auth_handler->InitFromChallenge( |
| 9666 origin, BoundNetLog()); | 10000 &tokenizer, HttpAuth::AUTH_SERVER, origin, BoundNetLog()); |
| 9667 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); | 10001 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_SERVER); |
| 9668 | 10002 |
| 9669 int rv = OK; | 10003 int rv = OK; |
| 9670 const HttpResponseInfo* response = NULL; | 10004 const HttpResponseInfo* response = NULL; |
| 9671 HttpRequestInfo request; | 10005 HttpRequestInfo request; |
| 9672 request.method = "GET"; | 10006 request.method = "GET"; |
| 9673 request.url = origin; | 10007 request.url = origin; |
| 9674 request.load_flags = 0; | 10008 request.load_flags = 0; |
| 9675 | 10009 |
| 9676 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10010 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9677 | 10011 |
| 9678 // Use a TCP Socket Pool with only one connection per group. This is used | 10012 // Use a TCP Socket Pool with only one connection per group. This is used |
| 9679 // to validate that the TCP socket is not released to the pool between | 10013 // to validate that the TCP socket is not released to the pool between |
| 9680 // each round of multi-round authentication. | 10014 // each round of multi-round authentication. |
| 9681 HttpNetworkSessionPeer session_peer(session); | 10015 HttpNetworkSessionPeer session_peer(session); |
| 9682 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); | 10016 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); |
| 9683 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( | 10017 TransportClientSocketPool* transport_pool = |
| 9684 50, // Max sockets for pool | 10018 new TransportClientSocketPool(50, // Max sockets for pool |
| 9685 1, // Max sockets per group | 10019 1, // Max sockets per group |
| 9686 &transport_pool_histograms, | 10020 &transport_pool_histograms, |
| 9687 session_deps_.host_resolver.get(), | 10021 session_deps_.host_resolver.get(), |
| 9688 session_deps_.socket_factory.get(), | 10022 session_deps_.socket_factory.get(), |
| 9689 session_deps_.net_log); | 10023 session_deps_.net_log); |
| 9690 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 10024 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 9691 new MockClientSocketPoolManager); | 10025 new MockClientSocketPoolManager); |
| 9692 mock_pool_manager->SetTransportSocketPool(transport_pool); | 10026 mock_pool_manager->SetTransportSocketPool(transport_pool); |
| 9693 session_peer.SetClientSocketPoolManager( | 10027 session_peer.SetClientSocketPoolManager( |
| 9694 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 10028 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 9695 | 10029 |
| 9696 scoped_ptr<HttpTransaction> trans( | 10030 scoped_ptr<HttpTransaction> trans( |
| 9697 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10031 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9698 TestCompletionCallback callback; | 10032 TestCompletionCallback callback; |
| 9699 | 10033 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 9712 "WWW-Authenticate: Mock realm=server\r\n" | 10046 "WWW-Authenticate: Mock realm=server\r\n" |
| 9713 "Content-Type: text/html; charset=iso-8859-1\r\n" | 10047 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 9714 "Content-Length: 14\r\n\r\n" | 10048 "Content-Length: 14\r\n\r\n" |
| 9715 "Unauthorized\r\n"); | 10049 "Unauthorized\r\n"); |
| 9716 const MockRead kSuccess( | 10050 const MockRead kSuccess( |
| 9717 "HTTP/1.1 200 OK\r\n" | 10051 "HTTP/1.1 200 OK\r\n" |
| 9718 "Content-Type: text/html; charset=iso-8859-1\r\n" | 10052 "Content-Type: text/html; charset=iso-8859-1\r\n" |
| 9719 "Content-Length: 3\r\n\r\n" | 10053 "Content-Length: 3\r\n\r\n" |
| 9720 "Yes"); | 10054 "Yes"); |
| 9721 | 10055 |
| 9722 MockWrite writes[] = { | 10056 MockWrite writes[] = {// First round |
| 9723 // First round | 10057 kGet, |
| 9724 kGet, | 10058 // Second round |
| 9725 // Second round | 10059 kGetAuth, |
| 9726 kGetAuth, | 10060 // Third round |
| 9727 // Third round | 10061 kGetAuth, |
| 9728 kGetAuth, | 10062 // Fourth round |
| 9729 // Fourth round | 10063 kGetAuth, |
| 9730 kGetAuth, | 10064 // Competing request |
| 9731 // Competing request | 10065 kGet, |
| 9732 kGet, | |
| 9733 }; | 10066 }; |
| 9734 MockRead reads[] = { | 10067 MockRead reads[] = {// First round |
| 9735 // First round | 10068 kServerChallenge, |
| 9736 kServerChallenge, | 10069 // Second round |
| 9737 // Second round | 10070 kServerChallenge, |
| 9738 kServerChallenge, | 10071 // Third round |
| 9739 // Third round | 10072 kServerChallenge, |
| 9740 kServerChallenge, | 10073 // Fourth round |
| 9741 // Fourth round | 10074 kSuccess, |
| 9742 kSuccess, | 10075 // Competing response |
| 9743 // Competing response | 10076 kSuccess, |
| 9744 kSuccess, | |
| 9745 }; | 10077 }; |
| 9746 StaticSocketDataProvider data_provider(reads, arraysize(reads), | 10078 StaticSocketDataProvider data_provider( |
| 9747 writes, arraysize(writes)); | 10079 reads, arraysize(reads), writes, arraysize(writes)); |
| 9748 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); | 10080 session_deps_.socket_factory->AddSocketDataProvider(&data_provider); |
| 9749 | 10081 |
| 9750 const char* const kSocketGroup = "www.example.com:80"; | 10082 const char* const kSocketGroup = "www.example.com:80"; |
| 9751 | 10083 |
| 9752 // First round of authentication. | 10084 // First round of authentication. |
| 9753 auth_handler->SetGenerateExpectation(false, OK); | 10085 auth_handler->SetGenerateExpectation(false, OK); |
| 9754 rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10086 rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9755 if (rv == ERR_IO_PENDING) | 10087 if (rv == ERR_IO_PENDING) |
| 9756 rv = callback.WaitForResult(); | 10088 rv = callback.WaitForResult(); |
| 9757 EXPECT_EQ(OK, rv); | 10089 EXPECT_EQ(OK, rv); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9840 HttpStreamFactory::set_use_alternate_protocols(true); | 10172 HttpStreamFactory::set_use_alternate_protocols(true); |
| 9841 std::vector<NextProto> next_protos; | 10173 std::vector<NextProto> next_protos; |
| 9842 next_protos.push_back(kProtoHTTP11); | 10174 next_protos.push_back(kProtoHTTP11); |
| 9843 HttpStreamFactory::SetNextProtos(next_protos); | 10175 HttpStreamFactory::SetNextProtos(next_protos); |
| 9844 HttpRequestInfo request; | 10176 HttpRequestInfo request; |
| 9845 request.method = "GET"; | 10177 request.method = "GET"; |
| 9846 request.url = GURL("https://www.google.com/"); | 10178 request.url = GURL("https://www.google.com/"); |
| 9847 request.load_flags = 0; | 10179 request.load_flags = 0; |
| 9848 | 10180 |
| 9849 MockWrite data_writes[] = { | 10181 MockWrite data_writes[] = { |
| 9850 MockWrite("GET / HTTP/1.1\r\n" | 10182 MockWrite( |
| 9851 "Host: www.google.com\r\n" | 10183 "GET / HTTP/1.1\r\n" |
| 9852 "Connection: keep-alive\r\n\r\n"), | 10184 "Host: www.google.com\r\n" |
| 10185 "Connection: keep-alive\r\n\r\n"), |
| 9853 }; | 10186 }; |
| 9854 | 10187 |
| 9855 std::string alternate_protocol_http_header = | 10188 std::string alternate_protocol_http_header = GetAlternateProtocolHttpHeader(); |
| 9856 GetAlternateProtocolHttpHeader(); | |
| 9857 | 10189 |
| 9858 MockRead data_reads[] = { | 10190 MockRead data_reads[] = { |
| 9859 MockRead("HTTP/1.1 200 OK\r\n"), | 10191 MockRead("HTTP/1.1 200 OK\r\n"), |
| 9860 MockRead(alternate_protocol_http_header.c_str()), | 10192 MockRead(alternate_protocol_http_header.c_str()), MockRead("hello world"), |
| 9861 MockRead("hello world"), | 10193 MockRead(SYNCHRONOUS, OK), |
| 9862 MockRead(SYNCHRONOUS, OK), | |
| 9863 }; | 10194 }; |
| 9864 | 10195 |
| 9865 SSLSocketDataProvider ssl(ASYNC, OK); | 10196 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9866 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; | 10197 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
| 9867 ssl.next_proto = "http/1.1"; | 10198 ssl.next_proto = "http/1.1"; |
| 9868 ssl.protocol_negotiated = kProtoHTTP11; | 10199 ssl.protocol_negotiated = kProtoHTTP11; |
| 9869 | 10200 |
| 9870 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10201 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9871 | 10202 |
| 9872 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 10203 StaticSocketDataProvider data( |
| 9873 data_writes, arraysize(data_writes)); | 10204 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 9874 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10205 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 9875 | 10206 |
| 9876 TestCompletionCallback callback; | 10207 TestCompletionCallback callback; |
| 9877 | 10208 |
| 9878 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10209 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9879 scoped_ptr<HttpTransaction> trans( | 10210 scoped_ptr<HttpTransaction> trans( |
| 9880 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10211 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9881 | 10212 |
| 9882 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10213 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9883 | 10214 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 9908 request.method = "GET"; | 10239 request.method = "GET"; |
| 9909 request.url = GURL("https://www.google.com/"); | 10240 request.url = GURL("https://www.google.com/"); |
| 9910 request.load_flags = 0; | 10241 request.load_flags = 0; |
| 9911 | 10242 |
| 9912 SSLSocketDataProvider ssl(ASYNC, OK); | 10243 SSLSocketDataProvider ssl(ASYNC, OK); |
| 9913 ssl.SetNextProto(GetParam()); | 10244 ssl.SetNextProto(GetParam()); |
| 9914 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10245 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 9915 | 10246 |
| 9916 scoped_ptr<SpdyFrame> req( | 10247 scoped_ptr<SpdyFrame> req( |
| 9917 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 10248 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 9918 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 10249 MockWrite spdy_writes[] = {CreateMockWrite(*req)}; |
| 9919 | 10250 |
| 9920 MockRead spdy_reads[] = { | 10251 MockRead spdy_reads[] = { |
| 9921 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. | 10252 MockRead(SYNCHRONOUS, 0, 0) // Not async - return 0 immediately. |
| 9922 }; | 10253 }; |
| 9923 | 10254 |
| 9924 DelayedSocketData spdy_data( | 10255 DelayedSocketData spdy_data(0, // don't wait in this case, immediate hangup. |
| 9925 0, // don't wait in this case, immediate hangup. | 10256 spdy_reads, |
| 9926 spdy_reads, arraysize(spdy_reads), | 10257 arraysize(spdy_reads), |
| 9927 spdy_writes, arraysize(spdy_writes)); | 10258 spdy_writes, |
| 10259 arraysize(spdy_writes)); |
| 9928 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 10260 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 9929 | 10261 |
| 9930 TestCompletionCallback callback; | 10262 TestCompletionCallback callback; |
| 9931 | 10263 |
| 9932 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10264 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 9933 scoped_ptr<HttpTransaction> trans( | 10265 scoped_ptr<HttpTransaction> trans( |
| 9934 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10266 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 9935 | 10267 |
| 9936 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10268 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 9937 EXPECT_EQ(ERR_IO_PENDING, rv); | 10269 EXPECT_EQ(ERR_IO_PENDING, rv); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9982 session_deps_.http_auth_handler_factory.reset(auth_factory); | 10314 session_deps_.http_auth_handler_factory.reset(auth_factory); |
| 9983 } | 10315 } |
| 9984 | 10316 |
| 9985 HttpRequestInfo request; | 10317 HttpRequestInfo request; |
| 9986 request.method = "GET"; | 10318 request.method = "GET"; |
| 9987 request.url = GURL("http://www.google.com"); | 10319 request.url = GURL("http://www.google.com"); |
| 9988 request.load_flags = 0; | 10320 request.load_flags = 0; |
| 9989 | 10321 |
| 9990 // First round goes unauthenticated through the proxy. | 10322 // First round goes unauthenticated through the proxy. |
| 9991 MockWrite data_writes_1[] = { | 10323 MockWrite data_writes_1[] = { |
| 9992 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 10324 MockWrite( |
| 9993 "Host: www.google.com\r\n" | 10325 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 9994 "Proxy-Connection: keep-alive\r\n" | 10326 "Host: www.google.com\r\n" |
| 9995 "\r\n"), | 10327 "Proxy-Connection: keep-alive\r\n" |
| 10328 "\r\n"), |
| 9996 }; | 10329 }; |
| 9997 MockRead data_reads_1[] = { | 10330 MockRead data_reads_1[] = { |
| 9998 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 10331 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 9999 MockRead("HTTP/1.1 200 OK\r\n" | 10332 MockRead( |
| 10000 "Alternate-Protocol: 443:npn-spdy/2\r\n" | 10333 "HTTP/1.1 200 OK\r\n" |
| 10001 "Proxy-Connection: close\r\n" | 10334 "Alternate-Protocol: 443:npn-spdy/2\r\n" |
| 10002 "\r\n"), | 10335 "Proxy-Connection: close\r\n" |
| 10336 "\r\n"), |
| 10003 }; | 10337 }; |
| 10004 StaticSocketDataProvider data_1(data_reads_1, arraysize(data_reads_1), | 10338 StaticSocketDataProvider data_1(data_reads_1, |
| 10005 data_writes_1, arraysize(data_writes_1)); | 10339 arraysize(data_reads_1), |
| 10340 data_writes_1, |
| 10341 arraysize(data_writes_1)); |
| 10006 | 10342 |
| 10007 // Second round tries to tunnel to www.google.com due to the | 10343 // Second round tries to tunnel to www.google.com due to the |
| 10008 // Alternate-Protocol announcement in the first round. It fails due | 10344 // Alternate-Protocol announcement in the first round. It fails due |
| 10009 // to a proxy authentication challenge. | 10345 // to a proxy authentication challenge. |
| 10010 // After the failure, a tunnel is established to www.google.com using | 10346 // After the failure, a tunnel is established to www.google.com using |
| 10011 // Proxy-Authorization headers. There is then a SPDY request round. | 10347 // Proxy-Authorization headers. There is then a SPDY request round. |
| 10012 // | 10348 // |
| 10013 // NOTE: Despite the "Proxy-Connection: Close", these are done on the | 10349 // NOTE: Despite the "Proxy-Connection: Close", these are done on the |
| 10014 // same MockTCPClientSocket since the underlying HttpNetworkClientSocket | 10350 // same MockTCPClientSocket since the underlying HttpNetworkClientSocket |
| 10015 // does a Disconnect and Connect on the same socket, rather than trying | 10351 // does a Disconnect and Connect on the same socket, rather than trying |
| 10016 // to obtain a new one. | 10352 // to obtain a new one. |
| 10017 // | 10353 // |
| 10018 // NOTE: Originally, the proxy response to the second CONNECT request | 10354 // NOTE: Originally, the proxy response to the second CONNECT request |
| 10019 // simply returned another 407 so the unit test could skip the SSL connection | 10355 // simply returned another 407 so the unit test could skip the SSL connection |
| 10020 // establishment and SPDY framing issues. Alas, the | 10356 // establishment and SPDY framing issues. Alas, the |
| 10021 // retry-http-when-alternate-protocol fails logic kicks in, which was more | 10357 // retry-http-when-alternate-protocol fails logic kicks in, which was more |
| 10022 // complicated to set up expectations for than the SPDY session. | 10358 // complicated to set up expectations for than the SPDY session. |
| 10023 | 10359 |
| 10024 scoped_ptr<SpdyFrame> req( | 10360 scoped_ptr<SpdyFrame> req( |
| 10025 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 10361 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 10026 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 10362 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 10027 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 10363 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10028 | 10364 |
| 10029 MockWrite data_writes_2[] = { | 10365 MockWrite data_writes_2[] = { |
| 10030 // First connection attempt without Proxy-Authorization. | 10366 // First connection attempt without Proxy-Authorization. |
| 10031 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 10367 MockWrite( |
| 10032 "Host: www.google.com\r\n" | 10368 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 10033 "Proxy-Connection: keep-alive\r\n" | 10369 "Host: www.google.com\r\n" |
| 10034 "\r\n"), | 10370 "Proxy-Connection: keep-alive\r\n" |
| 10371 "\r\n"), |
| 10035 | 10372 |
| 10036 // Second connection attempt with Proxy-Authorization. | 10373 // Second connection attempt with Proxy-Authorization. |
| 10037 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 10374 MockWrite( |
| 10038 "Host: www.google.com\r\n" | 10375 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 10039 "Proxy-Connection: keep-alive\r\n" | 10376 "Host: www.google.com\r\n" |
| 10040 "Proxy-Authorization: auth_token\r\n" | 10377 "Proxy-Connection: keep-alive\r\n" |
| 10041 "\r\n"), | 10378 "Proxy-Authorization: auth_token\r\n" |
| 10379 "\r\n"), |
| 10042 | 10380 |
| 10043 // SPDY request | 10381 // SPDY request |
| 10044 CreateMockWrite(*req), | 10382 CreateMockWrite(*req), |
| 10045 }; | 10383 }; |
| 10046 const char kRejectConnectResponse[] = ("HTTP/1.1 407 Unauthorized\r\n" | 10384 const char kRejectConnectResponse[] = |
| 10047 "Proxy-Authenticate: Mock\r\n" | 10385 ("HTTP/1.1 407 Unauthorized\r\n" |
| 10048 "Proxy-Connection: close\r\n" | 10386 "Proxy-Authenticate: Mock\r\n" |
| 10049 "\r\n"); | 10387 "Proxy-Connection: close\r\n" |
| 10388 "\r\n"); |
| 10050 const char kAcceptConnectResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; | 10389 const char kAcceptConnectResponse[] = "HTTP/1.1 200 Connected\r\n\r\n"; |
| 10051 MockRead data_reads_2[] = { | 10390 MockRead data_reads_2[] = { |
| 10052 // First connection attempt fails | 10391 // First connection attempt fails |
| 10053 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ, 1), | 10392 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ, 1), |
| 10054 MockRead(ASYNC, kRejectConnectResponse, | 10393 MockRead(ASYNC, |
| 10055 arraysize(kRejectConnectResponse) - 1, 1), | 10394 kRejectConnectResponse, |
| 10395 arraysize(kRejectConnectResponse) - 1, |
| 10396 1), |
| 10056 | 10397 |
| 10057 // Second connection attempt passes | 10398 // Second connection attempt passes |
| 10058 MockRead(ASYNC, kAcceptConnectResponse, | 10399 MockRead(ASYNC, |
| 10059 arraysize(kAcceptConnectResponse) -1, 4), | 10400 kAcceptConnectResponse, |
| 10401 arraysize(kAcceptConnectResponse) - 1, |
| 10402 4), |
| 10060 | 10403 |
| 10061 // SPDY response | 10404 // SPDY response |
| 10062 CreateMockRead(*resp.get(), 6), | 10405 CreateMockRead(*resp.get(), 6), CreateMockRead(*data.get(), 6), |
| 10063 CreateMockRead(*data.get(), 6), | 10406 MockRead(ASYNC, 0, 0, 6), |
| 10064 MockRead(ASYNC, 0, 0, 6), | |
| 10065 }; | 10407 }; |
| 10066 OrderedSocketData data_2( | 10408 OrderedSocketData data_2(data_reads_2, |
| 10067 data_reads_2, arraysize(data_reads_2), | 10409 arraysize(data_reads_2), |
| 10068 data_writes_2, arraysize(data_writes_2)); | 10410 data_writes_2, |
| 10411 arraysize(data_writes_2)); |
| 10069 | 10412 |
| 10070 SSLSocketDataProvider ssl(ASYNC, OK); | 10413 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10071 ssl.SetNextProto(GetParam()); | 10414 ssl.SetNextProto(GetParam()); |
| 10072 | 10415 |
| 10073 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); | 10416 MockConnect never_finishing_connect(SYNCHRONOUS, ERR_IO_PENDING); |
| 10074 StaticSocketDataProvider hanging_non_alternate_protocol_socket( | 10417 StaticSocketDataProvider hanging_non_alternate_protocol_socket( |
| 10075 NULL, 0, NULL, 0); | 10418 NULL, 0, NULL, 0); |
| 10076 hanging_non_alternate_protocol_socket.set_connect_data( | 10419 hanging_non_alternate_protocol_socket.set_connect_data( |
| 10077 never_finishing_connect); | 10420 never_finishing_connect); |
| 10078 | 10421 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 10097 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10440 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10098 rv = trans_2->Start(&request, callback_2.callback(), BoundNetLog()); | 10441 rv = trans_2->Start(&request, callback_2.callback(), BoundNetLog()); |
| 10099 EXPECT_EQ(ERR_IO_PENDING, rv); | 10442 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10100 EXPECT_EQ(OK, callback_2.WaitForResult()); | 10443 EXPECT_EQ(OK, callback_2.WaitForResult()); |
| 10101 const HttpResponseInfo* response = trans_2->GetResponseInfo(); | 10444 const HttpResponseInfo* response = trans_2->GetResponseInfo(); |
| 10102 ASSERT_TRUE(response != NULL); | 10445 ASSERT_TRUE(response != NULL); |
| 10103 ASSERT_FALSE(response->auth_challenge.get() == NULL); | 10446 ASSERT_FALSE(response->auth_challenge.get() == NULL); |
| 10104 | 10447 |
| 10105 // Restart with auth. Tunnel should work and response received. | 10448 // Restart with auth. Tunnel should work and response received. |
| 10106 TestCompletionCallback callback_3; | 10449 TestCompletionCallback callback_3; |
| 10107 rv = trans_2->RestartWithAuth( | 10450 rv = trans_2->RestartWithAuth(AuthCredentials(kFoo, kBar), |
| 10108 AuthCredentials(kFoo, kBar), callback_3.callback()); | 10451 callback_3.callback()); |
| 10109 EXPECT_EQ(ERR_IO_PENDING, rv); | 10452 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10110 EXPECT_EQ(OK, callback_3.WaitForResult()); | 10453 EXPECT_EQ(OK, callback_3.WaitForResult()); |
| 10111 | 10454 |
| 10112 // After all that work, these two lines (or actually, just the scheme) are | 10455 // After all that work, these two lines (or actually, just the scheme) are |
| 10113 // what this test is all about. Make sure it happens correctly. | 10456 // what this test is all about. Make sure it happens correctly. |
| 10114 EXPECT_EQ("https", request_url.scheme()); | 10457 EXPECT_EQ("https", request_url.scheme()); |
| 10115 EXPECT_EQ("www.google.com", request_url.host()); | 10458 EXPECT_EQ("www.google.com", request_url.host()); |
| 10116 | 10459 |
| 10117 LoadTimingInfo load_timing_info; | 10460 LoadTimingInfo load_timing_info; |
| 10118 EXPECT_TRUE(trans_2->GetLoadTimingInfo(&load_timing_info)); | 10461 EXPECT_TRUE(trans_2->GetLoadTimingInfo(&load_timing_info)); |
| 10119 TestLoadTimingNotReusedWithPac(load_timing_info, | 10462 TestLoadTimingNotReusedWithPac(load_timing_info, |
| 10120 CONNECT_TIMING_HAS_SSL_TIMES); | 10463 CONNECT_TIMING_HAS_SSL_TIMES); |
| 10121 } | 10464 } |
| 10122 | 10465 |
| 10123 // Test that if we cancel the transaction as the connection is completing, that | 10466 // Test that if we cancel the transaction as the connection is completing, that |
| 10124 // everything tears down correctly. | 10467 // everything tears down correctly. |
| 10125 TEST_P(HttpNetworkTransactionTest, SimpleCancel) { | 10468 TEST_P(HttpNetworkTransactionTest, SimpleCancel) { |
| 10126 // Setup everything about the connection to complete synchronously, so that | 10469 // Setup everything about the connection to complete synchronously, so that |
| 10127 // after calling HttpNetworkTransaction::Start, the only thing we're waiting | 10470 // after calling HttpNetworkTransaction::Start, the only thing we're waiting |
| 10128 // for is the callback from the HttpStreamRequest. | 10471 // for is the callback from the HttpStreamRequest. |
| 10129 // Then cancel the transaction. | 10472 // Then cancel the transaction. |
| 10130 // Verify that we don't crash. | 10473 // Verify that we don't crash. |
| 10131 MockConnect mock_connect(SYNCHRONOUS, OK); | 10474 MockConnect mock_connect(SYNCHRONOUS, OK); |
| 10132 MockRead data_reads[] = { | 10475 MockRead data_reads[] = { |
| 10133 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), | 10476 MockRead(SYNCHRONOUS, "HTTP/1.0 200 OK\r\n\r\n"), |
| 10134 MockRead(SYNCHRONOUS, "hello world"), | 10477 MockRead(SYNCHRONOUS, "hello world"), MockRead(SYNCHRONOUS, OK), |
| 10135 MockRead(SYNCHRONOUS, OK), | |
| 10136 }; | 10478 }; |
| 10137 | 10479 |
| 10138 HttpRequestInfo request; | 10480 HttpRequestInfo request; |
| 10139 request.method = "GET"; | 10481 request.method = "GET"; |
| 10140 request.url = GURL("http://www.google.com/"); | 10482 request.url = GURL("http://www.google.com/"); |
| 10141 request.load_flags = 0; | 10483 request.load_flags = 0; |
| 10142 | 10484 |
| 10143 session_deps_.host_resolver->set_synchronous_mode(true); | 10485 session_deps_.host_resolver->set_synchronous_mode(true); |
| 10144 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10486 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10145 scoped_ptr<HttpTransaction> trans( | 10487 scoped_ptr<HttpTransaction> trans( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 10165 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 10507 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
| 10166 CapturingBoundNetLog log; | 10508 CapturingBoundNetLog log; |
| 10167 session_deps_.net_log = log.bound().net_log(); | 10509 session_deps_.net_log = log.bound().net_log(); |
| 10168 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10510 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10169 | 10511 |
| 10170 HttpRequestInfo request; | 10512 HttpRequestInfo request; |
| 10171 request.method = "GET"; | 10513 request.method = "GET"; |
| 10172 request.url = GURL("http://www.google.com/"); | 10514 request.url = GURL("http://www.google.com/"); |
| 10173 | 10515 |
| 10174 MockWrite data_writes1[] = { | 10516 MockWrite data_writes1[] = { |
| 10175 MockWrite("GET http://www.google.com/ HTTP/1.1\r\n" | 10517 MockWrite( |
| 10176 "Host: www.google.com\r\n" | 10518 "GET http://www.google.com/ HTTP/1.1\r\n" |
| 10177 "Proxy-Connection: keep-alive\r\n\r\n"), | 10519 "Host: www.google.com\r\n" |
| 10520 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 10178 }; | 10521 }; |
| 10179 | 10522 |
| 10180 MockRead data_reads1[] = { | 10523 MockRead data_reads1[] = { |
| 10181 MockRead("HTTP/1.1 200 OK\r\n"), | 10524 MockRead("HTTP/1.1 200 OK\r\n"), |
| 10182 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 10525 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 10183 MockRead("Content-Length: 100\r\n\r\n"), | 10526 MockRead("Content-Length: 100\r\n\r\n"), MockRead(SYNCHRONOUS, OK), |
| 10184 MockRead(SYNCHRONOUS, OK), | |
| 10185 }; | 10527 }; |
| 10186 | 10528 |
| 10187 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 10529 StaticSocketDataProvider data1(data_reads1, |
| 10188 data_writes1, arraysize(data_writes1)); | 10530 arraysize(data_reads1), |
| 10531 data_writes1, |
| 10532 arraysize(data_writes1)); |
| 10189 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 10533 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 10190 | 10534 |
| 10191 TestCompletionCallback callback1; | 10535 TestCompletionCallback callback1; |
| 10192 | 10536 |
| 10193 scoped_ptr<HttpTransaction> trans( | 10537 scoped_ptr<HttpTransaction> trans( |
| 10194 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10538 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10195 | 10539 |
| 10196 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 10540 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 10197 EXPECT_EQ(ERR_IO_PENDING, rv); | 10541 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10198 | 10542 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 10221 CapturingBoundNetLog log; | 10565 CapturingBoundNetLog log; |
| 10222 session_deps_.net_log = log.bound().net_log(); | 10566 session_deps_.net_log = log.bound().net_log(); |
| 10223 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10567 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10224 | 10568 |
| 10225 HttpRequestInfo request; | 10569 HttpRequestInfo request; |
| 10226 request.method = "GET"; | 10570 request.method = "GET"; |
| 10227 request.url = GURL("https://www.google.com/"); | 10571 request.url = GURL("https://www.google.com/"); |
| 10228 | 10572 |
| 10229 // Since we have proxy, should try to establish tunnel. | 10573 // Since we have proxy, should try to establish tunnel. |
| 10230 MockWrite data_writes1[] = { | 10574 MockWrite data_writes1[] = { |
| 10231 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 10575 MockWrite( |
| 10232 "Host: www.google.com\r\n" | 10576 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 10233 "Proxy-Connection: keep-alive\r\n\r\n"), | 10577 "Host: www.google.com\r\n" |
| 10234 | 10578 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 10235 MockWrite("GET / HTTP/1.1\r\n" | 10579 MockWrite( |
| 10236 "Host: www.google.com\r\n" | 10580 "GET / HTTP/1.1\r\n" |
| 10237 "Connection: keep-alive\r\n\r\n"), | 10581 "Host: www.google.com\r\n" |
| 10582 "Connection: keep-alive\r\n\r\n"), |
| 10238 }; | 10583 }; |
| 10239 | 10584 |
| 10240 MockRead data_reads1[] = { | 10585 MockRead data_reads1[] = { |
| 10241 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 10586 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 10242 | 10587 MockRead("HTTP/1.1 200 OK\r\n"), |
| 10243 MockRead("HTTP/1.1 200 OK\r\n"), | 10588 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 10244 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 10589 MockRead("Content-Length: 100\r\n\r\n"), |
| 10245 MockRead("Content-Length: 100\r\n\r\n"), | 10590 MockRead(SYNCHRONOUS, OK), |
| 10246 MockRead(SYNCHRONOUS, OK), | |
| 10247 }; | 10591 }; |
| 10248 | 10592 |
| 10249 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 10593 StaticSocketDataProvider data1(data_reads1, |
| 10250 data_writes1, arraysize(data_writes1)); | 10594 arraysize(data_reads1), |
| 10595 data_writes1, |
| 10596 arraysize(data_writes1)); |
| 10251 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 10597 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 10252 SSLSocketDataProvider ssl(ASYNC, OK); | 10598 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10253 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10599 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10254 | 10600 |
| 10255 TestCompletionCallback callback1; | 10601 TestCompletionCallback callback1; |
| 10256 | 10602 |
| 10257 scoped_ptr<HttpTransaction> trans( | 10603 scoped_ptr<HttpTransaction> trans( |
| 10258 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10604 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10259 | 10605 |
| 10260 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 10606 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 10261 EXPECT_EQ(ERR_IO_PENDING, rv); | 10607 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10262 | 10608 |
| 10263 rv = callback1.WaitForResult(); | 10609 rv = callback1.WaitForResult(); |
| 10264 EXPECT_EQ(OK, rv); | 10610 EXPECT_EQ(OK, rv); |
| 10265 net::CapturingNetLog::CapturedEntryList entries; | 10611 net::CapturingNetLog::CapturedEntryList entries; |
| 10266 log.GetEntries(&entries); | 10612 log.GetEntries(&entries); |
| 10267 size_t pos = ExpectLogContainsSomewhere( | 10613 size_t pos = ExpectLogContainsSomewhere( |
| 10268 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 10614 entries, |
| 10615 0, |
| 10616 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 10269 NetLog::PHASE_NONE); | 10617 NetLog::PHASE_NONE); |
| 10270 ExpectLogContainsSomewhere( | 10618 ExpectLogContainsSomewhere( |
| 10271 entries, pos, | 10619 entries, |
| 10620 pos, |
| 10272 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 10621 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 10273 NetLog::PHASE_NONE); | 10622 NetLog::PHASE_NONE); |
| 10274 | 10623 |
| 10275 const HttpResponseInfo* response = trans->GetResponseInfo(); | 10624 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 10276 ASSERT_TRUE(response != NULL); | 10625 ASSERT_TRUE(response != NULL); |
| 10277 | 10626 |
| 10278 EXPECT_TRUE(response->headers->IsKeepAlive()); | 10627 EXPECT_TRUE(response->headers->IsKeepAlive()); |
| 10279 EXPECT_EQ(200, response->headers->response_code()); | 10628 EXPECT_EQ(200, response->headers->response_code()); |
| 10280 EXPECT_EQ(100, response->headers->GetContentLength()); | 10629 EXPECT_EQ(100, response->headers->GetContentLength()); |
| 10281 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); | 10630 EXPECT_TRUE(HttpVersion(1, 1) == response->headers->GetHttpVersion()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 10294 CapturingBoundNetLog log; | 10643 CapturingBoundNetLog log; |
| 10295 session_deps_.net_log = log.bound().net_log(); | 10644 session_deps_.net_log = log.bound().net_log(); |
| 10296 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10645 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10297 | 10646 |
| 10298 HttpRequestInfo request; | 10647 HttpRequestInfo request; |
| 10299 request.method = "GET"; | 10648 request.method = "GET"; |
| 10300 request.url = GURL("https://www.google.com/"); | 10649 request.url = GURL("https://www.google.com/"); |
| 10301 | 10650 |
| 10302 // Since we have proxy, should try to establish tunnel. | 10651 // Since we have proxy, should try to establish tunnel. |
| 10303 MockWrite data_writes1[] = { | 10652 MockWrite data_writes1[] = { |
| 10304 MockWrite("CONNECT www.google.com:443 HTTP/1.1\r\n" | 10653 MockWrite( |
| 10305 "Host: www.google.com\r\n" | 10654 "CONNECT www.google.com:443 HTTP/1.1\r\n" |
| 10306 "Proxy-Connection: keep-alive\r\n\r\n"), | 10655 "Host: www.google.com\r\n" |
| 10307 | 10656 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 10308 MockWrite("GET / HTTP/1.1\r\n" | 10657 MockWrite( |
| 10309 "Host: www.google.com\r\n" | 10658 "GET / HTTP/1.1\r\n" |
| 10310 "Connection: keep-alive\r\n\r\n"), | 10659 "Host: www.google.com\r\n" |
| 10660 "Connection: keep-alive\r\n\r\n"), |
| 10311 }; | 10661 }; |
| 10312 | 10662 |
| 10313 MockRead data_reads1[] = { | 10663 MockRead data_reads1[] = { |
| 10314 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 10664 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
| 10315 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), | 10665 MockRead("HTTP/1.1 200 Connection Established\r\n\r\n"), |
| 10316 MockRead(ASYNC, 0, 0), // EOF | 10666 MockRead(ASYNC, 0, 0), // EOF |
| 10317 }; | 10667 }; |
| 10318 | 10668 |
| 10319 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), | 10669 StaticSocketDataProvider data1(data_reads1, |
| 10320 data_writes1, arraysize(data_writes1)); | 10670 arraysize(data_reads1), |
| 10671 data_writes1, |
| 10672 arraysize(data_writes1)); |
| 10321 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 10673 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 10322 SSLSocketDataProvider ssl(ASYNC, OK); | 10674 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10323 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10675 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10324 | 10676 |
| 10325 TestCompletionCallback callback1; | 10677 TestCompletionCallback callback1; |
| 10326 | 10678 |
| 10327 scoped_ptr<HttpTransaction> trans( | 10679 scoped_ptr<HttpTransaction> trans( |
| 10328 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10680 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10329 | 10681 |
| 10330 int rv = trans->Start(&request, callback1.callback(), log.bound()); | 10682 int rv = trans->Start(&request, callback1.callback(), log.bound()); |
| 10331 EXPECT_EQ(ERR_IO_PENDING, rv); | 10683 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10332 | 10684 |
| 10333 rv = callback1.WaitForResult(); | 10685 rv = callback1.WaitForResult(); |
| 10334 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); | 10686 EXPECT_EQ(ERR_EMPTY_RESPONSE, rv); |
| 10335 net::CapturingNetLog::CapturedEntryList entries; | 10687 net::CapturingNetLog::CapturedEntryList entries; |
| 10336 log.GetEntries(&entries); | 10688 log.GetEntries(&entries); |
| 10337 size_t pos = ExpectLogContainsSomewhere( | 10689 size_t pos = ExpectLogContainsSomewhere( |
| 10338 entries, 0, NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, | 10690 entries, |
| 10691 0, |
| 10692 NetLog::TYPE_HTTP_TRANSACTION_SEND_TUNNEL_HEADERS, |
| 10339 NetLog::PHASE_NONE); | 10693 NetLog::PHASE_NONE); |
| 10340 ExpectLogContainsSomewhere( | 10694 ExpectLogContainsSomewhere( |
| 10341 entries, pos, | 10695 entries, |
| 10696 pos, |
| 10342 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 10697 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, |
| 10343 NetLog::PHASE_NONE); | 10698 NetLog::PHASE_NONE); |
| 10344 } | 10699 } |
| 10345 | 10700 |
| 10346 // Test for crbug.com/55424. | 10701 // Test for crbug.com/55424. |
| 10347 TEST_P(HttpNetworkTransactionTest, PreconnectWithExistingSpdySession) { | 10702 TEST_P(HttpNetworkTransactionTest, PreconnectWithExistingSpdySession) { |
| 10348 scoped_ptr<SpdyFrame> req( | 10703 scoped_ptr<SpdyFrame> req( |
| 10349 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 10704 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
| 10350 MockWrite spdy_writes[] = { CreateMockWrite(*req) }; | 10705 MockWrite spdy_writes[] = {CreateMockWrite(*req)}; |
| 10351 | 10706 |
| 10352 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 10707 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 10353 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 10708 scoped_ptr<SpdyFrame> data(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10354 MockRead spdy_reads[] = { | 10709 MockRead spdy_reads[] = { |
| 10355 CreateMockRead(*resp), | 10710 CreateMockRead(*resp), CreateMockRead(*data), MockRead(ASYNC, 0, 0), |
| 10356 CreateMockRead(*data), | |
| 10357 MockRead(ASYNC, 0, 0), | |
| 10358 }; | 10711 }; |
| 10359 | 10712 |
| 10360 DelayedSocketData spdy_data( | 10713 DelayedSocketData spdy_data( |
| 10361 1, // wait for one write to finish before reading. | 10714 1, // wait for one write to finish before reading. |
| 10362 spdy_reads, arraysize(spdy_reads), | 10715 spdy_reads, |
| 10363 spdy_writes, arraysize(spdy_writes)); | 10716 arraysize(spdy_reads), |
| 10717 spdy_writes, |
| 10718 arraysize(spdy_writes)); |
| 10364 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 10719 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 10365 | 10720 |
| 10366 SSLSocketDataProvider ssl(ASYNC, OK); | 10721 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10367 ssl.SetNextProto(GetParam()); | 10722 ssl.SetNextProto(GetParam()); |
| 10368 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 10723 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10369 | 10724 |
| 10370 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10725 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10371 | 10726 |
| 10372 // Set up an initial SpdySession in the pool to reuse. | 10727 // Set up an initial SpdySession in the pool to reuse. |
| 10373 HostPortPair host_port_pair("www.google.com", 443); | 10728 HostPortPair host_port_pair("www.google.com", 443); |
| 10374 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 10729 SpdySessionKey key( |
| 10375 PRIVACY_MODE_DISABLED); | 10730 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 10376 base::WeakPtr<SpdySession> spdy_session = | 10731 base::WeakPtr<SpdySession> spdy_session = |
| 10377 CreateInsecureSpdySession(session, key, BoundNetLog()); | 10732 CreateInsecureSpdySession(session, key, BoundNetLog()); |
| 10378 | 10733 |
| 10379 HttpRequestInfo request; | 10734 HttpRequestInfo request; |
| 10380 request.method = "GET"; | 10735 request.method = "GET"; |
| 10381 request.url = GURL("https://www.google.com/"); | 10736 request.url = GURL("https://www.google.com/"); |
| 10382 request.load_flags = 0; | 10737 request.load_flags = 0; |
| 10383 | 10738 |
| 10384 // This is the important line that marks this as a preconnect. | 10739 // This is the important line that marks this as a preconnect. |
| 10385 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; | 10740 request.motivation = HttpRequestInfo::PRECONNECT_MOTIVATED; |
| 10386 | 10741 |
| 10387 scoped_ptr<HttpTransaction> trans( | 10742 scoped_ptr<HttpTransaction> trans( |
| 10388 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10743 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10389 | 10744 |
| 10390 TestCompletionCallback callback; | 10745 TestCompletionCallback callback; |
| 10391 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 10746 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 10392 EXPECT_EQ(ERR_IO_PENDING, rv); | 10747 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 10393 EXPECT_EQ(OK, callback.WaitForResult()); | 10748 EXPECT_EQ(OK, callback.WaitForResult()); |
| 10394 } | 10749 } |
| 10395 | 10750 |
| 10396 // Given a net error, cause that error to be returned from the first Write() | 10751 // Given a net error, cause that error to be returned from the first Write() |
| 10397 // call and verify that the HttpTransaction fails with that error. | 10752 // call and verify that the HttpTransaction fails with that error. |
| 10398 void HttpNetworkTransactionTest::CheckErrorIsPassedBack( | 10753 void HttpNetworkTransactionTest::CheckErrorIsPassedBack(int error, |
| 10399 int error, IoMode mode) { | 10754 IoMode mode) { |
| 10400 net::HttpRequestInfo request_info; | 10755 net::HttpRequestInfo request_info; |
| 10401 request_info.url = GURL("https://www.example.com/"); | 10756 request_info.url = GURL("https://www.example.com/"); |
| 10402 request_info.method = "GET"; | 10757 request_info.method = "GET"; |
| 10403 request_info.load_flags = net::LOAD_NORMAL; | 10758 request_info.load_flags = net::LOAD_NORMAL; |
| 10404 | 10759 |
| 10405 SSLSocketDataProvider ssl_data(mode, OK); | 10760 SSLSocketDataProvider ssl_data(mode, OK); |
| 10406 net::MockWrite data_writes[] = { | 10761 net::MockWrite data_writes[] = { |
| 10407 net::MockWrite(mode, error), | 10762 net::MockWrite(mode, error), |
| 10408 }; | 10763 }; |
| 10409 net::StaticSocketDataProvider data(NULL, 0, | 10764 net::StaticSocketDataProvider data( |
| 10410 data_writes, arraysize(data_writes)); | 10765 NULL, 0, data_writes, arraysize(data_writes)); |
| 10411 session_deps_.socket_factory->AddSocketDataProvider(&data); | 10766 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 10412 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data); | 10767 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data); |
| 10413 | 10768 |
| 10414 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 10769 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10415 scoped_ptr<HttpTransaction> trans( | 10770 scoped_ptr<HttpTransaction> trans( |
| 10416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 10771 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10417 | 10772 |
| 10418 TestCompletionCallback callback; | 10773 TestCompletionCallback callback; |
| 10419 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); | 10774 int rv = trans->Start(&request_info, callback.callback(), net::BoundNetLog()); |
| 10420 if (rv == net::ERR_IO_PENDING) | 10775 if (rv == net::ERR_IO_PENDING) |
| 10421 rv = callback.WaitForResult(); | 10776 rv = callback.WaitForResult(); |
| 10422 ASSERT_EQ(error, rv); | 10777 ASSERT_EQ(error, rv); |
| 10423 } | 10778 } |
| 10424 | 10779 |
| 10425 TEST_P(HttpNetworkTransactionTest, SSLWriteCertError) { | 10780 TEST_P(HttpNetworkTransactionTest, SSLWriteCertError) { |
| 10426 // Just check a grab bag of cert errors. | 10781 // Just check a grab bag of cert errors. |
| 10427 static const int kErrors[] = { | 10782 static const int kErrors[] = { |
| 10428 ERR_CERT_COMMON_NAME_INVALID, | 10783 ERR_CERT_COMMON_NAME_INVALID, ERR_CERT_AUTHORITY_INVALID, |
| 10429 ERR_CERT_AUTHORITY_INVALID, | 10784 ERR_CERT_DATE_INVALID, |
| 10430 ERR_CERT_DATE_INVALID, | |
| 10431 }; | 10785 }; |
| 10432 for (size_t i = 0; i < arraysize(kErrors); i++) { | 10786 for (size_t i = 0; i < arraysize(kErrors); i++) { |
| 10433 CheckErrorIsPassedBack(kErrors[i], ASYNC); | 10787 CheckErrorIsPassedBack(kErrors[i], ASYNC); |
| 10434 CheckErrorIsPassedBack(kErrors[i], SYNCHRONOUS); | 10788 CheckErrorIsPassedBack(kErrors[i], SYNCHRONOUS); |
| 10435 } | 10789 } |
| 10436 } | 10790 } |
| 10437 | 10791 |
| 10438 // Ensure that a client certificate is removed from the SSL client auth | 10792 // Ensure that a client certificate is removed from the SSL client auth |
| 10439 // cache when: | 10793 // cache when: |
| 10440 // 1) No proxy is involved. | 10794 // 1) No proxy is involved. |
| 10441 // 2) TLS False Start is disabled. | 10795 // 2) TLS False Start is disabled. |
| 10442 // 3) The initial TLS handshake requests a client certificate. | 10796 // 3) The initial TLS handshake requests a client certificate. |
| 10443 // 4) The client supplies an invalid/unacceptable certificate. | 10797 // 4) The client supplies an invalid/unacceptable certificate. |
| 10444 TEST_P(HttpNetworkTransactionTest, | 10798 TEST_P(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_NoFalseStart) { |
| 10445 ClientAuthCertCache_Direct_NoFalseStart) { | |
| 10446 net::HttpRequestInfo request_info; | 10799 net::HttpRequestInfo request_info; |
| 10447 request_info.url = GURL("https://www.example.com/"); | 10800 request_info.url = GURL("https://www.example.com/"); |
| 10448 request_info.method = "GET"; | 10801 request_info.method = "GET"; |
| 10449 request_info.load_flags = net::LOAD_NORMAL; | 10802 request_info.load_flags = net::LOAD_NORMAL; |
| 10450 | 10803 |
| 10451 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 10804 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
| 10452 cert_request->host_and_port = HostPortPair("www.example.com", 443); | 10805 cert_request->host_and_port = HostPortPair("www.example.com", 443); |
| 10453 | 10806 |
| 10454 // [ssl_]data1 contains the data for the first SSL handshake. When a | 10807 // [ssl_]data1 contains the data for the first SSL handshake. When a |
| 10455 // CertificateRequest is received for the first time, the handshake will | 10808 // CertificateRequest is received for the first time, the handshake will |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10544 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( | 10897 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup( |
| 10545 HostPortPair("www.example.com", 443), &client_cert)); | 10898 HostPortPair("www.example.com", 443), &client_cert)); |
| 10546 } | 10899 } |
| 10547 | 10900 |
| 10548 // Ensure that a client certificate is removed from the SSL client auth | 10901 // Ensure that a client certificate is removed from the SSL client auth |
| 10549 // cache when: | 10902 // cache when: |
| 10550 // 1) No proxy is involved. | 10903 // 1) No proxy is involved. |
| 10551 // 2) TLS False Start is enabled. | 10904 // 2) TLS False Start is enabled. |
| 10552 // 3) The initial TLS handshake requests a client certificate. | 10905 // 3) The initial TLS handshake requests a client certificate. |
| 10553 // 4) The client supplies an invalid/unacceptable certificate. | 10906 // 4) The client supplies an invalid/unacceptable certificate. |
| 10554 TEST_P(HttpNetworkTransactionTest, | 10907 TEST_P(HttpNetworkTransactionTest, ClientAuthCertCache_Direct_FalseStart) { |
| 10555 ClientAuthCertCache_Direct_FalseStart) { | |
| 10556 net::HttpRequestInfo request_info; | 10908 net::HttpRequestInfo request_info; |
| 10557 request_info.url = GURL("https://www.example.com/"); | 10909 request_info.url = GURL("https://www.example.com/"); |
| 10558 request_info.method = "GET"; | 10910 request_info.method = "GET"; |
| 10559 request_info.load_flags = net::LOAD_NORMAL; | 10911 request_info.load_flags = net::LOAD_NORMAL; |
| 10560 | 10912 |
| 10561 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); | 10913 scoped_refptr<SSLCertRequestInfo> cert_request(new SSLCertRequestInfo()); |
| 10562 cert_request->host_and_port = HostPortPair("www.example.com", 443); | 10914 cert_request->host_and_port = HostPortPair("www.example.com", 443); |
| 10563 | 10915 |
| 10564 // When TLS False Start is used, SSLClientSocket::Connect() calls will | 10916 // When TLS False Start is used, SSLClientSocket::Connect() calls will |
| 10565 // return successfully after reading up to the peer's Certificate message. | 10917 // return successfully after reading up to the peer's Certificate message. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 10586 // when the peer requests the certificate. Instead, the handshake will | 10938 // when the peer requests the certificate. Instead, the handshake will |
| 10587 // artificially succeed, allowing the caller to write the HTTP request to | 10939 // artificially succeed, allowing the caller to write the HTTP request to |
| 10588 // the socket. The handshake messages are not processed until Read() is | 10940 // the socket. The handshake messages are not processed until Read() is |
| 10589 // called, which then detects that the handshake was aborted, due to the | 10941 // called, which then detects that the handshake was aborted, due to the |
| 10590 // peer sending a handshake_failure because it requires a client | 10942 // peer sending a handshake_failure because it requires a client |
| 10591 // certificate. | 10943 // certificate. |
| 10592 SSLSocketDataProvider ssl_data2(ASYNC, net::OK); | 10944 SSLSocketDataProvider ssl_data2(ASYNC, net::OK); |
| 10593 ssl_data2.cert_request_info = cert_request.get(); | 10945 ssl_data2.cert_request_info = cert_request.get(); |
| 10594 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data2); | 10946 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data2); |
| 10595 net::MockRead data2_reads[] = { | 10947 net::MockRead data2_reads[] = { |
| 10596 net::MockRead(ASYNC /* async */, net::ERR_SSL_PROTOCOL_ERROR), | 10948 net::MockRead(ASYNC /* async */, net::ERR_SSL_PROTOCOL_ERROR), |
| 10597 }; | 10949 }; |
| 10598 net::StaticSocketDataProvider data2( | 10950 net::StaticSocketDataProvider data2( |
| 10599 data2_reads, arraysize(data2_reads), NULL, 0); | 10951 data2_reads, arraysize(data2_reads), NULL, 0); |
| 10600 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 10952 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 10601 | 10953 |
| 10602 // As described in ClientAuthCertCache_Direct_NoFalseStart, [ssl_]data3 is | 10954 // As described in ClientAuthCertCache_Direct_NoFalseStart, [ssl_]data3 is |
| 10603 // the data for the SSL handshake once the TLSv1.1 connection falls back to | 10955 // the data for the SSL handshake once the TLSv1.1 connection falls back to |
| 10604 // TLSv1. It has the same behaviour as [ssl_]data2. | 10956 // TLSv1. It has the same behaviour as [ssl_]data2. |
| 10605 SSLSocketDataProvider ssl_data3(ASYNC, net::OK); | 10957 SSLSocketDataProvider ssl_data3(ASYNC, net::OK); |
| 10606 ssl_data3.cert_request_info = cert_request.get(); | 10958 ssl_data3.cert_request_info = cert_request.get(); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10692 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data1); | 11044 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data1); |
| 10693 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); | 11045 net::StaticSocketDataProvider data1(NULL, 0, NULL, 0); |
| 10694 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 11046 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 10695 | 11047 |
| 10696 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 11048 SSLSocketDataProvider ssl_data2(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
| 10697 ssl_data2.cert_request_info = cert_request.get(); | 11049 ssl_data2.cert_request_info = cert_request.get(); |
| 10698 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data2); | 11050 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data2); |
| 10699 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); | 11051 net::StaticSocketDataProvider data2(NULL, 0, NULL, 0); |
| 10700 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 11052 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 10701 | 11053 |
| 10702 // TODO(wtc): find out why this unit test doesn't need [ssl_]data3. | 11054 // TODO(wtc): find out why this unit test doesn't need [ssl_]data3. |
| 10703 #if 0 | 11055 #if 0 |
| 10704 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); | 11056 SSLSocketDataProvider ssl_data3(ASYNC, net::ERR_SSL_PROTOCOL_ERROR); |
| 10705 ssl_data3.cert_request_info = cert_request.get(); | 11057 ssl_data3.cert_request_info = cert_request.get(); |
| 10706 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data3); | 11058 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data3); |
| 10707 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); | 11059 net::StaticSocketDataProvider data3(NULL, 0, NULL, 0); |
| 10708 session_deps_.socket_factory->AddSocketDataProvider(&data3); | 11060 session_deps_.socket_factory->AddSocketDataProvider(&data3); |
| 10709 #endif | 11061 #endif |
| 10710 | 11062 |
| 10711 net::HttpRequestInfo requests[2]; | 11063 net::HttpRequestInfo requests[2]; |
| 10712 requests[0].url = GURL("https://www.example.com/"); | 11064 requests[0].url = GURL("https://www.example.com/"); |
| 10713 requests[0].method = "GET"; | 11065 requests[0].method = "GET"; |
| 10714 requests[0].load_flags = net::LOAD_NORMAL; | 11066 requests[0].load_flags = net::LOAD_NORMAL; |
| 10715 | 11067 |
| 10716 requests[1].url = GURL("http://www.example.com/"); | 11068 requests[1].url = GURL("http://www.example.com/"); |
| 10717 requests[1].method = "GET"; | 11069 requests[1].method = "GET"; |
| 10718 requests[1].load_flags = net::LOAD_NORMAL; | 11070 requests[1].load_flags = net::LOAD_NORMAL; |
| 10719 | 11071 |
| 10720 for (size_t i = 0; i < arraysize(requests); ++i) { | 11072 for (size_t i = 0; i < arraysize(requests); ++i) { |
| 10721 session_deps_.socket_factory->ResetNextMockIndexes(); | 11073 session_deps_.socket_factory->ResetNextMockIndexes(); |
| 10722 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11074 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 10723 scoped_ptr<HttpNetworkTransaction> trans( | 11075 scoped_ptr<HttpNetworkTransaction> trans( |
| 10724 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 11076 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 10725 | 11077 |
| 10726 // Begin the SSL handshake with the proxy. | 11078 // Begin the SSL handshake with the proxy. |
| 10727 TestCompletionCallback callback; | 11079 TestCompletionCallback callback; |
| 10728 int rv = trans->Start( | 11080 int rv = |
| 10729 &requests[i], callback.callback(), net::BoundNetLog()); | 11081 trans->Start(&requests[i], callback.callback(), net::BoundNetLog()); |
| 10730 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 11082 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 10731 | 11083 |
| 10732 // Complete the SSL handshake, which should abort due to requiring a | 11084 // Complete the SSL handshake, which should abort due to requiring a |
| 10733 // client certificate. | 11085 // client certificate. |
| 10734 rv = callback.WaitForResult(); | 11086 rv = callback.WaitForResult(); |
| 10735 ASSERT_EQ(net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); | 11087 ASSERT_EQ(net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED, rv); |
| 10736 | 11088 |
| 10737 // Indicate that no certificate should be supplied. From the perspective | 11089 // Indicate that no certificate should be supplied. From the perspective |
| 10738 // of SSLClientCertCache, NULL is just as meaningful as a real | 11090 // of SSLClientCertCache, NULL is just as meaningful as a real |
| 10739 // certificate, so this is the same as supply a | 11091 // certificate, so this is the same as supply a |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10795 | 11147 |
| 10796 SSLSocketDataProvider ssl(ASYNC, OK); | 11148 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10797 ssl.SetNextProto(GetParam()); | 11149 ssl.SetNextProto(GetParam()); |
| 10798 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11150 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10799 | 11151 |
| 10800 scoped_ptr<SpdyFrame> host1_req( | 11152 scoped_ptr<SpdyFrame> host1_req( |
| 10801 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 11153 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
| 10802 scoped_ptr<SpdyFrame> host2_req( | 11154 scoped_ptr<SpdyFrame> host2_req( |
| 10803 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 11155 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
| 10804 MockWrite spdy_writes[] = { | 11156 MockWrite spdy_writes[] = { |
| 10805 CreateMockWrite(*host1_req, 1), | 11157 CreateMockWrite(*host1_req, 1), CreateMockWrite(*host2_req, 4), |
| 10806 CreateMockWrite(*host2_req, 4), | |
| 10807 }; | 11158 }; |
| 10808 scoped_ptr<SpdyFrame> host1_resp( | 11159 scoped_ptr<SpdyFrame> host1_resp( |
| 10809 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11160 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 10810 scoped_ptr<SpdyFrame> host1_resp_body( | 11161 scoped_ptr<SpdyFrame> host1_resp_body( |
| 10811 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11162 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10812 scoped_ptr<SpdyFrame> host2_resp( | 11163 scoped_ptr<SpdyFrame> host2_resp( |
| 10813 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 11164 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 10814 scoped_ptr<SpdyFrame> host2_resp_body( | 11165 scoped_ptr<SpdyFrame> host2_resp_body( |
| 10815 spdy_util_.ConstructSpdyBodyFrame(3, true)); | 11166 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 10816 MockRead spdy_reads[] = { | 11167 MockRead spdy_reads[] = { |
| 10817 CreateMockRead(*host1_resp, 2), | 11168 CreateMockRead(*host1_resp, 2), CreateMockRead(*host1_resp_body, 3), |
| 10818 CreateMockRead(*host1_resp_body, 3), | 11169 CreateMockRead(*host2_resp, 5), CreateMockRead(*host2_resp_body, 6), |
| 10819 CreateMockRead(*host2_resp, 5), | 11170 MockRead(ASYNC, 0, 7), |
| 10820 CreateMockRead(*host2_resp_body, 6), | |
| 10821 MockRead(ASYNC, 0, 7), | |
| 10822 }; | 11171 }; |
| 10823 | 11172 |
| 10824 IPAddressNumber ip; | 11173 IPAddressNumber ip; |
| 10825 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 11174 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
| 10826 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 11175 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
| 10827 MockConnect connect(ASYNC, OK, peer_addr); | 11176 MockConnect connect(ASYNC, OK, peer_addr); |
| 10828 OrderedSocketData spdy_data( | 11177 OrderedSocketData spdy_data(connect, |
| 10829 connect, | 11178 spdy_reads, |
| 10830 spdy_reads, arraysize(spdy_reads), | 11179 arraysize(spdy_reads), |
| 10831 spdy_writes, arraysize(spdy_writes)); | 11180 spdy_writes, |
| 11181 arraysize(spdy_writes)); |
| 10832 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11182 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 10833 | 11183 |
| 10834 TestCompletionCallback callback; | 11184 TestCompletionCallback callback; |
| 10835 HttpRequestInfo request1; | 11185 HttpRequestInfo request1; |
| 10836 request1.method = "GET"; | 11186 request1.method = "GET"; |
| 10837 request1.url = GURL("https://www.google.com/"); | 11187 request1.url = GURL("https://www.google.com/"); |
| 10838 request1.load_flags = 0; | 11188 request1.load_flags = 0; |
| 10839 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 11189 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 10840 | 11190 |
| 10841 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 11191 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10898 | 11248 |
| 10899 SSLSocketDataProvider ssl(ASYNC, OK); | 11249 SSLSocketDataProvider ssl(ASYNC, OK); |
| 10900 ssl.SetNextProto(GetParam()); | 11250 ssl.SetNextProto(GetParam()); |
| 10901 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11251 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 10902 | 11252 |
| 10903 scoped_ptr<SpdyFrame> host1_req( | 11253 scoped_ptr<SpdyFrame> host1_req( |
| 10904 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 11254 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
| 10905 scoped_ptr<SpdyFrame> host2_req( | 11255 scoped_ptr<SpdyFrame> host2_req( |
| 10906 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 11256 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
| 10907 MockWrite spdy_writes[] = { | 11257 MockWrite spdy_writes[] = { |
| 10908 CreateMockWrite(*host1_req, 1), | 11258 CreateMockWrite(*host1_req, 1), CreateMockWrite(*host2_req, 4), |
| 10909 CreateMockWrite(*host2_req, 4), | |
| 10910 }; | 11259 }; |
| 10911 scoped_ptr<SpdyFrame> host1_resp( | 11260 scoped_ptr<SpdyFrame> host1_resp( |
| 10912 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11261 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 10913 scoped_ptr<SpdyFrame> host1_resp_body( | 11262 scoped_ptr<SpdyFrame> host1_resp_body( |
| 10914 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11263 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 10915 scoped_ptr<SpdyFrame> host2_resp( | 11264 scoped_ptr<SpdyFrame> host2_resp( |
| 10916 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 11265 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 10917 scoped_ptr<SpdyFrame> host2_resp_body( | 11266 scoped_ptr<SpdyFrame> host2_resp_body( |
| 10918 spdy_util_.ConstructSpdyBodyFrame(3, true)); | 11267 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 10919 MockRead spdy_reads[] = { | 11268 MockRead spdy_reads[] = { |
| 10920 CreateMockRead(*host1_resp, 2), | 11269 CreateMockRead(*host1_resp, 2), CreateMockRead(*host1_resp_body, 3), |
| 10921 CreateMockRead(*host1_resp_body, 3), | 11270 CreateMockRead(*host2_resp, 5), CreateMockRead(*host2_resp_body, 6), |
| 10922 CreateMockRead(*host2_resp, 5), | 11271 MockRead(ASYNC, 0, 7), |
| 10923 CreateMockRead(*host2_resp_body, 6), | |
| 10924 MockRead(ASYNC, 0, 7), | |
| 10925 }; | 11272 }; |
| 10926 | 11273 |
| 10927 IPAddressNumber ip; | 11274 IPAddressNumber ip; |
| 10928 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 11275 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
| 10929 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 11276 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
| 10930 MockConnect connect(ASYNC, OK, peer_addr); | 11277 MockConnect connect(ASYNC, OK, peer_addr); |
| 10931 OrderedSocketData spdy_data( | 11278 OrderedSocketData spdy_data(connect, |
| 10932 connect, | 11279 spdy_reads, |
| 10933 spdy_reads, arraysize(spdy_reads), | 11280 arraysize(spdy_reads), |
| 10934 spdy_writes, arraysize(spdy_writes)); | 11281 spdy_writes, |
| 11282 arraysize(spdy_writes)); |
| 10935 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11283 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 10936 | 11284 |
| 10937 TestCompletionCallback callback; | 11285 TestCompletionCallback callback; |
| 10938 HttpRequestInfo request1; | 11286 HttpRequestInfo request1; |
| 10939 request1.method = "GET"; | 11287 request1.method = "GET"; |
| 10940 request1.url = GURL("https://www.google.com/"); | 11288 request1.url = GURL("https://www.google.com/"); |
| 10941 request1.load_flags = 0; | 11289 request1.load_flags = 0; |
| 10942 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 11290 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 10943 | 11291 |
| 10944 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 11292 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10999 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log); | 11347 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log); |
| 11000 if (rv == OK && info.host_port_pair().Equals(host_port_)) | 11348 if (rv == OK && info.host_port_pair().Equals(host_port_)) |
| 11001 host_resolver_.GetHostCache()->clear(); | 11349 host_resolver_.GetHostCache()->clear(); |
| 11002 return rv; | 11350 return rv; |
| 11003 } | 11351 } |
| 11004 | 11352 |
| 11005 virtual void CancelRequest(RequestHandle req) OVERRIDE { | 11353 virtual void CancelRequest(RequestHandle req) OVERRIDE { |
| 11006 host_resolver_.CancelRequest(req); | 11354 host_resolver_.CancelRequest(req); |
| 11007 } | 11355 } |
| 11008 | 11356 |
| 11009 MockCachingHostResolver* GetMockHostResolver() { | 11357 MockCachingHostResolver* GetMockHostResolver() { return &host_resolver_; } |
| 11010 return &host_resolver_; | |
| 11011 } | |
| 11012 | 11358 |
| 11013 private: | 11359 private: |
| 11014 MockCachingHostResolver host_resolver_; | 11360 MockCachingHostResolver host_resolver_; |
| 11015 const HostPortPair host_port_; | 11361 const HostPortPair host_port_; |
| 11016 }; | 11362 }; |
| 11017 | 11363 |
| 11018 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 | 11364 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 |
| 11019 #if defined(OS_WIN) | 11365 #if defined(OS_WIN) |
| 11020 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ | 11366 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ |
| 11021 DISABLED_UseIPConnectionPoolingWithHostCacheExpiration | 11367 DISABLED_UseIPConnectionPoolingWithHostCacheExpiration |
| 11022 #else | 11368 #else |
| 11023 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ | 11369 #define MAYBE_UseIPConnectionPoolingWithHostCacheExpiration \ |
| 11024 UseIPConnectionPoolingWithHostCacheExpiration | 11370 UseIPConnectionPoolingWithHostCacheExpiration |
| 11025 #endif | 11371 #endif |
| 11026 WRAPPED_TEST_P(HttpNetworkTransactionTest, | 11372 WRAPPED_TEST_P(HttpNetworkTransactionTest, |
| 11027 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { | 11373 MAYBE_UseIPConnectionPoolingWithHostCacheExpiration) { |
| 11028 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 . (MAYBE_ | 11374 // Times out on Win7 dbg(2) bot. http://crbug.com/124776 . (MAYBE_ |
| 11029 // prefix doesn't work with parametrized tests). | 11375 // prefix doesn't work with parametrized tests). |
| 11030 #if defined(OS_WIN) | 11376 #if defined(OS_WIN) |
| 11031 return; | 11377 return; |
| 11032 #else | 11378 #else |
| 11033 HttpStreamFactory::set_use_alternate_protocols(true); | 11379 HttpStreamFactory::set_use_alternate_protocols(true); |
| 11034 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); | 11380 HttpStreamFactory::SetNextProtos(SpdyNextProtos()); |
| 11035 | 11381 |
| 11036 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. | 11382 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. |
| 11037 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); | 11383 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); |
| 11038 HttpNetworkSession::Params params = | 11384 HttpNetworkSession::Params params = |
| 11039 SpdySessionDependencies::CreateSessionParams(&session_deps_); | 11385 SpdySessionDependencies::CreateSessionParams(&session_deps_); |
| 11040 params.host_resolver = &host_resolver; | 11386 params.host_resolver = &host_resolver; |
| 11041 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11387 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11042 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); | 11388 SpdySessionPoolPeer pool_peer(session->spdy_session_pool()); |
| 11043 pool_peer.DisableDomainAuthenticationVerification(); | 11389 pool_peer.DisableDomainAuthenticationVerification(); |
| 11044 | 11390 |
| 11045 SSLSocketDataProvider ssl(ASYNC, OK); | 11391 SSLSocketDataProvider ssl(ASYNC, OK); |
| 11046 ssl.SetNextProto(GetParam()); | 11392 ssl.SetNextProto(GetParam()); |
| 11047 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11393 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 11048 | 11394 |
| 11049 scoped_ptr<SpdyFrame> host1_req( | 11395 scoped_ptr<SpdyFrame> host1_req( |
| 11050 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); | 11396 spdy_util_.ConstructSpdyGet("https://www.google.com", false, 1, LOWEST)); |
| 11051 scoped_ptr<SpdyFrame> host2_req( | 11397 scoped_ptr<SpdyFrame> host2_req( |
| 11052 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); | 11398 spdy_util_.ConstructSpdyGet("https://www.gmail.com", false, 3, LOWEST)); |
| 11053 MockWrite spdy_writes[] = { | 11399 MockWrite spdy_writes[] = { |
| 11054 CreateMockWrite(*host1_req, 1), | 11400 CreateMockWrite(*host1_req, 1), CreateMockWrite(*host2_req, 4), |
| 11055 CreateMockWrite(*host2_req, 4), | |
| 11056 }; | 11401 }; |
| 11057 scoped_ptr<SpdyFrame> host1_resp( | 11402 scoped_ptr<SpdyFrame> host1_resp( |
| 11058 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11403 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11059 scoped_ptr<SpdyFrame> host1_resp_body( | 11404 scoped_ptr<SpdyFrame> host1_resp_body( |
| 11060 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11405 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11061 scoped_ptr<SpdyFrame> host2_resp( | 11406 scoped_ptr<SpdyFrame> host2_resp( |
| 11062 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 11407 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 11063 scoped_ptr<SpdyFrame> host2_resp_body( | 11408 scoped_ptr<SpdyFrame> host2_resp_body( |
| 11064 spdy_util_.ConstructSpdyBodyFrame(3, true)); | 11409 spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 11065 MockRead spdy_reads[] = { | 11410 MockRead spdy_reads[] = { |
| 11066 CreateMockRead(*host1_resp, 2), | 11411 CreateMockRead(*host1_resp, 2), CreateMockRead(*host1_resp_body, 3), |
| 11067 CreateMockRead(*host1_resp_body, 3), | 11412 CreateMockRead(*host2_resp, 5), CreateMockRead(*host2_resp_body, 6), |
| 11068 CreateMockRead(*host2_resp, 5), | 11413 MockRead(ASYNC, 0, 7), |
| 11069 CreateMockRead(*host2_resp_body, 6), | |
| 11070 MockRead(ASYNC, 0, 7), | |
| 11071 }; | 11414 }; |
| 11072 | 11415 |
| 11073 IPAddressNumber ip; | 11416 IPAddressNumber ip; |
| 11074 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); | 11417 ASSERT_TRUE(ParseIPLiteralToNumber("127.0.0.1", &ip)); |
| 11075 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 11418 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
| 11076 MockConnect connect(ASYNC, OK, peer_addr); | 11419 MockConnect connect(ASYNC, OK, peer_addr); |
| 11077 OrderedSocketData spdy_data( | 11420 OrderedSocketData spdy_data(connect, |
| 11078 connect, | 11421 spdy_reads, |
| 11079 spdy_reads, arraysize(spdy_reads), | 11422 arraysize(spdy_reads), |
| 11080 spdy_writes, arraysize(spdy_writes)); | 11423 spdy_writes, |
| 11424 arraysize(spdy_writes)); |
| 11081 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); | 11425 session_deps_.socket_factory->AddSocketDataProvider(&spdy_data); |
| 11082 | 11426 |
| 11083 TestCompletionCallback callback; | 11427 TestCompletionCallback callback; |
| 11084 HttpRequestInfo request1; | 11428 HttpRequestInfo request1; |
| 11085 request1.method = "GET"; | 11429 request1.method = "GET"; |
| 11086 request1.url = GURL("https://www.google.com/"); | 11430 request1.url = GURL("https://www.google.com/"); |
| 11087 request1.load_flags = 0; | 11431 request1.load_flags = 0; |
| 11088 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); | 11432 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, session.get()); |
| 11089 | 11433 |
| 11090 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); | 11434 int rv = trans1.Start(&request1, callback.callback(), BoundNetLog()); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11130 EXPECT_TRUE(response->was_fetched_via_spdy); | 11474 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 11131 EXPECT_TRUE(response->was_npn_negotiated); | 11475 EXPECT_TRUE(response->was_npn_negotiated); |
| 11132 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 11476 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
| 11133 EXPECT_EQ("hello!", response_data); | 11477 EXPECT_EQ("hello!", response_data); |
| 11134 #endif | 11478 #endif |
| 11135 } | 11479 } |
| 11136 #undef MAYBE_UseIPConnectionPoolingWithHostCacheExpiration | 11480 #undef MAYBE_UseIPConnectionPoolingWithHostCacheExpiration |
| 11137 | 11481 |
| 11138 TEST_P(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { | 11482 TEST_P(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { |
| 11139 MockRead data_reads1[] = { | 11483 MockRead data_reads1[] = { |
| 11140 MockRead(SYNCHRONOUS, ERR_PIPELINE_EVICTION), | 11484 MockRead(SYNCHRONOUS, ERR_PIPELINE_EVICTION), |
| 11141 }; | 11485 }; |
| 11142 MockRead data_reads2[] = { | 11486 MockRead data_reads2[] = { |
| 11143 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 11487 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 11144 MockRead("hello world"), | 11488 MockRead(SYNCHRONOUS, OK), |
| 11145 MockRead(SYNCHRONOUS, OK), | |
| 11146 }; | 11489 }; |
| 11147 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); | 11490 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); |
| 11148 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); | 11491 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 11149 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 11492 StaticSocketDataProvider* data[] = {&data1, &data2}; |
| 11150 | 11493 |
| 11151 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 11494 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 11152 | 11495 |
| 11153 EXPECT_EQ(OK, out.rv); | 11496 EXPECT_EQ(OK, out.rv); |
| 11154 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 11497 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 11155 EXPECT_EQ("hello world", out.response_data); | 11498 EXPECT_EQ("hello world", out.response_data); |
| 11156 } | 11499 } |
| 11157 | 11500 |
| 11158 TEST_P(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { | 11501 TEST_P(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { |
| 11159 MockWrite data_writes1[] = { | 11502 MockWrite data_writes1[] = { |
| 11160 MockWrite(SYNCHRONOUS, ERR_PIPELINE_EVICTION), | 11503 MockWrite(SYNCHRONOUS, ERR_PIPELINE_EVICTION), |
| 11161 }; | 11504 }; |
| 11162 MockWrite data_writes2[] = { | 11505 MockWrite data_writes2[] = { |
| 11163 MockWrite("GET / HTTP/1.1\r\n" | 11506 MockWrite( |
| 11164 "Host: www.google.com\r\n" | 11507 "GET / HTTP/1.1\r\n" |
| 11165 "Connection: keep-alive\r\n\r\n"), | 11508 "Host: www.google.com\r\n" |
| 11509 "Connection: keep-alive\r\n\r\n"), |
| 11166 }; | 11510 }; |
| 11167 MockRead data_reads2[] = { | 11511 MockRead data_reads2[] = { |
| 11168 MockRead("HTTP/1.0 200 OK\r\n\r\n"), | 11512 MockRead("HTTP/1.0 200 OK\r\n\r\n"), MockRead("hello world"), |
| 11169 MockRead("hello world"), | 11513 MockRead(SYNCHRONOUS, OK), |
| 11170 MockRead(SYNCHRONOUS, OK), | |
| 11171 }; | 11514 }; |
| 11172 StaticSocketDataProvider data1(NULL, 0, | 11515 StaticSocketDataProvider data1( |
| 11173 data_writes1, arraysize(data_writes1)); | 11516 NULL, 0, data_writes1, arraysize(data_writes1)); |
| 11174 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), | 11517 StaticSocketDataProvider data2(data_reads2, |
| 11175 data_writes2, arraysize(data_writes2)); | 11518 arraysize(data_reads2), |
| 11176 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 11519 data_writes2, |
| 11520 arraysize(data_writes2)); |
| 11521 StaticSocketDataProvider* data[] = {&data1, &data2}; |
| 11177 | 11522 |
| 11178 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 11523 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 11179 | 11524 |
| 11180 EXPECT_EQ(OK, out.rv); | 11525 EXPECT_EQ(OK, out.rv); |
| 11181 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 11526 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 11182 EXPECT_EQ("hello world", out.response_data); | 11527 EXPECT_EQ("hello world", out.response_data); |
| 11183 } | 11528 } |
| 11184 | 11529 |
| 11185 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { | 11530 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttp) { |
| 11186 const std::string https_url = "https://www.google.com/"; | 11531 const std::string https_url = "https://www.google.com/"; |
| 11187 const std::string http_url = "http://www.google.com:443/"; | 11532 const std::string http_url = "http://www.google.com:443/"; |
| 11188 | 11533 |
| 11189 // SPDY GET for HTTPS URL | 11534 // SPDY GET for HTTPS URL |
| 11190 scoped_ptr<SpdyFrame> req1( | 11535 scoped_ptr<SpdyFrame> req1( |
| 11191 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 11536 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
| 11192 | 11537 |
| 11193 MockWrite writes1[] = { | 11538 MockWrite writes1[] = { |
| 11194 CreateMockWrite(*req1, 0), | 11539 CreateMockWrite(*req1, 0), |
| 11195 }; | 11540 }; |
| 11196 | 11541 |
| 11197 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11542 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11198 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11543 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11199 MockRead reads1[] = { | 11544 MockRead reads1[] = {CreateMockRead(*resp1, 1), CreateMockRead(*body1, 2), |
| 11200 CreateMockRead(*resp1, 1), | 11545 MockRead(ASYNC, ERR_IO_PENDING, 3)}; |
| 11201 CreateMockRead(*body1, 2), | |
| 11202 MockRead(ASYNC, ERR_IO_PENDING, 3) | |
| 11203 }; | |
| 11204 | 11546 |
| 11205 DelayedSocketData data1( | 11547 DelayedSocketData data1( |
| 11206 1, reads1, arraysize(reads1), | 11548 1, reads1, arraysize(reads1), writes1, arraysize(writes1)); |
| 11207 writes1, arraysize(writes1)); | |
| 11208 MockConnect connect_data1(ASYNC, OK); | 11549 MockConnect connect_data1(ASYNC, OK); |
| 11209 data1.set_connect_data(connect_data1); | 11550 data1.set_connect_data(connect_data1); |
| 11210 | 11551 |
| 11211 // HTTP GET for the HTTP URL | 11552 // HTTP GET for the HTTP URL |
| 11212 MockWrite writes2[] = { | 11553 MockWrite writes2[] = { |
| 11213 MockWrite(ASYNC, 4, | 11554 MockWrite(ASYNC, |
| 11214 "GET / HTTP/1.1\r\n" | 11555 4, |
| 11215 "Host: www.google.com:443\r\n" | 11556 "GET / HTTP/1.1\r\n" |
| 11216 "Connection: keep-alive\r\n\r\n"), | 11557 "Host: www.google.com:443\r\n" |
| 11558 "Connection: keep-alive\r\n\r\n"), |
| 11217 }; | 11559 }; |
| 11218 | 11560 |
| 11219 MockRead reads2[] = { | 11561 MockRead reads2[] = { |
| 11220 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), | 11562 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\n"), |
| 11221 MockRead(ASYNC, 6, "hello"), | 11563 MockRead(ASYNC, 6, "hello"), MockRead(ASYNC, 7, OK), |
| 11222 MockRead(ASYNC, 7, OK), | |
| 11223 }; | 11564 }; |
| 11224 | 11565 |
| 11225 DelayedSocketData data2( | 11566 DelayedSocketData data2( |
| 11226 1, reads2, arraysize(reads2), | 11567 1, reads2, arraysize(reads2), writes2, arraysize(writes2)); |
| 11227 writes2, arraysize(writes2)); | |
| 11228 | 11568 |
| 11229 SSLSocketDataProvider ssl(ASYNC, OK); | 11569 SSLSocketDataProvider ssl(ASYNC, OK); |
| 11230 ssl.SetNextProto(GetParam()); | 11570 ssl.SetNextProto(GetParam()); |
| 11231 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11571 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 11232 session_deps_.socket_factory->AddSocketDataProvider(&data1); | 11572 session_deps_.socket_factory->AddSocketDataProvider(&data1); |
| 11233 session_deps_.socket_factory->AddSocketDataProvider(&data2); | 11573 session_deps_.socket_factory->AddSocketDataProvider(&data2); |
| 11234 | 11574 |
| 11235 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11575 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11236 | 11576 |
| 11237 // Start the first transaction to set up the SpdySession | 11577 // Start the first transaction to set up the SpdySession |
| (...skipping 23 matching lines...) Expand all Loading... |
| 11261 | 11601 |
| 11262 EXPECT_EQ(OK, callback2.WaitForResult()); | 11602 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 11263 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11603 EXPECT_FALSE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 11264 } | 11604 } |
| 11265 | 11605 |
| 11266 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { | 11606 TEST_P(HttpNetworkTransactionTest, DoNotUseSpdySessionForHttpOverTunnel) { |
| 11267 const std::string https_url = "https://www.google.com/"; | 11607 const std::string https_url = "https://www.google.com/"; |
| 11268 const std::string http_url = "http://www.google.com:443/"; | 11608 const std::string http_url = "http://www.google.com:443/"; |
| 11269 | 11609 |
| 11270 // SPDY GET for HTTPS URL (through CONNECT tunnel) | 11610 // SPDY GET for HTTPS URL (through CONNECT tunnel) |
| 11271 scoped_ptr<SpdyFrame> connect(spdy_util_.ConstructSpdyConnect(NULL, 0, 1, | 11611 scoped_ptr<SpdyFrame> connect( |
| 11272 LOWEST)); | 11612 spdy_util_.ConstructSpdyConnect(NULL, 0, 1, LOWEST)); |
| 11273 scoped_ptr<SpdyFrame> req1( | 11613 scoped_ptr<SpdyFrame> req1( |
| 11274 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 11614 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
| 11275 scoped_ptr<SpdyFrame> wrapped_req1( | 11615 scoped_ptr<SpdyFrame> wrapped_req1( |
| 11276 spdy_util_.ConstructWrappedSpdyFrame(req1, 1)); | 11616 spdy_util_.ConstructWrappedSpdyFrame(req1, 1)); |
| 11277 | 11617 |
| 11278 // SPDY GET for HTTP URL (through the proxy, but not the tunnel). | 11618 // SPDY GET for HTTP URL (through the proxy, but not the tunnel). |
| 11279 SpdySynStreamIR req2_ir(3); | 11619 SpdySynStreamIR req2_ir(3); |
| 11280 spdy_util_.SetPriority(MEDIUM, &req2_ir); | 11620 spdy_util_.SetPriority(MEDIUM, &req2_ir); |
| 11281 req2_ir.set_fin(true); | 11621 req2_ir.set_fin(true); |
| 11282 req2_ir.SetHeader(spdy_util_.GetMethodKey(), "GET"); | 11622 req2_ir.SetHeader(spdy_util_.GetMethodKey(), "GET"); |
| 11283 req2_ir.SetHeader(spdy_util_.GetPathKey(), | 11623 req2_ir.SetHeader(spdy_util_.GetPathKey(), |
| 11284 spdy_util_.is_spdy2() ? http_url.c_str() : "/"); | 11624 spdy_util_.is_spdy2() ? http_url.c_str() : "/"); |
| 11285 req2_ir.SetHeader(spdy_util_.GetHostKey(), "www.google.com:443"); | 11625 req2_ir.SetHeader(spdy_util_.GetHostKey(), "www.google.com:443"); |
| 11286 req2_ir.SetHeader(spdy_util_.GetSchemeKey(), "http"); | 11626 req2_ir.SetHeader(spdy_util_.GetSchemeKey(), "http"); |
| 11287 spdy_util_.MaybeAddVersionHeader(&req2_ir); | 11627 spdy_util_.MaybeAddVersionHeader(&req2_ir); |
| 11288 scoped_ptr<SpdyFrame> req2( | 11628 scoped_ptr<SpdyFrame> req2( |
| 11289 spdy_util_.CreateFramer(false)->SerializeFrame(req2_ir)); | 11629 spdy_util_.CreateFramer(false)->SerializeFrame(req2_ir)); |
| 11290 | 11630 |
| 11291 MockWrite writes1[] = { | 11631 MockWrite writes1[] = { |
| 11292 CreateMockWrite(*connect, 0), | 11632 CreateMockWrite(*connect, 0), CreateMockWrite(*wrapped_req1, 2), |
| 11293 CreateMockWrite(*wrapped_req1, 2), | 11633 CreateMockWrite(*req2, 5), |
| 11294 CreateMockWrite(*req2, 5), | |
| 11295 }; | 11634 }; |
| 11296 | 11635 |
| 11297 scoped_ptr<SpdyFrame> conn_resp( | 11636 scoped_ptr<SpdyFrame> conn_resp( |
| 11298 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11637 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11299 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11638 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11300 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11639 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11301 scoped_ptr<SpdyFrame> wrapped_resp1( | 11640 scoped_ptr<SpdyFrame> wrapped_resp1( |
| 11302 spdy_util_.ConstructWrappedSpdyFrame(resp1, 1)); | 11641 spdy_util_.ConstructWrappedSpdyFrame(resp1, 1)); |
| 11303 scoped_ptr<SpdyFrame> wrapped_body1( | 11642 scoped_ptr<SpdyFrame> wrapped_body1( |
| 11304 spdy_util_.ConstructWrappedSpdyFrame(body1, 1)); | 11643 spdy_util_.ConstructWrappedSpdyFrame(body1, 1)); |
| 11305 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 11644 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 11306 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); | 11645 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 11307 MockRead reads1[] = { | 11646 MockRead reads1[] = { |
| 11308 CreateMockRead(*conn_resp, 1), | 11647 CreateMockRead(*conn_resp, 1), CreateMockRead(*wrapped_resp1, 3), |
| 11309 CreateMockRead(*wrapped_resp1, 3), | 11648 CreateMockRead(*wrapped_body1, 4), CreateMockRead(*resp2, 6), |
| 11310 CreateMockRead(*wrapped_body1, 4), | 11649 CreateMockRead(*body2, 7), MockRead(ASYNC, ERR_IO_PENDING, 8)}; |
| 11311 CreateMockRead(*resp2, 6), | |
| 11312 CreateMockRead(*body2, 7), | |
| 11313 MockRead(ASYNC, ERR_IO_PENDING, 8) | |
| 11314 }; | |
| 11315 | 11650 |
| 11316 DeterministicSocketData data1(reads1, arraysize(reads1), | 11651 DeterministicSocketData data1( |
| 11317 writes1, arraysize(writes1)); | 11652 reads1, arraysize(reads1), writes1, arraysize(writes1)); |
| 11318 MockConnect connect_data1(ASYNC, OK); | 11653 MockConnect connect_data1(ASYNC, OK); |
| 11319 data1.set_connect_data(connect_data1); | 11654 data1.set_connect_data(connect_data1); |
| 11320 | 11655 |
| 11321 session_deps_.proxy_service.reset( | 11656 session_deps_.proxy_service.reset( |
| 11322 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); | 11657 ProxyService::CreateFixedFromPacResult("HTTPS proxy:70")); |
| 11323 CapturingNetLog log; | 11658 CapturingNetLog log; |
| 11324 session_deps_.net_log = &log; | 11659 session_deps_.net_log = &log; |
| 11325 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy | 11660 SSLSocketDataProvider ssl1(ASYNC, OK); // to the proxy |
| 11326 ssl1.SetNextProto(GetParam()); | 11661 ssl1.SetNextProto(GetParam()); |
| 11327 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); | 11662 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11383 const std::string http_url = "http://www.google.com:443/"; | 11718 const std::string http_url = "http://www.google.com:443/"; |
| 11384 | 11719 |
| 11385 // SPDY GET for HTTPS URL | 11720 // SPDY GET for HTTPS URL |
| 11386 scoped_ptr<SpdyFrame> req1( | 11721 scoped_ptr<SpdyFrame> req1( |
| 11387 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); | 11722 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, LOWEST)); |
| 11388 // SPDY GET for the HTTP URL | 11723 // SPDY GET for the HTTP URL |
| 11389 scoped_ptr<SpdyFrame> req2( | 11724 scoped_ptr<SpdyFrame> req2( |
| 11390 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); | 11725 spdy_util_.ConstructSpdyGet(http_url.c_str(), false, 3, MEDIUM)); |
| 11391 | 11726 |
| 11392 MockWrite writes[] = { | 11727 MockWrite writes[] = { |
| 11393 CreateMockWrite(*req1, 1), | 11728 CreateMockWrite(*req1, 1), CreateMockWrite(*req2, 4), |
| 11394 CreateMockWrite(*req2, 4), | |
| 11395 }; | 11729 }; |
| 11396 | 11730 |
| 11397 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11731 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11398 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11732 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11399 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); | 11733 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 3)); |
| 11400 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); | 11734 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(3, true)); |
| 11401 MockRead reads[] = { | 11735 MockRead reads[] = {CreateMockRead(*resp1, 2), CreateMockRead(*body1, 3), |
| 11402 CreateMockRead(*resp1, 2), | 11736 CreateMockRead(*resp2, 5), CreateMockRead(*body2, 6), |
| 11403 CreateMockRead(*body1, 3), | 11737 MockRead(ASYNC, ERR_IO_PENDING, 7)}; |
| 11404 CreateMockRead(*resp2, 5), | |
| 11405 CreateMockRead(*body2, 6), | |
| 11406 MockRead(ASYNC, ERR_IO_PENDING, 7) | |
| 11407 }; | |
| 11408 | 11738 |
| 11409 OrderedSocketData data(reads, arraysize(reads), | 11739 OrderedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 11410 writes, arraysize(writes)); | |
| 11411 | 11740 |
| 11412 SSLSocketDataProvider ssl(ASYNC, OK); | 11741 SSLSocketDataProvider ssl(ASYNC, OK); |
| 11413 ssl.SetNextProto(GetParam()); | 11742 ssl.SetNextProto(GetParam()); |
| 11414 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 11743 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 11415 session_deps_.socket_factory->AddSocketDataProvider(&data); | 11744 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 11416 | 11745 |
| 11417 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 11746 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11418 | 11747 |
| 11419 // Start the first transaction to set up the SpdySession | 11748 // Start the first transaction to set up the SpdySession |
| 11420 HttpRequestInfo request1; | 11749 HttpRequestInfo request1; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11454 const std::string url2 = "https://mail.google.com/"; | 11783 const std::string url2 = "https://mail.google.com/"; |
| 11455 const std::string ip_addr = "1.2.3.4"; | 11784 const std::string ip_addr = "1.2.3.4"; |
| 11456 | 11785 |
| 11457 // SPDY GET for HTTP URL (through SPDY proxy) | 11786 // SPDY GET for HTTP URL (through SPDY proxy) |
| 11458 scoped_ptr<SpdyHeaderBlock> headers( | 11787 scoped_ptr<SpdyHeaderBlock> headers( |
| 11459 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.google.com/")); | 11788 spdy_util_.ConstructGetHeaderBlockForProxy("http://www.google.com/")); |
| 11460 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyControlFrame( | 11789 scoped_ptr<SpdyFrame> req1(spdy_util_.ConstructSpdyControlFrame( |
| 11461 headers.Pass(), false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); | 11790 headers.Pass(), false, 1, LOWEST, SYN_STREAM, CONTROL_FLAG_FIN, 0)); |
| 11462 | 11791 |
| 11463 MockWrite writes1[] = { | 11792 MockWrite writes1[] = { |
| 11464 CreateMockWrite(*req1, 0), | 11793 CreateMockWrite(*req1, 0), |
| 11465 }; | 11794 }; |
| 11466 | 11795 |
| 11467 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11796 scoped_ptr<SpdyFrame> resp1(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11468 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11797 scoped_ptr<SpdyFrame> body1(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11469 MockRead reads1[] = { | 11798 MockRead reads1[] = { |
| 11470 CreateMockRead(*resp1, 1), | 11799 CreateMockRead(*resp1, 1), CreateMockRead(*body1, 2), |
| 11471 CreateMockRead(*body1, 2), | 11800 MockRead(ASYNC, OK, 3) // EOF |
| 11472 MockRead(ASYNC, OK, 3) // EOF | |
| 11473 }; | 11801 }; |
| 11474 | 11802 |
| 11475 scoped_ptr<DeterministicSocketData> data1( | 11803 scoped_ptr<DeterministicSocketData> data1(new DeterministicSocketData( |
| 11476 new DeterministicSocketData(reads1, arraysize(reads1), | 11804 reads1, arraysize(reads1), writes1, arraysize(writes1))); |
| 11477 writes1, arraysize(writes1))); | |
| 11478 IPAddressNumber ip; | 11805 IPAddressNumber ip; |
| 11479 ASSERT_TRUE(ParseIPLiteralToNumber(ip_addr, &ip)); | 11806 ASSERT_TRUE(ParseIPLiteralToNumber(ip_addr, &ip)); |
| 11480 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 11807 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
| 11481 MockConnect connect_data1(ASYNC, OK, peer_addr); | 11808 MockConnect connect_data1(ASYNC, OK, peer_addr); |
| 11482 data1->set_connect_data(connect_data1); | 11809 data1->set_connect_data(connect_data1); |
| 11483 | 11810 |
| 11484 // SPDY GET for HTTPS URL (direct) | 11811 // SPDY GET for HTTPS URL (direct) |
| 11485 scoped_ptr<SpdyFrame> req2( | 11812 scoped_ptr<SpdyFrame> req2( |
| 11486 spdy_util_.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); | 11813 spdy_util_.ConstructSpdyGet(url2.c_str(), false, 1, MEDIUM)); |
| 11487 | 11814 |
| 11488 MockWrite writes2[] = { | 11815 MockWrite writes2[] = { |
| 11489 CreateMockWrite(*req2, 0), | 11816 CreateMockWrite(*req2, 0), |
| 11490 }; | 11817 }; |
| 11491 | 11818 |
| 11492 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11819 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11493 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11820 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11494 MockRead reads2[] = { | 11821 MockRead reads2[] = { |
| 11495 CreateMockRead(*resp2, 1), | 11822 CreateMockRead(*resp2, 1), CreateMockRead(*body2, 2), |
| 11496 CreateMockRead(*body2, 2), | 11823 MockRead(ASYNC, OK, 3) // EOF |
| 11497 MockRead(ASYNC, OK, 3) // EOF | |
| 11498 }; | 11824 }; |
| 11499 | 11825 |
| 11500 scoped_ptr<DeterministicSocketData> data2( | 11826 scoped_ptr<DeterministicSocketData> data2(new DeterministicSocketData( |
| 11501 new DeterministicSocketData(reads2, arraysize(reads2), | 11827 reads2, arraysize(reads2), writes2, arraysize(writes2))); |
| 11502 writes2, arraysize(writes2))); | |
| 11503 MockConnect connect_data2(ASYNC, OK); | 11828 MockConnect connect_data2(ASYNC, OK); |
| 11504 data2->set_connect_data(connect_data2); | 11829 data2->set_connect_data(connect_data2); |
| 11505 | 11830 |
| 11506 // Set up a proxy config that sends HTTP requests to a proxy, and | 11831 // Set up a proxy config that sends HTTP requests to a proxy, and |
| 11507 // all others direct. | 11832 // all others direct. |
| 11508 ProxyConfig proxy_config; | 11833 ProxyConfig proxy_config; |
| 11509 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443"); | 11834 proxy_config.proxy_rules().ParseFromString("http=https://proxy:443"); |
| 11510 CapturingProxyResolver* capturing_proxy_resolver = | 11835 CapturingProxyResolver* capturing_proxy_resolver = |
| 11511 new CapturingProxyResolver(); | 11836 new CapturingProxyResolver(); |
| 11512 session_deps_.proxy_service.reset(new ProxyService( | 11837 session_deps_.proxy_service.reset( |
| 11513 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, | 11838 new ProxyService(new ProxyConfigServiceFixed(proxy_config), |
| 11514 NULL)); | 11839 capturing_proxy_resolver, |
| 11840 NULL)); |
| 11515 | 11841 |
| 11516 // Load a valid cert. Note, that this does not need to | 11842 // Load a valid cert. Note, that this does not need to |
| 11517 // be valid for proxy because the MockSSLClientSocket does | 11843 // be valid for proxy because the MockSSLClientSocket does |
| 11518 // not actually verify it. But SpdySession will use this | 11844 // not actually verify it. But SpdySession will use this |
| 11519 // to see if it is valid for the new origin | 11845 // to see if it is valid for the new origin |
| 11520 base::FilePath certs_dir = GetTestCertsDirectory(); | 11846 base::FilePath certs_dir = GetTestCertsDirectory(); |
| 11521 scoped_refptr<X509Certificate> server_cert( | 11847 scoped_refptr<X509Certificate> server_cert( |
| 11522 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 11848 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
| 11523 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); | 11849 ASSERT_NE(static_cast<X509Certificate*>(NULL), server_cert); |
| 11524 | 11850 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11574 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); | 11900 EXPECT_TRUE(trans2.GetResponseInfo()->was_fetched_via_spdy); |
| 11575 } | 11901 } |
| 11576 | 11902 |
| 11577 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED | 11903 // Test to verify that a failed socket read (due to an ERR_CONNECTION_CLOSED |
| 11578 // error) in SPDY session, removes the socket from pool and closes the SPDY | 11904 // error) in SPDY session, removes the socket from pool and closes the SPDY |
| 11579 // session. Verify that new url's from the same HttpNetworkSession (and a new | 11905 // session. Verify that new url's from the same HttpNetworkSession (and a new |
| 11580 // SpdySession) do work. http://crbug.com/224701 | 11906 // SpdySession) do work. http://crbug.com/224701 |
| 11581 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { | 11907 TEST_P(HttpNetworkTransactionTest, ErrorSocketNotConnected) { |
| 11582 const std::string https_url = "https://www.google.com/"; | 11908 const std::string https_url = "https://www.google.com/"; |
| 11583 | 11909 |
| 11584 MockRead reads1[] = { | 11910 MockRead reads1[] = {MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 0)}; |
| 11585 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 0) | |
| 11586 }; | |
| 11587 | 11911 |
| 11588 scoped_ptr<DeterministicSocketData> data1( | 11912 scoped_ptr<DeterministicSocketData> data1( |
| 11589 new DeterministicSocketData(reads1, arraysize(reads1), NULL, 0)); | 11913 new DeterministicSocketData(reads1, arraysize(reads1), NULL, 0)); |
| 11590 data1->SetStop(1); | 11914 data1->SetStop(1); |
| 11591 | 11915 |
| 11592 scoped_ptr<SpdyFrame> req2( | 11916 scoped_ptr<SpdyFrame> req2( |
| 11593 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, MEDIUM)); | 11917 spdy_util_.ConstructSpdyGet(https_url.c_str(), false, 1, MEDIUM)); |
| 11594 MockWrite writes2[] = { | 11918 MockWrite writes2[] = { |
| 11595 CreateMockWrite(*req2, 0), | 11919 CreateMockWrite(*req2, 0), |
| 11596 }; | 11920 }; |
| 11597 | 11921 |
| 11598 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 11922 scoped_ptr<SpdyFrame> resp2(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11599 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); | 11923 scoped_ptr<SpdyFrame> body2(spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11600 MockRead reads2[] = { | 11924 MockRead reads2[] = { |
| 11601 CreateMockRead(*resp2, 1), | 11925 CreateMockRead(*resp2, 1), CreateMockRead(*body2, 2), |
| 11602 CreateMockRead(*body2, 2), | 11926 MockRead(ASYNC, OK, 3) // EOF |
| 11603 MockRead(ASYNC, OK, 3) // EOF | |
| 11604 }; | 11927 }; |
| 11605 | 11928 |
| 11606 scoped_ptr<DeterministicSocketData> data2( | 11929 scoped_ptr<DeterministicSocketData> data2(new DeterministicSocketData( |
| 11607 new DeterministicSocketData(reads2, arraysize(reads2), | 11930 reads2, arraysize(reads2), writes2, arraysize(writes2))); |
| 11608 writes2, arraysize(writes2))); | |
| 11609 | 11931 |
| 11610 SSLSocketDataProvider ssl1(ASYNC, OK); | 11932 SSLSocketDataProvider ssl1(ASYNC, OK); |
| 11611 ssl1.SetNextProto(GetParam()); | 11933 ssl1.SetNextProto(GetParam()); |
| 11612 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); | 11934 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl1); |
| 11613 session_deps_.deterministic_socket_factory->AddSocketDataProvider( | 11935 session_deps_.deterministic_socket_factory->AddSocketDataProvider( |
| 11614 data1.get()); | 11936 data1.get()); |
| 11615 | 11937 |
| 11616 SSLSocketDataProvider ssl2(ASYNC, OK); | 11938 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 11617 ssl2.SetNextProto(GetParam()); | 11939 ssl2.SetNextProto(GetParam()); |
| 11618 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); | 11940 session_deps_.deterministic_socket_factory->AddSSLSocketDataProvider(&ssl2); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11667 SSLSocketDataProvider ssl1(ASYNC, OK); | 11989 SSLSocketDataProvider ssl1(ASYNC, OK); |
| 11668 ssl1.SetNextProto(GetParam()); | 11990 ssl1.SetNextProto(GetParam()); |
| 11669 SSLSocketDataProvider ssl2(ASYNC, OK); | 11991 SSLSocketDataProvider ssl2(ASYNC, OK); |
| 11670 ssl2.SetNextProto(GetParam()); | 11992 ssl2.SetNextProto(GetParam()); |
| 11671 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); | 11993 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl1); |
| 11672 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); | 11994 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2); |
| 11673 | 11995 |
| 11674 scoped_ptr<SpdyFrame> host1_req(spdy_util_.ConstructSpdyGet( | 11996 scoped_ptr<SpdyFrame> host1_req(spdy_util_.ConstructSpdyGet( |
| 11675 "https://www.a.com", false, 1, DEFAULT_PRIORITY)); | 11997 "https://www.a.com", false, 1, DEFAULT_PRIORITY)); |
| 11676 MockWrite spdy1_writes[] = { | 11998 MockWrite spdy1_writes[] = { |
| 11677 CreateMockWrite(*host1_req, 1), | 11999 CreateMockWrite(*host1_req, 1), |
| 11678 }; | 12000 }; |
| 11679 scoped_ptr<SpdyFrame> host1_resp( | 12001 scoped_ptr<SpdyFrame> host1_resp( |
| 11680 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 12002 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11681 scoped_ptr<SpdyFrame> host1_resp_body( | 12003 scoped_ptr<SpdyFrame> host1_resp_body( |
| 11682 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 12004 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11683 MockRead spdy1_reads[] = { | 12005 MockRead spdy1_reads[] = { |
| 11684 CreateMockRead(*host1_resp, 2), | 12006 CreateMockRead(*host1_resp, 2), CreateMockRead(*host1_resp_body, 3), |
| 11685 CreateMockRead(*host1_resp_body, 3), | 12007 MockRead(ASYNC, ERR_IO_PENDING, 4), |
| 11686 MockRead(ASYNC, ERR_IO_PENDING, 4), | |
| 11687 }; | 12008 }; |
| 11688 | 12009 |
| 11689 scoped_ptr<OrderedSocketData> spdy1_data( | 12010 scoped_ptr<OrderedSocketData> spdy1_data( |
| 11690 new OrderedSocketData( | 12011 new OrderedSocketData(spdy1_reads, |
| 11691 spdy1_reads, arraysize(spdy1_reads), | 12012 arraysize(spdy1_reads), |
| 11692 spdy1_writes, arraysize(spdy1_writes))); | 12013 spdy1_writes, |
| 12014 arraysize(spdy1_writes))); |
| 11693 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); | 12015 session_deps_.socket_factory->AddSocketDataProvider(spdy1_data.get()); |
| 11694 | 12016 |
| 11695 scoped_ptr<SpdyFrame> host2_req(spdy_util_.ConstructSpdyGet( | 12017 scoped_ptr<SpdyFrame> host2_req(spdy_util_.ConstructSpdyGet( |
| 11696 "https://www.b.com", false, 1, DEFAULT_PRIORITY)); | 12018 "https://www.b.com", false, 1, DEFAULT_PRIORITY)); |
| 11697 MockWrite spdy2_writes[] = { | 12019 MockWrite spdy2_writes[] = { |
| 11698 CreateMockWrite(*host2_req, 1), | 12020 CreateMockWrite(*host2_req, 1), |
| 11699 }; | 12021 }; |
| 11700 scoped_ptr<SpdyFrame> host2_resp( | 12022 scoped_ptr<SpdyFrame> host2_resp( |
| 11701 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); | 12023 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); |
| 11702 scoped_ptr<SpdyFrame> host2_resp_body( | 12024 scoped_ptr<SpdyFrame> host2_resp_body( |
| 11703 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 12025 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 11704 MockRead spdy2_reads[] = { | 12026 MockRead spdy2_reads[] = { |
| 11705 CreateMockRead(*host2_resp, 2), | 12027 CreateMockRead(*host2_resp, 2), CreateMockRead(*host2_resp_body, 3), |
| 11706 CreateMockRead(*host2_resp_body, 3), | 12028 MockRead(ASYNC, ERR_IO_PENDING, 4), |
| 11707 MockRead(ASYNC, ERR_IO_PENDING, 4), | |
| 11708 }; | 12029 }; |
| 11709 | 12030 |
| 11710 scoped_ptr<OrderedSocketData> spdy2_data( | 12031 scoped_ptr<OrderedSocketData> spdy2_data( |
| 11711 new OrderedSocketData( | 12032 new OrderedSocketData(spdy2_reads, |
| 11712 spdy2_reads, arraysize(spdy2_reads), | 12033 arraysize(spdy2_reads), |
| 11713 spdy2_writes, arraysize(spdy2_writes))); | 12034 spdy2_writes, |
| 12035 arraysize(spdy2_writes))); |
| 11714 session_deps_.socket_factory->AddSocketDataProvider(spdy2_data.get()); | 12036 session_deps_.socket_factory->AddSocketDataProvider(spdy2_data.get()); |
| 11715 | 12037 |
| 11716 MockWrite http_write[] = { | 12038 MockWrite http_write[] = { |
| 11717 MockWrite("GET / HTTP/1.1\r\n" | 12039 MockWrite( |
| 11718 "Host: www.a.com\r\n" | 12040 "GET / HTTP/1.1\r\n" |
| 11719 "Connection: keep-alive\r\n\r\n"), | 12041 "Host: www.a.com\r\n" |
| 12042 "Connection: keep-alive\r\n\r\n"), |
| 11720 }; | 12043 }; |
| 11721 | 12044 |
| 11722 MockRead http_read[] = { | 12045 MockRead http_read[] = { |
| 11723 MockRead("HTTP/1.1 200 OK\r\n"), | 12046 MockRead("HTTP/1.1 200 OK\r\n"), |
| 11724 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), | 12047 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"), |
| 11725 MockRead("Content-Length: 6\r\n\r\n"), | 12048 MockRead("Content-Length: 6\r\n\r\n"), MockRead("hello!"), |
| 11726 MockRead("hello!"), | |
| 11727 }; | 12049 }; |
| 11728 StaticSocketDataProvider http_data(http_read, arraysize(http_read), | 12050 StaticSocketDataProvider http_data( |
| 11729 http_write, arraysize(http_write)); | 12051 http_read, arraysize(http_read), http_write, arraysize(http_write)); |
| 11730 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 12052 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
| 11731 | 12053 |
| 11732 HostPortPair host_port_pair_a("www.a.com", 443); | 12054 HostPortPair host_port_pair_a("www.a.com", 443); |
| 11733 SpdySessionKey spdy_session_key_a( | 12055 SpdySessionKey spdy_session_key_a( |
| 11734 host_port_pair_a, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 12056 host_port_pair_a, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 11735 EXPECT_FALSE( | 12057 EXPECT_FALSE( |
| 11736 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 12058 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 11737 | 12059 |
| 11738 TestCompletionCallback callback; | 12060 TestCompletionCallback callback; |
| 11739 HttpRequestInfo request1; | 12061 HttpRequestInfo request1; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 11751 ASSERT_TRUE(response != NULL); | 12073 ASSERT_TRUE(response != NULL); |
| 11752 ASSERT_TRUE(response->headers.get() != NULL); | 12074 ASSERT_TRUE(response->headers.get() != NULL); |
| 11753 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12075 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 11754 EXPECT_TRUE(response->was_fetched_via_spdy); | 12076 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 11755 EXPECT_TRUE(response->was_npn_negotiated); | 12077 EXPECT_TRUE(response->was_npn_negotiated); |
| 11756 | 12078 |
| 11757 std::string response_data; | 12079 std::string response_data; |
| 11758 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 12080 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 11759 EXPECT_EQ("hello!", response_data); | 12081 EXPECT_EQ("hello!", response_data); |
| 11760 trans.reset(); | 12082 trans.reset(); |
| 11761 EXPECT_TRUE( | 12083 EXPECT_TRUE(HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 11762 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | |
| 11763 | 12084 |
| 11764 HostPortPair host_port_pair_b("www.b.com", 443); | 12085 HostPortPair host_port_pair_b("www.b.com", 443); |
| 11765 SpdySessionKey spdy_session_key_b( | 12086 SpdySessionKey spdy_session_key_b( |
| 11766 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 12087 host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 11767 EXPECT_FALSE( | 12088 EXPECT_FALSE( |
| 11768 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | 12089 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
| 11769 HttpRequestInfo request2; | 12090 HttpRequestInfo request2; |
| 11770 request2.method = "GET"; | 12091 request2.method = "GET"; |
| 11771 request2.url = GURL("https://www.b.com/"); | 12092 request2.url = GURL("https://www.b.com/"); |
| 11772 request2.load_flags = 0; | 12093 request2.load_flags = 0; |
| 11773 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12094 trans.reset(new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 11774 | 12095 |
| 11775 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); | 12096 rv = trans->Start(&request2, callback.callback(), BoundNetLog()); |
| 11776 EXPECT_EQ(ERR_IO_PENDING, rv); | 12097 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 11777 EXPECT_EQ(OK, callback.WaitForResult()); | 12098 EXPECT_EQ(OK, callback.WaitForResult()); |
| 11778 | 12099 |
| 11779 response = trans->GetResponseInfo(); | 12100 response = trans->GetResponseInfo(); |
| 11780 ASSERT_TRUE(response != NULL); | 12101 ASSERT_TRUE(response != NULL); |
| 11781 ASSERT_TRUE(response->headers.get() != NULL); | 12102 ASSERT_TRUE(response->headers.get() != NULL); |
| 11782 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 12103 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 11783 EXPECT_TRUE(response->was_fetched_via_spdy); | 12104 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 11784 EXPECT_TRUE(response->was_npn_negotiated); | 12105 EXPECT_TRUE(response->was_npn_negotiated); |
| 11785 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); | 12106 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
| 11786 EXPECT_EQ("hello!", response_data); | 12107 EXPECT_EQ("hello!", response_data); |
| 11787 EXPECT_FALSE( | 12108 EXPECT_FALSE( |
| 11788 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); | 12109 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a)); |
| 11789 EXPECT_TRUE( | 12110 EXPECT_TRUE(HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); |
| 11790 HasSpdySession(session->spdy_session_pool(), spdy_session_key_b)); | |
| 11791 | 12111 |
| 11792 HostPortPair host_port_pair_a1("www.a.com", 80); | 12112 HostPortPair host_port_pair_a1("www.a.com", 80); |
| 11793 SpdySessionKey spdy_session_key_a1( | 12113 SpdySessionKey spdy_session_key_a1( |
| 11794 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 12114 host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
| 11795 EXPECT_FALSE( | 12115 EXPECT_FALSE( |
| 11796 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); | 12116 HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1)); |
| 11797 HttpRequestInfo request3; | 12117 HttpRequestInfo request3; |
| 11798 request3.method = "GET"; | 12118 request3.method = "GET"; |
| 11799 request3.url = GURL("http://www.a.com/"); | 12119 request3.url = GURL("http://www.a.com/"); |
| 11800 request3.load_flags = 0; | 12120 request3.load_flags = 0; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11882 HttpRequestInfo request; | 12202 HttpRequestInfo request; |
| 11883 request.method = "GET"; | 12203 request.method = "GET"; |
| 11884 request.url = GURL("http://www.google.com/"); | 12204 request.url = GURL("http://www.google.com/"); |
| 11885 request.load_flags = 0; | 12205 request.load_flags = 0; |
| 11886 | 12206 |
| 11887 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12207 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11888 scoped_ptr<HttpTransaction> trans( | 12208 scoped_ptr<HttpTransaction> trans( |
| 11889 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12209 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 11890 | 12210 |
| 11891 MockWrite data_writes[] = { | 12211 MockWrite data_writes[] = { |
| 11892 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 12212 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 11893 }; | 12213 }; |
| 11894 MockRead data_reads[] = { | 12214 MockRead data_reads[] = { |
| 11895 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 12215 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 11896 }; | 12216 }; |
| 11897 | 12217 |
| 11898 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 12218 StaticSocketDataProvider data( |
| 11899 data_writes, arraysize(data_writes)); | 12219 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 11900 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12220 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 11901 | 12221 |
| 11902 TestCompletionCallback callback; | 12222 TestCompletionCallback callback; |
| 11903 | 12223 |
| 11904 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12224 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11905 EXPECT_EQ(ERR_IO_PENDING, rv); | 12225 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 11906 | 12226 |
| 11907 rv = callback.WaitForResult(); | 12227 rv = callback.WaitForResult(); |
| 11908 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12228 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 11909 | 12229 |
| 11910 EXPECT_EQ(NULL, trans->GetResponseInfo()); | 12230 EXPECT_EQ(NULL, trans->GetResponseInfo()); |
| 11911 | 12231 |
| 11912 HttpRequestHeaders request_headers; | 12232 HttpRequestHeaders request_headers; |
| 11913 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12233 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 11914 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12234 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 11915 } | 12235 } |
| 11916 | 12236 |
| 11917 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { | 12237 TEST_P(HttpNetworkTransactionTest, HttpAsyncWriteError) { |
| 11918 HttpRequestInfo request; | 12238 HttpRequestInfo request; |
| 11919 request.method = "GET"; | 12239 request.method = "GET"; |
| 11920 request.url = GURL("http://www.google.com/"); | 12240 request.url = GURL("http://www.google.com/"); |
| 11921 request.load_flags = 0; | 12241 request.load_flags = 0; |
| 11922 | 12242 |
| 11923 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12243 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11924 scoped_ptr<HttpTransaction> trans( | 12244 scoped_ptr<HttpTransaction> trans( |
| 11925 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12245 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 11926 | 12246 |
| 11927 MockWrite data_writes[] = { | 12247 MockWrite data_writes[] = { |
| 11928 MockWrite(ASYNC, ERR_CONNECTION_RESET), | 12248 MockWrite(ASYNC, ERR_CONNECTION_RESET), |
| 11929 }; | 12249 }; |
| 11930 MockRead data_reads[] = { | 12250 MockRead data_reads[] = { |
| 11931 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. | 12251 MockRead(SYNCHRONOUS, ERR_UNEXPECTED), // Should not be reached. |
| 11932 }; | 12252 }; |
| 11933 | 12253 |
| 11934 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 12254 StaticSocketDataProvider data( |
| 11935 data_writes, arraysize(data_writes)); | 12255 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 11936 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12256 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 11937 | 12257 |
| 11938 TestCompletionCallback callback; | 12258 TestCompletionCallback callback; |
| 11939 | 12259 |
| 11940 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12260 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11941 EXPECT_EQ(ERR_IO_PENDING, rv); | 12261 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 11942 | 12262 |
| 11943 rv = callback.WaitForResult(); | 12263 rv = callback.WaitForResult(); |
| 11944 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12264 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 11945 | 12265 |
| 11946 EXPECT_EQ(NULL, trans->GetResponseInfo()); | 12266 EXPECT_EQ(NULL, trans->GetResponseInfo()); |
| 11947 | 12267 |
| 11948 HttpRequestHeaders request_headers; | 12268 HttpRequestHeaders request_headers; |
| 11949 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12269 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 11950 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12270 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 11951 } | 12271 } |
| 11952 | 12272 |
| 11953 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { | 12273 TEST_P(HttpNetworkTransactionTest, HttpSyncReadError) { |
| 11954 HttpRequestInfo request; | 12274 HttpRequestInfo request; |
| 11955 request.method = "GET"; | 12275 request.method = "GET"; |
| 11956 request.url = GURL("http://www.google.com/"); | 12276 request.url = GURL("http://www.google.com/"); |
| 11957 request.load_flags = 0; | 12277 request.load_flags = 0; |
| 11958 | 12278 |
| 11959 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12279 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11960 scoped_ptr<HttpTransaction> trans( | 12280 scoped_ptr<HttpTransaction> trans( |
| 11961 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12281 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 11962 | 12282 |
| 11963 MockWrite data_writes[] = { | 12283 MockWrite data_writes[] = { |
| 11964 MockWrite("GET / HTTP/1.1\r\n" | 12284 MockWrite( |
| 11965 "Host: www.google.com\r\n" | 12285 "GET / HTTP/1.1\r\n" |
| 11966 "Connection: keep-alive\r\n\r\n"), | 12286 "Host: www.google.com\r\n" |
| 12287 "Connection: keep-alive\r\n\r\n"), |
| 11967 }; | 12288 }; |
| 11968 MockRead data_reads[] = { | 12289 MockRead data_reads[] = { |
| 11969 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), | 12290 MockRead(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 11970 }; | 12291 }; |
| 11971 | 12292 |
| 11972 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 12293 StaticSocketDataProvider data( |
| 11973 data_writes, arraysize(data_writes)); | 12294 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 11974 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12295 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 11975 | 12296 |
| 11976 TestCompletionCallback callback; | 12297 TestCompletionCallback callback; |
| 11977 | 12298 |
| 11978 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12299 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 11979 EXPECT_EQ(ERR_IO_PENDING, rv); | 12300 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 11980 | 12301 |
| 11981 rv = callback.WaitForResult(); | 12302 rv = callback.WaitForResult(); |
| 11982 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12303 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 11983 | 12304 |
| 11984 EXPECT_EQ(NULL, trans->GetResponseInfo()); | 12305 EXPECT_EQ(NULL, trans->GetResponseInfo()); |
| 11985 | 12306 |
| 11986 HttpRequestHeaders request_headers; | 12307 HttpRequestHeaders request_headers; |
| 11987 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12308 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 11988 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12309 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 11989 } | 12310 } |
| 11990 | 12311 |
| 11991 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { | 12312 TEST_P(HttpNetworkTransactionTest, HttpAsyncReadError) { |
| 11992 HttpRequestInfo request; | 12313 HttpRequestInfo request; |
| 11993 request.method = "GET"; | 12314 request.method = "GET"; |
| 11994 request.url = GURL("http://www.google.com/"); | 12315 request.url = GURL("http://www.google.com/"); |
| 11995 request.load_flags = 0; | 12316 request.load_flags = 0; |
| 11996 | 12317 |
| 11997 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12318 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 11998 scoped_ptr<HttpTransaction> trans( | 12319 scoped_ptr<HttpTransaction> trans( |
| 11999 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12320 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12000 | 12321 |
| 12001 MockWrite data_writes[] = { | 12322 MockWrite data_writes[] = { |
| 12002 MockWrite("GET / HTTP/1.1\r\n" | 12323 MockWrite( |
| 12003 "Host: www.google.com\r\n" | 12324 "GET / HTTP/1.1\r\n" |
| 12004 "Connection: keep-alive\r\n\r\n"), | 12325 "Host: www.google.com\r\n" |
| 12326 "Connection: keep-alive\r\n\r\n"), |
| 12005 }; | 12327 }; |
| 12006 MockRead data_reads[] = { | 12328 MockRead data_reads[] = { |
| 12007 MockRead(ASYNC, ERR_CONNECTION_RESET), | 12329 MockRead(ASYNC, ERR_CONNECTION_RESET), |
| 12008 }; | 12330 }; |
| 12009 | 12331 |
| 12010 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 12332 StaticSocketDataProvider data( |
| 12011 data_writes, arraysize(data_writes)); | 12333 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12012 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12334 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12013 | 12335 |
| 12014 TestCompletionCallback callback; | 12336 TestCompletionCallback callback; |
| 12015 | 12337 |
| 12016 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12338 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12017 EXPECT_EQ(ERR_IO_PENDING, rv); | 12339 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12018 | 12340 |
| 12019 rv = callback.WaitForResult(); | 12341 rv = callback.WaitForResult(); |
| 12020 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 12342 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 12021 | 12343 |
| 12022 EXPECT_EQ(NULL, trans->GetResponseInfo()); | 12344 EXPECT_EQ(NULL, trans->GetResponseInfo()); |
| 12023 | 12345 |
| 12024 HttpRequestHeaders request_headers; | 12346 HttpRequestHeaders request_headers; |
| 12025 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); | 12347 EXPECT_TRUE(trans->GetFullRequestHeaders(&request_headers)); |
| 12026 EXPECT_TRUE(request_headers.HasHeader("Host")); | 12348 EXPECT_TRUE(request_headers.HasHeader("Host")); |
| 12027 } | 12349 } |
| 12028 | 12350 |
| 12029 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { | 12351 TEST_P(HttpNetworkTransactionTest, GetFullRequestHeadersIncludesExtraHeader) { |
| 12030 HttpRequestInfo request; | 12352 HttpRequestInfo request; |
| 12031 request.method = "GET"; | 12353 request.method = "GET"; |
| 12032 request.url = GURL("http://www.google.com/"); | 12354 request.url = GURL("http://www.google.com/"); |
| 12033 request.load_flags = 0; | 12355 request.load_flags = 0; |
| 12034 request.extra_headers.SetHeader("X-Foo", "bar"); | 12356 request.extra_headers.SetHeader("X-Foo", "bar"); |
| 12035 | 12357 |
| 12036 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12358 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12037 scoped_ptr<HttpTransaction> trans( | 12359 scoped_ptr<HttpTransaction> trans( |
| 12038 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12360 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12039 | 12361 |
| 12040 MockWrite data_writes[] = { | 12362 MockWrite data_writes[] = { |
| 12041 MockWrite("GET / HTTP/1.1\r\n" | 12363 MockWrite( |
| 12042 "Host: www.google.com\r\n" | 12364 "GET / HTTP/1.1\r\n" |
| 12043 "Connection: keep-alive\r\n" | 12365 "Host: www.google.com\r\n" |
| 12044 "X-Foo: bar\r\n\r\n"), | 12366 "Connection: keep-alive\r\n" |
| 12367 "X-Foo: bar\r\n\r\n"), |
| 12045 }; | 12368 }; |
| 12046 MockRead data_reads[] = { | 12369 MockRead data_reads[] = { |
| 12047 MockRead("HTTP/1.1 200 OK\r\n" | 12370 MockRead( |
| 12048 "Content-Length: 5\r\n\r\n" | 12371 "HTTP/1.1 200 OK\r\n" |
| 12049 "hello"), | 12372 "Content-Length: 5\r\n\r\n" |
| 12050 MockRead(ASYNC, ERR_UNEXPECTED), | 12373 "hello"), |
| 12374 MockRead(ASYNC, ERR_UNEXPECTED), |
| 12051 }; | 12375 }; |
| 12052 | 12376 |
| 12053 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 12377 StaticSocketDataProvider data( |
| 12054 data_writes, arraysize(data_writes)); | 12378 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12055 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12379 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12056 | 12380 |
| 12057 TestCompletionCallback callback; | 12381 TestCompletionCallback callback; |
| 12058 | 12382 |
| 12059 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12383 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12060 EXPECT_EQ(ERR_IO_PENDING, rv); | 12384 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12061 | 12385 |
| 12062 rv = callback.WaitForResult(); | 12386 rv = callback.WaitForResult(); |
| 12063 EXPECT_EQ(OK, rv); | 12387 EXPECT_EQ(OK, rv); |
| 12064 | 12388 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12097 virtual int ReadResponseHeaders(const CompletionCallback& callback) OVERRIDE { | 12421 virtual int ReadResponseHeaders(const CompletionCallback& callback) OVERRIDE { |
| 12098 ADD_FAILURE(); | 12422 ADD_FAILURE(); |
| 12099 return ERR_UNEXPECTED; | 12423 return ERR_UNEXPECTED; |
| 12100 } | 12424 } |
| 12101 | 12425 |
| 12102 virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE { | 12426 virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE { |
| 12103 ADD_FAILURE(); | 12427 ADD_FAILURE(); |
| 12104 return NULL; | 12428 return NULL; |
| 12105 } | 12429 } |
| 12106 | 12430 |
| 12107 virtual int ReadResponseBody(IOBuffer* buf, int buf_len, | 12431 virtual int ReadResponseBody(IOBuffer* buf, |
| 12432 int buf_len, |
| 12108 const CompletionCallback& callback) OVERRIDE { | 12433 const CompletionCallback& callback) OVERRIDE { |
| 12109 ADD_FAILURE(); | 12434 ADD_FAILURE(); |
| 12110 return ERR_UNEXPECTED; | 12435 return ERR_UNEXPECTED; |
| 12111 } | 12436 } |
| 12112 | 12437 |
| 12113 virtual void Close(bool not_reusable) OVERRIDE {} | 12438 virtual void Close(bool not_reusable) OVERRIDE {} |
| 12114 | 12439 |
| 12115 virtual bool IsResponseBodyComplete() const OVERRIDE { | 12440 virtual bool IsResponseBodyComplete() const OVERRIDE { |
| 12116 ADD_FAILURE(); | 12441 ADD_FAILURE(); |
| 12117 return false; | 12442 return false; |
| 12118 } | 12443 } |
| 12119 | 12444 |
| 12120 virtual bool CanFindEndOfResponse() const OVERRIDE { | 12445 virtual bool CanFindEndOfResponse() const OVERRIDE { return false; } |
| 12121 return false; | |
| 12122 } | |
| 12123 | 12446 |
| 12124 virtual bool IsConnectionReused() const OVERRIDE { | 12447 virtual bool IsConnectionReused() const OVERRIDE { |
| 12125 ADD_FAILURE(); | 12448 ADD_FAILURE(); |
| 12126 return false; | 12449 return false; |
| 12127 } | 12450 } |
| 12128 | 12451 |
| 12129 virtual void SetConnectionReused() OVERRIDE { | 12452 virtual void SetConnectionReused() OVERRIDE { ADD_FAILURE(); } |
| 12130 ADD_FAILURE(); | |
| 12131 } | |
| 12132 | 12453 |
| 12133 virtual bool IsConnectionReusable() const OVERRIDE { | 12454 virtual bool IsConnectionReusable() const OVERRIDE { |
| 12134 ADD_FAILURE(); | 12455 ADD_FAILURE(); |
| 12135 return false; | 12456 return false; |
| 12136 } | 12457 } |
| 12137 | 12458 |
| 12138 virtual int64 GetTotalReceivedBytes() const OVERRIDE { | 12459 virtual int64 GetTotalReceivedBytes() const OVERRIDE { |
| 12139 ADD_FAILURE(); | 12460 ADD_FAILURE(); |
| 12140 return 0; | 12461 return 0; |
| 12141 } | 12462 } |
| 12142 | 12463 |
| 12143 virtual bool GetLoadTimingInfo( | 12464 virtual bool GetLoadTimingInfo( |
| 12144 LoadTimingInfo* load_timing_info) const OVERRIDE { | 12465 LoadTimingInfo* load_timing_info) const OVERRIDE { |
| 12145 ADD_FAILURE(); | 12466 ADD_FAILURE(); |
| 12146 return false; | 12467 return false; |
| 12147 } | 12468 } |
| 12148 | 12469 |
| 12149 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { | 12470 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { ADD_FAILURE(); } |
| 12150 ADD_FAILURE(); | |
| 12151 } | |
| 12152 | 12471 |
| 12153 virtual void GetSSLCertRequestInfo( | 12472 virtual void GetSSLCertRequestInfo( |
| 12154 SSLCertRequestInfo* cert_request_info) OVERRIDE { | 12473 SSLCertRequestInfo* cert_request_info) OVERRIDE { |
| 12155 ADD_FAILURE(); | 12474 ADD_FAILURE(); |
| 12156 } | 12475 } |
| 12157 | 12476 |
| 12158 virtual bool IsSpdyHttpStream() const OVERRIDE { | 12477 virtual bool IsSpdyHttpStream() const OVERRIDE { |
| 12159 ADD_FAILURE(); | 12478 ADD_FAILURE(); |
| 12160 return false; | 12479 return false; |
| 12161 } | 12480 } |
| 12162 | 12481 |
| 12163 virtual void Drain(HttpNetworkSession* session) OVERRIDE { | 12482 virtual void Drain(HttpNetworkSession* session) OVERRIDE { ADD_FAILURE(); } |
| 12164 ADD_FAILURE(); | |
| 12165 } | |
| 12166 | 12483 |
| 12167 virtual void SetPriority(RequestPriority priority) OVERRIDE { | 12484 virtual void SetPriority(RequestPriority priority) OVERRIDE { |
| 12168 priority_ = priority; | 12485 priority_ = priority; |
| 12169 } | 12486 } |
| 12170 | 12487 |
| 12171 private: | 12488 private: |
| 12172 RequestPriority priority_; | 12489 RequestPriority priority_; |
| 12173 | 12490 |
| 12174 DISALLOW_COPY_AND_ASSIGN(FakeStream); | 12491 DISALLOW_COPY_AND_ASSIGN(FakeStream); |
| 12175 }; | 12492 }; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12220 | 12537 |
| 12221 virtual LoadState GetLoadState() const OVERRIDE { | 12538 virtual LoadState GetLoadState() const OVERRIDE { |
| 12222 ADD_FAILURE(); | 12539 ADD_FAILURE(); |
| 12223 return LoadState(); | 12540 return LoadState(); |
| 12224 } | 12541 } |
| 12225 | 12542 |
| 12226 virtual void SetPriority(RequestPriority priority) OVERRIDE { | 12543 virtual void SetPriority(RequestPriority priority) OVERRIDE { |
| 12227 priority_ = priority; | 12544 priority_ = priority; |
| 12228 } | 12545 } |
| 12229 | 12546 |
| 12230 virtual bool was_npn_negotiated() const OVERRIDE { | 12547 virtual bool was_npn_negotiated() const OVERRIDE { return false; } |
| 12231 return false; | |
| 12232 } | |
| 12233 | 12548 |
| 12234 virtual NextProto protocol_negotiated() const OVERRIDE { | 12549 virtual NextProto protocol_negotiated() const OVERRIDE { |
| 12235 return kProtoUnknown; | 12550 return kProtoUnknown; |
| 12236 } | 12551 } |
| 12237 | 12552 |
| 12238 virtual bool using_spdy() const OVERRIDE { | 12553 virtual bool using_spdy() const OVERRIDE { return false; } |
| 12239 return false; | |
| 12240 } | |
| 12241 | 12554 |
| 12242 private: | 12555 private: |
| 12243 RequestPriority priority_; | 12556 RequestPriority priority_; |
| 12244 HttpStreamRequest::Delegate* const delegate_; | 12557 HttpStreamRequest::Delegate* const delegate_; |
| 12245 WebSocketHandshakeStreamBase::CreateHelper* websocket_stream_create_helper_; | 12558 WebSocketHandshakeStreamBase::CreateHelper* websocket_stream_create_helper_; |
| 12246 | 12559 |
| 12247 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); | 12560 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); |
| 12248 }; | 12561 }; |
| 12249 | 12562 |
| 12250 // Fake HttpStreamFactory that vends FakeStreamRequests. | 12563 // Fake HttpStreamFactory that vends FakeStreamRequests. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12304 } | 12617 } |
| 12305 | 12618 |
| 12306 private: | 12619 private: |
| 12307 base::WeakPtr<FakeStreamRequest> last_stream_request_; | 12620 base::WeakPtr<FakeStreamRequest> last_stream_request_; |
| 12308 | 12621 |
| 12309 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); | 12622 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); |
| 12310 }; | 12623 }; |
| 12311 | 12624 |
| 12312 // TODO(yhirano): Split this class out into a net/websockets file, if it is | 12625 // TODO(yhirano): Split this class out into a net/websockets file, if it is |
| 12313 // worth doing. | 12626 // worth doing. |
| 12314 class FakeWebSocketStreamCreateHelper : | 12627 class FakeWebSocketStreamCreateHelper |
| 12315 public WebSocketHandshakeStreamBase::CreateHelper { | 12628 : public WebSocketHandshakeStreamBase::CreateHelper { |
| 12316 public: | 12629 public: |
| 12317 virtual WebSocketHandshakeStreamBase* CreateBasicStream( | 12630 virtual WebSocketHandshakeStreamBase* CreateBasicStream( |
| 12318 scoped_ptr<ClientSocketHandle> connection, | 12631 scoped_ptr<ClientSocketHandle> connection, |
| 12319 bool using_proxy) OVERRIDE { | 12632 bool using_proxy) OVERRIDE { |
| 12320 NOTREACHED(); | 12633 NOTREACHED(); |
| 12321 return NULL; | 12634 return NULL; |
| 12322 } | 12635 } |
| 12323 | 12636 |
| 12324 virtual WebSocketHandshakeStreamBase* CreateSpdyStream( | 12637 virtual WebSocketHandshakeStreamBase* CreateSpdyStream( |
| 12325 const base::WeakPtr<SpdySession>& session, | 12638 const base::WeakPtr<SpdySession>& session, |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12453 ClientSocketPoolManager::set_max_sockets_per_pool( | 12766 ClientSocketPoolManager::set_max_sockets_per_pool( |
| 12454 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); | 12767 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); |
| 12455 | 12768 |
| 12456 // Set up SSL request. | 12769 // Set up SSL request. |
| 12457 | 12770 |
| 12458 HttpRequestInfo ssl_request; | 12771 HttpRequestInfo ssl_request; |
| 12459 ssl_request.method = "GET"; | 12772 ssl_request.method = "GET"; |
| 12460 ssl_request.url = GURL("https://www.google.com/"); | 12773 ssl_request.url = GURL("https://www.google.com/"); |
| 12461 | 12774 |
| 12462 MockWrite ssl_writes[] = { | 12775 MockWrite ssl_writes[] = { |
| 12463 MockWrite("GET / HTTP/1.1\r\n" | 12776 MockWrite( |
| 12464 "Host: www.google.com\r\n" | 12777 "GET / HTTP/1.1\r\n" |
| 12465 "Connection: keep-alive\r\n\r\n"), | 12778 "Host: www.google.com\r\n" |
| 12779 "Connection: keep-alive\r\n\r\n"), |
| 12466 }; | 12780 }; |
| 12467 MockRead ssl_reads[] = { | 12781 MockRead ssl_reads[] = { |
| 12468 MockRead("HTTP/1.1 200 OK\r\n"), | 12782 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 11\r\n\r\n"), |
| 12469 MockRead("Content-Length: 11\r\n\r\n"), | 12783 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), |
| 12470 MockRead("hello world"), | |
| 12471 MockRead(SYNCHRONOUS, OK), | |
| 12472 }; | 12784 }; |
| 12473 StaticSocketDataProvider ssl_data(ssl_reads, arraysize(ssl_reads), | 12785 StaticSocketDataProvider ssl_data( |
| 12474 ssl_writes, arraysize(ssl_writes)); | 12786 ssl_reads, arraysize(ssl_reads), ssl_writes, arraysize(ssl_writes)); |
| 12475 session_deps_.socket_factory->AddSocketDataProvider(&ssl_data); | 12787 session_deps_.socket_factory->AddSocketDataProvider(&ssl_data); |
| 12476 | 12788 |
| 12477 SSLSocketDataProvider ssl(ASYNC, OK); | 12789 SSLSocketDataProvider ssl(ASYNC, OK); |
| 12478 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12790 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 12479 | 12791 |
| 12480 // Set up HTTP request. | 12792 // Set up HTTP request. |
| 12481 | 12793 |
| 12482 HttpRequestInfo http_request; | 12794 HttpRequestInfo http_request; |
| 12483 http_request.method = "GET"; | 12795 http_request.method = "GET"; |
| 12484 http_request.url = GURL("http://www.google.com/"); | 12796 http_request.url = GURL("http://www.google.com/"); |
| 12485 | 12797 |
| 12486 MockWrite http_writes[] = { | 12798 MockWrite http_writes[] = { |
| 12487 MockWrite("GET / HTTP/1.1\r\n" | 12799 MockWrite( |
| 12488 "Host: www.google.com\r\n" | 12800 "GET / HTTP/1.1\r\n" |
| 12489 "Connection: keep-alive\r\n\r\n"), | 12801 "Host: www.google.com\r\n" |
| 12802 "Connection: keep-alive\r\n\r\n"), |
| 12490 }; | 12803 }; |
| 12491 MockRead http_reads[] = { | 12804 MockRead http_reads[] = { |
| 12492 MockRead("HTTP/1.1 200 OK\r\n"), | 12805 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 7\r\n\r\n"), |
| 12493 MockRead("Content-Length: 7\r\n\r\n"), | 12806 MockRead("falafel"), MockRead(SYNCHRONOUS, OK), |
| 12494 MockRead("falafel"), | |
| 12495 MockRead(SYNCHRONOUS, OK), | |
| 12496 }; | 12807 }; |
| 12497 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 12808 StaticSocketDataProvider http_data( |
| 12498 http_writes, arraysize(http_writes)); | 12809 http_reads, arraysize(http_reads), http_writes, arraysize(http_writes)); |
| 12499 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 12810 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
| 12500 | 12811 |
| 12501 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12812 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12502 | 12813 |
| 12503 // Start the SSL request. | 12814 // Start the SSL request. |
| 12504 TestCompletionCallback ssl_callback; | 12815 TestCompletionCallback ssl_callback; |
| 12505 scoped_ptr<HttpTransaction> ssl_trans( | 12816 scoped_ptr<HttpTransaction> ssl_trans( |
| 12506 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12817 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12507 ASSERT_EQ(ERR_IO_PENDING, | 12818 ASSERT_EQ( |
| 12508 ssl_trans->Start(&ssl_request, ssl_callback.callback(), | 12819 ERR_IO_PENDING, |
| 12509 BoundNetLog())); | 12820 ssl_trans->Start(&ssl_request, ssl_callback.callback(), BoundNetLog())); |
| 12510 | 12821 |
| 12511 // Start the HTTP request. Pool should stall. | 12822 // Start the HTTP request. Pool should stall. |
| 12512 TestCompletionCallback http_callback; | 12823 TestCompletionCallback http_callback; |
| 12513 scoped_ptr<HttpTransaction> http_trans( | 12824 scoped_ptr<HttpTransaction> http_trans( |
| 12514 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12825 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12515 ASSERT_EQ(ERR_IO_PENDING, | 12826 ASSERT_EQ(ERR_IO_PENDING, |
| 12516 http_trans->Start(&http_request, http_callback.callback(), | 12827 http_trans->Start( |
| 12517 BoundNetLog())); | 12828 &http_request, http_callback.callback(), BoundNetLog())); |
| 12518 EXPECT_TRUE(IsTransportSocketPoolStalled(session)); | 12829 EXPECT_TRUE(IsTransportSocketPoolStalled(session)); |
| 12519 | 12830 |
| 12520 // Wait for response from SSL request. | 12831 // Wait for response from SSL request. |
| 12521 ASSERT_EQ(OK, ssl_callback.WaitForResult()); | 12832 ASSERT_EQ(OK, ssl_callback.WaitForResult()); |
| 12522 std::string response_data; | 12833 std::string response_data; |
| 12523 ASSERT_EQ(OK, ReadTransaction(ssl_trans.get(), &response_data)); | 12834 ASSERT_EQ(OK, ReadTransaction(ssl_trans.get(), &response_data)); |
| 12524 EXPECT_EQ("hello world", response_data); | 12835 EXPECT_EQ("hello world", response_data); |
| 12525 | 12836 |
| 12526 // The SSL socket should automatically be closed, so the HTTP request can | 12837 // The SSL socket should automatically be closed, so the HTTP request can |
| 12527 // start. | 12838 // start. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 12558 SSLSocketDataProvider ssl(ASYNC, OK); | 12869 SSLSocketDataProvider ssl(ASYNC, OK); |
| 12559 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); | 12870 session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 12560 | 12871 |
| 12561 // Set up HTTP request. | 12872 // Set up HTTP request. |
| 12562 | 12873 |
| 12563 HttpRequestInfo http_request; | 12874 HttpRequestInfo http_request; |
| 12564 http_request.method = "GET"; | 12875 http_request.method = "GET"; |
| 12565 http_request.url = GURL("http://www.google.com/"); | 12876 http_request.url = GURL("http://www.google.com/"); |
| 12566 | 12877 |
| 12567 MockWrite http_writes[] = { | 12878 MockWrite http_writes[] = { |
| 12568 MockWrite("GET / HTTP/1.1\r\n" | 12879 MockWrite( |
| 12569 "Host: www.google.com\r\n" | 12880 "GET / HTTP/1.1\r\n" |
| 12570 "Connection: keep-alive\r\n\r\n"), | 12881 "Host: www.google.com\r\n" |
| 12882 "Connection: keep-alive\r\n\r\n"), |
| 12571 }; | 12883 }; |
| 12572 MockRead http_reads[] = { | 12884 MockRead http_reads[] = { |
| 12573 MockRead("HTTP/1.1 200 OK\r\n"), | 12885 MockRead("HTTP/1.1 200 OK\r\n"), MockRead("Content-Length: 7\r\n\r\n"), |
| 12574 MockRead("Content-Length: 7\r\n\r\n"), | 12886 MockRead("falafel"), MockRead(SYNCHRONOUS, OK), |
| 12575 MockRead("falafel"), | |
| 12576 MockRead(SYNCHRONOUS, OK), | |
| 12577 }; | 12887 }; |
| 12578 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 12888 StaticSocketDataProvider http_data( |
| 12579 http_writes, arraysize(http_writes)); | 12889 http_reads, arraysize(http_reads), http_writes, arraysize(http_writes)); |
| 12580 session_deps_.socket_factory->AddSocketDataProvider(&http_data); | 12890 session_deps_.socket_factory->AddSocketDataProvider(&http_data); |
| 12581 | 12891 |
| 12582 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12892 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12583 | 12893 |
| 12584 // Preconnect an SSL socket. A preconnect is needed because connect jobs are | 12894 // Preconnect an SSL socket. A preconnect is needed because connect jobs are |
| 12585 // cancelled when a normal transaction is cancelled. | 12895 // cancelled when a normal transaction is cancelled. |
| 12586 net::HttpStreamFactory* http_stream_factory = session->http_stream_factory(); | 12896 net::HttpStreamFactory* http_stream_factory = session->http_stream_factory(); |
| 12587 net::SSLConfig ssl_config; | 12897 net::SSLConfig ssl_config; |
| 12588 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 12898 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
| 12589 http_stream_factory->PreconnectStreams(1, ssl_request, DEFAULT_PRIORITY, | 12899 http_stream_factory->PreconnectStreams( |
| 12590 ssl_config, ssl_config); | 12900 1, ssl_request, DEFAULT_PRIORITY, ssl_config, ssl_config); |
| 12591 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session)); | 12901 EXPECT_EQ(0, GetIdleSocketCountInSSLSocketPool(session)); |
| 12592 | 12902 |
| 12593 // Start the HTTP request. Pool should stall. | 12903 // Start the HTTP request. Pool should stall. |
| 12594 TestCompletionCallback http_callback; | 12904 TestCompletionCallback http_callback; |
| 12595 scoped_ptr<HttpTransaction> http_trans( | 12905 scoped_ptr<HttpTransaction> http_trans( |
| 12596 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | 12906 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); |
| 12597 ASSERT_EQ(ERR_IO_PENDING, | 12907 ASSERT_EQ(ERR_IO_PENDING, |
| 12598 http_trans->Start(&http_request, http_callback.callback(), | 12908 http_trans->Start( |
| 12599 BoundNetLog())); | 12909 &http_request, http_callback.callback(), BoundNetLog())); |
| 12600 EXPECT_TRUE(IsTransportSocketPoolStalled(session)); | 12910 EXPECT_TRUE(IsTransportSocketPoolStalled(session)); |
| 12601 | 12911 |
| 12602 // The SSL connection will automatically be closed once the connection is | 12912 // The SSL connection will automatically be closed once the connection is |
| 12603 // established, to let the HTTP request start. | 12913 // established, to let the HTTP request start. |
| 12604 ASSERT_EQ(OK, http_callback.WaitForResult()); | 12914 ASSERT_EQ(OK, http_callback.WaitForResult()); |
| 12605 std::string response_data; | 12915 std::string response_data; |
| 12606 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); | 12916 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); |
| 12607 EXPECT_EQ("falafel", response_data); | 12917 EXPECT_EQ("falafel", response_data); |
| 12608 | 12918 |
| 12609 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); | 12919 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); |
| 12610 } | 12920 } |
| 12611 | 12921 |
| 12612 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { | 12922 TEST_P(HttpNetworkTransactionTest, PostReadsErrorResponseAfterReset) { |
| 12613 ScopedVector<UploadElementReader> element_readers; | 12923 ScopedVector<UploadElementReader> element_readers; |
| 12614 element_readers.push_back(new UploadBytesElementReader("foo", 3)); | 12924 element_readers.push_back(new UploadBytesElementReader("foo", 3)); |
| 12615 UploadDataStream upload_data_stream(element_readers.Pass(), 0); | 12925 UploadDataStream upload_data_stream(element_readers.Pass(), 0); |
| 12616 | 12926 |
| 12617 HttpRequestInfo request; | 12927 HttpRequestInfo request; |
| 12618 request.method = "POST"; | 12928 request.method = "POST"; |
| 12619 request.url = GURL("http://www.foo.com/"); | 12929 request.url = GURL("http://www.foo.com/"); |
| 12620 request.upload_data_stream = &upload_data_stream; | 12930 request.upload_data_stream = &upload_data_stream; |
| 12621 request.load_flags = 0; | 12931 request.load_flags = 0; |
| 12622 | 12932 |
| 12623 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12933 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12624 scoped_ptr<HttpTransaction> trans( | 12934 scoped_ptr<HttpTransaction> trans( |
| 12625 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 12935 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12626 // Send headers successfully, but get an error while sending the body. | 12936 // Send headers successfully, but get an error while sending the body. |
| 12627 MockWrite data_writes[] = { | 12937 MockWrite data_writes[] = { |
| 12628 MockWrite("POST / HTTP/1.1\r\n" | 12938 MockWrite( |
| 12629 "Host: www.foo.com\r\n" | 12939 "POST / HTTP/1.1\r\n" |
| 12630 "Connection: keep-alive\r\n" | 12940 "Host: www.foo.com\r\n" |
| 12631 "Content-Length: 3\r\n\r\n"), | 12941 "Connection: keep-alive\r\n" |
| 12632 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 12942 "Content-Length: 3\r\n\r\n"), |
| 12943 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12633 }; | 12944 }; |
| 12634 | 12945 |
| 12635 MockRead data_reads[] = { | 12946 MockRead data_reads[] = { |
| 12636 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), | 12947 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), MockRead("hello world"), |
| 12637 MockRead("hello world"), | 12948 MockRead(SYNCHRONOUS, OK), |
| 12638 MockRead(SYNCHRONOUS, OK), | |
| 12639 }; | 12949 }; |
| 12640 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 12950 StaticSocketDataProvider data( |
| 12641 arraysize(data_writes)); | 12951 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12642 session_deps_.socket_factory->AddSocketDataProvider(&data); | 12952 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12643 | 12953 |
| 12644 TestCompletionCallback callback; | 12954 TestCompletionCallback callback; |
| 12645 | 12955 |
| 12646 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 12956 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12647 EXPECT_EQ(ERR_IO_PENDING, rv); | 12957 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12648 | 12958 |
| 12649 rv = callback.WaitForResult(); | 12959 rv = callback.WaitForResult(); |
| 12650 EXPECT_EQ(OK, rv); | 12960 EXPECT_EQ(OK, rv); |
| 12651 | 12961 |
| 12652 const HttpResponseInfo* response = trans->GetResponseInfo(); | 12962 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 12653 ASSERT_TRUE(response != NULL); | 12963 ASSERT_TRUE(response != NULL); |
| 12654 | 12964 |
| 12655 EXPECT_TRUE(response->headers.get() != NULL); | 12965 EXPECT_TRUE(response->headers.get() != NULL); |
| 12656 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); | 12966 EXPECT_EQ("HTTP/1.0 400 Not OK", response->headers->GetStatusLine()); |
| 12657 | 12967 |
| 12658 std::string response_data; | 12968 std::string response_data; |
| 12659 rv = ReadTransaction(trans.get(), &response_data); | 12969 rv = ReadTransaction(trans.get(), &response_data); |
| 12660 EXPECT_EQ(OK, rv); | 12970 EXPECT_EQ(OK, rv); |
| 12661 EXPECT_EQ("hello world", response_data); | 12971 EXPECT_EQ("hello world", response_data); |
| 12662 } | 12972 } |
| 12663 | 12973 |
| 12664 // This test makes sure the retry logic doesn't trigger when reading an error | 12974 // This test makes sure the retry logic doesn't trigger when reading an error |
| 12665 // response from a server that rejected a POST with a CONNECTION_RESET. | 12975 // response from a server that rejected a POST with a CONNECTION_RESET. |
| 12666 TEST_P(HttpNetworkTransactionTest, | 12976 TEST_P(HttpNetworkTransactionTest, |
| 12667 PostReadsErrorResponseAfterResetOnReusedSocket) { | 12977 PostReadsErrorResponseAfterResetOnReusedSocket) { |
| 12668 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 12978 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12669 MockWrite data_writes[] = { | 12979 MockWrite data_writes[] = { |
| 12670 MockWrite("GET / HTTP/1.1\r\n" | 12980 MockWrite( |
| 12671 "Host: www.foo.com\r\n" | 12981 "GET / HTTP/1.1\r\n" |
| 12672 "Connection: keep-alive\r\n\r\n"), | 12982 "Host: www.foo.com\r\n" |
| 12673 MockWrite("POST / HTTP/1.1\r\n" | 12983 "Connection: keep-alive\r\n\r\n"), |
| 12674 "Host: www.foo.com\r\n" | 12984 MockWrite( |
| 12675 "Connection: keep-alive\r\n" | 12985 "POST / HTTP/1.1\r\n" |
| 12676 "Content-Length: 3\r\n\r\n"), | 12986 "Host: www.foo.com\r\n" |
| 12677 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 12987 "Connection: keep-alive\r\n" |
| 12988 "Content-Length: 3\r\n\r\n"), |
| 12989 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12678 }; | 12990 }; |
| 12679 | 12991 |
| 12680 MockRead data_reads[] = { | 12992 MockRead data_reads[] = { |
| 12681 MockRead("HTTP/1.1 200 Peachy\r\n" | 12993 MockRead( |
| 12682 "Content-Length: 14\r\n\r\n"), | 12994 "HTTP/1.1 200 Peachy\r\n" |
| 12683 MockRead("first response"), | 12995 "Content-Length: 14\r\n\r\n"), |
| 12684 MockRead("HTTP/1.1 400 Not OK\r\n" | 12996 MockRead("first response"), MockRead( |
| 12685 "Content-Length: 15\r\n\r\n"), | 12997 "HTTP/1.1 400 Not OK\r\n" |
| 12686 MockRead("second response"), | 12998 "Content-Length: 15\r\n\r\n"), |
| 12687 MockRead(SYNCHRONOUS, OK), | 12999 MockRead("second response"), MockRead(SYNCHRONOUS, OK), |
| 12688 }; | 13000 }; |
| 12689 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13001 StaticSocketDataProvider data( |
| 12690 arraysize(data_writes)); | 13002 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12691 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13003 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12692 | 13004 |
| 12693 TestCompletionCallback callback; | 13005 TestCompletionCallback callback; |
| 12694 HttpRequestInfo request1; | 13006 HttpRequestInfo request1; |
| 12695 request1.method = "GET"; | 13007 request1.method = "GET"; |
| 12696 request1.url = GURL("http://www.foo.com/"); | 13008 request1.url = GURL("http://www.foo.com/"); |
| 12697 request1.load_flags = 0; | 13009 request1.load_flags = 0; |
| 12698 | 13010 |
| 12699 scoped_ptr<HttpTransaction> trans1( | 13011 scoped_ptr<HttpTransaction> trans1( |
| 12700 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13012 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12757 request.method = "POST"; | 13069 request.method = "POST"; |
| 12758 request.url = GURL("http://www.foo.com/"); | 13070 request.url = GURL("http://www.foo.com/"); |
| 12759 request.upload_data_stream = &upload_data_stream; | 13071 request.upload_data_stream = &upload_data_stream; |
| 12760 request.load_flags = 0; | 13072 request.load_flags = 0; |
| 12761 | 13073 |
| 12762 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13074 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12763 scoped_ptr<HttpTransaction> trans( | 13075 scoped_ptr<HttpTransaction> trans( |
| 12764 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13076 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12765 // Send headers successfully, but get an error while sending the body. | 13077 // Send headers successfully, but get an error while sending the body. |
| 12766 MockWrite data_writes[] = { | 13078 MockWrite data_writes[] = { |
| 12767 MockWrite("POST / HTTP/1.1\r\n" | 13079 MockWrite( |
| 12768 "Host: www.foo.com\r\n" | 13080 "POST / HTTP/1.1\r\n" |
| 12769 "Connection: keep-alive\r\n" | 13081 "Host: www.foo.com\r\n" |
| 12770 "Content-Length: 3\r\n\r\n" | 13082 "Connection: keep-alive\r\n" |
| 12771 "fo"), | 13083 "Content-Length: 3\r\n\r\n" |
| 12772 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13084 "fo"), |
| 13085 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12773 }; | 13086 }; |
| 12774 | 13087 |
| 12775 MockRead data_reads[] = { | 13088 MockRead data_reads[] = { |
| 12776 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), | 13089 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), MockRead("hello world"), |
| 12777 MockRead("hello world"), | 13090 MockRead(SYNCHRONOUS, OK), |
| 12778 MockRead(SYNCHRONOUS, OK), | |
| 12779 }; | 13091 }; |
| 12780 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13092 StaticSocketDataProvider data( |
| 12781 arraysize(data_writes)); | 13093 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12782 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13094 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12783 | 13095 |
| 12784 TestCompletionCallback callback; | 13096 TestCompletionCallback callback; |
| 12785 | 13097 |
| 12786 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13098 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12787 EXPECT_EQ(ERR_IO_PENDING, rv); | 13099 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12788 | 13100 |
| 12789 rv = callback.WaitForResult(); | 13101 rv = callback.WaitForResult(); |
| 12790 EXPECT_EQ(OK, rv); | 13102 EXPECT_EQ(OK, rv); |
| 12791 | 13103 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 12812 request.method = "POST"; | 13124 request.method = "POST"; |
| 12813 request.url = GURL("http://www.foo.com/"); | 13125 request.url = GURL("http://www.foo.com/"); |
| 12814 request.upload_data_stream = &upload_data_stream; | 13126 request.upload_data_stream = &upload_data_stream; |
| 12815 request.load_flags = 0; | 13127 request.load_flags = 0; |
| 12816 | 13128 |
| 12817 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13129 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12818 scoped_ptr<HttpTransaction> trans( | 13130 scoped_ptr<HttpTransaction> trans( |
| 12819 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13131 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12820 // Send headers successfully, but get an error while sending the body. | 13132 // Send headers successfully, but get an error while sending the body. |
| 12821 MockWrite data_writes[] = { | 13133 MockWrite data_writes[] = { |
| 12822 MockWrite("POST / HTTP/1.1\r\n" | 13134 MockWrite( |
| 12823 "Host: www.foo.com\r\n" | 13135 "POST / HTTP/1.1\r\n" |
| 12824 "Connection: keep-alive\r\n" | 13136 "Host: www.foo.com\r\n" |
| 12825 "Transfer-Encoding: chunked\r\n\r\n"), | 13137 "Connection: keep-alive\r\n" |
| 12826 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13138 "Transfer-Encoding: chunked\r\n\r\n"), |
| 13139 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12827 }; | 13140 }; |
| 12828 | 13141 |
| 12829 MockRead data_reads[] = { | 13142 MockRead data_reads[] = { |
| 12830 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), | 13143 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), MockRead("hello world"), |
| 12831 MockRead("hello world"), | 13144 MockRead(SYNCHRONOUS, OK), |
| 12832 MockRead(SYNCHRONOUS, OK), | |
| 12833 }; | 13145 }; |
| 12834 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13146 StaticSocketDataProvider data( |
| 12835 arraysize(data_writes)); | 13147 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12836 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13148 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12837 | 13149 |
| 12838 TestCompletionCallback callback; | 13150 TestCompletionCallback callback; |
| 12839 | 13151 |
| 12840 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13152 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12841 EXPECT_EQ(ERR_IO_PENDING, rv); | 13153 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12842 // Make sure the headers are sent before adding a chunk. This ensures that | 13154 // Make sure the headers are sent before adding a chunk. This ensures that |
| 12843 // they can't be merged with the body in a single send. Not currently | 13155 // they can't be merged with the body in a single send. Not currently |
| 12844 // necessary since a chunked body is never merged with headers, but this makes | 13156 // necessary since a chunked body is never merged with headers, but this makes |
| 12845 // the test more future proof. | 13157 // the test more future proof. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 12871 request.method = "POST"; | 13183 request.method = "POST"; |
| 12872 request.url = GURL("http://www.foo.com/"); | 13184 request.url = GURL("http://www.foo.com/"); |
| 12873 request.upload_data_stream = &upload_data_stream; | 13185 request.upload_data_stream = &upload_data_stream; |
| 12874 request.load_flags = 0; | 13186 request.load_flags = 0; |
| 12875 | 13187 |
| 12876 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13188 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12877 scoped_ptr<HttpTransaction> trans( | 13189 scoped_ptr<HttpTransaction> trans( |
| 12878 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13190 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12879 | 13191 |
| 12880 MockWrite data_writes[] = { | 13192 MockWrite data_writes[] = { |
| 12881 MockWrite("POST / HTTP/1.1\r\n" | 13193 MockWrite( |
| 12882 "Host: www.foo.com\r\n" | 13194 "POST / HTTP/1.1\r\n" |
| 12883 "Connection: keep-alive\r\n" | 13195 "Host: www.foo.com\r\n" |
| 12884 "Content-Length: 3\r\n\r\n"), | 13196 "Connection: keep-alive\r\n" |
| 12885 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13197 "Content-Length: 3\r\n\r\n"), |
| 13198 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12886 }; | 13199 }; |
| 12887 | 13200 |
| 12888 MockRead data_reads[] = { | 13201 MockRead data_reads[] = { |
| 12889 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), | 13202 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), |
| 12890 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), | 13203 MockRead("HTTP/1.0 400 Not OK\r\n\r\n"), MockRead("hello world"), |
| 12891 MockRead("hello world"), | 13204 MockRead(SYNCHRONOUS, OK), |
| 12892 MockRead(SYNCHRONOUS, OK), | |
| 12893 }; | 13205 }; |
| 12894 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13206 StaticSocketDataProvider data( |
| 12895 arraysize(data_writes)); | 13207 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12896 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13208 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12897 | 13209 |
| 12898 TestCompletionCallback callback; | 13210 TestCompletionCallback callback; |
| 12899 | 13211 |
| 12900 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13212 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12901 EXPECT_EQ(ERR_IO_PENDING, rv); | 13213 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12902 | 13214 |
| 12903 rv = callback.WaitForResult(); | 13215 rv = callback.WaitForResult(); |
| 12904 EXPECT_EQ(OK, rv); | 13216 EXPECT_EQ(OK, rv); |
| 12905 | 13217 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 12924 request.method = "POST"; | 13236 request.method = "POST"; |
| 12925 request.url = GURL("http://www.foo.com/"); | 13237 request.url = GURL("http://www.foo.com/"); |
| 12926 request.upload_data_stream = &upload_data_stream; | 13238 request.upload_data_stream = &upload_data_stream; |
| 12927 request.load_flags = 0; | 13239 request.load_flags = 0; |
| 12928 | 13240 |
| 12929 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13241 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12930 scoped_ptr<HttpTransaction> trans( | 13242 scoped_ptr<HttpTransaction> trans( |
| 12931 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13243 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12932 // Send headers successfully, but get an error while sending the body. | 13244 // Send headers successfully, but get an error while sending the body. |
| 12933 MockWrite data_writes[] = { | 13245 MockWrite data_writes[] = { |
| 12934 MockWrite("POST / HTTP/1.1\r\n" | 13246 MockWrite( |
| 12935 "Host: www.foo.com\r\n" | 13247 "POST / HTTP/1.1\r\n" |
| 12936 "Connection: keep-alive\r\n" | 13248 "Host: www.foo.com\r\n" |
| 12937 "Content-Length: 3\r\n\r\n"), | 13249 "Connection: keep-alive\r\n" |
| 12938 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13250 "Content-Length: 3\r\n\r\n"), |
| 13251 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12939 }; | 13252 }; |
| 12940 | 13253 |
| 12941 MockRead data_reads[] = { | 13254 MockRead data_reads[] = { |
| 12942 MockRead("HTTP/1.0 200 Just Dandy\r\n\r\n"), | 13255 MockRead("HTTP/1.0 200 Just Dandy\r\n\r\n"), MockRead("hello world"), |
| 12943 MockRead("hello world"), | 13256 MockRead(SYNCHRONOUS, OK), |
| 12944 MockRead(SYNCHRONOUS, OK), | |
| 12945 }; | 13257 }; |
| 12946 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13258 StaticSocketDataProvider data( |
| 12947 arraysize(data_writes)); | 13259 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12948 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13260 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12949 | 13261 |
| 12950 TestCompletionCallback callback; | 13262 TestCompletionCallback callback; |
| 12951 | 13263 |
| 12952 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13264 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 12953 EXPECT_EQ(ERR_IO_PENDING, rv); | 13265 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 12954 | 13266 |
| 12955 rv = callback.WaitForResult(); | 13267 rv = callback.WaitForResult(); |
| 12956 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13268 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 12957 | 13269 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 12969 request.method = "POST"; | 13281 request.method = "POST"; |
| 12970 request.url = GURL("http://www.foo.com/"); | 13282 request.url = GURL("http://www.foo.com/"); |
| 12971 request.upload_data_stream = &upload_data_stream; | 13283 request.upload_data_stream = &upload_data_stream; |
| 12972 request.load_flags = 0; | 13284 request.load_flags = 0; |
| 12973 | 13285 |
| 12974 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13286 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 12975 scoped_ptr<HttpTransaction> trans( | 13287 scoped_ptr<HttpTransaction> trans( |
| 12976 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13288 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 12977 // Send headers successfully, but get an error while sending the body. | 13289 // Send headers successfully, but get an error while sending the body. |
| 12978 MockWrite data_writes[] = { | 13290 MockWrite data_writes[] = { |
| 12979 MockWrite("POST / HTTP/1.1\r\n" | 13291 MockWrite( |
| 12980 "Host: www.foo.com\r\n" | 13292 "POST / HTTP/1.1\r\n" |
| 12981 "Connection: keep-alive\r\n" | 13293 "Host: www.foo.com\r\n" |
| 12982 "Content-Length: 3\r\n\r\n"), | 13294 "Connection: keep-alive\r\n" |
| 12983 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13295 "Content-Length: 3\r\n\r\n"), |
| 13296 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 12984 }; | 13297 }; |
| 12985 | 13298 |
| 12986 MockRead data_reads[] = { | 13299 MockRead data_reads[] = { |
| 12987 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), | 13300 MockRead("HTTP/1.0 100 Continue\r\n\r\n"), |
| 12988 MockRead("HTTP/1.0 302 Redirect\r\n"), | 13301 MockRead("HTTP/1.0 302 Redirect\r\n"), |
| 12989 MockRead("Location: http://somewhere-else.com/\r\n"), | 13302 MockRead("Location: http://somewhere-else.com/\r\n"), |
| 12990 MockRead("Content-Length: 0\r\n\r\n"), | 13303 MockRead("Content-Length: 0\r\n\r\n"), |
| 12991 MockRead(SYNCHRONOUS, OK), | 13304 MockRead(SYNCHRONOUS, OK), |
| 12992 }; | 13305 }; |
| 12993 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13306 StaticSocketDataProvider data( |
| 12994 arraysize(data_writes)); | 13307 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 12995 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13308 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 12996 | 13309 |
| 12997 TestCompletionCallback callback; | 13310 TestCompletionCallback callback; |
| 12998 | 13311 |
| 12999 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13312 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 13000 EXPECT_EQ(ERR_IO_PENDING, rv); | 13313 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 13001 | 13314 |
| 13002 rv = callback.WaitForResult(); | 13315 rv = callback.WaitForResult(); |
| 13003 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13316 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 13004 | 13317 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 13015 request.method = "POST"; | 13328 request.method = "POST"; |
| 13016 request.url = GURL("http://www.foo.com/"); | 13329 request.url = GURL("http://www.foo.com/"); |
| 13017 request.upload_data_stream = &upload_data_stream; | 13330 request.upload_data_stream = &upload_data_stream; |
| 13018 request.load_flags = 0; | 13331 request.load_flags = 0; |
| 13019 | 13332 |
| 13020 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13333 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 13021 scoped_ptr<HttpTransaction> trans( | 13334 scoped_ptr<HttpTransaction> trans( |
| 13022 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13335 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 13023 // Send headers successfully, but get an error while sending the body. | 13336 // Send headers successfully, but get an error while sending the body. |
| 13024 MockWrite data_writes[] = { | 13337 MockWrite data_writes[] = { |
| 13025 MockWrite("POST / HTTP/1.1\r\n" | 13338 MockWrite( |
| 13026 "Host: www.foo.com\r\n" | 13339 "POST / HTTP/1.1\r\n" |
| 13027 "Connection: keep-alive\r\n" | 13340 "Host: www.foo.com\r\n" |
| 13028 "Content-Length: 3\r\n\r\n"), | 13341 "Connection: keep-alive\r\n" |
| 13029 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13342 "Content-Length: 3\r\n\r\n"), |
| 13343 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 13030 }; | 13344 }; |
| 13031 | 13345 |
| 13032 MockRead data_reads[] = { | 13346 MockRead data_reads[] = { |
| 13033 MockRead("HTTP 0.9 rocks!"), | 13347 MockRead("HTTP 0.9 rocks!"), MockRead(SYNCHRONOUS, OK), |
| 13034 MockRead(SYNCHRONOUS, OK), | |
| 13035 }; | 13348 }; |
| 13036 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13349 StaticSocketDataProvider data( |
| 13037 arraysize(data_writes)); | 13350 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 13038 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13351 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 13039 | 13352 |
| 13040 TestCompletionCallback callback; | 13353 TestCompletionCallback callback; |
| 13041 | 13354 |
| 13042 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13355 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 13043 EXPECT_EQ(ERR_IO_PENDING, rv); | 13356 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 13044 | 13357 |
| 13045 rv = callback.WaitForResult(); | 13358 rv = callback.WaitForResult(); |
| 13046 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13359 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 13047 | 13360 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 13058 request.method = "POST"; | 13371 request.method = "POST"; |
| 13059 request.url = GURL("http://www.foo.com/"); | 13372 request.url = GURL("http://www.foo.com/"); |
| 13060 request.upload_data_stream = &upload_data_stream; | 13373 request.upload_data_stream = &upload_data_stream; |
| 13061 request.load_flags = 0; | 13374 request.load_flags = 0; |
| 13062 | 13375 |
| 13063 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | 13376 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); |
| 13064 scoped_ptr<HttpTransaction> trans( | 13377 scoped_ptr<HttpTransaction> trans( |
| 13065 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); | 13378 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); |
| 13066 // Send headers successfully, but get an error while sending the body. | 13379 // Send headers successfully, but get an error while sending the body. |
| 13067 MockWrite data_writes[] = { | 13380 MockWrite data_writes[] = { |
| 13068 MockWrite("POST / HTTP/1.1\r\n" | 13381 MockWrite( |
| 13069 "Host: www.foo.com\r\n" | 13382 "POST / HTTP/1.1\r\n" |
| 13070 "Connection: keep-alive\r\n" | 13383 "Host: www.foo.com\r\n" |
| 13071 "Content-Length: 3\r\n\r\n"), | 13384 "Connection: keep-alive\r\n" |
| 13072 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), | 13385 "Content-Length: 3\r\n\r\n"), |
| 13386 MockWrite(SYNCHRONOUS, ERR_CONNECTION_RESET), |
| 13073 }; | 13387 }; |
| 13074 | 13388 |
| 13075 MockRead data_reads[] = { | 13389 MockRead data_reads[] = { |
| 13076 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), | 13390 MockRead("HTTP/1.0 400 Not a Full Response\r\n"), |
| 13077 MockRead(SYNCHRONOUS, OK), | 13391 MockRead(SYNCHRONOUS, OK), |
| 13078 }; | 13392 }; |
| 13079 StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes, | 13393 StaticSocketDataProvider data( |
| 13080 arraysize(data_writes)); | 13394 data_reads, arraysize(data_reads), data_writes, arraysize(data_writes)); |
| 13081 session_deps_.socket_factory->AddSocketDataProvider(&data); | 13395 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 13082 | 13396 |
| 13083 TestCompletionCallback callback; | 13397 TestCompletionCallback callback; |
| 13084 | 13398 |
| 13085 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 13399 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 13086 EXPECT_EQ(ERR_IO_PENDING, rv); | 13400 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 13087 | 13401 |
| 13088 rv = callback.WaitForResult(); | 13402 rv = callback.WaitForResult(); |
| 13089 EXPECT_EQ(ERR_CONNECTION_RESET, rv); | 13403 EXPECT_EQ(ERR_CONNECTION_RESET, rv); |
| 13090 | 13404 |
| 13091 const HttpResponseInfo* response = trans->GetResponseInfo(); | 13405 const HttpResponseInfo* response = trans->GetResponseInfo(); |
| 13092 EXPECT_TRUE(response == NULL); | 13406 EXPECT_TRUE(response == NULL); |
| 13093 } | 13407 } |
| 13094 | 13408 |
| 13095 } // namespace net | 13409 } // namespace net |
| OLD | NEW |