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

Unified Diff: remoting/webapp/client_session.js

Issue 13932020: Set the initial resolution of an RDP session to the client screen resolution if it is available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Mac and remoting_unittests. Created 7 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 side-by-side diff with in-line comments
Download patch
Index: remoting/webapp/client_session.js
diff --git a/remoting/webapp/client_session.js b/remoting/webapp/client_session.js
index 5284e53b66a36799f820b146ac6b5a0b8bda6f32..0a417e3e8f1d3565acea830164e787f361be6561 100644
--- a/remoting/webapp/client_session.js
+++ b/remoting/webapp/client_session.js
@@ -228,6 +228,36 @@ remoting.ClientSession.prototype.error_ =
remoting.ClientSession.prototype.PLUGIN_ID = 'session-client-plugin';
/**
+ * Set of capabilities for which hasCapability_() can be used to test.
+ *
+ * @enum {string}
+ */
+remoting.ClientSession.Capability = {
+ ALWAYS_RESIZE_TO_CLIENT: 'alwaysResizeToClient'
+};
+
+/**
+ * The set of capabilities negotiated between the client and host.
+ * @type {!Array.<string>}
Jamie 2013/04/15 22:14:11 You've declared this type as being never null, the
alexeypa (please no reviews) 2013/04/15 23:18:53 Done.
+ * @private
+ */
+remoting.ClientSession.prototype.capabilities_ = null;
+
+/**
+ * @param {remoting.ClientSession.Capability} capability The capability to test
+ * for.
+ * @return {boolean} True if the capability has been negotiated between
+ * the client and host.
+ * @private
+ */
+remoting.ClientSession.prototype.hasCapability_ = function(capability) {
+ if (this.capabilities_ == null)
+ return false;
+
+ return this.capabilities_.indexOf(capability) > -1;
+};
+
+/**
* @param {Element} container The element to add the plugin to.
* @param {string} id Id to use for the plugin element .
* @return {remoting.ClientPlugin} Create plugin object for the locally
@@ -369,6 +399,8 @@ remoting.ClientSession.prototype.onPluginInitialized_ = function(initialized) {
this.onConnectionReady_.bind(this);
this.plugin.onDesktopSizeUpdateHandler =
this.onDesktopSizeChanged_.bind(this);
+ this.plugin.onSetCapabilitiesHandler =
+ this.onSetCapabilities_.bind(this);
this.connectPluginToWcs_();
};
@@ -561,6 +593,15 @@ remoting.ClientSession.prototype.onSetScreenMode_ = function(event) {
};
/**
+ * @return {boolean} True if resize-to-client is enabled.
+ * @private
+ */
+remoting.ClientSession.prototype.isResizingToClient_ = function() {
+ return this.resizeToClient_ || this.hasCapability_(
+ remoting.ClientSession.Capability.ALWAYS_RESIZE_TO_CLIENT);
+}
+
+/**
* Set the shrink-to-fit and resize-to-client flags and save them if this is
* a Me2Me connection.
*
@@ -576,7 +617,7 @@ remoting.ClientSession.prototype.onSetScreenMode_ = function(event) {
*/
remoting.ClientSession.prototype.setScreenMode_ =
function(shrinkToFit, resizeToClient) {
- if (resizeToClient && !this.resizeToClient_) {
+ if (resizeToClient && !this.isResizingToClient_()) {
this.plugin.notifyClientResolution(window.innerWidth,
window.innerHeight,
window.devicePixelRatio);
@@ -734,7 +775,7 @@ remoting.ClientSession.prototype.onConnectionStatusUpdate_ =
if (status == remoting.ClientSession.State.CONNECTED) {
this.setFocusHandlers_();
this.onDesktopSizeChanged_();
- if (this.resizeToClient_) {
+ if (this.isResizingToClient_()) {
this.plugin.notifyClientResolution(window.innerWidth,
window.innerHeight,
window.devicePixelRatio);
@@ -761,6 +802,30 @@ remoting.ClientSession.prototype.onConnectionReady_ = function(ready) {
}
/**
+ * This is a callback that gets called when the plugin report capabilities
+ * negotiated with the host.
+ *
+ * @param {Array.<string>} capabilities The set of capabilities negotiated
+ * between the client and host.
+ * @return {void} Nothing.
+ * @private
+ */
+remoting.ClientSession.prototype.onSetCapabilities_ = function(capabilities) {
+ if (this.capabilities_ != null) {
+ console.error('ERROR: onSetCapabilities_() is called more than once');
+ return;
+ }
+
+ this.capabilities_ = capabilities;
+ if (this.isResizingToClient_()) {
+ this.onDesktopSizeChanged_();
+ this.plugin.notifyClientResolution(window.innerWidth,
+ window.innerHeight,
+ window.devicePixelRatio);
+ }
+};
+
+/**
* @private
* @param {remoting.ClientSession.State} newState The new state for the session.
* @return {void} Nothing.
@@ -805,7 +870,7 @@ remoting.ClientSession.prototype.onResize = function() {
// Defer notifying the host of the change until the window stops resizing, to
// avoid overloading the control channel with notifications.
- if (this.resizeToClient_) {
+ if (this.isResizingToClient_()) {
this.notifyClientResolutionTimer_ = window.setTimeout(
this.plugin.notifyClientResolution.bind(this.plugin,
window.innerWidth,
« remoting/webapp/client_plugin_async.js ('K') | « remoting/webapp/client_plugin_async.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698