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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 EXPECT_LE(load_timing_info.request_start, | 149 EXPECT_LE(load_timing_info.request_start, |
150 load_timing_info.proxy_resolve_start); | 150 load_timing_info.proxy_resolve_start); |
151 EXPECT_LE(load_timing_info.proxy_resolve_start, | 151 EXPECT_LE(load_timing_info.proxy_resolve_start, |
152 load_timing_info.proxy_resolve_end); | 152 load_timing_info.proxy_resolve_end); |
153 EXPECT_LE(load_timing_info.proxy_resolve_end, | 153 EXPECT_LE(load_timing_info.proxy_resolve_end, |
154 load_timing_info.send_start); | 154 load_timing_info.send_start); |
155 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 155 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
156 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); | 156 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
157 } | 157 } |
158 | 158 |
159 // Tests load timing in the case that there is no underlying connection. This | 159 // Tests load timing information in the case of a cache hit, when no cache |
160 // can be used to test in the case of cached responses, errors, or non-HTTP | 160 // validation request was sent over the wire. |
161 // requests. | 161 void TestLoadTimingCacheHitNoNetwork( |
162 void TestLoadTimingNoHttpConnection( | 162 const net::LoadTimingInfo& load_timing_info) { |
| 163 EXPECT_FALSE(load_timing_info.socket_reused); |
| 164 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 165 |
| 166 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 167 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 168 |
| 169 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 170 EXPECT_LE(load_timing_info.request_start, load_timing_info.send_start); |
| 171 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 172 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 173 |
| 174 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 175 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 176 } |
| 177 |
| 178 // Tests load timing in the case that there is no HTTP response. This can be |
| 179 // used to test in the case of errors or non-HTTP requests. |
| 180 void TestLoadTimingNoHttpResponse( |
163 const net::LoadTimingInfo& load_timing_info) { | 181 const net::LoadTimingInfo& load_timing_info) { |
164 EXPECT_FALSE(load_timing_info.socket_reused); | 182 EXPECT_FALSE(load_timing_info.socket_reused); |
165 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 183 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
166 | 184 |
167 // Only the request times should be non-null. | 185 // Only the request times should be non-null. |
168 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 186 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
169 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 187 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
170 | 188 |
171 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 189 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
172 | 190 |
(...skipping 3843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4016 EXPECT_EQ(1, d.response_started_count()); | 4034 EXPECT_EQ(1, d.response_started_count()); |
4017 EXPECT_EQ(0, d.bytes_received()); | 4035 EXPECT_EQ(0, d.bytes_received()); |
4018 EXPECT_FALSE(d.received_data_before_response()); | 4036 EXPECT_FALSE(d.received_data_before_response()); |
4019 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status()); | 4037 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status()); |
4020 } | 4038 } |
4021 } | 4039 } |
4022 | 4040 |
4023 TEST_F(URLRequestTestHTTP, VaryHeader) { | 4041 TEST_F(URLRequestTestHTTP, VaryHeader) { |
4024 ASSERT_TRUE(test_server_.Start()); | 4042 ASSERT_TRUE(test_server_.Start()); |
4025 | 4043 |
4026 // populate the cache | 4044 // Populate the cache. |
4027 { | 4045 { |
4028 TestDelegate d; | 4046 TestDelegate d; |
4029 URLRequest req( | 4047 URLRequest req( |
4030 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); | 4048 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); |
4031 HttpRequestHeaders headers; | 4049 HttpRequestHeaders headers; |
4032 headers.SetHeader("foo", "1"); | 4050 headers.SetHeader("foo", "1"); |
4033 req.SetExtraRequestHeaders(headers); | 4051 req.SetExtraRequestHeaders(headers); |
4034 req.Start(); | 4052 req.Start(); |
4035 MessageLoop::current()->Run(); | 4053 MessageLoop::current()->Run(); |
| 4054 |
| 4055 LoadTimingInfo load_timing_info; |
| 4056 req.GetLoadTimingInfo(&load_timing_info); |
| 4057 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
4036 } | 4058 } |
4037 | 4059 |
4038 // expect a cache hit | 4060 // Expect a cache hit. |
4039 { | 4061 { |
4040 TestDelegate d; | 4062 TestDelegate d; |
4041 URLRequest req( | 4063 URLRequest req( |
4042 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); | 4064 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); |
4043 HttpRequestHeaders headers; | 4065 HttpRequestHeaders headers; |
4044 headers.SetHeader("foo", "1"); | 4066 headers.SetHeader("foo", "1"); |
4045 req.SetExtraRequestHeaders(headers); | 4067 req.SetExtraRequestHeaders(headers); |
4046 req.Start(); | 4068 req.Start(); |
4047 MessageLoop::current()->Run(); | 4069 MessageLoop::current()->Run(); |
4048 | 4070 |
4049 EXPECT_TRUE(req.was_cached()); | 4071 EXPECT_TRUE(req.was_cached()); |
| 4072 |
| 4073 LoadTimingInfo load_timing_info; |
| 4074 req.GetLoadTimingInfo(&load_timing_info); |
| 4075 TestLoadTimingCacheHitNoNetwork(load_timing_info); |
4050 } | 4076 } |
4051 | 4077 |
4052 // expect a cache miss | 4078 // Expect a cache miss. |
4053 { | 4079 { |
4054 TestDelegate d; | 4080 TestDelegate d; |
4055 URLRequest req( | 4081 URLRequest req( |
4056 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); | 4082 test_server_.GetURL("echoheadercache?foo"), &d, &default_context_); |
4057 HttpRequestHeaders headers; | 4083 HttpRequestHeaders headers; |
4058 headers.SetHeader("foo", "2"); | 4084 headers.SetHeader("foo", "2"); |
4059 req.SetExtraRequestHeaders(headers); | 4085 req.SetExtraRequestHeaders(headers); |
4060 req.Start(); | 4086 req.Start(); |
4061 MessageLoop::current()->Run(); | 4087 MessageLoop::current()->Run(); |
4062 | 4088 |
4063 EXPECT_FALSE(req.was_cached()); | 4089 EXPECT_FALSE(req.was_cached()); |
| 4090 |
| 4091 LoadTimingInfo load_timing_info; |
| 4092 req.GetLoadTimingInfo(&load_timing_info); |
| 4093 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
4064 } | 4094 } |
4065 } | 4095 } |
4066 | 4096 |
4067 TEST_F(URLRequestTestHTTP, BasicAuth) { | 4097 TEST_F(URLRequestTestHTTP, BasicAuth) { |
4068 ASSERT_TRUE(test_server_.Start()); | 4098 ASSERT_TRUE(test_server_.Start()); |
4069 | 4099 |
4070 // populate the cache | 4100 // populate the cache |
4071 { | 4101 { |
4072 TestDelegate d; | 4102 TestDelegate d; |
4073 d.set_credentials(AuthCredentials(kUser, kSecret)); | 4103 d.set_credentials(AuthCredentials(kUser, kSecret)); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4187 r.GetLoadTimingInfo(&load_timing_info); | 4217 r.GetLoadTimingInfo(&load_timing_info); |
4188 // The test server does not support keep alive sockets, so the second | 4218 // The test server does not support keep alive sockets, so the second |
4189 // request with auth should use a new socket. | 4219 // request with auth should use a new socket. |
4190 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); | 4220 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
4191 EXPECT_NE(load_timing_info_before_auth.socket_log_id, | 4221 EXPECT_NE(load_timing_info_before_auth.socket_log_id, |
4192 load_timing_info.socket_log_id); | 4222 load_timing_info.socket_log_id); |
4193 EXPECT_LE(load_timing_info_before_auth.receive_headers_end, | 4223 EXPECT_LE(load_timing_info_before_auth.receive_headers_end, |
4194 load_timing_info.connect_timing.connect_start); | 4224 load_timing_info.connect_timing.connect_start); |
4195 } | 4225 } |
4196 | 4226 |
4197 // repeat request with end-to-end validation. since auth-basic results in a | 4227 // Repeat request with end-to-end validation. Since auth-basic results in a |
4198 // cachable page, we expect this test to result in a 304. in which case, the | 4228 // cachable page, we expect this test to result in a 304. In which case, the |
4199 // response should be fetched from the cache. | 4229 // response should be fetched from the cache. |
4200 { | 4230 { |
4201 TestDelegate d; | 4231 TestDelegate d; |
4202 d.set_credentials(AuthCredentials(kUser, kSecret)); | 4232 d.set_credentials(AuthCredentials(kUser, kSecret)); |
4203 | 4233 |
4204 URLRequest r(test_server_.GetURL("auth-basic"), &d, &default_context_); | 4234 URLRequest r(test_server_.GetURL("auth-basic"), &d, &default_context_); |
4205 r.set_load_flags(LOAD_VALIDATE_CACHE); | 4235 r.set_load_flags(LOAD_VALIDATE_CACHE); |
4206 r.Start(); | 4236 r.Start(); |
4207 | 4237 |
4208 MessageLoop::current()->Run(); | 4238 MessageLoop::current()->Run(); |
4209 | 4239 |
4210 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); | 4240 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); |
4211 | 4241 |
4212 // Should be the same cached document. | 4242 // Should be the same cached document. |
4213 EXPECT_TRUE(r.was_cached()); | 4243 EXPECT_TRUE(r.was_cached()); |
4214 | 4244 |
| 4245 // Since there was a request that went over the wire, the load timing |
| 4246 // information should include connection times. |
4215 LoadTimingInfo load_timing_info; | 4247 LoadTimingInfo load_timing_info; |
4216 r.GetLoadTimingInfo(&load_timing_info); | 4248 r.GetLoadTimingInfo(&load_timing_info); |
4217 TestLoadTimingNoHttpConnection(load_timing_info); | 4249 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); |
4218 } | 4250 } |
4219 } | 4251 } |
4220 | 4252 |
4221 // In this test, we do a POST which the server will 302 redirect. | 4253 // In this test, we do a POST which the server will 302 redirect. |
4222 // The subsequent transaction should use GET, and should not send the | 4254 // The subsequent transaction should use GET, and should not send the |
4223 // Content-Type header. | 4255 // Content-Type header. |
4224 // http://code.google.com/p/chromium/issues/detail?id=843 | 4256 // http://code.google.com/p/chromium/issues/detail?id=843 |
4225 TEST_F(URLRequestTestHTTP, Post302RedirectGet) { | 4257 TEST_F(URLRequestTestHTTP, Post302RedirectGet) { |
4226 ASSERT_TRUE(test_server_.Start()); | 4258 ASSERT_TRUE(test_server_.Start()); |
4227 | 4259 |
(...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5569 EXPECT_EQ(test_server_.host_port_pair().host(), | 5601 EXPECT_EQ(test_server_.host_port_pair().host(), |
5570 r.GetSocketAddress().host()); | 5602 r.GetSocketAddress().host()); |
5571 EXPECT_EQ(test_server_.host_port_pair().port(), | 5603 EXPECT_EQ(test_server_.host_port_pair().port(), |
5572 r.GetSocketAddress().port()); | 5604 r.GetSocketAddress().port()); |
5573 EXPECT_EQ(1, d.response_started_count()); | 5605 EXPECT_EQ(1, d.response_started_count()); |
5574 EXPECT_FALSE(d.received_data_before_response()); | 5606 EXPECT_FALSE(d.received_data_before_response()); |
5575 EXPECT_EQ(d.bytes_received(), static_cast<int>(file_size)); | 5607 EXPECT_EQ(d.bytes_received(), static_cast<int>(file_size)); |
5576 | 5608 |
5577 LoadTimingInfo load_timing_info; | 5609 LoadTimingInfo load_timing_info; |
5578 r.GetLoadTimingInfo(&load_timing_info); | 5610 r.GetLoadTimingInfo(&load_timing_info); |
5579 TestLoadTimingNoHttpConnection(load_timing_info); | 5611 TestLoadTimingNoHttpResponse(load_timing_info); |
5580 } | 5612 } |
5581 } | 5613 } |
5582 | 5614 |
5583 // Flaky, see http://crbug.com/25045. | 5615 // Flaky, see http://crbug.com/25045. |
5584 TEST_F(URLRequestTestFTP, DISABLED_FTPCheckWrongPassword) { | 5616 TEST_F(URLRequestTestFTP, DISABLED_FTPCheckWrongPassword) { |
5585 ASSERT_TRUE(test_server_.Start()); | 5617 ASSERT_TRUE(test_server_.Start()); |
5586 | 5618 |
5587 base::FilePath app_path; | 5619 base::FilePath app_path; |
5588 PathService::Get(base::DIR_SOURCE_ROOT, &app_path); | 5620 PathService::Get(base::DIR_SOURCE_ROOT, &app_path); |
5589 app_path = app_path.AppendASCII("LICENSE"); | 5621 app_path = app_path.AppendASCII("LICENSE"); |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5806 | 5838 |
5807 EXPECT_FALSE(r.is_pending()); | 5839 EXPECT_FALSE(r.is_pending()); |
5808 EXPECT_EQ(1, d->response_started_count()); | 5840 EXPECT_EQ(1, d->response_started_count()); |
5809 EXPECT_FALSE(d->received_data_before_response()); | 5841 EXPECT_FALSE(d->received_data_before_response()); |
5810 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 5842 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
5811 } | 5843 } |
5812 } | 5844 } |
5813 #endif // !defined(DISABLE_FTP_SUPPORT) | 5845 #endif // !defined(DISABLE_FTP_SUPPORT) |
5814 | 5846 |
5815 } // namespace net | 5847 } // namespace net |
OLD | NEW |