Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Unified Diff: net/proxy/proxy_resolver_mojo.cc

Issue 1076083002: Shut down proxy resolver utility processes when no longer needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-service-with-factory-restart
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/proxy/proxy_resolver_mojo.h ('k') | net/proxy/proxy_resolver_mojo_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/proxy_resolver_mojo.cc
diff --git a/net/proxy/proxy_resolver_mojo.cc b/net/proxy/proxy_resolver_mojo.cc
index 6008a84a70e048b5431181197534fc23055d2cfd..c676827a90ae9d2e1d190599283e62445d6517b5 100644
--- a/net/proxy/proxy_resolver_mojo.cc
+++ b/net/proxy/proxy_resolver_mojo.cc
@@ -11,6 +11,7 @@
#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"
@@ -112,11 +113,13 @@ void ProxyResolverMojo::Job::LoadStateChanged(int32_t load_state) {
ProxyResolverMojo::ProxyResolverMojo(
interfaces::ProxyResolverPtr resolver_ptr,
scoped_ptr<interfaces::HostResolver> host_resolver,
- scoped_ptr<mojo::Binding<interfaces::HostResolver>> host_resolver_binding)
+ scoped_ptr<mojo::Binding<interfaces::HostResolver>> host_resolver_binding,
+ scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner)
: ProxyResolver(true),
mojo_proxy_resolver_ptr_(resolver_ptr.Pass()),
mojo_host_resolver_(host_resolver.Pass()),
- mojo_host_resolver_binding_(host_resolver_binding.Pass()) {
+ mojo_host_resolver_binding_(host_resolver_binding.Pass()),
+ on_delete_callback_runner_(on_delete_callback_runner.Pass()) {
mojo_proxy_resolver_ptr_.set_error_handler(this);
}
@@ -159,14 +162,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;
@@ -210,7 +207,7 @@ class ProxyResolverFactoryMojo::Job
interfaces::ProxyResolverFactoryRequestClientPtr client_ptr;
binding_.Bind(mojo::GetProxy(&client_ptr));
host_resolver_binding_->Bind(mojo::GetProxy(&host_resolver_ptr));
- factory_->mojo_proxy_factory_->CreateResolver(
+ on_delete_callback_runner_ = factory_->mojo_proxy_factory_->CreateResolver(
mojo::String::From(pac_script->utf16()), mojo::GetProxy(&resolver_ptr_),
host_resolver_ptr.Pass(), client_ptr.Pass());
resolver_ptr_.set_error_handler(this);
@@ -219,6 +216,7 @@ class ProxyResolverFactoryMojo::Job
void OnConnectionError() override {
callback_.Run(ERR_PAC_SCRIPT_TERMINATED);
+ on_delete_callback_runner_.reset();
}
private:
@@ -226,10 +224,11 @@ class ProxyResolverFactoryMojo::Job
resolver_ptr_.set_error_handler(nullptr);
binding_.set_error_handler(nullptr);
if (error == OK) {
- resolver_->reset(new ProxyResolverMojo(resolver_ptr_.Pass(),
- host_resolver_.Pass(),
- host_resolver_binding_.Pass()));
+ resolver_->reset(new ProxyResolverMojo(
+ resolver_ptr_.Pass(), host_resolver_.Pass(),
+ host_resolver_binding_.Pass(), on_delete_callback_runner_.Pass()));
}
+ on_delete_callback_runner_.reset();
callback_.Run(error);
}
@@ -240,16 +239,19 @@ class ProxyResolverFactoryMojo::Job
mojo::Binding<interfaces::ProxyResolverFactoryRequestClient> binding_;
scoped_ptr<interfaces::HostResolver> host_resolver_;
scoped_ptr<mojo::Binding<interfaces::HostResolver>> host_resolver_binding_;
+ scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner_;
};
ProxyResolverFactoryMojo::ProxyResolverFactoryMojo(
- interfaces::ProxyResolverFactory* mojo_proxy_factory,
+ MojoProxyResolverFactory* mojo_proxy_factory,
HostResolver* host_resolver)
: ProxyResolverFactory(true),
mojo_proxy_factory_(mojo_proxy_factory),
host_resolver_(host_resolver) {
}
+ProxyResolverFactoryMojo::~ProxyResolverFactoryMojo() = default;
+
int ProxyResolverFactoryMojo::CreateProxyResolver(
const scoped_refptr<ProxyResolverScriptData>& pac_script,
scoped_ptr<ProxyResolver>* resolver,
« no previous file with comments | « net/proxy/proxy_resolver_mojo.h ('k') | net/proxy/proxy_resolver_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698