update_engine: Add support for enterprise rollback powerwash
- Adds the additional flag "rollback" to the powerwash file
- This flag allows additional data to be preserved over a powerwash
- Adds tests
BUG=chromium:881341
TEST=unittests
Change-Id: I4487f4de856ea8d2d0255e8de4cd1ba0762a8e53
Reviewed-on: https://chromium-review.googlesource.com/1412683
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Zentaro Kavanagh <zentaro@chromium.org>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
Reviewed-by: Sen Jiang <senj@chromium.org>
diff --git a/common/fake_hardware.h b/common/fake_hardware.h
index 63346ce..3e5a66e 100644
--- a/common/fake_hardware.h
+++ b/common/fake_hardware.h
@@ -104,13 +104,15 @@
int GetPowerwashCount() const override { return powerwash_count_; }
- bool SchedulePowerwash() override {
+ bool SchedulePowerwash(bool is_rollback) override {
powerwash_scheduled_ = true;
+ is_rollback_powerwash_ = is_rollback;
return true;
}
bool CancelPowerwash() override {
powerwash_scheduled_ = false;
+ is_rollback_powerwash_ = false;
return true;
}
@@ -190,6 +192,10 @@
// Getters to verify state.
int GetMaxKernelKeyRollforward() const { return kernel_max_rollforward_; }
+ bool GetIsRollbackPowerwashScheduled() const {
+ return powerwash_scheduled_ && is_rollback_powerwash_;
+ }
+
private:
bool is_official_build_{true};
bool is_normal_boot_mode_{true};
@@ -207,6 +213,7 @@
int firmware_max_rollforward_{kFirmwareMaxRollforward};
int powerwash_count_{kPowerwashCountNotSet};
bool powerwash_scheduled_{false};
+ bool is_rollback_powerwash_{false};
int64_t build_timestamp_{0};
bool first_active_omaha_ping_sent_{false};
diff --git a/common/hardware_interface.h b/common/hardware_interface.h
index bbc8660..0140588 100644
--- a/common/hardware_interface.h
+++ b/common/hardware_interface.h
@@ -102,8 +102,9 @@
virtual int GetPowerwashCount() const = 0;
// Signals that a powerwash (stateful partition wipe) should be performed
- // after reboot.
- virtual bool SchedulePowerwash() = 0;
+ // after reboot. If |is_rollback| is true additional state is preserved
+ // during shutdown that can be restored after the powerwash.
+ virtual bool SchedulePowerwash(bool is_rollback) = 0;
// Cancel the powerwash operation scheduled to be performed on next boot.
virtual bool CancelPowerwash() = 0;