Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5199)

Unified Diff: chrome/browser/resources/settings/about_page/channel_switcher_dialog.js

Issue 2010653003: MD Settings: About page, implementing channel switcher dialog. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/settings/about_page/channel_switcher_dialog.js
diff --git a/chrome/browser/resources/settings/about_page/channel_switcher_dialog.js b/chrome/browser/resources/settings/about_page/channel_switcher_dialog.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b911c1904017b4b125da2510bca62bca4e46cb6
--- /dev/null
+++ b/chrome/browser/resources/settings/about_page/channel_switcher_dialog.js
@@ -0,0 +1,158 @@
+// Copyright 2016 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.
+
+/**
+ * @fileoverview 'settings-channel-switcher-dialog' is a component allowing the
+ * user to switch between release channels (dev, beta, stable). A
+ * |target-channel-changed| event is fired if the user does select a different
+ * release channel to notify parents of this dialog.
+ */
+Polymer({
+ is: 'settings-channel-switcher-dialog',
+
+ behaviors: [I18nBehavior],
+
+ properties: {
+ /** @private */
+ browserChannelEnum_: {
+ type: Object,
+ value: BrowserChannel,
+ },
+
+ /** @private {!BrowserChannel} */
+ currentChannel_: String,
+
+ /**
+ * Controls which of the two action buttons is visible.
+ * @private {?{changeChannel: boolean, changeChannelAndPowerwash: boolean}}
+ */
+ shouldShowButtons_: {
+ type: Object,
+ value: null,
+ },
+
+ /** @private {?{title: string, description: string}} */
+ warning_: {
+ type: Object,
+ value: null,
+ },
+ },
+
+ /** @private {?settings.AboutPageBrowserProxy} */
+ browserProxy_: null,
+
+ /** @override */
+ ready: function() {
+ this.browserProxy_ = settings.AboutPageBrowserProxyImpl.getInstance();
+
+ this.browserProxy_.getCurrentChannel().then(function(channel) {
+ this.currentChannel_ = channel;
+ // Pre-populate radio group with current channel.
+ this.$$('paper-radio-group').select(channel);
+ }.bind(this));
+ },
+
+ /** @override */
+ attached: function() {
+ this.$.dialog.open();
+ },
+
+ /** @private */
+ onCancelTap_: function() {
+ this.$.dialog.close();
+ },
+
+ /** @private */
+ onChangeChannelTap_: function() {
+ var selectedChannel = this.$$('paper-radio-group').selected;
+ this.browserProxy_.setChannel(selectedChannel, false);
+ this.$.dialog.close();
+ this.fire('target-channel-changed', selectedChannel);
+ },
+
+ /** @private */
+ onChangeChannelAndPowerwashTap_: function() {
+ var selectedChannel = this.$$('paper-radio-group').selected;
+ this.browserProxy_.setChannel(selectedChannel, true);
+ this.$.dialog.close();
+ this.fire('target-channel-changed', selectedChannel);
+ },
+
+ /**
+ * @param {string} titleId Localized string ID for the title.
+ * @param {string} descriptionId Localized string ID for the description.
+ * @param {string=} opt_productNameId Localized string ID for the product
+ * name.
+ * @private
+ */
+ updateWarning_: function(titleId, descriptionId, opt_productNameId) {
+ this.warning_ = {
+ title: this.i18n(titleId),
+ description: opt_productNameId ?
+ this.i18n(descriptionId, this.i18n(opt_productNameId)) :
+ this.i18n(descriptionId),
+ };
+ },
+
+ /**
+ * @param {boolean} changeChannel Whether the changeChannel button sholud be
+ * visible.
+ * @param {boolean} changeChannelAndPowerwash Whether the
+ * changeChannelAndPowerwash button should be visible.
+ * @private
+ */
+ updateButtons_: function(changeChannel, changeChannelAndPowerwash) {
+ if (changeChannel || changeChannelAndPowerwash) {
+ // Ensure that at most one button is visible at any given time.
+ assert(changeChannel != changeChannelAndPowerwash);
+ }
+
+ this.shouldShowButtons_ = {
+ changeChannel: changeChannel,
+ changeChannelAndPowerwash: changeChannelAndPowerwash,
+ };
+ },
+
+ /** @private */
+ onChannelSelectionChanged_: function() {
+ var selectedChannel = this.$$('paper-radio-group').selected;
+
+ if (selectedChannel == this.currentChannel_) {
+ this.shouldShowButtons_ = null;
+ this.warning_ = null;
+ this.$.dialog.notifyResize();
+ return;
+ }
+
+ if (settings.isTargetChannelMoreStable(
+ this.currentChannel_, selectedChannel)) {
+ if (loadTimeData.getBoolean('aboutEnterpriseManaged')) {
+ this.updateWarning_(
+ 'aboutDelayedWarningTitle',
+ 'aboutDelayedWarningMessage',
+ 'aboutProductTitle');
+ this.updateButtons_(true, false);
+ } else {
+ this.updateWarning_(
+ 'aboutPowerwashWarningTitle', 'aboutPowerwashWarningMessage');
+ this.updateButtons_(false, true);
+ }
+ } else {
+ this.updateWarning_(
+ 'aboutUnstableWarningTitle',
+ 'aboutUnstableWarningMessage',
+ 'aboutProductTitle');
+ this.updateButtons_(true, false);
+ }
+ this.$.dialog.notifyResize();
+ },
+
+ /**
+ * @return {boolean}
+ * @private
+ */
+ shouldShowWarning_: function() {
+ return this.warning_ !== null;
+ },
+});

Powered by Google App Engine
This is Rietveld 408576698