| Index: net/proxy/proxy_resolver_mojo.cc
|
| diff --git a/net/proxy/proxy_resolver_mojo.cc b/net/proxy/proxy_resolver_mojo.cc
|
| index 3801d41a093cb723ab7f21b87f3326ca48ed3f0a..ffa093cdb47772711686e51f5f53736d1476b75d 100644
|
| --- a/net/proxy/proxy_resolver_mojo.cc
|
| +++ b/net/proxy/proxy_resolver_mojo.cc
|
| @@ -14,6 +14,7 @@
|
| #include "net/proxy/mojo_proxy_resolver_factory.h"
|
| #include "net/proxy/mojo_proxy_type_converters.h"
|
| #include "net/proxy/proxy_info.h"
|
| +#include "net/proxy/proxy_resolver_error_observer.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
|
|
|
| @@ -54,6 +55,28 @@ class ProxyResolverMojo::Job : public interfaces::ProxyResolverRequestClient,
|
| mojo::Binding<interfaces::ProxyResolverRequestClient> binding_;
|
| };
|
|
|
| +class ProxyResolverMojo::ErrorObserverHolder
|
| + : public interfaces::ProxyResolverErrorObserver {
|
| + public:
|
| + ErrorObserverHolder(
|
| + scoped_ptr<net::ProxyResolverErrorObserver> error_observer);
|
| +
|
| + // Returns an interfaces::ProxyResolverErrorObserverPtr that can be used to
|
| + // report errors to the ProxyResolverErrorObserver passed when constructing
|
| + // |this|. The results of previous calls will no longer able to report errors
|
| + // when this is called.
|
| + interfaces::ProxyResolverErrorObserverPtr CreateHandle();
|
| +
|
| + void OnPacScriptError(int32_t line_number,
|
| + const mojo::String& error) override;
|
| +
|
| + private:
|
| + scoped_ptr<net::ProxyResolverErrorObserver> error_observer_;
|
| + mojo::Binding<interfaces::ProxyResolverErrorObserver> binding_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ErrorObserverHolder);
|
| +};
|
| +
|
| ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver,
|
| const GURL& url,
|
| ProxyInfo* results,
|
| @@ -111,10 +134,12 @@ void ProxyResolverMojo::Job::LoadStateChanged(int32_t load_state) {
|
|
|
| ProxyResolverMojo::ProxyResolverMojo(
|
| MojoProxyResolverFactory* mojo_proxy_resolver_factory,
|
| - HostResolver* host_resolver)
|
| + HostResolver* host_resolver,
|
| + scoped_ptr<ProxyResolverErrorObserver> error_observer)
|
| : ProxyResolver(true /* |expects_pac_bytes| */),
|
| mojo_proxy_resolver_factory_(mojo_proxy_resolver_factory),
|
| - host_resolver_(host_resolver) {
|
| + host_resolver_(host_resolver),
|
| + error_observer_(new ErrorObserverHolder(error_observer.Pass())) {
|
| }
|
|
|
| ProxyResolverMojo::~ProxyResolverMojo() {
|
| @@ -178,7 +203,8 @@ void ProxyResolverMojo::SetUpServices() {
|
| mojo_host_resolver_.get(), mojo::GetProxy(&mojo_host_resolver_ptr)));
|
| mojo_proxy_resolver_ptr_.reset();
|
| mojo_proxy_resolver_factory_->Create(
|
| - mojo::GetProxy(&mojo_proxy_resolver_ptr_), mojo_host_resolver_ptr.Pass());
|
| + mojo::GetProxy(&mojo_proxy_resolver_ptr_), mojo_host_resolver_ptr.Pass(),
|
| + error_observer_->CreateHandle());
|
| mojo_proxy_resolver_ptr_.set_error_handler(this);
|
| }
|
|
|
| @@ -261,4 +287,27 @@ LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const {
|
| return job->load_state();
|
| }
|
|
|
| +ProxyResolverMojo::ErrorObserverHolder::ErrorObserverHolder(
|
| + scoped_ptr<net::ProxyResolverErrorObserver> error_observer)
|
| + : error_observer_(error_observer.Pass()), binding_(this) {
|
| +}
|
| +
|
| +interfaces::ProxyResolverErrorObserverPtr
|
| +ProxyResolverMojo::ErrorObserverHolder::CreateHandle() {
|
| + interfaces::ProxyResolverErrorObserverPtr result;
|
| + if (error_observer_) {
|
| + if (binding_.is_bound())
|
| + binding_.Close();
|
| + binding_.Bind(mojo::GetProxy(&result));
|
| + }
|
| + return result.Pass();
|
| +}
|
| +
|
| +void ProxyResolverMojo::ErrorObserverHolder::OnPacScriptError(
|
| + int32_t line_number,
|
| + const mojo::String& error) {
|
| + DCHECK(error_observer_);
|
| + error_observer_->OnPACScriptError(line_number, error.To<base::string16>());
|
| +}
|
| +
|
| } // namespace net
|
|
|