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