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/memory/scoped_ptr.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace {
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.UpdateScreen";
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UpdateScreenHandler::UpdateScreenHandler()
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    : BaseScreenHandler(kJsScreenPath),
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      screen_(NULL),
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      show_on_init_(false) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)UpdateScreenHandler::~UpdateScreenHandler() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (screen_)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    screen_->OnActorDestroyed(this);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UpdateScreenHandler::DeclareLocalizedValues(
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LocalizedValuesBuilder* builder) {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  builder->Add("checkingForUpdatesMsg", IDS_CHECKING_FOR_UPDATE_MSG);
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  builder->Add("installingUpdateDesc", IDS_UPDATE_MSG);
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("updateScreenTitle", IDS_UPDATE_SCREEN_TITLE);
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  builder->Add("updateScreenAccessibleTitle",
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch               IDS_UPDATE_SCREEN_ACCESSIBLE_TITLE);
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("checkingForUpdates", IDS_CHECKING_FOR_UPDATES);
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("downloading", IDS_DOWNLOADING);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("downloadingTimeLeftLong", IDS_DOWNLOADING_TIME_LEFT_LONG);
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("downloadingTimeLeftStatusOneHour",
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_DOWNLOADING_TIME_LEFT_STATUS_ONE_HOUR);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("downloadingTimeLeftStatusMinutes",
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_DOWNLOADING_TIME_LEFT_STATUS_MINUTES);
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("downloadingTimeLeftSmall", IDS_DOWNLOADING_TIME_LEFT_SMALL);
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("cancelUpdateHint", IDS_UPDATE_CANCEL);
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("cancelledUpdateMessage", IDS_UPDATE_CANCELLED);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("cancelUpdateHint", IDS_EMPTY_STRING);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("cancelledUpdateMessage", IDS_EMPTY_STRING);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Initialize() {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (show_on_init_) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Show();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = false;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetDelegate(UpdateScreenActor::Delegate* screen) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_ = screen;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Show() {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!page_is_ready()) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    show_on_init_ = true;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShowScreen(OobeUI::kScreenOobeUpdate, NULL);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
76c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("enableUpdateCancel");
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::Hide() {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::PrepareToShow() {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowManualRebootInfo() {
87c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("setUpdateMessage", l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED));
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetProgress(int progress) {
91c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("setUpdateProgress", progress);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowEstimatedTimeLeft(bool visible) {
95c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("showEstimatedTimeLeft", visible);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetEstimatedTimeLeft(const base::TimeDelta& time) {
99c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("setEstimatedTimeLeft", time.InSecondsF());
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowProgressMessage(bool visible) {
103c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("showProgressMessage", visible);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::SetProgressMessage(ProgressMessage message) {
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int ids = 0;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (message) {
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_UPDATE_AVAILABLE:
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ids = IDS_UPDATE_AVAILABLE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_INSTALLING_UPDATE:
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ids = IDS_INSTALLING_UPDATE;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_VERIFYING:
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ids = IDS_UPDATE_VERIFYING;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case PROGRESS_MESSAGE_FINALIZING:
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ids = IDS_UPDATE_FINALIZING;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NOTREACHED();
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      return;
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  CallJS("setProgressMessage", l10n_util::GetStringUTF16(ids));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::ShowCurtain(bool visible) {
130c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch  CallJS("showUpdateCurtain", visible);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void UpdateScreenHandler::RegisterMessages() {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("cancelUpdate", &UpdateScreenHandler::HandleUpdateCancel);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
139116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid UpdateScreenHandler::OnConnectToNetworkRequested() {
1402385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  if (screen_)
141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    screen_->OnConnectToNetworkRequested();
1422385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch}
1432385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OFFICIAL_BUILD)
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void UpdateScreenHandler::HandleUpdateCancel() {
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  screen_->CancelUpdate();
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
151