// Copyright (c) 2013 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_PROXY_RESOLVER_V8_TRACING_H_ #define NET_PROXY_PROXY_RESOLVER_V8_TRACING_H_ #include #include "base/basictypes.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "net/base/net_export.h" #include "net/proxy/proxy_resolver.h" #include "net/proxy/proxy_resolver_factory.h" namespace net { class HostResolver; class NetLog; class ProxyResolverErrorObserver; // ProxyResolverFactoryV8Tracing is a ProxyResolverFactory that returns // non-blocking ProxyResolver instances. Each ProxyResolver instance executes // ProxyResolverV8 on a single helper thread, and does some magic to avoid // blocking in DNS. For more details see the design document: // https://docs.google.com/a/google.com/document/d/16Ij5OcVnR3s0MH4Z5XkhI9VTPoMJdaBn9rKreAmGOdE/edit?pli=1 class NET_EXPORT ProxyResolverFactoryV8Tracing : public ProxyResolverFactory { public: // Note that |host_resolver| and |net_log| are expected to outlive |this| and // any ProxyResolver instances created using |this|. |error_observer_factory| // will be invoked once per CreateProxyResolver() call to create a // ProxyResolverErrorObserver to be used by the ProxyResolver instance // returned by that call. ProxyResolverFactoryV8Tracing( HostResolver* host_resolver, NetLog* net_log, const ProxyResolver::LoadStateChangedCallback& callback, const base::Callback()>& error_observer_factory); ~ProxyResolverFactoryV8Tracing() override; // ProxyResolverFactory override. int CreateProxyResolver( const scoped_refptr& pac_script, scoped_ptr* resolver, const CompletionCallback& callback, scoped_ptr* request) override; private: class CreateJob; void RemoveJob(CreateJob* job); HostResolver* const host_resolver_; NetLog* const net_log_; const ProxyResolver::LoadStateChangedCallback load_state_changed_callback_; const base::Callback()> error_observer_factory_; std::set jobs_; DISALLOW_COPY_AND_ASSIGN(ProxyResolverFactoryV8Tracing); }; } // namespace net #endif // NET_PROXY_PROXY_RESOLVER_V8_TRACING_H_