| Index: net/proxy/mock_proxy_resolver.cc
|
| diff --git a/net/proxy/mock_proxy_resolver.cc b/net/proxy/mock_proxy_resolver.cc
|
| index 21cac0026cb24a8975e01868ed8d403fccaf19bf..e2635529b2239b0b2bcc95eb7443cc9943fc7b82 100644
|
| --- a/net/proxy/mock_proxy_resolver.cc
|
| +++ b/net/proxy/mock_proxy_resolver.cc
|
| @@ -11,61 +11,74 @@
|
|
|
| namespace net {
|
|
|
| -MockAsyncProxyResolver::Request::Request(MockAsyncProxyResolver* resolver,
|
| - const GURL& url,
|
| - ProxyInfo* results,
|
| - const CompletionCallback& callback)
|
| +MockAsyncProxyResolver::RequestImpl::RequestImpl(scoped_ptr<Job> job)
|
| + : job_(std::move(job)) {
|
| + DCHECK(job_);
|
| +}
|
| +
|
| +MockAsyncProxyResolver::RequestImpl::~RequestImpl() {
|
| + MockAsyncProxyResolver* resolver = job_->Resolver();
|
| + // AddCancelledJob will check if request is already cancelled
|
| + resolver->AddCancelledJob(std::move(job_));
|
| +}
|
| +
|
| +LoadState MockAsyncProxyResolver::RequestImpl::GetLoadState() {
|
| + return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
|
| +}
|
| +
|
| +MockAsyncProxyResolver::Job::Job(MockAsyncProxyResolver* resolver,
|
| + const GURL& url,
|
| + ProxyInfo* results,
|
| + const CompletionCallback& callback)
|
| : resolver_(resolver),
|
| url_(url),
|
| results_(results),
|
| callback_(callback),
|
| - origin_loop_(base::MessageLoop::current()) {
|
| -}
|
| + origin_loop_(base::MessageLoop::current()) {}
|
| +
|
| +MockAsyncProxyResolver::Job::~Job() {}
|
|
|
| -void MockAsyncProxyResolver::Request::CompleteNow(int rv) {
|
| +void MockAsyncProxyResolver::Job::CompleteNow(int rv) {
|
| CompletionCallback callback = callback_;
|
|
|
| - // May delete |this|.
|
| - resolver_->RemovePendingRequest(this);
|
| + resolver_->RemovePendingJob(this);
|
|
|
| callback.Run(rv);
|
| }
|
|
|
| -MockAsyncProxyResolver::Request::~Request() {}
|
| -
|
| MockAsyncProxyResolver::~MockAsyncProxyResolver() {}
|
|
|
| int MockAsyncProxyResolver::GetProxyForURL(const GURL& url,
|
| ProxyInfo* results,
|
| const CompletionCallback& callback,
|
| - RequestHandle* request_handle,
|
| + scoped_ptr<Request>* request,
|
| const BoundNetLog& /*net_log*/) {
|
| - scoped_refptr<Request> request = new Request(this, url, results, callback);
|
| - pending_requests_.push_back(request);
|
| + scoped_ptr<Job> job(new Job(this, url, results, callback));
|
|
|
| - if (request_handle)
|
| - *request_handle = reinterpret_cast<RequestHandle>(request.get());
|
| + pending_jobs_.push_back(job.get());
|
| + request->reset(new RequestImpl(std::move(job)));
|
|
|
| - // Test code completes the request by calling request->CompleteNow().
|
| + // Test code completes the request by calling job->CompleteNow().
|
| return ERR_IO_PENDING;
|
| }
|
|
|
| -void MockAsyncProxyResolver::CancelRequest(RequestHandle request_handle) {
|
| - scoped_refptr<Request> request = reinterpret_cast<Request*>(request_handle);
|
| - cancelled_requests_.push_back(request);
|
| - RemovePendingRequest(request.get());
|
| +void MockAsyncProxyResolver::AddCancelledJob(scoped_ptr<Job> job) {
|
| + std::vector<Job*>::iterator it =
|
| + std::find(pending_jobs_.begin(), pending_jobs_.end(), job.get());
|
| + // Because this is called always when RequestImpl is destructed,
|
| + // we need to check if it is still in pending jobs.
|
| + if (it != pending_jobs_.end()) {
|
| + cancelled_jobs_.push_back(std::move(job));
|
| + pending_jobs_.erase(it);
|
| + }
|
| }
|
|
|
| -LoadState MockAsyncProxyResolver::GetLoadState(
|
| - RequestHandle request_handle) const {
|
| - return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
|
| -}
|
| -
|
| -void MockAsyncProxyResolver::RemovePendingRequest(Request* request) {
|
| - RequestsList::iterator it = std::find(
|
| - pending_requests_.begin(), pending_requests_.end(), request);
|
| - DCHECK(it != pending_requests_.end());
|
| - pending_requests_.erase(it);
|
| +void MockAsyncProxyResolver::RemovePendingJob(Job* job) {
|
| + DCHECK(job);
|
| + std::vector<Job*>::iterator it =
|
| + std::find(pending_jobs_.begin(), pending_jobs_.end(), job);
|
| + DCHECK(it != pending_jobs_.end());
|
| + pending_jobs_.erase(it);
|
| }
|
|
|
| MockAsyncProxyResolver::MockAsyncProxyResolver() {
|
| @@ -165,17 +178,9 @@ ForwardingProxyResolver::ForwardingProxyResolver(ProxyResolver* impl)
|
| int ForwardingProxyResolver::GetProxyForURL(const GURL& query_url,
|
| ProxyInfo* results,
|
| const CompletionCallback& callback,
|
| - RequestHandle* request,
|
| + scoped_ptr<Request>* request,
|
| const BoundNetLog& net_log) {
|
| return impl_->GetProxyForURL(query_url, results, callback, request, net_log);
|
| }
|
|
|
| -void ForwardingProxyResolver::CancelRequest(RequestHandle request) {
|
| - impl_->CancelRequest(request);
|
| -}
|
| -
|
| -LoadState ForwardingProxyResolver::GetLoadState(RequestHandle request) const {
|
| - return impl_->GetLoadState(request);
|
| -}
|
| -
|
| } // namespace net
|
|
|