| Index: chrome/browser/chromeos/login/screens/update_screen.cc
|
| diff --git a/chrome/browser/chromeos/login/screens/update_screen.cc b/chrome/browser/chromeos/login/screens/update_screen.cc
|
| index e1be946158c80fe2f9ce21737c7a9c15c4ff68b9..f054b10236a213049afdee0840740a4bc7e8b52d 100644
|
| --- a/chrome/browser/chromeos/login/screens/update_screen.cc
|
| +++ b/chrome/browser/chromeos/login/screens/update_screen.cc
|
| @@ -242,6 +242,7 @@ void UpdateScreen::UpdateStatusChanged(
|
| HostPairingController::UPDATE_STATUS_UPDATING);
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE:
|
| + ClearUpdateCheckNoUpdateTime();
|
| MakeSureScreenIsShown();
|
| GetContextEditor()
|
| .SetInteger(kContextKeyProgress, kBeforeDownloadProgress)
|
| @@ -554,11 +555,19 @@ void UpdateScreen::StartUpdateCheck() {
|
| connect_request_subscription_.reset();
|
| if (state_ == State::STATE_ERROR)
|
| HideErrorMessage();
|
| - state_ = State::STATE_UPDATE;
|
| - DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
|
| - VLOG(1) << "Initiate update check";
|
| - DBusThreadManager::Get()->GetUpdateEngineClient()->RequestUpdateCheck(
|
| - base::Bind(StartUpdateCallback, this));
|
| +
|
| + if (ShouldCheckForUpdate()) {
|
| + state_ = State::STATE_UPDATE;
|
| + DBusThreadManager::Get()->GetUpdateEngineClient()->AddObserver(this);
|
| + VLOG(1) << "Initiate update check";
|
| + RecordUpdateCheckWithNoUpdateYet();
|
| + DBusThreadManager::Get()->GetUpdateEngineClient()->RequestUpdateCheck(
|
| + base::Bind(StartUpdateCallback, this));
|
| + } else {
|
| + LOG(WARNING) << "Skipping update check since one was done recently "
|
| + "which did not result in an update.";
|
| + CancelUpdate();
|
| + }
|
| }
|
|
|
| void UpdateScreen::ShowErrorMessage() {
|
| @@ -629,4 +638,34 @@ void UpdateScreen::OnConnectRequested() {
|
| }
|
| }
|
|
|
| +void UpdateScreen::RecordUpdateCheckWithNoUpdateYet() {
|
| + StartupUtils::SaveTimeOfLastUpdateCheckWithoutUpdate(base::Time::Now());
|
| +}
|
| +
|
| +void UpdateScreen::ClearUpdateCheckNoUpdateTime() {
|
| + StartupUtils::ClearTimeOfLastUpdateCheckWithoutUpdate();
|
| +}
|
| +
|
| +bool UpdateScreen::ShouldCheckForUpdate() {
|
| + // Always run update check for non hands-off enrollment.
|
| + if (!WizardController::UsingHandsOffEnrollment())
|
| + return true;
|
| +
|
| + // If we check for an update and there is no need to perform an update,
|
| + // this is the time in hours we should wait before checking again.
|
| + const base::TimeDelta kUpdateCheckRecencyThreshold =
|
| + base::TimeDelta::FromHours(1);
|
| +
|
| + base::Time now = base::Time::Now();
|
| + base::Time last = StartupUtils::GetTimeOfLastUpdateCheckWithoutUpdate();
|
| +
|
| + // Return false if enough time has not passed since the last update check.
|
| + // Otherwise, return true.
|
| + if (now > last) {
|
| + return (now - last) > kUpdateCheckRecencyThreshold;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| } // namespace chromeos
|
|
|