| Index: net/proxy/mojo_proxy_resolver_impl.cc
|
| diff --git a/net/proxy/mojo_proxy_resolver_impl.cc b/net/proxy/mojo_proxy_resolver_impl.cc
|
| index f59cb1e9eed8c867bdc2a466f7d918ab7af6d404..8d93fc6e26860b3ae84a9021f5475757508919f9 100644
|
| --- a/net/proxy/mojo_proxy_resolver_impl.cc
|
| +++ b/net/proxy/mojo_proxy_resolver_impl.cc
|
| @@ -10,7 +10,6 @@
|
| #include "net/base/net_log.h"
|
| #include "net/proxy/mojo_proxy_type_converters.h"
|
| #include "net/proxy/proxy_info.h"
|
| -#include "net/proxy/proxy_resolver.h"
|
| #include "net/proxy/proxy_resolver_script_data.h"
|
|
|
| namespace net {
|
| @@ -24,6 +23,11 @@ class MojoProxyResolverImpl::Job : public mojo::ErrorHandler {
|
|
|
| void Start();
|
|
|
| + // Invoked when the LoadState for this job changes.
|
| + void LoadStateChanged(LoadState load_state);
|
| +
|
| + net::ProxyResolver::RequestHandle request_handle() { return request_handle_; }
|
| +
|
| private:
|
| // mojo::ErrorHandler override.
|
| // This is invoked in response to the client disconnecting, indicating
|
| @@ -38,6 +42,7 @@ class MojoProxyResolverImpl::Job : public mojo::ErrorHandler {
|
| ProxyInfo result_;
|
| GURL url_;
|
| net::ProxyResolver::RequestHandle request_handle_;
|
| + bool done_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(Job);
|
| };
|
| @@ -54,6 +59,14 @@ MojoProxyResolverImpl::~MojoProxyResolverImpl() {
|
| STLDeleteElements(&resolve_jobs_);
|
| }
|
|
|
| +void MojoProxyResolverImpl::LoadStateChanged(
|
| + net::ProxyResolver::RequestHandle handle,
|
| + LoadState load_state) {
|
| + auto it = request_handle_to_job_.find(handle);
|
| + DCHECK(it != request_handle_to_job_.end());
|
| + it->second->LoadStateChanged(load_state);
|
| +}
|
| +
|
| void MojoProxyResolverImpl::SetPacScript(
|
| const mojo::String& data,
|
| const mojo::Callback<void(int32_t)>& callback) {
|
| @@ -75,6 +88,9 @@ void MojoProxyResolverImpl::GetProxyForUrl(
|
| }
|
|
|
| void MojoProxyResolverImpl::DeleteJob(Job* job) {
|
| + if (job->request_handle())
|
| + request_handle_to_job_.erase(job->request_handle());
|
| +
|
| size_t num_erased = resolve_jobs_.erase(job);
|
| DCHECK(num_erased);
|
| delete job;
|
| @@ -106,11 +122,12 @@ MojoProxyResolverImpl::Job::Job(
|
| : resolver_(resolver),
|
| client_(client.Pass()),
|
| url_(url),
|
| - request_handle_(nullptr) {
|
| + request_handle_(nullptr),
|
| + done_(false) {
|
| }
|
|
|
| MojoProxyResolverImpl::Job::~Job() {
|
| - if (request_handle_)
|
| + if (request_handle_ && !done_)
|
| resolver_->resolver_->CancelRequest(request_handle_);
|
| }
|
|
|
| @@ -123,10 +140,16 @@ void MojoProxyResolverImpl::Job::Start() {
|
| return;
|
| }
|
| client_.set_error_handler(this);
|
| + resolver_->request_handle_to_job_.insert(
|
| + std::make_pair(request_handle_, this));
|
| +}
|
| +
|
| +void MojoProxyResolverImpl::Job::LoadStateChanged(LoadState load_state) {
|
| + client_->LoadStateChanged(load_state);
|
| }
|
|
|
| void MojoProxyResolverImpl::Job::GetProxyDone(int error) {
|
| - request_handle_ = nullptr;
|
| + done_ = true;
|
| DVLOG(1) << "GetProxyForUrl(" << url_ << ") finished with error " << error
|
| << ". " << result_.proxy_list().size() << " Proxies returned:";
|
| for (const auto& proxy : result_.proxy_list().GetAll()) {
|
|
|