| 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/update_screen.h" | 5 #include "chrome/browser/chromeos/login/screens/update_screen.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 // estimation. | 59 // estimation. |
| 60 // avg_speed = smooth_factor * cur_speed + (1.0 - smooth_factor) * avg_speed. | 60 // avg_speed = smooth_factor * cur_speed + (1.0 - smooth_factor) * avg_speed. |
| 61 const double kDownloadSpeedSmoothFactor = 0.1; | 61 const double kDownloadSpeedSmoothFactor = 0.1; |
| 62 | 62 |
| 63 // Minumum allowed value for the average downloading speed. | 63 // Minumum allowed value for the average downloading speed. |
| 64 const double kDownloadAverageSpeedDropBound = 1e-8; | 64 const double kDownloadAverageSpeedDropBound = 1e-8; |
| 65 | 65 |
| 66 // An upper bound for possible downloading time left estimations. | 66 // An upper bound for possible downloading time left estimations. |
| 67 const double kMaxTimeLeft = 24 * 60 * 60; | 67 const double kMaxTimeLeft = 24 * 60 * 60; |
| 68 | 68 |
| 69 // Delay before showing error message if captive portal is detected. |
| 70 // We wait for this delay to let captive portal to perform redirect and show |
| 71 // its login page before error message appears. |
| 72 const int kDelayErrorMessageSec = 10; |
| 73 |
| 69 // Invoked from call to RequestUpdateCheck upon completion of the DBus call. | 74 // Invoked from call to RequestUpdateCheck upon completion of the DBus call. |
| 70 void StartUpdateCallback(UpdateScreen* screen, | 75 void StartUpdateCallback(UpdateScreen* screen, |
| 71 UpdateEngineClient::UpdateCheckResult result) { | 76 UpdateEngineClient::UpdateCheckResult result) { |
| 72 VLOG(1) << "Callback from RequestUpdateCheck, result " << result; | 77 VLOG(1) << "Callback from RequestUpdateCheck, result " << result; |
| 73 if (UpdateScreen::HasInstance(screen)) { | 78 if (UpdateScreen::HasInstance(screen)) { |
| 74 if (result == UpdateEngineClient::UPDATE_RESULT_SUCCESS) | 79 if (result == UpdateEngineClient::UPDATE_RESULT_SUCCESS) |
| 75 screen->SetIgnoreIdleStatus(false); | 80 screen->SetIgnoreIdleStatus(false); |
| 76 else | 81 else |
| 77 screen->ExitUpdate(UpdateScreen::REASON_UPDATE_INIT_FAILED); | 82 screen->ExitUpdate(UpdateScreen::REASON_UPDATE_INIT_FAILED); |
| 78 } | 83 } |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 break; | 249 break; |
| 245 default: | 250 default: |
| 246 NOTREACHED(); | 251 NOTREACHED(); |
| 247 break; | 252 break; |
| 248 } | 253 } |
| 249 } | 254 } |
| 250 | 255 |
| 251 void UpdateScreen::OnPortalDetectionCompleted( | 256 void UpdateScreen::OnPortalDetectionCompleted( |
| 252 const NetworkState* network, | 257 const NetworkState* network, |
| 253 const NetworkPortalDetector::CaptivePortalState& state) { | 258 const NetworkPortalDetector::CaptivePortalState& state) { |
| 254 LOG(WARNING) << "UpdateScreen::PortalDetectionCompleted(): " | 259 LOG(WARNING) << "UpdateScreen::OnPortalDetectionCompleted(): " |
| 255 << "network=" << (network ? network->path() : "") << ", " | 260 << "network=" << (network ? network->path() : "") << ", " |
| 256 << "state.status=" << state.status << ", " | 261 << "state.status=" << state.status << ", " |
| 257 << "state.response_code=" << state.response_code; | 262 << "state.response_code=" << state.response_code; |
| 258 | 263 |
| 259 // Wait for the sane detection results. | 264 // Wait for the sane detection results. |
| 260 if (network && | 265 if (network && |
| 261 state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN) { | 266 state.status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_UNKNOWN) { |
| 262 return; | 267 return; |
| 263 } | 268 } |
| 264 | 269 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 284 StartUpdateCheck(); | 289 StartUpdateCheck(); |
| 285 else | 290 else |
| 286 UpdateErrorMessage(network, status); | 291 UpdateErrorMessage(network, status); |
| 287 } else if (state_ == STATE_FIRST_PORTAL_CHECK) { | 292 } else if (state_ == STATE_FIRST_PORTAL_CHECK) { |
| 288 // In the case of online state immediately proceed to the update | 293 // In the case of online state immediately proceed to the update |
| 289 // stage. Otherwise, prepare and show error message. | 294 // stage. Otherwise, prepare and show error message. |
| 290 if (status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE) { | 295 if (status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE) { |
| 291 StartUpdateCheck(); | 296 StartUpdateCheck(); |
| 292 } else { | 297 } else { |
| 293 UpdateErrorMessage(network, status); | 298 UpdateErrorMessage(network, status); |
| 294 ShowErrorMessage(); | 299 |
| 300 if (status == NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL) |
| 301 DelayErrorMessage(); |
| 302 else |
| 303 ShowErrorMessage(); |
| 295 } | 304 } |
| 296 } | 305 } |
| 297 } | 306 } |
| 298 | 307 |
| 299 void UpdateScreen::StartNetworkCheck() { | 308 void UpdateScreen::StartNetworkCheck() { |
| 300 // If portal detector is enabled and portal detection before AU is | 309 // If portal detector is enabled and portal detection before AU is |
| 301 // allowed, initiate network state check. Otherwise, directly | 310 // allowed, initiate network state check. Otherwise, directly |
| 302 // proceed to update. | 311 // proceed to update. |
| 303 if (!NetworkPortalDetector::Get()->IsEnabled()) { | 312 if (!NetworkPortalDetector::Get()->IsEnabled()) { |
| 304 StartUpdateCheck(); | 313 StartUpdateCheck(); |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 // TODO(dpolukhin): Analyze file content. Now we can just assume that | 511 // TODO(dpolukhin): Analyze file content. Now we can just assume that |
| 503 // if the file exists and not empty, there is critical update. | 512 // if the file exists and not empty, there is critical update. |
| 504 return true; | 513 return true; |
| 505 } | 514 } |
| 506 | 515 |
| 507 ErrorScreen* UpdateScreen::GetErrorScreen() { | 516 ErrorScreen* UpdateScreen::GetErrorScreen() { |
| 508 return get_base_screen_delegate()->GetErrorScreen(); | 517 return get_base_screen_delegate()->GetErrorScreen(); |
| 509 } | 518 } |
| 510 | 519 |
| 511 void UpdateScreen::StartUpdateCheck() { | 520 void UpdateScreen::StartUpdateCheck() { |
| 521 error_message_timer_.Stop(); |
| 522 GetErrorScreen()->HideCaptivePortal(); |
| 523 |
| 512 NetworkPortalDetector::Get()->RemoveObserver(this); | 524 NetworkPortalDetector::Get()->RemoveObserver(this); |
| 513 if (state_ == STATE_ERROR) | 525 if (state_ == STATE_ERROR) |
| 514 HideErrorMessage(); | 526 HideErrorMessage(); |
| 515 state_ = STATE_UPDATE; | 527 state_ = STATE_UPDATE; |
| 516 DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this); | 528 DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this); |
| 517 VLOG(1) << "Initiate update check"; | 529 VLOG(1) << "Initiate update check"; |
| 518 DBusThreadManager::Get()->GetUpdateEngineClient()->RequestUpdateCheck( | 530 DBusThreadManager::Get()->GetUpdateEngineClient()->RequestUpdateCheck( |
| 519 base::Bind(StartUpdateCallback, this)); | 531 base::Bind(StartUpdateCallback, this)); |
| 520 } | 532 } |
| 521 | 533 |
| 522 void UpdateScreen::ShowErrorMessage() { | 534 void UpdateScreen::ShowErrorMessage() { |
| 523 LOG(WARNING) << "UpdateScreen::ShowErrorMessage()"; | 535 LOG(WARNING) << "UpdateScreen::ShowErrorMessage()"; |
| 536 |
| 537 error_message_timer_.Stop(); |
| 538 |
| 524 state_ = STATE_ERROR; | 539 state_ = STATE_ERROR; |
| 525 GetErrorScreen()->SetUIState(NetworkError::UI_STATE_UPDATE); | 540 GetErrorScreen()->SetUIState(NetworkError::UI_STATE_UPDATE); |
| 526 get_base_screen_delegate()->ShowErrorScreen(); | 541 get_base_screen_delegate()->ShowErrorScreen(); |
| 527 histogram_helper_->OnErrorShow(GetErrorScreen()->GetErrorState()); | 542 histogram_helper_->OnErrorShow(GetErrorScreen()->GetErrorState()); |
| 528 } | 543 } |
| 529 | 544 |
| 530 void UpdateScreen::HideErrorMessage() { | 545 void UpdateScreen::HideErrorMessage() { |
| 531 LOG(WARNING) << "UpdateScreen::HideErrorMessage()"; | 546 LOG(WARNING) << "UpdateScreen::HideErrorMessage()"; |
| 532 get_base_screen_delegate()->HideErrorScreen(this); | 547 get_base_screen_delegate()->HideErrorScreen(this); |
| 533 histogram_helper_->OnErrorHide(); | 548 histogram_helper_->OnErrorHide(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 564 } | 579 } |
| 565 } | 580 } |
| 566 | 581 |
| 567 void UpdateScreen::SetHostPairingControllerStatus( | 582 void UpdateScreen::SetHostPairingControllerStatus( |
| 568 HostPairingController::UpdateStatus update_status) { | 583 HostPairingController::UpdateStatus update_status) { |
| 569 if (remora_controller_) { | 584 if (remora_controller_) { |
| 570 remora_controller_->OnUpdateStatusChanged(update_status); | 585 remora_controller_->OnUpdateStatusChanged(update_status); |
| 571 } | 586 } |
| 572 } | 587 } |
| 573 | 588 |
| 589 void UpdateScreen::DelayErrorMessage() { |
| 590 if (error_message_timer_.IsRunning()) |
| 591 return; |
| 592 |
| 593 state_ = STATE_ERROR; |
| 594 error_message_timer_.Start( |
| 595 FROM_HERE, base::TimeDelta::FromSeconds(kDelayErrorMessageSec), this, |
| 596 &UpdateScreen::ShowErrorMessage); |
| 597 } |
| 598 |
| 574 } // namespace chromeos | 599 } // namespace chromeos |
| OLD | NEW |