OLD | NEW |
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 that wraps low-level details of interacting with the client plugin. | 7 * Class that wraps low-level details of interacting with the client plugin. |
8 * | 8 * |
9 * This abstracts a <embed> element and controls the plugin which does | 9 * This abstracts a <embed> element and controls the plugin which does |
10 * the actual remoting work. It also handles differences between | 10 * the actual remoting work. It also handles differences between |
(...skipping 23 matching lines...) Expand all Loading... |
34 /** @param {string} message Log message. */ | 34 /** @param {string} message Log message. */ |
35 this.onDebugMessageHandler = function (message) {}; | 35 this.onDebugMessageHandler = function (message) {}; |
36 /** | 36 /** |
37 * @param {number} state The connection state. | 37 * @param {number} state The connection state. |
38 * @param {number} error The error code, if any. | 38 * @param {number} error The error code, if any. |
39 */ | 39 */ |
40 this.onConnectionStatusUpdateHandler = function(state, error) {}; | 40 this.onConnectionStatusUpdateHandler = function(state, error) {}; |
41 /** @param {boolean} ready Connection ready state. */ | 41 /** @param {boolean} ready Connection ready state. */ |
42 this.onConnectionReadyHandler = function(ready) {}; | 42 this.onConnectionReadyHandler = function(ready) {}; |
43 this.onDesktopSizeUpdateHandler = function () {}; | 43 this.onDesktopSizeUpdateHandler = function () {}; |
| 44 this.fetchPinHandler = function () {}; |
44 | 45 |
45 /** @type {number} */ | 46 /** @type {number} */ |
46 this.pluginApiVersion_ = -1; | 47 this.pluginApiVersion_ = -1; |
47 /** @type {Array.<string>} */ | 48 /** @type {Array.<string>} */ |
48 this.pluginApiFeatures_ = []; | 49 this.pluginApiFeatures_ = []; |
49 /** @type {number} */ | 50 /** @type {number} */ |
50 this.pluginApiMinVersion_ = -1; | 51 this.pluginApiMinVersion_ = -1; |
51 /** @type {boolean} */ | 52 /** @type {boolean} */ |
52 this.helloReceived_ = false; | 53 this.helloReceived_ = false; |
53 /** @type {function(boolean)|null} */ | 54 /** @type {function(boolean)|null} */ |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 if (remoting.clientSession) { | 199 if (remoting.clientSession) { |
199 remoting.clientSession.onFirstFrameReceived(); | 200 remoting.clientSession.onFirstFrameReceived(); |
200 } | 201 } |
201 } else if (message.method == 'onConnectionReady') { | 202 } else if (message.method == 'onConnectionReady') { |
202 if (typeof message.data['ready'] != 'boolean') { | 203 if (typeof message.data['ready'] != 'boolean') { |
203 console.error('Received incorrect onConnectionReady message.'); | 204 console.error('Received incorrect onConnectionReady message.'); |
204 return; | 205 return; |
205 } | 206 } |
206 var ready = /** @type {boolean} */ message.data['ready']; | 207 var ready = /** @type {boolean} */ message.data['ready']; |
207 this.onConnectionReadyHandler(ready); | 208 this.onConnectionReadyHandler(ready); |
| 209 } else if (message.method == 'fetchPin') { |
| 210 this.fetchPinHandler(); |
208 } | 211 } |
209 } | 212 }; |
210 | 213 |
211 /** | 214 /** |
212 * Deletes the plugin. | 215 * Deletes the plugin. |
213 */ | 216 */ |
214 remoting.ClientPluginAsync.prototype.cleanup = function() { | 217 remoting.ClientPluginAsync.prototype.cleanup = function() { |
215 this.plugin.parentNode.removeChild(this.plugin); | 218 this.plugin.parentNode.removeChild(this.plugin); |
216 }; | 219 }; |
217 | 220 |
218 /** | 221 /** |
219 * @return {HTMLEmbedElement} HTML element that correspods to the plugin. | 222 * @return {HTMLEmbedElement} HTML element that correspods to the plugin. |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 */ | 431 */ |
429 remoting.ClientPluginAsync.prototype.pauseAudio = | 432 remoting.ClientPluginAsync.prototype.pauseAudio = |
430 function(pause) { | 433 function(pause) { |
431 if (!this.hasFeature(remoting.ClientPlugin.Feature.PAUSE_AUDIO)) | 434 if (!this.hasFeature(remoting.ClientPlugin.Feature.PAUSE_AUDIO)) |
432 return; | 435 return; |
433 this.plugin.postMessage(JSON.stringify( | 436 this.plugin.postMessage(JSON.stringify( |
434 { method: 'pauseAudio', data: { pause: pause }})); | 437 { method: 'pauseAudio', data: { pause: pause }})); |
435 }; | 438 }; |
436 | 439 |
437 /** | 440 /** |
| 441 * Called when a PIN is obtained from the user. |
| 442 * |
| 443 * @param {string} pin The PIN. |
| 444 */ |
| 445 remoting.ClientPluginAsync.prototype.onPinFetched = |
| 446 function(pin) { |
| 447 if (!this.hasFeature(remoting.ClientPlugin.Feature.ON_PIN_FETCHED)) { |
| 448 return; |
| 449 } |
| 450 this.plugin.postMessage(JSON.stringify( |
| 451 { method: 'onPinFetched', data: { pin: pin }})); |
| 452 }; |
| 453 |
| 454 /** |
| 455 * Tells the plugin to ask for the PIN asynchronously. |
| 456 */ |
| 457 remoting.ClientPluginAsync.prototype.useAsyncPinDialog = |
| 458 function() { |
| 459 if (!this.hasFeature(remoting.ClientPlugin.Feature.USE_ASYNC_PIN_DIALOG)) { |
| 460 return; |
| 461 } |
| 462 this.plugin.postMessage(JSON.stringify( |
| 463 { method: 'useAsyncPinDialog', data: {} })); |
| 464 }; |
| 465 |
| 466 /** |
438 * If we haven't yet received a "hello" message from the plugin, change its | 467 * If we haven't yet received a "hello" message from the plugin, change its |
439 * size so that the user can confirm it if click-to-play is enabled, or can | 468 * size so that the user can confirm it if click-to-play is enabled, or can |
440 * see the "this plugin is disabled" message if it is actually disabled. | 469 * see the "this plugin is disabled" message if it is actually disabled. |
441 * @private | 470 * @private |
442 */ | 471 */ |
443 remoting.ClientPluginAsync.prototype.showPluginForClickToPlay_ = function() { | 472 remoting.ClientPluginAsync.prototype.showPluginForClickToPlay_ = function() { |
444 if (!this.helloReceived_) { | 473 if (!this.helloReceived_) { |
445 var width = 200; | 474 var width = 200; |
446 var height = 200; | 475 var height = 200; |
447 this.plugin.width = width; | 476 this.plugin.width = width; |
448 this.plugin.height = height; | 477 this.plugin.height = height; |
449 // Center the plugin just underneath the "Connnecting..." dialog. | 478 // Center the plugin just underneath the "Connnecting..." dialog. |
450 var parentNode = this.plugin.parentNode; | 479 var parentNode = this.plugin.parentNode; |
451 var dialog = document.getElementById('client-dialog'); | 480 var dialog = document.getElementById('client-dialog'); |
452 var dialogRect = dialog.getBoundingClientRect(); | 481 var dialogRect = dialog.getBoundingClientRect(); |
453 parentNode.style.top = (dialogRect.bottom + 16) + 'px'; | 482 parentNode.style.top = (dialogRect.bottom + 16) + 'px'; |
454 parentNode.style.left = (window.innerWidth - width) / 2 + 'px'; | 483 parentNode.style.left = (window.innerWidth - width) / 2 + 'px'; |
455 } | 484 } |
456 }; | 485 }; |
OLD | NEW |