shill: vpn: Conditionally build VPN support into shill.

VPN is disabled if SHILL_VPN=0 is passed to the Makefile.

BUG=chromium-os:39329
TEST=Together with I9e4d5741cbdcd99c9c109259167d87dbff04ee7a:
- FEATURES=test emerge-lumpy shill;
- After unmerging dependencies, FEATURES=test USE=-vpn emerge-lumpy shill
- Connected to OpenVPN successfully with default USE flags.
- Tested connectivity with shill with no VPN support.

Change-Id: I480a5911a4310ff9f80ca312db2a1bc3fe67bbd1
Reviewed-on: https://gerrit.chromium.org/gerrit/45740
Reviewed-by: Paul Stewart <pstew@chromium.org>
Commit-Queue: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/manager.h b/manager.h
index 4c1beba..ae33d39 100644
--- a/manager.h
+++ b/manager.h
@@ -28,7 +28,6 @@
 #include "shill/power_manager.h"
 #include "shill/property_store.h"
 #include "shill/service.h"
-#include "shill/vpn_provider.h"
 #include "shill/wifi.h"
 #include "shill/wimax_provider.h"
 
@@ -42,6 +41,7 @@
 class ManagerAdaptorInterface;
 class Resolver;
 class StoreInterface;
+class VPNProvider;
 class WiFiProvider;
 
 class Manager : public base::SupportsWeakPtr<Manager> {
@@ -228,8 +228,8 @@
   virtual DeviceInfo *device_info() { return &device_info_; }
   virtual ModemInfo *modem_info() { return &modem_info_; }
   PowerManager *power_manager() const { return power_manager_.get(); }
-  virtual VPNProvider *vpn_provider() { return &vpn_provider_; }
-  virtual WiFiProvider *wifi_provider() { return wifi_provider_.get(); }
+  VPNProvider *vpn_provider() const { return vpn_provider_.get(); }
+  WiFiProvider *wifi_provider() const { return wifi_provider_.get(); }
   virtual WiMaxProvider *wimax_provider() { return &wimax_provider_; }
   PropertyStore *mutable_store() { return &store_; }
   virtual const PropertyStore &store() const { return store_; }
@@ -332,9 +332,11 @@
 
  private:
   friend class CellularTest;
+  friend class DeviceInfoTest;
   friend class ManagerAdaptorInterface;
   friend class ManagerTest;
   friend class ServiceTest;
+  friend class VPNServiceTest;
   friend class WiFiObjectTest;
   friend class WiMaxProviderTest;
 
@@ -450,7 +452,7 @@
   scoped_ptr<DBusManager> dbus_manager_;
   DeviceInfo device_info_;
   ModemInfo modem_info_;
-  VPNProvider vpn_provider_;
+  scoped_ptr<VPNProvider> vpn_provider_;
   scoped_ptr<WiFiProvider> wifi_provider_;
   WiMaxProvider wimax_provider_;
   // Hold pointer to singleton Resolver instance for testing purposes.