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
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/webui/chromeos/login/update_screen_handler.h"
6
7#include "base/memory/scoped_ptr.h"
8#include "base/values.h"
9#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
10#include "chrome/grit/chromium_strings.h"
11#include "chrome/grit/generated_resources.h"
12#include "ui/base/l10n/l10n_util.h"
13
14namespace {
15
16const char kJsScreenPath[] = "login.UpdateScreen";
17
18}  // namespace
19
20namespace chromeos {
21
22UpdateScreenHandler::UpdateScreenHandler()
23    : BaseScreenHandler(kJsScreenPath),
24      screen_(NULL),
25      show_on_init_(false) {
26}
27
28UpdateScreenHandler::~UpdateScreenHandler() {
29  if (screen_)
30    screen_->OnActorDestroyed(this);
31}
32
33void UpdateScreenHandler::DeclareLocalizedValues(
34    LocalizedValuesBuilder* builder) {
35  builder->Add("checkingForUpdatesMsg", IDS_CHECKING_FOR_UPDATE_MSG);
36  builder->Add("installingUpdateDesc", IDS_UPDATE_MSG);
37  builder->Add("updateScreenTitle", IDS_UPDATE_SCREEN_TITLE);
38  builder->Add("updateScreenAccessibleTitle",
39               IDS_UPDATE_SCREEN_ACCESSIBLE_TITLE);
40  builder->Add("checkingForUpdates", IDS_CHECKING_FOR_UPDATES);
41  builder->Add("downloading", IDS_DOWNLOADING);
42  builder->Add("downloadingTimeLeftLong", IDS_DOWNLOADING_TIME_LEFT_LONG);
43  builder->Add("downloadingTimeLeftStatusOneHour",
44               IDS_DOWNLOADING_TIME_LEFT_STATUS_ONE_HOUR);
45  builder->Add("downloadingTimeLeftStatusMinutes",
46               IDS_DOWNLOADING_TIME_LEFT_STATUS_MINUTES);
47  builder->Add("downloadingTimeLeftSmall", IDS_DOWNLOADING_TIME_LEFT_SMALL);
48
49#if !defined(OFFICIAL_BUILD)
50  builder->Add("cancelUpdateHint", IDS_UPDATE_CANCEL);
51  builder->Add("cancelledUpdateMessage", IDS_UPDATE_CANCELLED);
52#else
53  builder->Add("cancelUpdateHint", IDS_EMPTY_STRING);
54  builder->Add("cancelledUpdateMessage", IDS_EMPTY_STRING);
55#endif
56}
57
58void UpdateScreenHandler::Initialize() {
59  if (show_on_init_) {
60    Show();
61    show_on_init_ = false;
62  }
63}
64
65void UpdateScreenHandler::SetDelegate(UpdateScreenActor::Delegate* screen) {
66  screen_ = screen;
67}
68
69void UpdateScreenHandler::Show() {
70  if (!page_is_ready()) {
71    show_on_init_ = true;
72    return;
73  }
74  ShowScreen(OobeUI::kScreenOobeUpdate, NULL);
75#if !defined(OFFICIAL_BUILD)
76  CallJS("enableUpdateCancel");
77#endif
78}
79
80void UpdateScreenHandler::Hide() {
81}
82
83void UpdateScreenHandler::PrepareToShow() {
84}
85
86void UpdateScreenHandler::ShowManualRebootInfo() {
87  CallJS("setUpdateMessage", l10n_util::GetStringUTF16(IDS_UPDATE_COMPLETED));
88}
89
90void UpdateScreenHandler::SetProgress(int progress) {
91  CallJS("setUpdateProgress", progress);
92}
93
94void UpdateScreenHandler::ShowEstimatedTimeLeft(bool visible) {
95  CallJS("showEstimatedTimeLeft", visible);
96}
97
98void UpdateScreenHandler::SetEstimatedTimeLeft(const base::TimeDelta& time) {
99  CallJS("setEstimatedTimeLeft", time.InSecondsF());
100}
101
102void UpdateScreenHandler::ShowProgressMessage(bool visible) {
103  CallJS("showProgressMessage", visible);
104}
105
106void UpdateScreenHandler::SetProgressMessage(ProgressMessage message) {
107  int ids = 0;
108  switch (message) {
109    case PROGRESS_MESSAGE_UPDATE_AVAILABLE:
110      ids = IDS_UPDATE_AVAILABLE;
111      break;
112    case PROGRESS_MESSAGE_INSTALLING_UPDATE:
113      ids = IDS_INSTALLING_UPDATE;
114      break;
115    case PROGRESS_MESSAGE_VERIFYING:
116      ids = IDS_UPDATE_VERIFYING;
117      break;
118    case PROGRESS_MESSAGE_FINALIZING:
119      ids = IDS_UPDATE_FINALIZING;
120      break;
121    default:
122      NOTREACHED();
123      return;
124  }
125
126  CallJS("setProgressMessage", l10n_util::GetStringUTF16(ids));
127}
128
129void UpdateScreenHandler::ShowCurtain(bool visible) {
130  CallJS("showUpdateCurtain", visible);
131}
132
133void UpdateScreenHandler::RegisterMessages() {
134#if !defined(OFFICIAL_BUILD)
135  AddCallback("cancelUpdate", &UpdateScreenHandler::HandleUpdateCancel);
136#endif
137}
138
139void UpdateScreenHandler::OnConnectToNetworkRequested() {
140  if (screen_)
141    screen_->OnConnectToNetworkRequested();
142}
143
144#if !defined(OFFICIAL_BUILD)
145void UpdateScreenHandler::HandleUpdateCancel() {
146  screen_->CancelUpdate();
147}
148#endif
149
150}  // namespace chromeos
151