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