Chromium Code Reviews| Index: net/proxy/proxy_resolver_factory_mojo.cc |
| diff --git a/net/proxy/proxy_resolver_factory_mojo.cc b/net/proxy/proxy_resolver_factory_mojo.cc |
| index 32c1203e19b0dade14ed4cdb1318ab7ed4d832b5..6e8376518187bd3762c3abac75b7ae9033585d77 100644 |
| --- a/net/proxy/proxy_resolver_factory_mojo.cc |
| +++ b/net/proxy/proxy_resolver_factory_mojo.cc |
| @@ -116,13 +116,13 @@ class ProxyResolverMojo : public ProxyResolver { |
| int GetProxyForURL(const GURL& url, |
| ProxyInfo* results, |
| const net::CompletionCallback& callback, |
| - RequestHandle* request, |
| + scoped_ptr<Request>* request, |
| const BoundNetLog& net_log) override; |
| - void CancelRequest(RequestHandle request) override; |
| - LoadState GetLoadState(RequestHandle request) const override; |
| + base::ThreadChecker thread_checker_; // TODO this should be private |
|
eroman
2015/11/24 01:20:59
why not make it private here?
|
| private: |
| class Job; |
| + class RequestImpl; |
| // Mojo error handler. |
| void OnConnectionError(); |
| @@ -140,13 +140,25 @@ class ProxyResolverMojo : public ProxyResolver { |
| std::set<Job*> pending_jobs_; |
| - base::ThreadChecker thread_checker_; |
| scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner_; |
| DISALLOW_COPY_AND_ASSIGN(ProxyResolverMojo); |
| }; |
| +class ProxyResolverMojo::RequestImpl : public ProxyResolver::Request { |
| + public: |
| + RequestImpl(Job* job, ProxyResolverMojo* resolver); |
| + |
| + ~RequestImpl() override; |
| + |
| + LoadState GetLoadState() override; |
| + |
| + private: |
| + Job* job_; |
| + ProxyResolverMojo* resolver_; |
| +}; |
| + |
| class ProxyResolverMojo::Job |
| : public ClientMixin<interfaces::ProxyResolverRequestClient> { |
| public: |
| @@ -181,6 +193,22 @@ class ProxyResolverMojo::Job |
| mojo::Binding<interfaces::ProxyResolverRequestClient> binding_; |
| }; |
| +ProxyResolverMojo::RequestImpl::RequestImpl(Job* job, |
| + ProxyResolverMojo* resolver) |
| + : job_(job), resolver_(resolver) {} |
| + |
| +ProxyResolverMojo::RequestImpl::~RequestImpl() { |
| + DCHECK(resolver_->thread_checker_.CalledOnValidThread()); |
| + DCHECK(job_); |
| + job_->Cancel(); |
|
eroman
2015/11/24 01:20:59
Same issue on ownership -- Can't job_ already be d
|
| + resolver_->RemoveJob(job_); |
| +} |
| + |
| +LoadState ProxyResolverMojo::RequestImpl::GetLoadState() { |
| + CHECK_EQ(1u, resolver_->pending_jobs_.count(job_)); |
| + return job_->GetLoadState(); |
| +} |
| + |
| ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver, |
| const GURL& url, |
| ProxyInfo* results, |
| @@ -284,7 +312,7 @@ void ProxyResolverMojo::RemoveJob(Job* job) { |
| int ProxyResolverMojo::GetProxyForURL(const GURL& url, |
| ProxyInfo* results, |
| const CompletionCallback& callback, |
| - RequestHandle* request, |
| + scoped_ptr<Request>* request, |
| const BoundNetLog& net_log) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -294,24 +322,12 @@ int ProxyResolverMojo::GetProxyForURL(const GURL& url, |
| Job* job = new Job(this, url, results, callback, net_log); |
| bool inserted = pending_jobs_.insert(job).second; |
| DCHECK(inserted); |
| - *request = job; |
| + request->reset(new RequestImpl(job, this)); |
| return ERR_IO_PENDING; |
| } |
| -void ProxyResolverMojo::CancelRequest(RequestHandle request) { |
| - DCHECK(thread_checker_.CalledOnValidThread()); |
| - Job* job = static_cast<Job*>(request); |
| - DCHECK(job); |
| - job->Cancel(); |
| - RemoveJob(job); |
| -} |
| -LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const { |
| - Job* job = static_cast<Job*>(request); |
| - CHECK_EQ(1u, pending_jobs_.count(job)); |
| - return job->GetLoadState(); |
| -} |
| } // namespace |