Index: chrome/browser/chromeos/system/device_disabling_browsertest.cc |
diff --git a/chrome/browser/chromeos/system/device_disabling_browsertest.cc b/chrome/browser/chromeos/system/device_disabling_browsertest.cc |
index 23a0d934e63094b417d5b620de0388b74ffc8134..b2e1a423d3357ca72bc4bbeafd4d059646ee7c38 100644 |
--- a/chrome/browser/chromeos/system/device_disabling_browsertest.cc |
+++ b/chrome/browser/chromeos/system/device_disabling_browsertest.cc |
@@ -44,6 +44,14 @@ void ErrorCallbackFunction(const std::string& error_name, |
LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; |
} |
+bool DeviceDisabledScreenShown() { |
+ WizardController* const wizard_controller = |
+ WizardController::default_controller(); |
+ EXPECT_TRUE(wizard_controller); |
+ return wizard_controller && wizard_controller->current_screen() == |
+ wizard_controller->GetScreen(OobeScreen::SCREEN_DEVICE_DISABLED); |
+} |
+ |
} // namespace |
class DeviceDisablingTest |
@@ -52,6 +60,9 @@ class DeviceDisablingTest |
public: |
DeviceDisablingTest(); |
+ // Sets up a device state blob that indicates the device is disabled. |
+ void SetDeviceDisabledPolicy(); |
+ |
// Sets up a device state blob that indicates the device is disabled, triggers |
// a policy plus device state fetch and waits for it to succeed. |
void MarkDisabledAndWaitForPolicyFetch(); |
@@ -59,9 +70,6 @@ class DeviceDisablingTest |
std::string GetCurrentScreenName(content::WebContents* web_contents); |
protected: |
- std::unique_ptr<base::RunLoop> network_state_change_wait_run_loop_; |
- |
- private: |
// OobeBaseTest: |
void SetUpInProcessBrowserTestFixture() override; |
void SetUpOnMainThread() override; |
@@ -69,6 +77,9 @@ class DeviceDisablingTest |
// NetworkStateInformer::NetworkStateInformerObserver: |
void UpdateState(NetworkError::ErrorReason reason) override; |
+ std::unique_ptr<base::RunLoop> network_state_change_wait_run_loop_; |
+ |
+ private: |
FakeSessionManagerClient* fake_session_manager_client_; |
policy::DevicePolicyCrosTestHelper test_helper_; |
@@ -80,18 +91,22 @@ DeviceDisablingTest::DeviceDisablingTest() |
: fake_session_manager_client_(new FakeSessionManagerClient) { |
} |
-void DeviceDisablingTest::MarkDisabledAndWaitForPolicyFetch() { |
- base::RunLoop run_loop; |
- // Set up an |observer| that will wait for the disabled setting to change. |
- std::unique_ptr<CrosSettings::ObserverSubscription> observer = |
- CrosSettings::Get()->AddSettingsObserver(kDeviceDisabled, |
- run_loop.QuitClosure()); |
+void DeviceDisablingTest::SetDeviceDisabledPolicy() { |
// Prepare a policy fetch response that indicates the device is disabled. |
test_helper_.device_policy()->policy_data().mutable_device_state()-> |
set_device_mode(enterprise_management::DeviceState::DEVICE_MODE_DISABLED); |
test_helper_.device_policy()->Build(); |
fake_session_manager_client_->set_device_policy( |
test_helper_.device_policy()->GetBlob()); |
+} |
+ |
+void DeviceDisablingTest::MarkDisabledAndWaitForPolicyFetch() { |
+ base::RunLoop run_loop; |
+ // Set up an |observer| that will wait for the disabled setting to change. |
+ std::unique_ptr<CrosSettings::ObserverSubscription> observer = |
+ CrosSettings::Get()->AddSettingsObserver(kDeviceDisabled, |
+ run_loop.QuitClosure()); |
+ SetDeviceDisabledPolicy(); |
// Trigger a policy fetch. |
fake_session_manager_client_->OnPropertyChangeComplete(true); |
// Wait for the policy fetch to complete and the disabled setting to change. |
@@ -135,15 +150,8 @@ void DeviceDisablingTest::UpdateState(NetworkError::ErrorReason reason) { |
} |
IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableDuringNormalOperation) { |
- // Mark the device as disabled and wait until cros settings update. |
MarkDisabledAndWaitForPolicyFetch(); |
- |
- // Verify that the device disabled screen is being shown. |
- WizardController* const wizard_controller = |
- WizardController::default_controller(); |
- ASSERT_TRUE(wizard_controller); |
- EXPECT_EQ(wizard_controller->GetScreen(OobeScreen::SCREEN_DEVICE_DISABLED), |
- wizard_controller->current_screen()); |
+ EXPECT_TRUE(DeviceDisabledScreenShown()); |
} |
// Verifies that device disabling works when the ephemeral users policy is |
@@ -217,5 +225,30 @@ IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableWithEphemeralUsers) { |
GetCurrentScreenName(web_contents)); |
} |
+// Sets the device disabled policy before the browser is started. |
+class PresetPolicyDeviceDisablingTest : public DeviceDisablingTest { |
+ public: |
+ PresetPolicyDeviceDisablingTest() {} |
+ |
+ protected: |
+ // DeviceDisablingTest: |
+ void SetUpInProcessBrowserTestFixture() override { |
+ DeviceDisablingTest::SetUpInProcessBrowserTestFixture(); |
+ SetDeviceDisabledPolicy(); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(PresetPolicyDeviceDisablingTest); |
+}; |
+ |
+// Same test as the one in DeviceDisablingTest, except the policy is being set |
+// before Chrome process is started. This test covers a crash (crbug.com/709518) |
+// in DeviceDisabledScreen where it would try to access DeviceDisablingManager |
+// even though it wasn't yet constructed fully. |
+IN_PROC_BROWSER_TEST_F(PresetPolicyDeviceDisablingTest, |
+ DisableBeforeStartup) { |
+ EXPECT_TRUE(DeviceDisabledScreenShown()); |
+} |
+ |
} // namespace system |
} // namespace chromeos |