buffet: Replace CallbackList with vector<Callback>
We don't remove callback at runtime, so callbacks on WeakPtr
are enough there.
BUG=brillo:697
TEST=FEATURE=test emerge-gizmo buffet
Change-Id: I02573979b208d0e9df62e59f4bb3bbec92608b71
Reviewed-on: https://chromium-review.googlesource.com/270279
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/commands/command_manager.cc b/buffet/commands/command_manager.cc
index dd90e7d..de2125b 100644
--- a/buffet/commands/command_manager.cc
+++ b/buffet/commands/command_manager.cc
@@ -53,7 +53,8 @@
chromeos::ErrorPtr* error) {
bool result =
dictionary_.LoadCommands(json, category, &base_dictionary_, error);
- on_command_changed_.Notify();
+ for (const auto& cb : on_command_changed_)
+ cb.Run();
return result;
}
@@ -128,10 +129,10 @@
// Now that we know that all the command names were valid,
// update the respective commands' visibility.
- for (CommandDefinition* def : definitions) {
+ for (CommandDefinition* def : definitions)
def->SetVisibility(visibility);
- }
- on_command_changed_.Notify();
+ for (const auto& cb : on_command_changed_)
+ cb.Run();
return true;
}
diff --git a/buffet/commands/command_manager.h b/buffet/commands/command_manager.h
index 072d055..b2b9eba 100644
--- a/buffet/commands/command_manager.h
+++ b/buffet/commands/command_manager.h
@@ -10,7 +10,6 @@
#include <vector>
#include <base/callback.h>
-#include <base/callback_list.h>
#include <base/files/file_path.h>
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
@@ -35,13 +34,6 @@
// dispatched to the device.
class CommandManager final {
public:
- // A token given by CommandManager in response to AddOnCommandDefChanged().
- // When the CallbackToken is destroyed, the registered notification
- // callback associated with it will automatically be removed from the command
- // manager's callback list.
- using CallbackToken =
- std::unique_ptr<base::CallbackList<void()>::Subscription>;
-
CommandManager();
explicit CommandManager(
const base::WeakPtr<chromeos::dbus_utils::ExportedObjectManager>&
@@ -50,9 +42,8 @@
explicit CommandManager(CommandDispachInterface* dispatch_interface);
// Sets callback which is called when command definitions is changed.
- CallbackToken AddOnCommandDefChanged(
- const base::Closure& callback) WARN_UNUSED_RESULT {
- return CallbackToken{on_command_changed_.Add(callback).release()};
+ void AddOnCommandDefChanged(const base::Closure& callback) {
+ return on_command_changed_.push_back(callback);
}
// Returns the command definitions for the device.
@@ -114,7 +105,7 @@
CommandDictionary dictionary_; // Command definitions/schemas.
CommandQueue command_queue_;
DBusCommandDispacher command_dispatcher_;
- base::CallbackList<void()> on_command_changed_;
+ std::vector<base::Callback<void()>> on_command_changed_;
DISALLOW_COPY_AND_ASSIGN(CommandManager);
};
diff --git a/buffet/commands/command_manager_unittest.cc b/buffet/commands/command_manager_unittest.cc
index 5b45cee..76a3246 100644
--- a/buffet/commands/command_manager_unittest.cc
+++ b/buffet/commands/command_manager_unittest.cc
@@ -164,7 +164,7 @@
CommandManager manager;
int update_count = 0;
auto on_command_change = [&update_count]() { update_count++; };
- auto token = manager.AddOnCommandDefChanged(base::Bind(on_command_change));
+ manager.AddOnCommandDefChanged(base::Bind(on_command_change));
auto json = CreateDictionaryValue(R"({
'foo': {
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 3ed70a8..0ef58d7 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -141,7 +141,7 @@
xmpp_enabled_{xmpp_enabled},
manager_{manager} {
OnConfigChanged();
- command_changed_callback_token_ = command_manager_->AddOnCommandDefChanged(
+ command_manager_->AddOnCommandDefChanged(
base::Bind(&DeviceRegistrationInfo::OnCommandDefsChanged,
weak_factory_.GetWeakPtr()));
}
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 8f74d2a..a762758 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -255,10 +255,6 @@
// Device state manager.
std::shared_ptr<StateManager> state_manager_;
- // Token given by Command Manager to track the registered Command Definition
- // change callback.
- CommandManager::CallbackToken command_changed_callback_token_;
-
std::unique_ptr<BuffetConfig> config_;
const bool xmpp_enabled_;
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 82ee7a8..a5fff7d 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -53,8 +53,8 @@
const AsyncEventSequencer::CompletionAction& cb) {
command_manager_ =
std::make_shared<CommandManager>(dbus_object_.GetObjectManager());
- command_changed_callback_token_ = command_manager_->AddOnCommandDefChanged(
- base::Bind(&Manager::OnCommandDefsChanged, base::Unretained(this)));
+ command_manager_->AddOnCommandDefChanged(base::Bind(
+ &Manager::OnCommandDefsChanged, weak_ptr_factory_.GetWeakPtr()));
command_manager_->Startup(base::FilePath{"/etc/buffet"},
test_definitions_path);
state_change_queue_ = std::unique_ptr<StateChangeQueue>(
diff --git a/buffet/manager.h b/buffet/manager.h
index cc3a114..a685a05 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -89,9 +89,7 @@
std::shared_ptr<StateManager> state_manager_;
std::unique_ptr<DeviceRegistrationInfo> device_info_;
- // Token given by Command Manager to track the registered Command Definition
- // change callback.
- CommandManager::CallbackToken command_changed_callback_token_;
+ base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(Manager);
};