| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/url_request/url_request_ftp_job.h" | 5 #include "net/url_request/url_request_ftp_job.h" |
| 6 | 6 |
| 7 #include "base/memory/ref_counted.h" | 7 #include "base/memory/ref_counted.h" |
| 8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "net/base/host_port_pair.h" | 10 #include "net/base/host_port_pair.h" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 }; | 261 }; |
| 262 MockRead reads[] = { | 262 MockRead reads[] = { |
| 263 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), | 263 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), |
| 264 MockRead(ASYNC, 2, "Content-Length: 9\r\n\r\n"), | 264 MockRead(ASYNC, 2, "Content-Length: 9\r\n\r\n"), |
| 265 MockRead(ASYNC, 3, "test.html"), | 265 MockRead(ASYNC, 3, "test.html"), |
| 266 }; | 266 }; |
| 267 | 267 |
| 268 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 268 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 269 | 269 |
| 270 TestDelegate request_delegate; | 270 TestDelegate request_delegate; |
| 271 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 271 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 272 DEFAULT_PRIORITY, | 272 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, |
| 273 &request_delegate, | 273 &request_delegate, NULL)); |
| 274 request_context()); | 274 url_request->Start(); |
| 275 url_request.Start(); | 275 ASSERT_TRUE(url_request->is_pending()); |
| 276 ASSERT_TRUE(url_request.is_pending()); | |
| 277 socket_data(0)->RunFor(4); | 276 socket_data(0)->RunFor(4); |
| 278 | 277 |
| 279 EXPECT_TRUE(url_request.status().is_success()); | 278 EXPECT_TRUE(url_request->status().is_success()); |
| 280 EXPECT_TRUE(url_request.proxy_server().Equals( | 279 EXPECT_TRUE(url_request->proxy_server().Equals( |
| 281 net::HostPortPair::FromString("localhost:80"))); | 280 net::HostPortPair::FromString("localhost:80"))); |
| 282 EXPECT_EQ(1, network_delegate()->completed_requests()); | 281 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 283 EXPECT_EQ(0, network_delegate()->error_count()); | 282 EXPECT_EQ(0, network_delegate()->error_count()); |
| 284 EXPECT_FALSE(request_delegate.auth_required_called()); | 283 EXPECT_FALSE(request_delegate.auth_required_called()); |
| 285 EXPECT_EQ("test.html", request_delegate.data_received()); | 284 EXPECT_EQ("test.html", request_delegate.data_received()); |
| 286 } | 285 } |
| 287 | 286 |
| 288 // Regression test for http://crbug.com/237526 . | 287 // Regression test for http://crbug.com/237526 . |
| 289 TEST_F(URLRequestFtpJobTest, FtpProxyRequestOrphanJob) { | 288 TEST_F(URLRequestFtpJobTest, FtpProxyRequestOrphanJob) { |
| 290 // Use a PAC URL so that URLRequestFtpJob's |pac_request_| field is non-NULL. | 289 // Use a PAC URL so that URLRequestFtpJob's |pac_request_| field is non-NULL. |
| 291 request_context()->set_proxy_service( | 290 request_context()->set_proxy_service( |
| 292 new ProxyService( | 291 new ProxyService( |
| 293 new ProxyConfigServiceFixed( | 292 new ProxyConfigServiceFixed( |
| 294 ProxyConfig::CreateFromCustomPacURL(GURL("http://foo"))), | 293 ProxyConfig::CreateFromCustomPacURL(GURL("http://foo"))), |
| 295 new MockAsyncProxyResolver, NULL)); | 294 new MockAsyncProxyResolver, NULL)); |
| 296 | 295 |
| 297 TestDelegate request_delegate; | 296 TestDelegate request_delegate; |
| 298 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 297 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 299 DEFAULT_PRIORITY, | 298 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 300 &request_delegate, | 299 NULL)); |
| 301 request_context()); | 300 url_request->Start(); |
| 302 url_request.Start(); | |
| 303 | 301 |
| 304 // Now |url_request| will be deleted before its completion, | 302 // Now |url_request| will be deleted before its completion, |
| 305 // resulting in it being orphaned. It should not crash. | 303 // resulting in it being orphaned. It should not crash. |
| 306 } | 304 } |
| 307 | 305 |
| 308 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAuthNoCredentials) { | 306 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAuthNoCredentials) { |
| 309 MockWrite writes[] = { | 307 MockWrite writes[] = { |
| 310 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 308 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 311 "Host: ftp.example.com\r\n" | 309 "Host: ftp.example.com\r\n" |
| 312 "Proxy-Connection: keep-alive\r\n\r\n"), | 310 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 313 }; | 311 }; |
| 314 MockRead reads[] = { | 312 MockRead reads[] = { |
| 315 // No credentials. | 313 // No credentials. |
| 316 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), | 314 MockRead(ASYNC, 1, "HTTP/1.1 407 Proxy Authentication Required\r\n"), |
| 317 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic " | 315 MockRead(ASYNC, 2, "Proxy-Authenticate: Basic " |
| 318 "realm=\"MyRealm1\"\r\n"), | 316 "realm=\"MyRealm1\"\r\n"), |
| 319 MockRead(ASYNC, 3, "Content-Length: 9\r\n\r\n"), | 317 MockRead(ASYNC, 3, "Content-Length: 9\r\n\r\n"), |
| 320 MockRead(ASYNC, 4, "test.html"), | 318 MockRead(ASYNC, 4, "test.html"), |
| 321 }; | 319 }; |
| 322 | 320 |
| 323 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 321 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 324 | 322 |
| 325 TestDelegate request_delegate; | 323 TestDelegate request_delegate; |
| 326 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 324 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 327 DEFAULT_PRIORITY, | 325 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 328 &request_delegate, | 326 NULL)); |
| 329 request_context()); | 327 url_request->Start(); |
| 330 url_request.Start(); | 328 ASSERT_TRUE(url_request->is_pending()); |
| 331 ASSERT_TRUE(url_request.is_pending()); | |
| 332 socket_data(0)->RunFor(5); | 329 socket_data(0)->RunFor(5); |
| 333 | 330 |
| 334 EXPECT_TRUE(url_request.status().is_success()); | 331 EXPECT_TRUE(url_request->status().is_success()); |
| 335 EXPECT_TRUE(url_request.proxy_server().Equals( | 332 EXPECT_TRUE(url_request->proxy_server().Equals( |
| 336 net::HostPortPair::FromString("localhost:80"))); | 333 net::HostPortPair::FromString("localhost:80"))); |
| 337 EXPECT_EQ(1, network_delegate()->completed_requests()); | 334 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 338 EXPECT_EQ(0, network_delegate()->error_count()); | 335 EXPECT_EQ(0, network_delegate()->error_count()); |
| 339 EXPECT_TRUE(request_delegate.auth_required_called()); | 336 EXPECT_TRUE(request_delegate.auth_required_called()); |
| 340 EXPECT_EQ("test.html", request_delegate.data_received()); | 337 EXPECT_EQ("test.html", request_delegate.data_received()); |
| 341 } | 338 } |
| 342 | 339 |
| 343 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAuthWithCredentials) { | 340 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAuthWithCredentials) { |
| 344 MockWrite writes[] = { | 341 MockWrite writes[] = { |
| 345 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 342 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 362 MockRead(ASYNC, 6, "HTTP/1.1 200 OK\r\n"), | 359 MockRead(ASYNC, 6, "HTTP/1.1 200 OK\r\n"), |
| 363 MockRead(ASYNC, 7, "Content-Length: 10\r\n\r\n"), | 360 MockRead(ASYNC, 7, "Content-Length: 10\r\n\r\n"), |
| 364 MockRead(ASYNC, 8, "test2.html"), | 361 MockRead(ASYNC, 8, "test2.html"), |
| 365 }; | 362 }; |
| 366 | 363 |
| 367 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 364 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 368 | 365 |
| 369 TestDelegate request_delegate; | 366 TestDelegate request_delegate; |
| 370 request_delegate.set_credentials( | 367 request_delegate.set_credentials( |
| 371 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); | 368 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); |
| 372 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 369 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 373 DEFAULT_PRIORITY, | 370 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 374 &request_delegate, | 371 NULL)); |
| 375 request_context()); | 372 url_request->Start(); |
| 376 url_request.Start(); | 373 ASSERT_TRUE(url_request->is_pending()); |
| 377 ASSERT_TRUE(url_request.is_pending()); | |
| 378 socket_data(0)->RunFor(9); | 374 socket_data(0)->RunFor(9); |
| 379 | 375 |
| 380 EXPECT_TRUE(url_request.status().is_success()); | 376 EXPECT_TRUE(url_request->status().is_success()); |
| 381 EXPECT_EQ(1, network_delegate()->completed_requests()); | 377 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 382 EXPECT_EQ(0, network_delegate()->error_count()); | 378 EXPECT_EQ(0, network_delegate()->error_count()); |
| 383 EXPECT_TRUE(request_delegate.auth_required_called()); | 379 EXPECT_TRUE(request_delegate.auth_required_called()); |
| 384 EXPECT_EQ("test2.html", request_delegate.data_received()); | 380 EXPECT_EQ("test2.html", request_delegate.data_received()); |
| 385 } | 381 } |
| 386 | 382 |
| 387 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedServerAuthNoCredentials) { | 383 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedServerAuthNoCredentials) { |
| 388 MockWrite writes[] = { | 384 MockWrite writes[] = { |
| 389 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 385 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 390 "Host: ftp.example.com\r\n" | 386 "Host: ftp.example.com\r\n" |
| 391 "Proxy-Connection: keep-alive\r\n\r\n"), | 387 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 392 }; | 388 }; |
| 393 MockRead reads[] = { | 389 MockRead reads[] = { |
| 394 // No credentials. | 390 // No credentials. |
| 395 MockRead(ASYNC, 1, "HTTP/1.1 401 Unauthorized\r\n"), | 391 MockRead(ASYNC, 1, "HTTP/1.1 401 Unauthorized\r\n"), |
| 396 MockRead(ASYNC, 2, "WWW-Authenticate: Basic " | 392 MockRead(ASYNC, 2, "WWW-Authenticate: Basic " |
| 397 "realm=\"MyRealm1\"\r\n"), | 393 "realm=\"MyRealm1\"\r\n"), |
| 398 MockRead(ASYNC, 3, "Content-Length: 9\r\n\r\n"), | 394 MockRead(ASYNC, 3, "Content-Length: 9\r\n\r\n"), |
| 399 MockRead(ASYNC, 4, "test.html"), | 395 MockRead(ASYNC, 4, "test.html"), |
| 400 }; | 396 }; |
| 401 | 397 |
| 402 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 398 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 403 | 399 |
| 404 TestDelegate request_delegate; | 400 TestDelegate request_delegate; |
| 405 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 401 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 406 DEFAULT_PRIORITY, | 402 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 407 &request_delegate, | 403 NULL)); |
| 408 request_context()); | 404 url_request->Start(); |
| 409 url_request.Start(); | 405 ASSERT_TRUE(url_request->is_pending()); |
| 410 ASSERT_TRUE(url_request.is_pending()); | |
| 411 socket_data(0)->RunFor(5); | 406 socket_data(0)->RunFor(5); |
| 412 | 407 |
| 413 EXPECT_TRUE(url_request.status().is_success()); | 408 EXPECT_TRUE(url_request->status().is_success()); |
| 414 EXPECT_EQ(1, network_delegate()->completed_requests()); | 409 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 415 EXPECT_EQ(0, network_delegate()->error_count()); | 410 EXPECT_EQ(0, network_delegate()->error_count()); |
| 416 EXPECT_TRUE(request_delegate.auth_required_called()); | 411 EXPECT_TRUE(request_delegate.auth_required_called()); |
| 417 EXPECT_EQ("test.html", request_delegate.data_received()); | 412 EXPECT_EQ("test.html", request_delegate.data_received()); |
| 418 } | 413 } |
| 419 | 414 |
| 420 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedServerAuthWithCredentials) { | 415 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedServerAuthWithCredentials) { |
| 421 MockWrite writes[] = { | 416 MockWrite writes[] = { |
| 422 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 417 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 423 "Host: ftp.example.com\r\n" | 418 "Host: ftp.example.com\r\n" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 439 MockRead(ASYNC, 6, "HTTP/1.1 200 OK\r\n"), | 434 MockRead(ASYNC, 6, "HTTP/1.1 200 OK\r\n"), |
| 440 MockRead(ASYNC, 7, "Content-Length: 10\r\n\r\n"), | 435 MockRead(ASYNC, 7, "Content-Length: 10\r\n\r\n"), |
| 441 MockRead(ASYNC, 8, "test2.html"), | 436 MockRead(ASYNC, 8, "test2.html"), |
| 442 }; | 437 }; |
| 443 | 438 |
| 444 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 439 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 445 | 440 |
| 446 TestDelegate request_delegate; | 441 TestDelegate request_delegate; |
| 447 request_delegate.set_credentials( | 442 request_delegate.set_credentials( |
| 448 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); | 443 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); |
| 449 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 444 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 450 DEFAULT_PRIORITY, | 445 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 451 &request_delegate, | 446 NULL)); |
| 452 request_context()); | 447 url_request->Start(); |
| 453 url_request.Start(); | 448 ASSERT_TRUE(url_request->is_pending()); |
| 454 ASSERT_TRUE(url_request.is_pending()); | |
| 455 socket_data(0)->RunFor(9); | 449 socket_data(0)->RunFor(9); |
| 456 | 450 |
| 457 EXPECT_TRUE(url_request.status().is_success()); | 451 EXPECT_TRUE(url_request->status().is_success()); |
| 458 EXPECT_EQ(1, network_delegate()->completed_requests()); | 452 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 459 EXPECT_EQ(0, network_delegate()->error_count()); | 453 EXPECT_EQ(0, network_delegate()->error_count()); |
| 460 EXPECT_TRUE(request_delegate.auth_required_called()); | 454 EXPECT_TRUE(request_delegate.auth_required_called()); |
| 461 EXPECT_EQ("test2.html", request_delegate.data_received()); | 455 EXPECT_EQ("test2.html", request_delegate.data_received()); |
| 462 } | 456 } |
| 463 | 457 |
| 464 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAndServerAuth) { | 458 TEST_F(URLRequestFtpJobTest, FtpProxyRequestNeedProxyAndServerAuth) { |
| 465 MockWrite writes[] = { | 459 MockWrite writes[] = { |
| 466 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 460 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 467 "Host: ftp.example.com\r\n" | 461 "Host: ftp.example.com\r\n" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 | 499 |
| 506 // Make sure cached FTP credentials are not used for proxy authentication. | 500 // Make sure cached FTP credentials are not used for proxy authentication. |
| 507 request_context()->GetFtpAuthCache()->Add( | 501 request_context()->GetFtpAuthCache()->Add( |
| 508 url.GetOrigin(), | 502 url.GetOrigin(), |
| 509 AuthCredentials(ASCIIToUTF16("userdonotuse"), | 503 AuthCredentials(ASCIIToUTF16("userdonotuse"), |
| 510 ASCIIToUTF16("passworddonotuse"))); | 504 ASCIIToUTF16("passworddonotuse"))); |
| 511 | 505 |
| 512 TestDelegate request_delegate; | 506 TestDelegate request_delegate; |
| 513 request_delegate.set_credentials( | 507 request_delegate.set_credentials( |
| 514 AuthCredentials(ASCIIToUTF16("proxyuser"), ASCIIToUTF16("proxypass"))); | 508 AuthCredentials(ASCIIToUTF16("proxyuser"), ASCIIToUTF16("proxypass"))); |
| 515 URLRequest url_request( | 509 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 516 url, DEFAULT_PRIORITY, &request_delegate, request_context()); | 510 url, DEFAULT_PRIORITY, &request_delegate, NULL)); |
| 517 url_request.Start(); | 511 url_request->Start(); |
| 518 ASSERT_TRUE(url_request.is_pending()); | 512 ASSERT_TRUE(url_request->is_pending()); |
| 519 socket_data(0)->RunFor(5); | 513 socket_data(0)->RunFor(5); |
| 520 | 514 |
| 521 request_delegate.set_credentials( | 515 request_delegate.set_credentials( |
| 522 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); | 516 AuthCredentials(ASCIIToUTF16("myuser"), ASCIIToUTF16("mypass"))); |
| 523 socket_data(0)->RunFor(9); | 517 socket_data(0)->RunFor(9); |
| 524 | 518 |
| 525 EXPECT_TRUE(url_request.status().is_success()); | 519 EXPECT_TRUE(url_request->status().is_success()); |
| 526 EXPECT_EQ(1, network_delegate()->completed_requests()); | 520 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 527 EXPECT_EQ(0, network_delegate()->error_count()); | 521 EXPECT_EQ(0, network_delegate()->error_count()); |
| 528 EXPECT_TRUE(request_delegate.auth_required_called()); | 522 EXPECT_TRUE(request_delegate.auth_required_called()); |
| 529 EXPECT_EQ("test2.html", request_delegate.data_received()); | 523 EXPECT_EQ("test2.html", request_delegate.data_received()); |
| 530 } | 524 } |
| 531 | 525 |
| 532 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotSaveCookies) { | 526 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotSaveCookies) { |
| 533 MockWrite writes[] = { | 527 MockWrite writes[] = { |
| 534 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 528 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 535 "Host: ftp.example.com\r\n" | 529 "Host: ftp.example.com\r\n" |
| 536 "Proxy-Connection: keep-alive\r\n\r\n"), | 530 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 537 }; | 531 }; |
| 538 MockRead reads[] = { | 532 MockRead reads[] = { |
| 539 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), | 533 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), |
| 540 MockRead(ASYNC, 2, "Content-Length: 9\r\n"), | 534 MockRead(ASYNC, 2, "Content-Length: 9\r\n"), |
| 541 MockRead(ASYNC, 3, "Set-Cookie: name=value\r\n\r\n"), | 535 MockRead(ASYNC, 3, "Set-Cookie: name=value\r\n\r\n"), |
| 542 MockRead(ASYNC, 4, "test.html"), | 536 MockRead(ASYNC, 4, "test.html"), |
| 543 }; | 537 }; |
| 544 | 538 |
| 545 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 539 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 546 | 540 |
| 547 TestDelegate request_delegate; | 541 TestDelegate request_delegate; |
| 548 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 542 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 549 DEFAULT_PRIORITY, | 543 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 550 &request_delegate, | 544 NULL)); |
| 551 request_context()); | 545 url_request->Start(); |
| 552 url_request.Start(); | 546 ASSERT_TRUE(url_request->is_pending()); |
| 553 ASSERT_TRUE(url_request.is_pending()); | |
| 554 | 547 |
| 555 socket_data(0)->RunFor(5); | 548 socket_data(0)->RunFor(5); |
| 556 | 549 |
| 557 EXPECT_TRUE(url_request.status().is_success()); | 550 EXPECT_TRUE(url_request->status().is_success()); |
| 558 EXPECT_EQ(1, network_delegate()->completed_requests()); | 551 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 559 EXPECT_EQ(0, network_delegate()->error_count()); | 552 EXPECT_EQ(0, network_delegate()->error_count()); |
| 560 | 553 |
| 561 // Make sure we do not accept cookies. | 554 // Make sure we do not accept cookies. |
| 562 EXPECT_EQ(0, network_delegate()->set_cookie_count()); | 555 EXPECT_EQ(0, network_delegate()->set_cookie_count()); |
| 563 | 556 |
| 564 EXPECT_FALSE(request_delegate.auth_required_called()); | 557 EXPECT_FALSE(request_delegate.auth_required_called()); |
| 565 EXPECT_EQ("test.html", request_delegate.data_received()); | 558 EXPECT_EQ("test.html", request_delegate.data_received()); |
| 566 } | 559 } |
| 567 | 560 |
| 568 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotFollowRedirects) { | 561 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotFollowRedirects) { |
| 569 MockWrite writes[] = { | 562 MockWrite writes[] = { |
| 570 MockWrite(SYNCHRONOUS, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" | 563 MockWrite(SYNCHRONOUS, 0, "GET ftp://ftp.example.com/ HTTP/1.1\r\n" |
| 571 "Host: ftp.example.com\r\n" | 564 "Host: ftp.example.com\r\n" |
| 572 "Proxy-Connection: keep-alive\r\n\r\n"), | 565 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 573 }; | 566 }; |
| 574 MockRead reads[] = { | 567 MockRead reads[] = { |
| 575 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 302 Found\r\n"), | 568 MockRead(SYNCHRONOUS, 1, "HTTP/1.1 302 Found\r\n"), |
| 576 MockRead(ASYNC, 2, "Location: http://other.example.com/\r\n\r\n"), | 569 MockRead(ASYNC, 2, "Location: http://other.example.com/\r\n\r\n"), |
| 577 }; | 570 }; |
| 578 | 571 |
| 579 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 572 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 580 | 573 |
| 581 TestDelegate request_delegate; | 574 TestDelegate request_delegate; |
| 582 URLRequest url_request(GURL("ftp://ftp.example.com/"), | 575 scoped_ptr<URLRequest> url_request(request_context()->CreateRequest( |
| 583 DEFAULT_PRIORITY, | 576 GURL("ftp://ftp.example.com/"), DEFAULT_PRIORITY, &request_delegate, |
| 584 &request_delegate, | 577 NULL)); |
| 585 request_context()); | 578 url_request->Start(); |
| 586 url_request.Start(); | 579 EXPECT_TRUE(url_request->is_pending()); |
| 587 EXPECT_TRUE(url_request.is_pending()); | |
| 588 | 580 |
| 589 base::MessageLoop::current()->RunUntilIdle(); | 581 base::MessageLoop::current()->RunUntilIdle(); |
| 590 | 582 |
| 591 EXPECT_TRUE(url_request.is_pending()); | 583 EXPECT_TRUE(url_request->is_pending()); |
| 592 EXPECT_EQ(0, request_delegate.response_started_count()); | 584 EXPECT_EQ(0, request_delegate.response_started_count()); |
| 593 EXPECT_EQ(0, network_delegate()->error_count()); | 585 EXPECT_EQ(0, network_delegate()->error_count()); |
| 594 ASSERT_TRUE(url_request.status().is_success()); | 586 ASSERT_TRUE(url_request->status().is_success()); |
| 595 | 587 |
| 596 socket_data(0)->RunFor(1); | 588 socket_data(0)->RunFor(1); |
| 597 | 589 |
| 598 EXPECT_EQ(1, network_delegate()->completed_requests()); | 590 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 599 EXPECT_EQ(1, network_delegate()->error_count()); | 591 EXPECT_EQ(1, network_delegate()->error_count()); |
| 600 EXPECT_FALSE(url_request.status().is_success()); | 592 EXPECT_FALSE(url_request->status().is_success()); |
| 601 EXPECT_EQ(ERR_UNSAFE_REDIRECT, url_request.status().error()); | 593 EXPECT_EQ(ERR_UNSAFE_REDIRECT, url_request->status().error()); |
| 602 } | 594 } |
| 603 | 595 |
| 604 // We should re-use socket for requests using the same scheme, host, and port. | 596 // We should re-use socket for requests using the same scheme, host, and port. |
| 605 TEST_F(URLRequestFtpJobTest, FtpProxyRequestReuseSocket) { | 597 TEST_F(URLRequestFtpJobTest, FtpProxyRequestReuseSocket) { |
| 606 MockWrite writes[] = { | 598 MockWrite writes[] = { |
| 607 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/first HTTP/1.1\r\n" | 599 MockWrite(ASYNC, 0, "GET ftp://ftp.example.com/first HTTP/1.1\r\n" |
| 608 "Host: ftp.example.com\r\n" | 600 "Host: ftp.example.com\r\n" |
| 609 "Proxy-Connection: keep-alive\r\n\r\n"), | 601 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 610 MockWrite(ASYNC, 4, "GET ftp://ftp.example.com/second HTTP/1.1\r\n" | 602 MockWrite(ASYNC, 4, "GET ftp://ftp.example.com/second HTTP/1.1\r\n" |
| 611 "Host: ftp.example.com\r\n" | 603 "Host: ftp.example.com\r\n" |
| 612 "Proxy-Connection: keep-alive\r\n\r\n"), | 604 "Proxy-Connection: keep-alive\r\n\r\n"), |
| 613 }; | 605 }; |
| 614 MockRead reads[] = { | 606 MockRead reads[] = { |
| 615 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), | 607 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), |
| 616 MockRead(ASYNC, 2, "Content-Length: 10\r\n\r\n"), | 608 MockRead(ASYNC, 2, "Content-Length: 10\r\n\r\n"), |
| 617 MockRead(ASYNC, 3, "test1.html"), | 609 MockRead(ASYNC, 3, "test1.html"), |
| 618 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\n"), | 610 MockRead(ASYNC, 5, "HTTP/1.1 200 OK\r\n"), |
| 619 MockRead(ASYNC, 6, "Content-Length: 10\r\n\r\n"), | 611 MockRead(ASYNC, 6, "Content-Length: 10\r\n\r\n"), |
| 620 MockRead(ASYNC, 7, "test2.html"), | 612 MockRead(ASYNC, 7, "test2.html"), |
| 621 }; | 613 }; |
| 622 | 614 |
| 623 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); | 615 AddSocket(reads, arraysize(reads), writes, arraysize(writes)); |
| 624 | 616 |
| 625 TestDelegate request_delegate1; | 617 TestDelegate request_delegate1; |
| 626 URLRequest url_request1(GURL("ftp://ftp.example.com/first"), | 618 |
| 627 DEFAULT_PRIORITY, | 619 scoped_ptr<URLRequest> url_request1(request_context()->CreateRequest( |
| 628 &request_delegate1, | 620 GURL("ftp://ftp.example.com/first"), DEFAULT_PRIORITY, &request_delegate1, |
| 629 request_context()); | 621 NULL)); |
| 630 url_request1.Start(); | 622 url_request1->Start(); |
| 631 ASSERT_TRUE(url_request1.is_pending()); | 623 ASSERT_TRUE(url_request1->is_pending()); |
| 632 socket_data(0)->RunFor(4); | 624 socket_data(0)->RunFor(4); |
| 633 | 625 |
| 634 EXPECT_TRUE(url_request1.status().is_success()); | 626 EXPECT_TRUE(url_request1->status().is_success()); |
| 635 EXPECT_TRUE(url_request1.proxy_server().Equals( | 627 EXPECT_TRUE(url_request1->proxy_server().Equals( |
| 636 net::HostPortPair::FromString("localhost:80"))); | 628 net::HostPortPair::FromString("localhost:80"))); |
| 637 EXPECT_EQ(1, network_delegate()->completed_requests()); | 629 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 638 EXPECT_EQ(0, network_delegate()->error_count()); | 630 EXPECT_EQ(0, network_delegate()->error_count()); |
| 639 EXPECT_FALSE(request_delegate1.auth_required_called()); | 631 EXPECT_FALSE(request_delegate1.auth_required_called()); |
| 640 EXPECT_EQ("test1.html", request_delegate1.data_received()); | 632 EXPECT_EQ("test1.html", request_delegate1.data_received()); |
| 641 | 633 |
| 642 TestDelegate request_delegate2; | 634 TestDelegate request_delegate2; |
| 643 URLRequest url_request2(GURL("ftp://ftp.example.com/second"), | 635 scoped_ptr<URLRequest> url_request2(request_context()->CreateRequest( |
| 644 DEFAULT_PRIORITY, | 636 GURL("ftp://ftp.example.com/second"), DEFAULT_PRIORITY, |
| 645 &request_delegate2, | 637 &request_delegate2, NULL)); |
| 646 request_context()); | 638 url_request2->Start(); |
| 647 url_request2.Start(); | 639 ASSERT_TRUE(url_request2->is_pending()); |
| 648 ASSERT_TRUE(url_request2.is_pending()); | |
| 649 socket_data(0)->RunFor(4); | 640 socket_data(0)->RunFor(4); |
| 650 | 641 |
| 651 EXPECT_TRUE(url_request2.status().is_success()); | 642 EXPECT_TRUE(url_request2->status().is_success()); |
| 652 EXPECT_EQ(2, network_delegate()->completed_requests()); | 643 EXPECT_EQ(2, network_delegate()->completed_requests()); |
| 653 EXPECT_EQ(0, network_delegate()->error_count()); | 644 EXPECT_EQ(0, network_delegate()->error_count()); |
| 654 EXPECT_FALSE(request_delegate2.auth_required_called()); | 645 EXPECT_FALSE(request_delegate2.auth_required_called()); |
| 655 EXPECT_EQ("test2.html", request_delegate2.data_received()); | 646 EXPECT_EQ("test2.html", request_delegate2.data_received()); |
| 656 } | 647 } |
| 657 | 648 |
| 658 // We should not re-use socket when there are two requests to the same host, | 649 // We should not re-use socket when there are two requests to the same host, |
| 659 // but one is FTP and the other is HTTP. | 650 // but one is FTP and the other is HTTP. |
| 660 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotReuseSocket) { | 651 TEST_F(URLRequestFtpJobTest, FtpProxyRequestDoNotReuseSocket) { |
| 661 MockWrite writes1[] = { | 652 MockWrite writes1[] = { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 679 MockRead reads2[] = { | 670 MockRead reads2[] = { |
| 680 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), | 671 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n"), |
| 681 MockRead(ASYNC, 2, "Content-Length: 10\r\n\r\n"), | 672 MockRead(ASYNC, 2, "Content-Length: 10\r\n\r\n"), |
| 682 MockRead(ASYNC, 3, "test2.html"), | 673 MockRead(ASYNC, 3, "test2.html"), |
| 683 }; | 674 }; |
| 684 | 675 |
| 685 AddSocket(reads1, arraysize(reads1), writes1, arraysize(writes1)); | 676 AddSocket(reads1, arraysize(reads1), writes1, arraysize(writes1)); |
| 686 AddSocket(reads2, arraysize(reads2), writes2, arraysize(writes2)); | 677 AddSocket(reads2, arraysize(reads2), writes2, arraysize(writes2)); |
| 687 | 678 |
| 688 TestDelegate request_delegate1; | 679 TestDelegate request_delegate1; |
| 689 URLRequest url_request1(GURL("ftp://ftp.example.com/first"), | 680 scoped_ptr<URLRequest> url_request1(request_context()->CreateRequest( |
| 690 DEFAULT_PRIORITY, | 681 GURL("ftp://ftp.example.com/first"), DEFAULT_PRIORITY, |
| 691 &request_delegate1, | 682 &request_delegate1, NULL)); |
| 692 request_context()); | 683 url_request1->Start(); |
| 693 url_request1.Start(); | 684 ASSERT_TRUE(url_request1->is_pending()); |
| 694 ASSERT_TRUE(url_request1.is_pending()); | |
| 695 socket_data(0)->RunFor(4); | 685 socket_data(0)->RunFor(4); |
| 696 | 686 |
| 697 EXPECT_TRUE(url_request1.status().is_success()); | 687 EXPECT_TRUE(url_request1->status().is_success()); |
| 698 EXPECT_EQ(1, network_delegate()->completed_requests()); | 688 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 699 EXPECT_EQ(0, network_delegate()->error_count()); | 689 EXPECT_EQ(0, network_delegate()->error_count()); |
| 700 EXPECT_FALSE(request_delegate1.auth_required_called()); | 690 EXPECT_FALSE(request_delegate1.auth_required_called()); |
| 701 EXPECT_EQ("test1.html", request_delegate1.data_received()); | 691 EXPECT_EQ("test1.html", request_delegate1.data_received()); |
| 702 | 692 |
| 703 TestDelegate request_delegate2; | 693 TestDelegate request_delegate2; |
| 704 URLRequest url_request2(GURL("http://ftp.example.com/second"), | 694 scoped_ptr<URLRequest> url_request2(request_context()->CreateRequest( |
| 705 DEFAULT_PRIORITY, | 695 GURL("http://ftp.example.com/second"), DEFAULT_PRIORITY, |
| 706 &request_delegate2, | 696 &request_delegate2, NULL)); |
| 707 request_context()); | 697 url_request2->Start(); |
| 708 url_request2.Start(); | 698 ASSERT_TRUE(url_request2->is_pending()); |
| 709 ASSERT_TRUE(url_request2.is_pending()); | |
| 710 socket_data(1)->RunFor(4); | 699 socket_data(1)->RunFor(4); |
| 711 | 700 |
| 712 EXPECT_TRUE(url_request2.status().is_success()); | 701 EXPECT_TRUE(url_request2->status().is_success()); |
| 713 EXPECT_EQ(2, network_delegate()->completed_requests()); | 702 EXPECT_EQ(2, network_delegate()->completed_requests()); |
| 714 EXPECT_EQ(0, network_delegate()->error_count()); | 703 EXPECT_EQ(0, network_delegate()->error_count()); |
| 715 EXPECT_FALSE(request_delegate2.auth_required_called()); | 704 EXPECT_FALSE(request_delegate2.auth_required_called()); |
| 716 EXPECT_EQ("test2.html", request_delegate2.data_received()); | 705 EXPECT_EQ("test2.html", request_delegate2.data_received()); |
| 717 } | 706 } |
| 718 | 707 |
| 719 } // namespace | 708 } // namespace |
| 720 | 709 |
| 721 } // namespace net | 710 } // namespace net |
| OLD | NEW |