1// Copyright (c) 2013 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/charger_replacement_handler.h"
6
7#include "base/bind.h"
8#include "base/prefs/pref_registry_simple.h"
9#include "base/prefs/pref_service.h"
10#include "base/strings/utf_string_conversions.h"
11#include "base/values.h"
12#include "chrome/browser/browser_process.h"
13#include "chrome/browser/chromeos/charger_replace/charger_link_dialog.h"
14#include "chrome/browser/chromeos/charger_replace/charger_replacement_dialog.h"
15#include "chrome/common/pref_names.h"
16#include "chrome/grit/generated_resources.h"
17#include "content/public/browser/user_metrics.h"
18#include "content/public/browser/web_ui.h"
19#include "ui/base/l10n/l10n_util.h"
20
21namespace chromeos {
22
23namespace {
24
25const char kFaqLink[] = "http://chromebook.com/hp11charger";
26
27} // namespace
28
29ChargerReplacementHandler::ChargerReplacementHandler(
30    ChargerReplacementDialog* dialog)
31    : charger_window_(NULL),
32      dialog_(dialog) {
33}
34
35ChargerReplacementHandler::~ChargerReplacementHandler() {
36}
37
38void ChargerReplacementHandler::RegisterMessages() {
39  web_ui()->RegisterMessageCallback("confirmSafeCharger",
40      base::Bind(&ChargerReplacementHandler::ConfirmSafeCharger,
41                 base::Unretained(this)));
42  web_ui()->RegisterMessageCallback("confirmNotOrderNewCharger",
43      base::Bind(&ChargerReplacementHandler::ConfirmNotOrderNewCharger,
44                 base::Unretained(this)));
45  web_ui()->RegisterMessageCallback("confirmChargerOrderedOnline",
46      base::Bind(&ChargerReplacementHandler::ConfirmChargerOrderedOnline,
47                 base::Unretained(this)));
48  web_ui()->RegisterMessageCallback("confirmChargerOrderByPhone",
49      base::Bind(&ChargerReplacementHandler::ConfirmChargerOrderByPhone,
50                 base::Unretained(this)));
51  web_ui()->RegisterMessageCallback("confirmStillUseBadCharger",
52      base::Bind(&ChargerReplacementHandler::ConfirmStillUseBadCharger,
53                 base::Unretained(this)));
54  web_ui()->RegisterMessageCallback("showLink",
55      base::Bind(&ChargerReplacementHandler::ShowLink,
56                 base::Unretained(this)));
57}
58
59// static
60void ChargerReplacementHandler::GetLocalizedValues(
61    base::DictionaryValue* localized_strings) {
62  localized_strings->SetString(
63      "checkChargerTitle",
64      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_CHECK_CHARGER_TITLE));
65  localized_strings->SetString(
66      "checkChargerDamage",
67      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_CHECK_CHARGER_DAMAGE));
68  localized_strings->SetString(
69      "checkOriginalCharger",
70      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_CHECK_ORIGNAL_CHARGER));
71  localized_strings->SetString(
72      "whereDevicePurchased",
73      l10n_util::GetStringUTF16(
74          IDS_CHARGER_REPLACEMENT_WHERE_DEVICE_PURCHASED));
75  localized_strings->SetString(
76      "selectCountry",
77      l10n_util::GetStringUTF16(
78          IDS_CHARGER_REPLACEMENT_SELECT_A_COUNTRY));
79  localized_strings->SetString(
80      "us",
81      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_US));
82  localized_strings->SetString(
83      "ca",
84      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_CA));
85  localized_strings->SetString(
86      "uk",
87      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_UK));
88  localized_strings->SetString(
89      "au",
90      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_AU));
91  localized_strings->SetString(
92      "ire",
93      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_IRE));
94  localized_strings->SetString(
95      "checkChargerSelectCharger",
96      l10n_util::GetStringUTF16(
97          IDS_CHARGER_REPLACEMENT_CHECK_CHARGER_SELECT_CHARGER));
98  localized_strings->SetString(
99      "nextStepButtonText",
100      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_NEXT_STEP));
101  localized_strings->SetString(
102      "confirmSafeChargerTitle",
103      l10n_util::GetStringUTF16(
104          IDS_CHARGER_REPLACEMENT_CONFIRM_SAFE_CHARGER_TITLE));
105  localized_strings->SetString(
106      "goWithSafeCharger",
107      l10n_util::GetStringUTF16(
108          IDS_CHARGER_REPLACEMENT_CONFIRM_SAFE_CHARGER_TO_GO));
109  localized_strings->SetString(
110      "prevStepText",
111      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_PREVIOUS_STEP));
112  localized_strings->SetString(
113      "finishText",
114      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_FINISH));
115  localized_strings->SetString(
116      "chargerUpdateTitle",
117      l10n_util::GetStringUTF16(
118          IDS_CHARGER_REPLACEMENT_CHARGER_UPDATE_TITLE));
119  localized_strings->SetString(
120      "chargerUpdateP1",
121      l10n_util::GetStringUTF16(
122          IDS_CHARGER_REPLACEMENT_CHARGER_UPDATE_P1));
123  localized_strings->SetString(
124      "stopUsingRecalledCharger",
125      l10n_util::GetStringUTF16(
126          IDS_CHARGER_REPLACEMENT_CHARGER_STOP_USING_RECALLED_CHARGER));
127  localized_strings->SetString(
128      "chargerUpdateP2",
129      l10n_util::GetStringUTF16(
130          IDS_CHARGER_REPLACEMENT_CHARGER_UPDATE_P2));
131  localized_strings->SetString(
132      "chargerUpdateFAQ",
133      l10n_util::GetStringUTF16(
134          IDS_CHARGER_REPLACEMENT_CHARGER_UPDATE_FAQ));
135  localized_strings->SetString(
136      "orderNewCharger",
137      l10n_util::GetStringUTF16(
138          IDS_CHARGER_REPLACEMENT_CHARGER_ORDER_NEW_CHARGER));
139  localized_strings->SetString(
140      "notOrderNewCharger",
141      l10n_util::GetStringUTF16(
142          IDS_CHARGER_REPLACEMENT_CHARGER_NOT_ORDER_NEW_CHARGER));
143  localized_strings->SetString(
144      "confirmNotOrderNewCharger",
145      l10n_util::GetStringUTF16(
146          IDS_CHARGER_REPLACEMENT_CHARGER_CONIFRM_NOT_ORDER_CHARGER));
147  localized_strings->SetString(
148      "noMoreShowText",
149      l10n_util::GetStringUTF16(
150          IDS_CHARGER_REPLACEMENT_NO_MOPE_MESSAGE_SHOW));
151  localized_strings->SetString(
152      "finishNotOrderChargerTitle",
153      l10n_util::GetStringUTF16(
154          IDS_CHARGER_REPLACEMENT_FINISH_NOT_ORDER_CHARGER_TITLE));
155  localized_strings->SetString(
156      "finishNotOrderChargerP2",
157      l10n_util::GetStringUTF16(
158          IDS_CHARGER_REPLACEMENT_FINISH_NOT_ORDER_CHARGER_P2));
159  localized_strings->SetString(
160      "finishNotOrderChargerMoreInfo",
161      l10n_util::GetStringUTF16(
162          IDS_CHARGER_REPLACEMENT_FINISH_NOT_ORDER_CHARGER_MORE_INFO));
163
164  localized_strings->SetString(
165      "confirmOnlineOrder",
166      l10n_util::GetStringUTF16(
167          IDS_CHARGER_REPLACEMENT_ONLINE_ORDER_CONFIRMATION_TITLE));
168  localized_strings->SetString(
169      "confirmReceivingOnlineOrder",
170      l10n_util::GetStringUTF16(
171          IDS_CHARGER_REPLACEMENT_ONLINE_ORDER_CONFIRMATION_MESSAGE));
172  localized_strings->SetString(
173      "needMoreInformation",
174      l10n_util::GetStringUTF16(IDS_CHARGER_REPLACEMENT_FIND_MORE_INFORMATION));
175  localized_strings->SetString(
176      "orderChargerOfflineTitle",
177      l10n_util::GetStringUTF16(
178          IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_TITLE));
179  localized_strings->SetString(
180        "offlineChargerOrderParagraph1",
181        l10n_util::GetStringUTF16(
182            IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_P1));
183  localized_strings->SetString(
184      "offlineChargerOrderParagraph2",
185      l10n_util::GetStringUTF16(
186          IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_P2));
187  localized_strings->SetString(
188      "offlineSafeChargerConfirmationText",
189      l10n_util::GetStringUTF16(
190          IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_CONFIRM));
191  localized_strings->SetString(
192      "privacyPolicy",
193      l10n_util::GetStringUTF16(
194          IDS_CHARGER_REPLACEMENT_TEXT_PRIVACY_POLICY));
195  localized_strings->SetString(
196      "offlineOrderPhoneNumber",
197      l10n_util::GetStringUTF16(
198          IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_PHONE_NUMBER));
199  localized_strings->SetString(
200      "offlineOrderPhoneNumber",
201      l10n_util::GetStringUTF16(
202          IDS_CHARGER_REPLACEMENT_OFFLINE_ORDER_PHONE_NUMBER));
203  localized_strings->SetString(
204      "chargerStillBadTitle",
205      l10n_util::GetStringUTF16(
206          IDS_CHARGER_REPLACEMENT_CHARGER_STILL_BAD));
207  localized_strings->SetString(
208      "chargedOrdered",
209      l10n_util::GetStringUTF16(
210          IDS_CHARGER_REPLACEMENT_CHARGER_ORDERED));
211  localized_strings->SetString(
212      "findMoreInfo",
213      l10n_util::GetStringUTF16(
214          IDS_CHARGER_REPLACEMENT_CHARGER_MORE_INFO));
215  localized_strings->SetString("faqLink", kFaqLink);
216}
217
218// static
219void ChargerReplacementHandler::RegisterPrefs(PrefRegistrySimple* registry) {
220  registry->RegisterIntegerPref(prefs::kSpringChargerCheck, CHARGER_UNKNOWN);
221}
222
223// static
224ChargerReplacementHandler::SpringChargerStatus
225    ChargerReplacementHandler::GetChargerStatusPref() {
226  ChargerReplacementHandler::SpringChargerStatus charger_status =
227      static_cast<ChargerReplacementHandler::SpringChargerStatus>(
228      g_browser_process->local_state()->GetInteger(prefs::kSpringChargerCheck));
229  return charger_status;
230}
231
232// static
233void ChargerReplacementHandler::SetChargerStatusPref(
234    SpringChargerStatus status) {
235  g_browser_process->local_state()->SetInteger(prefs::kSpringChargerCheck,
236                                               status);
237}
238
239void ChargerReplacementHandler::ConfirmSafeCharger(
240    const base::ListValue* args) {
241  content::RecordAction(
242        base::UserMetricsAction("ConfirmSafeSpringCharger"));
243
244  SetChargerStatusPref(CONFIRM_SAFE_CHARGER);
245  dialog_->set_can_close(true);
246}
247
248void ChargerReplacementHandler::ConfirmNotOrderNewCharger(
249    const base::ListValue* args) {
250  content::RecordAction(
251        base::UserMetricsAction("ConfirmNotToOrderSpringCharger"));
252
253  SetChargerStatusPref(CONFIRM_NOT_ORDER_NEW_CHARGER);
254  dialog_->set_can_close(true);
255}
256
257void ChargerReplacementHandler::ConfirmChargerOrderedOnline(
258    const base::ListValue* args) {
259  content::RecordAction(
260        base::UserMetricsAction("ConfirmOrderSpringChargerOnline"));
261  content::RecordAction(
262        base::UserMetricsAction("ConfirmOrderSpringCharger"));
263
264  SetChargerStatusPref(CONFIRM_NEW_CHARGER_ORDERED_ONLINE);
265  dialog_->set_can_close(true);
266}
267
268void ChargerReplacementHandler::ConfirmChargerOrderByPhone(
269    const base::ListValue* args) {
270  content::RecordAction(
271        base::UserMetricsAction("ConfirmOrderSpringChargerByPhone"));
272  content::RecordAction(
273        base::UserMetricsAction("ConfirmOrderSpringCharger"));
274
275  SetChargerStatusPref(CONFIRM_ORDER_NEW_CHARGER_BY_PHONE);
276  dialog_->set_can_close(true);
277}
278
279void ChargerReplacementHandler::ConfirmStillUseBadCharger(
280    const base::ListValue* args) {
281  content::RecordAction(
282      base::UserMetricsAction("ConfirmStillUseOriginalChargerAfterOrder"));
283
284  if (GetChargerStatusPref() == CONFIRM_NEW_CHARGER_ORDERED_ONLINE) {
285    SetChargerStatusPref(USE_BAD_CHARGER_AFTER_ORDER_ONLINE);
286  } else {
287    DCHECK(GetChargerStatusPref() == CONFIRM_ORDER_NEW_CHARGER_BY_PHONE);
288    SetChargerStatusPref(USE_BAD_CHARGER_AFTER_ORDER_BY_PHONE);
289  }
290  dialog_->set_can_close(true);
291}
292
293void ChargerReplacementHandler::ShowLink(const base::ListValue* args) {
294  std::string url = base::UTF16ToUTF8(ExtractStringValue(args));
295  ChargerLinkDialog* dialog = new ChargerLinkDialog(charger_window_, url);
296  dialog->Show();
297}
298
299}  // namespace chromeos
300