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

Unified Diff: remoting/webapp/crd/js/butter_bar.js

Issue 2887573002: Add deprecation messages. (Closed)
Patch Set: Restore clock in tearDown. Created 3 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
« no previous file with comments | « remoting/webapp/crd/html/butter_bar.css ('k') | remoting/webapp/crd/js/butter_bar_unittest.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/crd/js/butter_bar.js
diff --git a/remoting/webapp/crd/js/butter_bar.js b/remoting/webapp/crd/js/butter_bar.js
index b63db1f4611749cb52601127c5c67da43ad5e57e..600626d53d504b8d726850e1cab0604a86c77d17 100644
--- a/remoting/webapp/crd/js/butter_bar.js
+++ b/remoting/webapp/crd/js/butter_bar.js
@@ -4,8 +4,8 @@
/**
* @fileoverview
- * ButterBar class that is used to show the butter bar with various
- * notifications.
+ * ButterBar class that is used to show a butter bar with deprecation messages.
+ * Each message is displayed for at most one week.
*/
'use strict';
@@ -17,37 +17,58 @@ var remoting = remoting || {};
* @constructor
*/
remoting.ButterBar = function() {
- this.storageKey_ = '';
+ /** @private @const */
+ this.messages_ = [
+ {id: /*i18n-content*/'WEBSITE_INVITE_BETA', dismissable: true},
+ {id: /*i18n-content*/'WEBSITE_INVITE_STABLE', dismissable: true},
+ {id: /*i18n-content*/'WEBSITE_INVITE_DEPRECATION_1', dismissable: true},
+ {id: /*i18n-content*/'WEBSITE_INVITE_DEPRECATION_2', dismissable: false},
+ ];
+ // TODO(jamiewalch): Read the message index using metricsPrivate.
+ this.currentMessage_ = -1;
+ /** @private {!Element} */
+ this.root_ = document.getElementById(remoting.ButterBar.kId_);
+ /** @private {!Element} */
+ this.message_ = document.getElementById(remoting.ButterBar.kMessageId_);
+ /** @private {!Element} */
+ this.dismiss_ = document.getElementById(remoting.ButterBar.kDismissId_);
+}
- chrome.storage.sync.get(
- [remoting.ButterBar.kSurveyStorageKey_],
- this.onStateLoaded_.bind(this));
+remoting.ButterBar.prototype.init = function() {
+ var result = new base.Deferred();
+ if (this.currentMessage_ > -1) {
+ chrome.storage.sync.get(
+ [remoting.ButterBar.kStorageKey_],
+ (syncValues) => {
+ this.onStateLoaded_(syncValues);
+ result.resolve();
+ });
+ } else {
+ result.resolve();
+ }
+ return result.promise();
}
/**
- * Shows butter bar with the specified |message| and updates |storageKey| after
- * the bar is dismissed.
+ * Shows butter bar with the current message.
*
* @param {string} messageId
* @param {string|Array} substitutions
- * @param {string} storageKey
+ * @param {boolean} dismissable
* @private
*/
-remoting.ButterBar.prototype.show_ =
- function(messageId, substitutions, storageKey) {
- this.storageKey_ = storageKey;
-
- var messageElement = document.getElementById(remoting.ButterBar.kMessageId_);
- l10n.localizeElementFromTag(messageElement, messageId, substitutions, true);
- var acceptLink =
- /** @type{Element} */ (messageElement.getElementsByTagName('a')[0]);
- acceptLink.addEventListener(
- 'click', this.dismiss.bind(this, true), false);
-
- document.getElementById(remoting.ButterBar.kDismissId_).addEventListener(
- 'click', this.dismiss.bind(this, false), false);
-
- document.getElementById(remoting.ButterBar.kId_).hidden = false;
+remoting.ButterBar.prototype.show_ = function() {
+ var messageId = this.messages_[this.currentMessage_].id;
+ var substitutions = ['<a href="https://example.com" target="_blank">', '</a>'];
+ var dismissable = this.messages_[this.currentMessage_].dismissable;
+ l10n.localizeElementFromTag(this.message_, messageId, substitutions, true);
+ if (dismissable) {
+ this.dismiss_.addEventListener('click', this.dismiss.bind(this), false);
+ } else {
+ this.dismiss_.hidden = true;
+ this.root_.classList.add('red');
+ }
+ this.root_.hidden = false;
}
/**
@@ -55,16 +76,56 @@ remoting.ButterBar.prototype.show_ =
* @private
*/
remoting.ButterBar.prototype.onStateLoaded_ = function(syncValues) {
- /** @type {boolean} */
- var surveyDismissed = !!syncValues[remoting.ButterBar.kSurveyStorageKey_];
+ /** @type {!Object|undefined} */
+ var messageState = syncValues[remoting.ButterBar.kStorageKey_];
+ if (!messageState) {
+ messageState = {
+ index: -1,
+ timestamp: new Date().getTime(),
+ hidden: false,
+ }
+ }
- if (!surveyDismissed) {
- this.show_(/*i18n-content*/'SURVEY_INVITATION',
- ['<a href="http://goo.gl/njH2q" target="_blank">', '</a>'],
- remoting.ButterBar.kSurveyStorageKey_);
+ // Show the current message unless it was explicitly dismissed or if it was
+ // first shown more than a week ago. If it is marked as not dismissable, show
+ // it unconditionally.
+ var elapsed = new Date() - messageState.timestamp;
+ var show =
+ this.currentMessage_ > messageState.index ||
+ !this.messages_[this.currentMessage_].dismissable ||
+ (!messageState.hidden && elapsed <= remoting.ButterBar.kTimeout_);
+
+ if (show) {
+ this.show_();
+ // If this is the first time this message is being displayed, update the
+ // saved state.
+ if (this.currentMessage_ > messageState.index) {
+ var value = {};
+ value[remoting.ButterBar.kStorageKey_] = {
+ index: this.currentMessage_,
+ timestamp: new Date().getTime(),
+ hidden: false
+ };
+ chrome.storage.sync.set(value);
+ }
}
};
+/**
+ * Hide the butter bar request and record the message that was being displayed.
+ */
+remoting.ButterBar.prototype.dismiss = function() {
+ var value = {};
+ value[remoting.ButterBar.kStorageKey_] = {
+ index: this.currentMessage_,
+ timestamp: new Date().getTime(),
+ hidden: true
+ };
+ chrome.storage.sync.set(value);
+
+ this.root_.hidden = true;
+};
+
/** @const @private */
remoting.ButterBar.kId_ = 'butter-bar';
@@ -74,25 +135,7 @@ remoting.ButterBar.kMessageId_ = 'butter-bar-message';
remoting.ButterBar.kDismissId_ = 'butter-bar-dismiss';
/** @const @private */
-remoting.ButterBar.kSurveyStorageKey_ = 'feedback-survey-dismissed';
-
-/**
- * Hide the butter bar request and record some basic information about the
- * current state of the world in synced storage. This may be useful in the
- * future if we want to show the request again. At the moment, the data itself
- * is ignored; only its presence or absence is important.
- *
- * @param {boolean} accepted True if the user clicked the "accept" link;
- * false if they clicked the close icon.
- */
-remoting.ButterBar.prototype.dismiss = function(accepted) {
- var value = {};
- value[this.storageKey_] = {
- optIn: accepted,
- date: new Date(),
- version: chrome.runtime.getManifest().version
- };
- chrome.storage.sync.set(value);
+remoting.ButterBar.kStorageKey_ = 'message-state';
- document.getElementById(remoting.ButterBar.kId_).hidden = true;
-};
+/** @const @private */
+remoting.ButterBar.kTimeout_ = 7 * 24 * 60 * 60 * 1000; // 1 week
« no previous file with comments | « remoting/webapp/crd/html/butter_bar.css ('k') | remoting/webapp/crd/js/butter_bar_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698