11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @fileoverview
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Interface abstracting the ClientPlugin functionality.
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)'use strict';
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** @suppress {duplicate} */
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var remoting = remoting || {};
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @interface
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @extends {base.Disposable}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin = function() {};
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {number} The width of the remote desktop, in pixels.
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.getDesktopWidth = function() {};
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {number} The height of the remote desktop, in pixels.
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.getDesktopHeight = function() {};
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {number} The x-DPI of the remote desktop.
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.getDesktopXDpi = function() {};
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {number} The y-DPI of the remote desktop.
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.getDesktopYDpi = function() {};
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {HTMLElement} The DOM element representing the remote session.
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.element = function() {};
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function():void} onDone Completion callback.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.initialize = function(onDone) {};
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} hostJid The jid of the host to connect to.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} hostPublicKey The base64 encoded version of the host's
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     public key.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} localJid Local jid.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} sharedSecret The access code for IT2Me or the PIN
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     for Me2Me.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} authenticationMethods Comma-separated list of
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     authentication methods the client should attempt to use.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {string} authenticationTag A host-specific tag to mix into
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *     authentication hashes.
62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @param {string} clientPairingId For paired Me2Me connections, the
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *     pairing id for this client, as issued by the host.
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * @param {string} clientPairedSecret For paired Me2Me connections, the
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) *     paired secret for this client, as issued by the host.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)remoting.ClientPlugin.prototype.connect = function(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    hostJid, hostPublicKey, localJid, sharedSecret,
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    authenticationMethods, authenticationTag,
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    clientPairingId, clientPairedSecret) {};
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} key The keycode to inject.
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {boolean} down True for press; false for a release.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.injectKeyEvent =
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(key, down) {};
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} from
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} to
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.remapKey = function(from, to) {};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Release all keys currently being pressed.
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.releaseAllKeys = function() {};
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} width
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} height
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {number} dpi
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.notifyClientResolution =
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(width, height, dpi) {};
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} iq
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.onIncomingIq = function(iq) {};
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {boolean} True if the web-app and plugin are compatible.
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.isSupportedVersion = function() {};
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {remoting.ClientPlugin.Feature} feature
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {boolean} True if the plugin support the specified feature.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.hasFeature = function(feature) {};
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Enable MediaSource rendering via the specified renderer.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {remoting.MediaSourceRenderer} mediaSourceRenderer
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.enableMediaSourceRendering =
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(mediaSourceRenderer) {};
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Sends a clipboard item to the host.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} mimeType The MIME type of the clipboard item.
1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} item The clipboard item.
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.sendClipboardItem =
1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(mimeType, item) {};
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Tell the plugin to request a PIN asynchronously.
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.useAsyncPinDialog = function() {};
13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/**
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Request that this client be paired with the current host.
13846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} clientName The human-readable name of the client.
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string, string):void} onDone Callback to receive the
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     client id and shared secret when they are available.
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.requestPairing =
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(clientName, onDone) {};
14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/**
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Called when a PIN is obtained from the user.
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @param {string} pin The PIN.
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.onPinFetched = function(pin) {};
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/**
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Sets the third party authentication token and shared secret.
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} token The token received from the token URL.
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} sharedSecret Shared secret received from the token URL.
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.onThirdPartyTokenFetched =
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(token, sharedSecret) {};
161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)/**
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {boolean} pause True to pause the audio stream; false to resume it.
164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) */
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.pauseAudio = function(pause) {};
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {boolean} pause True to pause the video stream; false to resume it.
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.pauseVideo = function(pause) {};
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {remoting.ClientSession.PerfStats} A summary of the connection
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     performance.
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.getPerfStats = function() {};
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Send an extension message to the host.
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} name
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} data
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)remoting.ClientPlugin.prototype.sendClientMessage =
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(name, data) {};
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string):void} handler Callback for sending an IQ stanza.
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setOnOutgoingIqHandler =
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string):void} handler Callback for logging debug messages.
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setOnDebugMessageHandler =
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(number, number):void} handler Callback for connection status
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     update notifications. The first parameter is the connection state; the
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     second is the error code, if any.
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setConnectionStatusUpdateHandler =
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(boolean):void} handler Callback for connection readiness
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     notifications.
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setConnectionReadyHandler =
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function():void} handler Callback for desktop size change
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     notifications.
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setDesktopSizeUpdateHandler =
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(!Array.<string>):void} handler Callback to inform of
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     capabilities negotiated between host and client.
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setCapabilitiesHandler =
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string):void} handler Callback for processing security key
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     (Gnubby) protocol messages.
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setGnubbyAuthHandler =
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string):void} handler Callback for processing Cast protocol
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     messages.
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setCastExtensionHandler =
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string, number, number):void} handler Callback for
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     processing large mouse cursor images. The first parameter is a data:
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     URL encoding the mouse cursor; the second and third parameters are
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     the cursor hotspot's x- and y-coordinates, respectively.
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setMouseCursorHandler =
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string, string, string):void} handler Callback for
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     fetching third-party tokens. The first parameter is the token URL; the
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     second is the public key of the host; the third is the OAuth2 scope
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     being requested.
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setFetchThirdPartyTokenHandler =
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(boolean):void} handler Callback for fetching a PIN from
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     the user. The parameter is true if PIN pairing is supported by the
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     host, or false otherwise.
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.prototype.setFetchPinHandler =
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(handler) {};
2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Set of features for which hasFeature() can be used to test.
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @enum {string}
2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.Feature = {
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  INJECT_KEY_EVENT: 'injectKeyEvent',
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NOTIFY_CLIENT_RESOLUTION: 'notifyClientResolution',
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASYNC_PIN: 'asyncPin',
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  PAUSE_VIDEO: 'pauseVideo',
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  PAUSE_AUDIO: 'pauseAudio',
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  REMAP_KEY: 'remapKey',
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SEND_CLIPBOARD_ITEM: 'sendClipboardItem',
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  THIRD_PARTY_AUTH: 'thirdPartyAuth',
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TRAP_KEY: 'trapKey',
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  PINLESS_AUTH: 'pinlessAuth',
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXTENSION_MESSAGE: 'extensionMessage',
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  MEDIA_SOURCE_RENDERING: 'mediaSourceRendering',
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  VIDEO_CONTROL: 'videoControl'
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @interface
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPluginFactory = function() {};
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {Element} container The container for the embed element.
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {function(string, string):boolean} onExtensionMessage The handler for
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     protocol extension messages. Returns true if a message is recognized;
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci *     false otherwise.
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @return {remoting.ClientPlugin} A new client plugin instance.
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPluginFactory.prototype.createPlugin =
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    function(container, onExtensionMessage) {};
305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)/**
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Preload the plugin to make instantiation faster when the user tries
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * to connect.
309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPluginFactory.prototype.preloadPlugin = function() {};
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/**
3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @type {remoting.ClientPluginFactory}
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */
3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciremoting.ClientPlugin.factory = null;
316