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

Side by Side Diff: remoting/webapp/crd/js/me2me_connect_flow.js

Issue 1054273002: [Webapp Refactor] Implements remoting.Activity. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typo Created 5 years, 8 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 unified diff | Download patch
« no previous file with comments | « remoting/webapp/crd/js/me2me_activity.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /** @suppress {duplicate} */
6 var remoting = remoting || {};
7
8 (function() {
9
10 'use strict';
11
12 /**
13 * @param {remoting.SessionConnector} sessionConnector
14 * @param {remoting.Host} host
15 *
16 * @constructor
17 */
18 remoting.Me2MeConnectFlow = function(sessionConnector, host) {
19 /** @private */
20 this.host_ = host;
21 /** @private */
22 this.connector_ = sessionConnector;
23 };
24
25 remoting.Me2MeConnectFlow.prototype.start = function() {
26 var webappVersion = chrome.runtime.getManifest().version;
27 var needsUpdateDialog = new remoting.HostNeedsUpdateDialog(
28 document.getElementById('host-needs-update-dialog'), this.host_);
29 var that = this;
30
31 needsUpdateDialog.showIfNecessary(webappVersion).then(function() {
32 return that.host_.options.load();
33 }).then(function() {
34 that.connect_();
35 }).catch(function(/** remoting.Error */ error) {
36 if (error.hasTag(remoting.Error.Tag.CANCELLED)) {
37 remoting.setMode(remoting.AppMode.HOME);
38 }
39 });
40 };
41
42 /** @private */
43 remoting.Me2MeConnectFlow.prototype.connect_ = function() {
44 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
45 var host = this.host_;
46
47 /**
48 * @param {string} tokenUrl Token-issue URL received from the host.
49 * @param {string} hostPublicKey Host public key (DER and Base64 encoded).
50 * @param {string} scope OAuth scope to request the token for.
51 * @param {function(string, string):void} onThirdPartyTokenFetched Callback.
52 */
53 var fetchThirdPartyToken = function(
54 tokenUrl, hostPublicKey, scope, onThirdPartyTokenFetched) {
55 var thirdPartyTokenFetcher = new remoting.ThirdPartyTokenFetcher(
56 tokenUrl, hostPublicKey, scope, host.tokenUrlPatterns,
57 onThirdPartyTokenFetched);
58 thirdPartyTokenFetcher.fetchToken();
59 };
60
61 /**
62 * @param {boolean} supportsPairing
63 * @param {function(string):void} onPinFetched
64 */
65 var requestPin = function(supportsPairing, onPinFetched) {
66 var pinDialog =
67 new remoting.PinDialog(document.getElementById('pin-dialog'), host);
68 pinDialog.show(supportsPairing).then(function(/** string */ pin) {
69 remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
70 onPinFetched(pin);
71 /** @type {boolean} */
72 remoting.pairingRequested = pinDialog.pairingRequested();
73 }).catch(function(/** remoting.Error */ error) {
74 base.debug.assert(error.hasTag(remoting.Error.Tag.CANCELLED));
75 remoting.setMode(remoting.AppMode.HOME);
76 });
77 };
78
79 var pairingInfo = host.options.pairingInfo;
80 this.connector_.connectMe2Me(host, requestPin, fetchThirdPartyToken,
81 pairingInfo.clientId, pairingInfo.sharedSecret);
82 };
83
84
85 /**
86 * @param {HTMLElement} rootElement
87 * @param {remoting.Host} host
88 * @constructor
89 */
90 remoting.HostNeedsUpdateDialog = function(rootElement, host) {
91 /** @private */
92 this.host_ = host;
93 /** @private */
94 this.rootElement_ = rootElement;
95 /** @private {base.Deferred} */
96 this.deferred_ = null;
97 /** @private {base.Disposables} */
98 this.eventHooks_ = null;
99
100 l10n.localizeElementFromTag(
101 rootElement.querySelector('.host-needs-update-message'),
102 /*i18n-content*/'HOST_NEEDS_UPDATE_TITLE', host.hostName);
103 };
104
105 /**
106 * Shows the HostNeedsUpdateDialog if the user is trying to connect to a legacy
107 * host.
108 *
109 * @param {string} webappVersion
110 * @return {Promise} Promise that resolves when no update is required or
111 * when the user ignores the update warning. Rejects with
112 * |remoting.Error.CANCELLED| if the user cancels the connection.
113 */
114 remoting.HostNeedsUpdateDialog.prototype.showIfNecessary =
115 function(webappVersion) {
116 if (!remoting.Host.needsUpdate(this.host_, webappVersion)) {
117 return Promise.resolve();
118 }
119
120 this.eventHooks_ = new base.Disposables(
121 new base.DomEventHook(this.rootElement_.querySelector('.connect-button'),
122 'click', this.onOK_.bind(this), false),
123 new base.DomEventHook(this.rootElement_.querySelector('.cancel-button'),
124 'click', this.onCancel_.bind(this), false));
125
126 base.debug.assert(this.deferred_ === null);
127 this.deferred_ = new base.Deferred();
128
129 remoting.setMode(remoting.AppMode.CLIENT_HOST_NEEDS_UPGRADE);
130
131 return this.deferred_.promise();
132 };
133
134 /** @private */
135 remoting.HostNeedsUpdateDialog.prototype.cleanup_ = function() {
136 base.dispose(this.eventHooks_);
137 this.eventHooks_ = null;
138 this.deferred_ = null;
139 };
140
141
142 /** @private */
143 remoting.HostNeedsUpdateDialog.prototype.onOK_ = function() {
144 this.deferred_.resolve();
145 this.cleanup_();
146 };
147
148 /** @private */
149 remoting.HostNeedsUpdateDialog.prototype.onCancel_ = function() {
150 this.deferred_.reject(new remoting.Error(remoting.Error.Tag.CANCELLED));
151 this.cleanup_();
152 };
153
154 /**
155 * @param {HTMLElement} rootElement
156 * @param {remoting.Host} host
157 * @constructor
158 */
159 remoting.PinDialog = function(rootElement, host) {
160 /** @private */
161 this.rootElement_ = rootElement;
162 /** @private */
163 this.pairingCheckbox_ = rootElement.querySelector('.pairing-checkbox');
164 /** @private */
165 this.pinInput_ = rootElement.querySelector('.pin-inputField');
166 /** @private */
167 this.host_ = host;
168 /** @private */
169 this.dialog_ = new remoting.InputDialog(
170 remoting.AppMode.CLIENT_PIN_PROMPT,
171 this.rootElement_.querySelector('form'),
172 this.pinInput_,
173 this.rootElement_.querySelector('.cancel-button'));
174 };
175
176
177 /**
178 * @param {boolean} supportsPairing
179 * @return {Promise<string>} Promise that resolves with the PIN or rejects with
180 * |remoting.Error.CANCELLED| if the user cancels the connection.
181 */
182 remoting.PinDialog.prototype.show = function(supportsPairing) {
183 // Reset the UI.
184 this.pairingCheckbox_.checked = false;
185 this.rootElement_.querySelector('.pairing-section').hidden = !supportsPairing;
186 var message = this.rootElement_.querySelector('.pin-message');
187 l10n.localizeElement(message, this.host_.hostName);
188 this.pinInput_.value = '';
189 return this.dialog_.show();
190 };
191
192 /** @return {boolean} */
193 remoting.PinDialog.prototype.pairingRequested = function() {
194 return this.pairingCheckbox_.checked;
195 };
196
197 })();
OLDNEW
« no previous file with comments | « remoting/webapp/crd/js/me2me_activity.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698