Add new certificateProvider extension API.
[chromium-blink-merge.git] / chrome / browser / resources / chromeos / login / oobe_screen_update.js
blob1fa14c9797c99356c9785b0d447dbb915dc893ce
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.
5 /**
6  * @fileoverview Oobe update screen implementation.
7  */
9 login.createScreen('UpdateScreen', 'update', function() {
10   var USER_ACTION_CANCEL_UPDATE_SHORTCUT = 'cancel-update';
11   var CONTEXT_KEY_TIME_LEFT_SEC = 'time-left-sec';
12   var CONTEXT_KEY_SHOW_TIME_LEFT = 'show-time-left';
13   var CONTEXT_KEY_UPDATE_MESSAGE = 'update-msg';
14   var CONTEXT_KEY_SHOW_CURTAIN = 'show-curtain';
15   var CONTEXT_KEY_SHOW_PROGRESS_MESSAGE = 'show-progress-msg';
16   var CONTEXT_KEY_PROGRESS = 'progress';
17   var CONTEXT_KEY_PROGRESS_MESSAGE = 'progress-msg';
18   var CONTEXT_KEY_CANCEL_UPDATE_SHORTCUT_ENABLED = 'cancel-update-enabled';
20   return {
21     EXTERNAL_API: [],
23     /** @override */
24     decorate: function() {
25       var self = this;
27       this.context.addObserver(CONTEXT_KEY_TIME_LEFT_SEC,
28                                function(time_left_sec) {
29         self.setEstimatedTimeLeft(time_left_sec);
30       });
31       this.context.addObserver(CONTEXT_KEY_SHOW_TIME_LEFT,
32                                function(show_time_left) {
33         self.showEstimatedTimeLeft(show_time_left);
34       });
35       this.context.addObserver(CONTEXT_KEY_UPDATE_MESSAGE,
36                                function(update_msg) {
37         self.setUpdateMessage(update_msg);
38       });
39       this.context.addObserver(CONTEXT_KEY_SHOW_CURTAIN,
40                                function(show_curtain) {
41         self.showUpdateCurtain(show_curtain);
42       });
43       this.context.addObserver(CONTEXT_KEY_SHOW_PROGRESS_MESSAGE,
44                                function(show_progress_msg) {
45         self.showProgressMessage(show_progress_msg);
46       });
47       this.context.addObserver(CONTEXT_KEY_PROGRESS,
48                                function(progress) {
49         self.setUpdateProgress(progress);
50       });
51       this.context.addObserver(CONTEXT_KEY_PROGRESS_MESSAGE,
52                                function(progress_msg) {
53         self.setProgressMessage(progress_msg);
54       });
55       this.context.addObserver(CONTEXT_KEY_CANCEL_UPDATE_SHORTCUT_ENABLED,
56                                function(enabled) {
57         $('update-cancel-hint').hidden = !enabled;
58       });
59     },
61     /**
62      * Header text of the screen.
63      * @type {string}
64      */
65     get header() {
66       return loadTimeData.getString('updateScreenTitle');
67     },
69     /**
70      * Cancels the screen.
71      */
72     cancel: function() {
73       // It's safe to act on the accelerator even if it's disabled on official
74       // builds, since Chrome will just ignore this user action in that case.
75       var updateCancelHint = $('update-cancel-hint').firstElementChild;
76       updateCancelHint.textContent =
77           loadTimeData.getString('cancelledUpdateMessage');
78       this.send(login.Screen.CALLBACK_USER_ACTED,
79                 USER_ACTION_CANCEL_UPDATE_SHORTCUT);
80     },
82     /**
83      * Sets update's progress bar value.
84      * @param {number} progress Percentage of the progress bar.
85      */
86     setUpdateProgress: function(progress) {
87       $('update-progress-bar').value = progress;
88     },
90     /**
91      * Shows or hides downloading ETA message.
92      * @param {boolean} visible Are ETA message visible?
93      */
94     showEstimatedTimeLeft: function(visible) {
95       $('progress-message').hidden = visible;
96       $('estimated-time-left').hidden = !visible;
97     },
99     /**
100      * Sets estimated time left until download will complete.
101      * @param {number} seconds Time left in seconds.
102      */
103     setEstimatedTimeLeft: function(seconds) {
104       var minutes = Math.ceil(seconds / 60);
105       var message = '';
106       if (minutes > 60) {
107         message = loadTimeData.getString('downloadingTimeLeftLong');
108       } else if (minutes > 55) {
109         message = loadTimeData.getString('downloadingTimeLeftStatusOneHour');
110       } else if (minutes > 20) {
111         message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes',
112                                           Math.ceil(minutes / 5) * 5);
113       } else if (minutes > 1) {
114         message = loadTimeData.getStringF('downloadingTimeLeftStatusMinutes',
115                                           minutes);
116       } else {
117         message = loadTimeData.getString('downloadingTimeLeftSmall');
118       }
119       $('estimated-time-left').textContent =
120         loadTimeData.getStringF('downloading', message);
121     },
123     /**
124      * Shows or hides info message below progress bar.
125      * @param {boolean} visible Are message visible?
126      */
127     showProgressMessage: function(visible) {
128       $('estimated-time-left').hidden = visible;
129       $('progress-message').hidden = !visible;
130     },
132     /**
133      * Sets message below progress bar.
134      * @param {string} message Message that should be shown.
135      */
136     setProgressMessage: function(message) {
137       $('progress-message').innerText = message;
138     },
140     /**
141      * Sets update message, which is shown above the progress bar.
142      * @param {text} message Message which is shown by the label.
143      */
144     setUpdateMessage: function(message) {
145       $('update-upper-label').textContent = message;
146     },
148     /**
149      * Shows or hides update curtain.
150      * @param {boolean} visible Are curtains visible?
151      */
152     showUpdateCurtain: function(visible) {
153       $('update-screen-curtain').hidden = !visible;
154       $('update-screen-main').hidden = visible;
155     }
156   };