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