OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <memory> | 5 #include <memory> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 namespace chromeos { | 37 namespace chromeos { |
38 namespace system { | 38 namespace system { |
39 | 39 |
40 namespace { | 40 namespace { |
41 | 41 |
42 void ErrorCallbackFunction(const std::string& error_name, | 42 void ErrorCallbackFunction(const std::string& error_name, |
43 const std::string& error_message) { | 43 const std::string& error_message) { |
44 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; | 44 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; |
45 } | 45 } |
46 | 46 |
| 47 bool DeviceDisabledScreenShown() { |
| 48 WizardController* const wizard_controller = |
| 49 WizardController::default_controller(); |
| 50 EXPECT_TRUE(wizard_controller); |
| 51 return wizard_controller && wizard_controller->current_screen() == |
| 52 wizard_controller->GetScreen(OobeScreen::SCREEN_DEVICE_DISABLED); |
| 53 } |
| 54 |
47 } // namespace | 55 } // namespace |
48 | 56 |
49 class DeviceDisablingTest | 57 class DeviceDisablingTest |
50 : public OobeBaseTest, | 58 : public OobeBaseTest, |
51 public NetworkStateInformer::NetworkStateInformerObserver { | 59 public NetworkStateInformer::NetworkStateInformerObserver { |
52 public: | 60 public: |
53 DeviceDisablingTest(); | 61 DeviceDisablingTest(); |
54 | 62 |
| 63 // Sets up a device state blob that indicates the device is disabled. |
| 64 void SetDeviceDisabledPolicy(); |
| 65 |
55 // Sets up a device state blob that indicates the device is disabled, triggers | 66 // Sets up a device state blob that indicates the device is disabled, triggers |
56 // a policy plus device state fetch and waits for it to succeed. | 67 // a policy plus device state fetch and waits for it to succeed. |
57 void MarkDisabledAndWaitForPolicyFetch(); | 68 void MarkDisabledAndWaitForPolicyFetch(); |
58 | 69 |
59 std::string GetCurrentScreenName(content::WebContents* web_contents); | 70 std::string GetCurrentScreenName(content::WebContents* web_contents); |
60 | 71 |
61 protected: | 72 protected: |
62 std::unique_ptr<base::RunLoop> network_state_change_wait_run_loop_; | |
63 | |
64 private: | |
65 // OobeBaseTest: | 73 // OobeBaseTest: |
66 void SetUpInProcessBrowserTestFixture() override; | 74 void SetUpInProcessBrowserTestFixture() override; |
67 void SetUpOnMainThread() override; | 75 void SetUpOnMainThread() override; |
68 | 76 |
69 // NetworkStateInformer::NetworkStateInformerObserver: | 77 // NetworkStateInformer::NetworkStateInformerObserver: |
70 void UpdateState(NetworkError::ErrorReason reason) override; | 78 void UpdateState(NetworkError::ErrorReason reason) override; |
71 | 79 |
| 80 std::unique_ptr<base::RunLoop> network_state_change_wait_run_loop_; |
| 81 |
| 82 private: |
72 FakeSessionManagerClient* fake_session_manager_client_; | 83 FakeSessionManagerClient* fake_session_manager_client_; |
73 policy::DevicePolicyCrosTestHelper test_helper_; | 84 policy::DevicePolicyCrosTestHelper test_helper_; |
74 | 85 |
75 DISALLOW_COPY_AND_ASSIGN(DeviceDisablingTest); | 86 DISALLOW_COPY_AND_ASSIGN(DeviceDisablingTest); |
76 }; | 87 }; |
77 | 88 |
78 | 89 |
79 DeviceDisablingTest::DeviceDisablingTest() | 90 DeviceDisablingTest::DeviceDisablingTest() |
80 : fake_session_manager_client_(new FakeSessionManagerClient) { | 91 : fake_session_manager_client_(new FakeSessionManagerClient) { |
81 } | 92 } |
82 | 93 |
| 94 void DeviceDisablingTest::SetDeviceDisabledPolicy() { |
| 95 // Prepare a policy fetch response that indicates the device is disabled. |
| 96 test_helper_.device_policy()->policy_data().mutable_device_state()-> |
| 97 set_device_mode(enterprise_management::DeviceState::DEVICE_MODE_DISABLED); |
| 98 test_helper_.device_policy()->Build(); |
| 99 fake_session_manager_client_->set_device_policy( |
| 100 test_helper_.device_policy()->GetBlob()); |
| 101 } |
| 102 |
83 void DeviceDisablingTest::MarkDisabledAndWaitForPolicyFetch() { | 103 void DeviceDisablingTest::MarkDisabledAndWaitForPolicyFetch() { |
84 base::RunLoop run_loop; | 104 base::RunLoop run_loop; |
85 // Set up an |observer| that will wait for the disabled setting to change. | 105 // Set up an |observer| that will wait for the disabled setting to change. |
86 std::unique_ptr<CrosSettings::ObserverSubscription> observer = | 106 std::unique_ptr<CrosSettings::ObserverSubscription> observer = |
87 CrosSettings::Get()->AddSettingsObserver(kDeviceDisabled, | 107 CrosSettings::Get()->AddSettingsObserver(kDeviceDisabled, |
88 run_loop.QuitClosure()); | 108 run_loop.QuitClosure()); |
89 // Prepare a policy fetch response that indicates the device is disabled. | 109 SetDeviceDisabledPolicy(); |
90 test_helper_.device_policy()->policy_data().mutable_device_state()-> | |
91 set_device_mode(enterprise_management::DeviceState::DEVICE_MODE_DISABLED); | |
92 test_helper_.device_policy()->Build(); | |
93 fake_session_manager_client_->set_device_policy( | |
94 test_helper_.device_policy()->GetBlob()); | |
95 // Trigger a policy fetch. | 110 // Trigger a policy fetch. |
96 fake_session_manager_client_->OnPropertyChangeComplete(true); | 111 fake_session_manager_client_->OnPropertyChangeComplete(true); |
97 // Wait for the policy fetch to complete and the disabled setting to change. | 112 // Wait for the policy fetch to complete and the disabled setting to change. |
98 run_loop.Run(); | 113 run_loop.Run(); |
99 } | 114 } |
100 | 115 |
101 std::string DeviceDisablingTest::GetCurrentScreenName( | 116 std::string DeviceDisablingTest::GetCurrentScreenName( |
102 content::WebContents* web_contents ) { | 117 content::WebContents* web_contents ) { |
103 std::string screen_name; | 118 std::string screen_name; |
104 if (!content::ExecuteScriptAndExtractString( | 119 if (!content::ExecuteScriptAndExtractString( |
(...skipping 23 matching lines...) Expand all Loading... |
128 // Set up fake networks. | 143 // Set up fake networks. |
129 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()-> | 144 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()-> |
130 SetupDefaultEnvironment(); | 145 SetupDefaultEnvironment(); |
131 } | 146 } |
132 | 147 |
133 void DeviceDisablingTest::UpdateState(NetworkError::ErrorReason reason) { | 148 void DeviceDisablingTest::UpdateState(NetworkError::ErrorReason reason) { |
134 network_state_change_wait_run_loop_->Quit(); | 149 network_state_change_wait_run_loop_->Quit(); |
135 } | 150 } |
136 | 151 |
137 IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableDuringNormalOperation) { | 152 IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableDuringNormalOperation) { |
138 // Mark the device as disabled and wait until cros settings update. | |
139 MarkDisabledAndWaitForPolicyFetch(); | 153 MarkDisabledAndWaitForPolicyFetch(); |
140 | 154 EXPECT_TRUE(DeviceDisabledScreenShown()); |
141 // Verify that the device disabled screen is being shown. | |
142 WizardController* const wizard_controller = | |
143 WizardController::default_controller(); | |
144 ASSERT_TRUE(wizard_controller); | |
145 EXPECT_EQ(wizard_controller->GetScreen(OobeScreen::SCREEN_DEVICE_DISABLED), | |
146 wizard_controller->current_screen()); | |
147 } | 155 } |
148 | 156 |
149 // Verifies that device disabling works when the ephemeral users policy is | 157 // Verifies that device disabling works when the ephemeral users policy is |
150 // enabled. This case warrants its own test because the UI behaves somewhat | 158 // enabled. This case warrants its own test because the UI behaves somewhat |
151 // differently when the policy is set: A background job runs on startup that | 159 // differently when the policy is set: A background job runs on startup that |
152 // causes the UI to try and show the login screen after some delay. It must | 160 // causes the UI to try and show the login screen after some delay. It must |
153 // be ensured that the login screen does not show and does not clobber the | 161 // be ensured that the login screen does not show and does not clobber the |
154 // disabled screen. | 162 // disabled screen. |
155 IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableWithEphemeralUsers) { | 163 IN_PROC_BROWSER_TEST_F(DeviceDisablingTest, DisableWithEphemeralUsers) { |
156 // Connect to the fake Ethernet network. This ensures that Chrome OS will not | 164 // Connect to the fake Ethernet network. This ensures that Chrome OS will not |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 network_state_change_wait_run_loop_->Run(); | 218 network_state_change_wait_run_loop_->Run(); |
211 network_state_informer->RemoveObserver(this); | 219 network_state_informer->RemoveObserver(this); |
212 base::RunLoop().RunUntilIdle(); | 220 base::RunLoop().RunUntilIdle(); |
213 | 221 |
214 // Verify that the offline error screen was not shown and the device disabled | 222 // Verify that the offline error screen was not shown and the device disabled |
215 // screen is still being shown instead. | 223 // screen is still being shown instead. |
216 EXPECT_EQ(GetOobeScreenName(OobeScreen::SCREEN_DEVICE_DISABLED), | 224 EXPECT_EQ(GetOobeScreenName(OobeScreen::SCREEN_DEVICE_DISABLED), |
217 GetCurrentScreenName(web_contents)); | 225 GetCurrentScreenName(web_contents)); |
218 } | 226 } |
219 | 227 |
| 228 // Sets the device disabled policy before the browser is started. |
| 229 class PresetPolicyDeviceDisablingTest : public DeviceDisablingTest { |
| 230 public: |
| 231 PresetPolicyDeviceDisablingTest() {} |
| 232 |
| 233 protected: |
| 234 // DeviceDisablingTest: |
| 235 void SetUpInProcessBrowserTestFixture() override { |
| 236 DeviceDisablingTest::SetUpInProcessBrowserTestFixture(); |
| 237 SetDeviceDisabledPolicy(); |
| 238 } |
| 239 |
| 240 private: |
| 241 DISALLOW_COPY_AND_ASSIGN(PresetPolicyDeviceDisablingTest); |
| 242 }; |
| 243 |
| 244 // Same test as the one in DeviceDisablingTest, except the policy is being set |
| 245 // before Chrome process is started. This test covers a crash (crbug.com/709518) |
| 246 // in DeviceDisabledScreen where it would try to access DeviceDisablingManager |
| 247 // even though it wasn't yet constructed fully. |
| 248 IN_PROC_BROWSER_TEST_F(PresetPolicyDeviceDisablingTest, |
| 249 DisableBeforeStartup) { |
| 250 EXPECT_TRUE(DeviceDisabledScreenShown()); |
| 251 } |
| 252 |
220 } // namespace system | 253 } // namespace system |
221 } // namespace chromeos | 254 } // namespace chromeos |
OLD | NEW |