update_engine: Add newer DBus method and signal for GetStatus
The current GetStatus function is pretty non-extendable and there has
been use cases where we wanted to add arguments to it but it was quite
hard to do specially changes in Chrome.
This CL adds a new DBus Method GetStatusAdvanced and Signal
UpdateStatusAdvanced which use a protobuf for communicating dbus
messages. This allows us to extend the protobuf without much effort in
the future.
BUG=chromium:977320
TEST=unittests, precq
Cq-Depend: chromium:1672684, chrome-internal:1424559
Change-Id: Ia93ed189e7561ca18c63b5ded81826bc9b1cff12
Reviewed-on: https://chromium-review.googlesource.com/1669974
Tested-by: Amin Hassani <ahassani@chromium.org>
Commit-Ready: Amin Hassani <ahassani@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/dbus_service.cc b/dbus_service.cc
index 2a5662f..105d581 100644
--- a/dbus_service.cc
+++ b/dbus_service.cc
@@ -23,6 +23,7 @@
#include <update_engine/dbus-constants.h>
#include "update_engine/dbus_connection.h"
+#include "update_engine/proto_bindings/update_engine.pb.h"
#include "update_engine/update_status_utils.h"
namespace chromeos_update_engine {
@@ -31,8 +32,21 @@
using chromeos_update_engine::UpdateEngineService;
using std::string;
using std::vector;
+using update_engine::StatusResult;
using update_engine::UpdateEngineStatus;
+namespace {
+// Converts the internal |UpdateEngineStatus| to the protobuf |StatusResult|.
+void ConvertToStatusResult(const UpdateEngineStatus& ue_status,
+ StatusResult* out_status) {
+ out_status->set_last_checked_time(ue_status.last_checked_time);
+ out_status->set_progress(ue_status.progress);
+ out_status->set_current_operation(UpdateStatusToString(ue_status.status));
+ out_status->set_new_version(ue_status.new_version);
+ out_status->set_new_size(ue_status.new_size_bytes);
+}
+} // namespace
+
DBusUpdateEngineService::DBusUpdateEngineService(SystemState* system_state)
: common_(new UpdateEngineService{system_state}) {}
@@ -116,6 +130,17 @@
return true;
}
+bool DBusUpdateEngineService::GetStatusAdvanced(ErrorPtr* error,
+ StatusResult* out_status) {
+ UpdateEngineStatus status;
+ if (!common_->GetStatus(error, &status)) {
+ return false;
+ }
+
+ ConvertToStatusResult(status, out_status);
+ return true;
+}
+
bool DBusUpdateEngineService::RebootIfNeeded(ErrorPtr* error) {
return common_->RebootIfNeeded(error);
}
@@ -216,11 +241,18 @@
void UpdateEngineAdaptor::SendStatusUpdate(
const UpdateEngineStatus& update_engine_status) {
- SendStatusUpdateSignal(update_engine_status.last_checked_time,
- update_engine_status.progress,
- UpdateStatusToString(update_engine_status.status),
- update_engine_status.new_version,
- update_engine_status.new_size_bytes);
+ StatusResult status;
+ ConvertToStatusResult(update_engine_status, &status);
+
+ // TODO(crbug.com/977320): Deprecate |StatusUpdate| signal.
+ SendStatusUpdateSignal(status.last_checked_time(),
+ status.progress(),
+ status.current_operation(),
+ status.new_version(),
+ status.new_size());
+
+ // Send |StatusUpdateAdvanced| signal.
+ SendStatusUpdateAdvancedSignal(status);
}
} // namespace chromeos_update_engine