| 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 |