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)31 class 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