| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #ifndef NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ | 5 #ifndef NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ |
| 6 #define NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ | 6 #define NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 explicit SingleThreadedProxyResolver(ProxyResolver* resolver); | 30 explicit SingleThreadedProxyResolver(ProxyResolver* resolver); |
| 31 | 31 |
| 32 virtual ~SingleThreadedProxyResolver(); | 32 virtual ~SingleThreadedProxyResolver(); |
| 33 | 33 |
| 34 // ProxyResolver implementation: | 34 // ProxyResolver implementation: |
| 35 virtual int GetProxyForURL(const GURL& url, | 35 virtual int GetProxyForURL(const GURL& url, |
| 36 ProxyInfo* results, | 36 ProxyInfo* results, |
| 37 CompletionCallback* callback, | 37 CompletionCallback* callback, |
| 38 RequestHandle* request); | 38 RequestHandle* request); |
| 39 virtual void CancelRequest(RequestHandle request); | 39 virtual void CancelRequest(RequestHandle request); |
| 40 virtual void CancelSetPacScript(); |
| 40 | 41 |
| 41 protected: | 42 protected: |
| 42 // The wrapped (synchronous) ProxyResolver. | 43 // The wrapped (synchronous) ProxyResolver. |
| 43 ProxyResolver* resolver() { return resolver_.get(); } | 44 ProxyResolver* resolver() { return resolver_.get(); } |
| 44 | 45 |
| 45 private: | 46 private: |
| 46 // Refcounted helper class that bridges between origin thread and worker | 47 // Refcounted helper class that bridges between origin thread and worker |
| 47 // thread. | 48 // thread. |
| 48 class Job; | 49 class Job; |
| 49 friend class Job; | 50 friend class Job; |
| 51 class SetPacScriptTask; |
| 52 friend class SetPacScriptTask; |
| 50 // FIFO queue that contains the in-progress job, and any pending jobs. | 53 // FIFO queue that contains the in-progress job, and any pending jobs. |
| 51 typedef std::deque<scoped_refptr<Job> > PendingJobsQueue; | 54 typedef std::deque<scoped_refptr<Job> > PendingJobsQueue; |
| 52 | 55 |
| 53 base::Thread* thread() { return thread_.get(); } | 56 base::Thread* thread() { return thread_.get(); } |
| 54 | 57 |
| 55 // ProxyResolver implementation: | 58 // ProxyResolver implementation: |
| 56 virtual void SetPacScriptByUrlInternal(const GURL& pac_url); | 59 virtual int SetPacScript(const GURL& pac_url, |
| 57 virtual void SetPacScriptByDataInternal(const std::string& bytes); | 60 const std::string& pac_bytes, |
| 58 | 61 CompletionCallback* callback); |
| 59 // Helper for shared code between SetPacScriptByUrlInternal() and | |
| 60 // SetPacScriptByDataInternal() -- the unused parameter is set to empty. | |
| 61 void SetPacScriptHelper(const GURL& pac_url, const std::string& bytes); | |
| 62 | 62 |
| 63 // Starts the worker thread if it isn't already running. | 63 // Starts the worker thread if it isn't already running. |
| 64 void EnsureThreadStarted(); | 64 void EnsureThreadStarted(); |
| 65 | 65 |
| 66 // Starts the next job from |pending_jobs_| if possible. | 66 // Starts the next job from |pending_jobs_| if possible. |
| 67 void ProcessPendingJobs(); | 67 void ProcessPendingJobs(); |
| 68 | 68 |
| 69 // Removes the front entry of the jobs queue. |expected_job| is our | 69 // Removes the front entry of the jobs queue. |expected_job| is our |
| 70 // expectation of what the front of the job queue is; it is only used by | 70 // expectation of what the front of the job queue is; it is only used by |
| 71 // DCHECK for verification purposes. | 71 // DCHECK for verification purposes. |
| 72 void RemoveFrontOfJobsQueueAndStartNext(Job* expected_job); | 72 void RemoveFrontOfJobsQueueAndStartNext(Job* expected_job); |
| 73 | 73 |
| 74 // Clears |outstanding_set_pac_script_task_|. |
| 75 // Called when |task| has just finished. |
| 76 void RemoveOutstandingSetPacScriptTask(SetPacScriptTask* task); |
| 77 |
| 74 // The synchronous resolver implementation. | 78 // The synchronous resolver implementation. |
| 75 scoped_ptr<ProxyResolver> resolver_; | 79 scoped_ptr<ProxyResolver> resolver_; |
| 76 | 80 |
| 77 // The thread where |resolver_| is run on. | 81 // The thread where |resolver_| is run on. |
| 78 // Note that declaration ordering is important here. |thread_| needs to be | 82 // Note that declaration ordering is important here. |thread_| needs to be |
| 79 // destroyed *before* |resolver_|, in case |resolver_| is currently | 83 // destroyed *before* |resolver_|, in case |resolver_| is currently |
| 80 // executing on |thread_|. | 84 // executing on |thread_|. |
| 81 scoped_ptr<base::Thread> thread_; | 85 scoped_ptr<base::Thread> thread_; |
| 82 | 86 |
| 83 PendingJobsQueue pending_jobs_; | 87 PendingJobsQueue pending_jobs_; |
| 88 scoped_refptr<SetPacScriptTask> outstanding_set_pac_script_task_; |
| 84 }; | 89 }; |
| 85 | 90 |
| 86 } // namespace net | 91 } // namespace net |
| 87 | 92 |
| 88 #endif // NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ | 93 #endif // NET_PROXY_SINGLE_THREADED_PROXY_RESOLVER_H_ |
| OLD | NEW |