| Index: chrome/browser/resources/help/help.js
|
| diff --git a/chrome/browser/resources/help/help.js b/chrome/browser/resources/help/help.js
|
| index 2b3de172eb13cebf3af04eb36dbd327b42f39a13..7d2c52c9736f2e6e8147bb897cd88e33e38dbf19 100644
|
| --- a/chrome/browser/resources/help/help.js
|
| +++ b/chrome/browser/resources/help/help.js
|
| @@ -2,568 +2,51 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +<include src="../uber/uber_page_manager_observer.js">
|
| <include src="../uber/uber_utils.js">
|
|
|
| -cr.define('help', function() {
|
| - /**
|
| - * Encapsulated handling of the help page.
|
| - */
|
| - function HelpPage() {}
|
| +var ChannelChangePage = help.ChannelChangePage;
|
| +var HelpPage = help.HelpPage;
|
| +var PageManager = cr.ui.pageManager.PageManager;
|
|
|
| - cr.addSingletonGetter(HelpPage);
|
| -
|
| - HelpPage.prototype = {
|
| - __proto__: help.HelpBasePage.prototype,
|
| -
|
| - /**
|
| - * True if after update powerwash button should be displayed.
|
| - * @private
|
| - */
|
| - powerwashAfterUpdate_: false,
|
| -
|
| - /**
|
| - * List of the channels names.
|
| - * @private
|
| - */
|
| - channelList_: ['dev-channel', 'beta-channel', 'stable-channel'],
|
| -
|
| - /**
|
| - * Bubble for error messages and notifications.
|
| - * @private
|
| - */
|
| - bubble_: null,
|
| -
|
| - /**
|
| - * Name of the channel the device is currently on.
|
| - * @private
|
| - */
|
| - currentChannel_: null,
|
| -
|
| - /**
|
| - * Name of the channel the device is supposed to be on.
|
| - * @private
|
| - */
|
| - targetChannel_: null,
|
| -
|
| - /**
|
| - * Perform initial setup.
|
| - */
|
| - initialize: function() {
|
| - help.HelpBasePage.prototype.initialize.call(this, 'help-page');
|
| -
|
| - var self = this;
|
| -
|
| - uber.onContentFrameLoaded();
|
| -
|
| - // Set the title.
|
| - uber.setTitle(loadTimeData.getString('aboutTitle'));
|
| -
|
| - $('product-license').innerHTML = loadTimeData.getString('productLicense');
|
| - if (cr.isChromeOS) {
|
| - $('product-os-license').innerHTML =
|
| - loadTimeData.getString('productOsLicense');
|
| - }
|
| -
|
| - var productTOS = $('product-tos');
|
| - if (productTOS)
|
| - productTOS.innerHTML = loadTimeData.getString('productTOS');
|
| -
|
| - $('get-help').onclick = function() {
|
| - chrome.send('openHelpPage');
|
| - };
|
| -<if expr="_google_chrome">
|
| - $('report-issue').onclick = function() {
|
| - chrome.send('openFeedbackDialog');
|
| - };
|
| -</if>
|
| -
|
| - this.maybeSetOnClick_($('more-info-expander'),
|
| - this.toggleMoreInfo_.bind(this));
|
| -
|
| - this.maybeSetOnClick_($('promote'), function() {
|
| - chrome.send('promoteUpdater');
|
| - });
|
| - this.maybeSetOnClick_($('relaunch'), function() {
|
| - chrome.send('relaunchNow');
|
| - });
|
| - if (cr.isChromeOS) {
|
| - this.maybeSetOnClick_($('relaunch-and-powerwash'), function() {
|
| - chrome.send('relaunchAndPowerwash');
|
| - });
|
| -
|
| - this.channelTable_ = {
|
| - 'stable-channel': {
|
| - 'name': loadTimeData.getString('stable'),
|
| - 'label': loadTimeData.getString('currentChannelStable'),
|
| - },
|
| - 'beta-channel': {
|
| - 'name': loadTimeData.getString('beta'),
|
| - 'label': loadTimeData.getString('currentChannelBeta')
|
| - },
|
| - 'dev-channel': {
|
| - 'name': loadTimeData.getString('dev'),
|
| - 'label': loadTimeData.getString('currentChannelDev')
|
| - }
|
| - };
|
| - }
|
| -
|
| - var channelChanger = $('channel-changer');
|
| - if (channelChanger) {
|
| - channelChanger.onchange = function(event) {
|
| - self.setChannel_(event.target.value, false);
|
| - };
|
| - }
|
| -
|
| - if (cr.isChromeOS) {
|
| - help.ChannelChangePage.getInstance().initialize();
|
| - this.registerOverlay(help.ChannelChangePage.getInstance());
|
| -
|
| - cr.ui.overlay.setupOverlay($('overlay-container'));
|
| - cr.ui.overlay.globalInitialization();
|
| - $('overlay-container').addEventListener('cancelOverlay', function() {
|
| - self.closeOverlay();
|
| - });
|
| - $('change-channel').onclick = function() {
|
| - self.showOverlay('channel-change-page');
|
| - };
|
| -
|
| - var channelChangeDisallowedError = document.createElement('div');
|
| - channelChangeDisallowedError.className = 'channel-change-error-bubble';
|
| -
|
| - var channelChangeDisallowedIcon = document.createElement('div');
|
| - channelChangeDisallowedIcon.classList.add('help-page-icon-large');
|
| - channelChangeDisallowedIcon.classList.add('channel-change-error-icon');
|
| - channelChangeDisallowedError.appendChild(channelChangeDisallowedIcon);
|
| -
|
| - var channelChangeDisallowedText = document.createElement('div');
|
| - channelChangeDisallowedText.className = 'channel-change-error-text';
|
| - channelChangeDisallowedText.textContent =
|
| - loadTimeData.getString('channelChangeDisallowedMessage');
|
| - channelChangeDisallowedError.appendChild(channelChangeDisallowedText);
|
| -
|
| - $('channel-change-disallowed-icon').onclick = function() {
|
| - self.showBubble_(channelChangeDisallowedError,
|
| - $('help-container'),
|
| - $('channel-change-disallowed-icon'),
|
| - cr.ui.ArrowLocation.TOP_END);
|
| - };
|
| - }
|
| -
|
| - cr.ui.FocusManager.disableMouseFocusOnButtons();
|
| - help.HelpFocusManager.getInstance().initialize();
|
| -
|
| - // Attempt to update.
|
| - chrome.send('onPageLoaded');
|
| - },
|
| -
|
| - /**
|
| - * Shows the bubble.
|
| - * @param {HTMLDivElement} content The content of the bubble.
|
| - * @param {HTMLElement} target The element at which the bubble points.
|
| - * @param {HTMLElement} domSibling The element after which the bubble is
|
| - * added to the DOM.
|
| - * @param {cr.ui.ArrowLocation} location The arrow location.
|
| - * @private
|
| - */
|
| - showBubble_: function(content, domSibling, target, location) {
|
| - if (!cr.isChromeOS)
|
| - return;
|
| - this.hideBubble_();
|
| - var bubble = new cr.ui.AutoCloseBubble;
|
| - bubble.anchorNode = target;
|
| - bubble.domSibling = domSibling;
|
| - bubble.arrowLocation = location;
|
| - bubble.content = content;
|
| - bubble.show();
|
| - this.bubble_ = bubble;
|
| - },
|
| -
|
| - /**
|
| - * Hides the bubble.
|
| - * @private
|
| - */
|
| - hideBubble_: function() {
|
| - if (!cr.isChromeOS)
|
| - return;
|
| - if (this.bubble_)
|
| - this.bubble_.hide();
|
| - },
|
| -
|
| - /**
|
| - * Toggles the visible state of the 'More Info' section.
|
| - * @private
|
| - */
|
| - toggleMoreInfo_: function() {
|
| - var moreInfo = $('more-info-container');
|
| - var visible = moreInfo.className == 'visible';
|
| - moreInfo.className = visible ? '' : 'visible';
|
| - moreInfo.style.height = visible ? '' : moreInfo.scrollHeight + 'px';
|
| - moreInfo.addEventListener('webkitTransitionEnd', function(event) {
|
| - $('more-info-expander').textContent = visible ?
|
| - loadTimeData.getString('showMoreInfo') :
|
| - loadTimeData.getString('hideMoreInfo');
|
| - });
|
| - },
|
| -
|
| - /**
|
| - * Assigns |method| to the onclick property of |el| if |el| exists.
|
| - * @private
|
| - */
|
| - maybeSetOnClick_: function(el, method) {
|
| - if (el)
|
| - el.onclick = method;
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setUpdateImage_: function(state) {
|
| - $('update-status-icon').className = 'help-page-icon ' + state;
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean} True, if new channel switcher UI is used,
|
| - * false otherwise.
|
| - * @private
|
| - */
|
| - isNewChannelSwitcherUI_: function() {
|
| - return !loadTimeData.valueExists('disableNewChannelSwitcherUI');
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean} True if target and current channels are not
|
| - * null and not equals
|
| - * @private
|
| - */
|
| - channelsDiffer_: function() {
|
| - var current = this.currentChannel_;
|
| - var target = this.targetChannel_;
|
| - return (current != null && target != null && current != target);
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setUpdateStatus_: function(status, message) {
|
| - if (cr.isMac &&
|
| - $('update-status-message') &&
|
| - $('update-status-message').hidden) {
|
| - // Chrome has reached the end of the line on this system. The
|
| - // update-obsolete-system message is displayed. No other auto-update
|
| - // status should be displayed.
|
| - return;
|
| - }
|
| -
|
| - var channel = this.targetChannel_;
|
| - if (status == 'checking') {
|
| - this.setUpdateImage_('working');
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getString('updateCheckStarted');
|
| - } else if (status == 'updating') {
|
| - this.setUpdateImage_('working');
|
| - if (this.channelsDiffer_()) {
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getStringF('updatingChannelSwitch',
|
| - this.channelTable_[channel].label);
|
| - } else {
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getStringF('updating');
|
| - }
|
| - } else if (status == 'nearly_updated') {
|
| - this.setUpdateImage_('up-to-date');
|
| - if (this.channelsDiffer_()) {
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getString('successfulChannelSwitch');
|
| - } else {
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getString('updateAlmostDone');
|
| - }
|
| - } else if (status == 'updated') {
|
| - this.setUpdateImage_('up-to-date');
|
| - $('update-status-message').innerHTML =
|
| - loadTimeData.getString('upToDate');
|
| - } else if (status == 'failed') {
|
| - this.setUpdateImage_('failed');
|
| - $('update-status-message').innerHTML = message;
|
| - }
|
| -
|
| - // Following invariant must be established at the end of this function:
|
| - // { ~$('relaunch_and_powerwash').hidden -> $('relaunch').hidden }
|
| - var relaunchAndPowerwashHidden = true;
|
| - if ($('relaunch-and-powerwash')) {
|
| - // It's allowed to do powerwash only for customer devices,
|
| - // when user explicitly decides to update to a more stable
|
| - // channel.
|
| - relaunchAndPowerwashHidden =
|
| - !this.powerwashAfterUpdate_ || status != 'nearly_updated';
|
| - $('relaunch-and-powerwash').hidden = relaunchAndPowerwashHidden;
|
| - }
|
| -
|
| - var container = $('update-status-container');
|
| - if (container) {
|
| - container.hidden = status == 'disabled';
|
| - $('relaunch').hidden =
|
| - (status != 'nearly_updated') || !relaunchAndPowerwashHidden;
|
| -
|
| - if (!cr.isMac)
|
| - $('update-percentage').hidden = status != 'updating';
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setProgress_: function(progress) {
|
| - $('update-percentage').innerHTML = progress + '%';
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setAllowedConnectionTypesMsg_: function(message) {
|
| - $('allowed-connection-types-message').innerText = message;
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - showAllowedConnectionTypesMsg_: function(visible) {
|
| - $('allowed-connection-types-message').hidden = !visible;
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setPromotionState_: function(state) {
|
| - if (state == 'hidden') {
|
| - $('promote').hidden = true;
|
| - } else if (state == 'enabled') {
|
| - $('promote').disabled = false;
|
| - $('promote').hidden = false;
|
| - } else if (state == 'disabled') {
|
| - $('promote').disabled = true;
|
| - $('promote').hidden = false;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setObsoleteSystem_: function(obsolete) {
|
| - if (cr.isMac && $('update-obsolete-system-container')) {
|
| - $('update-obsolete-system-container').hidden = !obsolete;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setObsoleteSystemEndOfTheLine_: function(endOfTheLine) {
|
| - if (cr.isMac &&
|
| - $('update-obsolete-system-container') &&
|
| - !$('update-obsolete-system-container').hidden &&
|
| - $('update-status-message')) {
|
| - $('update-status-message').hidden = endOfTheLine;
|
| - if (endOfTheLine) {
|
| - this.setUpdateImage_('failed');
|
| - }
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setOSVersion_: function(version) {
|
| - if (!cr.isChromeOS)
|
| - console.error('OS version unsupported on non-CrOS');
|
| -
|
| - $('os-version').parentNode.hidden = (version == '');
|
| - $('os-version').textContent = version;
|
| - },
|
| -
|
| - /**
|
| - * @private
|
| - */
|
| - setOSFirmware_: function(firmware) {
|
| - if (!cr.isChromeOS)
|
| - console.error('OS firmware unsupported on non-CrOS');
|
| -
|
| - $('firmware').parentNode.hidden = (firmware == '');
|
| - $('firmware').textContent = firmware;
|
| - },
|
| -
|
| - /**
|
| - * 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;
|
| - $('current-channel').textContent = loadTimeData.getStringF(
|
| - 'currentChannel', this.channelTable_[channel].label);
|
| - this.currentChannel_ = channel;
|
| - help.ChannelChangePage.updateCurrentChannel(channel);
|
| - },
|
| -
|
| - /**
|
| - * |enabled| is true if the release channel can be enabled.
|
| - * @private
|
| - */
|
| - updateEnableReleaseChannel_: function(enabled) {
|
| - this.updateChannelChangerContainerVisibility_(enabled);
|
| - $('change-channel').disabled = !enabled;
|
| - $('channel-change-disallowed-icon').hidden = enabled;
|
| - },
|
| -
|
| - /**
|
| - * 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.powerwashAfterUpdate_ = isPowerwashAllowed;
|
| - this.targetChannel_ = channel;
|
| - chrome.send('setChannel', [channel, isPowerwashAllowed]);
|
| - $('channel-change-confirmation').hidden = false;
|
| - $('channel-change-confirmation').textContent = loadTimeData.getStringF(
|
| - 'channel-changed', this.channelTable_[channel].name);
|
| - },
|
| -
|
| - /**
|
| - * Sets the value of the "Build Date" field of the "More Info" section.
|
| - * @param {string} buildDate The date of the build.
|
| - * @private
|
| - */
|
| - setBuildDate_: function(buildDate) {
|
| - $('build-date-container').classList.remove('empty');
|
| - $('build-date').textContent = buildDate;
|
| - },
|
| -
|
| - /**
|
| - * Updates channel-change-page-container visibility according to
|
| - * internal state.
|
| - * @private
|
| - */
|
| - updateChannelChangePageContainerVisibility_: function() {
|
| - if (!this.isNewChannelSwitcherUI_()) {
|
| - $('channel-change-page-container').hidden = true;
|
| - return;
|
| - }
|
| - $('channel-change-page-container').hidden =
|
| - !help.ChannelChangePage.isPageReady();
|
| - },
|
| -
|
| - /**
|
| - * Updates channel-changer dropdown visibility if |visible| is
|
| - * true and new channel switcher UI is disallowed.
|
| - * @param {boolean} visible True if channel-changer should be
|
| - * displayed, false otherwise.
|
| - * @private
|
| - */
|
| - updateChannelChangerContainerVisibility_: function(visible) {
|
| - if (this.isNewChannelSwitcherUI_()) {
|
| - $('channel-changer').hidden = true;
|
| - return;
|
| - }
|
| - $('channel-changer').hidden = !visible;
|
| - },
|
| - };
|
| -
|
| - HelpPage.setUpdateStatus = function(status, message) {
|
| - HelpPage.getInstance().setUpdateStatus_(status, message);
|
| - };
|
| -
|
| - HelpPage.setProgress = function(progress) {
|
| - HelpPage.getInstance().setProgress_(progress);
|
| - };
|
| -
|
| - HelpPage.setAndShowAllowedConnectionTypesMsg = function(message) {
|
| - HelpPage.getInstance().setAllowedConnectionTypesMsg_(message);
|
| - HelpPage.getInstance().showAllowedConnectionTypesMsg_(true);
|
| - };
|
| -
|
| - HelpPage.showAllowedConnectionTypesMsg = function(visible) {
|
| - HelpPage.getInstance().showAllowedConnectionTypesMsg_(visible);
|
| - };
|
| -
|
| - HelpPage.setPromotionState = function(state) {
|
| - HelpPage.getInstance().setPromotionState_(state);
|
| - };
|
| -
|
| - HelpPage.setObsoleteSystem = function(obsolete) {
|
| - HelpPage.getInstance().setObsoleteSystem_(obsolete);
|
| - };
|
| -
|
| - HelpPage.setObsoleteSystemEndOfTheLine = function(endOfTheLine) {
|
| - HelpPage.getInstance().setObsoleteSystemEndOfTheLine_(endOfTheLine);
|
| - };
|
| -
|
| - HelpPage.setOSVersion = function(version) {
|
| - HelpPage.getInstance().setOSVersion_(version);
|
| - };
|
| -
|
| - HelpPage.setOSFirmware = function(firmware) {
|
| - HelpPage.getInstance().setOSFirmware_(firmware);
|
| - };
|
| -
|
| - HelpPage.showOverlay = function(name) {
|
| - HelpPage.getInstance().showOverlay(name);
|
| - };
|
| -
|
| - HelpPage.cancelOverlay = function() {
|
| - HelpPage.getInstance().closeOverlay();
|
| - };
|
| -
|
| - HelpPage.getTopmostVisiblePage = function() {
|
| - return HelpPage.getInstance().getTopmostVisiblePage();
|
| - };
|
| -
|
| - HelpPage.updateIsEnterpriseManaged = function(isEnterpriseManaged) {
|
| - if (!cr.isChromeOS)
|
| - return;
|
| - help.ChannelChangePage.updateIsEnterpriseManaged(isEnterpriseManaged);
|
| - };
|
| -
|
| - HelpPage.updateCurrentChannel = function(channel) {
|
| - if (!cr.isChromeOS)
|
| - return;
|
| - HelpPage.getInstance().updateCurrentChannel_(channel);
|
| - };
|
| -
|
| - HelpPage.updateTargetChannel = function(channel) {
|
| - if (!cr.isChromeOS)
|
| - return;
|
| - help.ChannelChangePage.updateTargetChannel(channel);
|
| - };
|
| +/**
|
| + * DOMContentLoaded handler, sets up the page.
|
| + */
|
| +function load() {
|
| + PageManager.register(HelpPage.getInstance());
|
|
|
| - HelpPage.updateEnableReleaseChannel = function(enabled) {
|
| - HelpPage.getInstance().updateEnableReleaseChannel_(enabled);
|
| - };
|
| + if (cr.isChromeOS) {
|
| + PageManager.registerOverlay(ChannelChangePage.getInstance(),
|
| + HelpPage.getInstance());
|
| + }
|
| + cr.ui.FocusManager.disableMouseFocusOnButtons();
|
| + PageManager.addObserver(new uber.PageManagerObserver());
|
| + PageManager.initialize(HelpPage.getInstance());
|
|
|
| - HelpPage.setChannel = function(channel, isPowerwashAllowed) {
|
| - HelpPage.getInstance().setChannel_(channel, isPowerwashAllowed);
|
| - };
|
| + var pageName = PageManager.getPageNameFromPath();
|
| + // Still update history so that chrome://help/nonexistant redirects
|
| + // appropriately to chrome://help/. If the URL matches, updateHistory
|
| + // will avoid adding the extra state.
|
| + var updateHistory = true;
|
| + PageManager.showPageByName(pageName, updateHistory, {replaceState: true});
|
|
|
| - HelpPage.setBuildDate = function(buildDate) {
|
| - HelpPage.getInstance().setBuildDate_(buildDate);
|
| - };
|
| + uber.onContentFrameLoaded();
|
| +}
|
|
|
| - HelpPage.updateChannelChangePageContainerVisibility = function() {
|
| - HelpPage.getInstance().updateChannelChangePageContainerVisibility_();
|
| - };
|
| +document.addEventListener('DOMContentLoaded', load);
|
|
|
| - // Export
|
| - return {
|
| - HelpPage: HelpPage
|
| - };
|
| -});
|
| +/**
|
| + * Listener for the |beforeunload| event.
|
| + */
|
| +window.onbeforeunload = function() {
|
| + PageManager.willClose();
|
| +};
|
|
|
| /**
|
| - * onload listener to initialize the HelpPage.
|
| + * Listener for the |popstate| event.
|
| + * @param {Event} e The |popstate| event.
|
| */
|
| -window.onload = function() {
|
| - help.HelpPage.getInstance().initialize();
|
| +window.onpopstate = function(e) {
|
| + var pageName = PageManager.getPageNameFromPath();
|
| + PageManager.setState(pageName, e.state);
|
| };
|
|
|