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 "net/url_request/url_request_test_util.h" | 5 #include "net/url_request/url_request_test_util.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/threading/thread.h" | 10 #include "base/threading/thread.h" |
11 #include "base/threading/worker_pool.h" | 11 #include "base/threading/worker_pool.h" |
12 #include "net/base/cert_verifier.h" | 12 #include "net/base/cert_verifier.h" |
13 #include "net/base/default_server_bound_cert_store.h" | 13 #include "net/base/default_server_bound_cert_store.h" |
14 #include "net/base/host_port_pair.h" | 14 #include "net/base/host_port_pair.h" |
15 #include "net/base/mock_host_resolver.h" | 15 #include "net/base/mock_host_resolver.h" |
16 #include "net/base/server_bound_cert_service.h" | 16 #include "net/base/server_bound_cert_service.h" |
17 #include "net/http/http_network_session.h" | 17 #include "net/http/http_network_session.h" |
18 #include "net/http/http_server_properties_impl.h" | 18 #include "net/http/http_server_properties_impl.h" |
19 #include "net/url_request/static_http_user_agent_settings.h" | 19 #include "net/url_request/static_http_user_agent_settings.h" |
20 #include "net/url_request/url_request_job_factory_impl.h" | 20 #include "net/url_request/url_request_job_factory_impl.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
22 | 22 |
| 23 namespace net { |
| 24 |
23 namespace { | 25 namespace { |
24 | 26 |
25 // These constants put the net::NetworkDelegate events of TestNetworkDelegate | 27 // These constants put the NetworkDelegate events of TestNetworkDelegate |
26 // into an order. They are used in conjunction with | 28 // into an order. They are used in conjunction with |
27 // |TestNetworkDelegate::next_states_| to check that we do not send | 29 // |TestNetworkDelegate::next_states_| to check that we do not send |
28 // events in the wrong order. | 30 // events in the wrong order. |
29 const int kStageBeforeURLRequest = 1 << 0; | 31 const int kStageBeforeURLRequest = 1 << 0; |
30 const int kStageBeforeSendHeaders = 1 << 1; | 32 const int kStageBeforeSendHeaders = 1 << 1; |
31 const int kStageSendHeaders = 1 << 2; | 33 const int kStageSendHeaders = 1 << 2; |
32 const int kStageHeadersReceived = 1 << 3; | 34 const int kStageHeadersReceived = 1 << 3; |
33 const int kStageAuthRequired = 1 << 4; | 35 const int kStageAuthRequired = 1 << 4; |
34 const int kStageBeforeRedirect = 1 << 5; | 36 const int kStageBeforeRedirect = 1 << 5; |
35 const int kStageResponseStarted = 1 << 6; | 37 const int kStageResponseStarted = 1 << 6; |
(...skipping 20 matching lines...) Expand all Loading... |
56 TestURLRequestContext::~TestURLRequestContext() { | 58 TestURLRequestContext::~TestURLRequestContext() { |
57 DCHECK(initialized_); | 59 DCHECK(initialized_); |
58 } | 60 } |
59 | 61 |
60 void TestURLRequestContext::Init() { | 62 void TestURLRequestContext::Init() { |
61 DCHECK(!initialized_); | 63 DCHECK(!initialized_); |
62 initialized_ = true; | 64 initialized_ = true; |
63 | 65 |
64 if (!host_resolver()) | 66 if (!host_resolver()) |
65 context_storage_.set_host_resolver( | 67 context_storage_.set_host_resolver( |
66 scoped_ptr<net::HostResolver>(new net::MockCachingHostResolver())); | 68 scoped_ptr<HostResolver>(new MockCachingHostResolver())); |
67 if (!proxy_service()) | 69 if (!proxy_service()) |
68 context_storage_.set_proxy_service(net::ProxyService::CreateDirect()); | 70 context_storage_.set_proxy_service(ProxyService::CreateDirect()); |
69 if (!cert_verifier()) | 71 if (!cert_verifier()) |
70 context_storage_.set_cert_verifier(net::CertVerifier::CreateDefault()); | 72 context_storage_.set_cert_verifier(CertVerifier::CreateDefault()); |
71 if (!ftp_transaction_factory()) { | 73 if (!ftp_transaction_factory()) { |
72 #if !defined(DISABLE_FTP_SUPPORT) | 74 #if !defined(DISABLE_FTP_SUPPORT) |
73 context_storage_.set_ftp_transaction_factory( | 75 context_storage_.set_ftp_transaction_factory( |
74 new net::FtpNetworkLayer(host_resolver())); | 76 new FtpNetworkLayer(host_resolver())); |
75 #else | 77 #else |
76 context_storage_.set_ftp_transaction_factory(NULL); | 78 context_storage_.set_ftp_transaction_factory(NULL); |
77 #endif // !defined(DISABLE_FTP_SUPPORT) | 79 #endif // !defined(DISABLE_FTP_SUPPORT) |
78 } | 80 } |
79 if (!ssl_config_service()) | 81 if (!ssl_config_service()) |
80 context_storage_.set_ssl_config_service(new net::SSLConfigServiceDefaults); | 82 context_storage_.set_ssl_config_service(new SSLConfigServiceDefaults); |
81 if (!http_auth_handler_factory()) { | 83 if (!http_auth_handler_factory()) { |
82 context_storage_.set_http_auth_handler_factory( | 84 context_storage_.set_http_auth_handler_factory( |
83 net::HttpAuthHandlerFactory::CreateDefault(host_resolver())); | 85 HttpAuthHandlerFactory::CreateDefault(host_resolver())); |
84 } | 86 } |
85 if (!http_server_properties()) { | 87 if (!http_server_properties()) { |
86 context_storage_.set_http_server_properties( | 88 context_storage_.set_http_server_properties( |
87 new net::HttpServerPropertiesImpl); | 89 new HttpServerPropertiesImpl); |
88 } | 90 } |
89 if (!transport_security_state()) { | 91 if (!transport_security_state()) { |
90 context_storage_.set_transport_security_state( | 92 context_storage_.set_transport_security_state( |
91 new net::TransportSecurityState()); | 93 new TransportSecurityState()); |
92 } | 94 } |
93 net::HttpNetworkSession::Params params; | 95 HttpNetworkSession::Params params; |
94 params.host_resolver = host_resolver(); | 96 params.host_resolver = host_resolver(); |
95 params.cert_verifier = cert_verifier(); | 97 params.cert_verifier = cert_verifier(); |
96 params.proxy_service = proxy_service(); | 98 params.proxy_service = proxy_service(); |
97 params.ssl_config_service = ssl_config_service(); | 99 params.ssl_config_service = ssl_config_service(); |
98 params.http_auth_handler_factory = http_auth_handler_factory(); | 100 params.http_auth_handler_factory = http_auth_handler_factory(); |
99 params.network_delegate = network_delegate(); | 101 params.network_delegate = network_delegate(); |
100 params.http_server_properties = http_server_properties(); | 102 params.http_server_properties = http_server_properties(); |
101 | 103 |
102 if (!http_transaction_factory()) { | 104 if (!http_transaction_factory()) { |
103 context_storage_.set_http_transaction_factory(new net::HttpCache( | 105 context_storage_.set_http_transaction_factory(new HttpCache( |
104 new net::HttpNetworkSession(params), | 106 new HttpNetworkSession(params), |
105 net::HttpCache::DefaultBackend::InMemory(0))); | 107 HttpCache::DefaultBackend::InMemory(0))); |
106 } | 108 } |
107 // In-memory cookie store. | 109 // In-memory cookie store. |
108 if (!cookie_store()) | 110 if (!cookie_store()) |
109 context_storage_.set_cookie_store(new net::CookieMonster(NULL, NULL)); | 111 context_storage_.set_cookie_store(new CookieMonster(NULL, NULL)); |
110 // In-memory origin bound cert service. | 112 // In-memory origin bound cert service. |
111 if (!server_bound_cert_service()) { | 113 if (!server_bound_cert_service()) { |
112 context_storage_.set_server_bound_cert_service( | 114 context_storage_.set_server_bound_cert_service( |
113 new net::ServerBoundCertService( | 115 new ServerBoundCertService( |
114 new net::DefaultServerBoundCertStore(NULL), | 116 new DefaultServerBoundCertStore(NULL), |
115 base::WorkerPool::GetTaskRunner(true))); | 117 base::WorkerPool::GetTaskRunner(true))); |
116 } | 118 } |
117 if (!http_user_agent_settings()) { | 119 if (!http_user_agent_settings()) { |
118 context_storage_.set_http_user_agent_settings( | 120 context_storage_.set_http_user_agent_settings( |
119 new net::StaticHttpUserAgentSettings( | 121 new StaticHttpUserAgentSettings( |
120 "en-us,fr", "iso-8859-1,*,utf-8", EmptyString())); | 122 "en-us,fr", "iso-8859-1,*,utf-8", EmptyString())); |
121 } | 123 } |
122 if (!job_factory()) | 124 if (!job_factory()) |
123 context_storage_.set_job_factory(new net::URLRequestJobFactoryImpl); | 125 context_storage_.set_job_factory(new URLRequestJobFactoryImpl); |
124 } | 126 } |
125 | 127 |
126 TestURLRequest::TestURLRequest(const GURL& url, | 128 TestURLRequest::TestURLRequest(const GURL& url, |
127 Delegate* delegate, | 129 Delegate* delegate, |
128 TestURLRequestContext* context) | 130 TestURLRequestContext* context) |
129 : net::URLRequest(url, delegate, context) { | 131 : URLRequest(url, delegate, context) { |
130 } | 132 } |
131 | 133 |
132 TestURLRequest::~TestURLRequest() { | 134 TestURLRequest::~TestURLRequest() { |
133 } | 135 } |
134 | 136 |
135 TestURLRequestContextGetter::TestURLRequestContextGetter( | 137 TestURLRequestContextGetter::TestURLRequestContextGetter( |
136 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner) | 138 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner) |
137 : network_task_runner_(network_task_runner) { | 139 : network_task_runner_(network_task_runner) { |
138 DCHECK(network_task_runner_); | 140 DCHECK(network_task_runner_); |
139 } | 141 } |
(...skipping 27 matching lines...) Expand all Loading... |
167 quit_on_redirect_(false), | 169 quit_on_redirect_(false), |
168 allow_certificate_errors_(false), | 170 allow_certificate_errors_(false), |
169 response_started_count_(0), | 171 response_started_count_(0), |
170 received_bytes_count_(0), | 172 received_bytes_count_(0), |
171 received_redirect_count_(0), | 173 received_redirect_count_(0), |
172 received_data_before_response_(false), | 174 received_data_before_response_(false), |
173 request_failed_(false), | 175 request_failed_(false), |
174 have_certificate_errors_(false), | 176 have_certificate_errors_(false), |
175 certificate_errors_are_fatal_(false), | 177 certificate_errors_are_fatal_(false), |
176 auth_required_(false), | 178 auth_required_(false), |
177 buf_(new net::IOBuffer(kBufferSize)) { | 179 buf_(new IOBuffer(kBufferSize)) { |
178 } | 180 } |
179 | 181 |
180 TestDelegate::~TestDelegate() {} | 182 TestDelegate::~TestDelegate() {} |
181 | 183 |
182 void TestDelegate::OnReceivedRedirect(net::URLRequest* request, | 184 void TestDelegate::OnReceivedRedirect(URLRequest* request, |
183 const GURL& new_url, | 185 const GURL& new_url, |
184 bool* defer_redirect) { | 186 bool* defer_redirect) { |
185 EXPECT_TRUE(request->is_redirecting()); | 187 EXPECT_TRUE(request->is_redirecting()); |
186 received_redirect_count_++; | 188 received_redirect_count_++; |
187 if (quit_on_redirect_) { | 189 if (quit_on_redirect_) { |
188 *defer_redirect = true; | 190 *defer_redirect = true; |
189 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 191 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
190 } else if (cancel_in_rr_) { | 192 } else if (cancel_in_rr_) { |
191 request->Cancel(); | 193 request->Cancel(); |
192 } | 194 } |
193 } | 195 } |
194 | 196 |
195 void TestDelegate::OnAuthRequired(net::URLRequest* request, | 197 void TestDelegate::OnAuthRequired(URLRequest* request, |
196 net::AuthChallengeInfo* auth_info) { | 198 AuthChallengeInfo* auth_info) { |
197 auth_required_ = true; | 199 auth_required_ = true; |
198 if (!credentials_.Empty()) { | 200 if (!credentials_.Empty()) { |
199 request->SetAuth(credentials_); | 201 request->SetAuth(credentials_); |
200 } else { | 202 } else { |
201 request->CancelAuth(); | 203 request->CancelAuth(); |
202 } | 204 } |
203 } | 205 } |
204 | 206 |
205 void TestDelegate::OnSSLCertificateError(net::URLRequest* request, | 207 void TestDelegate::OnSSLCertificateError(URLRequest* request, |
206 const net::SSLInfo& ssl_info, | 208 const SSLInfo& ssl_info, |
207 bool fatal) { | 209 bool fatal) { |
208 // The caller can control whether it needs all SSL requests to go through, | 210 // The caller can control whether it needs all SSL requests to go through, |
209 // independent of any possible errors, or whether it wants SSL errors to | 211 // independent of any possible errors, or whether it wants SSL errors to |
210 // cancel the request. | 212 // cancel the request. |
211 have_certificate_errors_ = true; | 213 have_certificate_errors_ = true; |
212 certificate_errors_are_fatal_ = fatal; | 214 certificate_errors_are_fatal_ = fatal; |
213 if (allow_certificate_errors_) | 215 if (allow_certificate_errors_) |
214 request->ContinueDespiteLastError(); | 216 request->ContinueDespiteLastError(); |
215 else | 217 else |
216 request->Cancel(); | 218 request->Cancel(); |
217 } | 219 } |
218 | 220 |
219 void TestDelegate::OnResponseStarted(net::URLRequest* request) { | 221 void TestDelegate::OnResponseStarted(URLRequest* request) { |
220 // It doesn't make sense for the request to have IO pending at this point. | 222 // It doesn't make sense for the request to have IO pending at this point. |
221 DCHECK(!request->status().is_io_pending()); | 223 DCHECK(!request->status().is_io_pending()); |
222 EXPECT_FALSE(request->is_redirecting()); | 224 EXPECT_FALSE(request->is_redirecting()); |
223 | 225 |
224 response_started_count_++; | 226 response_started_count_++; |
225 if (cancel_in_rs_) { | 227 if (cancel_in_rs_) { |
226 request->Cancel(); | 228 request->Cancel(); |
227 OnResponseCompleted(request); | 229 OnResponseCompleted(request); |
228 } else if (!request->status().is_success()) { | 230 } else if (!request->status().is_success()) { |
229 DCHECK(request->status().status() == net::URLRequestStatus::FAILED || | 231 DCHECK(request->status().status() == URLRequestStatus::FAILED || |
230 request->status().status() == net::URLRequestStatus::CANCELED); | 232 request->status().status() == URLRequestStatus::CANCELED); |
231 request_failed_ = true; | 233 request_failed_ = true; |
232 OnResponseCompleted(request); | 234 OnResponseCompleted(request); |
233 } else { | 235 } else { |
234 // Initiate the first read. | 236 // Initiate the first read. |
235 int bytes_read = 0; | 237 int bytes_read = 0; |
236 if (request->Read(buf_, kBufferSize, &bytes_read)) | 238 if (request->Read(buf_, kBufferSize, &bytes_read)) |
237 OnReadCompleted(request, bytes_read); | 239 OnReadCompleted(request, bytes_read); |
238 else if (!request->status().is_io_pending()) | 240 else if (!request->status().is_io_pending()) |
239 OnResponseCompleted(request); | 241 OnResponseCompleted(request); |
240 } | 242 } |
241 } | 243 } |
242 | 244 |
243 void TestDelegate::OnReadCompleted(net::URLRequest* request, int bytes_read) { | 245 void TestDelegate::OnReadCompleted(URLRequest* request, int bytes_read) { |
244 // It doesn't make sense for the request to have IO pending at this point. | 246 // It doesn't make sense for the request to have IO pending at this point. |
245 DCHECK(!request->status().is_io_pending()); | 247 DCHECK(!request->status().is_io_pending()); |
246 | 248 |
247 if (response_started_count_ == 0) | 249 if (response_started_count_ == 0) |
248 received_data_before_response_ = true; | 250 received_data_before_response_ = true; |
249 | 251 |
250 if (cancel_in_rd_) | 252 if (cancel_in_rd_) |
251 request->Cancel(); | 253 request->Cancel(); |
252 | 254 |
253 if (bytes_read >= 0) { | 255 if (bytes_read >= 0) { |
(...skipping 15 matching lines...) Expand all Loading... |
269 break; | 271 break; |
270 } | 272 } |
271 } | 273 } |
272 } | 274 } |
273 if (!request->status().is_io_pending()) | 275 if (!request->status().is_io_pending()) |
274 OnResponseCompleted(request); | 276 OnResponseCompleted(request); |
275 else if (cancel_in_rd_pending_) | 277 else if (cancel_in_rd_pending_) |
276 request->Cancel(); | 278 request->Cancel(); |
277 } | 279 } |
278 | 280 |
279 void TestDelegate::OnResponseCompleted(net::URLRequest* request) { | 281 void TestDelegate::OnResponseCompleted(URLRequest* request) { |
280 if (quit_on_complete_) | 282 if (quit_on_complete_) |
281 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 283 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
282 } | 284 } |
283 | 285 |
284 TestNetworkDelegate::TestNetworkDelegate() | 286 TestNetworkDelegate::TestNetworkDelegate() |
285 : last_error_(0), | 287 : last_error_(0), |
286 error_count_(0), | 288 error_count_(0), |
287 created_requests_(0), | 289 created_requests_(0), |
288 destroyed_requests_(0), | 290 destroyed_requests_(0), |
289 completed_requests_(0), | 291 completed_requests_(0), |
(...skipping 12 matching lines...) Expand all Loading... |
302 } | 304 } |
303 | 305 |
304 void TestNetworkDelegate::InitRequestStatesIfNew(int request_id) { | 306 void TestNetworkDelegate::InitRequestStatesIfNew(int request_id) { |
305 if (next_states_.find(request_id) == next_states_.end()) { | 307 if (next_states_.find(request_id) == next_states_.end()) { |
306 next_states_[request_id] = kStageBeforeURLRequest; | 308 next_states_[request_id] = kStageBeforeURLRequest; |
307 event_order_[request_id] = ""; | 309 event_order_[request_id] = ""; |
308 } | 310 } |
309 } | 311 } |
310 | 312 |
311 int TestNetworkDelegate::OnBeforeURLRequest( | 313 int TestNetworkDelegate::OnBeforeURLRequest( |
312 net::URLRequest* request, | 314 URLRequest* request, |
313 const net::CompletionCallback& callback, | 315 const CompletionCallback& callback, |
314 GURL* new_url ) { | 316 GURL* new_url ) { |
315 int req_id = request->identifier(); | 317 int req_id = request->identifier(); |
316 InitRequestStatesIfNew(req_id); | 318 InitRequestStatesIfNew(req_id); |
317 event_order_[req_id] += "OnBeforeURLRequest\n"; | 319 event_order_[req_id] += "OnBeforeURLRequest\n"; |
318 EXPECT_TRUE(next_states_[req_id] & kStageBeforeURLRequest) << | 320 EXPECT_TRUE(next_states_[req_id] & kStageBeforeURLRequest) << |
319 event_order_[req_id]; | 321 event_order_[req_id]; |
320 next_states_[req_id] = | 322 next_states_[req_id] = |
321 kStageBeforeSendHeaders | | 323 kStageBeforeSendHeaders | |
322 kStageResponseStarted | // data: URLs do not trigger sending headers | 324 kStageResponseStarted | // data: URLs do not trigger sending headers |
323 kStageBeforeRedirect | // a delegate can trigger a redirection | 325 kStageBeforeRedirect | // a delegate can trigger a redirection |
324 kStageCompletedError | // request canceled by delegate | 326 kStageCompletedError | // request canceled by delegate |
325 kStageAuthRequired; // Auth can come next for FTP requests | 327 kStageAuthRequired; // Auth can come next for FTP requests |
326 created_requests_++; | 328 created_requests_++; |
327 return net::OK; | 329 return OK; |
328 } | 330 } |
329 | 331 |
330 int TestNetworkDelegate::OnBeforeSendHeaders( | 332 int TestNetworkDelegate::OnBeforeSendHeaders( |
331 net::URLRequest* request, | 333 URLRequest* request, |
332 const net::CompletionCallback& callback, | 334 const CompletionCallback& callback, |
333 net::HttpRequestHeaders* headers) { | 335 HttpRequestHeaders* headers) { |
334 int req_id = request->identifier(); | 336 int req_id = request->identifier(); |
335 InitRequestStatesIfNew(req_id); | 337 InitRequestStatesIfNew(req_id); |
336 event_order_[req_id] += "OnBeforeSendHeaders\n"; | 338 event_order_[req_id] += "OnBeforeSendHeaders\n"; |
337 EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) << | 339 EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) << |
338 event_order_[req_id]; | 340 event_order_[req_id]; |
339 next_states_[req_id] = | 341 next_states_[req_id] = |
340 kStageSendHeaders | | 342 kStageSendHeaders | |
341 kStageCompletedError; // request canceled by delegate | 343 kStageCompletedError; // request canceled by delegate |
342 | 344 |
343 return net::OK; | 345 return OK; |
344 } | 346 } |
345 | 347 |
346 void TestNetworkDelegate::OnSendHeaders( | 348 void TestNetworkDelegate::OnSendHeaders( |
347 net::URLRequest* request, | 349 URLRequest* request, |
348 const net::HttpRequestHeaders& headers) { | 350 const HttpRequestHeaders& headers) { |
349 int req_id = request->identifier(); | 351 int req_id = request->identifier(); |
350 InitRequestStatesIfNew(req_id); | 352 InitRequestStatesIfNew(req_id); |
351 event_order_[req_id] += "OnSendHeaders\n"; | 353 event_order_[req_id] += "OnSendHeaders\n"; |
352 EXPECT_TRUE(next_states_[req_id] & kStageSendHeaders) << | 354 EXPECT_TRUE(next_states_[req_id] & kStageSendHeaders) << |
353 event_order_[req_id]; | 355 event_order_[req_id]; |
354 next_states_[req_id] = | 356 next_states_[req_id] = |
355 kStageHeadersReceived | | 357 kStageHeadersReceived | |
356 kStageCompletedError; | 358 kStageCompletedError; |
357 } | 359 } |
358 | 360 |
359 int TestNetworkDelegate::OnHeadersReceived( | 361 int TestNetworkDelegate::OnHeadersReceived( |
360 net::URLRequest* request, | 362 URLRequest* request, |
361 const net::CompletionCallback& callback, | 363 const CompletionCallback& callback, |
362 const net::HttpResponseHeaders* original_response_headers, | 364 const HttpResponseHeaders* original_response_headers, |
363 scoped_refptr<net::HttpResponseHeaders>* override_response_headers) { | 365 scoped_refptr<HttpResponseHeaders>* override_response_headers) { |
364 int req_id = request->identifier(); | 366 int req_id = request->identifier(); |
365 event_order_[req_id] += "OnHeadersReceived\n"; | 367 event_order_[req_id] += "OnHeadersReceived\n"; |
366 InitRequestStatesIfNew(req_id); | 368 InitRequestStatesIfNew(req_id); |
367 EXPECT_TRUE(next_states_[req_id] & kStageHeadersReceived) << | 369 EXPECT_TRUE(next_states_[req_id] & kStageHeadersReceived) << |
368 event_order_[req_id]; | 370 event_order_[req_id]; |
369 next_states_[req_id] = | 371 next_states_[req_id] = |
370 kStageBeforeRedirect | | 372 kStageBeforeRedirect | |
371 kStageResponseStarted | | 373 kStageResponseStarted | |
372 kStageAuthRequired | | 374 kStageAuthRequired | |
373 kStageCompletedError; // e.g. proxy resolution problem | 375 kStageCompletedError; // e.g. proxy resolution problem |
374 | 376 |
375 // Basic authentication sends a second request from the URLRequestHttpJob | 377 // Basic authentication sends a second request from the URLRequestHttpJob |
376 // layer before the URLRequest reports that a response has started. | 378 // layer before the URLRequest reports that a response has started. |
377 next_states_[req_id] |= kStageBeforeSendHeaders; | 379 next_states_[req_id] |= kStageBeforeSendHeaders; |
378 | 380 |
379 return net::OK; | 381 return OK; |
380 } | 382 } |
381 | 383 |
382 void TestNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, | 384 void TestNetworkDelegate::OnBeforeRedirect(URLRequest* request, |
383 const GURL& new_location) { | 385 const GURL& new_location) { |
384 int req_id = request->identifier(); | 386 int req_id = request->identifier(); |
385 InitRequestStatesIfNew(req_id); | 387 InitRequestStatesIfNew(req_id); |
386 event_order_[req_id] += "OnBeforeRedirect\n"; | 388 event_order_[req_id] += "OnBeforeRedirect\n"; |
387 EXPECT_TRUE(next_states_[req_id] & kStageBeforeRedirect) << | 389 EXPECT_TRUE(next_states_[req_id] & kStageBeforeRedirect) << |
388 event_order_[req_id]; | 390 event_order_[req_id]; |
389 next_states_[req_id] = | 391 next_states_[req_id] = |
390 kStageBeforeURLRequest | // HTTP redirects trigger this. | 392 kStageBeforeURLRequest | // HTTP redirects trigger this. |
391 kStageBeforeSendHeaders | // Redirects from the network delegate do not | 393 kStageBeforeSendHeaders | // Redirects from the network delegate do not |
392 // trigger onBeforeURLRequest. | 394 // trigger onBeforeURLRequest. |
393 kStageCompletedError; | 395 kStageCompletedError; |
394 | 396 |
395 // A redirect can lead to a file or a data URL. In this case, we do not send | 397 // A redirect can lead to a file or a data URL. In this case, we do not send |
396 // headers. | 398 // headers. |
397 next_states_[req_id] |= kStageResponseStarted; | 399 next_states_[req_id] |= kStageResponseStarted; |
398 } | 400 } |
399 | 401 |
400 void TestNetworkDelegate::OnResponseStarted(net::URLRequest* request) { | 402 void TestNetworkDelegate::OnResponseStarted(URLRequest* request) { |
401 int req_id = request->identifier(); | 403 int req_id = request->identifier(); |
402 InitRequestStatesIfNew(req_id); | 404 InitRequestStatesIfNew(req_id); |
403 event_order_[req_id] += "OnResponseStarted\n"; | 405 event_order_[req_id] += "OnResponseStarted\n"; |
404 EXPECT_TRUE(next_states_[req_id] & kStageResponseStarted) << | 406 EXPECT_TRUE(next_states_[req_id] & kStageResponseStarted) << |
405 event_order_[req_id]; | 407 event_order_[req_id]; |
406 next_states_[req_id] = kStageCompletedSuccess | kStageCompletedError; | 408 next_states_[req_id] = kStageCompletedSuccess | kStageCompletedError; |
407 if (request->status().status() == net::URLRequestStatus::FAILED) { | 409 if (request->status().status() == URLRequestStatus::FAILED) { |
408 error_count_++; | 410 error_count_++; |
409 last_error_ = request->status().error(); | 411 last_error_ = request->status().error(); |
410 } | 412 } |
411 } | 413 } |
412 | 414 |
413 void TestNetworkDelegate::OnRawBytesRead(const net::URLRequest& request, | 415 void TestNetworkDelegate::OnRawBytesRead(const URLRequest& request, |
414 int bytes_read) { | 416 int bytes_read) { |
415 } | 417 } |
416 | 418 |
417 void TestNetworkDelegate::OnCompleted(net::URLRequest* request, bool started) { | 419 void TestNetworkDelegate::OnCompleted(URLRequest* request, bool started) { |
418 int req_id = request->identifier(); | 420 int req_id = request->identifier(); |
419 InitRequestStatesIfNew(req_id); | 421 InitRequestStatesIfNew(req_id); |
420 event_order_[req_id] += "OnCompleted\n"; | 422 event_order_[req_id] += "OnCompleted\n"; |
421 // Expect "Success -> (next_states_ & kStageCompletedSuccess)" | 423 // Expect "Success -> (next_states_ & kStageCompletedSuccess)" |
422 // is logically identical to | 424 // is logically identical to |
423 // Expect "!(Success) || (next_states_ & kStageCompletedSuccess)" | 425 // Expect "!(Success) || (next_states_ & kStageCompletedSuccess)" |
424 EXPECT_TRUE(!request->status().is_success() || | 426 EXPECT_TRUE(!request->status().is_success() || |
425 (next_states_[req_id] & kStageCompletedSuccess)) << | 427 (next_states_[req_id] & kStageCompletedSuccess)) << |
426 event_order_[req_id]; | 428 event_order_[req_id]; |
427 EXPECT_TRUE(request->status().is_success() || | 429 EXPECT_TRUE(request->status().is_success() || |
428 (next_states_[req_id] & kStageCompletedError)) << | 430 (next_states_[req_id] & kStageCompletedError)) << |
429 event_order_[req_id]; | 431 event_order_[req_id]; |
430 next_states_[req_id] = kStageURLRequestDestroyed; | 432 next_states_[req_id] = kStageURLRequestDestroyed; |
431 completed_requests_++; | 433 completed_requests_++; |
432 if (request->status().status() == net::URLRequestStatus::FAILED) { | 434 if (request->status().status() == URLRequestStatus::FAILED) { |
433 error_count_++; | 435 error_count_++; |
434 last_error_ = request->status().error(); | 436 last_error_ = request->status().error(); |
435 } | 437 } |
436 } | 438 } |
437 | 439 |
438 void TestNetworkDelegate::OnURLRequestDestroyed( | 440 void TestNetworkDelegate::OnURLRequestDestroyed(URLRequest* request) { |
439 net::URLRequest* request) { | |
440 int req_id = request->identifier(); | 441 int req_id = request->identifier(); |
441 InitRequestStatesIfNew(req_id); | 442 InitRequestStatesIfNew(req_id); |
442 event_order_[req_id] += "OnURLRequestDestroyed\n"; | 443 event_order_[req_id] += "OnURLRequestDestroyed\n"; |
443 EXPECT_TRUE(next_states_[req_id] & kStageURLRequestDestroyed) << | 444 EXPECT_TRUE(next_states_[req_id] & kStageURLRequestDestroyed) << |
444 event_order_[req_id]; | 445 event_order_[req_id]; |
445 next_states_[req_id] = kStageDestruction; | 446 next_states_[req_id] = kStageDestruction; |
446 destroyed_requests_++; | 447 destroyed_requests_++; |
447 } | 448 } |
448 | 449 |
449 void TestNetworkDelegate::OnPACScriptError(int line_number, | 450 void TestNetworkDelegate::OnPACScriptError(int line_number, |
450 const string16& error) { | 451 const string16& error) { |
451 } | 452 } |
452 | 453 |
453 net::NetworkDelegate::AuthRequiredResponse TestNetworkDelegate::OnAuthRequired( | 454 NetworkDelegate::AuthRequiredResponse TestNetworkDelegate::OnAuthRequired( |
454 net::URLRequest* request, | 455 URLRequest* request, |
455 const net::AuthChallengeInfo& auth_info, | 456 const AuthChallengeInfo& auth_info, |
456 const AuthCallback& callback, | 457 const AuthCallback& callback, |
457 net::AuthCredentials* credentials) { | 458 AuthCredentials* credentials) { |
458 int req_id = request->identifier(); | 459 int req_id = request->identifier(); |
459 InitRequestStatesIfNew(req_id); | 460 InitRequestStatesIfNew(req_id); |
460 event_order_[req_id] += "OnAuthRequired\n"; | 461 event_order_[req_id] += "OnAuthRequired\n"; |
461 EXPECT_TRUE(next_states_[req_id] & kStageAuthRequired) << | 462 EXPECT_TRUE(next_states_[req_id] & kStageAuthRequired) << |
462 event_order_[req_id]; | 463 event_order_[req_id]; |
463 next_states_[req_id] = kStageBeforeSendHeaders | | 464 next_states_[req_id] = kStageBeforeSendHeaders | |
464 kStageHeadersReceived | // Request canceled by delegate simulates empty | 465 kStageHeadersReceived | // Request canceled by delegate simulates empty |
465 // response. | 466 // response. |
466 kStageResponseStarted | // data: URLs do not trigger sending headers | 467 kStageResponseStarted | // data: URLs do not trigger sending headers |
467 kStageBeforeRedirect | // a delegate can trigger a redirection | 468 kStageBeforeRedirect | // a delegate can trigger a redirection |
468 kStageCompletedError; // request cancelled before callback | 469 kStageCompletedError; // request cancelled before callback |
469 return net::NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; | 470 return NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; |
470 } | 471 } |
471 | 472 |
472 bool TestNetworkDelegate::OnCanGetCookies(const net::URLRequest& request, | 473 bool TestNetworkDelegate::OnCanGetCookies(const URLRequest& request, |
473 const net::CookieList& cookie_list) { | 474 const CookieList& cookie_list) { |
474 bool allow = true; | 475 bool allow = true; |
475 if (cookie_options_bit_mask_ & NO_GET_COOKIES) | 476 if (cookie_options_bit_mask_ & NO_GET_COOKIES) |
476 allow = false; | 477 allow = false; |
477 | 478 |
478 if (!allow) { | 479 if (!allow) { |
479 blocked_get_cookies_count_++; | 480 blocked_get_cookies_count_++; |
480 } | 481 } |
481 | 482 |
482 return allow; | 483 return allow; |
483 } | 484 } |
484 | 485 |
485 bool TestNetworkDelegate::OnCanSetCookie(const net::URLRequest& request, | 486 bool TestNetworkDelegate::OnCanSetCookie(const URLRequest& request, |
486 const std::string& cookie_line, | 487 const std::string& cookie_line, |
487 net::CookieOptions* options) { | 488 CookieOptions* options) { |
488 bool allow = true; | 489 bool allow = true; |
489 if (cookie_options_bit_mask_ & NO_SET_COOKIE) | 490 if (cookie_options_bit_mask_ & NO_SET_COOKIE) |
490 allow = false; | 491 allow = false; |
491 | 492 |
492 if (!allow) { | 493 if (!allow) { |
493 blocked_set_cookie_count_++; | 494 blocked_set_cookie_count_++; |
494 } else { | 495 } else { |
495 set_cookie_count_++; | 496 set_cookie_count_++; |
496 } | 497 } |
497 | 498 |
498 return allow; | 499 return allow; |
499 } | 500 } |
500 | 501 |
501 bool TestNetworkDelegate::OnCanAccessFile(const net::URLRequest& request, | 502 bool TestNetworkDelegate::OnCanAccessFile(const URLRequest& request, |
502 const FilePath& path) const { | 503 const FilePath& path) const { |
503 return true; | 504 return true; |
504 } | 505 } |
505 | 506 |
506 bool TestNetworkDelegate::OnCanThrottleRequest( | 507 bool TestNetworkDelegate::OnCanThrottleRequest( |
507 const net::URLRequest& request) const { | 508 const URLRequest& request) const { |
508 return true; | 509 return true; |
509 } | 510 } |
510 | 511 |
511 int TestNetworkDelegate::OnBeforeSocketStreamConnect( | 512 int TestNetworkDelegate::OnBeforeSocketStreamConnect( |
512 net::SocketStream* socket, | 513 SocketStream* socket, |
513 const net::CompletionCallback& callback) { | 514 const CompletionCallback& callback) { |
514 return net::OK; | 515 return OK; |
515 } | 516 } |
516 | 517 |
517 void TestNetworkDelegate::OnRequestWaitStateChange( | 518 void TestNetworkDelegate::OnRequestWaitStateChange( |
518 const net::URLRequest& request, | 519 const URLRequest& request, |
519 RequestWaitState state) { | 520 RequestWaitState state) { |
520 } | 521 } |
521 | 522 |
522 // static | 523 // static |
523 std::string ScopedCustomUrlRequestTestHttpHost::value_("127.0.0.1"); | 524 std::string ScopedCustomUrlRequestTestHttpHost::value_("127.0.0.1"); |
524 | 525 |
525 ScopedCustomUrlRequestTestHttpHost::ScopedCustomUrlRequestTestHttpHost( | 526 ScopedCustomUrlRequestTestHttpHost::ScopedCustomUrlRequestTestHttpHost( |
526 const std::string& new_value) | 527 const std::string& new_value) |
527 : old_value_(value_), | 528 : old_value_(value_), |
528 new_value_(new_value) { | 529 new_value_(new_value) { |
529 value_ = new_value_; | 530 value_ = new_value_; |
530 } | 531 } |
531 | 532 |
532 ScopedCustomUrlRequestTestHttpHost::~ScopedCustomUrlRequestTestHttpHost() { | 533 ScopedCustomUrlRequestTestHttpHost::~ScopedCustomUrlRequestTestHttpHost() { |
533 DCHECK_EQ(value_, new_value_); | 534 DCHECK_EQ(value_, new_value_); |
534 value_ = old_value_; | 535 value_ = old_value_; |
535 } | 536 } |
536 | 537 |
537 // static | 538 // static |
538 const std::string& ScopedCustomUrlRequestTestHttpHost::value() { | 539 const std::string& ScopedCustomUrlRequestTestHttpHost::value() { |
539 return value_; | 540 return value_; |
540 } | 541 } |
541 | 542 |
542 TestJobInterceptor::TestJobInterceptor() : main_intercept_job_(NULL) { | 543 TestJobInterceptor::TestJobInterceptor() : main_intercept_job_(NULL) { |
543 } | 544 } |
544 | 545 |
545 net::URLRequestJob* TestJobInterceptor::MaybeIntercept( | 546 URLRequestJob* TestJobInterceptor::MaybeIntercept( |
546 net::URLRequest* request, | 547 URLRequest* request, |
547 net::NetworkDelegate* network_delegate) const { | 548 NetworkDelegate* network_delegate) const { |
548 net::URLRequestJob* job = main_intercept_job_; | 549 URLRequestJob* job = main_intercept_job_; |
549 main_intercept_job_ = NULL; | 550 main_intercept_job_ = NULL; |
550 return job; | 551 return job; |
551 } | 552 } |
552 | 553 |
553 net::URLRequestJob* TestJobInterceptor::MaybeInterceptRedirect( | 554 URLRequestJob* TestJobInterceptor::MaybeInterceptRedirect( |
554 const GURL& location, | 555 const GURL& location, |
555 net::URLRequest* request, | 556 URLRequest* request, |
556 net::NetworkDelegate* network_delegate) const { | 557 NetworkDelegate* network_delegate) const { |
557 return NULL; | 558 return NULL; |
558 } | 559 } |
559 | 560 |
560 net::URLRequestJob* TestJobInterceptor::MaybeInterceptResponse( | 561 URLRequestJob* TestJobInterceptor::MaybeInterceptResponse( |
561 net::URLRequest* request, | 562 URLRequest* request, |
562 net::NetworkDelegate* network_delegate) const { | 563 NetworkDelegate* network_delegate) const { |
563 return NULL; | 564 return NULL; |
564 } | 565 } |
565 | 566 |
566 void TestJobInterceptor::set_main_intercept_job(net::URLRequestJob* job) { | 567 void TestJobInterceptor::set_main_intercept_job(URLRequestJob* job) { |
567 main_intercept_job_ = job; | 568 main_intercept_job_ = job; |
568 } | 569 } |
| 570 |
| 571 } // namespace net |
OLD | NEW |