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

Unified Diff: remoting/webapp/base/js/application.js

Issue 952353002: Requiem for client_screen.js (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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/base/js/application.js
diff --git a/remoting/webapp/base/js/application.js b/remoting/webapp/base/js/application.js
index e31fb503214938f5a1f9b8fd560625d2e5ec8ddd..2aa96884d3b36cad8fda047f0f6c2aa6d07b5123 100644
--- a/remoting/webapp/base/js/application.js
+++ b/remoting/webapp/base/js/application.js
@@ -13,6 +13,18 @@
var remoting = remoting || {};
/**
+ * @type {remoting.ClientSession} The client session object, set once the
+ * connector has invoked its onOk callback.
+ */
+remoting.clientSession = null;
+
+/**
+ * @type {remoting.DesktopConnectedView} The client session view object, set
+ * once the connector has invoked its onOk callback.
+ */
+remoting.desktopConnectedView = null;
+
+/**
* @param {Array<string>} app_capabilities Array of application capabilities.
* @constructor
*/
@@ -40,6 +52,9 @@ remoting.Application = function(app_capabilities) {
* @private
*/
this.session_connector_ = null;
+
+ /** @private {base.Disposable} */
+ this.sessionConnectedHooks_ = null;
};
/**
@@ -93,6 +108,14 @@ remoting.Application.prototype.start = function() {
this.delegate_.init(this.getSessionConnector());
};
+/** Disconnect the remoting client. */
+remoting.Application.prototype.disconnect = function() {
+ if (remoting.clientSession) {
+ remoting.clientSession.disconnect(remoting.Error.NONE);
+ console.log('Disconnected.');
+ }
+};
+
/**
* Called when a new session has been connected.
*
@@ -102,10 +125,12 @@ remoting.Application.prototype.start = function() {
remoting.Application.prototype.onConnected = function(clientSession) {
// TODO(garykac): Make clientSession a member var of Application.
Jamie 2015/03/04 01:06:54 Move this TODO up to where remoting.clientSession
kelvinp 2015/03/04 21:02:20 Done.
remoting.clientSession = clientSession;
- remoting.clientSession.addEventListener('stateChanged', onClientStateChange_);
-
+ this.sessionConnectedHooks_ = new base.Disposables(
+ new base.EventHook(
+ clientSession, 'stateChanged', this.onClientStateChange_.bind(this)),
+ new base.RepeatingTimer(this.updateStatistics_.bind(this), 1000)
+ );
remoting.clipboard.startSession();
- updateStatistics_();
remoting.hangoutSessionEvents.raiseEvent(
remoting.hangoutSessionEvents.sessionStateChanged,
remoting.ClientSession.State.CONNECTED
@@ -196,6 +221,48 @@ remoting.Application.prototype.getSessionConnector = function() {
return this.session_connector_;
};
+/**
+ * Callback function called when the state of the client plugin changes. The
+ * current and previous states are available via the |state| member variable.
+ *
+ * @param {remoting.ClientSession.StateEvent=} state
+ * @private
+ */
+remoting.Application.prototype.onClientStateChange_ = function(state) {
kelvinp 2015/02/25 22:44:38 Moved from client_screen.js.
+ switch (state.current) {
+ case remoting.ClientSession.State.CLOSED:
+ console.log('Connection closed by host');
+ this.onDisconnected();
+ break;
+ case remoting.ClientSession.State.FAILED:
+ var error = remoting.clientSession.getError();
+ console.error('Client plugin reported connection failed: ' + error);
+ if (error === null) {
+ error = remoting.Error.UNEXPECTED;
+ }
+ this.onError(error);
+ break;
+
+ default:
+ console.error('Unexpected client plugin state: ' + state.current);
+ // This should only happen if the web-app and client plugin get out of
+ // sync, so MISSING_PLUGIN is a suitable error.
+ this.onError(remoting.Error.MISSING_PLUGIN);
+ break;
+ }
+
+ base.dispose(this.sessionConnectedHooks_);
+ this.sessionConnectedHooks_= null;
+ remoting.clientSession.cleanup();
Jamie 2015/03/04 01:06:54 Not for this CL, but I think cleanup() pre-dates b
kelvinp 2015/03/04 21:02:20 Acknowledged.
+ remoting.clientSession = null;
+};
+
+/** @private */
+remoting.Application.prototype.updateStatistics_ = function() {
+ var perfstats = remoting.clientSession.getPerfStats();
+ remoting.stats.update(perfstats);
+ remoting.clientSession.logStatistics(perfstats);
+};
/**
* @interface

Powered by Google App Engine
This is Rietveld 408576698