Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Side by Side Diff: content/common/net/url_fetcher_impl_unittest.cc

Issue 8872030: Removing MessageLoop::QuitTask() from content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix escaping Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/net/url_fetcher_impl.h" 5 #include "content/common/net/url_fetcher_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop_proxy.h" 8 #include "base/message_loop_proxy.h"
9 #include "base/synchronization/waitable_event.h" 9 #include "base/synchronization/waitable_event.h"
10 #include "base/threading/thread.h" 10 #include "base/threading/thread.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK 117 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK
118 118
119 std::string data; 119 std::string data;
120 EXPECT_TRUE(source->GetResponseAsString(&data)); 120 EXPECT_TRUE(source->GetResponseAsString(&data));
121 EXPECT_FALSE(data.empty()); 121 EXPECT_FALSE(data.empty());
122 122
123 delete fetcher_; // Have to delete this here and not in the destructor, 123 delete fetcher_; // Have to delete this here and not in the destructor,
124 // because the destructor won't necessarily run on the 124 // because the destructor won't necessarily run on the
125 // same thread that CreateFetcher() did. 125 // same thread that CreateFetcher() did.
126 126
127 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 127 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
128 // If the current message loop is not the IO loop, it will be shut down when 128 // If the current message loop is not the IO loop, it will be shut down when
129 // the main loop returns and this thread subsequently goes out of scope. 129 // the main loop returns and this thread subsequently goes out of scope.
130 } 130 }
131 131
132 namespace { 132 namespace {
133 133
134 // Version of URLFetcherTest that does a POST instead 134 // Version of URLFetcherTest that does a POST instead
135 class URLFetcherPostTest : public URLFetcherTest { 135 class URLFetcherPostTest : public URLFetcherTest {
136 public: 136 public:
137 virtual void CreateFetcher(const GURL& url); 137 virtual void CreateFetcher(const GURL& url);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 199
200 void CancelRequest(); 200 void CancelRequest();
201 }; 201 };
202 202
203 // Version of TestURLRequestContext that posts a Quit task to the IO 203 // Version of TestURLRequestContext that posts a Quit task to the IO
204 // thread once it is deleted. 204 // thread once it is deleted.
205 class CancelTestURLRequestContext : public TestURLRequestContext { 205 class CancelTestURLRequestContext : public TestURLRequestContext {
206 virtual ~CancelTestURLRequestContext() { 206 virtual ~CancelTestURLRequestContext() {
207 // The d'tor should execute in the IO thread. Post the quit task to the 207 // The d'tor should execute in the IO thread. Post the quit task to the
208 // current thread. 208 // current thread.
209 MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 209 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
210 } 210 }
211 }; 211 };
212 212
213 class CancelTestURLRequestContextGetter : public net::URLRequestContextGetter { 213 class CancelTestURLRequestContextGetter : public net::URLRequestContextGetter {
214 public: 214 public:
215 explicit CancelTestURLRequestContextGetter( 215 explicit CancelTestURLRequestContextGetter(
216 base::MessageLoopProxy* io_message_loop_proxy) 216 base::MessageLoopProxy* io_message_loop_proxy)
217 : io_message_loop_proxy_(io_message_loop_proxy), 217 : io_message_loop_proxy_(io_message_loop_proxy),
218 context_created_(false, false) { 218 context_created_(false, false) {
219 } 219 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 const TimeDelta one_second = TimeDelta::FromMilliseconds(1000); 390 const TimeDelta one_second = TimeDelta::FromMilliseconds(1000);
391 if (source->GetResponseCode() >= 500) { 391 if (source->GetResponseCode() >= 500) {
392 // Now running ServerUnavailable test. 392 // Now running ServerUnavailable test.
393 // It takes more than 1 second to finish all 11 requests. 393 // It takes more than 1 second to finish all 11 requests.
394 EXPECT_TRUE(Time::Now() - start_time_ >= one_second); 394 EXPECT_TRUE(Time::Now() - start_time_ >= one_second);
395 EXPECT_TRUE(source->GetStatus().is_success()); 395 EXPECT_TRUE(source->GetStatus().is_success());
396 std::string data; 396 std::string data;
397 EXPECT_TRUE(source->GetResponseAsString(&data)); 397 EXPECT_TRUE(source->GetResponseAsString(&data));
398 EXPECT_FALSE(data.empty()); 398 EXPECT_FALSE(data.empty());
399 delete fetcher_; 399 delete fetcher_;
400 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 400 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
401 } else { 401 } else {
402 // Now running Overload test. 402 // Now running Overload test.
403 static int count = 0; 403 static int count = 0;
404 count++; 404 count++;
405 if (count < 20) { 405 if (count < 20) {
406 fetcher_->StartWithRequestContextGetter(new TestURLRequestContextGetter( 406 fetcher_->StartWithRequestContextGetter(new TestURLRequestContextGetter(
407 io_message_loop_proxy())); 407 io_message_loop_proxy()));
408 } else { 408 } else {
409 // We have already sent 20 requests continuously. And we expect that 409 // We have already sent 20 requests continuously. And we expect that
410 // it takes more than 1 second due to the overload protection settings. 410 // it takes more than 1 second due to the overload protection settings.
(...skipping 26 matching lines...) Expand all
437 EXPECT_GT(fetcher_->GetBackoffDelay().InMicroseconds(), 0); 437 EXPECT_GT(fetcher_->GetBackoffDelay().InMicroseconds(), 0);
438 std::string data; 438 std::string data;
439 EXPECT_TRUE(source->GetResponseAsString(&data)); 439 EXPECT_TRUE(source->GetResponseAsString(&data));
440 EXPECT_FALSE(data.empty()); 440 EXPECT_FALSE(data.empty());
441 } else { 441 } else {
442 // We should not get here! 442 // We should not get here!
443 ADD_FAILURE(); 443 ADD_FAILURE();
444 } 444 }
445 445
446 delete fetcher_; 446 delete fetcher_;
447 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 447 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
448 } 448 }
449 449
450 450
451 URLFetcherBadHTTPSTest::URLFetcherBadHTTPSTest() { 451 URLFetcherBadHTTPSTest::URLFetcherBadHTTPSTest() {
452 PathService::Get(base::DIR_SOURCE_ROOT, &cert_dir_); 452 PathService::Get(base::DIR_SOURCE_ROOT, &cert_dir_);
453 cert_dir_ = cert_dir_.AppendASCII("chrome"); 453 cert_dir_ = cert_dir_.AppendASCII("chrome");
454 cert_dir_ = cert_dir_.AppendASCII("test"); 454 cert_dir_ = cert_dir_.AppendASCII("test");
455 cert_dir_ = cert_dir_.AppendASCII("data"); 455 cert_dir_ = cert_dir_.AppendASCII("data");
456 cert_dir_ = cert_dir_.AppendASCII("ssl"); 456 cert_dir_ = cert_dir_.AppendASCII("ssl");
457 cert_dir_ = cert_dir_.AppendASCII("certificates"); 457 cert_dir_ = cert_dir_.AppendASCII("certificates");
458 } 458 }
459 459
460 // The "server certificate expired" error should result in automatic 460 // The "server certificate expired" error should result in automatic
461 // cancellation of the request by 461 // cancellation of the request by
462 // net::URLRequest::Delegate::OnSSLCertificateError. 462 // net::URLRequest::Delegate::OnSSLCertificateError.
463 void URLFetcherBadHTTPSTest::OnURLFetchComplete( 463 void URLFetcherBadHTTPSTest::OnURLFetchComplete(
464 const content::URLFetcher* source) { 464 const content::URLFetcher* source) {
465 // This part is different from URLFetcherTest::OnURLFetchComplete 465 // This part is different from URLFetcherTest::OnURLFetchComplete
466 // because this test expects the request to be cancelled. 466 // because this test expects the request to be cancelled.
467 EXPECT_EQ(net::URLRequestStatus::CANCELED, source->GetStatus().status()); 467 EXPECT_EQ(net::URLRequestStatus::CANCELED, source->GetStatus().status());
468 EXPECT_EQ(net::ERR_ABORTED, source->GetStatus().error()); 468 EXPECT_EQ(net::ERR_ABORTED, source->GetStatus().error());
469 EXPECT_EQ(-1, source->GetResponseCode()); 469 EXPECT_EQ(-1, source->GetResponseCode());
470 EXPECT_TRUE(source->GetCookies().empty()); 470 EXPECT_TRUE(source->GetCookies().empty());
471 std::string data; 471 std::string data;
472 EXPECT_TRUE(source->GetResponseAsString(&data)); 472 EXPECT_TRUE(source->GetResponseAsString(&data));
473 EXPECT_TRUE(data.empty()); 473 EXPECT_TRUE(data.empty());
474 474
475 // The rest is the same as URLFetcherTest::OnURLFetchComplete. 475 // The rest is the same as URLFetcherTest::OnURLFetchComplete.
476 delete fetcher_; 476 delete fetcher_;
477 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 477 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
478 } 478 }
479 479
480 void URLFetcherCancelTest::CreateFetcher(const GURL& url) { 480 void URLFetcherCancelTest::CreateFetcher(const GURL& url) {
481 fetcher_ = new URLFetcherImpl(url, content::URLFetcher::GET, this); 481 fetcher_ = new URLFetcherImpl(url, content::URLFetcher::GET, this);
482 CancelTestURLRequestContextGetter* context_getter = 482 CancelTestURLRequestContextGetter* context_getter =
483 new CancelTestURLRequestContextGetter(io_message_loop_proxy()); 483 new CancelTestURLRequestContextGetter(io_message_loop_proxy());
484 fetcher_->SetRequestContext(context_getter); 484 fetcher_->SetRequestContext(context_getter);
485 fetcher_->SetMaxRetries(2); 485 fetcher_->SetMaxRetries(2);
486 fetcher_->Start(); 486 fetcher_->Start();
487 // We need to wait for the creation of the net::URLRequestContext, since we 487 // We need to wait for the creation of the net::URLRequestContext, since we
488 // rely on it being destroyed as a signal to end the test. 488 // rely on it being destroyed as a signal to end the test.
489 context_getter->WaitForContextCreation(); 489 context_getter->WaitForContextCreation();
490 CancelRequest(); 490 CancelRequest();
491 } 491 }
492 492
493 void URLFetcherCancelTest::OnURLFetchComplete( 493 void URLFetcherCancelTest::OnURLFetchComplete(
494 const content::URLFetcher* source) { 494 const content::URLFetcher* source) {
495 // We should have cancelled the request before completion. 495 // We should have cancelled the request before completion.
496 ADD_FAILURE(); 496 ADD_FAILURE();
497 delete fetcher_; 497 delete fetcher_;
498 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 498 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
499 } 499 }
500 500
501 void URLFetcherCancelTest::CancelRequest() { 501 void URLFetcherCancelTest::CancelRequest() {
502 delete fetcher_; 502 delete fetcher_;
503 // The URLFetcher's test context will post a Quit task once it is 503 // The URLFetcher's test context will post a Quit task once it is
504 // deleted. So if this test simply hangs, it means cancellation 504 // deleted. So if this test simply hangs, it means cancellation
505 // did not work. 505 // did not work.
506 } 506 }
507 507
508 void URLFetcherMultipleAttemptTest::OnURLFetchComplete( 508 void URLFetcherMultipleAttemptTest::OnURLFetchComplete(
509 const content::URLFetcher* source) { 509 const content::URLFetcher* source) {
510 EXPECT_TRUE(source->GetStatus().is_success()); 510 EXPECT_TRUE(source->GetStatus().is_success());
511 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK 511 EXPECT_EQ(200, source->GetResponseCode()); // HTTP OK
512 std::string data; 512 std::string data;
513 EXPECT_TRUE(source->GetResponseAsString(&data)); 513 EXPECT_TRUE(source->GetResponseAsString(&data));
514 EXPECT_FALSE(data.empty()); 514 EXPECT_FALSE(data.empty());
515 if (!data.empty() && data_.empty()) { 515 if (!data.empty() && data_.empty()) {
516 data_ = data; 516 data_ = data;
517 fetcher_->StartWithRequestContextGetter( 517 fetcher_->StartWithRequestContextGetter(
518 new TestURLRequestContextGetter(io_message_loop_proxy())); 518 new TestURLRequestContextGetter(io_message_loop_proxy()));
519 } else { 519 } else {
520 EXPECT_EQ(data, data_); 520 EXPECT_EQ(data, data_);
521 delete fetcher_; // Have to delete this here and not in the destructor, 521 delete fetcher_; // Have to delete this here and not in the destructor,
522 // because the destructor won't necessarily run on the 522 // because the destructor won't necessarily run on the
523 // same thread that CreateFetcher() did. 523 // same thread that CreateFetcher() did.
524 524
525 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 525 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
526 // If the current message loop is not the IO loop, it will be shut down when 526 // If the current message loop is not the IO loop, it will be shut down when
527 // the main loop returns and this thread subsequently goes out of scope. 527 // the main loop returns and this thread subsequently goes out of scope.
528 } 528 }
529 } 529 }
530 530
531 void URLFetcherTempFileTest::OnURLFetchComplete( 531 void URLFetcherTempFileTest::OnURLFetchComplete(
532 const content::URLFetcher* source) { 532 const content::URLFetcher* source) {
533 EXPECT_TRUE(source->GetStatus().is_success()); 533 EXPECT_TRUE(source->GetStatus().is_success());
534 EXPECT_EQ(source->GetResponseCode(), 200); 534 EXPECT_EQ(source->GetResponseCode(), 200);
535 535
536 EXPECT_TRUE(source->GetResponseAsFilePath( 536 EXPECT_TRUE(source->GetResponseAsFilePath(
537 take_ownership_of_temp_file_, &temp_file_)); 537 take_ownership_of_temp_file_, &temp_file_));
538 538
539 EXPECT_TRUE(file_util::ContentsEqual(expected_file_, temp_file_)); 539 EXPECT_TRUE(file_util::ContentsEqual(expected_file_, temp_file_));
540 540
541 delete fetcher_; 541 delete fetcher_;
542 542
543 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 543 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
544 } 544 }
545 545
546 TEST_F(URLFetcherTest, SameThreadsTest) { 546 TEST_F(URLFetcherTest, SameThreadsTest) {
547 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); 547 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot));
548 ASSERT_TRUE(test_server.Start()); 548 ASSERT_TRUE(test_server.Start());
549 549
550 // Create the fetcher on the main thread. Since IO will happen on the main 550 // Create the fetcher on the main thread. Since IO will happen on the main
551 // thread, this will test URLFetcher's ability to do everything on one 551 // thread, this will test URLFetcher's ability to do everything on one
552 // thread. 552 // thread.
553 CreateFetcher(test_server.GetURL("defaultresponse")); 553 CreateFetcher(test_server.GetURL("defaultresponse"));
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 FROM_HERE, 793 FROM_HERE,
794 base::Bind(&CancelAllOnIO), 794 base::Bind(&CancelAllOnIO),
795 base::Bind(&MessageLoop::Quit, 795 base::Bind(&MessageLoop::Quit,
796 base::Unretained(MessageLoop::current()))); 796 base::Unretained(MessageLoop::current())));
797 MessageLoop::current()->Run(); 797 MessageLoop::current()->Run();
798 EXPECT_EQ(0, GetNumFetcherCores()); 798 EXPECT_EQ(0, GetNumFetcherCores());
799 delete fetcher_; 799 delete fetcher_;
800 } 800 }
801 801
802 } // namespace. 802 } // namespace.
OLDNEW
« no previous file with comments | « content/browser/tab_contents/navigation_controller_unittest.cc ('k') | content/renderer/media/webrtc_audio_device_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698