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); };