summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkelvinp <kelvinp@chromium.org>2015-04-14 23:17:11 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-15 06:17:33 +0000
commitd7f0d7b7cbdd2b4645bcca1b8703307b9d7266a5 (patch)
treef7db4bac6d91b797c7c926e68e10bed34bbf6828
parente4960232c3d9004914273abdc3a92675b9ed2a82 (diff)
downloadchromium_src-d7f0d7b7cbdd2b4645bcca1b8703307b9d7266a5.zip
chromium_src-d7f0d7b7cbdd2b4645bcca1b8703307b9d7266a5.tar.gz
chromium_src-d7f0d7b7cbdd2b4645bcca1b8703307b9d7266a5.tar.bz2
[Webapp Refactor] Remove remoting.clientSession.
remoting.clientSession is currently referenced for two purposes: 1. Disconnecting a session. 2. The ClientPlugin uses it to notify the clientSession when video frames are received. For (1), this CL added a stop() method to the Activity interface. Client code at access the Activity through the Application and call stop() for disconnecting. (2) is currently dead code that is not being used. It is removed in this CL. BUG=477119 Review URL: https://codereview.chromium.org/1082383002 Cr-Commit-Position: refs/heads/master@{#325196}
-rw-r--r--chrome/test/remoting/remote_desktop_browsertest.cc6
-rw-r--r--remoting/webapp/app_remoting/js/app_remoting.js4
-rw-r--r--remoting/webapp/app_remoting/js/app_remoting_activity.js30
-rw-r--r--remoting/webapp/base/js/application.js25
-rw-r--r--remoting/webapp/browser_test/browser_test.js7
-rw-r--r--remoting/webapp/crd/js/activity.js6
-rw-r--r--remoting/webapp/crd/js/client_plugin.js4
-rw-r--r--remoting/webapp/crd/js/client_plugin_impl.js8
-rw-r--r--remoting/webapp/crd/js/desktop_remoting.js18
-rw-r--r--remoting/webapp/crd/js/desktop_remoting_activity.js18
-rw-r--r--remoting/webapp/crd/js/it2me_activity.js4
-rw-r--r--remoting/webapp/crd/js/me2me_activity.js8
-rw-r--r--remoting/webapp/crd/js/session_connector_impl.js9
-rw-r--r--remoting/webapp/crd/js/smart_reconnector.js9
-rw-r--r--remoting/webapp/crd/js/toolbar.js7
-rw-r--r--remoting/webapp/crd/js/window_frame.js13
16 files changed, 113 insertions, 63 deletions
diff --git a/chrome/test/remoting/remote_desktop_browsertest.cc b/chrome/test/remoting/remote_desktop_browsertest.cc
index 5e76bd2..15dc575 100644
--- a/chrome/test/remoting/remote_desktop_browsertest.cc
+++ b/chrome/test/remoting/remote_desktop_browsertest.cc
@@ -387,7 +387,7 @@ void RemoteDesktopBrowserTest::DisconnectMe2Me() {
ASSERT_TRUE(RemoteDesktopBrowserTest::IsSessionConnected());
- ExecuteScript("remoting.app.disconnect();");
+ ExecuteScript("remoting.app.getActivity().stop();");
EXPECT_TRUE(HtmlElementVisible("client-dialog"));
EXPECT_TRUE(HtmlElementVisible("client-reconnect-button"));
@@ -841,9 +841,7 @@ bool RemoteDesktopBrowserTest::IsSessionConnected() {
DismissHostVersionWarningIfVisible();
return ExecuteScriptAndExtractBool(
- "remoting.clientSession != null && "
- "remoting.clientSession.getState() == "
- "remoting.ClientSession.State.CONNECTED");
+ "remoting.currentMode === remoting.AppMode.IN_SESSION");
}
bool RemoteDesktopBrowserTest::IsPinFormVisible() {
diff --git a/remoting/webapp/app_remoting/js/app_remoting.js b/remoting/webapp/app_remoting/js/app_remoting.js
index 8d60ae9..cbb1506 100644
--- a/remoting/webapp/app_remoting/js/app_remoting.js
+++ b/remoting/webapp/app_remoting/js/app_remoting.js
@@ -38,6 +38,10 @@ remoting.AppRemoting.prototype.getApplicationName = function() {
return manifest.name;
};
+remoting.AppRemoting.prototype.getActivity = function() {
+ return this.activity_;
+};
+
/**
* @param {!remoting.Error} error The failure reason.
* @override {remoting.ApplicationInterface}
diff --git a/remoting/webapp/app_remoting/js/app_remoting_activity.js b/remoting/webapp/app_remoting/js/app_remoting_activity.js
index 16a5ab3..3685946 100644
--- a/remoting/webapp/app_remoting/js/app_remoting_activity.js
+++ b/remoting/webapp/app_remoting/js/app_remoting_activity.js
@@ -38,6 +38,9 @@ remoting.AppRemotingActivity = function(appCapabilities) {
this.connector_ = remoting.SessionConnector.factory.createConnector(
document.getElementById('client-container'), appCapabilities,
this);
+
+ /** @private {remoting.ClientSession} */
+ this.session_ = null;
};
remoting.AppRemotingActivity.prototype.dispose = function() {
@@ -56,6 +59,19 @@ remoting.AppRemotingActivity.prototype.start = function() {
});
};
+remoting.AppRemotingActivity.prototype.stop = function() {
+ if (this.session_) {
+ this.session_.disconnect(remoting.Error.none());
+ }
+};
+
+/** @private */
+remoting.AppRemotingActivity.prototype.cleanup_ = function() {
+ base.dispose(this.connectedView_);
+ this.connectedView_ = null;
+ this.session_ = null;
+};
+
/**
* @param {string} token
* @return {Promise<!remoting.Xhr.Response>}
@@ -96,10 +112,6 @@ remoting.AppRemotingActivity.prototype.onAppHostResponse_ =
remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
- var idleDetector = new remoting.IdleDetector(
- document.getElementById('idle-dialog'),
- remoting.app.disconnect.bind(remoting.app));
-
/**
* @param {string} tokenUrl Token-issue URL received from the host.
* @param {string} hostPublicKey Host public key (DER and Base64
@@ -137,6 +149,10 @@ remoting.AppRemotingActivity.prototype.onConnected = function(connectionInfo) {
this.connectedView_ = new remoting.AppConnectedView(
document.getElementById('client-container'), connectionInfo);
+ this.session_ = connectionInfo.session();
+ var idleDetector = new remoting.IdleDetector(
+ document.getElementById('idle-dialog'), this.stop.bind(this));
+
// Map Cmd to Ctrl on Mac since hosts typically use Ctrl for keyboard
// shortcuts, but we want them to act as natively as possible.
if (remoting.platformIsMac()) {
@@ -145,8 +161,7 @@ remoting.AppRemotingActivity.prototype.onConnected = function(connectionInfo) {
};
remoting.AppRemotingActivity.prototype.onDisconnected = function() {
- base.dispose(this.connectedView_);
- this.connectedView_ = null;
+ this.cleanup_();
chrome.app.window.current().close();
};
@@ -166,8 +181,7 @@ remoting.AppRemotingActivity.prototype.onError = function(error) {
remoting.MessageWindow.showErrorMessage(
chrome.i18n.getMessage(/*i18n-content*/'CONNECTION_FAILED'),
chrome.i18n.getMessage(error.getTag()));
- base.dispose(this.connectedView_);
- this.connectedView_ = null;
+ this.cleanup_();
};
})();
diff --git a/remoting/webapp/base/js/application.js b/remoting/webapp/base/js/application.js
index 4e79fcc..5b6768b 100644
--- a/remoting/webapp/base/js/application.js
+++ b/remoting/webapp/base/js/application.js
@@ -57,14 +57,6 @@ remoting.Application.prototype.setConnectionMode = function(mode) {
this.connectionMode_ = mode;
};
-/* Disconnect the remoting client. */
-remoting.Application.prototype.disconnect = function() {
- if (remoting.clientSession) {
- remoting.clientSession.disconnect(remoting.Error.none());
- console.log('Disconnected.');
- }
-};
-
/* Public method to exit the application. */
remoting.Application.prototype.quit = function() {
this.exitApplication_();
@@ -111,7 +103,14 @@ remoting.Application.prototype.start = function() {
/** @return {string} */
remoting.Application.prototype.getApplicationName = function() {
- base.debug.assert(false, "Subclass must override");
+ base.debug.assert(false, 'Subclass must override');
+};
+
+/**
+ * @return {remoting.Activity} The Current activity.
+ */
+remoting.Application.prototype.getActivity = function() {
+ base.debug.assert(false, 'Subclass must override');
};
/**
@@ -119,12 +118,12 @@ remoting.Application.prototype.getApplicationName = function() {
* @protected
*/
remoting.Application.prototype.signInFailed_ = function(error) {
- base.debug.assert(false, "Subclass must override");
+ base.debug.assert(false, 'Subclass must override');
};
/** @protected */
remoting.Application.prototype.initApplication_ = function() {
- base.debug.assert(false, "Subclass must override");
+ base.debug.assert(false, 'Subclass must override');
};
/**
@@ -132,12 +131,12 @@ remoting.Application.prototype.initApplication_ = function() {
* @protected
*/
remoting.Application.prototype.startApplication_ = function(token) {
- base.debug.assert(false, "Subclass must override");
+ base.debug.assert(false, 'Subclass must override');
};
/** @protected */
remoting.Application.prototype.exitApplication_ = function() {
- base.debug.assert(false, "Subclass must override");
+ base.debug.assert(false, 'Subclass must override');
};
/**
diff --git a/remoting/webapp/browser_test/browser_test.js b/remoting/webapp/browser_test/browser_test.js
index 30c6962..fcf616f 100644
--- a/remoting/webapp/browser_test/browser_test.js
+++ b/remoting/webapp/browser_test/browser_test.js
@@ -222,7 +222,12 @@ browserTest.disconnect = function() {
finishedButton = 'client-finished-it2me-button';
}
- remoting.app.disconnect();
+ var activity = remoting.app.getActivity();
+ if (!activity) {
+ return Promise.resolve();
+ }
+
+ activity.stop();
return browserTest.onUIMode(finishedMode).then(function() {
browserTest.clickOnControl(finishedButton);
diff --git a/remoting/webapp/crd/js/activity.js b/remoting/webapp/crd/js/activity.js
index 44e2fab..206073c 100644
--- a/remoting/webapp/crd/js/activity.js
+++ b/remoting/webapp/crd/js/activity.js
@@ -29,4 +29,10 @@ remoting.Activity = function() {};
*/
remoting.Activity.prototype.start = function() {};
+/**
+ * Cancels or disconnects a remote connection.
+ * @return {void}
+ */
+remoting.Activity.prototype.stop = function() {};
+
})(); \ No newline at end of file
diff --git a/remoting/webapp/crd/js/client_plugin.js b/remoting/webapp/crd/js/client_plugin.js
index d251227..6006175 100644
--- a/remoting/webapp/crd/js/client_plugin.js
+++ b/remoting/webapp/crd/js/client_plugin.js
@@ -232,6 +232,10 @@ remoting.ClientPlugin.ConnectionEventHandler.prototype.onConnectionReady =
remoting.ClientPlugin.ConnectionEventHandler.prototype.onSetCapabilities =
function(capabilities) {};
+/** Called when the first video frame is received */
+remoting.ClientPlugin.ConnectionEventHandler.prototype.onFirstFrameReceived =
+ function() {};
+
/**
* @interface
*/
diff --git a/remoting/webapp/crd/js/client_plugin_impl.js b/remoting/webapp/crd/js/client_plugin_impl.js
index c2ba6c0..c9b2144 100644
--- a/remoting/webapp/crd/js/client_plugin_impl.js
+++ b/remoting/webapp/crd/js/client_plugin_impl.js
@@ -250,6 +250,9 @@ remoting.ClientPluginImpl.prototype.handleMessageMethod_ = function(message) {
base.getStringAttr(message.data, 'capabilities'));
handler.onSetCapabilities(capabilities);
+ } else if (message.method == 'onFirstFrameReceived') {
+ handler.onFirstFrameReceived();
+
}
}
@@ -311,11 +314,6 @@ remoting.ClientPluginImpl.prototype.handleMessageMethod_ = function(message) {
var item = base.getStringAttr(message.data, 'item');
this.updateClipboardData_(mimetype, item);
- } else if (message.method == 'onFirstFrameReceived') {
- if (remoting.clientSession) {
- remoting.clientSession.onFirstFrameReceived();
- }
-
} else if (message.method == 'fetchPin') {
// The pairingSupported value in the dictionary indicates whether both
// client and host support pairing. If the client doesn't support pairing,
diff --git a/remoting/webapp/crd/js/desktop_remoting.js b/remoting/webapp/crd/js/desktop_remoting.js
index 29c32a0..a8b1cf2 100644
--- a/remoting/webapp/crd/js/desktop_remoting.js
+++ b/remoting/webapp/crd/js/desktop_remoting.js
@@ -49,7 +49,7 @@ remoting.DesktopRemoting.prototype.initApplication_ = function() {
if (base.isAppsV2()) {
remoting.windowFrame = new remoting.WindowFrame(
- document.getElementById('title-bar'));
+ document.getElementById('title-bar'), this.disconnect_.bind(this));
remoting.optionsMenu = remoting.windowFrame.createOptionsMenu();
var START_FULLSCREEN = 'start-fullscreen';
@@ -73,13 +73,13 @@ remoting.DesktopRemoting.prototype.initApplication_ = function() {
} else {
remoting.fullscreen = new remoting.FullscreenAppsV1();
remoting.toolbar = new remoting.Toolbar(
- document.getElementById('session-toolbar'));
+ document.getElementById('session-toolbar'),
+ this.disconnect_.bind(this));
remoting.optionsMenu = remoting.toolbar.createOptionsMenu();
window.addEventListener('beforeunload',
this.promptClose_.bind(this), false);
- window.addEventListener('unload',
- remoting.app.disconnect.bind(remoting.app), false);
+ window.addEventListener('unload', this.disconnect_.bind(this), false);
}
remoting.initHostlist_(this.connectMe2Me_.bind(this));
@@ -189,6 +189,16 @@ remoting.DesktopRemoting.prototype.getConnectedViewForTesting = function() {
return activity.getDesktopActivity().getConnectedView();
};
+remoting.DesktopRemoting.prototype.getActivity = function() {
+ return this.activity_;
+};
+
+remoting.DesktopRemoting.prototype.disconnect_ = function() {
+ if (this.activity_) {
+ this.activity_.stop();
+ }
+};
+
/**
* Entry-point for Me2Me connections.
*
diff --git a/remoting/webapp/crd/js/desktop_remoting_activity.js b/remoting/webapp/crd/js/desktop_remoting_activity.js
index 768eccc..d311130 100644
--- a/remoting/webapp/crd/js/desktop_remoting_activity.js
+++ b/remoting/webapp/crd/js/desktop_remoting_activity.js
@@ -24,6 +24,15 @@ remoting.DesktopRemotingActivity = function(parentActivity) {
this.parentActivity_ = parentActivity;
/** @private {remoting.DesktopConnectedView} */
this.connectedView_ = null;
+ /** @private {remoting.ClientSession} */
+ this.session_ = null;
+};
+
+remoting.DesktopRemotingActivity.prototype.stop = function() {
+ if (this.session_) {
+ this.session_.disconnect(remoting.Error.none());
+ console.log('Disconnected.');
+ }
};
/**
@@ -37,6 +46,8 @@ remoting.DesktopRemotingActivity.prototype.onConnected =
remoting.toolbar.preview();
}
+ this.session_ = connectionInfo.session();
+
this.connectedView_ = new remoting.DesktopConnectedView(
document.getElementById('client-container'), connectionInfo);
@@ -58,8 +69,7 @@ remoting.DesktopRemotingActivity.prototype.onConnected =
remoting.DesktopRemotingActivity.prototype.onDisconnected = function() {
this.parentActivity_.onDisconnected();
- base.dispose(this.connectedView_);
- this.connectedView_ = null;
+ this.dispose();
};
/**
@@ -84,13 +94,13 @@ remoting.DesktopRemotingActivity.prototype.onError = function(error) {
this.parentActivity_.onError(error);
- base.dispose(this.connectedView_);
- this.connectedView_ = null;
+ this.dispose();
};
remoting.DesktopRemotingActivity.prototype.dispose = function() {
base.dispose(this.connectedView_);
this.connectedView_ = null;
+ this.session_ = null;
};
/** @return {remoting.DesktopConnectedView} */
diff --git a/remoting/webapp/crd/js/it2me_activity.js b/remoting/webapp/crd/js/it2me_activity.js
index 98b4bf5..4ee50c3 100644
--- a/remoting/webapp/crd/js/it2me_activity.js
+++ b/remoting/webapp/crd/js/it2me_activity.js
@@ -66,6 +66,10 @@ remoting.It2MeActivity.prototype.start = function() {
});
};
+remoting.It2MeActivity.prototype.stop = function() {
+ this.desktopActivity_.stop();
+};
+
/**
* @param {!remoting.Error} error
*/
diff --git a/remoting/webapp/crd/js/me2me_activity.js b/remoting/webapp/crd/js/me2me_activity.js
index 7dac1ed..9020691 100644
--- a/remoting/webapp/crd/js/me2me_activity.js
+++ b/remoting/webapp/crd/js/me2me_activity.js
@@ -55,6 +55,10 @@ remoting.Me2MeActivity.prototype.start = function() {
});
};
+remoting.Me2MeActivity.prototype.stop = function() {
+ this.desktopActivity_.stop();
+};
+
/** @return {remoting.DesktopRemotingActivity} */
remoting.Me2MeActivity.prototype.getDesktopActivity = function() {
return this.desktopActivity_;
@@ -164,7 +168,9 @@ remoting.Me2MeActivity.prototype.onConnected = function(connectionInfo) {
base.dispose(this.reconnector_);
this.reconnector_ = new remoting.SmartReconnector(
- this.connect_.bind(this, false), connectionInfo.session());
+ this.connect_.bind(this, false),
+ this.stop.bind(this),
+ connectionInfo.session());
};
remoting.Me2MeActivity.prototype.onDisconnected = function() {
diff --git a/remoting/webapp/crd/js/session_connector_impl.js b/remoting/webapp/crd/js/session_connector_impl.js
index 6c19789..438a1f0 100644
--- a/remoting/webapp/crd/js/session_connector_impl.js
+++ b/remoting/webapp/crd/js/session_connector_impl.js
@@ -13,13 +13,6 @@
var remoting = remoting || {};
/**
- * @type {remoting.ClientSession} The client session object, set once the
- * connector has invoked its onOk callback.
- * TODO(garykac): Have this owned by someone instead of being global.
- */
-remoting.clientSession;
-
-/**
* @param {HTMLElement} clientContainer Container element for the client view.
* @param {Array<string>} requiredCapabilities Connector capabilities
* required by this application.
@@ -75,7 +68,6 @@ remoting.SessionConnectorImpl.prototype.closeSession_ = function() {
base.dispose(this.clientSession_);
/** @private {remoting.ClientSession} */
this.clientSession_ = null;
- remoting.clientSession = null;
base.dispose(this.plugin_);
/** @private {remoting.ClientPlugin} */
@@ -209,7 +201,6 @@ remoting.SessionConnectorImpl.prototype.onPluginInitialized_ = function(
this.clientSession_ = new remoting.ClientSession(
this.plugin_, this.host_, this.signalStrategy_);
- remoting.clientSession = this.clientSession_;
this.clientSession_.logHostOfflineErrors(this.logHostOfflineErrors_);
this.eventHook_ = new base.EventHook(
diff --git a/remoting/webapp/crd/js/smart_reconnector.js b/remoting/webapp/crd/js/smart_reconnector.js
index d7e331b..1597332 100644
--- a/remoting/webapp/crd/js/smart_reconnector.js
+++ b/remoting/webapp/crd/js/smart_reconnector.js
@@ -20,16 +20,21 @@ var remoting = remoting || {};
/**
* @constructor
* @param {function()} reconnectCallback
+ * @param {function()} disconnectCallback
* @param {remoting.ClientSession} clientSession This represents the current
* remote desktop connection. It is used to monitor the changes in
* connection state.
* @implements {base.Disposable}
*/
-remoting.SmartReconnector = function(reconnectCallback, clientSession) {
+remoting.SmartReconnector =
+ function(reconnectCallback, disconnectCallback, clientSession) {
/** @private */
this.reconnectCallback_ = reconnectCallback;
/** @private */
+ this.disconnectCallback_ = disconnectCallback;
+
+ /** @private */
this.clientSession_ = clientSession;
/** @private */
@@ -67,7 +72,7 @@ remoting.SmartReconnector.kConnectionTimeout = 10000;
remoting.SmartReconnector.prototype = {
reconnect_: function() {
this.cancelPending_();
- remoting.app.disconnect();
+ this.disconnectCallback_();
remoting.setMode(remoting.AppMode.CLIENT_CONNECTING);
this.reconnectCallback_();
},
diff --git a/remoting/webapp/crd/js/toolbar.js b/remoting/webapp/crd/js/toolbar.js
index a06e2e5..f1b7692 100644
--- a/remoting/webapp/crd/js/toolbar.js
+++ b/remoting/webapp/crd/js/toolbar.js
@@ -14,9 +14,11 @@ var remoting = remoting || {};
/**
* @param {HTMLElement} toolbar The HTML element representing the tool-bar.
+ * @param {function()} disconnectCallback Callback for disconnecting the
+ * session.
* @constructor
*/
-remoting.Toolbar = function(toolbar) {
+remoting.Toolbar = function(toolbar, disconnectCallback) {
/** @private {HTMLElement} */
this.toolbar_ = toolbar;
/** @private {HTMLElement} */
@@ -42,8 +44,7 @@ remoting.Toolbar = function(toolbar) {
window.addEventListener('mousemove', remoting.Toolbar.onMouseMove, false);
window.addEventListener('resize', this.center.bind(this), false);
- registerEventListener('toolbar-disconnect', 'click',
- remoting.app.disconnect.bind(remoting.app));
+ registerEventListener('toolbar-disconnect', 'click', disconnectCallback);
registerEventListener('toolbar-stub',
'click', function() { remoting.toolbar.toggle(); });
diff --git a/remoting/webapp/crd/js/window_frame.js b/remoting/webapp/crd/js/window_frame.js
index 0bb0b64..65d8afe 100644
--- a/remoting/webapp/crd/js/window_frame.js
+++ b/remoting/webapp/crd/js/window_frame.js
@@ -14,9 +14,11 @@ var remoting = remoting || {};
/**
* @param {HTMLElement} titleBar The root node of the title-bar DOM hierarchy.
+ * @param {function()} disconnectCallback Callback for disconnecting the
+ * session.
* @constructor
*/
-remoting.WindowFrame = function(titleBar) {
+remoting.WindowFrame = function(titleBar, disconnectCallback) {
/** @private {remoting.DesktopConnectedView} */
this.desktopConnectedView_ = null;
@@ -49,7 +51,7 @@ remoting.WindowFrame = function(titleBar) {
* @type {Array<{cls:string, fn: function()}>}
*/
var handlers = [
- { cls: 'window-disconnect', fn: this.disconnectSession_.bind(this) },
+ { cls: 'window-disconnect', fn: disconnectCallback },
{ cls: 'window-maximize-restore',
fn: this.maximizeOrRestoreWindow_.bind(this) },
{ cls: 'window-minimize', fn: this.minimizeWindow_.bind(this) },
@@ -127,13 +129,6 @@ remoting.WindowFrame.prototype.getClientArea = function() {
/**
* @private
*/
-remoting.WindowFrame.prototype.disconnectSession_ = function() {
- remoting.app.disconnect();
-};
-
-/**
- * @private
- */
remoting.WindowFrame.prototype.maximizeOrRestoreWindow_ = function() {
/** @type {boolean} */
var restore =