Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/proxy/proxy_resolver_factory_mojo.h" | 5 #include "net/proxy/proxy_resolver_factory_mojo.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 109 HostResolver* host_resolver, | 109 HostResolver* host_resolver, |
| 110 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner, | 110 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner, |
| 111 scoped_ptr<ProxyResolverErrorObserver> error_observer, | 111 scoped_ptr<ProxyResolverErrorObserver> error_observer, |
| 112 NetLog* net_log); | 112 NetLog* net_log); |
| 113 ~ProxyResolverMojo() override; | 113 ~ProxyResolverMojo() override; |
| 114 | 114 |
| 115 // ProxyResolver implementation: | 115 // ProxyResolver implementation: |
| 116 int GetProxyForURL(const GURL& url, | 116 int GetProxyForURL(const GURL& url, |
| 117 ProxyInfo* results, | 117 ProxyInfo* results, |
| 118 const net::CompletionCallback& callback, | 118 const net::CompletionCallback& callback, |
| 119 RequestHandle* request, | 119 scoped_ptr<Request>* request, |
| 120 const BoundNetLog& net_log) override; | 120 const BoundNetLog& net_log) override; |
| 121 void CancelRequest(RequestHandle request) override; | 121 base::ThreadChecker thread_checker_; // TODO this should be private |
|
eroman
2015/11/24 01:20:59
why not make it private here?
| |
| 122 LoadState GetLoadState(RequestHandle request) const override; | |
| 123 | 122 |
| 124 private: | 123 private: |
| 125 class Job; | 124 class Job; |
| 125 class RequestImpl; | |
| 126 | 126 |
| 127 // Mojo error handler. | 127 // Mojo error handler. |
| 128 void OnConnectionError(); | 128 void OnConnectionError(); |
| 129 | 129 |
| 130 void RemoveJob(Job* job); | 130 void RemoveJob(Job* job); |
| 131 | 131 |
| 132 // Connection to the Mojo proxy resolver. | 132 // Connection to the Mojo proxy resolver. |
| 133 interfaces::ProxyResolverPtr mojo_proxy_resolver_ptr_; | 133 interfaces::ProxyResolverPtr mojo_proxy_resolver_ptr_; |
| 134 | 134 |
| 135 HostResolver* host_resolver_; | 135 HostResolver* host_resolver_; |
| 136 | 136 |
| 137 scoped_ptr<ProxyResolverErrorObserver> error_observer_; | 137 scoped_ptr<ProxyResolverErrorObserver> error_observer_; |
| 138 | 138 |
| 139 NetLog* net_log_; | 139 NetLog* net_log_; |
| 140 | 140 |
| 141 std::set<Job*> pending_jobs_; | 141 std::set<Job*> pending_jobs_; |
| 142 | 142 |
| 143 base::ThreadChecker thread_checker_; | |
| 144 | 143 |
| 145 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner_; | 144 scoped_ptr<base::ScopedClosureRunner> on_delete_callback_runner_; |
| 146 | 145 |
| 147 DISALLOW_COPY_AND_ASSIGN(ProxyResolverMojo); | 146 DISALLOW_COPY_AND_ASSIGN(ProxyResolverMojo); |
| 148 }; | 147 }; |
| 149 | 148 |
| 149 class ProxyResolverMojo::RequestImpl : public ProxyResolver::Request { | |
| 150 public: | |
| 151 RequestImpl(Job* job, ProxyResolverMojo* resolver); | |
| 152 | |
| 153 ~RequestImpl() override; | |
| 154 | |
| 155 LoadState GetLoadState() override; | |
| 156 | |
| 157 private: | |
| 158 Job* job_; | |
| 159 ProxyResolverMojo* resolver_; | |
| 160 }; | |
| 161 | |
| 150 class ProxyResolverMojo::Job | 162 class ProxyResolverMojo::Job |
| 151 : public ClientMixin<interfaces::ProxyResolverRequestClient> { | 163 : public ClientMixin<interfaces::ProxyResolverRequestClient> { |
| 152 public: | 164 public: |
| 153 Job(ProxyResolverMojo* resolver, | 165 Job(ProxyResolverMojo* resolver, |
| 154 const GURL& url, | 166 const GURL& url, |
| 155 ProxyInfo* results, | 167 ProxyInfo* results, |
| 156 const CompletionCallback& callback, | 168 const CompletionCallback& callback, |
| 157 const BoundNetLog& net_log); | 169 const BoundNetLog& net_log); |
| 158 ~Job() override; | 170 ~Job() override; |
| 159 | 171 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 174 | 186 |
| 175 ProxyResolverMojo* resolver_; | 187 ProxyResolverMojo* resolver_; |
| 176 const GURL url_; | 188 const GURL url_; |
| 177 ProxyInfo* results_; | 189 ProxyInfo* results_; |
| 178 CompletionCallback callback_; | 190 CompletionCallback callback_; |
| 179 | 191 |
| 180 base::ThreadChecker thread_checker_; | 192 base::ThreadChecker thread_checker_; |
| 181 mojo::Binding<interfaces::ProxyResolverRequestClient> binding_; | 193 mojo::Binding<interfaces::ProxyResolverRequestClient> binding_; |
| 182 }; | 194 }; |
| 183 | 195 |
| 196 ProxyResolverMojo::RequestImpl::RequestImpl(Job* job, | |
| 197 ProxyResolverMojo* resolver) | |
| 198 : job_(job), resolver_(resolver) {} | |
| 199 | |
| 200 ProxyResolverMojo::RequestImpl::~RequestImpl() { | |
| 201 DCHECK(resolver_->thread_checker_.CalledOnValidThread()); | |
| 202 DCHECK(job_); | |
| 203 job_->Cancel(); | |
|
eroman
2015/11/24 01:20:59
Same issue on ownership -- Can't job_ already be d
| |
| 204 resolver_->RemoveJob(job_); | |
| 205 } | |
| 206 | |
| 207 LoadState ProxyResolverMojo::RequestImpl::GetLoadState() { | |
| 208 CHECK_EQ(1u, resolver_->pending_jobs_.count(job_)); | |
| 209 return job_->GetLoadState(); | |
| 210 } | |
| 211 | |
| 184 ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver, | 212 ProxyResolverMojo::Job::Job(ProxyResolverMojo* resolver, |
| 185 const GURL& url, | 213 const GURL& url, |
| 186 ProxyInfo* results, | 214 ProxyInfo* results, |
| 187 const CompletionCallback& callback, | 215 const CompletionCallback& callback, |
| 188 const BoundNetLog& net_log) | 216 const BoundNetLog& net_log) |
| 189 : ClientMixin<interfaces::ProxyResolverRequestClient>( | 217 : ClientMixin<interfaces::ProxyResolverRequestClient>( |
| 190 resolver->host_resolver_, | 218 resolver->host_resolver_, |
| 191 resolver->error_observer_.get(), | 219 resolver->error_observer_.get(), |
| 192 resolver->net_log_, | 220 resolver->net_log_, |
| 193 net_log), | 221 net_log), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 void ProxyResolverMojo::RemoveJob(Job* job) { | 305 void ProxyResolverMojo::RemoveJob(Job* job) { |
| 278 DCHECK(thread_checker_.CalledOnValidThread()); | 306 DCHECK(thread_checker_.CalledOnValidThread()); |
| 279 size_t num_erased = pending_jobs_.erase(job); | 307 size_t num_erased = pending_jobs_.erase(job); |
| 280 DCHECK(num_erased); | 308 DCHECK(num_erased); |
| 281 delete job; | 309 delete job; |
| 282 } | 310 } |
| 283 | 311 |
| 284 int ProxyResolverMojo::GetProxyForURL(const GURL& url, | 312 int ProxyResolverMojo::GetProxyForURL(const GURL& url, |
| 285 ProxyInfo* results, | 313 ProxyInfo* results, |
| 286 const CompletionCallback& callback, | 314 const CompletionCallback& callback, |
| 287 RequestHandle* request, | 315 scoped_ptr<Request>* request, |
| 288 const BoundNetLog& net_log) { | 316 const BoundNetLog& net_log) { |
| 289 DCHECK(thread_checker_.CalledOnValidThread()); | 317 DCHECK(thread_checker_.CalledOnValidThread()); |
| 290 | 318 |
| 291 if (!mojo_proxy_resolver_ptr_) | 319 if (!mojo_proxy_resolver_ptr_) |
| 292 return ERR_PAC_SCRIPT_TERMINATED; | 320 return ERR_PAC_SCRIPT_TERMINATED; |
| 293 | 321 |
| 294 Job* job = new Job(this, url, results, callback, net_log); | 322 Job* job = new Job(this, url, results, callback, net_log); |
| 295 bool inserted = pending_jobs_.insert(job).second; | 323 bool inserted = pending_jobs_.insert(job).second; |
| 296 DCHECK(inserted); | 324 DCHECK(inserted); |
| 297 *request = job; | 325 request->reset(new RequestImpl(job, this)); |
| 298 | 326 |
| 299 return ERR_IO_PENDING; | 327 return ERR_IO_PENDING; |
| 300 } | 328 } |
| 301 | 329 |
| 302 void ProxyResolverMojo::CancelRequest(RequestHandle request) { | |
| 303 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 304 Job* job = static_cast<Job*>(request); | |
| 305 DCHECK(job); | |
| 306 job->Cancel(); | |
| 307 RemoveJob(job); | |
| 308 } | |
| 309 | 330 |
| 310 LoadState ProxyResolverMojo::GetLoadState(RequestHandle request) const { | |
| 311 Job* job = static_cast<Job*>(request); | |
| 312 CHECK_EQ(1u, pending_jobs_.count(job)); | |
| 313 return job->GetLoadState(); | |
| 314 } | |
| 315 | 331 |
| 316 } // namespace | 332 } // namespace |
| 317 | 333 |
| 318 // A Job to create a ProxyResolver instance. | 334 // A Job to create a ProxyResolver instance. |
| 319 // | 335 // |
| 320 // Note: a Job instance is not tied to a particular resolve request, and hence | 336 // Note: a Job instance is not tied to a particular resolve request, and hence |
| 321 // there is no per-request logging to be done (any netlog events are only sent | 337 // there is no per-request logging to be done (any netlog events are only sent |
| 322 // globally) so this always uses an empty BoundNetLog. | 338 // globally) so this always uses an empty BoundNetLog. |
| 323 class ProxyResolverFactoryMojo::Job | 339 class ProxyResolverFactoryMojo::Job |
| 324 : public ClientMixin<interfaces::ProxyResolverFactoryRequestClient>, | 340 : public ClientMixin<interfaces::ProxyResolverFactoryRequestClient>, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 return ERR_PAC_SCRIPT_FAILED; | 420 return ERR_PAC_SCRIPT_FAILED; |
| 405 } | 421 } |
| 406 request->reset(new Job(this, pac_script, resolver, callback, | 422 request->reset(new Job(this, pac_script, resolver, callback, |
| 407 error_observer_factory_.is_null() | 423 error_observer_factory_.is_null() |
| 408 ? nullptr | 424 ? nullptr |
| 409 : error_observer_factory_.Run())); | 425 : error_observer_factory_.Run())); |
| 410 return ERR_IO_PENDING; | 426 return ERR_IO_PENDING; |
| 411 } | 427 } |
| 412 | 428 |
| 413 } // namespace net | 429 } // namespace net |
| OLD | NEW |