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 9d90cf82801c9e52f49c4ba04aa3276360713dfa..ad8f229867b6b6293e4327a78a899df802edfc85 100644 |
--- a/net/url_request/url_request_unittest.cc |
+++ b/net/url_request/url_request_unittest.cc |
@@ -5331,33 +5331,6 @@ TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { |
} |
} |
-// Redirects from an URL with fragment to an unsafe URL without fragment should |
-// be allowed. |
-TEST_F(URLRequestTestHTTP, UnsafeRedirectWithReferenceFragment) { |
- ASSERT_TRUE(test_server_.Start()); |
- |
- GURL original_url(test_server_.GetURL("original#fragment")); |
- GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect"); |
- GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment"); |
- |
- default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); |
- default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); |
- |
- TestDelegate d; |
- { |
- URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
- |
- r.Start(); |
- base::RunLoop().Run(); |
- |
- EXPECT_EQ(2U, r.url_chain().size()); |
- EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
- EXPECT_EQ(net::OK, r.status().error()); |
- EXPECT_EQ(original_url, r.original_url()); |
- EXPECT_EQ(expected_url, r.url()); |
- } |
-} |
- |
// Redirects from an URL with fragment to an unsafe URL with fragment should |
// be allowed, and the reference fragment of the target URL should be preserved. |
TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) { |
@@ -5385,18 +5358,17 @@ TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) { |
} |
} |
-// When a delegate has specified a safe redirect URL, but it does not match the |
-// redirect target, then do not prevent the reference fragment from being added. |
+// When a delegate has specified a safe redirect URL, assume that the redirect |
+// URL should not be changed. In particular, the reference fragment should not |
+// be modified. |
TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { |
ASSERT_TRUE(test_server_.Start()); |
- GURL original_url(test_server_.GetURL("original#expected-fragment")); |
- GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); |
- GURL redirect_url(test_server_.GetURL("target")); |
- GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); |
+ GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
+ GURL redirect_url("data:text/html,expect-no-reference-fragment"); |
default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); |
- default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); |
+ default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); |
TestDelegate d; |
{ |
@@ -5409,10 +5381,35 @@ TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { |
EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
EXPECT_EQ(net::OK, r.status().error()); |
EXPECT_EQ(original_url, r.original_url()); |
- EXPECT_EQ(expected_redirect_url, r.url()); |
+ EXPECT_EQ(redirect_url, r.url()); |
} |
} |
+// When a URLRequestRedirectJob is created, the redirection must be followed and |
+// the reference fragment of thetarget URL must not be modified. |
+TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { |
+ ASSERT_TRUE(test_server_.Start()); |
+ |
+ GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
+ GURL redirect_url(test_server_.GetURL("echo")); |
+ |
+ TestDelegate d; |
+ URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
+ |
+ URLRequestRedirectJob* job = new URLRequestRedirectJob( |
+ &r, &default_network_delegate_, redirect_url, |
+ URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); |
+ AddTestInterceptor()->set_main_intercept_job(job); |
+ |
+ r.Start(); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
+ EXPECT_EQ(net::OK, r.status().error()); |
+ EXPECT_EQ(original_url, r.original_url()); |
+ EXPECT_EQ(redirect_url, r.url()); |
+} |
mmenke
2014/03/31 20:45:49
Suggest we keep the old "RedirectWithReferenceFrag
robwu
2014/04/01 16:09:33
Done.
|
+ |
TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { |
ASSERT_TRUE(test_server_.Start()); |
@@ -5992,6 +5989,27 @@ TEST_F(URLRequestTestHTTP, Redirect307Tests) { |
HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); |
} |
+TEST_F(URLRequestTestHTTP, Redirect302PreserveReferenceFragment) { |
+ ASSERT_TRUE(test_server_.Start()); |
+ |
+ GURL original_url(test_server_.GetURL("files/redirect302-to-echo#fragment")); |
+ GURL expected_url(test_server_.GetURL("echo#fragment")); |
+ |
+ TestDelegate d; |
+ { |
+ URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
+ |
+ r.Start(); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(2U, r.url_chain().size()); |
+ EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
+ EXPECT_EQ(net::OK, r.status().error()); |
+ EXPECT_EQ(original_url, r.original_url()); |
+ EXPECT_EQ(expected_url, r.url()); |
+ } |
+} |
+ |
TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { |
ASSERT_TRUE(test_server_.Start()); |