| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop_proxy.h" | 5 #include "base/message_loop_proxy.h" |
| 6 #include "base/synchronization/waitable_event.h" | 6 #include "base/synchronization/waitable_event.h" |
| 7 #include "base/threading/thread.h" | 7 #include "base/threading/thread.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "chrome/common/net/url_fetcher.h" | 9 #include "chrome/common/net/url_fetcher.h" |
| 10 #include "chrome/common/net/url_request_context_getter.h" | 10 #include "chrome/common/net/url_request_context_getter.h" |
| (...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 } | 569 } |
| 570 | 570 |
| 571 TEST_F(URLFetcherProtectTest, Overload) { | 571 TEST_F(URLFetcherProtectTest, Overload) { |
| 572 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); | 572 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
| 573 ASSERT_TRUE(test_server.Start()); | 573 ASSERT_TRUE(test_server.Start()); |
| 574 | 574 |
| 575 GURL url(test_server.GetURL("defaultresponse")); | 575 GURL url(test_server.GetURL("defaultresponse")); |
| 576 | 576 |
| 577 // Registers an entry for test url. It only allows 3 requests to be sent | 577 // Registers an entry for test url. It only allows 3 requests to be sent |
| 578 // in 200 milliseconds. | 578 // in 200 milliseconds. |
| 579 net::URLRequestThrottlerManager* manager = |
| 580 net::URLRequestThrottlerManager::GetInstance(); |
| 579 scoped_refptr<net::URLRequestThrottlerEntry> entry( | 581 scoped_refptr<net::URLRequestThrottlerEntry> entry( |
| 580 new net::URLRequestThrottlerEntry(200, 3, 1, 2.0, 0.0, 256)); | 582 new net::URLRequestThrottlerEntry(manager, 200, 3, 1, 2.0, 0.0, 256)); |
| 581 net::URLRequestThrottlerManager::GetInstance()->OverrideEntryForTests( | 583 manager->OverrideEntryForTests(url, entry); |
| 582 url, entry); | |
| 583 | 584 |
| 584 CreateFetcher(url); | 585 CreateFetcher(url); |
| 585 | 586 |
| 586 MessageLoop::current()->Run(); | 587 MessageLoop::current()->Run(); |
| 587 | 588 |
| 588 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); | 589 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); |
| 589 } | 590 } |
| 590 | 591 |
| 591 TEST_F(URLFetcherProtectTest, ServerUnavailable) { | 592 TEST_F(URLFetcherProtectTest, ServerUnavailable) { |
| 592 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); | 593 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
| 593 ASSERT_TRUE(test_server.Start()); | 594 ASSERT_TRUE(test_server.Start()); |
| 594 | 595 |
| 595 GURL url(test_server.GetURL("files/server-unavailable.html")); | 596 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 596 | 597 |
| 597 // Registers an entry for test url. The backoff time is calculated by: | 598 // Registers an entry for test url. The backoff time is calculated by: |
| 598 // new_backoff = 2.0 * old_backoff + 0 | 599 // new_backoff = 2.0 * old_backoff + 0 |
| 599 // and maximum backoff time is 256 milliseconds. | 600 // and maximum backoff time is 256 milliseconds. |
| 600 // Maximum retries allowed is set to 11. | 601 // Maximum retries allowed is set to 11. |
| 602 net::URLRequestThrottlerManager* manager = |
| 603 net::URLRequestThrottlerManager::GetInstance(); |
| 601 scoped_refptr<net::URLRequestThrottlerEntry> entry( | 604 scoped_refptr<net::URLRequestThrottlerEntry> entry( |
| 602 new net::URLRequestThrottlerEntry(200, 3, 1, 2.0, 0.0, 256)); | 605 new net::URLRequestThrottlerEntry(manager, 200, 3, 1, 2.0, 0.0, 256)); |
| 603 net::URLRequestThrottlerManager::GetInstance()->OverrideEntryForTests( | 606 manager->OverrideEntryForTests(url, entry); |
| 604 url, entry); | |
| 605 | 607 |
| 606 CreateFetcher(url); | 608 CreateFetcher(url); |
| 607 | 609 |
| 608 MessageLoop::current()->Run(); | 610 MessageLoop::current()->Run(); |
| 609 | 611 |
| 610 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); | 612 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); |
| 611 } | 613 } |
| 612 | 614 |
| 613 TEST_F(URLFetcherProtectTestPassedThrough, ServerUnavailablePropagateResponse) { | 615 TEST_F(URLFetcherProtectTestPassedThrough, ServerUnavailablePropagateResponse) { |
| 614 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); | 616 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
| 615 ASSERT_TRUE(test_server.Start()); | 617 ASSERT_TRUE(test_server.Start()); |
| 616 | 618 |
| 617 GURL url(test_server.GetURL("files/server-unavailable.html")); | 619 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 618 | 620 |
| 619 // Registers an entry for test url. The backoff time is calculated by: | 621 // Registers an entry for test url. The backoff time is calculated by: |
| 620 // new_backoff = 2.0 * old_backoff + 0 | 622 // new_backoff = 2.0 * old_backoff + 0 |
| 621 // and maximum backoff time is 150000 milliseconds. | 623 // and maximum backoff time is 150000 milliseconds. |
| 622 // Maximum retries allowed is set to 11. | 624 // Maximum retries allowed is set to 11. |
| 625 net::URLRequestThrottlerManager* manager = |
| 626 net::URLRequestThrottlerManager::GetInstance(); |
| 623 scoped_refptr<net::URLRequestThrottlerEntry> entry( | 627 scoped_refptr<net::URLRequestThrottlerEntry> entry( |
| 624 new net::URLRequestThrottlerEntry(200, 3, 100, 2.0, 0.0, 150000)); | 628 new net::URLRequestThrottlerEntry( |
| 629 manager, 200, 3, 100, 2.0, 0.0, 150000)); |
| 625 // Total time if *not* for not doing automatic backoff would be 150s. | 630 // Total time if *not* for not doing automatic backoff would be 150s. |
| 626 // In reality it should be "as soon as server responds". | 631 // In reality it should be "as soon as server responds". |
| 627 net::URLRequestThrottlerManager::GetInstance()->OverrideEntryForTests( | 632 manager->OverrideEntryForTests(url, entry); |
| 628 url, entry); | |
| 629 | 633 |
| 630 CreateFetcher(url); | 634 CreateFetcher(url); |
| 631 | 635 |
| 632 MessageLoop::current()->Run(); | 636 MessageLoop::current()->Run(); |
| 633 | 637 |
| 634 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); | 638 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); |
| 635 } | 639 } |
| 636 | 640 |
| 637 #if defined(OS_MACOSX) | 641 #if defined(OS_MACOSX) |
| 638 // SIGSEGV on Mac: http://crbug.com/60426 | 642 // SIGSEGV on Mac: http://crbug.com/60426 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 657 #endif | 661 #endif |
| 658 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); | 662 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
| 659 ASSERT_TRUE(test_server.Start()); | 663 ASSERT_TRUE(test_server.Start()); |
| 660 | 664 |
| 661 GURL url(test_server.GetURL("files/server-unavailable.html")); | 665 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 662 | 666 |
| 663 // Registers an entry for test url. The backoff time is calculated by: | 667 // Registers an entry for test url. The backoff time is calculated by: |
| 664 // new_backoff = 2.0 * old_backoff + 0 | 668 // new_backoff = 2.0 * old_backoff + 0 |
| 665 // The initial backoff is 2 seconds and maximum backoff is 4 seconds. | 669 // The initial backoff is 2 seconds and maximum backoff is 4 seconds. |
| 666 // Maximum retries allowed is set to 2. | 670 // Maximum retries allowed is set to 2. |
| 671 net::URLRequestThrottlerManager* manager = |
| 672 net::URLRequestThrottlerManager::GetInstance(); |
| 667 scoped_refptr<net::URLRequestThrottlerEntry> entry( | 673 scoped_refptr<net::URLRequestThrottlerEntry> entry( |
| 668 new net::URLRequestThrottlerEntry(200, 3, 2000, 2.0, 0.0, 4000)); | 674 new net::URLRequestThrottlerEntry( |
| 669 net::URLRequestThrottlerManager::GetInstance()->OverrideEntryForTests( | 675 manager, 200, 3, 2000, 2.0, 0.0, 4000)); |
| 670 url, entry); | 676 manager->OverrideEntryForTests(url, entry); |
| 671 | 677 |
| 672 // Create a separate thread that will create the URLFetcher. The current | 678 // Create a separate thread that will create the URLFetcher. The current |
| 673 // (main) thread will do the IO, and when the fetch is complete it will | 679 // (main) thread will do the IO, and when the fetch is complete it will |
| 674 // terminate the main thread's message loop; then the other thread's | 680 // terminate the main thread's message loop; then the other thread's |
| 675 // message loop will be shut down automatically as the thread goes out of | 681 // message loop will be shut down automatically as the thread goes out of |
| 676 // scope. | 682 // scope. |
| 677 base::Thread t("URLFetcher test thread"); | 683 base::Thread t("URLFetcher test thread"); |
| 678 ASSERT_TRUE(t.Start()); | 684 ASSERT_TRUE(t.Start()); |
| 679 t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this, url)); | 685 t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this, url)); |
| 680 | 686 |
| 681 MessageLoop::current()->Run(); | 687 MessageLoop::current()->Run(); |
| 682 | 688 |
| 683 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); | 689 net::URLRequestThrottlerManager::GetInstance()->EraseEntryForTests(url); |
| 684 } | 690 } |
| 685 | 691 |
| 686 TEST_F(URLFetcherCancelTest, CancelWhileDelayedStartTaskPending) { | 692 TEST_F(URLFetcherCancelTest, CancelWhileDelayedStartTaskPending) { |
| 687 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); | 693 net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)); |
| 688 ASSERT_TRUE(test_server.Start()); | 694 ASSERT_TRUE(test_server.Start()); |
| 689 | 695 |
| 690 GURL url(test_server.GetURL("files/server-unavailable.html")); | 696 GURL url(test_server.GetURL("files/server-unavailable.html")); |
| 691 | 697 |
| 692 // Register an entry for test url. | 698 // Register an entry for test url. |
| 693 // Using a sliding window of 4 seconds, and max of 1 request, under a fast | 699 // Using a sliding window of 4 seconds, and max of 1 request, under a fast |
| 694 // run we expect to have a 4 second delay when posting the Start task. | 700 // run we expect to have a 4 second delay when posting the Start task. |
| 701 net::URLRequestThrottlerManager* manager = |
| 702 net::URLRequestThrottlerManager::GetInstance(); |
| 695 scoped_refptr<net::URLRequestThrottlerEntry> entry( | 703 scoped_refptr<net::URLRequestThrottlerEntry> entry( |
| 696 new net::URLRequestThrottlerEntry(4000, 1, 2000, 2.0, 0.0, 4000)); | 704 new net::URLRequestThrottlerEntry( |
| 697 net::URLRequestThrottlerManager::GetInstance()->OverrideEntryForTests( | 705 manager, 4000, 1, 2000, 2.0, 0.0, 4000)); |
| 698 url, entry); | 706 manager->OverrideEntryForTests(url, entry); |
| 699 // Fake that a request has just started. | 707 // Fake that a request has just started. |
| 700 entry->ReserveSendingTimeForNextRequest(base::TimeTicks()); | 708 entry->ReserveSendingTimeForNextRequest(base::TimeTicks()); |
| 701 | 709 |
| 702 // The next request we try to send will be delayed by ~4 seconds. | 710 // The next request we try to send will be delayed by ~4 seconds. |
| 703 // The slower the test runs, the less the delay will be (since it takes the | 711 // The slower the test runs, the less the delay will be (since it takes the |
| 704 // time difference from now). | 712 // time difference from now). |
| 705 | 713 |
| 706 base::Thread t("URLFetcher test thread"); | 714 base::Thread t("URLFetcher test thread"); |
| 707 ASSERT_TRUE(t.Start()); | 715 ASSERT_TRUE(t.Start()); |
| 708 t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this, url)); | 716 t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this, url)); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 735 FROM_HERE, | 743 FROM_HERE, |
| 736 new CurriedTask(new MessageLoop::QuitTask(), MessageLoop::current())); | 744 new CurriedTask(new MessageLoop::QuitTask(), MessageLoop::current())); |
| 737 MessageLoop::current()->Run(); | 745 MessageLoop::current()->Run(); |
| 738 EXPECT_EQ(1, GetNumFetcherCores()); | 746 EXPECT_EQ(1, GetNumFetcherCores()); |
| 739 URLFetcher::CancelAll(); | 747 URLFetcher::CancelAll(); |
| 740 EXPECT_EQ(0, GetNumFetcherCores()); | 748 EXPECT_EQ(0, GetNumFetcherCores()); |
| 741 delete fetcher_; | 749 delete fetcher_; |
| 742 } | 750 } |
| 743 | 751 |
| 744 } // namespace. | 752 } // namespace. |
| OLD | NEW |