libweave: Move CommandObserver into public libweave interface Clients will need to listen for Command changes. BUG=brillo:1245 TEST='FEATURES=test emerge-gizmo buffet' Change-Id: I1ba7339127f9d2789a0e09559a875cdc4ecb8df2 Reviewed-on: https://chromium-review.googlesource.com/287069 Tested-by: Vitaly Buka <vitalybuka@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/include/weave/command.h b/libweave/include/weave/command.h index 0df4878..c27b49d 100644 --- a/libweave/include/weave/command.h +++ b/libweave/include/weave/command.h
@@ -12,9 +12,24 @@ class Command { public: + // This interface lets the command to notify clients about changes. + class Observer { + public: + virtual ~Observer() = default; + + virtual void OnResultsChanged() = 0; + virtual void OnStatusChanged() = 0; + virtual void OnProgressChanged() = 0; + virtual void OnCommandDestroyed() = 0; + }; + // Returns JSON representation of the command. virtual std::unique_ptr<base::DictionaryValue> ToJson() const = 0; + // Adds an observer for this command. The observer object is not owned by this + // class. + virtual void AddObserver(Observer* observer) = 0; + protected: virtual ~Command() = default; };
diff --git a/libweave/src/commands/cloud_command_proxy.h b/libweave/src/commands/cloud_command_proxy.h index 7998df6..db03885 100644 --- a/libweave/src/commands/cloud_command_proxy.h +++ b/libweave/src/commands/cloud_command_proxy.h
@@ -17,15 +17,15 @@ #include <chromeos/backoff_entry.h> #include "libweave/src/commands/cloud_command_update_interface.h" -#include "libweave/src/commands/command_proxy_interface.h" #include "libweave/src/states/state_change_queue_interface.h" +#include "weave/command.h" namespace weave { class CommandInstance; // Command proxy which publishes command updates to the cloud. -class CloudCommandProxy final : public CommandObserver { +class CloudCommandProxy final : public Command::Observer { public: CloudCommandProxy(CommandInstance* command_instance, CloudCommandUpdateInterface* cloud_command_updater,
diff --git a/libweave/src/commands/command_instance.cc b/libweave/src/commands/command_instance.cc index 2cfe3d5..37a1ddc 100644 --- a/libweave/src/commands/command_instance.cc +++ b/libweave/src/commands/command_instance.cc
@@ -10,7 +10,6 @@ #include "libweave/src/commands/command_definition.h" #include "libweave/src/commands/command_dictionary.h" -#include "libweave/src/commands/command_proxy_interface.h" #include "libweave/src/commands/command_queue.h" #include "libweave/src/commands/prop_types.h" #include "libweave/src/commands/schema_constants.h" @@ -172,7 +171,7 @@ return json; } -void CommandInstance::AddObserver(CommandObserver* observer) { +void CommandInstance::AddObserver(Observer* observer) { observers_.push_back(observer); }
diff --git a/libweave/src/commands/command_instance.h b/libweave/src/commands/command_instance.h index d80e0b9..a64fc7c 100644 --- a/libweave/src/commands/command_instance.h +++ b/libweave/src/commands/command_instance.h
@@ -41,6 +41,7 @@ // Command overrides. std::unique_ptr<base::DictionaryValue> ToJson() const override; + void AddObserver(Observer* observer) override; // Returns the full command ID. const std::string& GetID() const { return id_; } @@ -81,9 +82,6 @@ // Sets the command ID (normally done by CommandQueue when the command // instance is added to it). void SetID(const std::string& id) { id_ = id; } - // Adds a observer for this command. The observer object is not owned by this - // class. - void AddObserver(CommandObserver* observer); // Sets the pointer to queue this command is part of. void SetCommandQueue(CommandQueue* queue) { queue_ = queue; } @@ -142,7 +140,7 @@ // Current command status. std::string status_ = kStatusQueued; // Command observer for the command. - std::vector<CommandObserver*> observers_; + std::vector<Observer*> observers_; // Pointer to the command queue this command instance is added to. // The queue owns the command instance, so it outlives this object. CommandQueue* queue_ = nullptr;
diff --git a/libweave/src/commands/command_proxy_interface.h b/libweave/src/commands/command_proxy_interface.h deleted file mode 100644 index 3aeb9bb..0000000 --- a/libweave/src/commands/command_proxy_interface.h +++ /dev/null
@@ -1,29 +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 LIBWEAVE_SRC_COMMANDS_COMMAND_PROXY_INTERFACE_H_ -#define LIBWEAVE_SRC_COMMANDS_COMMAND_PROXY_INTERFACE_H_ - -#include <string> - -#include "libweave/src/commands/schema_utils.h" - -namespace weave { - -// This interface lets the command instance to update its proxy of command -// state changes, so that the proxy can then notify clients of the changes over -// their supported protocol (e.g. D-Bus). -class CommandObserver { - public: - virtual ~CommandObserver() = default; - - virtual void OnResultsChanged() = 0; - virtual void OnStatusChanged() = 0; - virtual void OnProgressChanged() = 0; - virtual void OnCommandDestroyed() = 0; -}; - -} // namespace weave - -#endif // LIBWEAVE_SRC_COMMANDS_COMMAND_PROXY_INTERFACE_H_
diff --git a/libweave/src/commands/dbus_command_proxy.h b/libweave/src/commands/dbus_command_proxy.h index 3f802ed..62225c7 100644 --- a/libweave/src/commands/dbus_command_proxy.h +++ b/libweave/src/commands/dbus_command_proxy.h
@@ -12,7 +12,7 @@ #include <chromeos/dbus/dbus_object.h> #include "buffet/org.chromium.Buffet.Command.h" -#include "libweave/src/commands/command_proxy_interface.h" +#include "weave/command.h" namespace chromeos { namespace dbus_utils { @@ -24,7 +24,7 @@ class CommandInstance; -class DBusCommandProxy : public CommandObserver, +class DBusCommandProxy : public Command::Observer, public org::chromium::Buffet::CommandInterface { public: DBusCommandProxy(chromeos::dbus_utils::ExportedObjectManager* object_manager,
diff --git a/libweave/src/commands/dbus_command_proxy_unittest.cc b/libweave/src/commands/dbus_command_proxy_unittest.cc index 32a36b6..ed51387 100644 --- a/libweave/src/commands/dbus_command_proxy_unittest.cc +++ b/libweave/src/commands/dbus_command_proxy_unittest.cc
@@ -109,7 +109,7 @@ EXPECT_CALL(*mock_exported_object_command_, ExportMethod(_, _, _, _)) .Times(AnyNumber()); - std::unique_ptr<CommandObserver> command_proxy( + std::unique_ptr<Command::Observer> command_proxy( new DBusCommandProxy(nullptr, bus_, command_instance_.get(), cmd_path)); command_instance_->AddObserver(command_proxy.release()); GetCommandProxy()->RegisterAsync(
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc index fdc933c..5979ac6 100644 --- a/libweave/src/device_registration_info.cc +++ b/libweave/src/device_registration_info.cc
@@ -938,7 +938,7 @@ << "' arrived, ID: " << command_instance->GetID(); std::unique_ptr<chromeos::BackoffEntry> backoff_entry{ new chromeos::BackoffEntry{cloud_backoff_policy_.get()}}; - std::unique_ptr<CommandObserver> cloud_proxy{new CloudCommandProxy{ + std::unique_ptr<Command::Observer> cloud_proxy{new CloudCommandProxy{ command_instance.get(), this, state_manager_->GetStateChangeQueue(), std::move(backoff_entry), task_runner_}}; command_instance->AddObserver(cloud_proxy.release());