Home | History | Annotate | Download | only in dns
      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