buffet: Add DeviceId DBus property

Privetd needs to be notified when GCD ID is changed.

CQ-DEPEND=CL:260681
BUG=brillo:572
TEST=manual, register device using privetd, edit id in buffet.state, restart
             buffet, check if privetd has new id

Change-Id: I590ee22f134261711f78da75a4766043e0867bf5
Reviewed-on: https://chromium-review.googlesource.com/260303
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 3b9fdc9..f14ca21 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -171,8 +171,8 @@
   return BuildURL(oauth_url_, {subpath}, params);
 }
 
-std::string DeviceRegistrationInfo::GetDeviceId(chromeos::ErrorPtr* error) {
-  return CheckRegistration(error) ? device_id_ : std::string();
+const std::string& DeviceRegistrationInfo::GetDeviceId() const {
+  return device_id_;
 }
 
 bool DeviceRegistrationInfo::Load() {
@@ -233,7 +233,6 @@
   client_secret_        = client_secret;
   api_key_              = api_key;
   refresh_token_        = refresh_token;
-  device_id_            = device_id;
   oauth_url_            = oauth_url;
   service_url_          = service_url;
   device_robot_account_ = device_robot_account;
@@ -243,6 +242,8 @@
   description_          = description;
   location_             = location;
 
+  SetDeviceId(device_id);
+
   if (HaveRegistrationCredentials(nullptr)) {
     // Wait a significant amount of time for local daemons to publish their
     // state to Buffet before publishing it to the cloud.
@@ -544,14 +545,16 @@
   }
 
   std::string auth_code;
+  std::string device_id;
   if (!json_resp->GetString("robotAccountEmail", &device_robot_account_) ||
       !json_resp->GetString("robotAccountAuthorizationCode", &auth_code) ||
-      !json_resp->GetString("deviceDraft.id", &device_id_)) {
+      !json_resp->GetString("deviceDraft.id", &device_id)) {
     chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainGCD,
                            "unexpected_response",
                            "Device account missing in response");
     return std::string();
   }
+  SetDeviceId(device_id);
 
   // Now get access_token and refresh_token
   response = chromeos::http::PostFormDataAndBlock(GetOAuthURL("token"), {
@@ -994,7 +997,15 @@
   VLOG(1) << "Changing registration status to " << StatusToString(new_status);
   registration_status_ = new_status;
   if (!registration_status_handler_.is_null())
-    registration_status_handler_.Run(registration_status_);
+    registration_status_handler_.Run();
+}
+
+void DeviceRegistrationInfo::SetDeviceId(const std::string& device_id) {
+  if (device_id == device_id_)
+    return;
+  device_id_ = device_id;
+  if (!registration_status_handler_.is_null())
+    registration_status_handler_.Run();
 }
 
 }  // namespace buffet