• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 EXTENSIONS_BROWSER_API_DNS_HOST_RESOLVER_WRAPPER_H_
6 #define EXTENSIONS_BROWSER_API_DNS_HOST_RESOLVER_WRAPPER_H_
7 
8 #include "base/memory/singleton.h"
9 
10 namespace content {
11 class ResourceContext;
12 }
13 
14 namespace net {
15 class HostResolver;
16 }
17 
18 namespace extensions {
19 
20 // Used for testing. In production code, this class does nothing interesting.
21 // This class is a singleton that holds a pointer to a mock HostResolver, or
22 // else to NULL. API classes that need to resolve hostnames ask this class for
23 // the correct HostResolver to use, passing in the one that they want to use,
24 // thereby avoiding most lifetime issues, and it will reply with either that
25 // same one, or else the test version to use instead.
26 //
27 // This is a pretty complicated way to replace a single pointer with another.
28 // TODO(miket): make the previous statement obsolete.
29 class HostResolverWrapper {
30  public:
31   static HostResolverWrapper* GetInstance();
32 
33   // Given a pointer to a ResourceContext, returns its HostResolver if
34   // SetHostResolverForTesting() hasn't been called, or else a
35   // a substitute MockHostResolver to use instead.
36   net::HostResolver* GetHostResolver(content::ResourceContext* context);
37 
38   // Sets the MockHostResolver to return in GetHostResolver().
39   void SetHostResolverForTesting(net::HostResolver* mock_resolver);
40 
41  private:
42   HostResolverWrapper();
43   friend struct DefaultSingletonTraits<HostResolverWrapper>;
44 
45   net::HostResolver* resolver_;
46 
47   DISALLOW_COPY_AND_ASSIGN(HostResolverWrapper);
48 };
49 
50 }  // namespace extensions
51 
52 #endif  // EXTENSIONS_BROWSER_API_DNS_HOST_RESOLVER_WRAPPER_H_
53