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.
5 cr
.define('chargerReplacement', function() {
8 * Enumeration of charger selection.
11 var CHARGER_SELECTION
= {
18 * Enumeration of html pages.
23 CONFIRM_SAFE_CHARGER
: 1,
25 ORDER_CHARGER_ONLINE
: 3,
26 CONFIRM_ONLINE_ORDER
: 4,
27 FINISH_NOT_ORDER_CHARGER
: 5,
28 ORDER_CHARGER_OFFLINE
: 6,
33 * Enumeration of the user's choice for order new charger or not.
35 var USER_CHOICE_FOR_CHARGER_UPDATE
= {
37 NOT_ORDER_NEW_CHARGER
: 1,
41 * Enumeration of messages sent from iFrame order form.
43 var ORDER_CHARGER_IFRAME_MESSAGE
= {
44 FORM_OPEN
: 'FORM_OPEN',
52 * Enumeration of countries where user might purchase the device.
63 * Dialog argument passed from chrome to indicate whether user has ordered
66 var NEW_CHARGER_ORDERED
= '1';
69 * Charger order form iFrame url.
71 var ORDER_CHARGER_IFRAME_URL
= 'https://chromesafetycheck.appspot.com';
74 * maximum delay in milliseconds for loading the online charger order form
77 var ONLINE_ORDER_FORM_LOADING_DELAY
= 30000;
80 * maximum delay in milliseconds for server to respond after user submits
83 var ONLINE_ORDER_SUBMISSION_DELAY
= 60000;
86 * urls of href links on UI.
88 var CHARGER_FAQ_LINK
= 'http://chromebook.com/hp11charger/';
89 var PRIVACY_POLICY_LINK
= 'http://www.google.com/policies/privacy';
91 var onlineOrderSubmitTimer
;
94 * flag for whether the online charger order form is loaded.
96 var isOrderFormLoaded
= false;
99 * flag for whether user's online charger order form submission has been
100 * recevied by Google. True if the server responds with SUCCESSS or
101 * FAILURE. FAILURE indicate user has some input error in form and should
104 var isOrderSubmissionReceived
= false;
107 * charger selection by user.
109 var chargerSelection
= CHARGER_SELECTION
.NONE
;
112 * Set window the specified size and center it to screen.
114 function setWindowSizeAndCenter(width
, height
) {
115 window
.resizeTo(width
, height
);
116 window
.moveTo(window
.screen
.width
/ 2 - width
/ 2,
117 window
.screen
.height
/ 2 - height
/ 2);
121 * Show a particular page.
123 function showPage(page
) {
125 case PAGES
.CHECK_CHARGER
:
126 setWindowSizeAndCenter(500, 590);
128 case PAGES
.CONFIRM_SAFE_CHARGER
:
129 setWindowSizeAndCenter(400, 325);
131 case PAGES
.CHARGER_UPDATE
:
132 setWindowSizeAndCenter(510, 505);
134 case PAGES
.ORDER_CHARGER_ONLINE
:
135 $('charger-order-form').src
= ORDER_CHARGER_IFRAME_URL
;
136 setWindowSizeAndCenter(1150, 550);
137 setTimeout(checkOnlineOrderFormLoaded
, ONLINE_ORDER_FORM_LOADING_DELAY
);
139 case PAGES
.CONFIRM_ONLINE_ORDER
:
140 setWindowSizeAndCenter(420, 380);
142 case PAGES
.FINISH_NOT_ORDER_CHARGER
:
143 setWindowSizeAndCenter(430, 350);
145 case PAGES
.ORDER_CHARGER_OFFLINE
:
146 setWindowSizeAndCenter(750, 600);
148 case PAGES
.CHARGER_STILL_BAD
:
149 setWindowSizeAndCenter(430, 380);
152 document
.body
.setAttribute('page', page
);
156 * Select a country from the drop down list.
158 function selectCountry() {
159 var country
= $('select-device-country').value
;
160 if (country
== COUNTRY
.US
|| country
== COUNTRY
.CA
) {
161 $('new-charger').src
= $('new-charger-us').src
;
162 $('original-charger').src
= $('original-charger-us').src
;
163 } else if (country
== COUNTRY
.AU
) {
164 $('new-charger').src
= $('new-charger-au').src
;
165 $('original-charger').src
= $('original-charger-au').src
;
167 $('new-charger').src
= $('new-charger-uk').src
;
168 $('original-charger').src
= $('original-charger-uk').src
;
170 $('charger-selection-strip').style
.visibility
= 'visible';
174 * Toggle charger box border color based on if it is selected.
176 function ToggleChargerSelection(charger
, selected
) {
177 charger
.classList
.toggle('selected-charger', selected
);
178 charger
.classList
.toggle('de-selected-charger', !selected
);
182 * Select a charger, either original or good charger with green sticker.
184 function selectCharger(selection
) {
185 if (selection
== CHARGER_SELECTION
.NONE
)
188 chargerSelection
= selection
;
189 $('check-charger-next-step').disabled
= false;
190 if (chargerSelection
== CHARGER_SELECTION
.GOOD_CHARGER
) {
191 var selectedCharger
= $('new-charger-box');
192 var notSelectedCharger
= $('original-charger-box');
194 var selectedCharger
= $('original-charger-box');
195 var notSelectedCharger
= $('new-charger-box');
197 ToggleChargerSelection(selectedCharger
, true);
198 ToggleChargerSelection(notSelectedCharger
, false);
202 * Process the flow after user select a charger.
204 function afterSelectCharger(dialogArg
) {
205 if (chargerSelection
== CHARGER_SELECTION
.NONE
)
208 if (chargerSelection
== CHARGER_SELECTION
.GOOD_CHARGER
) {
209 showPage(PAGES
.CONFIRM_SAFE_CHARGER
);
211 if (dialogArg
== NEW_CHARGER_ORDERED
)
212 showPage(PAGES
.CHARGER_STILL_BAD
);
214 showPage(PAGES
.CHARGER_UPDATE
);
219 * Proceed to next step after user make the choice for charger update.
221 function nextStepForChargerUpdate() {
222 var radios
= document
.getElementsByName('order-new-charger');
223 if (radios
[USER_CHOICE_FOR_CHARGER_UPDATE
.ORDER_NEW_CHARGER
].checked
) {
224 if (navigator
.onLine
)
225 showPage(PAGES
.ORDER_CHARGER_ONLINE
);
227 showPage(PAGES
.ORDER_CHARGER_OFFLINE
);
229 showPage(PAGES
.FINISH_NOT_ORDER_CHARGER
);
234 * Update the UI after user confirms the choice for charger update.
236 function afterUserConfirmationForChargerUpdate() {
237 if ($('order-new-charger').checked
) {
238 $('not-order-charger-checkbox-strip').style
.visibility
= 'hidden';
239 $('next-to-charger-update').disabled
= false;
241 $('not-order-charger-checkbox-strip').style
.visibility
= 'visible';
242 $('next-to-charger-update').disabled
=
243 !$('confirm-not-order-charger').checked
;
248 * Check if the online order form has been loaded in iFrame.
250 function checkOnlineOrderFormLoaded() {
251 if (!isOrderFormLoaded
)
252 showPage(PAGES
.ORDER_CHARGER_OFFLINE
);
256 * Check if the online charger order has been successful or not.
258 function checkOnlineOrderSubmissionResponse() {
259 if (!isOrderSubmissionReceived
)
260 showPage(PAGES
.ORDER_CHARGER_OFFLINE
);
264 * Handle the messages posted by the iFrame for online order form.
266 function handleWindowMessage(e
) {
267 if (e
.origin
!= ORDER_CHARGER_IFRAME_URL
)
270 var type
= e
.data
['type'];
271 if (type
== ORDER_CHARGER_IFRAME_MESSAGE
.FORM_OPEN
) {
272 isOrderFormLoaded
= true;
273 } else if (type
== ORDER_CHARGER_IFRAME_MESSAGE
.SUBMIT
) {
274 if (onlineOrderSubmitTimer
)
275 clearTimeout(onlineOrderSubmitTimer
);
276 onlineOrderSubmitTimer
= setTimeout(checkOnlineOrderSubmissionResponse
,
277 ONLINE_ORDER_SUBMISSION_DELAY
);
278 } else if (type
== ORDER_CHARGER_IFRAME_MESSAGE
.SUCCESS
) {
279 isOrderSubmissionReceived
= true;
280 showPage(PAGES
.CONFIRM_ONLINE_ORDER
);
281 } else if (type
== ORDER_CHARGER_IFRAME_MESSAGE
.FAILURE
) {
282 isOrderSubmissionReceived
= true;
283 } else if (type
== ORDER_CHARGER_IFRAME_MESSAGE
.LINK
) {
284 chrome
.send('showLink', [e
.data
['link']]);
292 var dialogArg
= chrome
.getVariableValue('dialogArguments');
293 showPage(PAGES
.CHECK_CHARGER
);
294 $('check-charger-next-step').disabled
= true;
295 $('charger-selection-strip').style
.visibility
= 'hidden';
296 $('order-new-charger').checked
= true;
297 $('finish-offline-order').disabled
= true;
298 $('check-charger-next-step').onclick = function() {
299 afterSelectCharger(dialogArg
);
301 $('select-device-country').onchange = function() {
304 $('new-charger').onclick = function() {
305 selectCharger(CHARGER_SELECTION
.GOOD_CHARGER
);
307 $('original-charger').onclick = function() {
308 selectCharger(CHARGER_SELECTION
.ORIGINAL_CHARGER
);
310 $('back-to-check-charger').onclick = function() {
311 showPage(PAGES
.CHECK_CHARGER
);
313 $('finish-safe-charger').onclick = function() {
314 chrome
.send('confirmSafeCharger');
315 chrome
.send('dialogClose');
317 $('not-order-charger-checkbox-strip').style
.visibility
= 'hidden';
318 $('back-to-check-charger-from-charger-update').onclick = function() {
319 showPage(PAGES
.CHECK_CHARGER
);
321 $('next-to-charger-update').onclick = function() {
322 nextStepForChargerUpdate();
324 $('order-new-charger').onclick = function() {
325 afterUserConfirmationForChargerUpdate();
327 $('not-order-new-charger').onclick = function() {
328 afterUserConfirmationForChargerUpdate();
330 $('confirm-not-order-charger').onclick = function() {
331 afterUserConfirmationForChargerUpdate();
333 $('finish-not-order-new-charger').onclick = function() {
334 chrome
.send('confirmNotOrderNewCharger');
335 chrome
.send('dialogClose');
337 $('finish-online-order').onclick = function() {
338 chrome
.send('confirmChargerOrderedOnline');
339 chrome
.send('dialogClose');
341 $('offline-order-confirm').onclick = function() {
342 $('finish-offline-order').disabled
= !$('offline-order-confirm').checked
;
344 $('finish-offline-order').onclick = function() {
345 chrome
.send('confirmChargerOrderByPhone');
346 chrome
.send('dialogClose');
348 $('finish-still-bad-charger').onclick = function() {
349 chrome
.send('confirmStillUseBadCharger');
350 chrome
.send('dialogClose');
353 var links
= document
.getElementsByClassName('link');
354 for (var i
= 0; i
< links
.length
; ++i
) {
355 if (links
[i
].id
== 'privacy-link') {
356 links
[i
].onclick = function() {
357 chrome
.send('showLink', [PRIVACY_POLICY_LINK
]);
360 links
[i
].onclick = function() {
361 chrome
.send('showLink', [CHARGER_FAQ_LINK
]);
366 window
.addEventListener('message', handleWindowMessage
);
374 document
.addEventListener('DOMContentLoaded', chargerReplacement
.load
);