| 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 "chrome/browser/chromeos/cros/mock_network_library.h" | 7 #include "chrome/browser/chromeos/cros/mock_network_library.h" |
| 8 #include "chrome/browser/chromeos/login/screens/mock_error_screen.h" | 8 #include "chrome/browser/chromeos/login/screens/mock_error_screen.h" |
| 9 #include "chrome/browser/chromeos/login/screens/mock_screen_observer.h" | 9 #include "chrome/browser/chromeos/login/screens/mock_screen_observer.h" |
| 10 #include "chrome/browser/chromeos/login/screens/update_screen.h" | 10 #include "chrome/browser/chromeos/login/screens/update_screen.h" |
| 11 #include "chrome/browser/chromeos/login/wizard_controller.h" | 11 #include "chrome/browser/chromeos/login/wizard_controller.h" |
| 12 #include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" | 12 #include "chrome/browser/chromeos/login/wizard_in_process_browser_test.h" |
| 13 #include "chrome/browser/chromeos/net/network_portal_detector.h" | 13 #include "chrome/browser/chromeos/net/network_portal_detector.h" |
| 14 #include "chrome/browser/chromeos/net/network_portal_detector_stub.h" | 14 #include "chrome/browser/chromeos/net/network_portal_detector_stub.h" |
| 15 #include "chromeos/chromeos_switches.h" | 15 #include "chromeos/chromeos_switches.h" |
| 16 #include "chromeos/dbus/fake_update_engine_client.h" | 16 #include "chromeos/dbus/fake_update_engine_client.h" |
| 17 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" | 17 #include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h" |
| 18 #include "chromeos/network/network_state.h" |
| 18 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 20 | 21 |
| 21 using ::testing::_; | 22 using ::testing::_; |
| 22 using ::testing::AnyNumber; | 23 using ::testing::AnyNumber; |
| 23 using ::testing::AtLeast; | 24 using ::testing::AtLeast; |
| 24 using ::testing::Invoke; | 25 using ::testing::Invoke; |
| 25 using ::testing::Return; | 26 using ::testing::Return; |
| 26 | 27 |
| 27 namespace chromeos { | 28 namespace chromeos { |
| 28 | 29 |
| 29 namespace { | 30 namespace { |
| 30 | 31 |
| 31 const char kDefaultEthernetServicePath[] = "eth0"; | 32 const char kDefaultEthernetServicePath[] = "eth0"; |
| 32 const char kDefaultWifiServicePath[] = "wlan0"; | 33 const char kDefaultWifiServicePath[] = "wlan0"; |
| 33 | 34 |
| 34 } // namespace | 35 } // namespace |
| 35 | 36 |
| 36 class UpdateScreenTest : public WizardInProcessBrowserTest { | 37 class UpdateScreenTest : public WizardInProcessBrowserTest { |
| 37 public: | 38 public: |
| 38 UpdateScreenTest() : WizardInProcessBrowserTest("update"), | 39 UpdateScreenTest() : WizardInProcessBrowserTest("update"), |
| 39 fake_update_engine_client_(NULL), | 40 fake_update_engine_client_(NULL), |
| 40 mock_network_library_(NULL), | 41 mock_network_library_(NULL), |
| 42 stub_ethernet_(kDefaultEthernetServicePath), |
| 43 stub_wifi_(kDefaultWifiServicePath), |
| 41 network_portal_detector_stub_(NULL) { | 44 network_portal_detector_stub_(NULL) { |
| 42 } | 45 } |
| 43 | 46 |
| 44 protected: | 47 protected: |
| 45 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 48 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| 46 MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager = | 49 MockDBusThreadManagerWithoutGMock* mock_dbus_thread_manager = |
| 47 new MockDBusThreadManagerWithoutGMock; | 50 new MockDBusThreadManagerWithoutGMock; |
| 48 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); | 51 DBusThreadManager::InitializeForTesting(mock_dbus_thread_manager); |
| 49 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); | 52 WizardInProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
| 50 cros_mock_->InitStatusAreaMocks(); | 53 cros_mock_->InitStatusAreaMocks(); |
| 51 cros_mock_->SetStatusAreaMocksExpectations(); | 54 cros_mock_->SetStatusAreaMocksExpectations(); |
| 52 | 55 |
| 53 fake_update_engine_client_ | 56 fake_update_engine_client_ |
| 54 = mock_dbus_thread_manager->fake_update_engine_client(); | 57 = mock_dbus_thread_manager->fake_update_engine_client(); |
| 55 | 58 |
| 56 mock_network_library_ = cros_mock_->mock_network_library(); | 59 mock_network_library_ = cros_mock_->mock_network_library(); |
| 57 stub_ethernet_.reset(new EthernetNetwork(kDefaultEthernetServicePath)); | |
| 58 stub_wifi_.reset(new WifiNetwork(kDefaultWifiServicePath)); | |
| 59 EXPECT_CALL(*mock_network_library_, SetDefaultCheckPortalList()) | 60 EXPECT_CALL(*mock_network_library_, SetDefaultCheckPortalList()) |
| 60 .Times(1); | 61 .Times(1); |
| 61 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_)) | |
| 62 .Times(1) | |
| 63 .RetiresOnSaturation(); | |
| 64 EXPECT_CALL(*mock_network_library_, AddUserActionObserver(_)) | |
| 65 .Times(AnyNumber()); | |
| 66 EXPECT_CALL(*mock_network_library_, FindWifiDevice()) | |
| 67 .Times(AnyNumber()); | |
| 68 EXPECT_CALL(*mock_network_library_, FindEthernetDevice()) | |
| 69 .Times(AnyNumber()); | |
| 70 EXPECT_CALL(*mock_network_library_, LoadOncNetworks(_, _)) | 62 EXPECT_CALL(*mock_network_library_, LoadOncNetworks(_, _)) |
| 71 .Times(AnyNumber()); | 63 .Times(AnyNumber()); |
| 72 EXPECT_CALL(*mock_network_library_, | |
| 73 FindNetworkByPath(kDefaultEthernetServicePath)) | |
| 74 .Times(AnyNumber()) | |
| 75 .WillRepeatedly((Return(stub_ethernet_.get()))); | |
| 76 EXPECT_CALL(*mock_network_library_, | |
| 77 FindNetworkByPath(kDefaultWifiServicePath)) | |
| 78 .Times(AnyNumber()) | |
| 79 .WillRepeatedly((Return(stub_wifi_.get()))); | |
| 80 | 64 |
| 81 // Setup network portal detector to return online state for both | 65 // Setup network portal detector to return online state for both |
| 82 // ethernet and wifi networks. Ethernet is an active network by | 66 // ethernet and wifi networks. Ethernet is an active network by |
| 83 // default. | 67 // default. |
| 84 network_portal_detector_stub_ = | 68 network_portal_detector_stub_ = |
| 85 static_cast<NetworkPortalDetectorStub*>( | 69 static_cast<NetworkPortalDetectorStub*>( |
| 86 NetworkPortalDetector::GetInstance()); | 70 NetworkPortalDetector::GetInstance()); |
| 87 NetworkPortalDetector::CaptivePortalState online_state; | 71 NetworkPortalDetector::CaptivePortalState online_state; |
| 88 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | 72 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; |
| 89 online_state.response_code = 204; | 73 online_state.response_code = 204; |
| 90 SetActiveNetwork(stub_ethernet_.get()); | 74 SetDefaultNetwork(&stub_ethernet_); |
| 91 SetDetectionResults(stub_ethernet_.get(), online_state); | 75 SetDetectionResults(&stub_ethernet_, online_state); |
| 92 SetDetectionResults(stub_wifi_.get(), online_state); | 76 SetDetectionResults(&stub_wifi_, online_state); |
| 93 } | 77 } |
| 94 | 78 |
| 95 virtual void SetUpOnMainThread() OVERRIDE { | 79 virtual void SetUpOnMainThread() OVERRIDE { |
| 96 WizardInProcessBrowserTest::SetUpOnMainThread(); | 80 WizardInProcessBrowserTest::SetUpOnMainThread(); |
| 97 | 81 |
| 98 mock_screen_observer_.reset(new MockScreenObserver()); | 82 mock_screen_observer_.reset(new MockScreenObserver()); |
| 99 mock_error_screen_actor_.reset(new MockErrorScreenActor()); | 83 mock_error_screen_actor_.reset(new MockErrorScreenActor()); |
| 100 mock_error_screen_.reset( | 84 mock_error_screen_.reset( |
| 101 new MockErrorScreen(mock_screen_observer_.get(), | 85 new MockErrorScreen(mock_screen_observer_.get(), |
| 102 mock_error_screen_actor_.get())); | 86 mock_error_screen_actor_.get())); |
| 103 EXPECT_CALL(*mock_screen_observer_, ShowCurrentScreen()) | 87 EXPECT_CALL(*mock_screen_observer_, ShowCurrentScreen()) |
| 104 .Times(AnyNumber()); | 88 .Times(AnyNumber()); |
| 105 EXPECT_CALL(*mock_screen_observer_, GetErrorScreen()) | 89 EXPECT_CALL(*mock_screen_observer_, GetErrorScreen()) |
| 106 .Times(AnyNumber()) | 90 .Times(AnyNumber()) |
| 107 .WillRepeatedly(Return(mock_error_screen_.get())); | 91 .WillRepeatedly(Return(mock_error_screen_.get())); |
| 108 | 92 |
| 109 ASSERT_TRUE(WizardController::default_controller() != NULL); | 93 ASSERT_TRUE(WizardController::default_controller() != NULL); |
| 110 update_screen_ = WizardController::default_controller()->GetUpdateScreen(); | 94 update_screen_ = WizardController::default_controller()->GetUpdateScreen(); |
| 111 ASSERT_TRUE(update_screen_ != NULL); | 95 ASSERT_TRUE(update_screen_ != NULL); |
| 112 ASSERT_EQ(WizardController::default_controller()->current_screen(), | 96 ASSERT_EQ(WizardController::default_controller()->current_screen(), |
| 113 update_screen_); | 97 update_screen_); |
| 114 update_screen_->screen_observer_ = mock_screen_observer_.get(); | 98 update_screen_->screen_observer_ = mock_screen_observer_.get(); |
| 115 } | 99 } |
| 116 | 100 |
| 117 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { | 101 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE { |
| 118 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); | 102 WizardInProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
| 119 DBusThreadManager::Shutdown(); | 103 DBusThreadManager::Shutdown(); |
| 120 } | 104 } |
| 121 | 105 |
| 122 void SetActiveNetwork(const Network* network) { | 106 void SetDefaultNetwork(const NetworkState* network) { |
| 123 DCHECK(network_portal_detector_stub_); | 107 DCHECK(network_portal_detector_stub_); |
| 124 network_portal_detector_stub_->SetActiveNetworkForTesting(network); | 108 network_portal_detector_stub_->SetDefaultNetworkForTesting(network); |
| 125 } | 109 } |
| 126 | 110 |
| 127 void SetDetectionResults( | 111 void SetDetectionResults( |
| 128 const Network* network, | 112 const NetworkState* network, |
| 129 const NetworkPortalDetector::CaptivePortalState& state) { | 113 const NetworkPortalDetector::CaptivePortalState& state) { |
| 130 DCHECK(network_portal_detector_stub_); | 114 DCHECK(network_portal_detector_stub_); |
| 131 network_portal_detector_stub_->SetDetectionResultsForTesting(network, | 115 network_portal_detector_stub_->SetDetectionResultsForTesting(network, |
| 132 state); | 116 state); |
| 133 } | 117 } |
| 134 | 118 |
| 135 void NotifyPortalDetectionCompleted() { | 119 void NotifyPortalDetectionCompleted() { |
| 136 DCHECK(network_portal_detector_stub_); | 120 DCHECK(network_portal_detector_stub_); |
| 137 network_portal_detector_stub_->NotifyObserversForTesting(); | 121 network_portal_detector_stub_->NotifyObserversForTesting(); |
| 138 } | 122 } |
| 139 | 123 |
| 140 FakeUpdateEngineClient* fake_update_engine_client_; | 124 FakeUpdateEngineClient* fake_update_engine_client_; |
| 141 MockNetworkLibrary* mock_network_library_; | 125 MockNetworkLibrary* mock_network_library_; |
| 142 scoped_ptr<Network> stub_ethernet_; | 126 NetworkState stub_ethernet_; |
| 143 scoped_ptr<Network> stub_wifi_; | 127 NetworkState stub_wifi_; |
| 144 scoped_ptr<MockScreenObserver> mock_screen_observer_; | 128 scoped_ptr<MockScreenObserver> mock_screen_observer_; |
| 145 scoped_ptr<MockErrorScreenActor> mock_error_screen_actor_; | 129 scoped_ptr<MockErrorScreenActor> mock_error_screen_actor_; |
| 146 scoped_ptr<MockErrorScreen> mock_error_screen_; | 130 scoped_ptr<MockErrorScreen> mock_error_screen_; |
| 147 UpdateScreen* update_screen_; | 131 UpdateScreen* update_screen_; |
| 148 NetworkPortalDetectorStub* network_portal_detector_stub_; | 132 NetworkPortalDetectorStub* network_portal_detector_stub_; |
| 149 | 133 |
| 150 private: | 134 private: |
| 151 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); | 135 DISALLOW_COPY_AND_ASSIGN(UpdateScreenTest); |
| 152 }; | 136 }; |
| 153 | 137 |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTemproraryOfflineNetwork) { | 238 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTemproraryOfflineNetwork) { |
| 255 EXPECT_CALL(*mock_screen_observer_, | 239 EXPECT_CALL(*mock_screen_observer_, |
| 256 OnExit(ScreenObserver::UPDATE_NOUPDATE)) | 240 OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
| 257 .Times(1); | 241 .Times(1); |
| 258 update_screen_->CancelUpdate(); | 242 update_screen_->CancelUpdate(); |
| 259 | 243 |
| 260 // Change ethernet state to portal. | 244 // Change ethernet state to portal. |
| 261 NetworkPortalDetector::CaptivePortalState portal_state; | 245 NetworkPortalDetector::CaptivePortalState portal_state; |
| 262 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 246 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
| 263 portal_state.response_code = 200; | 247 portal_state.response_code = 200; |
| 264 SetDetectionResults(stub_ethernet_.get(), portal_state); | 248 SetDetectionResults(&stub_ethernet_, portal_state); |
| 265 | 249 |
| 266 // Update screen will show error message about portal state because | 250 // Update screen will show error message about portal state because |
| 267 // ethernet is behind captive portal. | 251 // ethernet is behind captive portal. |
| 268 EXPECT_CALL(*mock_error_screen_actor_, | 252 EXPECT_CALL(*mock_error_screen_actor_, |
| 269 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 253 SetUIState(ErrorScreen::UI_STATE_UPDATE)) |
| 270 .Times(1); | 254 .Times(1); |
| 271 EXPECT_CALL(*mock_error_screen_actor_, | 255 EXPECT_CALL(*mock_error_screen_actor_, |
| 272 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) | 256 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) |
| 273 .Times(1); | 257 .Times(1); |
| 274 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) | 258 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) |
| 275 .Times(1); | 259 .Times(1); |
| 276 EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) | 260 EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) |
| 277 .Times(1); | 261 .Times(1); |
| 278 | 262 |
| 279 update_screen_->StartNetworkCheck(); | 263 update_screen_->StartNetworkCheck(); |
| 280 | 264 |
| 281 NetworkPortalDetector::CaptivePortalState online_state; | 265 NetworkPortalDetector::CaptivePortalState online_state; |
| 282 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; | 266 online_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE; |
| 283 online_state.response_code = 204; | 267 online_state.response_code = 204; |
| 284 SetDetectionResults(stub_ethernet_.get(), online_state); | 268 SetDetectionResults(&stub_ethernet_, online_state); |
| 285 | 269 |
| 286 // Second notification from portal detector will be about online state, | 270 // Second notification from portal detector will be about online state, |
| 287 // so update screen will hide error message and proceed to update. | 271 // so update screen will hide error message and proceed to update. |
| 288 EXPECT_CALL(*mock_screen_observer_, HideErrorScreen(update_screen_)) | 272 EXPECT_CALL(*mock_screen_observer_, HideErrorScreen(update_screen_)) |
| 289 .Times(1); | 273 .Times(1); |
| 290 fake_update_engine_client_->set_update_check_result( | 274 fake_update_engine_client_->set_update_check_result( |
| 291 chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); | 275 chromeos::UpdateEngineClient::UPDATE_RESULT_FAILED); |
| 292 | 276 |
| 293 EXPECT_CALL(*mock_screen_observer_, | 277 EXPECT_CALL(*mock_screen_observer_, |
| 294 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) | 278 OnExit(ScreenObserver::UPDATE_ERROR_CHECKING_FOR_UPDATE)) |
| 295 .Times(1); | 279 .Times(1); |
| 296 | 280 |
| 297 NotifyPortalDetectionCompleted(); | 281 NotifyPortalDetectionCompleted(); |
| 298 } | 282 } |
| 299 | 283 |
| 300 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTwoOfflineNetworks) { | 284 IN_PROC_BROWSER_TEST_F(UpdateScreenTest, TestTwoOfflineNetworks) { |
| 301 EXPECT_CALL(*mock_screen_observer_, | 285 EXPECT_CALL(*mock_screen_observer_, |
| 302 OnExit(ScreenObserver::UPDATE_NOUPDATE)) | 286 OnExit(ScreenObserver::UPDATE_NOUPDATE)) |
| 303 .Times(1); | 287 .Times(1); |
| 304 update_screen_->CancelUpdate(); | 288 update_screen_->CancelUpdate(); |
| 305 | 289 |
| 306 // Change ethernet state to portal. | 290 // Change ethernet state to portal. |
| 307 NetworkPortalDetector::CaptivePortalState portal_state; | 291 NetworkPortalDetector::CaptivePortalState portal_state; |
| 308 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; | 292 portal_state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL; |
| 309 portal_state.response_code = 200; | 293 portal_state.response_code = 200; |
| 310 SetDetectionResults(stub_ethernet_.get(), portal_state); | 294 SetDetectionResults(&stub_ethernet_, portal_state); |
| 311 | 295 |
| 312 // Update screen will show error message about portal state because | 296 // Update screen will show error message about portal state because |
| 313 // ethernet is behind captive portal. | 297 // ethernet is behind captive portal. |
| 314 EXPECT_CALL(*mock_error_screen_actor_, | 298 EXPECT_CALL(*mock_error_screen_actor_, |
| 315 SetUIState(ErrorScreen::UI_STATE_UPDATE)) | 299 SetUIState(ErrorScreen::UI_STATE_UPDATE)) |
| 316 .Times(1); | 300 .Times(1); |
| 317 EXPECT_CALL(*mock_error_screen_actor_, | 301 EXPECT_CALL(*mock_error_screen_actor_, |
| 318 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) | 302 SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, std::string())) |
| 319 .Times(1); | 303 .Times(1); |
| 320 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) | 304 EXPECT_CALL(*mock_error_screen_actor_, FixCaptivePortal()) |
| 321 .Times(1); | 305 .Times(1); |
| 322 EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) | 306 EXPECT_CALL(*mock_screen_observer_, ShowErrorScreen()) |
| 323 .Times(1); | 307 .Times(1); |
| 324 | 308 |
| 325 update_screen_->StartNetworkCheck(); | 309 update_screen_->StartNetworkCheck(); |
| 326 | 310 |
| 327 // Change active network to the wifi behind proxy. | 311 // Change active network to the wifi behind proxy. |
| 328 NetworkPortalDetector::CaptivePortalState proxy_state; | 312 NetworkPortalDetector::CaptivePortalState proxy_state; |
| 329 proxy_state.status = | 313 proxy_state.status = |
| 330 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; | 314 NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED; |
| 331 proxy_state.response_code = -1; | 315 proxy_state.response_code = -1; |
| 332 SetActiveNetwork(stub_wifi_.get()); | 316 SetDefaultNetwork(&stub_wifi_); |
| 333 SetDetectionResults(stub_wifi_.get(), proxy_state); | 317 SetDetectionResults(&stub_wifi_, proxy_state); |
| 334 | 318 |
| 335 // Update screen will show message about proxy error because wifie | 319 // Update screen will show message about proxy error because wifie |
| 336 // network requires proxy authentication. | 320 // network requires proxy authentication. |
| 337 EXPECT_CALL(*mock_error_screen_actor_, | 321 EXPECT_CALL(*mock_error_screen_actor_, |
| 338 SetErrorState(ErrorScreen::ERROR_STATE_PROXY, std::string())) | 322 SetErrorState(ErrorScreen::ERROR_STATE_PROXY, std::string())) |
| 339 .Times(1); | 323 .Times(1); |
| 340 | 324 |
| 341 NotifyPortalDetectionCompleted(); | 325 NotifyPortalDetectionCompleted(); |
| 342 } | 326 } |
| 343 | 327 |
| 344 } // namespace chromeos | 328 } // namespace chromeos |
| OLD | NEW |