1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_PROXY_PROXY_RESOLVER_V8_TRACING_H_ 6 #define NET_PROXY_PROXY_RESOLVER_V8_TRACING_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "base/threading/non_thread_safe.h" 12 #include "net/base/net_export.h" 13 #include "net/proxy/proxy_resolver.h" 14 15 namespace base { 16 class Thread; 17 class MessageLoopProxy; 18 } // namespace base 19 20 namespace net { 21 22 class HostResolver; 23 class NetLog; 24 class ProxyResolverErrorObserver; 25 class ProxyResolverV8; 26 27 // ProxyResolverV8Tracing is a non-blocking ProxyResolver. It executes 28 // ProxyResolverV8 on a single helper thread, and does some magic to avoid 29 // blocking in DNS. For more details see the design document: 30 // https://docs.google.com/a/google.com/document/d/16Ij5OcVnR3s0MH4Z5XkhI9VTPoMJdaBn9rKreAmGOdE/edit?pli=1 31 class NET_EXPORT_PRIVATE ProxyResolverV8Tracing 32 : public ProxyResolver, 33 NON_EXPORTED_BASE(public base::NonThreadSafe) { 34 public: 35 // Constructs a ProxyResolver that will issue DNS requests through 36 // |host_resolver|, forward Javascript errors through |error_observer|, and 37 // log Javascript errors and alerts to |net_log|. 38 // 39 // Note that the constructor takes ownership of |error_observer|, whereas 40 // |host_resolver| and |net_log| are expected to outlive |this|. 41 ProxyResolverV8Tracing(HostResolver* host_resolver, 42 ProxyResolverErrorObserver* error_observer, 43 NetLog* net_log); 44 45 virtual ~ProxyResolverV8Tracing(); 46 47 // ProxyResolver implementation: 48 virtual int GetProxyForURL(const GURL& url, 49 ProxyInfo* results, 50 const CompletionCallback& callback, 51 RequestHandle* request, 52 const BoundNetLog& net_log) OVERRIDE; 53 virtual void CancelRequest(RequestHandle request) OVERRIDE; 54 virtual LoadState GetLoadState(RequestHandle request) const OVERRIDE; 55 virtual void CancelSetPacScript() OVERRIDE; 56 virtual int SetPacScript( 57 const scoped_refptr<ProxyResolverScriptData>& script_data, 58 const CompletionCallback& callback) OVERRIDE; 59 60 private: 61 class Job; 62 63 // The worker thread on which the ProxyResolverV8 will be run. 64 scoped_ptr<base::Thread> thread_; 65 scoped_ptr<ProxyResolverV8> v8_resolver_; 66 67 // Non-owned host resolver, which is to be operated on the origin thread. 68 HostResolver* host_resolver_; 69 70 scoped_ptr<ProxyResolverErrorObserver> error_observer_; 71 NetLog* net_log_; 72 73 // The outstanding SetPacScript operation, or NULL. 74 scoped_refptr<Job> set_pac_script_job_; 75 76 // The number of outstanding (non-cancelled) jobs. 77 int num_outstanding_callbacks_; 78 79 DISALLOW_COPY_AND_ASSIGN(ProxyResolverV8Tracing); 80 }; 81 82 } // namespace net 83 84 #endif // NET_PROXY_PROXY_RESOLVER_V8_TRACING_H_ 85