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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/chromeos/login/screens/mock_base_screen_delegate.h" | 9 #include "chrome/browser/chromeos/login/screens/mock_base_screen_delegate.h" |
10 #include "chrome/browser/chromeos/login/screens/mock_error_screen.h" | 10 #include "chrome/browser/chromeos/login/screens/mock_error_screen.h" |
| 11 #include "chrome/browser/chromeos/login/screens/network_error.h" |
11 #include "chrome/browser/chromeos/login/screens/update_screen.h" | 12 #include "chrome/browser/chromeos/login/screens/update_screen.h" |
12 #include "chrome/browser/chromeos/login/startup_utils.h" | 13 #include "chrome/browser/chromeos/login/startup_utils.h" |
13 #include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" | 14 #include "chrome/browser/chromeos/login/test/wizard_in_process_browser_test.h" |
14 #include "chrome/browser/chromeos/login/wizard_controller.h" | 15 #include "chrome/browser/chromeos/login/wizard_controller.h" |
15 #include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" | 16 #include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h" |
16 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
17 #include "chromeos/chromeos_switches.h" | 18 #include "chromeos/chromeos_switches.h" |
18 #include "chromeos/dbus/dbus_thread_manager.h" | 19 #include "chromeos/dbus/dbus_thread_manager.h" |
19 #include "chromeos/dbus/fake_update_engine_client.h" | 20 #include "chromeos/dbus/fake_update_engine_client.h" |
20 #include "chromeos/network/portal_detector/network_portal_detector.h" | 21 #include "chromeos/network/portal_detector/network_portal_detector.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 online_state.response_code = 204; | 63 online_state.response_code = 204; |
63 SetDefaultNetwork(kStubEthernetGuid); | 64 SetDefaultNetwork(kStubEthernetGuid); |
64 SetDetectionResults(kStubEthernetGuid, online_state); | 65 SetDetectionResults(kStubEthernetGuid, online_state); |
65 SetDetectionResults(kStubWifiGuid, online_state); | 66 SetDetectionResults(kStubWifiGuid, online_state); |
66 } | 67 } |
67 | 68 |
68 void SetUpOnMainThread() override { | 69 void SetUpOnMainThread() override { |
69 WizardInProcessBrowserTest::SetUpOnMainThread(); | 70 WizardInProcessBrowserTest::SetUpOnMainThread(); |
70 | 71 |
71 mock_base_screen_delegate_.reset(new MockBaseScreenDelegate()); | 72 mock_base_screen_delegate_.reset(new MockBaseScreenDelegate()); |
72 mock_error_screen_actor_.reset(new MockErrorScreenActor()); | 73 mock_network_error_view_.reset(new MockNetworkErrorView()); |
73 mock_error_screen_.reset(new MockErrorScreen( | 74 mock_error_screen_.reset(new MockErrorScreen( |
74 mock_base_screen_delegate_.get(), mock_error_screen_actor_.get())); | 75 mock_base_screen_delegate_.get(), mock_network_error_view_.get())); |
75 EXPECT_CALL(*mock_base_screen_delegate_, ShowCurrentScreen()) | 76 EXPECT_CALL(*mock_base_screen_delegate_, ShowCurrentScreen()) |
76 .Times(AnyNumber()); | 77 .Times(AnyNumber()); |
77 EXPECT_CALL(*mock_base_screen_delegate_, GetErrorScreen()) | 78 EXPECT_CALL(*mock_base_screen_delegate_, GetErrorScreen()) |
78 .Times(AnyNumber()) | 79 .Times(AnyNumber()) |
79 .WillRepeatedly(Return(mock_error_screen_.get())); | 80 .WillRepeatedly(Return(mock_error_screen_.get())); |
80 | 81 |
81 ASSERT_TRUE(WizardController::default_controller() != NULL); | 82 ASSERT_TRUE(WizardController::default_controller() != NULL); |
82 update_screen_ = UpdateScreen::Get(WizardController::default_controller()); | 83 update_screen_ = UpdateScreen::Get(WizardController::default_controller()); |
83 ASSERT_TRUE(update_screen_ != NULL); | 84 ASSERT_TRUE(update_screen_ != NULL); |
84 ASSERT_EQ(WizardController::default_controller()->current_screen(), | 85 ASSERT_EQ(WizardController::default_controller()->current_screen(), |
85 update_screen_); | 86 update_screen_); |
86 update_screen_->base_screen_delegate_ = mock_base_screen_delegate_.get(); | 87 update_screen_->base_screen_delegate_ = mock_base_screen_delegate_.get(); |
87 } | 88 } |
88 | 89 |
89 void TearDownOnMainThread() override { | 90 void TearDownOnMainThread() override { |
90 mock_error_screen_.reset(); | 91 mock_error_screen_.reset(); |
91 mock_error_screen_actor_.reset(); | 92 mock_network_error_view_.reset(); |
92 WizardInProcessBrowserTest::TearDownOnMainThread(); | 93 WizardInProcessBrowserTest::TearDownOnMainThread(); |
93 } | 94 } |
94 | 95 |
95 void TearDownInProcessBrowserTestFixture() override { | 96 void TearDownInProcessBrowserTestFixture() override { |
96 NetworkPortalDetector::Shutdown(); | 97 NetworkPortalDetector::Shutdown(); |
97 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); | 98 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
98 } | 99 } |
99 | 100 |
100 void SetDefaultNetwork(const std::string& guid) { | 101 void SetDefaultNetwork(const std::string& guid) { |
101 DCHECK(network_portal_detector_); | 102 DCHECK(network_portal_detector_); |
102 network_portal_detector_->SetDefaultNetworkForTesting(guid); | 103 network_portal_detector_->SetDefaultNetworkForTesting(guid); |
103 } | 104 } |
104 | 105 |
105 void SetDetectionResults( | 106 void SetDetectionResults( |
106 const std::string& guid, | 107 const std::string& guid, |
107 const NetworkPortalDetector::CaptivePortalState& state) { | 108 const NetworkPortalDetector::CaptivePortalState& state) { |
108 DCHECK(network_portal_detector_); | 109 DCHECK(network_portal_detector_); |
109 network_portal_detector_->SetDetectionResultsForTesting(guid, state); | 110 network_portal_detector_->SetDetectionResultsForTesting(guid, state); |
110 } | 111 } |
111 | 112 |
112 void NotifyPortalDetectionCompleted() { | 113 void NotifyPortalDetectionCompleted() { |
113 DCHECK(network_portal_detector_); | 114 DCHECK(network_portal_detector_); |
114 network_portal_detector_->NotifyObserversForTesting(); | 115 network_portal_detector_->NotifyObserversForTesting(); |
115 } | 116 } |
116 | 117 |
117 FakeUpdateEngineClient* fake_update_engine_client_; | 118 FakeUpdateEngineClient* fake_update_engine_client_; |
118 scoped_ptr<MockBaseScreenDelegate> mock_base_screen_delegate_; | 119 scoped_ptr<MockBaseScreenDelegate> mock_base_screen_delegate_; |
119 scoped_ptr<MockErrorScreenActor> mock_error_screen_actor_; | 120 scoped_ptr<MockNetworkErrorView> mock_network_error_view_; |
120 scoped_ptr<MockErrorScreen> mock_error_screen_; | 121 scoped_ptr<MockErrorScreen> mock_error_screen_; |
121 UpdateScreen* update_screen_; | 122 UpdateScreen* update_screen_; |
122 NetworkPortalDetectorTestImpl* network_portal_detector_; | 123 NetworkPortalDetectorTestImpl* network_portal_detector_; |
123 | 124 |
124 private: | 125 private: |
125 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); | 126 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); |
126 }; | 127 }; |
127 | 128 |
128 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { | 129 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestBasic) { |
129 ASSERT_TRUE(update_screen_->view_ != NULL); | 130 ASSERT_TRUE(update_screen_->view_ != NULL); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 update_screen_->CancelUpdate(); | 235 update_screen_->CancelUpdate(); |
235 | 236 |
236 // Change ethernet state to portal. | 237 // Change ethernet state to portal. |
237 NetworkPortalDetector::CaptivePortalState portal_state; | 238 NetworkPortalDetector::CaptivePortalState portal_state; |
238 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 239 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
239 portal_state.response_code = 200; | 240 portal_state.response_code = 200; |
240 SetDetectionResults(kStubEthernetGuid, portal_state); | 241 SetDetectionResults(kStubEthernetGuid, portal_state); |
241 | 242 |
242 // Update screen will show error message about portal state because | 243 // Update screen will show error message about portal state because |
243 // ethernet is behind captive portal. | 244 // ethernet is behind captive portal. |
244 EXPECT_CALL(*mock_error_screen_actor_, | 245 EXPECT_CALL(*mock_error_screen_, |
245 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 246 MockSetUIState(NetworkError::UI_STATE_UPDATE)).Times(1); |
246 .Times(1); | 247 EXPECT_CALL(*mock_error_screen_, |
247 EXPECT_CALL(*mock_error_screen_actor_, | 248 MockSetErrorState(NetworkError::ERROR_STATE_PORTAL, |
248 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) | 249 std::string())).Times(1); |
249 .Times(1); | 250 EXPECT_CALL(*mock_error_screen_, MockFixCaptivePortal()).Times(1); |
250 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) | |
251 .Times(1); | |
252 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); | 251 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); |
253 | 252 |
254 update_screen_->StartNetworkCheck(); | 253 update_screen_->StartNetworkCheck(); |
255 | 254 |
256 NetworkPortalDetector::CaptivePortalState online_state; | 255 NetworkPortalDetector::CaptivePortalState online_state; |
257 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | 256 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; |
258 online_state.response_code = 204; | 257 online_state.response_code = 204; |
259 SetDetectionResults(kStubEthernetGuid, online_state); | 258 SetDetectionResults(kStubEthernetGuid, online_state); |
260 | 259 |
261 // Second notification from portal detector will be about online state, | 260 // Second notification from portal detector will be about online state, |
(...skipping 16 matching lines...) Expand all Loading... |
278 update_screen_->CancelUpdate(); | 277 update_screen_->CancelUpdate(); |
279 | 278 |
280 // Change ethernet state to portal. | 279 // Change ethernet state to portal. |
281 NetworkPortalDetector::CaptivePortalState portal_state; | 280 NetworkPortalDetector::CaptivePortalState portal_state; |
282 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 281 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
283 portal_state.response_code = 200; | 282 portal_state.response_code = 200; |
284 SetDetectionResults(kStubEthernetGuid, portal_state); | 283 SetDetectionResults(kStubEthernetGuid, portal_state); |
285 | 284 |
286 // Update screen will show error message about portal state because | 285 // Update screen will show error message about portal state because |
287 // ethernet is behind captive portal. | 286 // ethernet is behind captive portal. |
288 EXPECT_CALL(*mock_error_screen_actor_, | 287 EXPECT_CALL(*mock_error_screen_, |
289 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 288 MockSetUIState(NetworkError::UI_STATE_UPDATE)).Times(1); |
290 .Times(1); | 289 EXPECT_CALL(*mock_error_screen_, |
291 EXPECT_CALL(*mock_error_screen_actor_, | 290 MockSetErrorState(NetworkError::ERROR_STATE_PORTAL, |
292 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) | 291 std::string())).Times(1); |
293 .Times(1); | 292 EXPECT_CALL(*mock_error_screen_, MockFixCaptivePortal()).Times(1); |
294 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) | |
295 .Times(1); | |
296 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); | 293 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); |
297 | 294 |
298 update_screen_->StartNetworkCheck(); | 295 update_screen_->StartNetworkCheck(); |
299 | 296 |
300 // Change active network to the wifi behind proxy. | 297 // Change active network to the wifi behind proxy. |
301 NetworkPortalDetector::CaptivePortalState proxy_state; | 298 NetworkPortalDetector::CaptivePortalState proxy_state; |
302 proxy_state.status = | 299 proxy_state.status = |
303 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; | 300 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; |
304 proxy_state.response_code = -1; | 301 proxy_state.response_code = -1; |
305 SetDefaultNetwork(kStubWifiGuid); | 302 SetDefaultNetwork(kStubWifiGuid); |
306 SetDetectionResults(kStubWifiGuid, proxy_state); | 303 SetDetectionResults(kStubWifiGuid, proxy_state); |
307 | 304 |
308 // Update screen will show message about proxy error because wifie | 305 // Update screen will show message about proxy error because wifie |
309 // network requires proxy authentication. | 306 // network requires proxy authentication. |
310 EXPECT_CALL(*mock_error_screen_actor_, | 307 EXPECT_CALL(*mock_error_screen_, |
311 SetErrorState(ErrorScreen::ERROR_STATE_PROXY, std::string())) | 308 MockSetErrorState(NetworkError::ERROR_STATE_PROXY, std::string())) |
312 .Times(1); | 309 .Times(1); |
313 | 310 |
314 NotifyPortalDetectionCompleted(); | 311 NotifyPortalDetectionCompleted(); |
315 } | 312 } |
316 | 313 |
317 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestVoidNetwork) { | 314 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestVoidNetwork) { |
318 SetDefaultNetwork(std::string()); | 315 SetDefaultNetwork(std::string()); |
319 | 316 |
320 // Cancels pending update request. | 317 // Cancels pending update request. |
321 EXPECT_CALL(*mock_base_screen_delegate_, | 318 EXPECT_CALL(*mock_base_screen_delegate_, |
322 OnExit(_, BaseScreenDelegate::UPDATE_NOUPDATE, _)).Times(1); | 319 OnExit(_, BaseScreenDelegate::UPDATE_NOUPDATE, _)).Times(1); |
323 update_screen_->CancelUpdate(); | 320 update_screen_->CancelUpdate(); |
324 | 321 |
325 // First portal detection attempt returns NULL network and undefined | 322 // First portal detection attempt returns NULL network and undefined |
326 // results, so detection is restarted. | 323 // results, so detection is restarted. |
327 EXPECT_CALL(*mock_error_screen_actor_, | 324 EXPECT_CALL(*mock_error_screen_, MockSetUIState(_)).Times(Exactly(0)); |
328 SetUIState(_)) | 325 EXPECT_CALL(*mock_error_screen_, MockSetErrorState(_, _)).Times(Exactly(0)); |
329 .Times(Exactly(0)); | |
330 EXPECT_CALL(*mock_error_screen_actor_, | |
331 SetErrorState(_, _)) | |
332 .Times(Exactly(0)); | |
333 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(Exactly(0)); | 326 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(Exactly(0)); |
334 update_screen_->StartNetworkCheck(); | 327 update_screen_->StartNetworkCheck(); |
335 | 328 |
336 // Second portal detection also returns NULL network and undefined | 329 // Second portal detection also returns NULL network and undefined |
337 // results. In this case, offline message should be displayed. | 330 // results. In this case, offline message should be displayed. |
338 EXPECT_CALL(*mock_error_screen_actor_, | 331 EXPECT_CALL(*mock_error_screen_, |
339 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 332 MockSetUIState(NetworkError::UI_STATE_UPDATE)).Times(1); |
340 .Times(1); | 333 EXPECT_CALL(*mock_error_screen_, |
341 EXPECT_CALL(*mock_error_screen_actor_, | 334 MockSetErrorState(NetworkError::ERROR_STATE_OFFLINE, |
342 SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, std::string())) | 335 std::string())).Times(1); |
343 .Times(1); | |
344 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); | 336 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); |
345 base::MessageLoop::current()->RunUntilIdle(); | 337 base::MessageLoop::current()->RunUntilIdle(); |
346 NotifyPortalDetectionCompleted(); | 338 NotifyPortalDetectionCompleted(); |
347 } | 339 } |
348 | 340 |
349 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestAPReselection) { | 341 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestAPReselection) { |
350 EXPECT_CALL(*mock_base_screen_delegate_, | 342 EXPECT_CALL(*mock_base_screen_delegate_, |
351 OnExit(_, BaseScreenDelegate::UPDATE_NOUPDATE, _)).Times(1); | 343 OnExit(_, BaseScreenDelegate::UPDATE_NOUPDATE, _)).Times(1); |
352 update_screen_->CancelUpdate(); | 344 update_screen_->CancelUpdate(); |
353 | 345 |
354 // Change ethernet state to portal. | 346 // Change ethernet state to portal. |
355 NetworkPortalDetector::CaptivePortalState portal_state; | 347 NetworkPortalDetector::CaptivePortalState portal_state; |
356 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 348 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
357 portal_state.response_code = 200; | 349 portal_state.response_code = 200; |
358 SetDetectionResults(kStubEthernetGuid, portal_state); | 350 SetDetectionResults(kStubEthernetGuid, portal_state); |
359 | 351 |
360 // Update screen will show error message about portal state because | 352 // Update screen will show error message about portal state because |
361 // ethernet is behind captive portal. | 353 // ethernet is behind captive portal. |
362 EXPECT_CALL(*mock_error_screen_actor_, | 354 EXPECT_CALL(*mock_error_screen_, |
363 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 355 MockSetUIState(NetworkError::UI_STATE_UPDATE)).Times(1); |
364 .Times(1); | 356 EXPECT_CALL(*mock_error_screen_, |
365 EXPECT_CALL(*mock_error_screen_actor_, | 357 MockSetErrorState(NetworkError::ERROR_STATE_PORTAL, |
366 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) | 358 std::string())).Times(1); |
367 .Times(1); | 359 EXPECT_CALL(*mock_error_screen_, MockFixCaptivePortal()).Times(1); |
368 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) | |
369 .Times(1); | |
370 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); | 360 EXPECT_CALL(*mock_base_screen_delegate_, ShowErrorScreen()).Times(1); |
371 | 361 |
372 update_screen_->StartNetworkCheck(); | 362 update_screen_->StartNetworkCheck(); |
373 | 363 |
374 // User re-selects the same network manually. In this case, hide | 364 // User re-selects the same network manually. In this case, hide |
375 // offline message and skip network check. Since ethernet is still | 365 // offline message and skip network check. Since ethernet is still |
376 // behind portal, update engine fails to update. | 366 // behind portal, update engine fails to update. |
377 EXPECT_CALL(*mock_base_screen_delegate_, HideErrorScreen(update_screen_)) | 367 EXPECT_CALL(*mock_base_screen_delegate_, HideErrorScreen(update_screen_)) |
378 .Times(1); | 368 .Times(1); |
379 fake_update_engine_client_->set_update_check_result( | 369 fake_update_engine_client_->set_update_check_result( |
380 chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); | 370 chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); |
381 EXPECT_CALL(*mock_base_screen_delegate_, | 371 EXPECT_CALL(*mock_base_screen_delegate_, |
382 OnExit(_, BaseScreenDelegate::UPDATE_ERROR_CHECKING_FOR_UPDATE, | 372 OnExit(_, BaseScreenDelegate::UPDATE_ERROR_CHECKING_FOR_UPDATE, |
383 _)).Times(1); | 373 _)).Times(1); |
384 | 374 |
385 update_screen_->OnConnectToNetworkRequested(); | 375 update_screen_->OnConnectToNetworkRequested(); |
386 base::MessageLoop::current()->RunUntilIdle(); | 376 base::MessageLoop::current()->RunUntilIdle(); |
387 } | 377 } |
388 | 378 |
389 } // namespace chromeos | 379 } // namespace chromeos |
OLD | NEW |