| // Copyright 2014 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. |
| |
| // Note: the native-side handler for this is AutomaticSettingsResetHandler. |
| |
| cr.define('options', function() { |
| /** @const */ var PageManager = cr.ui.pageManager.PageManager; |
| |
| /** |
| * AutomaticSettingsResetBanner class |
| * Provides encapsulated handling of the Reset Profile Settings banner. |
| * @constructor |
| */ |
| function AutomaticSettingsResetBanner() {} |
| |
| cr.addSingletonGetter(AutomaticSettingsResetBanner); |
| |
| AutomaticSettingsResetBanner.prototype = { |
| /** |
| * Whether or not the banner has already been dismissed. |
| * |
| * This is needed because of the surprising ordering of asynchronous |
| * JS<->native calls when the settings page is opened with specifying a |
| * given sub-page, e.g. chrome://settings/AutomaticSettingsReset. |
| * |
| * In such a case, AutomaticSettingsResetOverlay's didShowPage(), which |
| * calls our dismiss() method, would be called before the native Handlers' |
| * InitalizePage() methods have an effect in the JS, which includes calling |
| * our show() method. This would mean that the banner would be first |
| * dismissed, then shown. We want to prevent this. |
| * |
| * @private {boolean} |
| */ |
| wasDismissed_: false, |
| |
| /** |
| * Metric name to send when a show event occurs. |
| * @private {string} |
| */ |
| showMetricName_: '', |
| |
| /** |
| * Name of the native callback invoked when the banner is dismised. |
| */ |
| dismissNativeCallbackName_: '', |
| |
| /** |
| * DOM element whose visibility is set when setVisibility_ is called. |
| * @private {?HTMLElement} |
| */ |
| visibleElement_: null, |
| |
| /** |
| * Initializes the banner's event handlers. |
| * @suppress {checkTypes} |
| * TODO(vitalyp): remove the suppression. Suppression is needed because |
| * method dismiss() is attached to AutomaticSettingsResetBanner at run-time |
| * via "Forward public APIs to protected implementations" pattern (see |
| * below). Currently the compiler pass and cr.js handles only forwarding to |
| * private implementations using cr.makePublic(). |
| */ |
| initialize: function() { |
| this.showMetricName_ = 'AutomaticSettingsReset_WebUIBanner_BannerShown'; |
| |
| this.dismissNativeCallbackName_ = |
| 'onDismissedAutomaticSettingsResetBanner'; |
| |
| this.visibleElement_ = getRequiredElement( |
| 'automatic-settings-reset-banner'); |
| |
| $('automatic-settings-reset-banner-close').onclick = function(event) { |
| chrome.send('metricsHandler:recordAction', |
| ['AutomaticSettingsReset_WebUIBanner_ManuallyClosed']); |
| AutomaticSettingsResetBanner.dismiss(); |
| }; |
| $('automatic-settings-reset-learn-more').onclick = function(event) { |
| chrome.send('metricsHandler:recordAction', |
| ['AutomaticSettingsReset_WebUIBanner_LearnMoreClicked']); |
| }; |
| $('automatic-settings-reset-banner-activate-reset').onclick = |
| function(event) { |
| chrome.send('metricsHandler:recordAction', |
| ['AutomaticSettingsReset_WebUIBanner_ResetClicked']); |
| PageManager.showPageByName('resetProfileSettings'); |
| }; |
| }, |
| |
| /** |
| * Sets whether or not the reset profile settings banner shall be visible. |
| * @param {boolean} show Whether or not to show the banner. |
| * @protected |
| */ |
| setVisibility: function(show) { |
| this.visibleElement_.hidden = !show; |
| }, |
| |
| /** |
| * Called by the native code to show the banner if needed. |
| * @private |
| */ |
| show_: function() { |
| if (!this.wasDismissed_) { |
| chrome.send('metricsHandler:recordAction', [this.showMetricName_]); |
| this.setVisibility(true); |
| } |
| }, |
| |
| /** |
| * Called when the banner should be closed as a result of something taking |
| * place on the WebUI page, i.e. when its close button is pressed, or when |
| * the confirmation dialog for the profile settings reset feature is opened. |
| * @private |
| */ |
| dismiss_: function() { |
| chrome.send(assert(this.dismissNativeCallbackName_)); |
| this.wasDismissed_ = true; |
| this.setVisibility(false); |
| }, |
| }; |
| |
| // Forward public APIs to private implementations. |
| cr.makePublic(AutomaticSettingsResetBanner, [ |
| 'show', |
| 'dismiss', |
| ]); |
| |
| // Export |
| return { |
| AutomaticSettingsResetBanner: AutomaticSettingsResetBanner |
| }; |
| }); |