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

Side by Side Diff: remoting/webapp/client_session.js

Issue 469453003: Cleanup client plugin handling code in the webapp. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « remoting/webapp/client_plugin.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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview 6 * @fileoverview
7 * Class handling creation and teardown of a remoting client session. 7 * Class handling creation and teardown of a remoting client session.
8 * 8 *
9 * The ClientSession class controls lifetime of the client plugin 9 * The ClientSession class controls lifetime of the client plugin
10 * object and provides the plugin with the functionality it needs to 10 * object and provides the plugin with the functionality it needs to
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 remoting.ClientSession.STATS_KEY_DECODE_LATENCY = 'decodeLatency'; 349 remoting.ClientSession.STATS_KEY_DECODE_LATENCY = 'decodeLatency';
350 remoting.ClientSession.STATS_KEY_RENDER_LATENCY = 'renderLatency'; 350 remoting.ClientSession.STATS_KEY_RENDER_LATENCY = 'renderLatency';
351 remoting.ClientSession.STATS_KEY_ROUNDTRIP_LATENCY = 'roundtripLatency'; 351 remoting.ClientSession.STATS_KEY_ROUNDTRIP_LATENCY = 'roundtripLatency';
352 352
353 // Keys for per-host settings. 353 // Keys for per-host settings.
354 remoting.ClientSession.KEY_REMAP_KEYS = 'remapKeys'; 354 remoting.ClientSession.KEY_REMAP_KEYS = 'remapKeys';
355 remoting.ClientSession.KEY_RESIZE_TO_CLIENT = 'resizeToClient'; 355 remoting.ClientSession.KEY_RESIZE_TO_CLIENT = 'resizeToClient';
356 remoting.ClientSession.KEY_SHRINK_TO_FIT = 'shrinkToFit'; 356 remoting.ClientSession.KEY_SHRINK_TO_FIT = 'shrinkToFit';
357 357
358 /** 358 /**
359 * The id of the client plugin
360 *
361 * @const
362 */
363 remoting.ClientSession.prototype.PLUGIN_ID = 'session-client-plugin';
364
365 /**
366 * Set of capabilities for which hasCapability_() can be used to test. 359 * Set of capabilities for which hasCapability_() can be used to test.
367 * 360 *
368 * @enum {string} 361 * @enum {string}
369 */ 362 */
370 remoting.ClientSession.Capability = { 363 remoting.ClientSession.Capability = {
371 // When enabled this capability causes the client to send its screen 364 // When enabled this capability causes the client to send its screen
372 // resolution to the host once connection has been established. See 365 // resolution to the host once connection has been established. See
373 // this.plugin_.notifyClientResolution(). 366 // this.plugin_.notifyClientResolution().
374 SEND_INITIAL_RESOLUTION: 'sendInitialResolution', 367 SEND_INITIAL_RESOLUTION: 'sendInitialResolution',
375 RATE_LIMIT_RESIZE_REQUESTS: 'rateLimitResizeRequests', 368 RATE_LIMIT_RESIZE_REQUESTS: 'rateLimitResizeRequests',
(...skipping 15 matching lines...) Expand all
391 * @private 384 * @private
392 */ 385 */
393 remoting.ClientSession.prototype.hasCapability_ = function(capability) { 386 remoting.ClientSession.prototype.hasCapability_ = function(capability) {
394 if (this.capabilities_ == null) 387 if (this.capabilities_ == null)
395 return false; 388 return false;
396 389
397 return this.capabilities_.indexOf(capability) > -1; 390 return this.capabilities_.indexOf(capability) > -1;
398 }; 391 };
399 392
400 /** 393 /**
401 * @param {string} id Id to use for the plugin element .
402 * @param {function(string, string):boolean} onExtensionMessage The handler for
403 * protocol extension messages. Returns true if a message is recognized;
404 * false otherwise.
405 * @return {remoting.ClientPlugin} Create plugin object for the locally
406 * installed plugin.
407 */
408 remoting.ClientSession.prototype.createClientPlugin_ =
409 function(id, onExtensionMessage) {
410 var plugin = /** @type {remoting.ViewerPlugin} */
411 document.createElement('embed');
412
413 plugin.id = id;
414 if (remoting.settings.CLIENT_PLUGIN_TYPE == 'pnacl') {
415 plugin.src = 'remoting_client_pnacl.nmf';
416 plugin.type = 'application/x-pnacl';
417 } else if (remoting.settings.CLIENT_PLUGIN_TYPE == 'nacl') {
418 plugin.src = 'remoting_client_nacl.nmf';
419 plugin.type = 'application/x-nacl';
420 } else {
421 plugin.src = 'about://none';
422 plugin.type = 'application/vnd.chromium.remoting-viewer';
423 }
424
425 plugin.width = 0;
426 plugin.height = 0;
427 plugin.tabIndex = 0; // Required, otherwise focus() doesn't work.
428 this.container_.querySelector('.client-plugin-container').appendChild(plugin);
429
430 return new remoting.ClientPlugin(plugin, onExtensionMessage);
431 };
432
433 /**
434 * Callback function called when the plugin element gets focus. 394 * Callback function called when the plugin element gets focus.
435 */ 395 */
436 remoting.ClientSession.prototype.pluginGotFocus_ = function() { 396 remoting.ClientSession.prototype.pluginGotFocus_ = function() {
437 remoting.clipboard.initiateToHost(); 397 remoting.clipboard.initiateToHost();
438 }; 398 };
439 399
440 /** 400 /**
441 * Callback function called when the plugin element loses focus. 401 * Callback function called when the plugin element loses focus.
442 */ 402 */
443 remoting.ClientSession.prototype.pluginLostFocus_ = function() { 403 remoting.ClientSession.prototype.pluginLostFocus_ = function() {
444 if (this.plugin_) { 404 if (this.plugin_) {
445 // Release all keys to prevent them becoming 'stuck down' on the host. 405 // Release all keys to prevent them becoming 'stuck down' on the host.
446 this.plugin_.releaseAllKeys(); 406 this.plugin_.releaseAllKeys();
447 if (this.plugin_.element()) { 407 if (this.plugin_.element()) {
448 // Focus should stay on the element, not (for example) the toolbar. 408 // Focus should stay on the element, not (for example) the toolbar.
449 // Due to crbug.com/246335, we can't restore the focus immediately, 409 // Due to crbug.com/246335, we can't restore the focus immediately,
450 // otherwise the plugin gets confused about whether or not it has focus. 410 // otherwise the plugin gets confused about whether or not it has focus.
451 window.setTimeout( 411 window.setTimeout(
452 this.plugin_.element().focus.bind(this.plugin_.element()), 412 this.plugin_.element().focus.bind(this.plugin_.element()), 0);
453 0);
454 } 413 }
455 } 414 }
456 }; 415 };
457 416
458 /** 417 /**
459 * Adds <embed> element to |container| and readies the sesion object. 418 * Adds <embed> element to |container| and readies the sesion object.
460 * 419 *
461 * @param {function(string, string):boolean} onExtensionMessage The handler for 420 * @param {function(string, string):boolean} onExtensionMessage The handler for
462 * protocol extension messages. Returns true if a message is recognized; 421 * protocol extension messages. Returns true if a message is recognized;
463 * false otherwise. 422 * false otherwise.
464 */ 423 */
465 remoting.ClientSession.prototype.createPluginAndConnect = 424 remoting.ClientSession.prototype.createPluginAndConnect =
466 function(onExtensionMessage) { 425 function(onExtensionMessage) {
467 this.plugin_ = this.createClientPlugin_(this.PLUGIN_ID, onExtensionMessage); 426 this.plugin_ = new remoting.ClientPlugin(
427 this.container_.querySelector('.client-plugin-container'),
428 onExtensionMessage);
468 remoting.HostSettings.load(this.hostId_, 429 remoting.HostSettings.load(this.hostId_,
469 this.onHostSettingsLoaded_.bind(this)); 430 this.onHostSettingsLoaded_.bind(this));
470 }; 431 };
471 432
472 /** 433 /**
473 * @param {Object.<string>} options The current options for the host, or {} 434 * @param {Object.<string>} options The current options for the host, or {}
474 * if this client has no saved settings for the host. 435 * if this client has no saved settings for the host.
475 * @private 436 * @private
476 */ 437 */
477 remoting.ClientSession.prototype.onHostSettingsLoaded_ = function(options) { 438 remoting.ClientSession.prototype.onHostSettingsLoaded_ = function(options) {
(...skipping 30 matching lines...) Expand all
508 this.plugin_.element().addEventListener( 469 this.plugin_.element().addEventListener(
509 'blur', this.callPluginLostFocus_, false); 470 'blur', this.callPluginLostFocus_, false);
510 this.plugin_.element().focus(); 471 this.plugin_.element().focus();
511 }; 472 };
512 473
513 /** 474 /**
514 * @param {remoting.Error} error 475 * @param {remoting.Error} error
515 */ 476 */
516 remoting.ClientSession.prototype.resetWithError_ = function(error) { 477 remoting.ClientSession.prototype.resetWithError_ = function(error) {
517 this.plugin_.cleanup(); 478 this.plugin_.cleanup();
518 delete this.plugin_; 479 this.plugin_ = null;
519 this.error_ = error; 480 this.error_ = error;
520 this.setState_(remoting.ClientSession.State.FAILED); 481 this.setState_(remoting.ClientSession.State.FAILED);
521 } 482 }
522 483
523 /** 484 /**
524 * @param {boolean} initialized 485 * @param {boolean} initialized
525 */ 486 */
526 remoting.ClientSession.prototype.onPluginInitialized_ = function(initialized) { 487 remoting.ClientSession.prototype.onPluginInitialized_ = function(initialized) {
527 if (!initialized) { 488 if (!initialized) {
528 console.error('ERROR: remoting plugin not loaded'); 489 console.error('ERROR: remoting plugin not loaded');
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 * @return {{top: number, left:number}} The top-left corner of the plugin. 1532 * @return {{top: number, left:number}} The top-left corner of the plugin.
1572 */ 1533 */
1573 remoting.ClientSession.prototype.getPluginPositionForTesting = function() { 1534 remoting.ClientSession.prototype.getPluginPositionForTesting = function() {
1574 var plugin = this.plugin_.element(); 1535 var plugin = this.plugin_.element();
1575 var style = plugin.style; 1536 var style = plugin.style;
1576 return { 1537 return {
1577 top: parseFloat(style.marginTop), 1538 top: parseFloat(style.marginTop),
1578 left: parseFloat(style.marginLeft) 1539 left: parseFloat(style.marginLeft)
1579 }; 1540 };
1580 }; 1541 };
OLDNEW
« no previous file with comments | « remoting/webapp/client_plugin.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698