Make URLRequest store the chain of redirects.
BUG=77942
TEST=url_request_unittest
Review URL: http://codereview.chromium.org/6880026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@82157 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index cabedd4..f32af25 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -337,7 +337,8 @@
network_delegate.set_redirect_url(redirect_url);
{
- TestURLRequest r(test_server_.GetURL("empty.html"), &d);
+ GURL original_url(test_server_.GetURL("empty.html"));
+ TestURLRequest r(original_url, &d);
scoped_refptr<TestURLRequestContext> context(
new TestURLRequestContext(test_server_.host_port_pair().ToString()));
context->set_network_delegate(&network_delegate);
@@ -349,6 +350,8 @@
EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
EXPECT_EQ(0, r.status().os_error());
EXPECT_EQ(redirect_url, r.url());
+ EXPECT_EQ(original_url, r.original_url());
+ EXPECT_EQ(2U, r.url_chain().size());
EXPECT_EQ(1, network_delegate.created_requests());
EXPECT_EQ(0, network_delegate.destroyed_requests());
}
@@ -447,6 +450,29 @@
EXPECT_EQ(std::string(), req.referrer());
}
+TEST_F(URLRequestTestHTTP, MultipleRedirectTest) {
+ ASSERT_TRUE(test_server_.Start());
+
+ GURL destination_url = test_server_.GetURL("");
+ GURL middle_redirect_url = test_server_.GetURL(
+ "server-redirect?" + destination_url.spec());
+ GURL original_url = test_server_.GetURL(
+ "server-redirect?" + middle_redirect_url.spec());
+ TestDelegate d;
+ TestURLRequest req(original_url, &d);
+ req.Start();
+ MessageLoop::current()->Run();
+
+ EXPECT_EQ(1, d.response_started_count());
+ EXPECT_EQ(2, d.received_redirect_count());
+ EXPECT_EQ(destination_url, req.url());
+ EXPECT_EQ(original_url, req.original_url());
+ ASSERT_EQ(3U, req.url_chain().size());
+ EXPECT_EQ(original_url, req.url_chain()[0]);
+ EXPECT_EQ(middle_redirect_url, req.url_chain()[1]);
+ EXPECT_EQ(destination_url, req.url_chain()[2]);
+}
+
class HTTPSRequestTest : public testing::Test {
};