diff --git a/chrome/browser/chromeos/login/network_screen.cc b/chrome/browser/chromeos/login/network_screen.cc
index 9afeb593e3fb0d1318044462b2c38c330126de9b..381218117652fca97a7192f73c81e3aa8d78277f 100644
--- a/chrome/browser/chromeos/login/network_screen.cc
+++ b/chrome/browser/chromeos/login/network_screen.cc
@@ -143,7 +143,11 @@ void NetworkScreen::NotifyOnConnection() {
 
 void NetworkScreen::OnConnectionTimeout() {
   StopWaitingForConnection(network_id_);
-  if (!view()->is_dialog_open() &&
+  NetworkLibrary* network = CrosLibrary::Get()->GetNetworkLibrary();
+  bool is_connected = network && network->Connected();
+
+  if (!is_connected &&
+      !view()->is_dialog_open() &&
       !(help_app_.get() && help_app_->is_open())) {
     // Show error bubble.
     ClearErrors();
@@ -166,6 +170,9 @@ void NetworkScreen::UpdateStatus(NetworkLibrary* network) {
   if (!view() || !network)
     return;
 
+  if (network->Connected())
+    ClearErrors();
+
   if (network->ethernet_connected()) {
     StopWaitingForConnection(
         l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET));
diff --git a/chrome/browser/chromeos/login/network_screen_browsertest.cc b/chrome/browser/chromeos/login/network_screen_browsertest.cc
index 4802cef8ea64d8ee3448e15d97070c45a5012b3a..aa1e8454528e6ecdee5ef0373434934a539995a9 100644
--- a/chrome/browser/chromeos/login/network_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/network_screen_browsertest.cc
@@ -158,7 +158,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
   EXPECT_CALL(*mock_network_library_, ethernet_connected())
       .WillOnce(Return(true));
   EXPECT_CALL(*mock_network_library_, Connected())
-      .WillOnce(Return(true));
+      .Times(2)
+      .WillRepeatedly(Return(true));
   EXPECT_FALSE(network_view->IsContinueEnabled());
   EXPECT_FALSE(network_view->IsConnecting());
   network_screen->OnNetworkManagerChanged(mock_network_library_);
@@ -199,7 +200,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
   EXPECT_CALL(*mock_network_library_, ethernet_connected())
       .WillOnce(Return(true));
   EXPECT_CALL(*mock_network_library_, Connected())
-      .WillOnce(Return(true));
+        .Times(2)
+        .WillRepeatedly(Return(true));
   EXPECT_FALSE(network_view->IsContinueEnabled());
   EXPECT_FALSE(network_view->IsConnecting());
   network_screen->OnNetworkManagerChanged(mock_network_library_);
@@ -238,7 +240,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
   EXPECT_CALL(*mock_network_library_, ethernet_connected())
       .WillOnce(Return(true));
   EXPECT_CALL(*mock_network_library_, Connected())
-      .WillOnce(Return(true));
+      .Times(2)
+      .WillRepeatedly(Return(true));
   EXPECT_FALSE(network_view->IsContinueEnabled());
   EXPECT_FALSE(network_view->IsConnecting());
   network_screen->OnNetworkManagerChanged(mock_network_library_);
@@ -273,7 +276,8 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) {
   network_screen->OnNetworkManagerChanged(mock_network_library_);
 
   EXPECT_CALL(*mock_network_library_, Connected())
-      .WillOnce(Return(false));
+      .Times(2)
+      .WillRepeatedly(Return(false));
   EXPECT_FALSE(network_view->IsContinueEnabled());
   EXPECT_FALSE(network_view->IsConnecting());
   network_screen->OnConnectionTimeout();