Commit b0c11f03 authored by Miriam Polzer's avatar Miriam Polzer Committed by Commit Bot

Receive powerwash after update from update engine

Currently, chrome deals with powerwash after an update (e.g. on channel
downgrade) itself, from computing whether it should happen, to actually
issuing a powerwash which is never executed because the update engine
takes care of it.

After this change and the corresponding changes in the update engine,
chrome will rely on the update engine sending a flag indicating whether
a powerwash will happen after the update.

The system notifications will be addressed in a separate CL because
adapting the code there also requires properly dealing with the
rollback flag.

Depends on https://crrev.com/c/2187672

Bug: 2187671
Change-Id: I2aa7024fb7978c21e6396e366f9876d42a72e873
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2187635
Commit-Queue: Miriam Polzer <mpolzer@google.com>
Reviewed-by: default avatarEsmael Elmoslimany <aee@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#771503}
parent dd7a6532
...@@ -127,14 +127,10 @@ ...@@ -127,14 +127,10 @@
</div> </div>
<div class="separator" hidden="[[!showButtonContainer_]]"></div> <div class="separator" hidden="[[!showButtonContainer_]]"></div>
<span id="buttonContainer" hidden="[[!showButtonContainer_]]"> <span id="buttonContainer" hidden="[[!showButtonContainer_]]">
<cr-button id="relaunch" hidden="[[!showRelaunch_]]" <cr-button id="relaunch" hidden$="[[!showRelaunch_]]"
on-click="onRelaunchClick_"> on-click="onRelaunchClick_">
$i18n{aboutRelaunch} [[getRelaunchButtonText_(
</cr-button> currentUpdateStatusEvent_)]]
<cr-button id="relaunchAndPowerwash"
hidden="[[!showRelaunchAndPowerwash_]]"
on-click="onRelaunchAndPowerwashClick_">
$i18n{aboutRelaunchAndPowerwash}
</cr-button> </cr-button>
<cr-button id="checkForUpdates" hidden="[[!showCheckUpdates_]]" <cr-button id="checkForUpdates" hidden="[[!showCheckUpdates_]]"
on-click="onCheckUpdatesClick_"> on-click="onCheckUpdatesClick_">
......
...@@ -25,6 +25,7 @@ Polymer({ ...@@ -25,6 +25,7 @@ Polymer({
message: '', message: '',
progress: 0, progress: 0,
rollback: false, rollback: false,
powerwash: false,
status: UpdateStatus.DISABLED status: UpdateStatus.DISABLED
}, },
}, },
...@@ -102,14 +103,7 @@ Polymer({ ...@@ -102,14 +103,7 @@ Polymer({
showRelaunch_: { showRelaunch_: {
type: Boolean, type: Boolean,
value: false, value: false,
}, computed: 'computeShowRelaunch_(currentUpdateStatusEvent_)',
/** @private */
showRelaunchAndPowerwash_: {
type: Boolean,
value: false,
computed: 'computeShowRelaunchAndPowerwash_(' +
'currentUpdateStatusEvent_, targetChannel_, currentChannel_)',
}, },
/** @private */ /** @private */
...@@ -156,10 +150,8 @@ Polymer({ ...@@ -156,10 +150,8 @@ Polymer({
'updateShowUpdateStatus_(' + 'updateShowUpdateStatus_(' +
'hasEndOfLife_, currentUpdateStatusEvent_,' + 'hasEndOfLife_, currentUpdateStatusEvent_,' +
'hasCheckedForUpdates_)', 'hasCheckedForUpdates_)',
'updateShowRelaunch_(currentUpdateStatusEvent_, targetChannel_,' +
'currentChannel_)',
'updateShowButtonContainer_(' + 'updateShowButtonContainer_(' +
'showRelaunch_, showRelaunchAndPowerwash_, showCheckUpdates_)', 'showRelaunch_, showCheckUpdates_)',
'handleCrostiniEnabledChanged_(prefs.crostini.enabled.value)', 'handleCrostiniEnabledChanged_(prefs.crostini.enabled.value)',
], ],
...@@ -301,14 +293,12 @@ Polymer({ ...@@ -301,14 +293,12 @@ Polymer({
* @private * @private
*/ */
updateShowButtonContainer_() { updateShowButtonContainer_() {
this.showButtonContainer_ = this.showRelaunch_ || this.showButtonContainer_ = this.showRelaunch_ || this.showCheckUpdates_;
this.showRelaunchAndPowerwash_ || this.showCheckUpdates_;
}, },
/** @private */ /** @private */
updateShowRelaunch_() { computeShowRelaunch_() {
this.showRelaunch_ = return this.checkStatus_(UpdateStatus.NEARLY_UPDATED);
this.checkStatus_(UpdateStatus.NEARLY_UPDATED) && !this.isRollback_();
}, },
/** /**
...@@ -445,15 +435,8 @@ Polymer({ ...@@ -445,15 +435,8 @@ Polymer({
* @return {boolean} * @return {boolean}
* @private * @private
*/ */
isRollback_() { isPowerwash_() {
assert(this.currentChannel_.length > 0); return this.currentUpdateStatusEvent_.powerwash;
assert(this.targetChannel_.length > 0);
if (this.currentUpdateStatusEvent_.rollback) {
return true;
}
// Channel switch to a more stable channel is also a rollback
return settings.isTargetChannelMoreStable(
this.currentChannel_, this.targetChannel_);
}, },
/** @private */ /** @private */
...@@ -462,24 +445,18 @@ Polymer({ ...@@ -462,24 +445,18 @@ Polymer({
settings.routes.DETAILED_BUILD_INFO); settings.routes.DETAILED_BUILD_INFO);
}, },
/** @private */
onRelaunchAndPowerwashClick_() {
settings.recordSettingChange();
if (this.currentUpdateStatusEvent_.rollback) {
// Wipe already initiated, simply relaunch.
this.lifetimeBrowserProxy_.relaunch();
} else {
this.lifetimeBrowserProxy_.factoryReset(
/* requestTpmFirmwareUpdate= */ false);
}
},
/** /**
* @return {boolean} * @return {string}
* @private * @private
*/ */
computeShowRelaunchAndPowerwash_() { getRelaunchButtonText_() {
return this.checkStatus_(UpdateStatus.NEARLY_UPDATED) && this.isRollback_(); if (this.checkStatus_(UpdateStatus.NEARLY_UPDATED)) {
if (this.isPowerwash_()) {
return this.i18nAdvanced('aboutRelaunchAndPowerwash');
} else {
return this.i18nAdvanced('aboutRelaunch');
}
}
}, },
/** @private */ /** @private */
......
...@@ -10,5 +10,6 @@ TestVersionUpdater::~TestVersionUpdater() = default; ...@@ -10,5 +10,6 @@ TestVersionUpdater::~TestVersionUpdater() = default;
void TestVersionUpdater::CheckForUpdate(const StatusCallback& callback, void TestVersionUpdater::CheckForUpdate(const StatusCallback& callback,
const PromoteCallback&) { const PromoteCallback&) {
callback.Run(status_, progress_, rollback_, version_, update_size_, message_); callback.Run(status_, progress_, rollback_, powerwash_, version_,
update_size_, message_);
} }
...@@ -42,6 +42,7 @@ class TestVersionUpdater : public VersionUpdater { ...@@ -42,6 +42,7 @@ class TestVersionUpdater : public VersionUpdater {
Status status_ = Status::UPDATED; Status status_ = Status::UPDATED;
int progress_ = 0; int progress_ = 0;
bool rollback_ = false; bool rollback_ = false;
bool powerwash_ = false;
std::string version_; std::string version_;
int64_t update_size_ = 0; int64_t update_size_ = 0;
base::string16 message_; base::string16 message_;
......
...@@ -58,6 +58,7 @@ class VersionUpdater { ...@@ -58,6 +58,7 @@ class VersionUpdater {
// |progress| should only be non-zero for the UPDATING state. // |progress| should only be non-zero for the UPDATING state.
// |rollback| indicates whether the update is actually a rollback, which // |rollback| indicates whether the update is actually a rollback, which
// requires wiping the device upon reboot. // requires wiping the device upon reboot.
// |powerwash| indicates whether the device will be wiped on reboot.
// |version| is the version of the available update and should be empty string // |version| is the version of the available update and should be empty string
// when update is not available. // when update is not available.
// |update_size| is the size of the available update in bytes and should be 0 // |update_size| is the size of the available update in bytes and should be 0
...@@ -66,6 +67,7 @@ class VersionUpdater { ...@@ -66,6 +67,7 @@ class VersionUpdater {
typedef base::Callback<void(Status status, typedef base::Callback<void(Status status,
int progress, int progress,
bool rollback, bool rollback,
bool powerwash,
const std::string& version, const std::string& version,
int64_t update_size, int64_t update_size,
const base::string16& message)> const base::string16& message)>
......
...@@ -13,7 +13,8 @@ void VersionUpdaterBasic::CheckForUpdate( ...@@ -13,7 +13,8 @@ void VersionUpdaterBasic::CheckForUpdate(
const Status status = UpgradeDetector::GetInstance()->notify_upgrade() const Status status = UpgradeDetector::GetInstance()->notify_upgrade()
? NEARLY_UPDATED ? NEARLY_UPDATED
: DISABLED; : DISABLED;
status_callback.Run(status, 0, false, std::string(), 0, base::string16()); status_callback.Run(status, 0, false, false, std::string(), 0,
base::string16());
} }
VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) { VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) {
......
...@@ -100,7 +100,8 @@ base::string16 GetConnectionTypeAsUTF16(const chromeos::NetworkState* network, ...@@ -100,7 +100,8 @@ base::string16 GetConnectionTypeAsUTF16(const chromeos::NetworkState* network,
bool EnsureCanUpdate(bool interactive, bool EnsureCanUpdate(bool interactive,
const VersionUpdater::StatusCallback& callback) { const VersionUpdater::StatusCallback& callback) {
if (IsAutoUpdateDisabled()) { if (IsAutoUpdateDisabled()) {
callback.Run(VersionUpdater::DISABLED_BY_ADMIN, 0, false, std::string(), 0, callback.Run(VersionUpdater::DISABLED_BY_ADMIN, 0, false, false,
std::string(), 0,
l10n_util::GetStringUTF16(IDS_UPGRADE_DISABLED_BY_POLICY)); l10n_util::GetStringUTF16(IDS_UPGRADE_DISABLED_BY_POLICY));
return false; return false;
} }
...@@ -114,14 +115,14 @@ bool EnsureCanUpdate(bool interactive, ...@@ -114,14 +115,14 @@ bool EnsureCanUpdate(bool interactive,
// to a network for which updates are disallowed. // to a network for which updates are disallowed.
NetworkStatus status = GetNetworkStatus(interactive, network, metered); NetworkStatus status = GetNetworkStatus(interactive, network, metered);
if (status == NETWORK_STATUS_OFFLINE) { if (status == NETWORK_STATUS_OFFLINE) {
callback.Run(VersionUpdater::FAILED_OFFLINE, 0, false, std::string(), 0, callback.Run(VersionUpdater::FAILED_OFFLINE, 0, false, false, std::string(),
l10n_util::GetStringUTF16(IDS_UPGRADE_OFFLINE)); 0, l10n_util::GetStringUTF16(IDS_UPGRADE_OFFLINE));
return false; return false;
} else if (status == NETWORK_STATUS_DISALLOWED) { } else if (status == NETWORK_STATUS_DISALLOWED) {
base::string16 message = l10n_util::GetStringFUTF16( base::string16 message = l10n_util::GetStringFUTF16(
IDS_UPGRADE_DISALLOWED, GetConnectionTypeAsUTF16(network, metered)); IDS_UPGRADE_DISALLOWED, GetConnectionTypeAsUTF16(network, metered));
callback.Run(VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED, 0, false, callback.Run(VersionUpdater::FAILED_CONNECTION_TYPE_DISALLOWED, 0, false,
std::string(), 0, message); false, std::string(), 0, message);
return false; return false;
} }
...@@ -215,7 +216,7 @@ void VersionUpdaterCros::OnSetUpdateOverCellularOneTimePermission( ...@@ -215,7 +216,7 @@ void VersionUpdaterCros::OnSetUpdateOverCellularOneTimePermission(
// TODO(https://crbug.com/927452): invoke callback to signal about page to // TODO(https://crbug.com/927452): invoke callback to signal about page to
// show appropriate error message. // show appropriate error message.
LOG(ERROR) << "Error setting update over cellular one time permission."; LOG(ERROR) << "Error setting update over cellular one time permission.";
callback_.Run(VersionUpdater::FAILED, 0, false, std::string(), 0, callback_.Run(VersionUpdater::FAILED, 0, false, false, std::string(), 0,
base::string16()); base::string16());
} }
} }
...@@ -319,8 +320,8 @@ void VersionUpdaterCros::UpdateStatusChanged( ...@@ -319,8 +320,8 @@ void VersionUpdaterCros::UpdateStatusChanged(
NOTREACHED(); NOTREACHED();
} }
callback_.Run(my_status, progress, status.is_enterprise_rollback(), version, callback_.Run(my_status, progress, status.is_enterprise_rollback(),
size, message); status.will_powerwash_after_reboot(), version, size, message);
last_operation_ = status.current_operation(); last_operation_ = status.current_operation();
if (check_for_update_when_idle_ && if (check_for_update_when_idle_ &&
...@@ -334,5 +335,5 @@ void VersionUpdaterCros::OnUpdateCheck( ...@@ -334,5 +335,5 @@ void VersionUpdaterCros::OnUpdateCheck(
// If version updating is not implemented, this binary is the most up-to-date // If version updating is not implemented, this binary is the most up-to-date
// possible with respect to automatic updating. // possible with respect to automatic updating.
if (result == UpdateEngineClient::UPDATE_RESULT_NOTIMPLEMENTED) if (result == UpdateEngineClient::UPDATE_RESULT_NOTIMPLEMENTED)
callback_.Run(UPDATED, 0, false, std::string(), 0, base::string16()); callback_.Run(UPDATED, 0, false, false, std::string(), 0, base::string16());
} }
...@@ -33,6 +33,7 @@ namespace { ...@@ -33,6 +33,7 @@ namespace {
void CheckNotification(VersionUpdater::Status /* status */, void CheckNotification(VersionUpdater::Status /* status */,
int /* progress */, int /* progress */,
bool /* rollback */, bool /* rollback */,
bool /* powerwash */,
const std::string& /* version */, const std::string& /* version */,
int64_t /* size */, int64_t /* size */,
const base::string16& /* message */) {} const base::string16& /* message */) {}
......
...@@ -108,7 +108,7 @@ void VersionUpdaterMac::CheckForUpdate( ...@@ -108,7 +108,7 @@ void VersionUpdaterMac::CheckForUpdate(
} else { } else {
// There is no glue, or the application is on a read-only filesystem. // There is no glue, or the application is on a read-only filesystem.
// Updates and promotions are impossible. // Updates and promotions are impossible.
status_callback_.Run(DISABLED, 0, false, std::string(), 0, status_callback_.Run(DISABLED, 0, false, false, std::string(), 0,
base::string16()); base::string16());
} }
} }
...@@ -231,7 +231,7 @@ void VersionUpdaterMac::UpdateStatus(NSDictionary* dictionary) { ...@@ -231,7 +231,7 @@ void VersionUpdaterMac::UpdateStatus(NSDictionary* dictionary) {
} }
if (!status_callback_.is_null()) if (!status_callback_.is_null())
status_callback_.Run(status, 0, false, std::string(), 0, message); status_callback_.Run(status, 0, false, false, std::string(), 0, message);
PromotionState promotion_state; PromotionState promotion_state;
if (!promote_callback_.is_null()) { if (!promote_callback_.is_null()) {
......
...@@ -31,7 +31,7 @@ void VersionUpdaterWin::CheckForUpdate(const StatusCallback& callback, ...@@ -31,7 +31,7 @@ void VersionUpdaterWin::CheckForUpdate(const StatusCallback& callback,
// There is no supported integration with Google Update for Chromium. // There is no supported integration with Google Update for Chromium.
callback_ = callback; callback_ = callback;
callback_.Run(CHECKING, 0, false, std::string(), 0, base::string16()); callback_.Run(CHECKING, 0, false, false, std::string(), 0, base::string16());
DoBeginUpdateCheck(false /* !install_update_if_possible */); DoBeginUpdateCheck(false /* !install_update_if_possible */);
} }
...@@ -52,18 +52,20 @@ void VersionUpdaterWin::OnUpdateCheckComplete( ...@@ -52,18 +52,20 @@ void VersionUpdaterWin::OnUpdateCheckComplete(
// Notify the caller that the update is now beginning and initiate it. // Notify the caller that the update is now beginning and initiate it.
DoBeginUpdateCheck(true /* install_update_if_possible */); DoBeginUpdateCheck(true /* install_update_if_possible */);
callback_.Run(UPDATING, 0, false, std::string(), 0, base::string16()); callback_.Run(UPDATING, 0, false, false, std::string(), 0, base::string16());
} }
void VersionUpdaterWin::OnUpgradeProgress(int progress, void VersionUpdaterWin::OnUpgradeProgress(int progress,
const base::string16& new_version) { const base::string16& new_version) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
callback_.Run(UPDATING, progress, false, std::string(), 0, base::string16()); callback_.Run(UPDATING, progress, false, false, std::string(), 0,
base::string16());
} }
void VersionUpdaterWin::OnUpgradeComplete(const base::string16& new_version) { void VersionUpdaterWin::OnUpgradeComplete(const base::string16& new_version) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
callback_.Run(NEARLY_UPDATED, 0, false, std::string(), 0, base::string16()); callback_.Run(NEARLY_UPDATED, 0, false, false, std::string(), 0,
base::string16());
} }
void VersionUpdaterWin::OnError(GoogleUpdateErrorCode error_code, void VersionUpdaterWin::OnError(GoogleUpdateErrorCode error_code,
...@@ -94,7 +96,7 @@ void VersionUpdaterWin::OnError(GoogleUpdateErrorCode error_code, ...@@ -94,7 +96,7 @@ void VersionUpdaterWin::OnError(GoogleUpdateErrorCode error_code,
} }
break; break;
} }
callback_.Run(status, 0, false, std::string(), 0, message); callback_.Run(status, 0, false, false, std::string(), 0, message);
} }
void VersionUpdaterWin::DoBeginUpdateCheck(bool install_update_if_possible) { void VersionUpdaterWin::DoBeginUpdateCheck(bool install_update_if_possible) {
...@@ -107,7 +109,7 @@ void VersionUpdaterWin::DoBeginUpdateCheck(bool install_update_if_possible) { ...@@ -107,7 +109,7 @@ void VersionUpdaterWin::DoBeginUpdateCheck(bool install_update_if_possible) {
void VersionUpdaterWin::OnPendingRestartCheck(bool is_update_pending_restart) { void VersionUpdaterWin::OnPendingRestartCheck(bool is_update_pending_restart) {
callback_.Run(is_update_pending_restart ? NEARLY_UPDATED : UPDATED, 0, false, callback_.Run(is_update_pending_restart ? NEARLY_UPDATED : UPDATED, 0, false,
std::string(), 0, base::string16()); false, std::string(), 0, base::string16());
} }
VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) { VersionUpdater* VersionUpdater::Create(content::WebContents* web_contents) {
......
...@@ -649,6 +649,7 @@ void AboutHandler::RequestUpdate() { ...@@ -649,6 +649,7 @@ void AboutHandler::RequestUpdate() {
void AboutHandler::SetUpdateStatus(VersionUpdater::Status status, void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
int progress, int progress,
bool rollback, bool rollback,
bool powerwash,
const std::string& version, const std::string& version,
int64_t size, int64_t size,
const base::string16& message) { const base::string16& message) {
...@@ -660,6 +661,7 @@ void AboutHandler::SetUpdateStatus(VersionUpdater::Status status, ...@@ -660,6 +661,7 @@ void AboutHandler::SetUpdateStatus(VersionUpdater::Status status,
event->SetString("message", message); event->SetString("message", message);
event->SetInteger("progress", progress); event->SetInteger("progress", progress);
event->SetBoolean("rollback", rollback); event->SetBoolean("rollback", rollback);
event->SetBoolean("powerwash", powerwash);
event->SetString("version", version); event->SetString("version", version);
// DictionaryValue does not support int64_t, so convert to string. // DictionaryValue does not support int64_t, so convert to string.
event->SetString("size", base::NumberToString(size)); event->SetString("size", base::NumberToString(size));
......
...@@ -135,6 +135,7 @@ class AboutHandler : public settings::SettingsPageUIHandler, ...@@ -135,6 +135,7 @@ class AboutHandler : public settings::SettingsPageUIHandler,
void SetUpdateStatus(VersionUpdater::Status status, void SetUpdateStatus(VersionUpdater::Status status,
int progress, int progress,
bool rollback, bool rollback,
bool powerwash,
const std::string& version, const std::string& version,
int64_t size, int64_t size,
const base::string16& fail_message); const base::string16& fail_message);
......
...@@ -569,6 +569,7 @@ void SafetyCheckHandler::DetermineIfNoPasswordsOrSafe( ...@@ -569,6 +569,7 @@ void SafetyCheckHandler::DetermineIfNoPasswordsOrSafe(
void SafetyCheckHandler::OnVersionUpdaterResult(VersionUpdater::Status status, void SafetyCheckHandler::OnVersionUpdaterResult(VersionUpdater::Status status,
int progress, int progress,
bool rollback, bool rollback,
bool powerwash,
const std::string& version, const std::string& version,
int64_t update_size, int64_t update_size,
const base::string16& message) { const base::string16& message) {
......
...@@ -193,6 +193,7 @@ class SafetyCheckHandler ...@@ -193,6 +193,7 @@ class SafetyCheckHandler
void OnVersionUpdaterResult(VersionUpdater::Status status, void OnVersionUpdaterResult(VersionUpdater::Status status,
int progress, int progress,
bool rollback, bool rollback,
bool powerwash,
const std::string& version, const std::string& version,
int64_t update_size, int64_t update_size,
const base::string16& message); const base::string16& message);
......
...@@ -9,6 +9,8 @@ cr.define('settings_about_page', function() { ...@@ -9,6 +9,8 @@ cr.define('settings_about_page', function() {
* @param {{ * @param {{
* progress: number|undefined, * progress: number|undefined,
* message: string|undefined * message: string|undefined
* rollback: bool|undefined
* powerwash: bool|undefined
* }} opt_options * }} opt_options
*/ */
function fireStatusChanged(status, opt_options) { function fireStatusChanged(status, opt_options) {
...@@ -17,6 +19,8 @@ cr.define('settings_about_page', function() { ...@@ -17,6 +19,8 @@ cr.define('settings_about_page', function() {
progress: options.progress === undefined ? 1 : options.progress, progress: options.progress === undefined ? 1 : options.progress,
message: options.message, message: options.message,
status: status, status: status,
rollback: options.rollback,
powerwash: options.powerwash,
}); });
} }
...@@ -155,16 +159,14 @@ cr.define('settings_about_page', function() { ...@@ -155,16 +159,14 @@ cr.define('settings_about_page', function() {
* channel are the same. * channel are the same.
*/ */
test('ButtonsUpdate_SameChannel', function() { test('ButtonsUpdate_SameChannel', function() {
const {checkForUpdates, relaunch, relaunchAndPowerwash} = page.$; const {checkForUpdates, relaunch} = page.$;
assertTrue(!!relaunch); assertTrue(!!relaunch);
assertTrue(!!relaunchAndPowerwash);
assertTrue(!!checkForUpdates); assertTrue(!!checkForUpdates);
function assertAllHidden() { function assertAllHidden() {
assertTrue(checkForUpdates.hidden); assertTrue(checkForUpdates.hidden);
assertTrue(relaunch.hidden); assertTrue(relaunch.hidden);
assertTrue(relaunchAndPowerwash.hidden);
// Ensure that when all buttons are hidden, the container is also // Ensure that when all buttons are hidden, the container is also
// hidden. // hidden.
assertTrue(page.$.buttonContainer.hidden); assertTrue(page.$.buttonContainer.hidden);
...@@ -175,7 +177,6 @@ cr.define('settings_about_page', function() { ...@@ -175,7 +177,6 @@ cr.define('settings_about_page', function() {
fireStatusChanged(UpdateStatus.UPDATED); fireStatusChanged(UpdateStatus.UPDATED);
assertFalse(checkForUpdates.hidden); assertFalse(checkForUpdates.hidden);
assertTrue(relaunch.hidden); assertTrue(relaunch.hidden);
assertTrue(relaunchAndPowerwash.hidden);
// Check that the "Check for updates" button gets hidden for certain // Check that the "Check for updates" button gets hidden for certain
// UpdateStatus values, even if the CHECKING state was never // UpdateStatus values, even if the CHECKING state was never
...@@ -186,7 +187,6 @@ cr.define('settings_about_page', function() { ...@@ -186,7 +187,6 @@ cr.define('settings_about_page', function() {
fireStatusChanged(UpdateStatus.NEARLY_UPDATED); fireStatusChanged(UpdateStatus.NEARLY_UPDATED);
assertTrue(checkForUpdates.hidden); assertTrue(checkForUpdates.hidden);
assertFalse(relaunch.hidden); assertFalse(relaunch.hidden);
assertTrue(relaunchAndPowerwash.hidden);
fireStatusChanged(UpdateStatus.CHECKING); fireStatusChanged(UpdateStatus.CHECKING);
assertAllHidden(); assertAllHidden();
...@@ -197,7 +197,6 @@ cr.define('settings_about_page', function() { ...@@ -197,7 +197,6 @@ cr.define('settings_about_page', function() {
fireStatusChanged(UpdateStatus.NEARLY_UPDATED); fireStatusChanged(UpdateStatus.NEARLY_UPDATED);
assertTrue(checkForUpdates.hidden); assertTrue(checkForUpdates.hidden);
assertFalse(relaunch.hidden); assertFalse(relaunch.hidden);
assertTrue(relaunchAndPowerwash.hidden);
fireStatusChanged(UpdateStatus.UPDATED); fireStatusChanged(UpdateStatus.UPDATED);
assertAllHidden(); assertAllHidden();
...@@ -205,7 +204,6 @@ cr.define('settings_about_page', function() { ...@@ -205,7 +204,6 @@ cr.define('settings_about_page', function() {
fireStatusChanged(UpdateStatus.FAILED); fireStatusChanged(UpdateStatus.FAILED);
assertFalse(checkForUpdates.hidden); assertFalse(checkForUpdates.hidden);
assertTrue(relaunch.hidden); assertTrue(relaunch.hidden);
assertTrue(relaunchAndPowerwash.hidden);
fireStatusChanged(UpdateStatus.DISABLED); fireStatusChanged(UpdateStatus.DISABLED);
assertAllHidden(); assertAllHidden();
...@@ -217,24 +215,24 @@ cr.define('settings_about_page', function() { ...@@ -217,24 +215,24 @@ cr.define('settings_about_page', function() {
/** /**
* Test that buttons update according to incoming * Test that buttons update according to incoming
* 'update-status-changed' events for the case where the target channel * 'update-status-changed' events for the case where the target channel
* is more stable than current channel. * is more stable than current channel and update will powerwash.
*/ */
test('ButtonsUpdate_BetaToStable', async () => { test('ButtonsUpdate_BetaToStable', async () => {
aboutBrowserProxy.setChannels( aboutBrowserProxy.setChannels(
BrowserChannel.BETA, BrowserChannel.STABLE); BrowserChannel.BETA, BrowserChannel.STABLE);
aboutBrowserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED);
await initNewPage(); await initNewPage();
fireStatusChanged(UpdateStatus.NEARLY_UPDATED, {powerwash: true});
assertTrue(!!page.$.relaunch); assertTrue(!!page.$.relaunch);
assertTrue(!!page.$.relaunchAndPowerwash); assertFalse(page.$.relaunch.hidden);
assertTrue(page.$.relaunch.hidden); assertEquals(
assertFalse(page.$.relaunchAndPowerwash.hidden); page.$.relaunch.innerText,
loadTimeData.getString('aboutRelaunchAndPowerwash'));
page.$.relaunchAndPowerwash.click(); page.$.relaunch.click();
const requestTpmFirmwareUpdate = await lifetimeBrowserProxy.whenCalled('relaunch');
await lifetimeBrowserProxy.whenCalled('factoryReset');
assertFalse(requestTpmFirmwareUpdate);
}); });
/** /**
...@@ -245,39 +243,38 @@ cr.define('settings_about_page', function() { ...@@ -245,39 +243,38 @@ cr.define('settings_about_page', function() {
test('ButtonsUpdate_StableToBeta', async () => { test('ButtonsUpdate_StableToBeta', async () => {
aboutBrowserProxy.setChannels( aboutBrowserProxy.setChannels(
BrowserChannel.STABLE, BrowserChannel.BETA); BrowserChannel.STABLE, BrowserChannel.BETA);
aboutBrowserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED);
await initNewPage(); await initNewPage();
assertTrue(!!page.$.relaunch);
assertTrue(!!page.$.relaunchAndPowerwash);
fireStatusChanged(UpdateStatus.NEARLY_UPDATED, {powerwash: false});
assertTrue(!!page.$.relaunch);
assertFalse(page.$.relaunch.hidden); assertFalse(page.$.relaunch.hidden);
assertTrue(page.$.relaunchAndPowerwash.hidden);
assertEquals(
page.$.relaunch.innerText, loadTimeData.getString('aboutRelaunch'));
page.$.relaunch.click(); page.$.relaunch.click();
await lifetimeBrowserProxy.whenCalled('relaunch'); await lifetimeBrowserProxy.whenCalled('relaunch');
}); });
/** /**
* Test that buttons update as a result of receiving a * The relaunch and powerwash button is shown if the powerwash flag is set
* 'target-channel-changed' event (normally fired from * in the update status.
* <settings-channel-switcher-dialog>).
*/ */
test('ButtonsUpdate_TargetChannelChangedEvent', async () => { test('ButtonsUpdate_Powerwash', async () => {
aboutBrowserProxy.setChannels(BrowserChannel.BETA, BrowserChannel.BETA);
aboutBrowserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED);
await initNewPage(); await initNewPage();
assertFalse(page.$.relaunch.hidden);
assertTrue(page.$.relaunchAndPowerwash.hidden);
page.fire('target-channel-changed', BrowserChannel.DEV); fireStatusChanged(UpdateStatus.NEARLY_UPDATED, {powerwash: true});
assertTrue(!!page.$.relaunch);
assertFalse(page.$.relaunch.hidden); assertFalse(page.$.relaunch.hidden);
assertTrue(page.$.relaunchAndPowerwash.hidden);
page.fire('target-channel-changed', BrowserChannel.STABLE); assertEquals(
assertTrue(page.$.relaunch.hidden); page.$.relaunch.innerText,
assertFalse(page.$.relaunchAndPowerwash.hidden); loadTimeData.getString('aboutRelaunchAndPowerwash'));
page.$.relaunch.click();
await lifetimeBrowserProxy.whenCalled('relaunch');
}); });
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment