Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |