buffet: Add read-only properties with buffet config options
Added OemName, ModelName, ModelId, Name, Description, Location buffet
properties.
Added UpdateDeviceInfo to allow changing of device Name, Description and
Location.
BUG=brillo:377
TEST=FEATURE=test emerge-gizmo buffet
test_that -b $BOARD $DEV_HOST buffet_BasicDBusAPI
CQ-DEPEND=CL:266217
Change-Id: Id27f9a65194d4b7176196b599280fc4ada66eda2
Reviewed-on: https://chromium-review.googlesource.com/266206
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index ff8db89..a9601cd 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -25,6 +25,7 @@
#include "buffet/commands/command_definition.h"
#include "buffet/commands/command_manager.h"
#include "buffet/device_registration_storage_keys.h"
+#include "buffet/org.chromium.Buffet.Manager.h"
#include "buffet/states/state_manager.h"
#include "buffet/utils.h"
@@ -127,14 +128,15 @@
const std::shared_ptr<chromeos::http::Transport>& transport,
const std::shared_ptr<StorageInterface>& state_store,
bool xmpp_enabled,
- const base::Closure& on_status_changed)
+ org::chromium::Buffet::ManagerAdaptor* manager)
: transport_{transport},
storage_{state_store},
command_manager_{command_manager},
state_manager_{state_manager},
config_{std::move(config)},
xmpp_enabled_{xmpp_enabled},
- on_status_changed_{on_status_changed} {
+ manager_{manager} {
+ OnConfigChanged();
}
DeviceRegistrationInfo::~DeviceRegistrationInfo() = default;
@@ -198,6 +200,8 @@
if (dict->GetString(storage_keys::kDeviceId, &device_id))
SetDeviceId(device_id);
+ OnConfigChanged();
+
if (HaveRegistrationCredentials(nullptr)) {
// Wait a significant amount of time for local daemons to publish their
// state to Buffet before publishing it to the cloud.
@@ -455,25 +459,22 @@
if (!GetWithDefault(params, "ticket_id", "", &ticket_id)) {
chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
"missing_parameter",
- "Need ticket_id parameter for RegisterDevice().");
+ "Need ticket_id parameter for RegisterDevice()");
return std::string();
}
+
// These fields are optional, and will default to values from the manufacturer
// supplied config.
std::string name;
GetWithDefault(params, storage_keys::kName, config_->name(), &name);
- if (!name.empty())
- config_->set_name(name);
-
std::string description;
GetWithDefault(params, storage_keys::kDescription, config_->description(),
&description);
- config_->set_description(description);
-
std::string location;
GetWithDefault(params, storage_keys::kLocation, config_->location(),
&location);
- config_->set_location(location);
+ if (!UpdateDeviceInfo(name, description, location, error))
+ return std::string();
std::unique_ptr<base::DictionaryValue> device_draft =
BuildDeviceResource(error);
@@ -745,6 +746,29 @@
UpdateDeviceResource(fetch_commands_cb, handle_start_device_failure_cb);
}
+bool DeviceRegistrationInfo::UpdateDeviceInfo(const std::string& name,
+ const std::string& description,
+ const std::string& location,
+ chromeos::ErrorPtr* error) {
+ if (name.empty()) {
+ chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet,
+ "invalid_parameter", "Empty device name");
+ return false;
+ }
+ config_->set_name(name);
+ config_->set_description(description);
+ config_->set_location(location);
+
+ OnConfigChanged();
+
+ if (HaveRegistrationCredentials(nullptr)) {
+ UpdateDeviceResource(base::Bind(&base::DoNothing),
+ base::Bind(&IgnoreCloudError));
+ }
+
+ return true;
+}
+
void DeviceRegistrationInfo::UpdateCommand(
const std::string& command_id,
const base::DictionaryValue& command_patch) {
@@ -929,20 +953,28 @@
void DeviceRegistrationInfo::SetRegistrationStatus(
RegistrationStatus new_status) {
- if (new_status == registration_status_)
- return;
- VLOG(1) << "Changing registration status to " << StatusToString(new_status);
registration_status_ = new_status;
- if (!on_status_changed_.is_null())
- on_status_changed_.Run();
+ if (manager_)
+ manager_->SetStatus(StatusToString(registration_status_));
+ VLOG_IF(1, new_status != registration_status_)
+ << "Changing registration status to " << StatusToString(new_status);
}
void DeviceRegistrationInfo::SetDeviceId(const std::string& device_id) {
- if (device_id == device_id_)
- return;
device_id_ = device_id;
- if (!on_status_changed_.is_null())
- on_status_changed_.Run();
+ if (manager_)
+ manager_->SetDeviceId(device_id_);
+}
+
+void DeviceRegistrationInfo::OnConfigChanged() {
+ if (!manager_)
+ return;
+ manager_->SetOemName(config_->oem_name());
+ manager_->SetModelName(config_->model_name());
+ manager_->SetModelId(config_->model_id());
+ manager_->SetName(config_->name());
+ manager_->SetDescription(config_->description());
+ manager_->SetLocation(config_->location());
}
} // namespace buffet