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

Unified Diff: net/proxy/multi_threaded_proxy_resolver.cc

Issue 1745133002: Revert of Change ProxyResolver::GetProxyForURL() to take a scoped_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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/mojo_proxy_resolver_impl_unittest.cc ('k') | net/proxy/multi_threaded_proxy_resolver_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/multi_threaded_proxy_resolver.cc
diff --git a/net/proxy/multi_threaded_proxy_resolver.cc b/net/proxy/multi_threaded_proxy_resolver.cc
index 98455930fa7287f7f8571e6dc836ef0c9f7c8d85..5eae4f744e8d7d79915c8afe3f157da5161fcdf7 100644
--- a/net/proxy/multi_threaded_proxy_resolver.cc
+++ b/net/proxy/multi_threaded_proxy_resolver.cc
@@ -117,12 +117,13 @@
int GetProxyForURL(const GURL& url,
ProxyInfo* results,
const CompletionCallback& callback,
- scoped_ptr<Request>* request,
+ RequestHandle* request,
const BoundNetLog& net_log) override;
+ void CancelRequest(RequestHandle request) override;
+ LoadState GetLoadState(RequestHandle request) const override;
private:
class GetProxyForURLJob;
- class RequestImpl;
// FIFO queue of pending jobs waiting to be started.
// TODO(eroman): Make this priority queue.
typedef std::deque<scoped_refptr<Job>> PendingJobsQueue;
@@ -228,20 +229,6 @@
CompletionCallback callback_;
Executor* executor_;
bool was_cancelled_;
-};
-
-class MultiThreadedProxyResolver::RequestImpl : public ProxyResolver::Request {
- public:
- explicit RequestImpl(scoped_refptr<Job> job) : job_(std::move(job)) {}
-
- ~RequestImpl() override { job_->Cancel(); }
-
- LoadState GetLoadState() override {
- return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
- }
-
- private:
- scoped_refptr<Job> job_;
};
// CreateResolverJob -----------------------------------------------------------
@@ -455,11 +442,8 @@
}
int MultiThreadedProxyResolver::GetProxyForURL(
- const GURL& url,
- ProxyInfo* results,
- const CompletionCallback& callback,
- scoped_ptr<Request>* request,
- const BoundNetLog& net_log) {
+ const GURL& url, ProxyInfo* results, const CompletionCallback& callback,
+ RequestHandle* request, const BoundNetLog& net_log) {
DCHECK(CalledOnValidThread());
DCHECK(!callback.is_null());
@@ -469,7 +453,7 @@
// Completion will be notified through |callback|, unless the caller cancels
// the request using |request|.
if (request)
- request->reset(new RequestImpl(job));
+ *request = reinterpret_cast<RequestHandle>(job.get());
// If there is an executor that is ready to run this request, submit it!
Executor* executor = FindIdleExecutor();
@@ -492,6 +476,31 @@
return ERR_IO_PENDING;
}
+void MultiThreadedProxyResolver::CancelRequest(RequestHandle req) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(req);
+
+ Job* job = reinterpret_cast<Job*>(req);
+ DCHECK_EQ(Job::TYPE_GET_PROXY_FOR_URL, job->type());
+
+ if (job->executor()) {
+ // If the job was already submitted to the executor, just mark it
+ // as cancelled so the user callback isn't run on completion.
+ job->Cancel();
+ } else {
+ // Otherwise the job is just sitting in a queue.
+ PendingJobsQueue::iterator it =
+ std::find(pending_jobs_.begin(), pending_jobs_.end(), job);
+ DCHECK(it != pending_jobs_.end());
+ pending_jobs_.erase(it);
+ }
+}
+
+LoadState MultiThreadedProxyResolver::GetLoadState(RequestHandle req) const {
+ DCHECK(CalledOnValidThread());
+ DCHECK(req);
+ return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
+}
Executor* MultiThreadedProxyResolver::FindIdleExecutor() {
DCHECK(CalledOnValidThread());
@@ -517,14 +526,14 @@
void MultiThreadedProxyResolver::OnExecutorReady(Executor* executor) {
DCHECK(CalledOnValidThread());
- while (!pending_jobs_.empty()) {
- scoped_refptr<Job> job = pending_jobs_.front();
- pending_jobs_.pop_front();
- if (!job->was_cancelled()) {
- executor->StartJob(job.get());
- return;
- }
- }
+ if (pending_jobs_.empty())
+ return;
+
+ // Get the next job to process (FIFO). Transfer it from the pending queue
+ // to the executor.
+ scoped_refptr<Job> job = pending_jobs_.front();
+ pending_jobs_.pop_front();
+ executor->StartJob(job.get());
}
} // namespace
« no previous file with comments | « net/proxy/mojo_proxy_resolver_impl_unittest.cc ('k') | net/proxy/multi_threaded_proxy_resolver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698