Chromium Code Reviews| Index: chrome/browser/resources/help/channel_change_page.js |
| diff --git a/chrome/browser/resources/help/channel_change_page.js b/chrome/browser/resources/help/channel_change_page.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8ccdd6f91f762c0bba01d5c3e5c6aba7796288a7 |
| --- /dev/null |
| +++ b/chrome/browser/resources/help/channel_change_page.js |
| @@ -0,0 +1,238 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +cr.define('help', function() { |
| + /** |
| + * Encapsulated handling of the channel change overlay. |
| + */ |
| + function ChannelChangePage() {} |
| + |
| + cr.addSingletonGetter(ChannelChangePage); |
| + |
| + ChannelChangePage.prototype = { |
| + __proto__: HTMLDivElement.prototype, |
| + |
| + /** |
| + * Name of the channel the device is currently on. |
| + * @private |
| + */ |
| + currentChannel_: null, |
| + |
| + /** |
| + * 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.
|
| + * @private |
| + */ |
| + targetChannel_: null, |
| + |
| + /** |
| + * 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.
|
| + * @private |
| + */ |
| + isEnterpriseManaged_: undefined, |
| + |
| + /** |
| + * List of the channels names, from the least stable to the most stable. |
| + * @private |
| + */ |
| + channelList_: ['dev-channel', 'beta-channel', 'stable-channel'], |
| + |
| + /** |
| + * List of the possible ui states. |
| + * @private |
| + */ |
| + uiClassTable_: ['selected-channel-requires-powerwash', |
| + 'selected-channel-requires-delayed-update', |
| + 'selected-channel-good', |
| + 'selected-channel-unstable'], |
| + |
| + /** |
| + * Perform initial setup. |
| + */ |
| + initialize: function() { |
| + var self = this; |
| + |
| + $('channel-change-page-cancel-button').onclick = function() { |
| + help.HelpPage.cancelOverlay(); |
| + }; |
| + |
| + var options = this.getAllChannelOptions_(); |
| + for (var i = 0; i < options.length; i++) { |
| + var option = options[i]; |
| + option.onclick = function() { |
| + self.updateUI_(this.value); |
| + }; |
| + } |
| + |
| + $('channel-change-page-powerwash-button').onclick = function() { |
| + self.setChannel_(self.getSelectedOption_(), true); |
| + help.HelpPage.cancelOverlay(); |
| + }; |
| + |
| + $('channel-change-page-change-button').onclick = function() { |
| + self.setChannel_(self.getSelectedOption_(), false); |
| + help.HelpPage.cancelOverlay(); |
| + }; |
| + }, |
| + |
| + /** |
| + * Returns the list of all radio buttons responsible for channel selection. |
| + * @return {Array.<HTMLInputElement>} Array of radio buttons |
| + * @private |
| + */ |
| + getAllChannelOptions_: function() { |
| + return $('channel-change-page').querySelectorAll('input[type="radio"]'); |
| + }, |
| + |
| + /** |
| + * Returns value of the selected option. |
| + * @return {string} Selected channel name or null, if neither |
| + * option is selected. |
| + * @private |
| + */ |
| + getSelectedOption_: function() { |
| + var options = this.getAllChannelOptions_(); |
| + for (var i = 0; i < options.length; i++) { |
| + var option = options[i]; |
| + if (option.checked) |
| + return option.value; |
| + } |
| + return null; |
| + }, |
| + |
| + /** |
| + * Updates UI according to selected channel. |
| + * @param {string} selectedChannel Selected channel |
| + * @private |
| + */ |
| + updateUI_: function(selectedChannel) { |
| + var currentStability = this.channelList_.indexOf(this.currentChannel_); |
| + var newStability = this.channelList_.indexOf(selectedChannel); |
| + |
| + var newOverlayClass = null; |
| + |
| + if (selectedChannel == this.currentChannel_) { |
| + if (this.currentChannel_ != this.targetChannel_) { |
| + // Allow user to switch back to the current channel. |
| + newOverlayClass = 'selected-channel-good'; |
| + } |
| + } else if (selectedChannel == this.targetChannel_) { |
| + // 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.
|
| + } else { |
| + // Selected channel isn't equal to the current and target channel. |
| + if (newStability > currentStability) { |
| + // More stable channel is selected. For customer devices |
| + // notify user about powerwash. |
| + if (this.isEnterpriseManaged_) |
| + newOverlayClass = 'selected-channel-requires-delayed-update'; |
| + else |
| + newOverlayClass = 'selected-channel-requires-powerwash'; |
| + } else if (selectedChannel == 'dev-channel') { |
| + // Warn user about unstable channel. |
| + newOverlayClass = 'selected-channel-unstable'; |
| + } else { |
| + // Switching to the less stable channel. |
| + newOverlayClass = 'selected-channel-good'; |
| + } |
| + } |
| + |
| + // Switch to the new UI state. |
| + for (var i = 0; i < this.uiClassTable_.length; i++) |
| + $('channel-change-page').classList.remove(this.uiClassTable_[i]); |
| + 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.
|
| + $('channel-change-page').classList.add(newOverlayClass); |
| + }, |
| + |
| + /** |
| + * Sets the device target channel. |
| + * @param {string} channel The name of the target channel |
| + * @param {boolean} isPowerwashAllowed True iff powerwash is allowed |
| + * @private |
| + */ |
| + setChannel_: function(channel, isPowerwashAllowed) { |
| + this.targetChannel_ = channel; |
| + this.updateUI_(channel); |
| + help.HelpPage.setChannel(channel, isPowerwashAllowed); |
| + }, |
| + |
| + /** |
| + * Updates page UI according to device owhership policy. |
| + * @param {boolean} isEnterpriseManaged True if the device is |
| + * enterprise managed |
| + * @private |
| + */ |
| + updateIsEnterpriseManaged_: function(isEnterpriseManaged) { |
| + this.isEnterpriseManaged_ = isEnterpriseManaged; |
| + help.HelpPage.updateChannelChangePageContainerVisibility(); |
| + }, |
| + |
| + /** |
| + * Updates name of the current channel, i.e. the name of the |
| + * channel the device is currently on. |
| + * @param {string} channel The name of the current channel |
| + * @private |
| + */ |
| + updateCurrentChannel_: function(channel) { |
| + if (this.channelList_.indexOf(channel) < 0) |
| + return; |
| + this.currentChannel_ = channel; |
| + |
| + var options = this.getAllChannelOptions_(); |
| + for (var i = 0; i < options.length; i++) { |
| + var option = options[i]; |
| + if (option.value == channel) |
| + option.checked = true; |
| + } |
| + help.HelpPage.updateChannelChangePageContainerVisibility(); |
| + }, |
| + |
| + /** |
| + * Updates name of the target channel, i.e. the name of the |
| + * channel the device is supposed to be in case of a pending |
| + * channel change. |
| + * @param {string} channel The name of the target channel |
| + * @private |
| + */ |
| + updateTargetChannel_: function(channel) { |
| + if (this.channelList_.indexOf(channel) < 0) |
| + return; |
| + this.targetChannel_ = channel; |
| + help.HelpPage.updateChannelChangePageContainerVisibility(); |
| + }, |
| + |
| + /** |
| + * @return {boolean} True if the page is ready and can be |
| + * displayed, false otherwise |
| + * @private |
| + */ |
| + isPageReady_: function() { |
| + if (typeof this.isEnterpriseManaged_ == 'undefined') |
| + return false; |
| + if (!this.currentChannel_ || !this.targetChannel_) |
| + return false; |
| + return true; |
| + }, |
| + }; |
| + |
| + ChannelChangePage.updateIsEnterpriseManaged = function(isEnterpriseManaged) { |
| + ChannelChangePage.getInstance().updateIsEnterpriseManaged_( |
| + isEnterpriseManaged); |
| + }; |
| + |
| + ChannelChangePage.updateCurrentChannel = function(channel) { |
| + ChannelChangePage.getInstance().updateCurrentChannel_(channel); |
| + }; |
| + |
| + ChannelChangePage.updateTargetChannel = function(channel) { |
| + ChannelChangePage.getInstance().updateTargetChannel_(channel); |
| + }; |
| + |
| + ChannelChangePage.isPageReady = function() { |
| + return ChannelChangePage.getInstance().isPageReady_(); |
| + }; |
| + |
| + // Export |
| + return { |
| + ChannelChangePage: ChannelChangePage |
| + }; |
| +}); |