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 |