Chromium Code Reviews| Index: net/url_request/url_request_unittest.cc |
| diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc |
| index c1178fe04dadabfd1d6b46e6cb670bddf5c8a4ab..598f3f7fdd297fa17f979b04699058d2a78cc433 100644 |
| --- a/net/url_request/url_request_unittest.cc |
| +++ b/net/url_request/url_request_unittest.cc |
| @@ -4203,6 +4203,40 @@ TEST_F(URLRequestTestHTTP, EmptyReferrerAfterValidReferrer) { |
| EXPECT_EQ(std::string("None"), d.data_received()); |
| } |
| + |
|
mmenke
2013/09/16 20:41:08
nit: Remove extra blank line.
davidben
2013/09/16 22:00:00
Done.
|
| +TEST_F(URLRequestTestHTTP, CachedRedirect) { |
|
mmenke
2013/09/16 20:41:08
Maybe a second test where the redirect has a non-e
davidben
2013/09/16 22:00:00
Are you sure it doesn't already have a non-empty b
mmenke
2013/09/16 22:08:59
Looks like you're right. I saw the mock-headers,
|
| + ASSERT_TRUE(test_server_.Start()); |
| + |
| + // Write to the cache. |
| + { |
| + TestDelegate d; |
| + GURL test_url(test_server_.GetURL("files/redirect-test.html")); |
| + URLRequest req(test_url, &d, &default_context_); |
| + |
| + req.Start(); |
| + base::RunLoop().Run(); |
| + |
| + EXPECT_EQ(1, d.received_redirect_count()); |
| + EXPECT_EQ(1, d.response_started_count()); |
| + EXPECT_FALSE(d.received_data_before_response()); |
| + EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); |
| + } |
| + |
| + // Stop at the redirect and make sure it was read from cache. |
| + { |
| + TestDelegate d; |
| + d.set_quit_on_redirect(true); |
| + GURL test_url(test_server_.GetURL("files/redirect-test.html")); |
| + URLRequest req(test_url, &d, &default_context_); |
| + |
| + req.Start(); |
| + base::RunLoop().Run(); |
| + |
| + EXPECT_EQ(1, d.received_redirect_count()); |
| + EXPECT_TRUE(req.was_cached()); |
| + } |
| +} |
| + |
| TEST_F(URLRequestTestHTTP, CancelRedirect) { |
| ASSERT_TRUE(test_server_.Start()); |
| @@ -4297,6 +4331,59 @@ TEST_F(URLRequestTestHTTP, DeferredRedirect_GetFullRequestHeaders) { |
| } |
| } |
| +// Tests that a deferred redirect releases its lock on the cache. |
| +TEST_F(URLRequestTestHTTP, DeferredRedirect_ReleaseCacheEntry) { |
| + ASSERT_TRUE(test_server_.Start()); |
| + |
| + // First test the cold cache case. |
| + { |
| + TestDelegate d_defer, d; |
|
mmenke
2013/09/16 20:41:08
nit: Define one variable per line.
mmenke
2013/09/16 20:41:08
nit: While this file name TestDelegates "d" a lot
davidben
2013/09/16 22:00:00
Done.
davidben
2013/09/16 22:00:00
Done.
|
| + |
| + // First, fire a request that defers its redirect. |
| + d_defer.set_quit_on_redirect(true); |
| + GURL test_url(test_server_.GetURL("files/redirect-test.html")); |
| + URLRequest req_defer(test_url, &d_defer, &default_context_); |
|
mmenke
2013/09/16 20:41:08
optional: Suggest "deferred_req" and "deferring_d
davidben
2013/09/16 22:00:00
Done.
|
| + req_defer.Start(); |
| + base::RunLoop().Run(); |
| + EXPECT_EQ(1, d_defer.received_redirect_count()); |
| + |
| + // This should test the cold cache case. |
| + EXPECT_FALSE(req_defer.was_cached()); |
| + |
| + // Now, fire a second at the same. It should not get stuck. |
| + URLRequest req(test_url, &d, &default_context_); |
| + req.Start(); |
| + base::RunLoop().Run(); |
| + EXPECT_EQ(1, d.response_started_count()); |
| + EXPECT_FALSE(d.received_data_before_response()); |
| + EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); |
|
mmenke
2013/09/16 20:41:08
May want to mention something about the "deferred"
davidben
2013/09/16 22:00:00
Went with paused.
|
| + } |
| + |
| + // Repeat, now with the cache warmed from the last run. |
| + { |
| + TestDelegate d_defer, d; |
| + |
| + // First, fire a request that defers its redirect. |
| + d_defer.set_quit_on_redirect(true); |
| + GURL test_url(test_server_.GetURL("files/redirect-test.html")); |
| + URLRequest req_defer(test_url, &d_defer, &default_context_); |
| + req_defer.Start(); |
| + base::RunLoop().Run(); |
| + EXPECT_EQ(1, d_defer.received_redirect_count()); |
| + |
| + // This should test the warm cache case. |
| + EXPECT_TRUE(req_defer.was_cached()); |
| + |
| + // Now, fire a second at the same. It should not get stuck. |
| + URLRequest req(test_url, &d, &default_context_); |
| + req.Start(); |
| + base::RunLoop().Run(); |
| + EXPECT_EQ(1, d.response_started_count()); |
| + EXPECT_FALSE(d.received_data_before_response()); |
| + EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); |
| + } |
| +} |
| + |
| TEST_F(URLRequestTestHTTP, CancelDeferredRedirect) { |
| ASSERT_TRUE(test_server_.Start()); |