buffet: Anticipate addition of several new DBus facing objects

The draft of DBusManager was written with the idea that only the
DBusManager would expose methods to DBus.  When we add Manager and
Command objects, we're going to need better interfaces to get
ExportedObjects for each now object instance.

BUG=chromium:355387
TEST=Compiles, and `buffet_client --testmethod` still works.

Change-Id: I479b03df0168d1e8305aca1153038fbc8d2ef6c4
diff --git a/buffet/dbus_manager.cc b/buffet/dbus_manager.cc
index c6031fc..ceddee1 100644
--- a/buffet/dbus_manager.cc
+++ b/buffet/dbus_manager.cc
@@ -8,6 +8,10 @@
 
 #include <base/bind.h>
 
+#include "buffet/dbus_constants.h"
+
+using ::std::string;
+
 namespace buffet {
 
 namespace {
@@ -29,8 +33,7 @@
 }  // namespace
 
 DBusManager::DBusManager()
-    : bus_(nullptr),
-      buffet_dbus_object_(nullptr) {}
+    : bus_(nullptr) {}
 
 DBusManager::~DBusManager() {}
 
@@ -49,26 +52,36 @@
   bus_ = new dbus::Bus(options);
   CHECK(bus_->Connect());
 
-  buffet_dbus_object_ = bus_->GetExportedObject(
-      dbus::ObjectPath(kBuffetServicePath));
-  ExportDBusMethod(kTestMethod, &DBusManager::HandleTestMethod);
+  // buffet_dbus_object is owned by the Bus.
+  auto buffet_dbus_object = GetExportedObject(dbus_constants::kRootServicePath);
+  ExportDBusMethod(
+      buffet_dbus_object,
+      dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
+      base::Bind(&DBusManager::HandleTestMethod, base::Unretained(this)));
 
-  CHECK(bus_->RequestOwnershipAndBlock(kBuffetServiceName,
+  CHECK(bus_->RequestOwnershipAndBlock(dbus_constants::kServiceName,
                                        dbus::Bus::REQUIRE_PRIMARY))
-      << "Unable to take ownership of " << kBuffetServiceName;
+      << "Unable to take ownership of " << dbus_constants::kServiceName;
 }
 
 void DBusManager::ShutDownDBus() {
   bus_->ShutdownAndBlock();
 }
 
-void DBusManager::ExportDBusMethod(const std::string& method_name,
-                              DBusMethodCallMemberFunction member) {
-  DCHECK(buffet_dbus_object_);
-  CHECK(buffet_dbus_object_->ExportMethodAndBlock(
-      kBuffetInterface, method_name,
-      base::Bind(&HandleSynchronousDBusMethodCall,
-                 base::Bind(member, base::Unretained(this)))));
+dbus::ExportedObject* DBusManager::GetExportedObject(
+    const string& object_path) {
+  return bus_->GetExportedObject(dbus::ObjectPath(object_path));
+}
+
+void DBusManager::ExportDBusMethod(
+    dbus::ExportedObject* exported_object,
+    const string& interface_name,
+    const string& method_name,
+    base::Callback<scoped_ptr<dbus::Response>(dbus::MethodCall*)> handler) {
+  DCHECK(exported_object);
+  CHECK(exported_object->ExportMethodAndBlock(
+      interface_name, method_name,
+      base::Bind(&HandleSynchronousDBusMethodCall, handler)));
 }
 
 scoped_ptr<dbus::Response> DBusManager::HandleTestMethod(