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 |