15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Custom binding for the Tab Capture API.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var binding = require('binding').Binding.create('tabCapture');
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)binding.registerCustomHook(function(bindingsAPI, extensionId) {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var apiFunctions = bindingsAPI.apiFunctions;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  apiFunctions.setCustomCallback('capture', function(name, request, response) {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (response && request.callback) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var callback = request.callback;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var options = {};
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (response.audioConstraints)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        options.audio = response.audioConstraints;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      if (response.videoConstraints)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        options.video = response.videoConstraints;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      try {
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        navigator.webkitGetUserMedia(options,
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                     function(stream) { callback(stream); },
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                     function() { callback(null); });
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      } catch (e) {
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        callback(null);
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      request.callback(null);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    request.callback = null;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)exports.binding = binding.generate();
36