buffet: Remove DBusManager class
Move the TestMethod to the Manager, then remove the DBusManager
entirely. This lets us turn the object at org/chromium/Buffet
into a pure object manager and removes a lot of boilerplate.
BUG=chromium:359190
TEST=buffet_client continues to demonstrate buffet functionality
through the TestMethod, which is now implementated by the Manager.
Change-Id: Ie9ecf0f7dd4dd50a3355ad7b06b8e2cfca71d9f9
Reviewed-on: https://chromium-review.googlesource.com/198760
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp
index ed036bd..3a62f13 100644
--- a/buffet/buffet.gyp
+++ b/buffet/buffet.gyp
@@ -29,7 +29,6 @@
'sources': [
'data_encoding.cc',
'dbus_constants.cc',
- 'dbus_manager.cc',
'dbus_utils.cc',
'device_registration_info.cc',
'exported_object_manager.cc',
diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index dba2f4d..f351040 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -16,7 +16,6 @@
#include <dbus/values_util.h>
#include "buffet/dbus_constants.h"
-#include "buffet/dbus_manager.h"
#include "buffet/data_encoding.h"
using namespace buffet::dbus_constants;
@@ -32,8 +31,8 @@
}
bool CallTestMethod(dbus::ObjectProxy* proxy) {
- dbus::MethodCall method_call(buffet::dbus_constants::kRootInterface,
- buffet::dbus_constants::kRootTestMethod);
+ dbus::MethodCall method_call(buffet::dbus_constants::kManagerInterface,
+ buffet::dbus_constants::kManagerTestMethod);
scoped_ptr<dbus::Response> response(
proxy->CallMethodAndBlock(&method_call, default_timeout_ms));
if (!response) {
@@ -178,7 +177,7 @@
void usage() {
std::cerr << "Possible commands:" << std::endl;
- std::cerr << " " << kRootTestMethod << std::endl;
+ std::cerr << " " << kManagerTestMethod << std::endl;
std::cerr << " " << kManagerCheckDeviceRegistered << std::endl;
std::cerr << " " << kManagerGetDeviceInfo << std::endl;
std::cerr << " " << kManagerStartRegisterDevice
@@ -208,9 +207,9 @@
std::string command = args.front();
args.erase(args.begin());
bool success = false;
- if (command.compare(kRootTestMethod) == 0) {
+ if (command.compare(kManagerTestMethod) == 0) {
auto proxy = GetBuffetDBusProxy(
- bus, buffet::dbus_constants::kRootServicePath);
+ bus, buffet::dbus_constants::kManagerServicePath);
success = CallTestMethod(proxy);
} else if (command.compare(kManagerCheckDeviceRegistered) == 0 ||
command.compare("cr") == 0) {
diff --git a/buffet/dbus_constants.cc b/buffet/dbus_constants.cc
index f352bbe..d8c70ba 100644
--- a/buffet/dbus_constants.cc
+++ b/buffet/dbus_constants.cc
@@ -10,11 +10,8 @@
const char kServiceName[] = "org.chromium.Buffet";
-const char kRootInterface[] = "org.chromium.Buffet";
const char kRootServicePath[] = "/org/chromium/Buffet";
-const char kRootTestMethod[] = "TestMethod";
-
const char kManagerInterface[] = "org.chromium.Buffet.Manager";
const char kManagerServicePath[] = "/org/chromium/Buffet/Manager";
@@ -23,6 +20,7 @@
const char kManagerStartRegisterDevice[] = "StartRegisterDevice";
const char kManagerFinishRegisterDevice[] = "FinishRegisterDevice";
const char kManagerUpdateStateMethod[] = "UpdateState";
+const char kManagerTestMethod[] = "TestMethod";
} // namespace dbus_constants
diff --git a/buffet/dbus_constants.h b/buffet/dbus_constants.h
index 13c8a71..b7e9239 100644
--- a/buffet/dbus_constants.h
+++ b/buffet/dbus_constants.h
@@ -12,13 +12,9 @@
// The service name claimed by the Buffet daemon.
extern const char kServiceName[];
-// Interface implemented by the object at kRootServicePath.
-extern const char kRootInterface[];
+// The object at this path implements the ObjectManager interface.
extern const char kRootServicePath[];
-// Methods exposed as part of kRootInterface.
-extern const char kRootTestMethod[];
-
// Interface implemented by the object at kManagerServicePath.
extern const char kManagerInterface[];
extern const char kManagerServicePath[];
@@ -29,6 +25,7 @@
extern const char kManagerStartRegisterDevice[];
extern const char kManagerFinishRegisterDevice[];
extern const char kManagerUpdateStateMethod[];
+extern const char kManagerTestMethod[];
} // namespace dbus_constants
diff --git a/buffet/dbus_manager.cc b/buffet/dbus_manager.cc
deleted file mode 100644
index e1b3426..0000000
--- a/buffet/dbus_manager.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2014 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.
-
-#include "buffet/dbus_manager.h"
-
-#include <string>
-
-#include <base/bind.h>
-#include <dbus/object_path.h>
-
-#include "buffet/async_event_sequencer.h"
-#include "buffet/dbus_constants.h"
-#include "buffet/dbus_utils.h"
-
-using ::std::string;
-
-namespace buffet {
-
-DBusManager::DBusManager(dbus::Bus* bus)
- : bus_(bus),
- exported_object_(bus->GetExportedObject(
- dbus::ObjectPath(dbus_constants::kRootServicePath))) { }
-
-DBusManager::~DBusManager() {
- // Unregister ourselves from the Bus. This prevents the bus from calling
- // our callbacks in between the Manager's death and the bus unregistering
- // our exported object on shutdown. Unretained makes no promises of memory
- // management.
- exported_object_->Unregister();
- exported_object_ = nullptr;
-}
-
-void DBusManager::Init(const OnInitFinish& cb) {
- scoped_refptr<dbus_utils::AsyncEventSequencer> sequencer(
- new dbus_utils::AsyncEventSequencer());
- exported_object_->ExportMethod(
- dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
- dbus_utils::GetExportableDBusMethod(
- base::Bind(&DBusManager::HandleTestMethod, base::Unretained(this))),
- sequencer->GetExportHandler(
- dbus_constants::kRootInterface, dbus_constants::kRootTestMethod,
- "Failed exporting DBusManager's test method",
- true));
- sequencer->OnAllTasksCompletedCall({cb});
-}
-
-scoped_ptr<dbus::Response> DBusManager::HandleTestMethod(
- dbus::MethodCall* method_call) {
- LOG(INFO) << "Received call to test method.";
- return scoped_ptr<dbus::Response>();
-}
-
-} // namespace buffet
diff --git a/buffet/dbus_manager.h b/buffet/dbus_manager.h
deleted file mode 100644
index 13aa8f4..0000000
--- a/buffet/dbus_manager.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2014 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 BUFFET_DBUS_MANAGER_H_
-#define BUFFET_DBUS_MANAGER_H_
-
-#include <string>
-
-#include <base/memory/scoped_ptr.h>
-#include <dbus/bus.h>
-#include <dbus/exported_object.h>
-#include <dbus/message.h>
-
-namespace buffet {
-
-// Class that manages dbus interactions in buffet.
-class DBusManager {
- public:
- typedef base::Callback<void(bool success)> OnInitFinish;
-
- DBusManager(dbus::Bus* bus);
- virtual ~DBusManager();
-
- void Init(const OnInitFinish& cb);
- void Finalize();
-
- // Get an object owned by the ::dbus::Bus object. This object
- // has methods to export DBus facing methods.
- ::dbus::ExportedObject* GetExportedObject(
- const std::string& object_path);
-
- // Exports |method_name| on |exported_object| and uses |member|
- // to handle calls.
- void ExportDBusMethod(
- ::dbus::ExportedObject* exported_object,
- const std::string& interface_name,
- const std::string& method_name,
- base::Callback<scoped_ptr<::dbus::Response>(
- ::dbus::MethodCall*)> handler);
-
- private:
- // Connects to the D-Bus system bus and exports methods.
- void InitDBus();
- void ShutDownDBus();
-
- // Callbacks for handling D-Bus signals and method calls.
- scoped_ptr<::dbus::Response> HandleTestMethod(
- ::dbus::MethodCall* method_call);
-
- scoped_refptr<::dbus::Bus> bus_; // Must outlive this object.
- dbus::ExportedObject* exported_object_; // Owned by the bus.
-
- DISALLOW_COPY_AND_ASSIGN(DBusManager);
-};
-
-} // namespace buffet
-
-#endif // BUFFET_DBUS_MANAGER_H_
diff --git a/buffet/main.cc b/buffet/main.cc
index 6d8ddc2..e48a1b0 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -12,10 +12,10 @@
#include <base/message_loop/message_loop.h>
#include <base/strings/string_util.h>
#include <base/strings/stringprintf.h>
+#include <dbus/bus.h>
#include <sysexits.h>
#include "buffet/async_event_sequencer.h"
-#include "buffet/dbus_manager.h"
#include "buffet/manager.h"
using buffet::dbus_utils::AsyncEventSequencer;
@@ -87,8 +87,6 @@
void EnterMainLoop(base::MessageLoopForIO* message_loop,
scoped_refptr<dbus::Bus> bus) {
scoped_refptr<AsyncEventSequencer> sequencer(new AsyncEventSequencer());
- buffet::DBusManager dbus_manager(bus.get());
- dbus_manager.Init(sequencer->GetHandler("DBusManager.Init() failed.", true));
buffet::Manager manager(bus.get());
manager.Init(sequencer->GetHandler("Manager.Init() failed.", true));
sequencer->OnAllTasksCompletedCall(
diff --git a/buffet/manager.cc b/buffet/manager.cc
index a6c8d9f..7e64223 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -6,13 +6,13 @@
#include <base/bind.h>
#include <base/bind_helpers.h>
+#include <base/json/json_writer.h>
+#include <dbus/bus.h>
#include <dbus/object_path.h>
#include <dbus/values_util.h>
-#include <base/json/json_writer.h>
#include "buffet/async_event_sequencer.h"
#include "buffet/dbus_constants.h"
-#include "buffet/dbus_manager.h"
#include "buffet/dbus_utils.h"
using buffet::dbus_utils::GetBadArgsError;
@@ -93,6 +93,14 @@
dbus_constants::kManagerUpdateStateMethod,
"Failed exporting UpdateState method",
true));
+ exported_object_->ExportMethod(
+ dbus_constants::kManagerInterface, dbus_constants::kManagerTestMethod,
+ dbus_utils::GetExportableDBusMethod(
+ base::Bind(&Manager::HandleTestMethod, base::Unretained(this))),
+ sequencer->GetExportHandler(
+ dbus_constants::kManagerInterface, dbus_constants::kManagerTestMethod,
+ "Failed exporting TestMethod method",
+ true));
properties_.reset(new Properties(bus_));
// TODO(wiley): Initialize all properties appropriately before claiming
// the properties interface.
@@ -242,4 +250,10 @@
return dbus::Response::FromMethodCall(method_call);
}
+scoped_ptr<dbus::Response> Manager::HandleTestMethod(
+ dbus::MethodCall* method_call) {
+ LOG(INFO) << "Received call to test method.";
+ return scoped_ptr<dbus::Response>();
+}
+
} // namespace buffet
diff --git a/buffet/manager.h b/buffet/manager.h
index ad66252..d2b2859 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -58,6 +58,9 @@
// Handles calls to org.chromium.Buffet.Manager.UpdateState().
scoped_ptr<dbus::Response> HandleUpdateState(
dbus::MethodCall* method_call);
+ // Handles calls to org.chromium.Buffet.Manager.Test()
+ scoped_ptr<::dbus::Response> HandleTestMethod(
+ ::dbus::MethodCall* method_call);
dbus::Bus* bus_;
dbus::ExportedObject* exported_object_; // weak; owned by the Bus object.