Split ModemManager into ModemManagerBase and ModemManagerClassic

This is in preparation for building ModemManager1 to support the MM0.6
interface.

BUG=chromium-os:27014
TEST=unit tests, ran shill across multiple cromo restarts

Change-Id: I718c9508d81e12481be44cdaf5453679e08b905e
Reviewed-on: https://gerrit.chromium.org/gerrit/17249
Commit-Ready: David Rochberg <rochberg@chromium.org>
Reviewed-by: David Rochberg <rochberg@chromium.org>
Tested-by: David Rochberg <rochberg@chromium.org>
diff --git a/modem_manager.cc b/modem_manager.cc
index 5292522..009dea1 100644
--- a/modem_manager.cc
+++ b/modem_manager.cc
@@ -63,21 +63,14 @@
 }
 
 void ModemManager::Connect(const string &owner) {
+  // Inheriting classes call this superclass method.
   owner_ = owner;
-  proxy_.reset(proxy_factory_->CreateModemManagerProxy(this, path_, owner_));
-
-  // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
-  vector<DBus::Path> devices = proxy_->EnumerateDevices();
-  for (vector<DBus::Path>::const_iterator it = devices.begin();
-       it != devices.end(); ++it) {
-    AddModem(*it);
-  }
 }
 
 void ModemManager::Disconnect() {
+  // Inheriting classes call this superclass method.
   modems_.clear();
   owner_.clear();
-  proxy_.reset();
 }
 
 void ModemManager::OnAppear(GDBusConnection */*connection*/,
@@ -112,7 +105,7 @@
                                     manager_,
                                     provider_db_));
   modems_[path] = modem;
-  modem->Init();
+  InitModem(modem);
 }
 
 void ModemManager::RemoveModem(const string &path) {
@@ -122,9 +115,50 @@
 }
 
 void ModemManager::OnDeviceInfoAvailable(const string &link_name) {
-  for (Modems::iterator it = modems_.begin(); it != modems_.end(); ++it) {
+  for (Modems::const_iterator it = modems_.begin(); it != modems_.end(); ++it) {
     it->second->OnDeviceInfoAvailable(link_name);
   }
 }
 
+// ModemManagerClassic
+ModemManagerClassic::ModemManagerClassic(const std::string &service,
+                                         const std::string &path,
+                                         ControlInterface *control_interface,
+                                         EventDispatcher *dispatcher,
+                                         Metrics *metrics,
+                                         Manager *manager,
+                                         GLib *glib,
+                                         mobile_provider_db *provider_db) :
+    ModemManager(service,
+                 path,
+                 control_interface,
+                 dispatcher,
+                 metrics,
+                 manager,
+                 glib,
+                 provider_db) {}
+
+ModemManagerClassic::~ModemManagerClassic() {}
+
+void ModemManagerClassic::Connect(const string &supplied_owner) {
+  ModemManager::Connect(supplied_owner);
+  proxy_.reset(proxy_factory()->CreateModemManagerProxy(this, path(), owner()));
+
+  // TODO(petkov): Switch to asynchronous calls (crosbug.com/17583).
+  vector<DBus::Path> devices = proxy_->EnumerateDevices();
+  for (vector<DBus::Path>::const_iterator it = devices.begin();
+       it != devices.end(); ++it) {
+    AddModem(*it);
+  }
+}
+
+void ModemManagerClassic::Disconnect() {
+  ModemManager::Disconnect();
+  proxy_.reset();
+}
+
+void ModemManagerClassic::InitModem(shared_ptr<Modem> modem) {
+  modem->Init();
+}
+
 }  // namespace shill