| 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 e6872c093ba4f8a6c4daf4043b1a2c401b03b794..045742154919ee5f31853f5dd822bbec2ae2708a 100644
|
| --- a/chrome/browser/chromeos/login/screens/update_screen.cc
|
| +++ b/chrome/browser/chromeos/login/screens/update_screen.cc
|
| @@ -15,12 +15,15 @@
|
| #include "chrome/browser/chromeos/login/screen_manager.h"
|
| #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
|
| #include "chrome/browser/chromeos/login/screens/error_screen.h"
|
| -#include "chrome/browser/chromeos/login/screens/update_screen_actor.h"
|
| +#include "chrome/browser/chromeos/login/screens/update_view.h"
|
| #include "chrome/browser/chromeos/login/startup_utils.h"
|
| #include "chrome/browser/chromeos/login/wizard_controller.h"
|
| +#include "chrome/grit/chromium_strings.h"
|
| +#include "chrome/grit/generated_resources.h"
|
| #include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/network/network_state.h"
|
| #include "content/public/browser/browser_thread.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
|
|
| using content::BrowserThread;
|
| using pairing_chromeos::HostPairingController;
|
| @@ -29,6 +32,9 @@ namespace chromeos {
|
|
|
| namespace {
|
|
|
| +// If reboot didn't happen, ask user to reboot device manually.
|
| +const int kWaitForRebootTimeSec = 3;
|
| +
|
| // Progress bar stages. Each represents progress bar value
|
| // at the beginning of each stage.
|
| // TODO(nkostylev): Base stage progress values on approximate time.
|
| @@ -94,41 +100,39 @@ UpdateScreen* UpdateScreen::Get(ScreenManager* manager) {
|
| }
|
|
|
| UpdateScreen::UpdateScreen(BaseScreenDelegate* base_screen_delegate,
|
| - UpdateScreenActor* actor,
|
| + UpdateView* view,
|
| HostPairingController* remora_controller)
|
| - : BaseScreen(base_screen_delegate),
|
| + : UpdateModel(base_screen_delegate),
|
| state_(STATE_IDLE),
|
| - reboot_check_delay_(0),
|
| + reboot_check_delay_(kWaitForRebootTimeSec),
|
| is_checking_for_update_(true),
|
| is_downloading_update_(false),
|
| - is_ignore_update_deadlines_(false),
|
| + is_ignore_update_deadlines_(true),
|
| is_shown_(false),
|
| ignore_idle_status_(true),
|
| - actor_(actor),
|
| + view_(view),
|
| remora_controller_(remora_controller),
|
| is_first_detection_notification_(true),
|
| is_first_portal_notification_(true),
|
| histogram_helper_(new ErrorScreensHistogramHelper("Update")),
|
| weak_factory_(this) {
|
| - DCHECK(actor_);
|
| - if (actor_)
|
| - actor_->SetDelegate(this);
|
| + if (view_)
|
| + view_->Bind(*this);
|
| +
|
| GetInstanceSet().insert(this);
|
| }
|
|
|
| UpdateScreen::~UpdateScreen() {
|
| + if (view_)
|
| + view_->Unbind();
|
| +
|
| DBusThreadManager::Get()->GetUpdateEngineClient()->RemoveObserver(this);
|
| NetworkPortalDetector::Get()->RemoveObserver(this);
|
| GetInstanceSet().erase(this);
|
| - if (actor_)
|
| - actor_->SetDelegate(NULL);
|
| }
|
|
|
| void UpdateScreen::UpdateStatusChanged(
|
| const UpdateEngineClient::Status& status) {
|
| - if (!actor_)
|
| - return;
|
| -
|
| if (is_checking_for_update_ &&
|
| status.status > UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE) {
|
| is_checking_for_update_ = false;
|
| @@ -147,17 +151,19 @@ void UpdateScreen::UpdateStatusChanged(
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE:
|
| MakeSureScreenIsShown();
|
| - actor_->SetProgress(kBeforeDownloadProgress);
|
| - actor_->ShowEstimatedTimeLeft(false);
|
| + GetContextEditor()
|
| + .SetInteger(kContextKeyProgress, kBeforeDownloadProgress)
|
| + .SetBoolean(kContextKeyShowEstimatedTimeLeft, false);
|
| if (!HasCriticalUpdate()) {
|
| VLOG(1) << "Noncritical update available: " << status.new_version;
|
| ExitUpdate(REASON_UPDATE_NON_CRITICAL);
|
| } else {
|
| VLOG(1) << "Critical update available: " << status.new_version;
|
| - actor_->SetProgressMessage(
|
| - UpdateScreenActor::PROGRESS_MESSAGE_UPDATE_AVAILABLE);
|
| - actor_->ShowProgressMessage(true);
|
| - actor_->ShowCurtain(false);
|
| + GetContextEditor()
|
| + .SetString(kContextKeyProgressMessage,
|
| + l10n_util::GetStringUTF16(IDS_UPDATE_AVAILABLE))
|
| + .SetBoolean(kContextKeyShowProgressMessage, true)
|
| + .SetBoolean(kContextKeyShowCurtain, false);
|
| }
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_DOWNLOADING:
|
| @@ -177,10 +183,11 @@ void UpdateScreen::UpdateStatusChanged(
|
| ExitUpdate(REASON_UPDATE_NON_CRITICAL);
|
| } else {
|
| VLOG(1) << "Critical update available: " << status.new_version;
|
| - actor_->SetProgressMessage(
|
| - UpdateScreenActor::PROGRESS_MESSAGE_INSTALLING_UPDATE);
|
| - actor_->ShowProgressMessage(true);
|
| - actor_->ShowCurtain(false);
|
| + GetContextEditor()
|
| + .SetString(kContextKeyProgressMessage,
|
| + l10n_util::GetStringUTF16(IDS_INSTALLING_UPDATE))
|
| + .SetBoolean(kContextKeyShowProgressMessage, true)
|
| + .SetBoolean(kContextKeyShowCurtain, false);
|
| }
|
| }
|
| UpdateDownloadingStats(status);
|
| @@ -188,23 +195,27 @@ void UpdateScreen::UpdateStatusChanged(
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_VERIFYING:
|
| MakeSureScreenIsShown();
|
| - actor_->SetProgress(kBeforeVerifyingProgress);
|
| - actor_->SetProgressMessage(UpdateScreenActor::PROGRESS_MESSAGE_VERIFYING);
|
| - actor_->ShowProgressMessage(true);
|
| + GetContextEditor()
|
| + .SetInteger(kContextKeyProgress, kBeforeVerifyingProgress)
|
| + .SetString(kContextKeyProgressMessage,
|
| + l10n_util::GetStringUTF16(IDS_UPDATE_VERIFYING))
|
| + .SetBoolean(kContextKeyShowProgressMessage, true);
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_FINALIZING:
|
| MakeSureScreenIsShown();
|
| - actor_->SetProgress(kBeforeFinalizingProgress);
|
| - actor_->SetProgressMessage(
|
| - UpdateScreenActor::PROGRESS_MESSAGE_FINALIZING);
|
| - actor_->ShowProgressMessage(true);
|
| + GetContextEditor()
|
| + .SetInteger(kContextKeyProgress, kBeforeFinalizingProgress)
|
| + .SetString(kContextKeyProgressMessage,
|
| + l10n_util::GetStringUTF16(IDS_UPDATE_FINALIZING))
|
| + .SetBoolean(kContextKeyShowProgressMessage, true);
|
| break;
|
| case UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT:
|
| MakeSureScreenIsShown();
|
| - actor_->SetProgress(kProgressComplete);
|
| - actor_->ShowEstimatedTimeLeft(false);
|
| + GetContextEditor()
|
| + .SetInteger(kContextKeyProgress, kProgressComplete)
|
| + .SetBoolean(kContextKeyShowEstimatedTimeLeft, false);
|
| if (HasCriticalUpdate()) {
|
| - actor_->ShowCurtain(false);
|
| + GetContextEditor().SetBoolean(kContextKeyShowCurtain, false);
|
| VLOG(1) << "Initiate reboot after update";
|
| SetHostPairingControllerStatus(
|
| HostPairingController::UPDATE_STATUS_REBOOTING);
|
| @@ -298,33 +309,59 @@ void UpdateScreen::StartNetworkCheck() {
|
| NetworkPortalDetector::Get()->AddAndFireObserver(this);
|
| }
|
|
|
| -void UpdateScreen::CancelUpdate() {
|
| - VLOG(1) << "Forced update cancel";
|
| - ExitUpdate(REASON_UPDATE_CANCELED);
|
| +void UpdateScreen::PrepareToShow() {
|
| + if (!view_)
|
| + return;
|
| +
|
| + view_->PrepareToShow();
|
| }
|
|
|
| void UpdateScreen::Show() {
|
| is_shown_ = true;
|
| histogram_helper_->OnScreenShow();
|
| - if (actor_) {
|
| - actor_->Show();
|
| - actor_->SetProgress(kBeforeUpdateCheckProgress);
|
| - }
|
| +
|
| +#if !defined(OFFICIAL_BUILD)
|
| + GetContextEditor().SetBoolean(kContextKeyCancelUpdateShortcutEnabled, true);
|
| +#endif
|
| + GetContextEditor().SetInteger(kContextKeyProgress,
|
| + kBeforeUpdateCheckProgress);
|
| +
|
| + if (view_)
|
| + view_->Show();
|
| }
|
|
|
| void UpdateScreen::Hide() {
|
| - if (actor_)
|
| - actor_->Hide();
|
| + if (view_)
|
| + view_->Hide();
|
| is_shown_ = false;
|
| }
|
|
|
| -std::string UpdateScreen::GetName() const {
|
| - return WizardController::kUpdateScreenName;
|
| +void UpdateScreen::Initialize(::login::ScreenContext* context) {
|
| + UpdateModel::Initialize(context);
|
| }
|
|
|
| -void UpdateScreen::PrepareToShow() {
|
| - if (actor_)
|
| - actor_->PrepareToShow();
|
| +void UpdateScreen::OnViewDestroyed(UpdateView* view) {
|
| + if (view_ == view)
|
| + view_ = nullptr;
|
| +}
|
| +
|
| +void UpdateScreen::OnUserAction(const std::string& action_id) {
|
| +#if !defined(OFFICIAL_BUILD)
|
| + if (action_id == kUserActionCancelUpdateShortcut)
|
| + CancelUpdate();
|
| +#endif
|
| +}
|
| +
|
| +void UpdateScreen::OnContextKeyUpdated(
|
| + const ::login::ScreenContext::KeyType& key) {
|
| + UpdateModel::OnContextKeyUpdated(key);
|
| +}
|
| +
|
| +void UpdateScreen::OnConnectToNetworkRequested() {
|
| + if (state_ == STATE_ERROR) {
|
| + LOG(WARNING) << "Hiding error message since AP was reselected";
|
| + StartUpdateCheck();
|
| + }
|
| }
|
|
|
| void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
|
| @@ -378,8 +415,8 @@ void UpdateScreen::ExitUpdate(UpdateScreen::ExitReason reason) {
|
| void UpdateScreen::OnWaitForRebootTimeElapsed() {
|
| LOG(ERROR) << "Unable to reboot - asking user for a manual reboot.";
|
| MakeSureScreenIsShown();
|
| - if (actor_)
|
| - actor_->ShowManualRebootInfo();
|
| + GetContextEditor().SetString(kContextKeyUpdateMessage,
|
| + l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED));
|
| }
|
|
|
| void UpdateScreen::MakeSureScreenIsShown() {
|
| @@ -387,21 +424,17 @@ void UpdateScreen::MakeSureScreenIsShown() {
|
| get_base_screen_delegate()->ShowCurrentScreen();
|
| }
|
|
|
| -void UpdateScreen::SetRebootCheckDelay(int seconds) {
|
| - if (seconds <= 0)
|
| - reboot_timer_.Stop();
|
| - DCHECK(!reboot_timer_.IsRunning());
|
| - reboot_check_delay_ = seconds;
|
| -}
|
| -
|
| void UpdateScreen::SetIgnoreIdleStatus(bool ignore_idle_status) {
|
| ignore_idle_status_ = ignore_idle_status;
|
| }
|
|
|
| +void UpdateScreen::CancelUpdate() {
|
| + VLOG(1) << "Forced update cancel";
|
| + ExitUpdate(REASON_UPDATE_CANCELED);
|
| +}
|
| +
|
| void UpdateScreen::UpdateDownloadingStats(
|
| const UpdateEngineClient::Status& status) {
|
| - if (!actor_)
|
| - return;
|
| base::Time download_current_time = base::Time::Now();
|
| if (download_current_time >= download_last_time_ + kMinTimeStep) {
|
| // Estimate downloading rate.
|
| @@ -437,14 +470,16 @@ void UpdateScreen::UpdateDownloadingStats(
|
| // |bound possible estimations.
|
| time_left = std::min(time_left, kMaxTimeLeft);
|
|
|
| - actor_->ShowEstimatedTimeLeft(true);
|
| - actor_->SetEstimatedTimeLeft(
|
| - base::TimeDelta::FromSeconds(static_cast<int64>(time_left)));
|
| + GetContextEditor()
|
| + .SetBoolean(kContextKeyShowEstimatedTimeLeft, true)
|
| + .SetInteger(kContextKeyEstimatedTimeLeftSec,
|
| + static_cast<int>(time_left));
|
| }
|
|
|
| int download_progress = static_cast<int>(
|
| status.download_progress * kDownloadProgressIncrement);
|
| - actor_->SetProgress(kBeforeDownloadProgress + download_progress);
|
| + GetContextEditor().SetInteger(kContextKeyProgress,
|
| + kBeforeDownloadProgress + download_progress);
|
| }
|
|
|
| bool UpdateScreen::HasCriticalUpdate() {
|
| @@ -466,18 +501,6 @@ bool UpdateScreen::HasCriticalUpdate() {
|
| return true;
|
| }
|
|
|
| -void UpdateScreen::OnActorDestroyed(UpdateScreenActor* actor) {
|
| - if (actor_ == actor)
|
| - actor_ = NULL;
|
| -}
|
| -
|
| -void UpdateScreen::OnConnectToNetworkRequested() {
|
| - if (state_ == STATE_ERROR) {
|
| - LOG(WARNING) << "Hiding error message since AP was reselected";
|
| - StartUpdateCheck();
|
| - }
|
| -}
|
| -
|
| ErrorScreen* UpdateScreen::GetErrorScreen() {
|
| return get_base_screen_delegate()->GetErrorScreen();
|
| }
|
|
|