Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 cr.define('help', function() { | |
| 6 /** | |
| 7 * Encapsulated handling of the channel change overlay. | |
| 8 */ | |
| 9 function ChannelChangePage() {} | |
| 10 | |
| 11 cr.addSingletonGetter(ChannelChangePage); | |
| 12 | |
| 13 ChannelChangePage.prototype = { | |
| 14 __proto__: HTMLDivElement.prototype, | |
| 15 | |
| 16 /** | |
| 17 * Name of the channel the device is currently on. | |
| 18 * @private | |
| 19 */ | |
| 20 currentChannel_: null, | |
| 21 | |
| 22 /** | |
| 23 * Name of the channel the device is supposed to be. | |
|
James Hawkins
2013/06/24 18:13:12
"be on."?
ygorshenin1
2013/06/24 18:35:31
Done.
| |
| 24 * @private | |
| 25 */ | |
| 26 targetChannel_: null, | |
| 27 | |
| 28 /** | |
| 29 * True if the device is enterprise-managed, false otherwise. | |
|
James Hawkins
2013/06/24 18:13:12
Optional nit: ", false otherwise" is superfluous.
ygorshenin1
2013/06/24 18:35:31
Done.
| |
| 30 * @private | |
| 31 */ | |
| 32 isEnterpriseManaged_: undefined, | |
| 33 | |
| 34 /** | |
| 35 * List of the channels names, from the least stable to the most stable. | |
| 36 * @private | |
| 37 */ | |
| 38 channelList_: ['dev-channel', 'beta-channel', 'stable-channel'], | |
| 39 | |
| 40 /** | |
| 41 * List of the possible ui states. | |
| 42 * @private | |
| 43 */ | |
| 44 uiClassTable_: ['selected-channel-requires-powerwash', | |
| 45 'selected-channel-requires-delayed-update', | |
| 46 'selected-channel-good', | |
| 47 'selected-channel-unstable'], | |
| 48 | |
| 49 /** | |
| 50 * Perform initial setup. | |
| 51 */ | |
| 52 initialize: function() { | |
| 53 var self = this; | |
| 54 | |
| 55 $('channel-change-page-cancel-button').onclick = function() { | |
| 56 help.HelpPage.cancelOverlay(); | |
| 57 }; | |
| 58 | |
| 59 var options = this.getAllChannelOptions_(); | |
| 60 for (var i = 0; i < options.length; i++) { | |
| 61 var option = options[i]; | |
| 62 option.onclick = function() { | |
| 63 self.updateUI_(this.value); | |
| 64 }; | |
| 65 } | |
| 66 | |
| 67 $('channel-change-page-powerwash-button').onclick = function() { | |
| 68 self.setChannel_(self.getSelectedOption_(), true); | |
| 69 help.HelpPage.cancelOverlay(); | |
| 70 }; | |
| 71 | |
| 72 $('channel-change-page-change-button').onclick = function() { | |
| 73 self.setChannel_(self.getSelectedOption_(), false); | |
| 74 help.HelpPage.cancelOverlay(); | |
| 75 }; | |
| 76 }, | |
| 77 | |
| 78 /** | |
| 79 * Returns the list of all radio buttons responsible for channel selection. | |
| 80 * @return {Array.<HTMLInputElement>} Array of radio buttons | |
| 81 * @private | |
| 82 */ | |
| 83 getAllChannelOptions_: function() { | |
| 84 return $('channel-change-page').querySelectorAll('input[type="radio"]'); | |
| 85 }, | |
| 86 | |
| 87 /** | |
| 88 * Returns value of the selected option. | |
| 89 * @return {string} Selected channel name or null, if neither | |
| 90 * option is selected. | |
| 91 * @private | |
| 92 */ | |
| 93 getSelectedOption_: function() { | |
| 94 var options = this.getAllChannelOptions_(); | |
| 95 for (var i = 0; i < options.length; i++) { | |
| 96 var option = options[i]; | |
| 97 if (option.checked) | |
| 98 return option.value; | |
| 99 } | |
| 100 return null; | |
| 101 }, | |
| 102 | |
| 103 /** | |
| 104 * Updates UI according to selected channel. | |
| 105 * @param {string} selectedChannel Selected channel | |
| 106 * @private | |
| 107 */ | |
| 108 updateUI_: function(selectedChannel) { | |
| 109 var currentStability = this.channelList_.indexOf(this.currentChannel_); | |
| 110 var newStability = this.channelList_.indexOf(selectedChannel); | |
| 111 | |
| 112 var newOverlayClass = null; | |
| 113 | |
| 114 if (selectedChannel == this.currentChannel_) { | |
| 115 if (this.currentChannel_ != this.targetChannel_) { | |
| 116 // Allow user to switch back to the current channel. | |
| 117 newOverlayClass = 'selected-channel-good'; | |
| 118 } | |
| 119 } else if (selectedChannel == this.targetChannel_) { | |
| 120 // Do nothing in this case. | |
|
James Hawkins
2013/06/24 18:13:12
Why have the case listed if nothing is to be done?
ygorshenin1
2013/06/24 18:35:31
Done.
| |
| 121 } else { | |
| 122 // Selected channel isn't equal to the current and target channel. | |
| 123 if (newStability > currentStability) { | |
| 124 // More stable channel is selected. For customer devices | |
| 125 // notify user about powerwash. | |
| 126 if (this.isEnterpriseManaged_) | |
| 127 newOverlayClass = 'selected-channel-requires-delayed-update'; | |
| 128 else | |
| 129 newOverlayClass = 'selected-channel-requires-powerwash'; | |
| 130 } else if (selectedChannel == 'dev-channel') { | |
| 131 // Warn user about unstable channel. | |
| 132 newOverlayClass = 'selected-channel-unstable'; | |
| 133 } else { | |
| 134 // Switching to the less stable channel. | |
| 135 newOverlayClass = 'selected-channel-good'; | |
| 136 } | |
| 137 } | |
| 138 | |
| 139 // Switch to the new UI state. | |
| 140 for (var i = 0; i < this.uiClassTable_.length; i++) | |
| 141 $('channel-change-page').classList.remove(this.uiClassTable_[i]); | |
| 142 if (newOverlayClass) | |
|
James Hawkins
2013/06/24 18:13:12
Optional nit: Blank lines between blocks to increa
ygorshenin1
2013/06/24 18:35:31
Done.
| |
| 143 $('channel-change-page').classList.add(newOverlayClass); | |
| 144 }, | |
| 145 | |
| 146 /** | |
| 147 * Sets the device target channel. | |
| 148 * @param {string} channel The name of the target channel | |
| 149 * @param {boolean} isPowerwashAllowed True iff powerwash is allowed | |
| 150 * @private | |
| 151 */ | |
| 152 setChannel_: function(channel, isPowerwashAllowed) { | |
| 153 this.targetChannel_ = channel; | |
| 154 this.updateUI_(channel); | |
| 155 help.HelpPage.setChannel(channel, isPowerwashAllowed); | |
| 156 }, | |
| 157 | |
| 158 /** | |
| 159 * Updates page UI according to device owhership policy. | |
| 160 * @param {boolean} isEnterpriseManaged True if the device is | |
| 161 * enterprise managed | |
| 162 * @private | |
| 163 */ | |
| 164 updateIsEnterpriseManaged_: function(isEnterpriseManaged) { | |
| 165 this.isEnterpriseManaged_ = isEnterpriseManaged; | |
| 166 help.HelpPage.updateChannelChangePageContainerVisibility(); | |
| 167 }, | |
| 168 | |
| 169 /** | |
| 170 * Updates name of the current channel, i.e. the name of the | |
| 171 * channel the device is currently on. | |
| 172 * @param {string} channel The name of the current channel | |
| 173 * @private | |
| 174 */ | |
| 175 updateCurrentChannel_: function(channel) { | |
| 176 if (this.channelList_.indexOf(channel) < 0) | |
| 177 return; | |
| 178 this.currentChannel_ = channel; | |
| 179 | |
| 180 var options = this.getAllChannelOptions_(); | |
| 181 for (var i = 0; i < options.length; i++) { | |
| 182 var option = options[i]; | |
| 183 if (option.value == channel) | |
| 184 option.checked = true; | |
| 185 } | |
| 186 help.HelpPage.updateChannelChangePageContainerVisibility(); | |
| 187 }, | |
| 188 | |
| 189 /** | |
| 190 * Updates name of the target channel, i.e. the name of the | |
| 191 * channel the device is supposed to be in case of a pending | |
| 192 * channel change. | |
| 193 * @param {string} channel The name of the target channel | |
| 194 * @private | |
| 195 */ | |
| 196 updateTargetChannel_: function(channel) { | |
| 197 if (this.channelList_.indexOf(channel) < 0) | |
| 198 return; | |
| 199 this.targetChannel_ = channel; | |
| 200 help.HelpPage.updateChannelChangePageContainerVisibility(); | |
| 201 }, | |
| 202 | |
| 203 /** | |
| 204 * @return {boolean} True if the page is ready and can be | |
| 205 * displayed, false otherwise | |
| 206 * @private | |
| 207 */ | |
| 208 isPageReady_: function() { | |
| 209 if (typeof this.isEnterpriseManaged_ == 'undefined') | |
| 210 return false; | |
| 211 if (!this.currentChannel_ || !this.targetChannel_) | |
| 212 return false; | |
| 213 return true; | |
| 214 }, | |
| 215 }; | |
| 216 | |
| 217 ChannelChangePage.updateIsEnterpriseManaged = function(isEnterpriseManaged) { | |
| 218 ChannelChangePage.getInstance().updateIsEnterpriseManaged_( | |
| 219 isEnterpriseManaged); | |
| 220 }; | |
| 221 | |
| 222 ChannelChangePage.updateCurrentChannel = function(channel) { | |
| 223 ChannelChangePage.getInstance().updateCurrentChannel_(channel); | |
| 224 }; | |
| 225 | |
| 226 ChannelChangePage.updateTargetChannel = function(channel) { | |
| 227 ChannelChangePage.getInstance().updateTargetChannel_(channel); | |
| 228 }; | |
| 229 | |
| 230 ChannelChangePage.isPageReady = function() { | |
| 231 return ChannelChangePage.getInstance().isPageReady_(); | |
| 232 }; | |
| 233 | |
| 234 // Export | |
| 235 return { | |
| 236 ChannelChangePage: ChannelChangePage | |
| 237 }; | |
| 238 }); | |
| OLD | NEW |