1 // Copyright 2015 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 SERVICES_NETWORK_PROXY_RESOLVER_FACTORY_MOJO_H_ 6 #define SERVICES_NETWORK_PROXY_RESOLVER_FACTORY_MOJO_H_ 7 8 #include <memory> 9 10 #include "base/component_export.h" 11 #include "base/macros.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/memory/weak_ptr.h" 14 #include "mojo/public/cpp/bindings/pending_remote.h" 15 #include "mojo/public/cpp/bindings/remote.h" 16 #include "net/base/completion_once_callback.h" 17 #include "net/proxy_resolution/proxy_resolver_factory.h" 18 #include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" 19 20 namespace net { 21 class HostResolver; 22 class NetLog; 23 class ProxyResolverErrorObserver; 24 class PacFileData; 25 } // namespace net 26 27 namespace network { 28 29 // Implementation of ProxyResolverFactory that connects to a Mojo service to 30 // create implementations of a Mojo proxy resolver to back a ProxyResolverMojo. COMPONENT_EXPORT(NETWORK_SERVICE)31class COMPONENT_EXPORT(NETWORK_SERVICE) ProxyResolverFactoryMojo 32 : public net::ProxyResolverFactory { 33 public: 34 ProxyResolverFactoryMojo( 35 mojo::PendingRemote<proxy_resolver::mojom::ProxyResolverFactory> 36 mojo_proxy_factory, 37 net::HostResolver* host_resolver, 38 const base::RepeatingCallback< 39 std::unique_ptr<net::ProxyResolverErrorObserver>()>& 40 error_observer_factory, 41 net::NetLog* net_log); 42 ~ProxyResolverFactoryMojo() override; 43 44 // ProxyResolverFactory override. 45 int CreateProxyResolver(const scoped_refptr<net::PacFileData>& pac_script, 46 std::unique_ptr<net::ProxyResolver>* resolver, 47 net::CompletionOnceCallback callback, 48 std::unique_ptr<Request>* request) override; 49 50 private: 51 class Job; 52 53 mojo::Remote<proxy_resolver::mojom::ProxyResolverFactory> mojo_proxy_factory_; 54 net::HostResolver* const host_resolver_; 55 const base::RepeatingCallback< 56 std::unique_ptr<net::ProxyResolverErrorObserver>()> 57 error_observer_factory_; 58 net::NetLog* const net_log_; 59 60 base::WeakPtrFactory<ProxyResolverFactoryMojo> weak_ptr_factory_{this}; 61 62 DISALLOW_COPY_AND_ASSIGN(ProxyResolverFactoryMojo); 63 }; 64 65 } // namespace network 66 67 #endif // SERVICES_NETWORK_PROXY_RESOLVER_FACTORY_MOJO_H_ 68