b15258c5091c87a384bdd347d2aa3170d2cad282 - chromium/src

1,271 views
Skip to first unread message

gavi...@chromium.org

unread,
Mar 1, 2022, 6:47:21 PM3/1/22
to chromium...@chromium.org
commit b15258c5091c87a384bdd347d2aa3170d2cad282
Author: Gavin Williams <gavi...@chromium.org>
AuthorDate: Tue Mar 01 23:46:25 2022
Commit: Chromium LUCI CQ <chromiu...@luci-project-accounts.iam.gserviceaccount.com>
CommitDate: Tue Mar 01 23:46:25 2022

Shimless: Add finalization error enum

Include the new finalization error from RMAD.proto into the
`OnFinalizationUpdated()` mojo response.

Bug: 1198187, b:215620278
Change-Id: Ibc92a8d9ce317a43856f859d25ba8538e0bec1a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3491660
Reviewed-by: Alex Gough <aj...@chromium.org>
Reviewed-by: Michael Checo <michae...@google.com>
Reviewed-by: Jimmy Gong <jimmy...@chromium.org>
Commit-Queue: Gavin Williams <gavi...@chromium.org>
Cr-Commit-Position: refs/heads/main@{#976471}

diff --git a/ash/webui/shimless_rma/backend/shimless_rma_service.cc b/ash/webui/shimless_rma/backend/shimless_rma_service.cc
index b8c0724..d39a3edc 100644
--- a/ash/webui/shimless_rma/backend/shimless_rma_service.cc
+++ b/ash/webui/shimless_rma/backend/shimless_rma_service.cc
@@ -952,8 +952,8 @@
const rmad::FinalizeStatus& status) {
last_finalization_progress_ = status;
if (finalization_observer_.is_bound()) {
- finalization_observer_->OnFinalizationUpdated(status.status(),
- status.progress());
+ finalization_observer_->OnFinalizationUpdated(
+ status.status(), status.progress(), status.error());
}
}

@@ -1034,7 +1034,8 @@
if (last_finalization_progress_) {
finalization_observer_->OnFinalizationUpdated(
last_finalization_progress_->status(),
- last_finalization_progress_->progress());
+ last_finalization_progress_->progress(),
+ last_finalization_progress_->error());
}
}

diff --git a/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc b/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc
index 994c5b1..ef6eae9c 100644
--- a/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc
+++ b/ash/webui/shimless_rma/backend/shimless_rma_service_unittest.cc
@@ -3100,13 +3100,16 @@
struct Observation {
rmad::FinalizeStatus::Status status;
float progress;
+ rmad::FinalizeStatus::Error error;
};

void OnFinalizationUpdated(rmad::FinalizeStatus::Status status,
- float progress) override {
+ float progress,
+ rmad::FinalizeStatus::Error error) override {
Observation observation;
observation.status = status;
observation.progress = progress;
+ observation.error = error;
observations.push_back(observation);
}

@@ -3119,27 +3122,39 @@
shimless_rma_provider_->ObserveFinalizationStatus(
fake_observer.receiver.BindNewPipeAndPassRemote());
base::RunLoop run_loop;
+
+ const rmad::FinalizeStatus::Status expected_status =
+ rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_IN_PROGRESS;
+ const float expected_progress = 0.5;
+ const rmad::FinalizeStatus::Error expected_error =
+ rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CANNOT_ENABLE_HWWP;
fake_rmad_client_()->TriggerFinalizationProgressObservation(
- rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_IN_PROGRESS, 0.5);
+ expected_status, expected_progress, expected_error);
run_loop.RunUntilIdle();
EXPECT_EQ(fake_observer.observations.size(), 1UL);
- EXPECT_EQ(fake_observer.observations[0].status,
- rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_IN_PROGRESS);
- EXPECT_EQ(fake_observer.observations[0].progress, 0.5f);
+ EXPECT_EQ(fake_observer.observations[0].status, expected_status);
+ EXPECT_EQ(fake_observer.observations[0].progress, expected_progress);
+ EXPECT_EQ(fake_observer.observations[0].error, expected_error);
}

TEST_F(ShimlessRmaServiceTest, ObserveFinalizationAfterSignal) {
- fake_rmad_client_()->TriggerFinalizationProgressObservation(
- rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_FAILED_BLOCKING, 0.75);
FakeFinalizationObserver fake_observer;
shimless_rma_provider_->ObserveFinalizationStatus(
fake_observer.receiver.BindNewPipeAndPassRemote());
base::RunLoop run_loop;
+
+ const rmad::FinalizeStatus::Status expected_status =
+ rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_FAILED_BLOCKING;
+ const float expected_progress = 0.75;
+ const rmad::FinalizeStatus::Error expected_error =
+ rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CR50;
+ fake_rmad_client_()->TriggerFinalizationProgressObservation(
+ expected_status, expected_progress, expected_error);
run_loop.RunUntilIdle();
EXPECT_EQ(fake_observer.observations.size(), 1UL);
- EXPECT_EQ(fake_observer.observations[0].status,
- rmad::FinalizeStatus::RMAD_FINALIZE_STATUS_FAILED_BLOCKING);
- EXPECT_EQ(fake_observer.observations[0].progress, 0.75f);
+ EXPECT_EQ(fake_observer.observations[0].status, expected_status);
+ EXPECT_EQ(fake_observer.observations[0].progress, expected_progress);
+ EXPECT_EQ(fake_observer.observations[0].error, expected_error);
}

TEST_F(ShimlessRmaServiceTest, GetWriteProtectManuallyDisabledInstructions) {
diff --git a/ash/webui/shimless_rma/mojom/BUILD.gn b/ash/webui/shimless_rma/mojom/BUILD.gn
index fac12e7..59449ee 100644
--- a/ash/webui/shimless_rma/mojom/BUILD.gn
+++ b/ash/webui/shimless_rma/mojom/BUILD.gn
@@ -69,6 +69,10 @@
cpp = "::rmad::FinalizeStatus_Status"
},
{
+ mojom = "ash.shimless_rma.mojom.FinalizationError"
+ cpp = "::rmad::FinalizeStatus_Error"
+ },
+ {
mojom = "ash.shimless_rma.mojom.UpdateRoFirmwareStatus"
cpp = "::rmad::UpdateRoFirmwareStatus"
},
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma.mojom b/ash/webui/shimless_rma/mojom/shimless_rma.mojom
index f89a79d..3817853 100644
--- a/ash/webui/shimless_rma/mojom/shimless_rma.mojom
+++ b/ash/webui/shimless_rma/mojom/shimless_rma.mojom
@@ -362,6 +362,18 @@
kFailedNonBlocking = 4,
};

+// This must remain in sync with FinalizeStatus::Error in
+// //third_party/cros_system_api/dbus/rmad/rmad.proto.
+// See shimless_rma_mojom_traits.cc\h.
+enum FinalizationError {
+ kUnknown = 0,
+ kInternal = 1,
+ kCannotEnableHardwareWp = 2,
+ kCannotEnableSoftwareWp = 3,
+ kCr50 = 4,
+ kGbb = 5,
+};
+
// Implemented by clients to receive errors from the rmad service.
// rmad runs a lot of asynchronous processing and errors can occur at any time.
interface ErrorObserver {
@@ -426,8 +438,10 @@

// Implemented by clients to receive status of finalization progress.
interface FinalizationObserver {
- // OnFinalizationUpdated is called to report progress of device finalization.
- OnFinalizationUpdated(FinalizationStatus status, float progress);
+ // OnFinalizationUpdated is called to report progress of device finalization,
+ // reporting an error when finalization fails.
+ OnFinalizationUpdated(FinalizationStatus status, float progress,
+ FinalizationError error);
};

// Implemented by clients to receive status of RO firmware update progress.
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
index d0d3f9f..1fc0b28 100644
--- a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
+++ b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.cc
@@ -60,6 +60,9 @@
using MojomFinalizationStatus = ash::shimless_rma::mojom::FinalizationStatus;
using ProtoFinalizationStatus = rmad::FinalizeStatus_Status;

+using MojomFinalizationError = ash::shimless_rma::mojom::FinalizationError;
+using ProtoFinalizationError = rmad::FinalizeStatus::Error;
+
using MojomUpdateRoFirmwareStatus =
ash::shimless_rma::mojom::UpdateRoFirmwareStatus;
using ProtoUpdateRoFirmwaretatus = rmad::UpdateRoFirmwareStatus;
@@ -1035,6 +1038,60 @@
return false;
}

+// static
+MojomFinalizationError
+EnumTraits<MojomFinalizationError, ProtoFinalizationError>::ToMojom(
+ ProtoFinalizationError error) {
+ switch (error) {
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_UNKNOWN:
+ return MojomFinalizationError::kUnknown;
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_INTERNAL:
+ return MojomFinalizationError::kInternal;
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CANNOT_ENABLE_HWWP:
+ return MojomFinalizationError::kCannotEnableHardwareWp;
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CANNOT_ENABLE_SWWP:
+ return MojomFinalizationError::kCannotEnableSoftwareWp;
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CR50:
+ return MojomFinalizationError::kCr50;
+ case rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_GBB:
+ return MojomFinalizationError::kGbb;
+
+ default:
+ NOTREACHED();
+ return MojomFinalizationError::kUnknown;
+ }
+ NOTREACHED();
+ return MojomFinalizationError::kUnknown;
+}
+
+// static
+bool EnumTraits<MojomFinalizationError, ProtoFinalizationError>::FromMojom(
+ MojomFinalizationError error,
+ ProtoFinalizationError* out) {
+ switch (error) {
+ case MojomFinalizationError::kUnknown:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_UNKNOWN;
+ return true;
+ case MojomFinalizationError::kInternal:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_INTERNAL;
+ return true;
+ case MojomFinalizationError::kCannotEnableHardwareWp:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CANNOT_ENABLE_HWWP;
+ return true;
+ case MojomFinalizationError::kCannotEnableSoftwareWp:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CANNOT_ENABLE_SWWP;
+ return true;
+ case MojomFinalizationError::kCr50:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_CR50;
+ return true;
+ case MojomFinalizationError::kGbb:
+ *out = rmad::FinalizeStatus::RMAD_FINALIZE_ERROR_GBB;
+ return true;
+ }
+ NOTREACHED();
+ return false;
+}
+
bool StructTraits<ash::shimless_rma::mojom::CalibrationComponentStatusDataView,
rmad::CalibrationComponentStatus>::
Read(ash::shimless_rma::mojom::CalibrationComponentStatusDataView data,
diff --git a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.h b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.h
index fefccedf..d53d1d1 100644
--- a/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.h
+++ b/ash/webui/shimless_rma/mojom/shimless_rma_mojom_traits.h
@@ -168,6 +168,16 @@
};

template <>
+struct EnumTraits<ash::shimless_rma::mojom::FinalizationError,
+ rmad::FinalizeStatus::Error> {
+ static ash::shimless_rma::mojom::FinalizationError ToMojom(
+ rmad::FinalizeStatus::Error error);
+
+ static bool FromMojom(ash::shimless_rma::mojom::FinalizationError input,
+ rmad::FinalizeStatus::Error* out);
+};
+
+template <>
class StructTraits<ash::shimless_rma::mojom::CalibrationComponentStatusDataView,
rmad::CalibrationComponentStatus> {
public:
diff --git a/ash/webui/shimless_rma/resources/fake_shimless_rma_service.js b/ash/webui/shimless_rma/resources/fake_shimless_rma_service.js
index f3aa0e5..b034e6b 100644
--- a/ash/webui/shimless_rma/resources/fake_shimless_rma_service.js
+++ b/ash/webui/shimless_rma/resources/fake_shimless_rma_service.js
@@ -6,7 +6,7 @@
import {FakeObservables} from 'chrome://resources/ash/common/fake_observables.js';
import {assert} from 'chrome://resources/js/assert.m.js';

-import {CalibrationComponentStatus, CalibrationObserverRemote, CalibrationOverallStatus, CalibrationSetupInstruction, CalibrationStatus, Component, ComponentType, ErrorObserverRemote, FinalizationObserverRemote, FinalizationStatus, HardwareVerificationStatusObserverRemote, HardwareWriteProtectionStateObserverRemote, OsUpdateObserverRemote, OsUpdateOperation, PowerCableStateObserverRemote, ProvisioningError, ProvisioningObserverRemote, ProvisioningStatus, QrCode, RmadErrorCode, ShimlessRmaServiceInterface, State, StateResult, UpdateErrorCode, UpdateRoFirmwareObserverRemote, UpdateRoFirmwareStatus, WriteProtectDisableCompleteAction} from './shimless_rma_types.js';
+import {CalibrationComponentStatus, CalibrationObserverRemote, CalibrationOverallStatus, CalibrationSetupInstruction, CalibrationStatus, Component, ComponentType, ErrorObserverRemote, FinalizationError, FinalizationObserverRemote, FinalizationStatus, HardwareVerificationStatusObserverRemote, HardwareWriteProtectionStateObserverRemote, OsUpdateObserverRemote, OsUpdateOperation, PowerCableStateObserverRemote, ProvisioningError, ProvisioningObserverRemote, ProvisioningStatus, QrCode, RmadErrorCode, ShimlessRmaServiceInterface, State, StateResult, UpdateErrorCode, UpdateRoFirmwareObserverRemote, UpdateRoFirmwareStatus, WriteProtectDisableCompleteAction} from './shimless_rma_types.js';

/** @implements {ShimlessRmaServiceInterface} */
export class FakeShimlessRmaService {
@@ -1029,10 +1029,12 @@
*/
observeFinalizationStatus(remote) {
this.observables_.observe(
- 'FinalizationObserver_onFinalizationUpdated', (status, progress) => {
+ 'FinalizationObserver_onFinalizationUpdated',
+ (status, progress, error) => {
remote.onFinalizationUpdated(
/** @type {!FinalizationStatus} */ (status),
- /** @type {number} */ (progress));
+ /** @type {number} */ (progress),
+ /** @type {!FinalizationError} */ (error));
});
if (this.automaticallyTriggerFinalizationObservation_) {
this.triggerFinalizationObserver(
diff --git a/ash/webui/shimless_rma/resources/shimless_rma_types.js b/ash/webui/shimless_rma/resources/shimless_rma_types.js
index 2910fbb..b119d88 100644
--- a/ash/webui/shimless_rma/resources/shimless_rma_types.js
+++ b/ash/webui/shimless_rma/resources/shimless_rma_types.js
@@ -99,6 +99,11 @@
export const FinalizationStatus = ash.shimlessRma.mojom.FinalizationStatus;

/**
+ * @typedef {ash.shimlessRma.mojom.FinalizationError}
+ */
+export const FinalizationError = ash.shimlessRma.mojom.FinalizationError;
+
+/**
* Type alias for OsUpdateOperation.
* @typedef {ash.shimlessRma.mojom.OsUpdateOperation}
*/
diff --git a/chromeos/dbus/rmad/fake_rmad_client.cc b/chromeos/dbus/rmad/fake_rmad_client.cc
index 2b1ba16..3162942 100644
--- a/chromeos/dbus/rmad/fake_rmad_client.cc
+++ b/chromeos/dbus/rmad/fake_rmad_client.cc
@@ -399,10 +399,12 @@

void FakeRmadClient::TriggerFinalizationProgressObservation(
rmad::FinalizeStatus::Status status,
- double progress) {
+ double progress,
+ rmad::FinalizeStatus::Error error) {
rmad::FinalizeStatus finalizationStatus;
finalizationStatus.set_status(status);
finalizationStatus.set_progress(progress);
+ finalizationStatus.set_error(error);
for (auto& observer : observers_)
observer.FinalizationProgress(finalizationStatus);
}
diff --git a/chromeos/dbus/rmad/fake_rmad_client.h b/chromeos/dbus/rmad/fake_rmad_client.h
index 9db5e1b..d1793cc 100644
--- a/chromeos/dbus/rmad/fake_rmad_client.h
+++ b/chromeos/dbus/rmad/fake_rmad_client.h
@@ -68,7 +68,8 @@
const std::string& error_str);
void TriggerFinalizationProgressObservation(
rmad::FinalizeStatus::Status status,
- double progress);
+ double progress,
+ rmad::FinalizeStatus::Error error);
void TriggerRoFirmwareUpdateProgressObservation(
rmad::UpdateRoFirmwareStatus status);

Reply all
Reply to author
Forward
0 new messages