OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/chromeos/login/screens/network_screen.h" | 5 #include "chrome/browser/chromeos/login/screens/network_screen.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
11 #include "base/strings/utf_string_conversions.h" | |
12 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" | 11 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h" |
13 #include "chrome/browser/chromeos/login/helper.h" | 12 #include "chrome/browser/chromeos/login/helper.h" |
| 13 #include "chrome/browser/chromeos/login/mock_network_state_helper.h" |
14 #include "chrome/browser/chromeos/login/screens/base_screen.h" | 14 #include "chrome/browser/chromeos/login/screens/base_screen.h" |
15 #include "chrome/browser/chromeos/login/screens/mock_base_screen_delegate.h" | 15 #include "chrome/browser/chromeos/login/screens/mock_base_screen_delegate.h" |
16 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" | 16 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" |
17 #include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" | 17 #include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" |
18 #include "chrome/browser/chromeos/login/ui/login_display_host.h" | 18 #include "chrome/browser/chromeos/login/ui/login_display_host.h" |
19 #include "chrome/browser/chromeos/login/wizard_controller.h" | 19 #include "chrome/browser/chromeos/login/wizard_controller.h" |
20 #include "chromeos/chromeos_switches.h" | 20 #include "chromeos/chromeos_switches.h" |
21 #include "chromeos/dbus/dbus_thread_manager.h" | 21 #include "chromeos/dbus/dbus_thread_manager.h" |
22 #include "chromeos/dbus/fake_session_manager_client.h" | 22 #include "chromeos/dbus/fake_session_manager_client.h" |
23 #include "chromeos/dbus/shill_manager_client.h" | 23 #include "chromeos/dbus/shill_manager_client.h" |
(...skipping 10 matching lines...) Expand all Loading... |
34 using ::testing::ReturnRef; | 34 using ::testing::ReturnRef; |
35 using views::Button; | 35 using views::Button; |
36 | 36 |
37 namespace chromeos { | 37 namespace chromeos { |
38 | 38 |
39 class DummyButtonListener : public views::ButtonListener { | 39 class DummyButtonListener : public views::ButtonListener { |
40 public: | 40 public: |
41 void ButtonPressed(views::Button* sender, const ui::Event& event) override {} | 41 void ButtonPressed(views::Button* sender, const ui::Event& event) override {} |
42 }; | 42 }; |
43 | 43 |
44 namespace login { | |
45 | |
46 class MockNetworkStateHelper : public NetworkStateHelper { | |
47 public: | |
48 MOCK_CONST_METHOD0(GetCurrentNetworkName, base::string16(void)); | |
49 MOCK_CONST_METHOD0(IsConnected, bool(void)); | |
50 MOCK_CONST_METHOD0(IsConnecting, bool(void)); | |
51 }; | |
52 | |
53 } // namespace login | |
54 | |
55 class NetworkScreenTest : public WizardInProcessBrowserTest { | 44 class NetworkScreenTest : public WizardInProcessBrowserTest { |
56 public: | 45 public: |
57 NetworkScreenTest() | 46 NetworkScreenTest() |
58 : WizardInProcessBrowserTest(OobeScreen::SCREEN_OOBE_NETWORK), | 47 : WizardInProcessBrowserTest(OobeScreen::SCREEN_OOBE_NETWORK), |
59 fake_session_manager_client_(nullptr) {} | 48 fake_session_manager_client_(nullptr) {} |
60 | 49 |
61 protected: | 50 protected: |
62 void SetUpInProcessBrowserTestFixture() override { | 51 void SetUpInProcessBrowserTestFixture() override { |
63 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); | 52 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
64 | 53 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 // EXPECT_FALSE(view_->IsContinueEnabled()); | 139 // EXPECT_FALSE(view_->IsContinueEnabled()); |
151 // EXPECT_FALSE(view_->IsConnecting()); | 140 // EXPECT_FALSE(view_->IsConnecting()); |
152 network_screen_->OnConnectionTimeout(); | 141 network_screen_->OnConnectionTimeout(); |
153 | 142 |
154 // Close infobubble with error message - it makes the test stable. | 143 // Close infobubble with error message - it makes the test stable. |
155 // EXPECT_FALSE(view_->IsContinueEnabled()); | 144 // EXPECT_FALSE(view_->IsContinueEnabled()); |
156 // EXPECT_FALSE(view_->IsConnecting()); | 145 // EXPECT_FALSE(view_->IsConnecting()); |
157 // view_->ClearErrors(); | 146 // view_->ClearErrors(); |
158 } | 147 } |
159 | 148 |
160 class HandsOffNetworkScreenTest : public NetworkScreenTest { | |
161 public: | |
162 HandsOffNetworkScreenTest() {} | |
163 | |
164 protected: | |
165 void SetUpOnMainThread() override { | |
166 NetworkScreenTest::SetUpOnMainThread(); | |
167 | |
168 // Set up fake networks. | |
169 DBusThreadManager::Get() | |
170 ->GetShillManagerClient() | |
171 ->GetTestInterface() | |
172 ->SetupDefaultEnvironment(); | |
173 } | |
174 | |
175 private: | |
176 // Overridden from InProcessBrowserTest: | |
177 void SetUpCommandLine(base::CommandLine* command_line) override { | |
178 command_line->AppendSwitchASCII( | |
179 switches::kEnterpriseEnableZeroTouchEnrollment, "hands-off"); | |
180 } | |
181 | |
182 DISALLOW_COPY_AND_ASSIGN(HandsOffNetworkScreenTest); | |
183 }; | |
184 | |
185 #if defined(OS_CHROMEOS) | |
186 // Flaky on ChromeOS. See https://crbug.com/674782. | |
187 #define MAYBE_RequiresNoInput DISABLED_RequiresNoInput | |
188 #else | |
189 #define MAYBE_RequiresNoInput RequiresNoInput | |
190 #endif | |
191 IN_PROC_BROWSER_TEST_F(HandsOffNetworkScreenTest, MAYBE_RequiresNoInput) { | |
192 WizardController* wizard_controller = WizardController::default_controller(); | |
193 | |
194 // Allow the WizardController to advance throught the enrollment flow. | |
195 network_screen_->base_screen_delegate_ = wizard_controller; | |
196 | |
197 // Simulate a network connection. | |
198 EXPECT_CALL(*mock_network_state_helper_, IsConnected()) | |
199 .Times(AnyNumber()) | |
200 .WillRepeatedly((Return(true))); | |
201 network_screen_->UpdateStatus(); | |
202 | |
203 // Check if NetworkScreen::OnContinueButtonPressed() is called | |
204 // Note that checking network_screen_->continue_pressed_ is not | |
205 // sufficient since there are cases where OnContinueButtonPressed() | |
206 // is called but where this variable is not set to true. | |
207 ASSERT_TRUE((!network_screen_->is_network_subscribed_) && | |
208 network_screen_->network_state_helper_->IsConnected()); | |
209 | |
210 // Check that we reach the enrollment screen. | |
211 OobeScreenWaiter(OobeScreen::SCREEN_OOBE_ENROLLMENT).Wait(); | |
212 | |
213 // Check that attestation-based enrollment finishes | |
214 // with either success or error. | |
215 bool done = false; | |
216 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( | |
217 LoginDisplayHost::default_host()->GetOobeUI()->web_ui()->GetWebContents(), | |
218 "var count = 0;" | |
219 "function isVisible(el) {" | |
220 " return window.getComputedStyle(document.getElementById(el)).display" | |
221 " !== 'none';" | |
222 "}" | |
223 "function SendReplyIfEnrollmentDone() {" | |
224 " if (isVisible('oauth-enroll-step-abe-success') ||" | |
225 " isVisible('oauth-enroll-step-error')) {" | |
226 " domAutomationController.send(true);" | |
227 " } else if (count > 10) {" | |
228 " domAutomationController.send(false);" | |
229 " } else {" | |
230 " count++;" | |
231 " setTimeout(SendReplyIfEnrollmentDone, 1000);" | |
232 " }" | |
233 "}" | |
234 "SendReplyIfEnrollmentDone();", | |
235 &done)); | |
236 | |
237 // Reset the enrollment helper so there is no side effect with other tests. | |
238 static_cast<EnrollmentScreen*>(wizard_controller->current_screen()) | |
239 ->enrollment_helper_.reset(); | |
240 } | |
241 | |
242 IN_PROC_BROWSER_TEST_F(HandsOffNetworkScreenTest, ContinueClickedOnlyOnce) { | |
243 WizardController* wizard_controller = WizardController::default_controller(); | |
244 | |
245 // Allow the WizardController to advance through the enrollment flow. | |
246 network_screen_->base_screen_delegate_ = wizard_controller; | |
247 | |
248 // Check that OnContinueButtonPressed has not been called yet. | |
249 ASSERT_EQ(0, network_screen_->continue_attempts_); | |
250 | |
251 // Connect to network "net0". | |
252 EXPECT_CALL(*mock_network_state_helper_, GetCurrentNetworkName()) | |
253 .Times(AnyNumber()) | |
254 .WillRepeatedly(Return(base::ASCIIToUTF16("net0"))); | |
255 EXPECT_CALL(*mock_network_state_helper_, IsConnected()) | |
256 .Times(AnyNumber()) | |
257 .WillRepeatedly(Return(true)); | |
258 | |
259 // Stop waiting for net0. | |
260 network_screen_->StopWaitingForConnection(base::ASCIIToUTF16("net0")); | |
261 | |
262 // Check that OnContinueButtonPressed has been called exactly once. | |
263 ASSERT_EQ(1, network_screen_->continue_attempts_); | |
264 | |
265 // Stop waiting for another network, net1. | |
266 network_screen_->StopWaitingForConnection(base::ASCIIToUTF16("net1")); | |
267 | |
268 // Check that OnContinueButtonPressed stil has been called exactly once | |
269 ASSERT_EQ(1, network_screen_->continue_attempts_); | |
270 | |
271 // Wait for the enrollment screen. | |
272 OobeScreenWaiter(OobeScreen::SCREEN_OOBE_ENROLLMENT) | |
273 .WaitNoAssertCurrentScreen(); | |
274 | |
275 // Reset the enrollment helper so there is no side effect with other tests. | |
276 static_cast<EnrollmentScreen*>(wizard_controller->current_screen()) | |
277 ->enrollment_helper_.reset(); | |
278 } | |
279 | |
280 } // namespace chromeos | 149 } // namespace chromeos |
OLD | NEW |