Move away from Singleton

Move from Singleton to LazyInstance for one-of classes in Shill.
This will allow them to be subclassed (mocked).

BUG=chromium-os:18986
TEST=Re-run unit tests

Change-Id: I83320694db5df1a263332315ad4f6955b107280b
Reviewed-on: http://gerrit.chromium.org/gerrit/5676
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/dhcp_provider.h b/dhcp_provider.h
index fd83029..5d96ee1 100644
--- a/dhcp_provider.h
+++ b/dhcp_provider.h
@@ -8,8 +8,8 @@
 #include <map>
 #include <string>
 
+#include <base/lazy_instance.h>
 #include <base/memory/scoped_ptr.h>
-#include <base/memory/singleton.h>
 #include <gtest/gtest_prod.h>  // for FRIEND_TEST
 
 #include "shill/refptr_types.h"
@@ -29,6 +29,8 @@
 // DHCPProvider::GetInstance()->CreateConfig(device_name)->Request();
 class DHCPProvider {
  public:
+  virtual ~DHCPProvider();
+
   // This is a singleton -- use DHCPProvider::GetInstance()->Foo()
   static DHCPProvider *GetInstance();
 
@@ -57,8 +59,11 @@
   // destruction of the DHCP config instance if its reference count goes to 0.
   void UnbindPID(int pid);
 
+ protected:
+  DHCPProvider();
+
  private:
-  friend struct DefaultSingletonTraits<DHCPProvider>;
+  friend struct base::DefaultLazyInstanceTraits<DHCPProvider>;
   friend class DHCPProviderTest;
   friend class DeviceInfoTest;
   friend class DeviceTest;
@@ -66,10 +71,6 @@
 
   typedef std::map<int, DHCPConfigRefPtr> PIDConfigMap;
 
-  // Private to ensure that this behaves as a singleton.
-  DHCPProvider();
-  virtual ~DHCPProvider();
-
   // A single listener is used to catch signals from all DHCP clients and
   // dispatch them to the appropriate DHCP configuration instance.
   scoped_ptr<DHCPCDListener> listener_;