shill: Delete existing routes when the device is started.

BUG=chromium-os:27358
TEST=Unit tests, network_WiFiManager, manually add foreign routes and
ensure they are deleted, also test to make sure default route remains
after DHCP renewal

Change-Id: Ic26b70d685491f31699ff4684ed289e76af8a9ca
Reviewed-on: https://gerrit.chromium.org/gerrit/17640
Commit-Ready: Thieu Le <thieule@chromium.org>
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
diff --git a/shill_daemon.cc b/shill_daemon.cc
index ae05866..2460dba 100644
--- a/shill_daemon.cc
+++ b/shill_daemon.cc
@@ -27,23 +27,27 @@
 Daemon::Daemon(Config *config, ControlInterface *control)
     : config_(config),
       control_(control),
-      manager_(control_,
-               &dispatcher_,
-               &metrics_,
-               &glib_,
-               config->GetRunDirectory(),
-               config->GetStorageDirectory(),
-               config->GetUserStorageDirectoryFormat()) {
+      proxy_factory_(ProxyFactory::GetInstance()),
+      rtnl_handler_(RTNLHandler::GetInstance()),
+      routing_table_(RoutingTable::GetInstance()),
+      dhcp_provider_(DHCPProvider::GetInstance()),
+      manager_(new Manager(control_,
+                           &dispatcher_,
+                           &metrics_,
+                           &glib_,
+                           config->GetRunDirectory(),
+                           config->GetStorageDirectory(),
+                           config->GetUserStorageDirectoryFormat())) {
 }
 Daemon::~Daemon() {}
 
 void Daemon::AddDeviceToBlackList(const string &device_name) {
-  manager_.AddDeviceToBlackList(device_name);
+  manager_->AddDeviceToBlackList(device_name);
 }
 
 void Daemon::SetStartupProfiles(const vector<string> &profile_name_list) {
   Error error;
-  manager_.set_startup_profiles(profile_name_list);
+  manager_->set_startup_profiles(profile_name_list);
 }
 
 void Daemon::Run() {
@@ -60,15 +64,15 @@
 
 void Daemon::Start() {
   glib_.TypeInit();
-  ProxyFactory::GetInstance()->Init();
-  RTNLHandler::GetInstance()->Start(&dispatcher_, &sockets_);
-  RoutingTable::GetInstance()->Start();
-  DHCPProvider::GetInstance()->Init(control_, &dispatcher_, &glib_);
-  manager_.Start();
+  proxy_factory_->Init();
+  rtnl_handler_->Start(&dispatcher_, &sockets_);
+  routing_table_->Start();
+  dhcp_provider_->Init(control_, &dispatcher_, &glib_);
+  manager_->Start();
 }
 
 void Daemon::Stop() {
-  manager_.Stop();
+  manager_->Stop();
 }
 
 }  // namespace shill