| 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 |