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

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

Issue 1133913002: [Chromoting] Move shared webapp JS files from crd/js -> base/js (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 unified diff | Download patch
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 {Element} container parent element for the plugin to be created.
14 * @param {Array<string>} capabilities capabilities required by this
15 * application.
16 * @constructor
17 */
18 remoting.ClientSessionFactory = function(container, capabilities) {
19 /** @private */
20 this.container_ = /** @type {HTMLElement} */ (container);
21
22 /** @private {Array<string>} */
23 this.requiredCapabilities_ = [
24 remoting.ClientSession.Capability.SEND_INITIAL_RESOLUTION,
25 remoting.ClientSession.Capability.RATE_LIMIT_RESIZE_REQUESTS,
26 remoting.ClientSession.Capability.VIDEO_RECORDER
27 ];
28
29 // Append the app-specific capabilities.
30 this.requiredCapabilities_.push.apply(this.requiredCapabilities_,
31 capabilities);
32 };
33
34 /**
35 * Creates a session.
36 *
37 * @param {remoting.ClientSession.EventHandler} listener
38 * @return {Promise<!remoting.ClientSession>} Resolves with the client session
39 * if succeeded or rejects with remoting.Error on failure.
40 */
41 remoting.ClientSessionFactory.prototype.createSession = function(listener) {
42 var that = this;
43 /** @type {string} */
44 var token;
45 /** @type {remoting.SignalStrategy} */
46 var signalStrategy;
47 /** @type {remoting.ClientPlugin} */
48 var clientPlugin;
49
50 function OnError(/** remoting.Error */ error) {
51 base.dispose(signalStrategy);
52 base.dispose(clientPlugin);
53 throw error;
54 }
55
56 var promise = remoting.identity.getToken().then(
57 function(/** string */ authToken) {
58 token = authToken;
59 return remoting.identity.getUserInfo();
60 }).then(function(/** {email: string, name: string} */ userInfo) {
61 return connectSignaling(userInfo.email, token);
62 }).then(function(/** remoting.SignalStrategy */ strategy) {
63 signalStrategy = strategy;
64 return createPlugin(that.container_, that.requiredCapabilities_);
65 }).then(function(/** remoting.ClientPlugin */ plugin) {
66 clientPlugin = plugin;
67 return new remoting.ClientSession(plugin, signalStrategy, listener);
68 }).catch(
69 remoting.Error.handler(OnError)
70 );
71
72 return /** @type {Promise<!remoting.ClientSession>} */ (promise);
73 };
74
75 /**
76 * @param {string} email
77 * @param {string} token
78 * @return {Promise<!remoting.SignalStrategy>}
79 */
80 function connectSignaling(email, token) {
81 var signalStrategy = remoting.SignalStrategy.create();
82 var deferred = new base.Deferred();
83 function onSignalingState(/** remoting.SignalStrategy.State */ state) {
84 switch (state) {
85 case remoting.SignalStrategy.State.CONNECTED:
86 deferred.resolve(signalStrategy);
87 break;
88
89 case remoting.SignalStrategy.State.FAILED:
90 var error = signalStrategy.getError();
91 signalStrategy.dispose();
92 deferred.reject(error);
93 break;
94 }
95 }
96 signalStrategy.setStateChangedCallback(onSignalingState);
97 signalStrategy.connect(remoting.settings.XMPP_SERVER, email, token);
98 return deferred.promise();
99 }
100
101 /**
102 * Creates the plugin.
103 * @param {HTMLElement} container parent element for the plugin.
104 * @param {Array<string>} capabilities capabilities required by this
105 * application.
106 * @return {Promise<!remoting.ClientPlugin>}
107 */
108 function createPlugin(container, capabilities) {
109 var plugin = remoting.ClientPlugin.factory.createPlugin(
110 container, capabilities);
111 var deferred = new base.Deferred();
112
113 function onInitialized(/** boolean */ initialized) {
114 if (!initialized) {
115 console.error('ERROR: remoting plugin not loaded');
116 plugin.dispose();
117 deferred.reject(new remoting.Error(remoting.Error.Tag.MISSING_PLUGIN));
118 return;
119 }
120
121 if (!plugin.isSupportedVersion()) {
122 console.error('ERROR: bad plugin version');
123 plugin.dispose();
124 deferred.reject(
125 new remoting.Error(remoting.Error.Tag.BAD_PLUGIN_VERSION));
126 return;
127 }
128 deferred.resolve(plugin);
129 }
130 plugin.initialize(onInitialized);
131 return deferred.promise();
132 }
133
134 })();
OLDNEW
« no previous file with comments | « remoting/webapp/crd/js/client_session.js ('k') | remoting/webapp/crd/js/client_session_factory_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698