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

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: rebase 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
« no previous file with comments | « net/url_request/url_request_redirect_job.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5334 // Redirects from an URL with fragment to an unsafe URL with fragment should
5335 // be allowed. 5335 // be allowed, and the reference fragment of the target URL should be preserved.
5336 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithReferenceFragment) { 5336 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) {
5337 ASSERT_TRUE(test_server_.Start()); 5337 ASSERT_TRUE(test_server_.Start());
5338 5338
5339 GURL original_url(test_server_.GetURL("original#fragment")); 5339 GURL original_url(test_server_.GetURL("original#fragment1"));
5340 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect"); 5340 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
5341 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment"); 5341 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
5342 5342
5343 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 5343 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
5344 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5344 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
5345 5345
5346 TestDelegate d; 5346 TestDelegate d;
5347 { 5347 {
5348 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5348 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5349 5349
5350 r.Start(); 5350 r.Start();
5351 base::RunLoop().Run(); 5351 base::RunLoop().Run();
5352 5352
5353 EXPECT_EQ(2U, r.url_chain().size()); 5353 EXPECT_EQ(2U, r.url_chain().size());
5354 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5354 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5355 EXPECT_EQ(net::OK, r.status().error()); 5355 EXPECT_EQ(net::OK, r.status().error());
5356 EXPECT_EQ(original_url, r.original_url()); 5356 EXPECT_EQ(original_url, r.original_url());
5357 EXPECT_EQ(expected_url, r.url()); 5357 EXPECT_EQ(expected_url, r.url());
5358 } 5358 }
5359 } 5359 }
5360 5360
5361 // Redirects from an URL with fragment to an unsafe URL with fragment should 5361 // When a delegate has specified a safe redirect URL, but it does not match the
5362 // be allowed, and the reference fragment of the target URL should be preserved. 5362 // redirect target, then do not prevent the reference fragment from being added.
5363 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) { 5363 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) {
5364 ASSERT_TRUE(test_server_.Start()); 5364 ASSERT_TRUE(test_server_.Start());
5365 5365
5366 GURL original_url(test_server_.GetURL("original#fragment1")); 5366 GURL original_url(test_server_.GetURL("original#expected-fragment"));
5367 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 5367 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url");
5368 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 5368 GURL redirect_url(test_server_.GetURL("target"));
5369 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment"));
5369 5370
5370 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 5371 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
5371 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5372 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
5372 5373
5373 TestDelegate d; 5374 TestDelegate d;
5374 { 5375 {
5375 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5376 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5376 5377
5377 r.Start(); 5378 r.Start();
5378 base::RunLoop().Run(); 5379 base::RunLoop().Run();
5379 5380
5380 EXPECT_EQ(2U, r.url_chain().size()); 5381 EXPECT_EQ(2U, r.url_chain().size());
5381 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5382 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5382 EXPECT_EQ(net::OK, r.status().error()); 5383 EXPECT_EQ(net::OK, r.status().error());
5383 EXPECT_EQ(original_url, r.original_url()); 5384 EXPECT_EQ(original_url, r.original_url());
5384 EXPECT_EQ(expected_url, r.url()); 5385 EXPECT_EQ(expected_redirect_url, r.url());
5385 } 5386 }
5386 } 5387 }
5387 5388
5388 // When a delegate has specified a safe redirect URL, but it does not match the 5389 // 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. 5390 // URL should not be changed. In particular, the reference fragment should not
5391 // be modified.
5390 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { 5392 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) {
5391 ASSERT_TRUE(test_server_.Start()); 5393 ASSERT_TRUE(test_server_.Start());
5392 5394
5393 GURL original_url(test_server_.GetURL("original#expected-fragment")); 5395 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"); 5396 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 5397
5398 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 5398 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
5399 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5399 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url);
5400 5400
5401 TestDelegate d; 5401 TestDelegate d;
5402 { 5402 {
5403 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5403 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5404 5404
5405 r.Start(); 5405 r.Start();
5406 base::RunLoop().Run(); 5406 base::RunLoop().Run();
5407 5407
5408 EXPECT_EQ(2U, r.url_chain().size()); 5408 EXPECT_EQ(2U, r.url_chain().size());
5409 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5409 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5410 EXPECT_EQ(net::OK, r.status().error()); 5410 EXPECT_EQ(net::OK, r.status().error());
5411 EXPECT_EQ(original_url, r.original_url()); 5411 EXPECT_EQ(original_url, r.original_url());
5412 EXPECT_EQ(expected_redirect_url, r.url()); 5412 EXPECT_EQ(redirect_url, r.url());
5413 } 5413 }
5414 } 5414 }
5415 5415
5416 // When a URLRequestRedirectJob is created, the redirection must be followed and
5417 // the reference fragment of the target URL must not be modified.
5418 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) {
5419 ASSERT_TRUE(test_server_.Start());
5420
5421 GURL original_url(test_server_.GetURL("original#should-not-be-appended"));
5422 GURL redirect_url(test_server_.GetURL("echo"));
5423
5424 TestDelegate d;
5425 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5426
5427 URLRequestRedirectJob* job = new URLRequestRedirectJob(
5428 &r, &default_network_delegate_, redirect_url,
5429 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
5430 AddTestInterceptor()->set_main_intercept_job(job);
5431
5432 r.Start();
5433 base::RunLoop().Run();
5434
5435 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5436 EXPECT_EQ(net::OK, r.status().error());
5437 EXPECT_EQ(original_url, r.original_url());
5438 EXPECT_EQ(redirect_url, r.url());
5439 }
5440
5416 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { 5441 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) {
5417 ASSERT_TRUE(test_server_.Start()); 5442 ASSERT_TRUE(test_server_.Start());
5418 5443
5419 TestDelegate d; 5444 TestDelegate d;
5420 URLRequest req(test_server_.GetURL("echoheader?Referer"), 5445 URLRequest req(test_server_.GetURL("echoheader?Referer"),
5421 DEFAULT_PRIORITY, 5446 DEFAULT_PRIORITY,
5422 &d, 5447 &d,
5423 &default_context_); 5448 &default_context_);
5424 req.SetReferrer("http://user:pass@foo.com/"); 5449 req.SetReferrer("http://user:pass@foo.com/");
5425 req.Start(); 5450 req.Start();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
5985 TEST_F(URLRequestTestHTTP, Redirect307Tests) { 6010 TEST_F(URLRequestTestHTTP, Redirect307Tests) {
5986 ASSERT_TRUE(test_server_.Start()); 6011 ASSERT_TRUE(test_server_.Start());
5987 6012
5988 const GURL url = test_server_.GetURL("files/redirect307-to-echo"); 6013 const GURL url = test_server_.GetURL("files/redirect307-to-echo");
5989 6014
5990 HTTPRedirectMethodTest(url, "POST", "POST", true); 6015 HTTPRedirectMethodTest(url, "POST", "POST", true);
5991 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 6016 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
5992 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6017 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
5993 } 6018 }
5994 6019
6020 TEST_F(URLRequestTestHTTP, Redirect302PreserveReferenceFragment) {
6021 ASSERT_TRUE(test_server_.Start());
6022
6023 GURL original_url(test_server_.GetURL("files/redirect302-to-echo#fragment"));
6024 GURL expected_url(test_server_.GetURL("echo#fragment"));
6025
6026 TestDelegate d;
6027 {
6028 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
6029
6030 r.Start();
6031 base::RunLoop().Run();
6032
6033 EXPECT_EQ(2U, r.url_chain().size());
6034 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
6035 EXPECT_EQ(net::OK, r.status().error());
6036 EXPECT_EQ(original_url, r.original_url());
6037 EXPECT_EQ(expected_url, r.url());
6038 }
6039 }
6040
5995 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { 6041 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) {
5996 ASSERT_TRUE(test_server_.Start()); 6042 ASSERT_TRUE(test_server_.Start());
5997 6043
5998 const char kData[] = "hello world"; 6044 const char kData[] = "hello world";
5999 6045
6000 TestDelegate d; 6046 TestDelegate d;
6001 URLRequest req(test_server_.GetURL("empty.html"), 6047 URLRequest req(test_server_.GetURL("empty.html"),
6002 DEFAULT_PRIORITY, 6048 DEFAULT_PRIORITY,
6003 &d, 6049 &d,
6004 &default_context_); 6050 &default_context_);
(...skipping 1912 matching lines...) Expand 10 before | Expand all | Expand 10 after
7917 7963
7918 EXPECT_FALSE(r.is_pending()); 7964 EXPECT_FALSE(r.is_pending());
7919 EXPECT_EQ(1, d->response_started_count()); 7965 EXPECT_EQ(1, d->response_started_count());
7920 EXPECT_FALSE(d->received_data_before_response()); 7966 EXPECT_FALSE(d->received_data_before_response());
7921 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); 7967 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size));
7922 } 7968 }
7923 } 7969 }
7924 #endif // !defined(DISABLE_FTP_SUPPORT) 7970 #endif // !defined(DISABLE_FTP_SUPPORT)
7925 7971
7926 } // namespace net 7972 } // namespace net
OLDNEW
« 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