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

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

Issue 848993002: Improve apps v2 upgrade UX (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address CL feedback Created 5 years, 11 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/js/event_handlers.js ('k') | remoting/webapp/crd/js/remoting.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/crd/js/host_list.js
diff --git a/remoting/webapp/crd/js/host_list.js b/remoting/webapp/crd/js/host_list.js
index 2cf7628b325c420d0f9ada18168468c84a9e68e1..f5bd6f1b4142f9a8780d591d3bdbefc15e801460 100644
--- a/remoting/webapp/crd/js/host_list.js
+++ b/remoting/webapp/crd/js/host_list.js
@@ -289,10 +289,121 @@ remoting.HostList.prototype.display = function() {
remoting.updateModalUi(enabled ? 'enabled' : 'disabled', 'data-daemon-state');
var element = document.getElementById('daemon-control');
element.hidden = !canChangeLocalHostState;
- element = document.getElementById('host-list-empty-hosting-supported');
- element.hidden = !canChangeLocalHostState;
- element = document.getElementById('host-list-empty-hosting-unsupported');
- element.hidden = canChangeLocalHostState;
+
+ if (noHostsRegistered) {
+ this.showEmptyText_(canChangeLocalHostState);
+ }
+};
+
+/**
+ * Displays a message to the user when the host list is empty.
+ *
+ * @param {boolean} hostingSupported
+ * @return {void}
+ * @private
+ */
+remoting.HostList.prototype.showEmptyText_ = function(hostingSupported) {
Jamie 2015/01/15 20:51:30 "Empty text" suggests that the text is empty, not
kelvinp 2015/01/20 19:41:00 Done.
+ /**
+ * @param {string} email
+ * @param {string} fullName
+ * @return {string}
+ */
+ function buildMigrationTips(email, fullName) {
+ var params = [
+ fullName,
+ email,
+ '<a href="https://support.google.com/chrome/answer/2364824?hl=en" ' +
+ 'target="_blank">',
+ '</a>'];
+ return l10n.getTranslationOrError(
+ /*i18n-content*/'HOST_LIST_EMPTY_V2_MIGRATION', params);
+ }
+
+ var emptyTextDiv = this.noHosts_;
Jamie 2015/01/15 20:51:30 I'm not sure what the value of this assignment is.
kelvinp 2015/01/20 19:41:00 This variable is necessary for the annonymous func
+
+ this.isSignedInWithDifferentIdentity_().then(
+ /**
+ * @param {{ email: string, fullName: string}} previousIdentity
+ * @this {remoting.HostList}
+ */
+ function(previousIdentity) {
+ var buttonLabel = l10n.getTranslationOrError(
+ /*i18n-content*/'HOME_DAEMON_START_BUTTON');
+
+ if (Boolean(previousIdentity)) {
+ emptyTextDiv.innerHTML = buildMigrationTips(previousIdentity.email,
+ previousIdentity.fullName);
+ } else if (hostingSupported) {
+ emptyTextDiv.innerText = l10n.getTranslationOrError(
+ /*i18n-content*/'HOST_LIST_EMPTY_HOSTING_SUPPORTED',
+ [buttonLabel]);
+ } else {
+ emptyTextDiv.innerText = l10n.getTranslationOrError(
+ /*i18n-content*/'HOST_LIST_EMPTY_HOSTING_UNSUPPORTED',
+ [buttonLabel]);
+ }
+ }
+ );
+};
+
+/**
+ * @return {Promise} A Promise object that would resolve to
+ * { email: string, fullName: string} if the user has signed in with a
+ * different account that has hosts registered to it. Otherwise, resolves to
+ * null.
+ * @private
+ */
+remoting.HostList.prototype.isSignedInWithDifferentIdentity_ = function() {
+ if (!base.isAppsV2()) {
+ return Promise.resolve(null);
Jamie 2015/01/15 20:51:31 I think my original objection still applies. For t
kelvinp 2015/01/20 19:41:00 Done.
+ }
+
+ var getCachedInfo = new Promise(
Jamie 2015/01/15 20:51:30 s/Info/UserInfo/ You could also consider s/Cached
kelvinp 2015/01/20 19:41:00 Done.
+ /** @param {function(*) : void} resolve */
+ function(resolve) {
+ chrome.storage.local.get(
+ ['remoting-email','remoting-fullname',remoting.HostList.HOSTS_KEY],
Jamie 2015/01/15 20:51:30 Nit: Spaces between list elements.
Jamie 2015/01/15 20:51:30 These strings are duplicated. You should define th
kelvinp 2015/01/20 19:41:00 Done.
+ /** @param {*} results */
+ function(results) { resolve(results); }
+ );
+ }
+ );
+
+ var getCurrentEmail = new Promise(
+ /**
+ * @param {function(*) : void} resolve
+ * @param {function(*) : void} reject
+ */
+ function(resolve, reject) {
+ /**
+ * @param {string} email
+ * @param {string} name
+ */
+ remoting.identity.getUserInfo(function(email, name) {
+ resolve(email);
+ }, reject);
+ }
+ );
+
+ return Promise.all([getCachedInfo, getCurrentEmail]).then(
+ /** @param {Object} results */
+ function(results){
+ var cached = /** @type {Object} */ (results[0]);
Jamie 2015/01/15 20:51:31 s/cached/cachedUserInfo/
+ var currentEmail = /** @type {string} */ (results[1]);
+ var cachedHosts = /** @type {Array} */
+ (base.jsonParseSafe(cached[remoting.HostList.HOSTS_KEY]));
+ var cachedEmail = getStringAttr(cached, 'remoting-email', '');
+ var cachedName = getStringAttr(cached, 'remoting-fullname', '');
+
+ if (cachedEmail && cachedEmail !== currentEmail &&
+ Array.isArray(cachedHosts) && cachedHosts.length !== 0) {
+ return {
+ email: cachedEmail,
+ fullName: cachedName
+ };
+ }
+ return null;
+ });
};
/**
@@ -459,8 +570,15 @@ remoting.HostList.prototype.onErrorClick_ = function() {
* Save the host list to local storage.
*/
remoting.HostList.prototype.save_ = function() {
+ if (this.hosts_.length === 0) {
+ return;
+ }
Jamie 2015/01/15 20:51:30 I don't think this logic is correct. It will preve
kelvinp 2015/01/20 19:41:00 Done.
+
var items = {};
items[remoting.HostList.HOSTS_KEY] = JSON.stringify(this.hosts_);
+ if (base.isAppsV2()) {
+ chrome.storage.local.remove('remoting-email');
Jamie 2015/01/15 20:51:31 Clearing this here seems a bit ad-hoc. I think you
kelvinp 2015/01/20 19:41:00 Done.
+ }
chrome.storage.local.set(items);
};
« no previous file with comments | « remoting/webapp/crd/js/event_handlers.js ('k') | remoting/webapp/crd/js/remoting.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698