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