blob: 27111715f0c67807b2774e317e4659897388b3a8 [file] [log] [blame]
mikhail.pozdnyakov79486f1c2015-12-09 12:09:401// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Custom binding for the Display Source API.
6
Devlin Cronin3e91d7d32017-08-17 00:52:067var binding = apiBridge || require('binding').Binding.create('displaySource');
mikhail.pozdnyakov79486f1c2015-12-09 12:09:408var chrome = requireNative('chrome').GetChrome();
mikhail.pozdnyakov79486f1c2015-12-09 12:09:409var natives = requireNative('display_source');
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2410var logging = requireNative('logging');
11
Devlin Cronin3e91d7d32017-08-17 00:52:0612var jsLastError = bindingUtil ? undefined : require('lastError');
13function setLastError(name, message) {
14 if (bindingUtil)
15 bindingUtil.setLastError(message);
16 else
17 jsLastError.set(name, message, null, chrome);
18}
19function clearLastError() {
20 if (bindingUtil)
21 bindingUtil.clearLastError();
22 else
23 jsLastError.clear(chrome);
24}
25
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2426var callbacksInfo = {};
27
28function callbackWrapper(callback, method, message) {
29 if (callback == undefined)
30 return;
31
32 try {
33 if (message !== null)
Devlin Cronin3e91d7d32017-08-17 00:52:0634 setLastError(method, message);
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2435 callback();
36 } finally {
Devlin Cronin3e91d7d32017-08-17 00:52:0637 clearLastError();
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2438 }
39}
40
41function callCompletionCallback(callbackId, error_message) {
42 try {
43 var callbackInfo = callbacksInfo[callbackId];
44 logging.DCHECK(callbackInfo != null);
45 callbackWrapper(callbackInfo.callback, callbackInfo.method, error_message);
46 } finally {
47 delete callbacksInfo[callbackId];
48 }
49}
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4050
51binding.registerCustomHook(function(bindingsAPI, extensionId) {
52 var apiFunctions = bindingsAPI.apiFunctions;
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2453 apiFunctions.setHandleRequest(
54 'startSession', function(sessionInfo, callback) {
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4055 try {
mikhail.pozdnyakovef88b052016-02-26 10:48:1056 var callId = natives.StartSession(sessionInfo);
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2457 callbacksInfo[callId] = {
58 callback: callback,
59 method: 'displaySource.startSession'
60 };
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4061 } catch (e) {
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2462 callbackWrapper(callback, 'displaySource.startSession', e.message);
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4063 }
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2464 });
65 apiFunctions.setHandleRequest(
66 'terminateSession', function(sink_id, callback) {
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4067 try {
mikhail.pozdnyakovef88b052016-02-26 10:48:1068 var callId = natives.TerminateSession(sink_id);
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2469 callbacksInfo[callId] = {
70 callback: callback,
71 method: 'displaySource.terminateSession'
72 };
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4073 } catch (e) {
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2474 callbackWrapper(
75 callback, 'displaySource.terminateSession', e.message);
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4076 }
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2477 });
mikhail.pozdnyakov79486f1c2015-12-09 12:09:4078});
79
Devlin Cronin3e91d7d32017-08-17 00:52:0680if (!apiBridge)
81 exports.$set('binding', binding.generate());
82
mikhail.pozdnyakovef0d3aa82016-02-11 19:42:2483// Called by C++.
84exports.$set('callCompletionCallback', callCompletionCallback);