OLD | NEW |
1 /* Copyright 2013 The Chromium Authors. All rights reserved. | 1 /* Copyright 2013 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 /** | 6 /** |
7 * @fileoverview | 7 * @fileoverview |
8 * The application side of the application/sandbox WCS interface, used by the | 8 * The application side of the application/sandbox WCS interface, used by the |
9 * application to exchange messages with the sandbox. | 9 * application to exchange messages with the sandbox. |
10 */ | 10 */ |
11 | 11 |
12 'use strict'; | 12 'use strict'; |
13 | 13 |
14 /** @suppress {duplicate} */ | 14 /** @suppress {duplicate} */ |
15 var remoting = remoting || {}; | 15 var remoting = remoting || {}; |
16 | 16 |
17 /** | 17 /** |
18 * @param {Window} sandbox The Javascript Window object representing the | 18 * @param {Window} sandbox The Javascript Window object representing the |
19 * sandboxed WCS driver. | 19 * sandboxed WCS driver. |
20 * @constructor | 20 * @constructor |
21 */ | 21 */ |
22 remoting.WcsSandboxContainer = function(sandbox) { | 22 remoting.WcsSandboxContainer = function(sandbox) { |
23 this.sandbox_ = sandbox; | 23 this.sandbox_ = sandbox; |
24 /** @type {?function(string):void} */ | 24 /** @type {?function(string):void} */ |
25 this.onReady_ = null; | 25 this.onLocalJid_ = null; |
26 /** @type {?function(remoting.Error):void} */ | 26 /** @type {?function(remoting.Error):void} */ |
27 this.onError_ = null; | 27 this.onError_ = null; |
28 /** @type {?function(string):void} */ | 28 /** @type {?function(string):void} */ |
29 this.onIq_ = null; | 29 this.onIq_ = null; |
30 /** @type {Object.<number, XMLHttpRequest>} */ | 30 /** @type {Object.<number, XMLHttpRequest>} */ |
31 this.pendingXhrs_ = {}; | 31 this.pendingXhrs_ = {}; |
32 | 32 |
33 window.addEventListener('message', this.onMessage_.bind(this), false); | 33 window.addEventListener('message', this.onMessage_.bind(this), false); |
34 }; | 34 }; |
35 | 35 |
36 /** | 36 /** |
37 * @param {?function(string):void} onReady Callback invoked with the client JID | 37 * @param {?function(string):void} onLocalJid Callback invoked with the client |
38 * when the WCS code has loaded. | 38 * JID when the WCS code has loaded. Note that this may be called more than |
| 39 * once (potentially with a different JID) if the WCS node is reloaded for |
| 40 * any reason. |
39 * @return {void} Nothing. | 41 * @return {void} Nothing. |
40 */ | 42 */ |
41 remoting.WcsSandboxContainer.prototype.setOnReady = function(onReady) { | 43 remoting.WcsSandboxContainer.prototype.setOnLocalJid = function(onLocalJid) { |
42 this.onReady_ = onReady; | 44 this.onLocalJid_ = onLocalJid; |
43 }; | 45 }; |
44 | 46 |
45 /** | 47 /** |
46 * @param {?function(remoting.Error):void} onError Callback invoked if the WCS | 48 * @param {?function(remoting.Error):void} onError Callback invoked if the WCS |
47 * code cannot be loaded. | 49 * code cannot be loaded. |
48 * @return {void} Nothing. | 50 * @return {void} Nothing. |
49 */ | 51 */ |
50 remoting.WcsSandboxContainer.prototype.setOnError = function(onError) { | 52 remoting.WcsSandboxContainer.prototype.setOnError = function(onError) { |
51 this.onError_ = onError; | 53 this.onError_ = onError; |
52 }; | 54 }; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 }; | 87 }; |
86 | 88 |
87 /** | 89 /** |
88 * Event handler to process messages from the sandbox. | 90 * Event handler to process messages from the sandbox. |
89 * | 91 * |
90 * @param {Event} event | 92 * @param {Event} event |
91 */ | 93 */ |
92 remoting.WcsSandboxContainer.prototype.onMessage_ = function(event) { | 94 remoting.WcsSandboxContainer.prototype.onMessage_ = function(event) { |
93 switch (event.data['command']) { | 95 switch (event.data['command']) { |
94 | 96 |
95 case 'onReady': | 97 case 'onLocalJid': |
96 /** @type {string} */ | 98 /** @type {string} */ |
97 var clientJid = event.data['clientJid']; | 99 var clientJid = event.data['clientJid']; |
98 if (clientJid === undefined) { | 100 if (clientJid === undefined) { |
99 console.error('onReady: missing client JID'); | 101 console.error('onReady: missing client JID'); |
100 break; | 102 break; |
101 } | 103 } |
102 if (this.onReady_) { | 104 if (this.onLocalJid_) { |
103 this.onReady_(clientJid); | 105 this.onLocalJid_(clientJid); |
104 } | 106 } |
105 break; | 107 break; |
106 | 108 |
107 case 'onError': | 109 case 'onError': |
108 /** @type {remoting.Error} */ | 110 /** @type {remoting.Error} */ |
109 var error = event.data['error']; | 111 var error = event.data['error']; |
110 if (error === undefined) { | 112 if (error === undefined) { |
111 console.error('onError: missing error code'); | 113 console.error('onError: missing error code'); |
112 break; | 114 break; |
113 } | 115 } |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 'xhr': sanitizeXhr_(xhr) | 237 'xhr': sanitizeXhr_(xhr) |
236 }; | 238 }; |
237 this.sandbox_.postMessage(message, '*'); | 239 this.sandbox_.postMessage(message, '*'); |
238 if (xhr.readyState == 4) { | 240 if (xhr.readyState == 4) { |
239 delete this.pendingXhrs_[id]; | 241 delete this.pendingXhrs_[id]; |
240 } | 242 } |
241 } | 243 } |
242 | 244 |
243 /** @type {remoting.WcsSandboxContainer} */ | 245 /** @type {remoting.WcsSandboxContainer} */ |
244 remoting.wcsSandbox = null; | 246 remoting.wcsSandbox = null; |
OLD | NEW |