Remove weave::Cloud interface

All methods were moved into weave::Device

BUG:24267885
Change-Id: I4809df462b4798dcf2e4ea6233ce3f25fbe73517
Reviewed-on: https://weave-review.googlesource.com/1219
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/examples/ubuntu/main.cc b/libweave/examples/ubuntu/main.cc
index 11c3fac..cdeae8b 100644
--- a/libweave/examples/ubuntu/main.cc
+++ b/libweave/examples/ubuntu/main.cc
@@ -113,8 +113,7 @@
 
   if (!registration_ticket.empty()) {
     weave::ErrorPtr error;
-    auto device_id =
-        device->GetCloud()->RegisterDevice(registration_ticket, &error);
+    auto device_id = device->Register(registration_ticket, &error);
     if (error != nullptr) {
       LOG(ERROR) << "Fail to register device: " << error->GetMessage();
     } else {
diff --git a/libweave/include/weave/cloud.h b/libweave/include/weave/cloud.h
deleted file mode 100644
index 3cf1318..0000000
--- a/libweave/include/weave/cloud.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2015 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_INCLUDE_WEAVE_CLOUD_H_
-#define LIBWEAVE_INCLUDE_WEAVE_CLOUD_H_
-
-#include <string>
-
-#include <base/callback.h>
-#include <base/values.h>
-#include <weave/error.h>
-#include <weave/settings.h>
-
-namespace weave {
-
-// See the DBus interface XML file for complete descriptions of these states.
-enum class RegistrationStatus {
-  kUnconfigured,        // We have no credentials.
-  kConnecting,          // We have credentials but not yet connected.
-  kConnected,           // We're registered and connected to the cloud.
-  kInvalidCredentials,  // Our registration has been revoked.
-};
-
-class Cloud {
- public:
-  using OnRegistrationChangedCallback =
-      base::Callback<void(RegistrationStatus satus)>;
-
-  // Sets callback which is called when registration state is changed.
-  virtual void AddOnRegistrationChangedCallback(
-      const OnRegistrationChangedCallback& callback) = 0;
-
-  // Registers the device.
-  // Returns a device ID on success.
-  virtual std::string RegisterDevice(const std::string& ticket_id,
-                                     ErrorPtr* error) = 0;
-
- protected:
-  virtual ~Cloud() = default;
-};
-
-}  // namespace weave
-
-#endif  // LIBWEAVE_INCLUDE_WEAVE_CLOUD_H_
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 5517d10..260790f 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -9,7 +9,6 @@
 #include <set>
 #include <string>
 
-#include <weave/cloud.h>
 #include <weave/commands.h>
 #include <weave/export.h>
 #include <weave/provider/bluetooth.h>
@@ -24,6 +23,14 @@
 
 namespace weave {
 
+// States of Gcd connection.
+enum class GcdState {
+  kUnconfigured,        // We have no credentials.
+  kConnecting,          // We have credentials but not yet connected.
+  kConnected,           // We're registered and connected to the cloud.
+  kInvalidCredentials,  // Our registration has been revoked.
+};
+
 class Device {
  public:
   virtual ~Device() = default;
@@ -49,7 +56,20 @@
 
   virtual Commands* GetCommands() = 0;
   virtual State* GetState() = 0;
-  virtual Cloud* GetCloud() = 0;
+
+  // Returns current state of GCD connection.
+  virtual GcdState GetGcdState() const = 0;
+
+  // Callback type for GcdStatusCallback.
+  using GcdStateChangedCallback = base::Callback<void(GcdState state)>;
+  // Sets callback which is called when state of server connection changed.
+  virtual void AddGcdStateChangedCallback(
+      const GcdStateChangedCallback& callback) = 0;
+
+  // Registers the device. Returns a device ID on success.
+  // This is testing method and should not be used by applications.
+  virtual std::string Register(const std::string& ticket_id,
+                               ErrorPtr* error) = 0;
 
   // Handler should display pin code to the user.
   using PairingBeginCallback =
diff --git a/libweave/include/weave/stream.h b/libweave/include/weave/stream.h
index f36e113..9d4d6fd 100644
--- a/libweave/include/weave/stream.h
+++ b/libweave/include/weave/stream.h
@@ -17,7 +17,7 @@
  public:
   virtual ~InputStream() = default;
 
-  // Callbacks types for Read.
+  // Callback type for Read.
   using ReadSuccessCallback = base::Callback<void(size_t size)>;
 
   // Implementation should return immediately and post either success_callback
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index cec5e16..5a8e630 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -84,10 +84,6 @@
   return device_info_->GetMutableConfig();
 }
 
-Cloud* DeviceManager::GetCloud() {
-  return device_info_.get();
-}
-
 void DeviceManager::StartPrivet(provider::TaskRunner* task_runner,
                                 provider::Network* network,
                                 provider::DnsServiceDiscovery* dns_sd,
@@ -100,6 +96,20 @@
                  state_manager_.get());
 }
 
+GcdState DeviceManager::GetGcdState() const {
+  return device_info_->GetGcdState();
+}
+
+void DeviceManager::AddGcdStateChangedCallback(
+    const GcdStateChangedCallback& callback) {
+  device_info_->AddGcdStateChangedCallback(callback);
+}
+
+std::string DeviceManager::Register(const std::string& ticket_id,
+                                    ErrorPtr* error) {
+  return device_info_->RegisterDevice(ticket_id, error);
+}
+
 void DeviceManager::AddPairingChangedCallbacks(
     const PairingBeginCallback& begin_callback,
     const PairingEndCallback& end_callback) {
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h
index 6f68054..787a7be 100644
--- a/libweave/src/device_manager.h
+++ b/libweave/src/device_manager.h
@@ -40,7 +40,13 @@
       const SettingsChangedCallback& callback) override;
   Commands* GetCommands() override;
   State* GetState() override;
-  Cloud* GetCloud() override;
+  std::string RegisterDevice(const std::string& ticket_id,
+                             ErrorPtr* error) override;
+
+  GcdState GetGcdState() const override;
+  void AddGcdStateChangedCallback(
+      const GcdStateChangedCallback& callback) override;
+
   void AddPairingChangedCallbacks(
       const PairingBeginCallback& begin_callback,
       const PairingEndCallback& end_callback) override;
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc
index 1e5566a..610871f 100644
--- a/libweave/src/device_registration_info.cc
+++ b/libweave/src/device_registration_info.cc
@@ -284,7 +284,7 @@
 
 void DeviceRegistrationInfo::ScheduleCloudConnection(
     const base::TimeDelta& delay) {
-  SetRegistrationStatus(RegistrationStatus::kConnecting);
+  SetGcdState(GcdState::kConnecting);
   if (!task_runner_)
     return;  // Assume we're in test
   task_runner_->PostDelayedTask(
@@ -322,7 +322,7 @@
     }
     if (error_code == "invalid_grant") {
       LOG(INFO) << "The device's registration has been revoked.";
-      SetRegistrationStatus(RegistrationStatus::kInvalidCredentials);
+      SetGcdState(GcdState::kInvalidCredentials);
     }
     // I have never actually seen an error_description returned.
     if (!resp->GetString("error_description", &error_message)) {
@@ -470,10 +470,10 @@
   primary_notification_channel_->Start(this);
 }
 
-void DeviceRegistrationInfo::AddOnRegistrationChangedCallback(
-    const OnRegistrationChangedCallback& callback) {
-  on_registration_changed_.push_back(callback);
-  callback.Run(registration_status_);
+void DeviceRegistrationInfo::AddGcdStateChangedCallback(
+    const Device::GcdStateChangedCallback& callback) {
+  gcd_state_changed_callbacks_.push_back(callback);
+  callback.Run(gcd_state_);
 }
 
 std::unique_ptr<base::DictionaryValue>
@@ -730,7 +730,7 @@
   }
 
   cloud_backoff_entry_->InformOfRequest(true);
-  SetRegistrationStatus(RegistrationStatus::kConnected);
+  SetGcdState(GcdState::kConnected);
   data->success_callback.Run(*json_resp);
 }
 
@@ -745,7 +745,7 @@
 void DeviceRegistrationInfo::RetryCloudRequest(
     const std::shared_ptr<const CloudRequestData>& data) {
   // TODO(avakulenko): Tie connecting/connected status to XMPP channel instead.
-  SetRegistrationStatus(RegistrationStatus::kConnecting);
+  SetGcdState(GcdState::kConnecting);
   cloud_backoff_entry_->InformOfRequest(false);
   SendCloudRequest(data);
 }
@@ -1176,13 +1176,12 @@
   device_state_update_pending_ = false;
 }
 
-void DeviceRegistrationInfo::SetRegistrationStatus(
-    RegistrationStatus new_status) {
-  VLOG_IF(1, new_status != registration_status_)
-      << "Changing registration status to " << static_cast<int>(new_status);
-  registration_status_ = new_status;
-  for (const auto& cb : on_registration_changed_)
-    cb.Run(registration_status_);
+void DeviceRegistrationInfo::SetGcdState(GcdState new_state) {
+  VLOG_IF(1, new_state != gcd_state_) << "Changing registration status to "
+                                      << EnumToString(new_state);
+  gcd_state_ = new_state;
+  for (const auto& cb : gcd_state_changed_callbacks_)
+    cb.Run(gcd_state_);
 }
 
 void DeviceRegistrationInfo::OnCommandDefsChanged() {
@@ -1297,7 +1296,7 @@
     pull_channel_.reset();
   }
   notification_channel_starting_ = false;
-  SetRegistrationStatus(RegistrationStatus::kInvalidCredentials);
+  SetGcdState(GcdState::kInvalidCredentials);
 }
 
 }  // namespace weave
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h
index 38b324b..c797102 100644
--- a/libweave/src/device_registration_info.h
+++ b/libweave/src/device_registration_info.h
@@ -15,8 +15,8 @@
 #include <base/macros.h>
 #include <base/memory/weak_ptr.h>
 #include <base/time/time.h>
+#include <weave/device.h>
 #include <weave/error.h>
-#include <weave/cloud.h>
 #include <weave/provider/http_client.h>
 
 #include "src/backoff_entry.h"
@@ -47,8 +47,7 @@
 extern const char kErrorDomainGCDServer[];
 
 // The DeviceRegistrationInfo class represents device registration information.
-class DeviceRegistrationInfo : public Cloud,
-                               public NotificationDelegate,
+class DeviceRegistrationInfo : public NotificationDelegate,
                                public CloudCommandUpdateInterface {
  public:
   using CloudRequestCallback =
@@ -63,11 +62,9 @@
 
   ~DeviceRegistrationInfo() override;
 
-  // Cloud overrides.
-  void AddOnRegistrationChangedCallback(
-      const OnRegistrationChangedCallback& callback) override;
-  std::string RegisterDevice(const std::string& ticket_id,
-                             ErrorPtr* error) override;
+  void AddGcdStateChangedCallback(
+      const Device::GcdStateChangedCallback& callback);
+  std::string RegisterDevice(const std::string& ticket_id, ErrorPtr* error);
 
   void UpdateDeviceInfo(const std::string& name,
                         const std::string& description,
@@ -128,6 +125,8 @@
   const Config::Settings& GetSettings() const { return config_->GetSettings(); }
   Config* GetMutableConfig() { return config_.get(); }
 
+  GcdState GetGcdState() const { return gcd_state_; }
+
  private:
   friend class DeviceRegistrationInfoTest;
 
@@ -261,7 +260,7 @@
   // for all supported commands and current device state.
   std::unique_ptr<base::DictionaryValue> BuildDeviceResource(ErrorPtr* error);
 
-  void SetRegistrationStatus(RegistrationStatus new_status);
+  void SetGcdState(GcdState new_state);
   void SetDeviceId(const std::string& cloud_id);
 
   // Callback called when command definitions are changed to re-publish new CDD.
@@ -330,10 +329,10 @@
 
   provider::Network* network_{nullptr};
 
-  // Tracks our current registration status.
-  RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured};
+  // Tracks our GCD state.
+  GcdState gcd_state_{GcdState::kUnconfigured};
 
-  std::vector<OnRegistrationChangedCallback> on_registration_changed_;
+  std::vector<Device::GcdStateChangedCallback> gcd_state_changed_callbacks_;
 
   base::WeakPtrFactory<DeviceRegistrationInfo> weak_factory_{this};
   DISALLOW_COPY_AND_ASSIGN(DeviceRegistrationInfo);
diff --git a/libweave/src/device_registration_info_unittest.cc b/libweave/src/device_registration_info_unittest.cc
index e17ecbe..34ea31a 100644
--- a/libweave/src/device_registration_info_unittest.cc
+++ b/libweave/src/device_registration_info_unittest.cc
@@ -180,9 +180,7 @@
 
   void SetAccessToken() { dev_reg_->access_token_ = test_data::kAccessToken; }
 
-  RegistrationStatus GetRegistrationStatus() const {
-    return dev_reg_->registration_status_;
-  }
+  GcdState GetGcdState() const { return dev_reg_->GetGcdState(); }
 
   provider::test::MockConfigStore config_store_;
   StrictMock<MockHttpClient> http_client_;
@@ -256,7 +254,7 @@
 
 TEST_F(DeviceRegistrationInfoTest, CheckAuthenticationFailure) {
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   EXPECT_CALL(http_client_,
               MockSendRequest(http::kPost, dev_reg_->GetOAuthURL("token"),
@@ -277,12 +275,12 @@
   ErrorPtr error;
   EXPECT_FALSE(RefreshAccessToken(&error));
   EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "unable_to_authenticate"));
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, CheckDeregistration) {
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   EXPECT_CALL(http_client_,
               MockSendRequest(http::kPost, dev_reg_->GetOAuthURL("token"),
@@ -303,7 +301,7 @@
   ErrorPtr error;
   EXPECT_FALSE(RefreshAccessToken(&error));
   EXPECT_TRUE(error->HasError(kErrorDomainOAuth2, "invalid_grant"));
-  EXPECT_EQ(RegistrationStatus::kInvalidCredentials, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kInvalidCredentials, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, GetDeviceInfo) {
@@ -486,7 +484,7 @@
       dev_reg_->RegisterDevice(test_data::kClaimTicketId, nullptr);
 
   EXPECT_EQ(test_data::kDeviceId, cloud_id);
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 
   // Validate the device info saved to storage...
   EXPECT_EQ(test_data::kDeviceId, dev_reg_->GetSettings().cloud_id);
@@ -498,10 +496,10 @@
 TEST_F(DeviceRegistrationInfoTest, OOBRegistrationStatus) {
   // After we've been initialized, we should be either offline or
   // unregistered, depending on whether or not we've found credentials.
-  EXPECT_EQ(RegistrationStatus::kUnconfigured, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kUnconfigured, GetGcdState());
   // Put some credentials into our state, make sure we call that offline.
   ReloadSettings();
-  EXPECT_EQ(RegistrationStatus::kConnecting, GetRegistrationStatus());
+  EXPECT_EQ(GcdState::kConnecting, GetGcdState());
 }
 
 TEST_F(DeviceRegistrationInfoTest, UpdateCommand) {
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc
index 217a4ed..2a60de0 100644
--- a/libweave/src/privet/cloud_delegate.cc
+++ b/libweave/src/privet/cloud_delegate.cc
@@ -49,7 +49,7 @@
         state_manager_{state_manager} {
     device_->GetMutableConfig()->AddOnChangedCallback(base::Bind(
         &CloudDelegateImpl::OnConfigChanged, weak_factory_.GetWeakPtr()));
-    device_->AddOnRegistrationChangedCallback(base::Bind(
+    device_->AddGcdStateChangedCallback(base::Bind(
         &CloudDelegateImpl::OnRegistrationChanged, weak_factory_.GetWeakPtr()));
 
     command_manager_->AddOnCommandDefChanged(base::Bind(
@@ -234,13 +234,13 @@
 
   void OnConfigChanged(const Settings&) { NotifyOnDeviceInfoChanged(); }
 
-  void OnRegistrationChanged(RegistrationStatus status) {
-    if (status == RegistrationStatus::kUnconfigured) {
+  void OnRegistrationChanged(GcdState status) {
+    if (status == GcdState::kUnconfigured) {
       connection_state_ = ConnectionState{ConnectionState::kUnconfigured};
-    } else if (status == RegistrationStatus::kConnecting) {
+    } else if (status == GcdState::kConnecting) {
       // TODO(vitalybuka): Find conditions for kOffline.
       connection_state_ = ConnectionState{ConnectionState::kConnecting};
-    } else if (status == RegistrationStatus::kConnected) {
+    } else if (status == GcdState::kConnected) {
       connection_state_ = ConnectionState{ConnectionState::kOnline};
     } else {
       ErrorPtr error;
diff --git a/libweave/src/registration_status.cc b/libweave/src/registration_status.cc
index 35f93c4..167eb0f 100644
--- a/libweave/src/registration_status.cc
+++ b/libweave/src/registration_status.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <weave/cloud.h>
+#include <weave/device.h>
 #include <weave/enum_to_string.h>
 #include <weave/export.h>
 
@@ -10,17 +10,17 @@
 
 namespace {
 
-const EnumToStringMap<RegistrationStatus>::Map kMap[] = {
-    {RegistrationStatus::kUnconfigured, "unconfigured"},
-    {RegistrationStatus::kConnecting, "connecting"},
-    {RegistrationStatus::kConnected, "connected"},
-    {RegistrationStatus::kInvalidCredentials, "invalid_credentials"},
+const EnumToStringMap<GcdState>::Map kMap[] = {
+    {GcdState::kUnconfigured, "unconfigured"},
+    {GcdState::kConnecting, "connecting"},
+    {GcdState::kConnected, "connected"},
+    {GcdState::kInvalidCredentials, "invalid_credentials"},
 };
 
 }  // namespace
 
 template <>
-LIBWEAVE_EXPORT EnumToStringMap<RegistrationStatus>::EnumToStringMap()
+LIBWEAVE_EXPORT EnumToStringMap<GcdState>::EnumToStringMap()
     : EnumToStringMap(kMap) {}
 
 }  // namespace weave
diff --git a/libweave/src/weave_unittest.cc b/libweave/src/weave_unittest.cc
index 8250d8c..e211392 100644
--- a/libweave/src/weave_unittest.cc
+++ b/libweave/src/weave_unittest.cc
@@ -238,9 +238,6 @@
     device_->Start(&config_store_, &task_runner_, &http_client_, &network_,
                    &dns_sd_, &http_server_, &wifi_, &bluetooth_);
 
-    cloud_ = device_->GetCloud();
-    ASSERT_TRUE(cloud_);
-
     for (const auto& cb : http_server_changed_cb_)
       cb.Run(http_server_);
 
@@ -270,8 +267,6 @@
 
   std::vector<provider::Network::ConnectionChangedCallback> network_callbacks_;
 
-  weave::Cloud* cloud_{nullptr};
-
   std::unique_ptr<weave::Device> device_;
 };
 
@@ -341,7 +336,7 @@
 
   InitDnsSdPublishing(true, "DB");
 
-  EXPECT_EQ("CLOUD_ID", cloud_->RegisterDevice("TICKET_ID", nullptr));
+  EXPECT_EQ("CLOUD_ID", device_->RegisterDevice("TICKET_ID", nullptr));
 }
 
 class WeaveWiFiSetupTest : public WeaveTest {