Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1942)

Unified Diff: net/url_request/url_request_unittest.cc

Issue 212543005: Do not copy reference fragments for overridden redirects. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/url_request/url_request_redirect_job.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 aab2b324798702eec3111935b873e6ac915a176f..01af382db0f8cb435b2c19f1d6b7f6f85b7fc763 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -5331,14 +5331,14 @@ TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) {
}
}
-// Redirects from an URL with fragment to an unsafe URL without fragment should
-// be allowed.
-TEST_F(URLRequestTestHTTP, UnsafeRedirectWithReferenceFragment) {
+// 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) {
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");
+ GURL original_url(test_server_.GetURL("original#fragment1"));
+ GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
+ GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
@@ -5358,16 +5358,17 @@ TEST_F(URLRequestTestHTTP, UnsafeRedirectWithReferenceFragment) {
}
}
-// 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) {
+// 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.
+TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) {
ASSERT_TRUE(test_server_.Start());
- GURL original_url(test_server_.GetURL("original#fragment1"));
- GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
- GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
+ 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"));
- default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
+ default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
TestDelegate d;
@@ -5381,22 +5382,21 @@ TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) {
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());
+ EXPECT_EQ(expected_redirect_url, r.url());
}
}
-// 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 +5409,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 the target 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());
+}
+
TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) {
ASSERT_TRUE(test_server_.Start());
@@ -5992,6 +6017,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());
« no previous file with comments | « net/url_request/url_request_redirect_job.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698