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
3// found in the LICENSE file.
4
5// Custom binding for the desktopCapture API.
6
7var binding = require('binding').Binding.create('desktopCapture');
8var sendRequest = require('sendRequest').sendRequest;
9var idGenerator = requireNative('id_generator');
10
11binding.registerCustomHook(function(bindingsAPI) {
12  var apiFunctions = bindingsAPI.apiFunctions;
13
14  var pendingRequests = {};
15
16  function onRequestResult(id, result) {
17    if (id in pendingRequests) {
18      var callback = pendingRequests[id];
19      delete pendingRequests[id];
20      callback(result);
21    }
22  }
23
24  apiFunctions.setHandleRequest('chooseDesktopMedia',
25                                function(sources, target_tab, callback) {
26    // |target_tab| is an optional parameter.
27    if (callback === undefined) {
28      callback = target_tab;
29      target_tab = undefined;
30    }
31    var id = idGenerator.GetNextId();
32    pendingRequests[id] = callback;
33    sendRequest(this.name,
34                [id, sources, target_tab, onRequestResult.bind(null, id)],
35                this.definition.parameters, {});
36    return id;
37  });
38
39  apiFunctions.setHandleRequest('cancelChooseDesktopMedia', function(id) {
40    if (id in pendingRequests) {
41      delete pendingRequests[id];
42      sendRequest(this.name, [id], this.definition.parameters, {});
43    }
44  });
45});
46
47exports.binding = binding.generate();
48