OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/proxy/proxy_resolver_factory_mojo.h" | 5 #include "net/proxy/proxy_resolver_factory_mojo.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/logging.h" | 11 #include "base/logging.h" |
11 #include "base/macros.h" | 12 #include "base/macros.h" |
12 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
13 #include "base/threading/thread_checker.h" | 14 #include "base/threading/thread_checker.h" |
14 #include "base/values.h" | 15 #include "base/values.h" |
15 #include "mojo/common/common_type_converters.h" | 16 #include "mojo/common/common_type_converters.h" |
16 #include "mojo/common/url_type_converters.h" | 17 #include "mojo/common/url_type_converters.h" |
17 #include "mojo/public/cpp/bindings/binding.h" | 18 #include "mojo/public/cpp/bindings/binding.h" |
(...skipping 12 matching lines...) Expand all Loading... |
30 namespace net { | 31 namespace net { |
31 namespace { | 32 namespace { |
32 | 33 |
33 scoped_ptr<base::Value> NetLogErrorCallback( | 34 scoped_ptr<base::Value> NetLogErrorCallback( |
34 int line_number, | 35 int line_number, |
35 const base::string16* message, | 36 const base::string16* message, |
36 NetLogCaptureMode /* capture_mode */) { | 37 NetLogCaptureMode /* capture_mode */) { |
37 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 38 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
38 dict->SetInteger("line_number", line_number); | 39 dict->SetInteger("line_number", line_number); |
39 dict->SetString("message", *message); | 40 dict->SetString("message", *message); |
40 return dict.Pass(); | 41 return std::move(dict); |
41 } | 42 } |
42 | 43 |
43 // A mixin that forwards logging to (Bound)NetLog and ProxyResolverErrorObserver | 44 // A mixin that forwards logging to (Bound)NetLog and ProxyResolverErrorObserver |
44 // and DNS requests to a MojoHostResolverImpl, which is implemented in terms of | 45 // and DNS requests to a MojoHostResolverImpl, which is implemented in terms of |
45 // a HostResolver. | 46 // a HostResolver. |
46 template <typename ClientInterface> | 47 template <typename ClientInterface> |
47 class ClientMixin : public ClientInterface { | 48 class ClientMixin : public ClientInterface { |
48 public: | 49 public: |
49 ClientMixin(HostResolver* host_resolver, | 50 ClientMixin(HostResolver* host_resolver, |
50 ProxyResolverErrorObserver* error_observer, | 51 ProxyResolverErrorObserver* error_observer, |
(...skipping 18 matching lines...) Expand all Loading... |
69 auto callback = base::Bind(&NetLogErrorCallback, line_number, &message_str); | 70 auto callback = base::Bind(&NetLogErrorCallback, line_number, &message_str); |
70 bound_net_log_.AddEvent(NetLog::TYPE_PAC_JAVASCRIPT_ERROR, callback); | 71 bound_net_log_.AddEvent(NetLog::TYPE_PAC_JAVASCRIPT_ERROR, callback); |
71 if (net_log_) | 72 if (net_log_) |
72 net_log_->AddGlobalEntry(NetLog::TYPE_PAC_JAVASCRIPT_ERROR, callback); | 73 net_log_->AddGlobalEntry(NetLog::TYPE_PAC_JAVASCRIPT_ERROR, callback); |
73 if (error_observer_) | 74 if (error_observer_) |
74 error_observer_->OnPACScriptError(line_number, message_str); | 75 error_observer_->OnPACScriptError(line_number, message_str); |
75 } | 76 } |
76 | 77 |
77 void ResolveDns(interfaces::HostResolverRequestInfoPtr request_info, | 78 void ResolveDns(interfaces::HostResolverRequestInfoPtr request_info, |
78 interfaces::HostResolverRequestClientPtr client) override { | 79 interfaces::HostResolverRequestClientPtr client) override { |
79 host_resolver_.Resolve(request_info.Pass(), client.Pass()); | 80 host_resolver_.Resolve(std::move(request_info), std::move(client)); |
80 } | 81 } |
81 | 82 |
82 protected: | 83 protected: |
83 bool dns_request_in_progress() { | 84 bool dns_request_in_progress() { |
84 return host_resolver_.request_in_progress(); | 85 return host_resolver_.request_in_progress(); |
85 } | 86 } |
86 | 87 |
87 private: | 88 private: |
88 MojoHostResolverImpl host_resolver_; | 89 MojoHostResolverImpl host_resolver_; |
89 ProxyResolverErrorObserver* const error_observer_; | 90 ProxyResolverErrorObserver* const error_observer_; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 resolver_(resolver), | 196 resolver_(resolver), |
196 url_(url), | 197 url_(url), |
197 results_(results), | 198 results_(results), |
198 callback_(callback), | 199 callback_(callback), |
199 binding_(this) { | 200 binding_(this) { |
200 interfaces::ProxyResolverRequestClientPtr client_ptr; | 201 interfaces::ProxyResolverRequestClientPtr client_ptr; |
201 binding_.Bind(mojo::GetProxy(&client_ptr)); | 202 binding_.Bind(mojo::GetProxy(&client_ptr)); |
202 binding_.set_connection_error_handler(base::Bind( | 203 binding_.set_connection_error_handler(base::Bind( |
203 &ProxyResolverMojo::Job::OnConnectionError, base::Unretained(this))); | 204 &ProxyResolverMojo::Job::OnConnectionError, base::Unretained(this))); |
204 resolver_->mojo_proxy_resolver_ptr_->GetProxyForUrl(mojo::String::From(url_), | 205 resolver_->mojo_proxy_resolver_ptr_->GetProxyForUrl(mojo::String::From(url_), |
205 client_ptr.Pass()); | 206 std::move(client_ptr)); |
206 } | 207 } |
207 | 208 |
208 ProxyResolverMojo::Job::~Job() { | 209 ProxyResolverMojo::Job::~Job() { |
209 DCHECK(thread_checker_.CalledOnValidThread()); | 210 DCHECK(thread_checker_.CalledOnValidThread()); |
210 if (!callback_.is_null()) | 211 if (!callback_.is_null()) |
211 callback_.Run(ERR_PAC_SCRIPT_TERMINATED); | 212 callback_.Run(ERR_PAC_SCRIPT_TERMINATED); |
212 } | 213 } |
213 | 214 |
214 void ProxyResolverMojo::Job::Cancel() { | 215 void ProxyResolverMojo::Job::Cancel() { |
215 DCHECK(thread_checker_.CalledOnValidThread()); | 216 DCHECK(thread_checker_.CalledOnValidThread()); |
(...skipping 28 matching lines...) Expand all Loading... |
244 resolver_->RemoveJob(this); | 245 resolver_->RemoveJob(this); |
245 callback.Run(error); | 246 callback.Run(error); |
246 } | 247 } |
247 | 248 |
248 ProxyResolverMojo::ProxyResolverMojo( | 249 ProxyResolverMojo::ProxyResolverMojo( |
249 interfaces::ProxyResolverPtr resolver_ptr, | 250 interfaces::ProxyResolverPtr resolver_ptr, |
250 HostResolver* host_resolver, | 251 HostResolver* host_resolver, |
251 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner, | 252 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner, |
252 scoped_ptr<ProxyResolverErrorObserver> error_observer, | 253 scoped_ptr<ProxyResolverErrorObserver> error_observer, |
253 NetLog* net_log) | 254 NetLog* net_log) |
254 : mojo_proxy_resolver_ptr_(resolver_ptr.Pass()), | 255 : mojo_proxy_resolver_ptr_(std::move(resolver_ptr)), |
255 host_resolver_(host_resolver), | 256 host_resolver_(host_resolver), |
256 error_observer_(error_observer.Pass()), | 257 error_observer_(std::move(error_observer)), |
257 net_log_(net_log), | 258 net_log_(net_log), |
258 on_delete_callback_runner_(on_delete_callback_runner.Pass()) { | 259 on_delete_callback_runner_(std::move(on_delete_callback_runner)) { |
259 mojo_proxy_resolver_ptr_.set_connection_error_handler(base::Bind( | 260 mojo_proxy_resolver_ptr_.set_connection_error_handler(base::Bind( |
260 &ProxyResolverMojo::OnConnectionError, base::Unretained(this))); | 261 &ProxyResolverMojo::OnConnectionError, base::Unretained(this))); |
261 } | 262 } |
262 | 263 |
263 ProxyResolverMojo::~ProxyResolverMojo() { | 264 ProxyResolverMojo::~ProxyResolverMojo() { |
264 DCHECK(thread_checker_.CalledOnValidThread()); | 265 DCHECK(thread_checker_.CalledOnValidThread()); |
265 // All pending requests should have been cancelled. | 266 // All pending requests should have been cancelled. |
266 DCHECK(pending_jobs_.empty()); | 267 DCHECK(pending_jobs_.empty()); |
267 } | 268 } |
268 | 269 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 scoped_ptr<ProxyResolverErrorObserver> error_observer) | 332 scoped_ptr<ProxyResolverErrorObserver> error_observer) |
332 : ClientMixin<interfaces::ProxyResolverFactoryRequestClient>( | 333 : ClientMixin<interfaces::ProxyResolverFactoryRequestClient>( |
333 factory->host_resolver_, | 334 factory->host_resolver_, |
334 error_observer.get(), | 335 error_observer.get(), |
335 factory->net_log_, | 336 factory->net_log_, |
336 BoundNetLog()), | 337 BoundNetLog()), |
337 factory_(factory), | 338 factory_(factory), |
338 resolver_(resolver), | 339 resolver_(resolver), |
339 callback_(callback), | 340 callback_(callback), |
340 binding_(this), | 341 binding_(this), |
341 error_observer_(error_observer.Pass()) { | 342 error_observer_(std::move(error_observer)) { |
342 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; | 343 interfaces::ProxyResolverFactoryRequestClientPtr client_ptr; |
343 binding_.Bind(mojo::GetProxy(&client_ptr)); | 344 binding_.Bind(mojo::GetProxy(&client_ptr)); |
344 on_delete_callback_runner_ = factory_->mojo_proxy_factory_->CreateResolver( | 345 on_delete_callback_runner_ = factory_->mojo_proxy_factory_->CreateResolver( |
345 mojo::String::From(pac_script->utf16()), mojo::GetProxy(&resolver_ptr_), | 346 mojo::String::From(pac_script->utf16()), mojo::GetProxy(&resolver_ptr_), |
346 client_ptr.Pass()); | 347 std::move(client_ptr)); |
347 resolver_ptr_.set_connection_error_handler( | 348 resolver_ptr_.set_connection_error_handler( |
348 base::Bind(&ProxyResolverFactoryMojo::Job::OnConnectionError, | 349 base::Bind(&ProxyResolverFactoryMojo::Job::OnConnectionError, |
349 base::Unretained(this))); | 350 base::Unretained(this))); |
350 binding_.set_connection_error_handler( | 351 binding_.set_connection_error_handler( |
351 base::Bind(&ProxyResolverFactoryMojo::Job::OnConnectionError, | 352 base::Bind(&ProxyResolverFactoryMojo::Job::OnConnectionError, |
352 base::Unretained(this))); | 353 base::Unretained(this))); |
353 } | 354 } |
354 | 355 |
355 void OnConnectionError() { ReportResult(ERR_PAC_SCRIPT_TERMINATED); } | 356 void OnConnectionError() { ReportResult(ERR_PAC_SCRIPT_TERMINATED); } |
356 | 357 |
357 private: | 358 private: |
358 void ReportResult(int32_t error) override { | 359 void ReportResult(int32_t error) override { |
359 resolver_ptr_.set_connection_error_handler(mojo::Closure()); | 360 resolver_ptr_.set_connection_error_handler(mojo::Closure()); |
360 binding_.set_connection_error_handler(mojo::Closure()); | 361 binding_.set_connection_error_handler(mojo::Closure()); |
361 if (error == OK) { | 362 if (error == OK) { |
362 resolver_->reset( | 363 resolver_->reset(new ProxyResolverMojo( |
363 new ProxyResolverMojo(resolver_ptr_.Pass(), factory_->host_resolver_, | 364 std::move(resolver_ptr_), factory_->host_resolver_, |
364 on_delete_callback_runner_.Pass(), | 365 std::move(on_delete_callback_runner_), std::move(error_observer_), |
365 error_observer_.Pass(), factory_->net_log_)); | 366 factory_->net_log_)); |
366 } | 367 } |
367 on_delete_callback_runner_.reset(); | 368 on_delete_callback_runner_.reset(); |
368 callback_.Run(error); | 369 callback_.Run(error); |
369 } | 370 } |
370 | 371 |
371 ProxyResolverFactoryMojo* const factory_; | 372 ProxyResolverFactoryMojo* const factory_; |
372 scoped_ptr<ProxyResolver>* resolver_; | 373 scoped_ptr<ProxyResolver>* resolver_; |
373 const CompletionCallback callback_; | 374 const CompletionCallback callback_; |
374 interfaces::ProxyResolverPtr resolver_ptr_; | 375 interfaces::ProxyResolverPtr resolver_ptr_; |
375 mojo::Binding<interfaces::ProxyResolverFactoryRequestClient> binding_; | 376 mojo::Binding<interfaces::ProxyResolverFactoryRequestClient> binding_; |
(...skipping 28 matching lines...) Expand all Loading... |
404 return ERR_PAC_SCRIPT_FAILED; | 405 return ERR_PAC_SCRIPT_FAILED; |
405 } | 406 } |
406 request->reset(new Job(this, pac_script, resolver, callback, | 407 request->reset(new Job(this, pac_script, resolver, callback, |
407 error_observer_factory_.is_null() | 408 error_observer_factory_.is_null() |
408 ? nullptr | 409 ? nullptr |
409 : error_observer_factory_.Run())); | 410 : error_observer_factory_.Run())); |
410 return ERR_IO_PENDING; | 411 return ERR_IO_PENDING; |
411 } | 412 } |
412 | 413 |
413 } // namespace net | 414 } // namespace net |
OLD | NEW |