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