| Index: net/proxy/single_threaded_proxy_resolver.h
|
| ===================================================================
|
| --- net/proxy/single_threaded_proxy_resolver.h (revision 51914)
|
| +++ net/proxy/single_threaded_proxy_resolver.h (working copy)
|
| @@ -1,94 +0,0 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_
|
| -#define NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_
|
| -
|
| -#include <deque>
|
| -#include <string>
|
| -
|
| -#include "base/ref_counted.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "net/proxy/proxy_resolver.h"
|
| -
|
| -namespace base {
|
| -class Thread;
|
| -} // namespace base
|
| -
|
| -namespace net {
|
| -
|
| -// ProxyResolver implementation that wraps a synchronous ProxyResolver, and
|
| -// runs it on a single worker thread. If multiple requests accumulate, they
|
| -// are serviced in FIFO order.
|
| -class SingleThreadedProxyResolver : public ProxyResolver {
|
| - public:
|
| - // |resolver| is a synchronous ProxyResolver implementation. It doesn't
|
| - // have to be thread-safe, since it is run on exactly one thread. The
|
| - // constructor takes ownership of |resolver|.
|
| - explicit SingleThreadedProxyResolver(ProxyResolver* resolver);
|
| -
|
| - virtual ~SingleThreadedProxyResolver();
|
| -
|
| - // ProxyResolver implementation:
|
| - virtual int GetProxyForURL(const GURL& url,
|
| - ProxyInfo* results,
|
| - CompletionCallback* callback,
|
| - RequestHandle* request,
|
| - const BoundNetLog& net_log);
|
| - virtual void CancelRequest(RequestHandle request);
|
| - virtual void CancelSetPacScript();
|
| - virtual void PurgeMemory();
|
| -
|
| - protected:
|
| - // The wrapped (synchronous) ProxyResolver.
|
| - ProxyResolver* resolver() { return resolver_.get(); }
|
| -
|
| - private:
|
| - // Refcounted helper class that bridges between origin thread and worker
|
| - // thread.
|
| - class Job;
|
| - friend class Job;
|
| - class SetPacScriptTask;
|
| - friend class SetPacScriptTask;
|
| - // FIFO queue that contains the in-progress job, and any pending jobs.
|
| - typedef std::deque<scoped_refptr<Job> > PendingJobsQueue;
|
| -
|
| - base::Thread* thread() { return thread_.get(); }
|
| -
|
| - // ProxyResolver implementation:
|
| - virtual int SetPacScript(const GURL& pac_url,
|
| - const string16& pac_script,
|
| - CompletionCallback* callback);
|
| -
|
| - // Starts the worker thread if it isn't already running.
|
| - void EnsureThreadStarted();
|
| -
|
| - // Starts the next job from |pending_jobs_| if possible.
|
| - void ProcessPendingJobs();
|
| -
|
| - // Removes the front entry of the jobs queue. |expected_job| is our
|
| - // expectation of what the front of the job queue is; it is only used by
|
| - // DCHECK for verification purposes.
|
| - void RemoveFrontOfJobsQueueAndStartNext(Job* expected_job);
|
| -
|
| - // Clears |outstanding_set_pac_script_task_|.
|
| - // Called when |task| has just finished.
|
| - void RemoveOutstandingSetPacScriptTask(SetPacScriptTask* task);
|
| -
|
| - // The synchronous resolver implementation.
|
| - scoped_ptr<ProxyResolver> resolver_;
|
| -
|
| - // The thread where |resolver_| is run on.
|
| - // Note that declaration ordering is important here. |thread_| needs to be
|
| - // destroyed *before* |resolver_|, in case |resolver_| is currently
|
| - // executing on |thread_|.
|
| - scoped_ptr<base::Thread> thread_;
|
| -
|
| - PendingJobsQueue pending_jobs_;
|
| - scoped_refptr<SetPacScriptTask> outstanding_set_pac_script_task_;
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_
|
|
|