OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/chromeos/login/screens/device_disabled_screen.h" | |
6 | |
7 #include "base/command_line.h" | |
8 #include "base/macros.h" | |
9 #include "base/memory/scoped_ptr.h" | |
10 #include "base/prefs/scoped_user_pref_update.h" | |
11 #include "base/prefs/testing_pref_service.h" | |
12 #include "chrome/browser/browser_process_platform_part.h" | |
13 #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h" | |
14 #include "chrome/browser/chromeos/login/screens/mock_device_disabled_screen_acto
r.h" | |
15 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" | |
16 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" | |
17 #include "chrome/browser/chromeos/policy/server_backed_device_state.h" | |
18 #include "chrome/browser/chromeos/policy/stub_enterprise_install_attributes.h" | |
19 #include "chrome/common/pref_names.h" | |
20 #include "chrome/test/base/testing_browser_process.h" | |
21 #include "chromeos/chromeos_switches.h" | |
22 #include "components/policy/core/common/cloud/cloud_policy_constants.h" | |
23 #include "testing/gmock/include/gmock/gmock.h" | |
24 #include "testing/gtest/include/gtest/gtest.h" | |
25 | |
26 using ::testing::_; | |
27 | |
28 namespace chromeos { | |
29 | |
30 namespace { | |
31 | |
32 const char kDisabledMessage[] = "Device disabled."; | |
33 | |
34 } | |
35 | |
36 class DeviceDisabledScreenTest : public testing::Test, | |
37 public BaseScreenDelegate { | |
38 public: | |
39 DeviceDisabledScreenTest(); | |
40 ~DeviceDisabledScreenTest() override; | |
41 | |
42 // testing::Test: | |
43 void SetUp() override; | |
44 void TearDown() override; | |
45 | |
46 // BaseScreenDelegate: | |
47 MOCK_METHOD1(OnExit, void(ExitCodes)); | |
48 void ShowCurrentScreen() override; | |
49 ErrorScreen* GetErrorScreen() override; | |
50 void ShowErrorScreen() override; | |
51 void HideErrorScreen(BaseScreen* parent_screen) override; | |
52 | |
53 void SetDeviceDisabled(bool disabled); | |
54 void SetDeviceMode(policy::DeviceMode device_mode); | |
55 | |
56 void ExpectScreenToNotShow(); | |
57 void ExpectScreenToShow(); | |
58 | |
59 void TryToShowScreen(); | |
60 | |
61 private: | |
62 scoped_ptr<DeviceDisabledScreen> screen_; | |
63 scoped_ptr<MockDeviceDisabledScreenActor> actor_; | |
64 TestingPrefServiceSimple local_state_; | |
65 policy::ScopedStubEnterpriseInstallAttributes install_attributes_; | |
66 | |
67 DISALLOW_COPY_AND_ASSIGN(DeviceDisabledScreenTest); | |
68 }; | |
69 | |
70 DeviceDisabledScreenTest::DeviceDisabledScreenTest() | |
71 : install_attributes_("", "", "", policy::DEVICE_MODE_NOT_SET) { | |
72 } | |
73 | |
74 DeviceDisabledScreenTest::~DeviceDisabledScreenTest() { | |
75 } | |
76 | |
77 void DeviceDisabledScreenTest::SetUp() { | |
78 TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); | |
79 policy::DeviceCloudPolicyManagerChromeOS::RegisterPrefs( | |
80 local_state_.registry()); | |
81 | |
82 actor_.reset(new MockDeviceDisabledScreenActor); | |
83 screen_.reset(new DeviceDisabledScreen(this, actor_.get())); | |
84 } | |
85 | |
86 void DeviceDisabledScreenTest::TearDown() { | |
87 TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr); | |
88 } | |
89 | |
90 void DeviceDisabledScreenTest::ShowCurrentScreen() { | |
91 } | |
92 | |
93 ErrorScreen* DeviceDisabledScreenTest::GetErrorScreen() { | |
94 return nullptr; | |
95 } | |
96 | |
97 void DeviceDisabledScreenTest::ShowErrorScreen() { | |
98 } | |
99 | |
100 void DeviceDisabledScreenTest::HideErrorScreen(BaseScreen* parent_screen) { | |
101 } | |
102 | |
103 void DeviceDisabledScreenTest::SetDeviceDisabled(bool disabled) { | |
104 DictionaryPrefUpdate dict(&local_state_, prefs::kServerBackedDeviceState); | |
105 if (disabled) { | |
106 dict->SetString(policy::kDeviceStateRestoreMode, | |
107 policy::kDeviceStateRestoreModeDisabled); | |
108 } else { | |
109 dict->Remove(policy::kDeviceStateRestoreMode, nullptr); | |
110 } | |
111 dict->SetString(policy::kDeviceStateDisabledMessage, kDisabledMessage); | |
112 } | |
113 | |
114 void DeviceDisabledScreenTest::SetDeviceMode(policy::DeviceMode device_mode) { | |
115 reinterpret_cast<policy::StubEnterpriseInstallAttributes*>( | |
116 TestingBrowserProcess::GetGlobal()->platform_part()-> | |
117 browser_policy_connector_chromeos()->GetInstallAttributes())-> | |
118 SetMode(device_mode); | |
119 } | |
120 | |
121 void DeviceDisabledScreenTest::ExpectScreenToNotShow() { | |
122 EXPECT_CALL(*actor_, Show(_)).Times(0); | |
123 EXPECT_CALL(*this, OnExit(BaseScreenDelegate::DEVICE_NOT_DISABLED)).Times(1); | |
124 } | |
125 | |
126 void DeviceDisabledScreenTest::ExpectScreenToShow() { | |
127 EXPECT_CALL(*actor_, Show(kDisabledMessage)).Times(1); | |
128 EXPECT_CALL(*this, OnExit(BaseScreenDelegate::DEVICE_NOT_DISABLED)).Times(0); | |
129 } | |
130 | |
131 void DeviceDisabledScreenTest::TryToShowScreen() { | |
132 screen_->Show(); | |
133 } | |
134 | |
135 // Verifies that the device disabled screen is not shown by default. | |
136 TEST_F(DeviceDisabledScreenTest, DoNotShowByDefault) { | |
137 ExpectScreenToNotShow(); | |
138 TryToShowScreen(); | |
139 } | |
140 | |
141 // Verifies that the device disabled screen is not shown when the device is | |
142 // explicitly marked as not disabled. | |
143 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenNotDisabled) { | |
144 SetDeviceDisabled(false); | |
145 ExpectScreenToNotShow(); | |
146 TryToShowScreen(); | |
147 } | |
148 | |
149 // Verifies that the device disabled screen is not shown when device disabling | |
150 // is turned off by flag, even if the device is marked as disabled. | |
151 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenTurnedOffByFlag) { | |
152 CommandLine::ForCurrentProcess()->AppendSwitch( | |
153 switches::kDisableDeviceDisabling); | |
154 SetDeviceDisabled(true); | |
155 ExpectScreenToNotShow(); | |
156 TryToShowScreen(); | |
157 } | |
158 | |
159 // Verifies that the device disabled screen is not shown when the device is | |
160 // already enrolled, even if the device is marked as disabled. | |
161 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenEnterpriseOwned) { | |
162 SetDeviceMode(policy::DEVICE_MODE_ENTERPRISE); | |
163 SetDeviceDisabled(true); | |
164 ExpectScreenToNotShow(); | |
165 TryToShowScreen(); | |
166 } | |
167 | |
168 // Verifies that the device disabled screen is not shown when the device is | |
169 // already owned by a consumer, even if the device is marked as disabled. | |
170 TEST_F(DeviceDisabledScreenTest, DoNotShowWhenConsumerOwned) { | |
171 SetDeviceMode(policy::DEVICE_MODE_CONSUMER); | |
172 SetDeviceDisabled(true); | |
173 ExpectScreenToNotShow(); | |
174 TryToShowScreen(); | |
175 } | |
176 | |
177 // Verifies that the device disabled screen is shown when the device is marked | |
178 // as disabled, device disabling is not turned off by flag and the device is not | |
179 // owned yet. | |
180 TEST_F(DeviceDisabledScreenTest, ShowWhenDisabledAndNotOwned) { | |
181 SetDeviceDisabled(true); | |
182 ExpectScreenToShow(); | |
183 TryToShowScreen(); | |
184 } | |
185 | |
186 } // namespace chromeos | |
OLD | NEW |