shill: Add a ModemInfo object that's a peer of DeviceInfo.

ModemInfo is responsible for managing ModemManager instances. Each ModemManager
instance watches for and handles an individual ModemManager DBus service. Each
ModemManager will be responsible for creating cellular devices associated with
that ModemManager.

BUG=chromium-os:17576
TEST=unit tests, tested on device

Change-Id: Ie9946cba4465aea8671305e32596fc9f6cca96e2
Reviewed-on: http://gerrit.chromium.org/gerrit/4124
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/modem_info.h b/modem_info.h
new file mode 100644
index 0000000..e94c678
--- /dev/null
+++ b/modem_info.h
@@ -0,0 +1,57 @@
+// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SHILL_MODEM_INFO_
+#define SHILL_MODEM_INFO_
+
+#include <string>
+
+#include <base/memory/scoped_vector.h>
+#include <gtest/gtest_prod.h>  // for FRIEND_TEST
+
+namespace shill {
+
+class ControlInterface;
+class EventDispatcher;
+class GLib;
+class Manager;
+class ModemManager;
+
+// Manages modem managers.
+class ModemInfo {
+ public:
+  ModemInfo(ControlInterface *control_interface,
+            EventDispatcher *dispatcher,
+            Manager *manager,
+            GLib *glib);
+  ~ModemInfo();
+
+  void Start();
+  void Stop();
+
+ private:
+  friend class ModemInfoTest;
+  FRIEND_TEST(ModemInfoTest, RegisterModemManager);
+  FRIEND_TEST(ModemInfoTest, StartStop);
+
+  static const char kCromoService[];
+  static const char kCromoPath[];
+
+  // Registers a new ModemManager service handler and starts it.
+  void RegisterModemManager(const std::string &service,
+                            const std::string &path);
+
+  ScopedVector<ModemManager> modem_managers_;
+
+  ControlInterface *control_interface_;
+  EventDispatcher *dispatcher_;
+  Manager *manager_;
+  GLib *glib_;
+
+  DISALLOW_COPY_AND_ASSIGN(ModemInfo);
+};
+
+}  // namespace shill
+
+#endif  // SHILL_MODEM_INFO_