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

Side by Side 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: Add URLRequestJob::IsRedirectFragmentModificationAllowed Created 6 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shlobj.h> 9 #include <shlobj.h>
10 #endif 10 #endif
(...skipping 5313 matching lines...) Expand 10 before | Expand all | Expand 10 after
5324 &default_context_); 5324 &default_context_);
5325 5325
5326 r.Start(); 5326 r.Start();
5327 base::RunLoop().Run(); 5327 base::RunLoop().Run();
5328 5328
5329 EXPECT_EQ(URLRequestStatus::FAILED, r.status().status()); 5329 EXPECT_EQ(URLRequestStatus::FAILED, r.status().status());
5330 EXPECT_EQ(ERR_UNSAFE_REDIRECT, r.status().error()); 5330 EXPECT_EQ(ERR_UNSAFE_REDIRECT, r.status().error());
5331 } 5331 }
5332 } 5332 }
5333 5333
5334 // Redirects from an URL with fragment to an unsafe URL without fragment should
5335 // be allowed.
5336 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithReferenceFragment) {
5337 ASSERT_TRUE(test_server_.Start());
5338
5339 GURL original_url(test_server_.GetURL("original#fragment"));
5340 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect");
5341 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment");
5342
5343 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
5344 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
5345
5346 TestDelegate d;
5347 {
5348 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5349
5350 r.Start();
5351 base::RunLoop().Run();
5352
5353 EXPECT_EQ(2U, r.url_chain().size());
5354 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5355 EXPECT_EQ(net::OK, r.status().error());
5356 EXPECT_EQ(original_url, r.original_url());
5357 EXPECT_EQ(expected_url, r.url());
5358 }
5359 }
5360
5361 // Redirects from an URL with fragment to an unsafe URL with fragment should 5334 // Redirects from an URL with fragment to an unsafe URL with fragment should
5362 // be allowed, and the reference fragment of the target URL should be preserved. 5335 // be allowed, and the reference fragment of the target URL should be preserved.
5363 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) { 5336 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) {
5364 ASSERT_TRUE(test_server_.Start()); 5337 ASSERT_TRUE(test_server_.Start());
5365 5338
5366 GURL original_url(test_server_.GetURL("original#fragment1")); 5339 GURL original_url(test_server_.GetURL("original#fragment1"));
5367 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 5340 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
5368 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 5341 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
5369 5342
5370 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 5343 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
5371 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5344 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
5372 5345
5373 TestDelegate d; 5346 TestDelegate d;
5374 { 5347 {
5375 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5348 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5376 5349
5377 r.Start(); 5350 r.Start();
5378 base::RunLoop().Run(); 5351 base::RunLoop().Run();
5379 5352
5380 EXPECT_EQ(2U, r.url_chain().size()); 5353 EXPECT_EQ(2U, r.url_chain().size());
5381 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5354 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5382 EXPECT_EQ(net::OK, r.status().error()); 5355 EXPECT_EQ(net::OK, r.status().error());
5383 EXPECT_EQ(original_url, r.original_url()); 5356 EXPECT_EQ(original_url, r.original_url());
5384 EXPECT_EQ(expected_url, r.url()); 5357 EXPECT_EQ(expected_url, r.url());
5385 } 5358 }
5386 } 5359 }
5387 5360
5388 // When a delegate has specified a safe redirect URL, but it does not match the 5361 // When a delegate has specified a safe redirect URL, assume that the redirect
5389 // redirect target, then do not prevent the reference fragment from being added. 5362 // URL should not be changed. In particular, the reference fragment should not
5363 // be modified.
5390 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { 5364 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) {
5391 ASSERT_TRUE(test_server_.Start()); 5365 ASSERT_TRUE(test_server_.Start());
5392 5366
5393 GURL original_url(test_server_.GetURL("original#expected-fragment")); 5367 GURL original_url(test_server_.GetURL("original#should-not-be-appended"));
5394 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); 5368 GURL redirect_url("data:text/html,expect-no-reference-fragment");
5395 GURL redirect_url(test_server_.GetURL("target"));
5396 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment"));
5397 5369
5398 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 5370 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
5399 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5371 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url);
5400 5372
5401 TestDelegate d; 5373 TestDelegate d;
5402 { 5374 {
5403 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5375 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5404 5376
5405 r.Start(); 5377 r.Start();
5406 base::RunLoop().Run(); 5378 base::RunLoop().Run();
5407 5379
5408 EXPECT_EQ(2U, r.url_chain().size()); 5380 EXPECT_EQ(2U, r.url_chain().size());
5409 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5381 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5410 EXPECT_EQ(net::OK, r.status().error()); 5382 EXPECT_EQ(net::OK, r.status().error());
5411 EXPECT_EQ(original_url, r.original_url()); 5383 EXPECT_EQ(original_url, r.original_url());
5412 EXPECT_EQ(expected_redirect_url, r.url()); 5384 EXPECT_EQ(redirect_url, r.url());
5413 } 5385 }
5414 } 5386 }
5415 5387
5388 // When a URLRequestRedirectJob is created, the redirection must be followed and
5389 // the reference fragment of thetarget URL must not be modified.
5390 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) {
5391 ASSERT_TRUE(test_server_.Start());
5392
5393 GURL original_url(test_server_.GetURL("original#should-not-be-appended"));
5394 GURL redirect_url(test_server_.GetURL("echo"));
5395
5396 TestDelegate d;
5397 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5398
5399 URLRequestRedirectJob* job = new URLRequestRedirectJob(
5400 &r, &default_network_delegate_, redirect_url,
5401 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
5402 AddTestInterceptor()->set_main_intercept_job(job);
5403
5404 r.Start();
5405 base::RunLoop().Run();
5406
5407 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5408 EXPECT_EQ(net::OK, r.status().error());
5409 EXPECT_EQ(original_url, r.original_url());
5410 EXPECT_EQ(redirect_url, r.url());
5411 }
mmenke 2014/03/31 20:45:49 Suggest we keep the old "RedirectWithReferenceFrag
robwu 2014/04/01 16:09:33 Done.
5412
5416 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { 5413 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) {
5417 ASSERT_TRUE(test_server_.Start()); 5414 ASSERT_TRUE(test_server_.Start());
5418 5415
5419 TestDelegate d; 5416 TestDelegate d;
5420 URLRequest req(test_server_.GetURL("echoheader?Referer"), 5417 URLRequest req(test_server_.GetURL("echoheader?Referer"),
5421 DEFAULT_PRIORITY, 5418 DEFAULT_PRIORITY,
5422 &d, 5419 &d,
5423 &default_context_); 5420 &default_context_);
5424 req.SetReferrer("http://user:pass@foo.com/"); 5421 req.SetReferrer("http://user:pass@foo.com/");
5425 req.Start(); 5422 req.Start();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
5985 TEST_F(URLRequestTestHTTP, Redirect307Tests) { 5982 TEST_F(URLRequestTestHTTP, Redirect307Tests) {
5986 ASSERT_TRUE(test_server_.Start()); 5983 ASSERT_TRUE(test_server_.Start());
5987 5984
5988 const GURL url = test_server_.GetURL("files/redirect307-to-echo"); 5985 const GURL url = test_server_.GetURL("files/redirect307-to-echo");
5989 5986
5990 HTTPRedirectMethodTest(url, "POST", "POST", true); 5987 HTTPRedirectMethodTest(url, "POST", "POST", true);
5991 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 5988 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
5992 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 5989 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
5993 } 5990 }
5994 5991
5992 TEST_F(URLRequestTestHTTP, Redirect302PreserveReferenceFragment) {
5993 ASSERT_TRUE(test_server_.Start());
5994
5995 GURL original_url(test_server_.GetURL("files/redirect302-to-echo#fragment"));
5996 GURL expected_url(test_server_.GetURL("echo#fragment"));
5997
5998 TestDelegate d;
5999 {
6000 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
6001
6002 r.Start();
6003 base::RunLoop().Run();
6004
6005 EXPECT_EQ(2U, r.url_chain().size());
6006 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
6007 EXPECT_EQ(net::OK, r.status().error());
6008 EXPECT_EQ(original_url, r.original_url());
6009 EXPECT_EQ(expected_url, r.url());
6010 }
6011 }
6012
5995 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { 6013 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) {
5996 ASSERT_TRUE(test_server_.Start()); 6014 ASSERT_TRUE(test_server_.Start());
5997 6015
5998 const char kData[] = "hello world"; 6016 const char kData[] = "hello world";
5999 6017
6000 TestDelegate d; 6018 TestDelegate d;
6001 URLRequest req(test_server_.GetURL("empty.html"), 6019 URLRequest req(test_server_.GetURL("empty.html"),
6002 DEFAULT_PRIORITY, 6020 DEFAULT_PRIORITY,
6003 &d, 6021 &d,
6004 &default_context_); 6022 &default_context_);
(...skipping 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after
7917 7935
7918 EXPECT_FALSE(r.is_pending()); 7936 EXPECT_FALSE(r.is_pending());
7919 EXPECT_EQ(1, d->response_started_count()); 7937 EXPECT_EQ(1, d->response_started_count());
7920 EXPECT_FALSE(d->received_data_before_response()); 7938 EXPECT_FALSE(d->received_data_before_response());
7921 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); 7939 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size));
7922 } 7940 }
7923 } 7941 }
7924 #endif // !defined(DISABLE_FTP_SUPPORT) 7942 #endif // !defined(DISABLE_FTP_SUPPORT)
7925 7943
7926 } // namespace net 7944 } // namespace net
OLDNEW
« net/url_request/url_request_redirect_job.cc ('K') | « 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