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..ccbe8fe0b5a1fadad50742e7550357e5c271c302 |
| --- /dev/null |
| +++ b/chrome/browser/resources/help/channel_change_page.js |
| @@ -0,0 +1,244 @@ |
| +// 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() { |
| + function ChannelChangePage() {} |
| + |
| + cr.addSingletonGetter(ChannelChangePage); |
| + |
| + ChannelChangePage.prototype = { |
|
Nikita (slow)
2013/06/21 12:58:04
nit: Short comment describing usage is missing.
ygorshenin1
2013/06/21 17:24:58
Done.
|
| + __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. |
| + * @private |
| + */ |
| + targetChannel_: null, |
| + |
| + /** |
| + * True if the device is enterprise-managed, false otherwise. |
| + * @private |
| + */ |
| + isEnterpriseManaged_: undefined, |
| + |
| + /** |
| + * List of the channels names, from the least stable to the most stable. |
| + * @private |
| + */ |
| + stabilityTable_: ['dev-channel', 'beta-channel', 'stable-channel'], |
|
Nikita (slow)
2013/06/21 12:58:04
nit: channelsList_ ?
ygorshenin1
2013/06/21 17:24:58
Done.
|
| + |
| + /** |
| + * 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); |
| + }; |
| + } |
| + |
| + var productName = loadTimeData.getStringF('aboutProductTitle'); |
|
Nikita (slow)
2013/06/21 12:58:04
You could do 64..70 in C++ and set these strings v
ygorshenin1
2013/06/21 17:24:58
Done.
|
| + $('channel-change-page-delayed-change-message').innerText = |
| + loadTimeData.getStringF('channelChangePageDelayedChangeMessage', |
| + productName); |
| + $('channel-change-page-unstable-message').innerText = |
| + loadTimeData.getStringF('channelChangePageUnstableMessage', |
| + productName); |
| + |
| + $('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.stabilityTable_.indexOf(this.currentChannel_); |
| + var newStability = this.stabilityTable_.indexOf(selectedChannel); |
| + |
| + var newClass = null; |
|
Nikita (slow)
2013/06/21 12:58:04
nit: rename to newOverlayClass
ygorshenin1
2013/06/21 17:24:58
Done.
|
| + |
| + if (selectedChannel == this.currentChannel_) { |
| + if (this.currentChannel_ != this.targetChannel_) { |
| + // Allow user to switch back to the current channel. |
| + newClass = 'selected-channel-good'; |
| + } |
| + } else if (selectedChannel == this.targetChannel_) { |
| + // Do nothing in this case. |
| + } 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_) |
| + newClass = 'selected-channel-requires-delayed-update'; |
| + else |
| + newClass = 'selected-channel-requires-powerwash'; |
| + } else if (selectedChannel == 'dev-channel') { |
| + // Warn user about unstable channel. |
| + newClass = 'selected-channel-unstable'; |
| + } else { |
| + // Switching to the less stable channel. |
| + newClass = 'selected-channel-good'; |
|
Nikita (slow)
2013/06/21 12:58:04
Should we also notify user when switching from sta
ygorshenin1
2013/06/21 17:24:58
As I understood from mocks, no.
On 2013/06/21 12:
|
| + } |
| + } |
| + |
| + for (var i = 0; i < this.uiClassTable_.length; i++) { |
|
Nikita (slow)
2013/06/21 12:58:04
nit: Add comment.
ygorshenin1
2013/06/21 17:24:58
Done.
|
| + if (this.uiClassTable_[i] != newClass) |
| + $('channel-change-page').classList.remove(this.uiClassTable_[i]); |
| + } |
| + if (newClass) |
| + $('channel-change-page').classList.add(newClass); |
| + }, |
| + |
| + /** |
| + * 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.stabilityTable_.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.stabilityTable_.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(channel) { |
| + ChannelChangePage.getInstance().isPageReady_(); |
| + }; |
| + |
| + // Export |
| + return { |
| + ChannelChangePage: ChannelChangePage |
| + }; |
| +}); |