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 * The global object. | 6 * The global object. |
7 * @type {!Object} | 7 * @type {!Object} |
8 * @const | 8 * @const |
9 */ | 9 */ |
10 var global = this; | 10 var global = this; |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 /** | 324 /** |
325 * The named method the WebUI handler calls directly in response to a | 325 * The named method the WebUI handler calls directly in response to a |
326 * chrome.send call that expects a response. The handler requires no knowledge | 326 * chrome.send call that expects a response. The handler requires no knowledge |
327 * of the specific name of this method, as the name is passed to the handler | 327 * of the specific name of this method, as the name is passed to the handler |
328 * as the first argument in the arguments list of chrome.send. The handler | 328 * as the first argument in the arguments list of chrome.send. The handler |
329 * must pass the ID, also sent via the chrome.send arguments list, as the | 329 * must pass the ID, also sent via the chrome.send arguments list, as the |
330 * first argument of the JS invocation; additionally, the handler may | 330 * first argument of the JS invocation; additionally, the handler may |
331 * supply any number of other arguments that will be included in the response. | 331 * supply any number of other arguments that will be included in the response. |
332 * @param {string} id The unique ID identifying the Promise this response is | 332 * @param {string} id The unique ID identifying the Promise this response is |
333 * tied to. | 333 * tied to. |
334 * @param {...*} var_args Variable number of arguments to be included in the | 334 * @param {*} response The response as sent from C++. |
335 * response. | |
336 */ | 335 */ |
337 function webUIResponse(id, var_args) { | 336 function webUIResponse(id, response) { |
338 var resolverFn = chromeSendResolverMap[id]; | 337 var resolverFn = chromeSendResolverMap[id]; |
339 delete chromeSendResolverMap[id]; | 338 delete chromeSendResolverMap[id]; |
340 // Promise#resolve accepts only one value, therefore wrapping all arguments | 339 resolverFn(response); |
341 // passed from C++ to JS in an array. | |
342 resolverFn(Array.prototype.slice.call(arguments, 1)); | |
343 } | 340 } |
344 | 341 |
345 /** | 342 /** |
346 * A variation of chrome.send, suitable for messages that expect a single | 343 * A variation of chrome.send, suitable for messages that expect a single |
347 * response from C++. | 344 * response from C++. |
348 * @param {string} methodName The name of the WebUI handler API. | 345 * @param {string} methodName The name of the WebUI handler API. |
349 * @param {...*} var_args Varibale number of arguments to be forwarded to the | 346 * @param {...*} var_args Varibale number of arguments to be forwarded to the |
350 * C++ call. | 347 * C++ call. |
351 * @return {!Promise} | 348 * @return {!Promise} |
352 */ | 349 */ |
353 function sendWithPromise(methodName, var_args) { | 350 function sendWithPromise(methodName, var_args) { |
354 var args = Array.prototype.slice.call(arguments, 1); | 351 var args = Array.prototype.slice.call(arguments, 1); |
355 return new Promise(function(resolve, reject) { | 352 return new Promise(function(resolve, reject) { |
356 var id = methodName + '_' + createUid(); | 353 var id = methodName + '_' + createUid(); |
357 chromeSendResolverMap[id] = resolve; | 354 chromeSendResolverMap[id] = resolve; |
358 chrome.send(methodName, ['cr.webUIResponse', id].concat(args)); | 355 chrome.send(methodName, [id].concat(args)); |
359 }); | 356 }); |
360 } | 357 } |
361 | 358 |
362 /** | 359 /** |
363 * A registry of callbacks keyed by event name. Used by addWebUIListener to | 360 * A registry of callbacks keyed by event name. Used by addWebUIListener to |
364 * register listeners. | 361 * register listeners. |
365 * @type {!Object<Array<Function>>} | 362 * @type {!Object<Array<Function>>} |
366 */ | 363 */ |
367 var webUIListenerMap = Object.create(null); | 364 var webUIListenerMap = Object.create(null); |
368 | 365 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 get isChromeOS() { | 425 get isChromeOS() { |
429 return /CrOS/.test(navigator.userAgent); | 426 return /CrOS/.test(navigator.userAgent); |
430 }, | 427 }, |
431 | 428 |
432 /** Whether this is on vanilla Linux (not chromeOS). */ | 429 /** Whether this is on vanilla Linux (not chromeOS). */ |
433 get isLinux() { | 430 get isLinux() { |
434 return /Linux/.test(navigator.userAgent); | 431 return /Linux/.test(navigator.userAgent); |
435 }, | 432 }, |
436 }; | 433 }; |
437 }(); | 434 }(); |
OLD | NEW |