| Index: extensions/renderer/resources/display_source_custom_bindings.js
|
| diff --git a/extensions/renderer/resources/display_source_custom_bindings.js b/extensions/renderer/resources/display_source_custom_bindings.js
|
| index 13e81670a05ec1f7e25ee0a7618bb06b95069f41..a1345ff1a534b8a260fedc8effedfecbaece75dc 100644
|
| --- a/extensions/renderer/resources/display_source_custom_bindings.js
|
| +++ b/extensions/renderer/resources/display_source_custom_bindings.js
|
| @@ -8,34 +8,62 @@ var binding = require('binding').Binding.create('displaySource');
|
| var chrome = requireNative('chrome').GetChrome();
|
| var lastError = require('lastError');
|
| var natives = requireNative('display_source');
|
| +var logging = requireNative('logging');
|
| +
|
| +var callbacksInfo = {};
|
| +
|
| +function callbackWrapper(callback, method, message) {
|
| + if (callback == undefined)
|
| + return;
|
| +
|
| + try {
|
| + if (message !== null)
|
| + lastError.set('displaySource.startSession', message, null, chrome);
|
| + callback();
|
| + } finally {
|
| + lastError.clear(chrome);
|
| + }
|
| +}
|
| +
|
| +function callCompletionCallback(callbackId, error_message) {
|
| + try {
|
| + var callbackInfo = callbacksInfo[callbackId];
|
| + logging.DCHECK(callbackInfo != null);
|
| + callbackWrapper(callbackInfo.callback, callbackInfo.method, error_message);
|
| + } finally {
|
| + delete callbacksInfo[callbackId];
|
| + }
|
| +}
|
|
|
| binding.registerCustomHook(function(bindingsAPI, extensionId) {
|
| var apiFunctions = bindingsAPI.apiFunctions;
|
| - apiFunctions.setHandleRequest('startSession',
|
| - function(sessionInfo, callback) {
|
| + apiFunctions.setHandleRequest(
|
| + 'startSession', function(sessionInfo, callback) {
|
| try {
|
| - natives.StartSession(sessionInfo);
|
| + var callId = natives.StartSession(sessionInfo, callbackWrapper);
|
| + callbacksInfo[callId] = {
|
| + callback: callback,
|
| + method: 'displaySource.startSession'
|
| + };
|
| } catch (e) {
|
| - lastError.set('displaySource.startSession', e.message, null, chrome);
|
| - } finally {
|
| - if (callback !== undefined)
|
| - callback();
|
| - lastError.clear(chrome);
|
| + callbackWrapper(callback, 'displaySource.startSession', e.message);
|
| }
|
| - });
|
| - apiFunctions.setHandleRequest('terminateSession',
|
| - function(sink_id, callback) {
|
| + });
|
| + apiFunctions.setHandleRequest(
|
| + 'terminateSession', function(sink_id, callback) {
|
| try {
|
| - natives.TerminateSession(sink_id);
|
| + var callId = natives.TerminateSession(sink_id, callbackWrapper);
|
| + callbacksInfo[callId] = {
|
| + callback: callback,
|
| + method: 'displaySource.terminateSession'
|
| + };
|
| } catch (e) {
|
| - lastError.set(
|
| - 'displaySource.terminateSession', e.message, null, chrome);
|
| - } finally {
|
| - if (callback !== undefined)
|
| - callback();
|
| - lastError.clear(chrome);
|
| + callbackWrapper(
|
| + callback, 'displaySource.terminateSession', e.message);
|
| }
|
| - });
|
| + });
|
| });
|
|
|
| exports.$set('binding', binding.generate());
|
| +// Called by C++.
|
| +exports.$set('callCompletionCallback', callCompletionCallback);
|
|
|