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

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

Issue 848993002: Improve apps v2 upgrade UX (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor + UT 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
Index: remoting/webapp/crd/js/apps_v2_migration.js
diff --git a/remoting/webapp/crd/js/apps_v2_migration.js b/remoting/webapp/crd/js/apps_v2_migration.js
new file mode 100644
index 0000000000000000000000000000000000000000..341635867440fc1e39213e01b1bdc11f4a701ff1
--- /dev/null
+++ b/remoting/webapp/crd/js/apps_v2_migration.js
@@ -0,0 +1,129 @@
+// 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.
+
+/**
+* @fileoverview
+* The current v1 web-app allows users to sign in as any user. Some users may
+* be signed in using a different account than their chrome profile. When these
+* users upgrade to the v2 app, their host list will be empty and it is not
+* obvious why. remoting.AppsV2Migration shows a migration tip to the user to
+* sign in to their previous accounts if necessary.
+*/
+
+'use strict';
+
+/** @suppress {duplicate} */
+var remoting = remoting || {};
+
+
+(function() {
+
+// Storage key used for the migration settings.
+var MIGRATION_KEY_ = 'remoting-v2-migration';
+
+/** @constructor */
+remoting.MigrationSettings = function() {};
+remoting.MigrationSettings.prototype.email = /** @type {string}*/ ('');
+remoting.MigrationSettings.prototype.fullName = /** @type {string}*/ ('');
+remoting.MigrationSettings.prototype.hasHosts = /** @type {boolean}*/ (false);
Jamie 2015/01/20 22:32:01 These should be member variables, not prototype va
Jamie 2015/01/20 22:32:01 Is it necessary to save hasHosts, or could we just
kelvinp 2015/01/21 21:16:20 Done.
kelvinp 2015/01/21 21:16:21 Done.
+
+
+/**
+ * @return {Promise} A Promise object that would resolve to the
+ * remoting.MigrationSettings
+ */
+function loadPreferences_() {
+ return new Promise(
+ /** @param {function(*) : void} resolve */
+ function(resolve) {
+ /** @param {Object<string, remoting.MigrationSettings>} result */
+ chrome.storage.local.get(MIGRATION_KEY_, function(result) {
+ resolve(result[MIGRATION_KEY_]);
+ });
+ }
+ );
+}
+
+/**
+ * @return {Promise} A Promise object that would resolve to the email of the
Jamie 2015/01/20 22:32:01 s/email/email and full name/ (or change it so that
kelvinp 2015/01/21 21:16:20 Done.
+ * current user.
+ */
+function getEmail_() {
+ return new Promise(
+ /**
+ * @param {function(*) : void} resolve
+ * @param {function(*) : void} reject
+ */
+ function(resolve, reject) {
+ remoting.identity.getUserInfo(resolve, reject);
+ }
+ );
+}
+
+remoting.AppsV2Migration = function() {};
+
+/**
+ * @return {Promise} A Promise object that would resolve to
+ * { email: string, fullName: string} if the user has signed in with a
Jamie 2015/01/20 22:32:01 s/has signed in /has previously signed-in to the v
Jamie 2015/01/20 22:32:01 Nit: No space after "{".
kelvinp 2015/01/21 21:16:20 Done.
+ * different account that has hosts registered to it. Otherwise, the promise
+ * will be rejected.
+ */
+remoting.AppsV2Migration.hasHostsInV1App = function() {
+ if (!base.isAppsV2()) {
+ return Promise.reject(false);
+ }
+
+ return Promise.all([loadPreferences_(), getEmail_()]).then(
+ /** @param {Object} results */
+ function(results){
+ var v1 = /**@type{remoting.MigrationSettings}*/ (results[0]);
+ var currentEmail = /** @type {string} */ (results[1]);
+
+ if (v1 && v1.email && v1.email !== currentEmail && v1.hasHosts) {
+ return {
Jamie 2015/01/20 22:32:01 Is this equivalent to return Promise.resolve(...)?
kelvinp 2015/01/21 21:16:21 Done.
+ email: v1.email,
+ fullName: v1.fullName
+ };
+ }
+ return Promise.reject(false);
+ });
+};
+
+/**
+ * @param {string} email
+ * @param {string} fullName
+ * @return {string}
+ */
+remoting.AppsV2Migration.buildMigrationTips = function(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);
+};
+
+/** @param {boolean} hasHosts */
Jamie 2015/01/20 22:32:01 The behaviour of this function is quite subtle, so
kelvinp 2015/01/21 21:16:20 Done.
+remoting.AppsV2Migration.savePreferences = function(hasHosts) {
+ if (base.isAppsV2()) {
+ if (hasHosts) {
+ chrome.storage.local.remove(MIGRATION_KEY_);
+ }
+ return;
+ }
+
+ var preference = /**@type{remoting.MigrationSettings}*/ ({});
Jamie 2015/01/20 22:32:01 This would be clearer if the MigrationSettings cto
+ preference.email = window.localStorage['remoting-email'];
+ preference.fullName = window.localStorage['remoting-fullname'];
Jamie 2015/01/20 22:32:01 Can these be passed in to the function? Using wind
kelvinp 2015/01/21 21:16:21 Done.
+ preference.hasHosts = hasHosts;
+
+ var container = {};
+ container[MIGRATION_KEY_] = preference;
+ chrome.storage.local.set(container);
+};
+
+}());
+

Powered by Google App Engine
This is Rietveld 408576698