Index: net/proxy/proxy_resolver_mojo.cc |
diff --git a/net/proxy/proxy_resolver_mojo.cc b/net/proxy/proxy_resolver_mojo.cc |
index c19b26d98e44016595048f3e93f7b307e27dd01e..ce8d3d098794a03973c0978ad3690c6babc4f05b 100644 |
--- a/net/proxy/proxy_resolver_mojo.cc |
+++ b/net/proxy/proxy_resolver_mojo.cc |
@@ -11,7 +11,6 @@ |
#include "mojo/common/url_type_converters.h" |
#include "net/base/net_errors.h" |
#include "net/dns/mojo_host_resolver_impl.h" |
-#include "net/proxy/mojo_proxy_resolver_factory.h" |
#include "net/proxy/mojo_proxy_type_converters.h" |
#include "net/proxy/proxy_info.h" |
#include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" |
@@ -111,11 +110,16 @@ void ProxyResolverMojo::Job::LoadStateChanged(int32_t load_state) { |
} |
ProxyResolverMojo::ProxyResolverMojo( |
- MojoProxyResolverFactory* mojo_proxy_resolver_factory, |
- HostResolver* host_resolver) |
+ interfaces::ProxyResolverPtr mojo_proxy_resolver, |
+ HostResolver* host_resolver, |
+ mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request, |
+ scoped_ptr<base::ScopedClosureRunner> runner) |
: ProxyResolver(true /* |expects_pac_bytes| */), |
- mojo_proxy_resolver_factory_(mojo_proxy_resolver_factory), |
- host_resolver_(host_resolver) { |
+ mojo_proxy_resolver_ptr_(mojo_proxy_resolver.Pass()), |
+ host_resolver_(host_resolver), |
+ host_resolver_binding_(&host_resolver_, host_resolver_request.Pass()), |
+ runner_(runner.Pass()) { |
+ mojo_proxy_resolver_ptr_.set_error_handler(this); |
} |
ProxyResolverMojo::~ProxyResolverMojo() { |
@@ -147,7 +151,7 @@ int ProxyResolverMojo::SetPacScript( |
pac_script, callback)); |
if (!mojo_proxy_resolver_ptr_) |
- SetUpServices(); |
+ return ERR_PAC_SCRIPT_TERMINATED; |
mojo_proxy_resolver_ptr_->SetPacScript( |
mojo::String::From(pac_script->utf16()), |
@@ -171,21 +175,6 @@ void ProxyResolverMojo::OnSetPacScriptDone( |
callback_copy.Run(result); |
} |
-void ProxyResolverMojo::SetUpServices() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- // A Mojo service implementation must outlive its binding. |
- mojo_host_resolver_binding_.reset(); |
- |
- interfaces::HostResolverPtr mojo_host_resolver_ptr; |
- mojo_host_resolver_.reset(new MojoHostResolverImpl(host_resolver_)); |
- mojo_host_resolver_binding_.reset(new mojo::Binding<interfaces::HostResolver>( |
- 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_proxy_resolver_ptr_.set_error_handler(this); |
-} |
- |
void ProxyResolverMojo::OnConnectionError() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DVLOG(1) << "ProxyResolverMojo::OnConnectionError"; |
@@ -215,14 +204,8 @@ int ProxyResolverMojo::GetProxyForURL(const GURL& url, |
const BoundNetLog& net_log) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- // If the Mojo service is not connected, fail. The Mojo service is connected |
- // when the script is set, which must be done after construction and after a |
- // previous request returns ERR_PAC_SCRIPT_TERMINATED due to the Mojo proxy |
- // resolver process crashing. |
- if (!mojo_proxy_resolver_ptr_) { |
- DVLOG(1) << "ProxyResolverMojo::GetProxyForURL: Mojo not connected"; |
+ if (!mojo_proxy_resolver_ptr_) |
return ERR_PAC_SCRIPT_TERMINATED; |
- } |
Job* job = new Job(this, url, results, callback); |
bool inserted = pending_jobs_.insert(job).second; |