Index: chrome/browser/chromeos/login/wizard_controller_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc |
index 02f1e9d2f4ea75380caf4a34409d53e2d1395f61..cb09d208652ff0aec5f76aca3e4477e5e1321b88 100644 |
--- a/chrome/browser/chromeos/login/wizard_controller_browsertest.cc |
+++ b/chrome/browser/chromeos/login/wizard_controller_browsertest.cc |
@@ -25,8 +25,10 @@ |
#include "chrome/browser/chromeos/login/enrollment/mock_auto_enrollment_check_screen.h" |
#include "chrome/browser/chromeos/login/enrollment/mock_enrollment_screen.h" |
#include "chrome/browser/chromeos/login/existing_user_controller.h" |
+#include "chrome/browser/chromeos/login/screens/device_disabled_screen.h" |
#include "chrome/browser/chromeos/login/screens/error_screen.h" |
#include "chrome/browser/chromeos/login/screens/hid_detection_screen.h" |
+#include "chrome/browser/chromeos/login/screens/mock_device_disabled_screen_actor.h" |
#include "chrome/browser/chromeos/login/screens/mock_eula_screen.h" |
#include "chrome/browser/chromeos/login/screens/mock_network_screen.h" |
#include "chrome/browser/chromeos/login/screens/mock_update_screen.h" |
@@ -41,6 +43,7 @@ |
#include "chrome/browser/chromeos/login/ui/webui_login_view.h" |
#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" |
#include "chrome/browser/chromeos/policy/server_backed_device_state.h" |
+#include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" |
#include "chrome/browser/chromeos/profiles/profile_helper.h" |
#include "chrome/browser/chromeos/timezone/timezone_request.h" |
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
@@ -64,6 +67,7 @@ |
#include "chromeos/settings/timezone_settings.h" |
#include "chromeos/system/fake_statistics_provider.h" |
#include "chromeos/system/statistics_provider.h" |
+#include "components/policy/core/common/cloud/cloud_policy_constants.h" |
#include "content/public/test/browser_test_utils.h" |
#include "content/public/test/test_utils.h" |
#include "net/test/spawned_test_server/spawned_test_server.h" |
@@ -77,6 +81,7 @@ |
using ::testing::Exactly; |
using ::testing::Invoke; |
+using ::testing::Mock; |
using ::testing::Return; |
namespace chromeos { |
@@ -106,6 +111,8 @@ const char kTimezoneResponseBody[] = |
" \"timeZoneName\" : \"Pacific Standard Time\"\n" |
"}"; |
+const char kDisabledMessage[] = "This device has been disabled."; |
+ |
class PrefStoreStub : public TestingPrefStore { |
public: |
// TestingPrefStore overrides: |
@@ -390,7 +397,9 @@ class WizardControllerFlowTest : public WizardControllerTest { |
WizardControllerTest::SetUpOnMainThread(); |
// Make sure that OOBE is run as an "official" build. |
- WizardController::default_controller()->is_official_build_ = true; |
+ WizardController* wizard_controller = |
+ WizardController::default_controller(); |
+ wizard_controller->is_official_build_ = true; |
// Clear portal list (as it is by default in OOBE). |
NetworkHandler::Get()->network_state_handler()->SetCheckPortalList(""); |
@@ -416,12 +425,22 @@ class WizardControllerFlowTest : public WizardControllerTest { |
kAutoEnrollmentCheckScreenName, |
MockAutoEnrollmentCheckScreen, |
MockAutoEnrollmentCheckScreenActor); |
+ device_disabled_screen_actor_.reset(new MockDeviceDisabledScreenActor); |
+ wizard_controller->screens_[WizardController::kDeviceDisabledScreenName] = |
+ make_linked_ptr(new DeviceDisabledScreen( |
+ wizard_controller, |
+ device_disabled_screen_actor_.get())); |
+ EXPECT_CALL(*device_disabled_screen_actor_, Show(_)).Times(0); |
// Switch to the initial screen. |
- EXPECT_EQ(NULL, WizardController::default_controller()->current_screen()); |
+ EXPECT_EQ(NULL, wizard_controller->current_screen()); |
EXPECT_CALL(*mock_network_screen_, Show()).Times(1); |
- WizardController::default_controller()->AdvanceToScreen( |
- WizardController::kNetworkScreenName); |
+ wizard_controller->AdvanceToScreen(WizardController::kNetworkScreenName); |
+ } |
+ |
+ void TearDownOnMainThread() override { |
+ device_disabled_screen_actor_.reset(); |
+ WizardControllerTest::TearDownOnMainThread(); |
} |
virtual void TearDown() { |
@@ -488,6 +507,7 @@ class WizardControllerFlowTest : public WizardControllerTest { |
MockEnrollmentScreenActor>* mock_enrollment_screen_; |
MockOutShowHide<MockAutoEnrollmentCheckScreen, |
MockAutoEnrollmentCheckScreenActor>* mock_auto_enrollment_check_screen_; |
+ scoped_ptr<MockDeviceDisabledScreenActor> device_disabled_screen_actor_; |
private: |
NetworkPortalDetectorTestImpl* network_portal_detector_; |
@@ -525,6 +545,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) { |
InitTimezoneResolver(); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
EXPECT_TRUE(GetGeolocationProvider()); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -534,7 +555,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowMain) { |
OnExit(ScreenObserver::UPDATE_INSTALLED); |
CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); |
- EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(0); |
+ EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); |
EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); |
OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); |
@@ -562,6 +583,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) { |
EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -571,7 +593,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, ControlFlowErrorUpdate) { |
OnExit(ScreenObserver::UPDATE_ERROR_UPDATING); |
CheckCurrentScreen(WizardController::kAutoEnrollmentCheckScreenName); |
- EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(0); |
+ EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); |
EXPECT_CALL(*mock_eula_screen_, Show()).Times(0); |
OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); |
@@ -700,9 +722,13 @@ IN_PROC_BROWSER_TEST_F(WizardControllerFlowTest, |
EXPECT_FALSE(ExistingUserController::current_controller() == NULL); |
} |
-class WizardControllerEnrollmentFlowTest : public WizardControllerFlowTest { |
+class WizardControllerDeviceStateTest : public WizardControllerFlowTest { |
protected: |
- WizardControllerEnrollmentFlowTest() { |
+ WizardControllerDeviceStateTest() |
+ : install_attributes_(std::string(), |
+ std::string(), |
+ std::string(), |
+ policy::DEVICE_MODE_NOT_SET) { |
fake_statistics_provider_.SetMachineStatistic("serial_number", "test"); |
fake_statistics_provider_.SetMachineStatistic(system::kActivateDateKey, |
"2000-01"); |
@@ -723,10 +749,12 @@ class WizardControllerEnrollmentFlowTest : public WizardControllerFlowTest { |
system::ScopedFakeStatisticsProvider fake_statistics_provider_; |
private: |
- DISALLOW_COPY_AND_ASSIGN(WizardControllerEnrollmentFlowTest); |
+ policy::ScopedStubEnterpriseInstallAttributes install_attributes_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(WizardControllerDeviceStateTest); |
}; |
-IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
+IN_PROC_BROWSER_TEST_F(WizardControllerDeviceStateTest, |
ControlFlowForcedReEnrollment) { |
CheckCurrentScreen(WizardController::kNetworkScreenName); |
EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); |
@@ -738,6 +766,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -752,6 +781,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
WizardController::default_controller()->current_screen()); |
EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); |
screen->Start(); |
+ |
// Wait for auto-enrollment controller to encounter the connection error. |
WaitForAutoEnrollmentState(policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR); |
@@ -780,7 +810,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
EXPECT_TRUE(StartupUtils::IsOobeCompleted()); |
} |
-IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
+IN_PROC_BROWSER_TEST_F(WizardControllerDeviceStateTest, |
ControlFlowNoForcedReEnrollmentOnFirstBoot) { |
fake_statistics_provider_.ClearMachineStatistic(system::kActivateDateKey); |
EXPECT_NE(policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, |
@@ -798,6 +828,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -810,6 +841,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
AutoEnrollmentCheckScreen::Get(WizardController::default_controller()); |
EXPECT_EQ(screen, |
WizardController::default_controller()->current_screen()); |
+ EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); |
screen->Start(); |
EXPECT_EQ(policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, |
LoginDisplayHostImpl::default_host() |
@@ -817,6 +849,57 @@ IN_PROC_BROWSER_TEST_F(WizardControllerEnrollmentFlowTest, |
->state()); |
} |
+IN_PROC_BROWSER_TEST_F(WizardControllerDeviceStateTest, |
+ ControlFlowDeviceDisabled) { |
+ CheckCurrentScreen(WizardController::kNetworkScreenName); |
+ EXPECT_CALL(*mock_network_screen_, Hide()).Times(1); |
+ EXPECT_CALL(*mock_eula_screen_, Show()).Times(1); |
+ OnExit(ScreenObserver::NETWORK_CONNECTED); |
+ |
+ CheckCurrentScreen(WizardController::kEulaScreenName); |
+ EXPECT_CALL(*mock_eula_screen_, Hide()).Times(1); |
+ EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
+ EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
+ OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
+ // Let update screen smooth time process (time = 0ms). |
+ content::RunAllPendingInMessageLoop(); |
+ |
+ CheckCurrentScreen(WizardController::kUpdateScreenName); |
+ EXPECT_CALL(*mock_update_screen_, Hide()).Times(1); |
+ EXPECT_CALL(*mock_auto_enrollment_check_screen_, Show()).Times(1); |
+ OnExit(ScreenObserver::UPDATE_INSTALLED); |
+ |
+ AutoEnrollmentCheckScreen* screen = |
+ AutoEnrollmentCheckScreen::Get(WizardController::default_controller()); |
+ EXPECT_EQ(screen, |
+ WizardController::default_controller()->current_screen()); |
+ EXPECT_CALL(*mock_auto_enrollment_check_screen_, Hide()).Times(1); |
+ screen->Start(); |
+ |
+ // Wait for auto-enrollment controller to encounter the connection error. |
+ WaitForAutoEnrollmentState(policy::AUTO_ENROLLMENT_STATE_CONNECTION_ERROR); |
+ |
+ // The error screen shows up if device state could not be retrieved. |
+ EXPECT_FALSE(StartupUtils::IsOobeCompleted()); |
+ EXPECT_EQ(GetErrorScreen(), |
+ WizardController::default_controller()->current_screen()); |
+ base::DictionaryValue device_state; |
+ device_state.SetBoolean(policy::kDeviceStateDisabled, true); |
+ device_state.SetString(policy::kDeviceStateDisabledMessage, kDisabledMessage); |
+ g_browser_process->local_state()->Set(prefs::kServerBackedDeviceState, |
+ device_state); |
+ EXPECT_CALL(*device_disabled_screen_actor_, Show(kDisabledMessage)).Times(1); |
+ OnExit(ScreenObserver::ENTERPRISE_AUTO_ENROLLMENT_CHECK_COMPLETED); |
+ |
+ ResetAutoEnrollmentCheckScreen(); |
+ |
+ // Make sure the device disabled screen is shown. |
+ CheckCurrentScreen(WizardController::kDeviceDisabledScreenName); |
+ |
+ EXPECT_FALSE(StartupUtils::IsOobeCompleted()); |
+} |
+ |
class WizardControllerBrokenLocalStateTest : public WizardControllerTest { |
protected: |
WizardControllerBrokenLocalStateTest() |
@@ -845,11 +928,6 @@ class WizardControllerBrokenLocalStateTest : public WizardControllerTest { |
WizardController::default_controller()->is_official_build_ = true; |
} |
- virtual void TearDownInProcessBrowserTestFixture() override { |
- WizardControllerTest::TearDownInProcessBrowserTestFixture(); |
- } |
- |
- |
FakeSessionManagerClient* fake_session_manager_client() const { |
return fake_session_manager_client_; |
} |
@@ -970,6 +1048,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerKioskFlowTest, |
EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -1014,6 +1093,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerKioskFlowTest, |
EXPECT_CALL(*mock_update_screen_, StartNetworkCheck()).Times(1); |
EXPECT_CALL(*mock_update_screen_, Show()).Times(1); |
OnExit(ScreenObserver::EULA_ACCEPTED); |
+ |
// Let update screen smooth time process (time = 0ms). |
content::RunAllPendingInMessageLoop(); |
@@ -1113,7 +1193,7 @@ IN_PROC_BROWSER_TEST_F(WizardControllerOobeResumeTest, |
// TODO(dzhioev): Add tests for controller/host pairing flow. |
// http://crbug.com/375191 |
-COMPILE_ASSERT(ScreenObserver::EXIT_CODES_COUNT == 23, |
+COMPILE_ASSERT(ScreenObserver::EXIT_CODES_COUNT == 24, |
add_tests_for_new_control_flow_you_just_introduced); |
} // namespace chromeos |