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 21 matching lines...) Expand all Loading... |
32 #include "net/base/load_flags.h" | 32 #include "net/base/load_flags.h" |
33 #include "net/base/mock_host_resolver.h" | 33 #include "net/base/mock_host_resolver.h" |
34 #include "net/base/net_errors.h" | 34 #include "net/base/net_errors.h" |
35 #include "net/base/net_log.h" | 35 #include "net/base/net_log.h" |
36 #include "net/base/net_log_unittest.h" | 36 #include "net/base/net_log_unittest.h" |
37 #include "net/base/net_module.h" | 37 #include "net/base/net_module.h" |
38 #include "net/base/net_util.h" | 38 #include "net/base/net_util.h" |
39 #include "net/base/ssl_connection_status_flags.h" | 39 #include "net/base/ssl_connection_status_flags.h" |
40 #include "net/base/test_data_directory.h" | 40 #include "net/base/test_data_directory.h" |
41 #include "net/base/test_root_certs.h" | 41 #include "net/base/test_root_certs.h" |
42 #include "net/base/upload_data.h" | 42 #include "net/base/upload_bytes_element_reader.h" |
| 43 #include "net/base/upload_data_stream.h" |
| 44 #include "net/base/upload_file_element_reader.h" |
43 #include "net/cookies/cookie_monster.h" | 45 #include "net/cookies/cookie_monster.h" |
44 #include "net/cookies/cookie_store_test_helpers.h" | 46 #include "net/cookies/cookie_store_test_helpers.h" |
45 #include "net/disk_cache/disk_cache.h" | 47 #include "net/disk_cache/disk_cache.h" |
46 #include "net/ftp/ftp_network_layer.h" | 48 #include "net/ftp/ftp_network_layer.h" |
47 #include "net/http/http_cache.h" | 49 #include "net/http/http_cache.h" |
48 #include "net/http/http_network_layer.h" | 50 #include "net/http/http_network_layer.h" |
49 #include "net/http/http_network_session.h" | 51 #include "net/http/http_network_session.h" |
50 #include "net/http/http_request_headers.h" | 52 #include "net/http/http_request_headers.h" |
51 #include "net/http/http_response_headers.h" | 53 #include "net/http/http_response_headers.h" |
52 #include "net/ocsp/nss_ocsp.h" | 54 #include "net/ocsp/nss_ocsp.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 srand(seed); | 105 srand(seed); |
104 } | 106 } |
105 | 107 |
106 for (size_t i = 0; i < len; i++) { | 108 for (size_t i = 0; i < len; i++) { |
107 buffer[i] = static_cast<char>(rand()); | 109 buffer[i] = static_cast<char>(rand()); |
108 if (!buffer[i]) | 110 if (!buffer[i]) |
109 buffer[i] = 'g'; | 111 buffer[i] = 'g'; |
110 } | 112 } |
111 } | 113 } |
112 | 114 |
113 scoped_refptr<UploadData> CreateSimpleUploadData(const char* data) { | 115 UploadDataStream* CreateSimpleUploadData(const char* data) { |
114 scoped_refptr<UploadData> upload(new UploadData); | 116 scoped_ptr<UploadElementReader> reader( |
115 upload->AppendBytes(data, strlen(data)); | 117 new UploadBytesElementReader(data, strlen(data))); |
116 return upload; | 118 return UploadDataStream::CreateWithReader(reader.Pass(), 0); |
117 } | 119 } |
118 | 120 |
119 // Verify that the SSLInfo of a successful SSL connection has valid values. | 121 // Verify that the SSLInfo of a successful SSL connection has valid values. |
120 void CheckSSLInfo(const SSLInfo& ssl_info) { | 122 void CheckSSLInfo(const SSLInfo& ssl_info) { |
121 // Allow ChromeFrame fake SSLInfo to get through. | 123 // Allow ChromeFrame fake SSLInfo to get through. |
122 if (ssl_info.cert.get() && | 124 if (ssl_info.cert.get() && |
123 ssl_info.cert.get()->issuer().GetDisplayName() == "Chrome Internal") { | 125 ssl_info.cert.get()->issuer().GetDisplayName() == "Chrome Internal") { |
124 // -1 means unknown. | 126 // -1 means unknown. |
125 EXPECT_EQ(ssl_info.security_bits, -1); | 127 EXPECT_EQ(ssl_info.security_bits, -1); |
126 return; | 128 return; |
(...skipping 1775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1902 // |request_method| == |redirect_method|. | 1904 // |request_method| == |redirect_method|. |
1903 void HTTPRedirectMethodTest(const GURL& redirect_url, | 1905 void HTTPRedirectMethodTest(const GURL& redirect_url, |
1904 const std::string& request_method, | 1906 const std::string& request_method, |
1905 const std::string& redirect_method, | 1907 const std::string& redirect_method, |
1906 bool include_data) { | 1908 bool include_data) { |
1907 static const char kData[] = "hello world"; | 1909 static const char kData[] = "hello world"; |
1908 TestDelegate d; | 1910 TestDelegate d; |
1909 URLRequest req(redirect_url, &d, &default_context_); | 1911 URLRequest req(redirect_url, &d, &default_context_); |
1910 req.set_method(request_method); | 1912 req.set_method(request_method); |
1911 if (include_data) { | 1913 if (include_data) { |
1912 req.set_upload(CreateSimpleUploadData(kData).get()); | 1914 req.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
1913 HttpRequestHeaders headers; | 1915 HttpRequestHeaders headers; |
1914 headers.SetHeader(HttpRequestHeaders::kContentLength, | 1916 headers.SetHeader(HttpRequestHeaders::kContentLength, |
1915 base::UintToString(arraysize(kData) - 1)); | 1917 base::UintToString(arraysize(kData) - 1)); |
1916 req.SetExtraRequestHeaders(headers); | 1918 req.SetExtraRequestHeaders(headers); |
1917 } | 1919 } |
1918 req.Start(); | 1920 req.Start(); |
1919 MessageLoop::current()->Run(); | 1921 MessageLoop::current()->Run(); |
1920 EXPECT_EQ(redirect_method, req.method()); | 1922 EXPECT_EQ(redirect_method, req.method()); |
1921 EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); | 1923 EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status()); |
1922 EXPECT_EQ(OK, req.status().error()); | 1924 EXPECT_EQ(OK, req.status().error()); |
(...skipping 24 matching lines...) Expand all Loading... |
1947 marker = 'a'; | 1949 marker = 'a'; |
1948 } | 1950 } |
1949 } | 1951 } |
1950 uploadBytes[kMsgSize] = '\0'; | 1952 uploadBytes[kMsgSize] = '\0'; |
1951 | 1953 |
1952 for (int i = 0; i < kIterations; ++i) { | 1954 for (int i = 0; i < kIterations; ++i) { |
1953 TestDelegate d; | 1955 TestDelegate d; |
1954 URLRequest r(test_server_.GetURL("echo"), &d, &default_context_); | 1956 URLRequest r(test_server_.GetURL("echo"), &d, &default_context_); |
1955 r.set_method(method.c_str()); | 1957 r.set_method(method.c_str()); |
1956 | 1958 |
1957 scoped_refptr<UploadData> upload_data(new UploadData()); | 1959 r.set_upload(make_scoped_ptr(CreateSimpleUploadData(uploadBytes))); |
1958 upload_data->AppendBytes(uploadBytes, kMsgSize); | |
1959 r.set_upload(upload_data); | |
1960 | 1960 |
1961 r.Start(); | 1961 r.Start(); |
1962 EXPECT_TRUE(r.is_pending()); | 1962 EXPECT_TRUE(r.is_pending()); |
1963 | 1963 |
1964 MessageLoop::current()->Run(); | 1964 MessageLoop::current()->Run(); |
1965 | 1965 |
1966 ASSERT_EQ(1, d.response_started_count()) | 1966 ASSERT_EQ(1, d.response_started_count()) |
1967 << "request failed: " << r.status().status() | 1967 << "request failed: " << r.status().status() |
1968 << ", os error: " << r.status().error(); | 1968 << ", os error: " << r.status().error(); |
1969 | 1969 |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2315 network_delegate.set_redirect_url(redirect_url); | 2315 network_delegate.set_redirect_url(redirect_url); |
2316 | 2316 |
2317 TestURLRequestContext context(true); | 2317 TestURLRequestContext context(true); |
2318 context.set_network_delegate(&network_delegate); | 2318 context.set_network_delegate(&network_delegate); |
2319 context.Init(); | 2319 context.Init(); |
2320 | 2320 |
2321 { | 2321 { |
2322 GURL original_url(test_server_.GetURL("empty.html")); | 2322 GURL original_url(test_server_.GetURL("empty.html")); |
2323 URLRequest r(original_url, &d, &context); | 2323 URLRequest r(original_url, &d, &context); |
2324 r.set_method("POST"); | 2324 r.set_method("POST"); |
2325 r.set_upload(CreateSimpleUploadData(kData).get()); | 2325 r.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
2326 HttpRequestHeaders headers; | 2326 HttpRequestHeaders headers; |
2327 headers.SetHeader(HttpRequestHeaders::kContentLength, | 2327 headers.SetHeader(HttpRequestHeaders::kContentLength, |
2328 base::UintToString(arraysize(kData) - 1)); | 2328 base::UintToString(arraysize(kData) - 1)); |
2329 r.SetExtraRequestHeaders(headers); | 2329 r.SetExtraRequestHeaders(headers); |
2330 r.Start(); | 2330 r.Start(); |
2331 MessageLoop::current()->Run(); | 2331 MessageLoop::current()->Run(); |
2332 | 2332 |
2333 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 2333 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
2334 EXPECT_EQ(0, r.status().error()); | 2334 EXPECT_EQ(0, r.status().error()); |
2335 EXPECT_EQ(redirect_url, r.url()); | 2335 EXPECT_EQ(redirect_url, r.url()); |
(...skipping 785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3121 | 3121 |
3122 TestDelegate d; | 3122 TestDelegate d; |
3123 { | 3123 { |
3124 URLRequest r(test_server_.GetURL("echo"), &d, &default_context_); | 3124 URLRequest r(test_server_.GetURL("echo"), &d, &default_context_); |
3125 r.set_method("POST"); | 3125 r.set_method("POST"); |
3126 | 3126 |
3127 FilePath dir; | 3127 FilePath dir; |
3128 PathService::Get(base::DIR_EXE, &dir); | 3128 PathService::Get(base::DIR_EXE, &dir); |
3129 file_util::SetCurrentDirectory(dir); | 3129 file_util::SetCurrentDirectory(dir); |
3130 | 3130 |
3131 scoped_refptr<UploadData> upload_data(new UploadData); | 3131 ScopedVector<UploadElementReader> element_readers; |
3132 | 3132 |
3133 FilePath path; | 3133 FilePath path; |
3134 PathService::Get(base::DIR_SOURCE_ROOT, &path); | 3134 PathService::Get(base::DIR_SOURCE_ROOT, &path); |
3135 path = path.Append(FILE_PATH_LITERAL("net")); | 3135 path = path.Append(FILE_PATH_LITERAL("net")); |
3136 path = path.Append(FILE_PATH_LITERAL("data")); | 3136 path = path.Append(FILE_PATH_LITERAL("data")); |
3137 path = path.Append(FILE_PATH_LITERAL("url_request_unittest")); | 3137 path = path.Append(FILE_PATH_LITERAL("url_request_unittest")); |
3138 path = path.Append(FILE_PATH_LITERAL("with-headers.html")); | 3138 path = path.Append(FILE_PATH_LITERAL("with-headers.html")); |
3139 upload_data->AppendFileRange(path, 0, kuint64max, base::Time()); | 3139 element_readers.push_back(new UploadFileElementReader( |
| 3140 path, 0, kuint64max, base::Time())); |
3140 | 3141 |
3141 // This file should just be ignored in the upload stream. | 3142 // This file should just be ignored in the upload stream. |
3142 upload_data->AppendFileRange( | 3143 element_readers.push_back(new UploadFileElementReader( |
3143 FilePath(FILE_PATH_LITERAL( | 3144 FilePath(FILE_PATH_LITERAL( |
3144 "c:\\path\\to\\non\\existant\\file.randomness.12345")), | 3145 "c:\\path\\to\\non\\existant\\file.randomness.12345")), |
3145 0, kuint64max, base::Time()); | 3146 0, kuint64max, base::Time())); |
3146 r.set_upload(upload_data); | 3147 r.set_upload(make_scoped_ptr(new UploadDataStream(&element_readers, 0))); |
3147 | 3148 |
3148 r.Start(); | 3149 r.Start(); |
3149 EXPECT_TRUE(r.is_pending()); | 3150 EXPECT_TRUE(r.is_pending()); |
3150 | 3151 |
3151 MessageLoop::current()->Run(); | 3152 MessageLoop::current()->Run(); |
3152 | 3153 |
3153 int64 size = 0; | 3154 int64 size = 0; |
3154 ASSERT_EQ(true, file_util::GetFileSize(path, &size)); | 3155 ASSERT_EQ(true, file_util::GetFileSize(path, &size)); |
3155 scoped_array<char> buf(new char[size]); | 3156 scoped_array<char> buf(new char[size]); |
3156 | 3157 |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3584 // http://code.google.com/p/chromium/issues/detail?id=843 | 3585 // http://code.google.com/p/chromium/issues/detail?id=843 |
3585 TEST_F(URLRequestTestHTTP, Post302RedirectGet) { | 3586 TEST_F(URLRequestTestHTTP, Post302RedirectGet) { |
3586 ASSERT_TRUE(test_server_.Start()); | 3587 ASSERT_TRUE(test_server_.Start()); |
3587 | 3588 |
3588 const char kData[] = "hello world"; | 3589 const char kData[] = "hello world"; |
3589 | 3590 |
3590 TestDelegate d; | 3591 TestDelegate d; |
3591 URLRequest req( | 3592 URLRequest req( |
3592 test_server_.GetURL("files/redirect-to-echoall"), &d, &default_context_); | 3593 test_server_.GetURL("files/redirect-to-echoall"), &d, &default_context_); |
3593 req.set_method("POST"); | 3594 req.set_method("POST"); |
3594 req.set_upload(CreateSimpleUploadData(kData)); | 3595 req.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
3595 | 3596 |
3596 // Set headers (some of which are specific to the POST). | 3597 // Set headers (some of which are specific to the POST). |
3597 HttpRequestHeaders headers; | 3598 HttpRequestHeaders headers; |
3598 headers.AddHeadersFromString( | 3599 headers.AddHeadersFromString( |
3599 "Content-Type: multipart/form-data; " | 3600 "Content-Type: multipart/form-data; " |
3600 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n" | 3601 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n" |
3601 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9," | 3602 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9," |
3602 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n" | 3603 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n" |
3603 "Accept-Language: en-US,en\r\n" | 3604 "Accept-Language: en-US,en\r\n" |
3604 "Accept-Charset: ISO-8859-1,*,utf-8\r\n" | 3605 "Accept-Charset: ISO-8859-1,*,utf-8\r\n" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3670 } | 3671 } |
3671 | 3672 |
3672 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { | 3673 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { |
3673 ASSERT_TRUE(test_server_.Start()); | 3674 ASSERT_TRUE(test_server_.Start()); |
3674 | 3675 |
3675 const char kData[] = "hello world"; | 3676 const char kData[] = "hello world"; |
3676 | 3677 |
3677 TestDelegate d; | 3678 TestDelegate d; |
3678 URLRequest req(test_server_.GetURL("empty.html"), &d, &default_context_); | 3679 URLRequest req(test_server_.GetURL("empty.html"), &d, &default_context_); |
3679 req.set_method("POST"); | 3680 req.set_method("POST"); |
3680 req.set_upload(CreateSimpleUploadData(kData).get()); | 3681 req.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
3681 HttpRequestHeaders headers; | 3682 HttpRequestHeaders headers; |
3682 headers.SetHeader(HttpRequestHeaders::kContentLength, | 3683 headers.SetHeader(HttpRequestHeaders::kContentLength, |
3683 base::UintToString(arraysize(kData) - 1)); | 3684 base::UintToString(arraysize(kData) - 1)); |
3684 req.SetExtraRequestHeaders(headers); | 3685 req.SetExtraRequestHeaders(headers); |
3685 | 3686 |
3686 URLRequestRedirectJob* job = new URLRequestRedirectJob( | 3687 URLRequestRedirectJob* job = new URLRequestRedirectJob( |
3687 &req, default_context_.network_delegate(), test_server_.GetURL("echo"), | 3688 &req, default_context_.network_delegate(), test_server_.GetURL("echo"), |
3688 URLRequestRedirectJob::REDIRECT_302_FOUND); | 3689 URLRequestRedirectJob::REDIRECT_302_FOUND); |
3689 AddTestInterceptor()->set_main_intercept_job(job); | 3690 AddTestInterceptor()->set_main_intercept_job(job); |
3690 | 3691 |
3691 req.Start(); | 3692 req.Start(); |
3692 MessageLoop::current()->Run(); | 3693 MessageLoop::current()->Run(); |
3693 EXPECT_EQ("GET", req.method()); | 3694 EXPECT_EQ("GET", req.method()); |
3694 } | 3695 } |
3695 | 3696 |
3696 TEST_F(URLRequestTestHTTP, InterceptPost307RedirectPost) { | 3697 TEST_F(URLRequestTestHTTP, InterceptPost307RedirectPost) { |
3697 ASSERT_TRUE(test_server_.Start()); | 3698 ASSERT_TRUE(test_server_.Start()); |
3698 | 3699 |
3699 const char kData[] = "hello world"; | 3700 const char kData[] = "hello world"; |
3700 | 3701 |
3701 TestDelegate d; | 3702 TestDelegate d; |
3702 URLRequest req(test_server_.GetURL("empty.html"), &d, &default_context_); | 3703 URLRequest req(test_server_.GetURL("empty.html"), &d, &default_context_); |
3703 req.set_method("POST"); | 3704 req.set_method("POST"); |
3704 req.set_upload(CreateSimpleUploadData(kData).get()); | 3705 req.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
3705 HttpRequestHeaders headers; | 3706 HttpRequestHeaders headers; |
3706 headers.SetHeader(HttpRequestHeaders::kContentLength, | 3707 headers.SetHeader(HttpRequestHeaders::kContentLength, |
3707 base::UintToString(arraysize(kData) - 1)); | 3708 base::UintToString(arraysize(kData) - 1)); |
3708 req.SetExtraRequestHeaders(headers); | 3709 req.SetExtraRequestHeaders(headers); |
3709 | 3710 |
3710 URLRequestRedirectJob* job = new URLRequestRedirectJob( | 3711 URLRequestRedirectJob* job = new URLRequestRedirectJob( |
3711 &req, default_context_.network_delegate(), test_server_.GetURL("echo"), | 3712 &req, default_context_.network_delegate(), test_server_.GetURL("echo"), |
3712 URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT); | 3713 URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT); |
3713 AddTestInterceptor()->set_main_intercept_job(job); | 3714 AddTestInterceptor()->set_main_intercept_job(job); |
3714 | 3715 |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4214 TestDelegate d; | 4215 TestDelegate d; |
4215 // Navigating to https://www.somewhere.com instead of https://127.0.0.1 will | 4216 // Navigating to https://www.somewhere.com instead of https://127.0.0.1 will |
4216 // cause a certificate error. Ignore the error. | 4217 // cause a certificate error. Ignore the error. |
4217 d.set_allow_certificate_errors(true); | 4218 d.set_allow_certificate_errors(true); |
4218 | 4219 |
4219 URLRequest req(GURL(StringPrintf("http://www.somewhere.com:%d/echo", | 4220 URLRequest req(GURL(StringPrintf("http://www.somewhere.com:%d/echo", |
4220 test_server.host_port_pair().port())), | 4221 test_server.host_port_pair().port())), |
4221 &d, | 4222 &d, |
4222 &context); | 4223 &context); |
4223 req.set_method("POST"); | 4224 req.set_method("POST"); |
4224 req.set_upload(CreateSimpleUploadData(kData).get()); | 4225 req.set_upload(make_scoped_ptr(CreateSimpleUploadData(kData))); |
4225 | 4226 |
4226 req.Start(); | 4227 req.Start(); |
4227 MessageLoop::current()->Run(); | 4228 MessageLoop::current()->Run(); |
4228 | 4229 |
4229 EXPECT_EQ("https", req.url().scheme()); | 4230 EXPECT_EQ("https", req.url().scheme()); |
4230 EXPECT_EQ("POST", req.method()); | 4231 EXPECT_EQ("POST", req.method()); |
4231 EXPECT_EQ(kData, d.data_received()); | 4232 EXPECT_EQ(kData, d.data_received()); |
4232 } | 4233 } |
4233 | 4234 |
4234 TEST_F(HTTPSRequestTest, SSLv3Fallback) { | 4235 TEST_F(HTTPSRequestTest, SSLv3Fallback) { |
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5165 | 5166 |
5166 EXPECT_FALSE(r.is_pending()); | 5167 EXPECT_FALSE(r.is_pending()); |
5167 EXPECT_EQ(1, d->response_started_count()); | 5168 EXPECT_EQ(1, d->response_started_count()); |
5168 EXPECT_FALSE(d->received_data_before_response()); | 5169 EXPECT_FALSE(d->received_data_before_response()); |
5169 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 5170 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
5170 } | 5171 } |
5171 } | 5172 } |
5172 #endif // !defined(DISABLE_FTP_SUPPORT) | 5173 #endif // !defined(DISABLE_FTP_SUPPORT) |
5173 | 5174 |
5174 } // namespace net | 5175 } // namespace net |
OLD | NEW |