Commit 919287d0 authored by Wenzhao Zang's avatar Wenzhao Zang Committed by Commit Bot

cros: Show Powerwash button in case of a fatal demo setup error

Bug: 871412
Change-Id: I5bf054ed6ef4c927253fbad4fe09ec674cc58d39
Reviewed-on: https://chromium-review.googlesource.com/c/1310559Reviewed-by: default avatarAga Wronska <agawronska@chromium.org>
Reviewed-by: default avatarAlexander Alekseev <alemate@chromium.org>
Commit-Queue: Wenzhao (Colin) Zang <wzang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605256}
parent 8bc8d513
...@@ -74,8 +74,8 @@ enum class OobeButton { kBack, kNext, kText }; ...@@ -74,8 +74,8 @@ enum class OobeButton { kBack, kNext, kText };
// Dialogs that are a part of Demo Mode setup screens. // Dialogs that are a part of Demo Mode setup screens.
enum class DemoSetupDialog { kNetwork, kEula, kProgress, kError }; enum class DemoSetupDialog { kNetwork, kEula, kProgress, kError };
// Returns js id of the given |button| type. // Returns the tag of the given |button| type.
std::string ButtonToStringId(OobeButton button) { std::string ButtonToTag(OobeButton button) {
switch (button) { switch (button) {
case OobeButton::kBack: case OobeButton::kBack:
return "oobe-back-button"; return "oobe-back-button";
...@@ -201,32 +201,25 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -201,32 +201,25 @@ class DemoSetupTest : public LoginManagerTest {
return !js_checker().GetBool(kIsConfirmationDialogHiddenQuery); return !js_checker().GetBool(kIsConfirmationDialogHiddenQuery);
} }
bool IsDialogShown(OobeScreen screen, DemoSetupDialog dialog) {
const std::string query =
base::StrCat({"!", ScreenToContentQuery(screen), ".$.",
DialogToStringId(dialog), ".hidden"});
return js_checker().GetBool(query);
}
bool IsScreenDialogElementShown(OobeScreen screen, bool IsScreenDialogElementShown(OobeScreen screen,
DemoSetupDialog dialog, DemoSetupDialog dialog,
const std::string& element) { const std::string& element_selector) {
const std::string element_selector = base::StrCat( const std::string element = base::StrCat(
{ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog), {ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog),
".querySelector('", element, "')"}); ".querySelector('", element_selector, "')"});
const std::string query = base::StrCat( const std::string query =
{"!!", element_selector, " && !", element_selector, ".hidden"}); base::StrCat({"!!", element, " && !", element, ".hidden"});
return js_checker().GetBool(query); return js_checker().GetBool(query);
} }
bool IsScreenDialogElementEnabled(OobeScreen screen, bool IsScreenDialogElementEnabled(OobeScreen screen,
DemoSetupDialog dialog, DemoSetupDialog dialog,
const std::string& element) { const std::string& element_selector) {
const std::string element_selector = base::StrCat( const std::string element = base::StrCat(
{ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog), {ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog),
".querySelector('", element, "')"}); ".querySelector('", element_selector, "')"});
const std::string query = base::StrCat( const std::string query =
{"!!", element_selector, " && !", element_selector, ".disabled"}); base::StrCat({"!!", element, " && !", element, ".disabled"});
return js_checker().GetBool(query); return js_checker().GetBool(query);
} }
...@@ -296,17 +289,17 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -296,17 +289,17 @@ class DemoSetupTest : public LoginManagerTest {
void ClickOobeButton(OobeScreen screen, void ClickOobeButton(OobeScreen screen,
OobeButton button, OobeButton button,
JSExecution execution) { JSExecution execution) {
ClickOobeButtonWithId(screen, ButtonToStringId(button), execution); ClickOobeButtonWithSelector(screen, ButtonToTag(button), execution);
} }
// Simulates click on a button with |button_id| on specified OOBE |screen|. // Simulates click on a button with |button_selector| on specified OOBE
// Can be used for screens that consists of one oobe-dialog element. // |screen|. Can be used for screens that consists of one oobe-dialog element.
void ClickOobeButtonWithId(OobeScreen screen, void ClickOobeButtonWithSelector(OobeScreen screen,
const std::string& button_id, const std::string& button_selector,
JSExecution execution) { JSExecution execution) {
const std::string query = base::StrCat( const std::string query = base::StrCat(
{ScreenToContentQuery(screen), ".$$('oobe-dialog').querySelector('", {ScreenToContentQuery(screen), ".$$('oobe-dialog').querySelector('",
button_id, "').click();"}); button_selector, "').click();"});
switch (execution) { switch (execution) {
case JSExecution::kAsync: case JSExecution::kAsync:
JSExecuteAsync(query); JSExecuteAsync(query);
...@@ -325,20 +318,20 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -325,20 +318,20 @@ class DemoSetupTest : public LoginManagerTest {
DemoSetupDialog dialog, DemoSetupDialog dialog,
OobeButton button, OobeButton button,
JSExecution execution) { JSExecution execution) {
ClickScreenDialogButtonWithId(screen, dialog, ButtonToStringId(button), ClickScreenDialogButtonWithSelector(screen, dialog, ButtonToTag(button),
execution); execution);
} }
// Simulates click on a button with |button_id| on a |dialog| of the specified // Simulates click on a button with |button_selector| on a |dialog| of the
// OOBE |screen|. Can be used for screens that consists of multiple // specified OOBE |screen|. Can be used for screens that consist of multiple
// oobe-dialog elements. // oobe-dialog elements.
void ClickScreenDialogButtonWithId(OobeScreen screen, void ClickScreenDialogButtonWithSelector(OobeScreen screen,
DemoSetupDialog dialog, DemoSetupDialog dialog,
const std::string& button_id, const std::string& button_selector,
JSExecution execution) { JSExecution execution) {
const std::string query = base::StrCat( const std::string query = base::StrCat(
{ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog), {ScreenToContentQuery(screen), ".$.", DialogToStringId(dialog),
".querySelector('", button_id, "').click();"}); ".querySelector('", button_selector, "').click();"});
switch (execution) { switch (execution) {
case JSExecution::kAsync: case JSExecution::kAsync:
JSExecuteAsync(query); JSExecuteAsync(query);
...@@ -364,7 +357,8 @@ class DemoSetupTest : public LoginManagerTest { ...@@ -364,7 +357,8 @@ class DemoSetupTest : public LoginManagerTest {
void SkipToErrorDialog() { void SkipToErrorDialog() {
// Simulate online setup error. // Simulate online setup error.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
// Enrollment type is set in the part of the flow that is skipped, That is // Enrollment type is set in the part of the flow that is skipped, That is
// why we need to set it here. // why we need to set it here.
...@@ -561,9 +555,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) { ...@@ -561,9 +555,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_TRUE(IsScreenDialogElementEnabled( EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext, ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kAsync); JSExecution::kAsync);
...@@ -578,9 +572,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) { ...@@ -578,9 +572,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting(); SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync); "#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync); "#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
...@@ -594,10 +588,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) { ...@@ -594,10 +588,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowSuccess) {
EXPECT_TRUE(StartupUtils::IsDeviceRegistered()); EXPECT_TRUE(StartupUtils::IsDeviceRegistered());
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowErrorDefault) {
// Simulate online setup failure. // Simulate online setup failure.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
SimulateNetworkConnected(); SimulateNetworkConnected();
InvokeDemoModeWithAccelerator(); InvokeDemoModeWithAccelerator();
...@@ -611,9 +606,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -611,9 +606,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_TRUE(IsScreenDialogElementEnabled( EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext, ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kAsync); JSExecution::kAsync);
...@@ -628,9 +623,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -628,9 +623,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting(); SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync); "#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync); "#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
...@@ -643,6 +638,79 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) { ...@@ -643,6 +638,79 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowError) {
// Default error returned by MockDemoModeOnlineEnrollmentHelperCreator. // Default error returned by MockDemoModeOnlineEnrollmentHelperCreator.
EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_TEMPORARY_ERROR, EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_TEMPORARY_ERROR,
IDS_DEMO_SETUP_RECOVERY_RETRY)); IDS_DEMO_SETUP_RECOVERY_RETRY));
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#retryButton"));
EXPECT_FALSE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#powerwashButton"));
EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
ButtonToTag(OobeButton::kBack)));
EXPECT_FALSE(StartupUtils::IsOobeCompleted());
EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
}
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowErrorPowerwashRequired) {
// Simulate online setup failure that requires powerwash.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_POWERWASH_REQUIRED>);
SimulateNetworkConnected();
InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
ClickOobeButton(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, OobeButton::kText,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
DemoSetupDialog::kNetwork,
ButtonToTag(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
OobeButton::kText, JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting();
ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
// TODO(agawronska): Progress dialog transition is async - extra work is
// needed to be able to check it reliably.
WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError);
EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_ALREADY_LOCKED_ERROR,
IDS_DEMO_SETUP_RECOVERY_POWERWASH));
EXPECT_FALSE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#retryButton"));
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#powerwashButton"));
EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
ButtonToTag(OobeButton::kBack)));
EXPECT_FALSE(StartupUtils::IsOobeCompleted()); EXPECT_FALSE(StartupUtils::IsOobeCompleted());
EXPECT_FALSE(StartupUtils::IsDeviceRegistered()); EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
} }
...@@ -670,9 +738,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) { ...@@ -670,9 +738,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_TRUE(IsScreenDialogElementEnabled( EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext, ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kAsync); JSExecution::kAsync);
...@@ -687,9 +755,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) { ...@@ -687,9 +755,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OnlineSetupFlowCrosComponentFailure) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting(); SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync); "#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync); "#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_UPDATE).Wait();
...@@ -727,9 +795,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) { ...@@ -727,9 +795,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_FALSE(IsScreenDialogElementEnabled( EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
const std::string offline_setup_item_name = const std::string offline_setup_item_name =
l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME); l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME);
...@@ -745,9 +813,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) { ...@@ -745,9 +813,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting(); SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync); "#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync); "#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
...@@ -759,10 +827,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) { ...@@ -759,10 +827,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowSuccess) {
EXPECT_TRUE(StartupUtils::IsDeviceRegistered()); EXPECT_TRUE(StartupUtils::IsDeviceRegistered());
} }
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowErrorDefault) {
// Simulate offline setup failure. // Simulate offline setup failure.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOfflineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
SimulateNetworkDisconnected(); SimulateNetworkDisconnected();
InvokeDemoModeWithAccelerator(); InvokeDemoModeWithAccelerator();
...@@ -780,9 +849,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -780,9 +849,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_FALSE(IsScreenDialogElementEnabled( EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
const std::string offline_setup_item_name = const std::string offline_setup_item_name =
l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME); l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME);
...@@ -798,9 +867,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -798,9 +867,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE)); EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting(); SetPlayStoreTermsForTesting();
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync); "#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithId(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE, ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync); "#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
...@@ -809,8 +878,83 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -809,8 +878,83 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP, WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError); DemoSetupDialog::kError);
// Default error returned by MockDemoModeOfflineEnrollmentHelperCreator. // Default error returned by MockDemoModeOfflineEnrollmentHelperCreator.
EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_OFFLINE_POLICY_ERROR,
IDS_DEMO_SETUP_RECOVERY_OFFLINE_FATAL));
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#retryButton"));
EXPECT_FALSE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#powerwashButton"));
EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
ButtonToTag(OobeButton::kBack)));
EXPECT_FALSE(StartupUtils::IsOobeCompleted());
EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
}
IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowErrorPowerwashRequired) {
// Simulate offline setup failure.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_POWERWASH_REQUIRED>);
SimulateNetworkDisconnected();
InvokeDemoModeWithAccelerator();
ClickOkOnConfirmationDialog();
// It needs to be done after demo setup controller was created (demo setup
// flow was started).
SimulateOfflineEnvironment();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES));
ClickOobeButton(OobeScreen::SCREEN_OOBE_DEMO_PREFERENCES, OobeButton::kText,
JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_NETWORK).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_NETWORK));
EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
DemoSetupDialog::kNetwork,
ButtonToTag(OobeButton::kNext)));
const std::string offline_setup_item_name =
l10n_util::GetStringUTF8(IDS_NETWORK_OFFLINE_DEMO_SETUP_LIST_ITEM_NAME);
ClickNetworkListElement(offline_setup_item_name);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_OOBE_EULA));
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_EULA, DemoSetupDialog::kEula,
OobeButton::kText, JSExecution::kSync);
OobeScreenWaiter(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE).Wait();
EXPECT_TRUE(IsScreenShown(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE));
SetPlayStoreTermsForTesting();
ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-next-button", JSExecution::kSync);
ClickOobeButtonWithSelector(OobeScreen::SCREEN_ARC_TERMS_OF_SERVICE,
"#arc-tos-accept-button", JSExecution::kAsync);
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_DEMO_SETUP).Wait();
// TODO(agawronska): Progress dialog transition is async - extra work is
// needed to be able to check it reliably.
WaitForScreenDialog(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError);
EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_LOCK_ERROR, EXPECT_TRUE(IsErrorMessageShown(IDS_DEMO_SETUP_LOCK_ERROR,
IDS_DEMO_SETUP_RECOVERY_POWERWASH)); IDS_DEMO_SETUP_RECOVERY_POWERWASH));
EXPECT_FALSE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#retryButton"));
EXPECT_TRUE(IsScreenDialogElementShown(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
"#powerwashButton"));
EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
DemoSetupDialog::kError,
ButtonToTag(OobeButton::kBack)));
EXPECT_FALSE(StartupUtils::IsOobeCompleted()); EXPECT_FALSE(StartupUtils::IsOobeCompleted());
EXPECT_FALSE(StartupUtils::IsDeviceRegistered()); EXPECT_FALSE(StartupUtils::IsDeviceRegistered());
...@@ -819,10 +963,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) { ...@@ -819,10 +963,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, OfflineSetupFlowError) {
IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) {
SimulateNetworkDisconnected(); SimulateNetworkDisconnected();
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
EXPECT_FALSE(IsScreenDialogElementEnabled( DemoSetupDialog::kNetwork,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, ButtonToTag(OobeButton::kNext)));
ButtonToStringId(OobeButton::kNext)));
ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext, ClickOobeButton(OobeScreen::SCREEN_OOBE_NETWORK, OobeButton::kNext,
JSExecution::kSync); JSExecution::kSync);
...@@ -833,9 +976,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) { ...@@ -833,9 +976,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, NextDisabledOnNetworkScreen) {
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickNetworkOnNetworkScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickNetworkOnNetworkScreen) {
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_FALSE(IsScreenDialogElementEnabled( EXPECT_FALSE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
ClickNetworkListElement(kDefaultNetworkName); ClickNetworkListElement(kDefaultNetworkName);
SimulateNetworkConnected(); SimulateNetworkConnected();
...@@ -847,9 +990,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickNetworkOnNetworkScreen) { ...@@ -847,9 +990,9 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickNetworkOnNetworkScreen) {
IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickConnectedNetworkOnNetworkScreen) { IN_PROC_BROWSER_TEST_F(DemoSetupTest, ClickConnectedNetworkOnNetworkScreen) {
SimulateNetworkConnected(); SimulateNetworkConnected();
SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK); SkipToScreen(OobeScreen::SCREEN_OOBE_NETWORK);
EXPECT_TRUE(IsScreenDialogElementEnabled( EXPECT_TRUE(IsScreenDialogElementEnabled(OobeScreen::SCREEN_OOBE_NETWORK,
OobeScreen::SCREEN_OOBE_NETWORK, DemoSetupDialog::kNetwork, DemoSetupDialog::kNetwork,
ButtonToStringId(OobeButton::kNext))); ButtonToTag(OobeButton::kNext)));
ClickNetworkListElement(kDefaultNetworkName); ClickNetworkListElement(kDefaultNetworkName);
...@@ -896,13 +1039,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, RetryOnErrorScreen) { ...@@ -896,13 +1039,11 @@ IN_PROC_BROWSER_TEST_F(DemoSetupTest, RetryOnErrorScreen) {
// Simulate successful online setup on retry. // Simulate successful online setup on retry.
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
ClickScreenDialogButtonWithSelector(OobeScreen::SCREEN_OOBE_DEMO_SETUP,
ClickScreenDialogButton(OobeScreen::SCREEN_OOBE_DEMO_SETUP, DemoSetupDialog::kError, "#retryButton",
DemoSetupDialog::kError, OobeButton::kText,
JSExecution::kAsync); JSExecution::kAsync);
// TODO(agawronska): Progress dialog transition is async - extra work is // TODO(agawronska): Progress dialog transition is async - extra work is
// needed to be able to check it reliably. // needed to be able to check it reliably.
OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait(); OobeScreenWaiter(OobeScreen::SCREEN_GAIA_SIGNIN).Wait();
} }
......
...@@ -229,12 +229,38 @@ TEST_F(DemoSetupControllerTest, OfflineInvalidDeviceLocalAccountPolicyBlob) { ...@@ -229,12 +229,38 @@ TEST_F(DemoSetupControllerTest, OfflineInvalidDeviceLocalAccountPolicyBlob) {
EXPECT_EQ("", GetDeviceRequisition()); EXPECT_EQ("", GetDeviceRequisition());
} }
TEST_F(DemoSetupControllerTest, OfflineError) { TEST_F(DemoSetupControllerTest, OfflineErrorDefault) {
base::ScopedTempDir temp_dir; base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir)); ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOfflineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
policy::MockCloudPolicyStore mock_store;
EXPECT_CALL(mock_store, Store(_)).Times(0);
tested_controller_->SetDeviceLocalAccountPolicyStoreForTest(&mock_store);
tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOffline);
tested_controller_->SetOfflineDataDirForTest(temp_dir.GetPath());
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(false));
EXPECT_FALSE(helper_->RequiresPowerwash());
EXPECT_EQ("", GetDeviceRequisition());
}
TEST_F(DemoSetupControllerTest, OfflineErrorPowerwashRequired) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(SetupDummyOfflinePolicyDir("test", &temp_dir));
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOfflineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_POWERWASH_REQUIRED>);
policy::MockCloudPolicyStore mock_store; policy::MockCloudPolicyStore mock_store;
EXPECT_CALL(mock_store, Store(_)).Times(0); EXPECT_CALL(mock_store, Store(_)).Times(0);
...@@ -268,9 +294,10 @@ TEST_F(DemoSetupControllerTest, OnlineSuccess) { ...@@ -268,9 +294,10 @@ TEST_F(DemoSetupControllerTest, OnlineSuccess) {
EXPECT_EQ("", GetDeviceRequisition()); EXPECT_EQ("", GetDeviceRequisition());
} }
TEST_F(DemoSetupControllerTest, OnlineError) { TEST_F(DemoSetupControllerTest, OnlineErrorDefault) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline); tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline);
tested_controller_->Enroll( tested_controller_->Enroll(
...@@ -284,6 +311,23 @@ TEST_F(DemoSetupControllerTest, OnlineError) { ...@@ -284,6 +311,23 @@ TEST_F(DemoSetupControllerTest, OnlineError) {
EXPECT_EQ("", GetDeviceRequisition()); EXPECT_EQ("", GetDeviceRequisition());
} }
TEST_F(DemoSetupControllerTest, OnlineErrorPowerwashRequired) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_POWERWASH_REQUIRED>);
tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline);
tested_controller_->Enroll(
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupSuccess,
base::Unretained(helper_.get())),
base::BindOnce(&DemoSetupControllerTestHelper::OnSetupError,
base::Unretained(helper_.get())));
EXPECT_TRUE(helper_->WaitResult(false));
EXPECT_TRUE(helper_->RequiresPowerwash());
EXPECT_EQ("", GetDeviceRequisition());
}
TEST_F(DemoSetupControllerTest, OnlineComponentError) { TEST_F(DemoSetupControllerTest, OnlineComponentError) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>); &MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::SUCCESS>);
...@@ -305,7 +349,8 @@ TEST_F(DemoSetupControllerTest, OnlineComponentError) { ...@@ -305,7 +349,8 @@ TEST_F(DemoSetupControllerTest, OnlineComponentError) {
TEST_F(DemoSetupControllerTest, EnrollTwice) { TEST_F(DemoSetupControllerTest, EnrollTwice) {
EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock( EnterpriseEnrollmentHelper::SetupEnrollmentHelperMock(
&MockDemoModeOnlineEnrollmentHelperCreator<DemoModeSetupResult::ERROR>); &MockDemoModeOnlineEnrollmentHelperCreator<
DemoModeSetupResult::ERROR_DEFAULT>);
tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline); tested_controller_->set_demo_config(DemoSession::DemoModeConfig::kOnline);
tested_controller_->Enroll( tested_controller_->Enroll(
......
...@@ -22,7 +22,12 @@ namespace chromeos { ...@@ -22,7 +22,12 @@ namespace chromeos {
namespace test { namespace test {
// Result of Demo Mode setup. // Result of Demo Mode setup.
enum class DemoModeSetupResult { SUCCESS, ERROR }; // TODO(agawronska, wzang): Test more error types.
enum class DemoModeSetupResult {
SUCCESS,
ERROR_DEFAULT,
ERROR_POWERWASH_REQUIRED
};
// Helper method that mocks EnterpriseEnrollmentHelper for online Demo Mode // Helper method that mocks EnterpriseEnrollmentHelper for online Demo Mode
// setup. It simulates specified Demo Mode enrollment |result|. // setup. It simulates specified Demo Mode enrollment |result|.
...@@ -37,14 +42,23 @@ EnterpriseEnrollmentHelper* MockDemoModeOnlineEnrollmentHelperCreator( ...@@ -37,14 +42,23 @@ EnterpriseEnrollmentHelper* MockDemoModeOnlineEnrollmentHelperCreator(
EXPECT_EQ(enrollment_config.mode, policy::EnrollmentConfig::MODE_ATTESTATION); EXPECT_EQ(enrollment_config.mode, policy::EnrollmentConfig::MODE_ATTESTATION);
EXPECT_CALL(*mock, EnrollUsingAttestation()) EXPECT_CALL(*mock, EnrollUsingAttestation())
.WillRepeatedly(testing::Invoke([mock]() { .WillRepeatedly(testing::Invoke([mock]() {
if (result == DemoModeSetupResult::SUCCESS) { switch (result) {
case DemoModeSetupResult::SUCCESS:
mock->status_consumer()->OnDeviceEnrolled(""); mock->status_consumer()->OnDeviceEnrolled("");
} else { break;
// TODO(agawronska): Test different error types. case DemoModeSetupResult::ERROR_POWERWASH_REQUIRED:
mock->status_consumer()->OnEnrollmentError(
policy::EnrollmentStatus::ForLockError(
chromeos::InstallAttributes::LOCK_ALREADY_LOCKED));
break;
case DemoModeSetupResult::ERROR_DEFAULT:
mock->status_consumer()->OnEnrollmentError( mock->status_consumer()->OnEnrollmentError(
policy::EnrollmentStatus::ForRegistrationError( policy::EnrollmentStatus::ForRegistrationError(
policy::DeviceManagementStatus:: policy::DeviceManagementStatus::
DM_STATUS_TEMPORARY_UNAVAILABLE)); DM_STATUS_TEMPORARY_UNAVAILABLE));
break;
default:
NOTREACHED();
} }
})); }));
return mock; return mock;
...@@ -64,13 +78,22 @@ EnterpriseEnrollmentHelper* MockDemoModeOfflineEnrollmentHelperCreator( ...@@ -64,13 +78,22 @@ EnterpriseEnrollmentHelper* MockDemoModeOfflineEnrollmentHelperCreator(
policy::EnrollmentConfig::MODE_OFFLINE_DEMO); policy::EnrollmentConfig::MODE_OFFLINE_DEMO);
EXPECT_CALL(*mock, EnrollForOfflineDemo()) EXPECT_CALL(*mock, EnrollForOfflineDemo())
.WillRepeatedly(testing::Invoke([mock]() { .WillRepeatedly(testing::Invoke([mock]() {
if (result == DemoModeSetupResult::SUCCESS) { switch (result) {
case DemoModeSetupResult::SUCCESS:
mock->status_consumer()->OnDeviceEnrolled(""); mock->status_consumer()->OnDeviceEnrolled("");
} else { break;
// TODO(agawronska): Test different error types. case DemoModeSetupResult::ERROR_POWERWASH_REQUIRED:
mock->status_consumer()->OnEnrollmentError( mock->status_consumer()->OnEnrollmentError(
policy::EnrollmentStatus::ForLockError( policy::EnrollmentStatus::ForLockError(
chromeos::InstallAttributes::LOCK_READBACK_ERROR)); chromeos::InstallAttributes::LOCK_READBACK_ERROR));
break;
case DemoModeSetupResult::ERROR_DEFAULT:
mock->status_consumer()->OnEnrollmentError(
policy::EnrollmentStatus::ForStatus(
policy::EnrollmentStatus::OFFLINE_POLICY_DECODING_FAILED));
break;
default:
NOTREACHED();
} }
})); }));
return mock; return mock;
......
...@@ -8,11 +8,14 @@ ...@@ -8,11 +8,14 @@
#include "chrome/browser/chromeos/login/screens/base_screen_delegate.h" #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
#include "chrome/browser/chromeos/login/screens/demo_setup_screen_view.h" #include "chrome/browser/chromeos/login/screens/demo_setup_screen_view.h"
#include "chrome/browser/chromeos/login/wizard_controller.h" #include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h"
namespace { namespace {
constexpr char kUserActionStartSetup[] = "start-setup"; constexpr char kUserActionStartSetup[] = "start-setup";
constexpr char kUserActionClose[] = "close-setup"; constexpr char kUserActionClose[] = "close-setup";
constexpr char kUserActionPowerwash[] = "powerwash";
} // namespace } // namespace
...@@ -47,6 +50,10 @@ void DemoSetupScreen::OnUserAction(const std::string& action_id) { ...@@ -47,6 +50,10 @@ void DemoSetupScreen::OnUserAction(const std::string& action_id) {
StartEnrollment(); StartEnrollment();
} else if (action_id == kUserActionClose) { } else if (action_id == kUserActionClose) {
Finish(ScreenExitCode::DEMO_MODE_SETUP_CANCELED); Finish(ScreenExitCode::DEMO_MODE_SETUP_CANCELED);
} else if (action_id == kUserActionPowerwash) {
chromeos::DBusThreadManager::Get()
->GetSessionManagerClient()
->StartDeviceWipe();
} else { } else {
BaseScreen::OnUserAction(action_id); BaseScreen::OnUserAction(action_id);
} }
......
...@@ -51,12 +51,20 @@ ...@@ -51,12 +51,20 @@
images/alert-illustration_2x.svg 2x"> images/alert-illustration_2x.svg 2x">
</div> </div>
<div slot="bottom-buttons" class="layout horizontal justified"> <div slot="bottom-buttons" class="layout horizontal justified">
<oobe-back-button inverse on-tap="onCloseClicked_"></oobe-back-button> <oobe-back-button inverse on-tap="onCloseClicked_"
<oobe-text-button inverse on-tap="onRetryClicked_"> disabled="[[isPowerwashRequired_]]"></oobe-back-button>
<oobe-text-button id="retryButton" on-tap="onRetryClicked_"
inverse hidden="[[isPowerwashRequired_]]">
<div> <div>
[[i18nDynamic(locale, 'demoSetupErrorScreenRetryButtonLabel')]] [[i18nDynamic(locale, 'demoSetupErrorScreenRetryButtonLabel')]]
</div> </div>
</oobe-text-button> </oobe-text-button>
<oobe-text-button id="powerwashButton" on-tap="onPowerwashClicked_"
inverse hidden="[[!isPowerwashRequired_]]">
<div>
[[i18nDynamic(locale, 'demoSetupErrorScreenPowerwashButtonLabel')]]
</div>
</oobe-text-button>
</div> </div>
</oobe-dialog> </oobe-dialog>
......
...@@ -19,6 +19,12 @@ Polymer({ ...@@ -19,6 +19,12 @@ Polymer({
value: '', value: '',
}, },
/** Whether powerwash is required in case of a setup error. */
isPowerwashRequired_: {
type: Boolean,
value: false,
},
/** Ordered array of screen ids that are a part of demo setup flow. */ /** Ordered array of screen ids that are a part of demo setup flow. */
screens_: { screens_: {
type: Array, type: Array,
...@@ -48,9 +54,12 @@ Polymer({ ...@@ -48,9 +54,12 @@ Polymer({
/** /**
* Called when demo mode setup failed. * Called when demo mode setup failed.
* @param {string} message Error message to be displayed to the user. * @param {string} message Error message to be displayed to the user.
* @param {boolean} isPowerwashRequired Whether powerwash is required to
* recover from the error.
*/ */
onSetupFailed: function(message) { onSetupFailed: function(message, isPowerwashRequired) {
this.errorMessage_ = message; this.errorMessage_ = message;
this.isPowerwashRequired_ = isPowerwashRequired;
this.showScreen_('demoSetupErrorDialog'); this.showScreen_('demoSetupErrorDialog');
}, },
...@@ -96,11 +105,22 @@ Polymer({ ...@@ -96,11 +105,22 @@ Polymer({
this.reset(); this.reset();
}, },
/**
* Powerwash button click handler.
* @private
*/
onPowerwashClicked_: function() {
chrome.send('login.DemoSetupScreen.userActed', ['powerwash']);
},
/** /**
* Close button click handler. * Close button click handler.
* @private * @private
*/ */
onCloseClicked_: function() { onCloseClicked_: function() {
// TODO(wzang): Remove this after crbug.com/900640 is fixed.
if (this.isPowerwashRequired_)
return;
chrome.send('login.DemoSetupScreen.userActed', ['close-setup']); chrome.send('login.DemoSetupScreen.userActed', ['close-setup']);
}, },
}); });
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
Attributes: Attributes:
'disabled' - button is disabled when the attribute is set. 'disabled' - button is disabled when the attribute is set.
(See crbug.com/900640)
'inverse' - makes text white and background blue. 'inverse' - makes text white and background blue.
'label-for-aria' - accessibility label. 'label-for-aria' - accessibility label.
'border' - adds border to the button. 'border' - adds border to the button.
...@@ -84,6 +85,7 @@ ...@@ -84,6 +85,7 @@
Attributes: Attributes:
'disabled' - button is disabled when the attribute is set. 'disabled' - button is disabled when the attribute is set.
(See crbug.com/900640)
'label-for-aria' - accessibility label. 'label-for-aria' - accessibility label.
--> -->
<dom-module id="oobe-back-button"> <dom-module id="oobe-back-button">
......
...@@ -45,9 +45,11 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() { ...@@ -45,9 +45,11 @@ login.createScreen('DemoSetupScreen', 'demo-setup', function() {
/** /**
* Called when demo mode setup failed. * Called when demo mode setup failed.
* @param {string} message Error message to be displayed to the user. * @param {string} message Error message to be displayed to the user.
* @param {boolean} isPowerwashRequired Whether powerwash is required to
* recover from the error.
*/ */
onSetupFailed: function(message) { onSetupFailed: function(message, isPowerwashRequired) {
this.demoSetupModule_.onSetupFailed(message); this.demoSetupModule_.onSetupFailed(message, isPowerwashRequired);
}, },
}; };
}); });
...@@ -43,10 +43,13 @@ void DemoSetupScreenHandler::Bind(DemoSetupScreen* screen) { ...@@ -43,10 +43,13 @@ void DemoSetupScreenHandler::Bind(DemoSetupScreen* screen) {
void DemoSetupScreenHandler::OnSetupFailed( void DemoSetupScreenHandler::OnSetupFailed(
const DemoSetupController::DemoSetupError& error) { const DemoSetupController::DemoSetupError& error) {
// TODO(wzang): Consider customization for RecoveryMethod::kReboot as well.
CallJS("onSetupFailed", CallJS("onSetupFailed",
base::JoinString({error.GetLocalizedErrorMessage(), base::JoinString({error.GetLocalizedErrorMessage(),
error.GetLocalizedRecoveryMessage()}, error.GetLocalizedRecoveryMessage()},
base::UTF8ToUTF16(" "))); base::UTF8ToUTF16(" ")),
error.recovery_method() ==
DemoSetupController::DemoSetupError::RecoveryMethod::kPowerwash);
} }
void DemoSetupScreenHandler::OnSetupSucceeded() { void DemoSetupScreenHandler::OnSetupSucceeded() {
...@@ -63,6 +66,8 @@ void DemoSetupScreenHandler::DeclareLocalizedValues( ...@@ -63,6 +66,8 @@ void DemoSetupScreenHandler::DeclareLocalizedValues(
IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_TITLE); IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_TITLE);
builder->Add("demoSetupErrorScreenRetryButtonLabel", builder->Add("demoSetupErrorScreenRetryButtonLabel",
IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_RETRY_BUTTON_LABEL); IDS_OOBE_DEMO_SETUP_ERROR_SCREEN_RETRY_BUTTON_LABEL);
builder->Add("demoSetupErrorScreenPowerwashButtonLabel",
IDS_LOCAL_STATE_ERROR_POWERWASH_BUTTON);
} }
} // namespace chromeos } // namespace chromeos
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