OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/net/connection_tester.h" | 5 #include "chrome/browser/net/connection_tester.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
11 #include "base/threading/thread_restrictions.h" | 11 #include "base/threading/thread_restrictions.h" |
(...skipping 19 matching lines...) Expand all Loading... |
31 #include "net/url_request/url_request.h" | 31 #include "net/url_request/url_request.h" |
32 #include "net/url_request/url_request_context.h" | 32 #include "net/url_request/url_request_context.h" |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 // ExperimentURLRequestContext ------------------------------------------------ | 36 // ExperimentURLRequestContext ------------------------------------------------ |
37 | 37 |
38 // An instance of ExperimentURLRequestContext is created for each experiment | 38 // An instance of ExperimentURLRequestContext is created for each experiment |
39 // run by ConnectionTester. The class initializes network dependencies according | 39 // run by ConnectionTester. The class initializes network dependencies according |
40 // to the specified "experiment". | 40 // to the specified "experiment". |
41 class ExperimentURLRequestContext : public URLRequestContext { | 41 class ExperimentURLRequestContext : public net::URLRequestContext { |
42 public: | 42 public: |
43 explicit ExperimentURLRequestContext(URLRequestContext* proxy_request_context) | 43 explicit ExperimentURLRequestContext( |
| 44 net::URLRequestContext* proxy_request_context) |
44 : proxy_request_context_(proxy_request_context) {} | 45 : proxy_request_context_(proxy_request_context) {} |
45 | 46 |
46 int Init(const ConnectionTester::Experiment& experiment) { | 47 int Init(const ConnectionTester::Experiment& experiment) { |
47 int rv; | 48 int rv; |
48 | 49 |
49 // Create a custom HostResolver for this experiment. | 50 // Create a custom HostResolver for this experiment. |
50 rv = CreateHostResolver(experiment.host_resolver_experiment, | 51 rv = CreateHostResolver(experiment.host_resolver_experiment, |
51 &host_resolver_); | 52 &host_resolver_); |
52 if (rv != net::OK) | 53 if (rv != net::OK) |
53 return rv; // Failure. | 54 return rv; // Failure. |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 | 217 |
217 net::ProxyConfig config; | 218 net::ProxyConfig config; |
218 if (firefox_settings.ToProxyConfig(&config)) { | 219 if (firefox_settings.ToProxyConfig(&config)) { |
219 config_service->reset(new net::ProxyConfigServiceFixed(config)); | 220 config_service->reset(new net::ProxyConfigServiceFixed(config)); |
220 return net::OK; | 221 return net::OK; |
221 } | 222 } |
222 | 223 |
223 return net::ERR_FAILED; | 224 return net::ERR_FAILED; |
224 } | 225 } |
225 | 226 |
226 const scoped_refptr<URLRequestContext> proxy_request_context_; | 227 const scoped_refptr<net::URLRequestContext> proxy_request_context_; |
227 }; | 228 }; |
228 | 229 |
229 } // namespace | 230 } // namespace |
230 | 231 |
231 // ConnectionTester::TestRunner ---------------------------------------------- | 232 // ConnectionTester::TestRunner ---------------------------------------------- |
232 | 233 |
233 // TestRunner is a helper class for running an individual experiment. It can | 234 // TestRunner is a helper class for running an individual experiment. It can |
234 // be deleted any time after it is started, and this will abort the request. | 235 // be deleted any time after it is started, and this will abort the request. |
235 class ConnectionTester::TestRunner : public net::URLRequest::Delegate { | 236 class ConnectionTester::TestRunner : public net::URLRequest::Delegate { |
236 public: | 237 public: |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 net::URLRequest* request) { | 303 net::URLRequest* request) { |
303 int result = net::OK; | 304 int result = net::OK; |
304 if (!request->status().is_success()) { | 305 if (!request->status().is_success()) { |
305 DCHECK_NE(net::ERR_IO_PENDING, request->status().os_error()); | 306 DCHECK_NE(net::ERR_IO_PENDING, request->status().os_error()); |
306 result = request->status().os_error(); | 307 result = request->status().os_error(); |
307 } | 308 } |
308 tester_->OnExperimentCompleted(result); | 309 tester_->OnExperimentCompleted(result); |
309 } | 310 } |
310 | 311 |
311 void ConnectionTester::TestRunner::Run(const Experiment& experiment) { | 312 void ConnectionTester::TestRunner::Run(const Experiment& experiment) { |
312 // Try to create a URLRequestContext for this experiment. | 313 // Try to create a net::URLRequestContext for this experiment. |
313 scoped_refptr<ExperimentURLRequestContext> context( | 314 scoped_refptr<ExperimentURLRequestContext> context( |
314 new ExperimentURLRequestContext(tester_->proxy_request_context_)); | 315 new ExperimentURLRequestContext(tester_->proxy_request_context_)); |
315 int rv = context->Init(experiment); | 316 int rv = context->Init(experiment); |
316 if (rv != net::OK) { | 317 if (rv != net::OK) { |
317 // Complete the experiment with a failure. | 318 // Complete the experiment with a failure. |
318 tester_->OnExperimentCompleted(rv); | 319 tester_->OnExperimentCompleted(rv); |
319 return; | 320 return; |
320 } | 321 } |
321 | 322 |
322 // Fetch a request using the experimental context. | 323 // Fetch a request using the experimental context. |
323 request_.reset(new net::URLRequest(experiment.url, this)); | 324 request_.reset(new net::URLRequest(experiment.url, this)); |
324 request_->set_context(context); | 325 request_->set_context(context); |
325 request_->Start(); | 326 request_->Start(); |
326 } | 327 } |
327 | 328 |
328 // ConnectionTester ---------------------------------------------------------- | 329 // ConnectionTester ---------------------------------------------------------- |
329 | 330 |
330 ConnectionTester::ConnectionTester(Delegate* delegate, | 331 ConnectionTester::ConnectionTester( |
331 URLRequestContext* proxy_request_context) | 332 Delegate* delegate, |
| 333 net::URLRequestContext* proxy_request_context) |
332 : delegate_(delegate), proxy_request_context_(proxy_request_context) { | 334 : delegate_(delegate), proxy_request_context_(proxy_request_context) { |
333 DCHECK(delegate); | 335 DCHECK(delegate); |
334 DCHECK(proxy_request_context); | 336 DCHECK(proxy_request_context); |
335 } | 337 } |
336 | 338 |
337 ConnectionTester::~ConnectionTester() { | 339 ConnectionTester::~ConnectionTester() { |
338 // Cancellation happens automatically by deleting test_runner_. | 340 // Cancellation happens automatically by deleting test_runner_. |
339 } | 341 } |
340 | 342 |
341 void ConnectionTester::RunAllTests(const GURL& url) { | 343 void ConnectionTester::RunAllTests(const GURL& url) { |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 | 424 |
423 // Notify the delegate of completion. | 425 // Notify the delegate of completion. |
424 delegate_->OnCompletedConnectionTestExperiment(current, result); | 426 delegate_->OnCompletedConnectionTestExperiment(current, result); |
425 | 427 |
426 if (remaining_experiments_.empty()) { | 428 if (remaining_experiments_.empty()) { |
427 delegate_->OnCompletedConnectionTestSuite(); | 429 delegate_->OnCompletedConnectionTestSuite(); |
428 } else { | 430 } else { |
429 StartNextExperiment(); | 431 StartNextExperiment(); |
430 } | 432 } |
431 } | 433 } |
OLD | NEW |