14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Custom binding for the desktopCapture API.
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var binding = require('binding').Binding.create('desktopCapture');
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var sendRequest = require('sendRequest').sendRequest;
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)var idGenerator = requireNative('id_generator');
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)binding.registerCustomHook(function(bindingsAPI) {
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  var apiFunctions = bindingsAPI.apiFunctions;
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  var pendingRequests = {};
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  function onRequestResult(id, result) {
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (id in pendingRequests) {
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      var callback = pendingRequests[id];
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      delete pendingRequests[id];
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      callback(result);
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  apiFunctions.setHandleRequest('chooseDesktopMedia',
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                function(sources, target_tab, callback) {
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    // |target_tab| is an optional parameter.
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (callback === undefined) {
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      callback = target_tab;
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      target_tab = undefined;
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    var id = idGenerator.GetNextId();
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    pendingRequests[id] = callback;
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    sendRequest(this.name,
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                [id, sources, target_tab, onRequestResult.bind(null, id)],
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                this.definition.parameters, {});
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return id;
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  });
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  apiFunctions.setHandleRequest('cancelChooseDesktopMedia', function(id) {
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (id in pendingRequests) {
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      delete pendingRequests[id];
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      sendRequest(this.name, [id], this.definition.parameters, {});
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  });
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)});
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)exports.binding = binding.generate();
48