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.