update_screen_handler.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/update_screen_handler.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/chromium_strings.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Update screen ID.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUpdateScreen[] = "update";
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UpdateScreenHandler::UpdateScreenHandler()
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : screen_(NULL),
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      show_on_init_(false) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UpdateScreenHandler::~UpdateScreenHandler() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (screen_)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    screen_->OnActorDestroyed(this);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::GetLocalizedStrings(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DictionaryValue *localized_strings) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16 short_product_name =
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("checkingForUpdatesMsg",
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_CHECKING_FOR_UPDATE_MSG,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 short_product_name));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("updateScreenTitle",
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_UPDATE_SCREEN_TITLE));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("checkingForUpdates",
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_CHECKING_FOR_UPDATES));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("installingUpdateDesc",
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_UPDATE_MSG, short_product_name));
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("downloading",
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_DOWNLOADING));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("downloadingTimeLeftLong",
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_DOWNLOADING_TIME_LEFT_LONG));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("downloadingTimeLeftStatusOneHour",
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_DOWNLOADING_TIME_LEFT_STATUS_ONE_HOUR));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("downloadingTimeLeftStatusMinutes",
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_DOWNLOADING_TIME_LEFT_STATUS_MINUTES));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("downloadingTimeLeftSmall",
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_DOWNLOADING_TIME_LEFT_SMALL));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("cancelUpdateHint",
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_UPDATE_CANCEL));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  localized_strings->SetString("cancelledUpdateMessage",
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_UPDATE_CANCELLED));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Initialize() {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_on_init_) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Show();
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = false;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetDelegate(UpdateScreenActor::Delegate* screen) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_ = screen;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Show() {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!page_is_ready()) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = true;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShowScreen(kUpdateScreen, NULL);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("oobe.UpdateScreen.enableUpdateCancel");
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Hide() {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::PrepareToShow() {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowManualRebootInfo() {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  StringValue message(l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.ui.Oobe.setUpdateMessage", message);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetProgress(int progress) {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue progress_value(progress);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction("cr.ui.Oobe.setUpdateProgress",
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   progress_value);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowEstimatedTimeLeft(bool visible) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue visible_value(visible);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "cr.ui.Oobe.showEstimatedTimeLeft", visible_value);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetEstimatedTimeLeft(const base::TimeDelta& time) {
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue seconds_value(time.InSecondsF());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "cr.ui.Oobe.setEstimatedTimeLeft", seconds_value);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowProgressMessage(bool visible) {
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue visible_value(visible);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "cr.ui.Oobe.showProgressMessage", visible_value);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetProgressMessage(ProgressMessage message) {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<StringValue> progress_message;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (message) {
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_UPDATE_AVAILABLE:
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      progress_message.reset(Value::CreateStringValue(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          l10n_util::GetStringUTF16(IDS_UPDATE_AVAILABLE)));
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_INSTALLING_UPDATE:
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      progress_message.reset(Value::CreateStringValue(
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          l10n_util::GetStringFUTF16(IDS_INSTALLING_UPDATE,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME))));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_VERIFYING:
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      progress_message.reset(Value::CreateStringValue(
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          l10n_util::GetStringUTF16(IDS_UPDATE_VERIFYING)));
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_FINALIZING:
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      progress_message.reset(Value::CreateStringValue(
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          l10n_util::GetStringUTF16(IDS_UPDATE_FINALIZING)));
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (progress_message.get()) {
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_ui()->CallJavascriptFunction(
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "cr.ui.Oobe.setProgressMessage", *progress_message);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowCurtain(bool visible) {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::FundamentalValue visible_value(visible);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->CallJavascriptFunction(
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "cr.ui.Oobe.showUpdateCurtain", visible_value);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::RegisterMessages() {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_ui()->RegisterMessageCallback("cancelUpdate",
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&UpdateScreenHandler::HandleUpdateCancel,
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(this)));
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::HandleUpdateCancel(const base::ListValue* args) {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(args && args->empty());
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_->CancelUpdate();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
174