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

Unified Diff: chrome/browser/resources/options/settings_banner.js

Issue 151003004: Add an automatic settings reset banner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Gab's feedback. Created 6 years, 10 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/options/settings_banner.js
diff --git a/chrome/browser/resources/options/settings_banner.js b/chrome/browser/resources/options/settings_banner.js
new file mode 100644
index 0000000000000000000000000000000000000000..5660a52e4160370830eac3bc289a06c3728c50b2
--- /dev/null
+++ b/chrome/browser/resources/options/settings_banner.js
@@ -0,0 +1,86 @@
+// 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.
+
+cr.define('options', function() {
+
+ /**
+ * Base class for banners that appear at the top of the settings page.
+ */
+ function SettingsBannerBase() {}
+
+ cr.addSingletonGetter(SettingsBannerBase);
+
+ SettingsBannerBase.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.
+ *
+ * @type {boolean}
+ * @private
+ */
+ hadBeenDismissed_: false,
+
+ /**
+ * Metric name to send when a show event occurs.
+ */
+ showMetricName_: '',
+
+ /**
+ * Name of the native callback invoked when the banner is dismised.
+ */
+ dismissNativeCallbackName_: '',
+
+ /**
+ * DOM element whose visibility is set when setVisibility_ is called.
+ */
+ setVisibilibyDomElementSelector_: '',
+
+ /**
+ * Called by the native code to show the banner if needed.
+ * @private
+ */
+ show_: function() {
+ if (!this.hadBeenDismissed_) {
+ 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(this.dismissNativeCallbackName_);
+ this.hadBeenDismissed_ = true;
+ this.setVisibility_(false);
+ },
+
+ /**
+ * Sets whether or not the reset profile settings banner shall be visible.
+ * @param {boolean} show Whether or not to show the banner.
+ * @private
+ */
+ setVisibility_: function(show) {
+ $(this.setVisibilibyDomElementSelector_).hidden = !show;
+ },
+
+ };
+
+ // Export
+ return {
+ SettingsBannerBase: SettingsBannerBase
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698