Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: chrome/renderer/resources/extensions/tab_capture_custom_bindings.js

Issue 1221483002: New tabCapture.captureOffscreenTab API, initially for Presentation API 1UA mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Register off-screen tabs as presentations via separate private API. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/resources/extensions/tab_capture_custom_bindings.js
diff --git a/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js b/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js
index 93a60549e3743d366c47fabe14f7d8c63bff316d..b0fdedb8c4dcb89a3dc4ff6889b61fd77266391e 100644
--- a/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/tab_capture_custom_bindings.js
@@ -9,11 +9,12 @@ var binding = require('binding').Binding.create('tabCapture');
binding.registerCustomHook(function(bindingsAPI, extensionId) {
var apiFunctions = bindingsAPI.apiFunctions;
- apiFunctions.setCustomCallback('capture',
- function(name, request, callback, response) {
+ function proxyToGetUserMedia(name, request, callback, response) {
if (!callback)
return;
+ // TODO(miu): Propagate exceptions and always provide a useful error when
+ // callback() is invoked with a null argument. http://crbug.com/463679
if (response) {
var options = {};
if (response.audioConstraints)
@@ -22,16 +23,33 @@ binding.registerCustomHook(function(bindingsAPI, extensionId) {
options.video = response.videoConstraints;
try {
- navigator.webkitGetUserMedia(options,
- function(stream) { callback(stream); },
- function() { callback(null); });
+ navigator.webkitGetUserMedia(
+ options,
+ function(stream) {
+ if (stream && ('offscreenTabId' in response)) {
+ Object.defineProperty(stream, 'offscreenTabId', {
+ configureable: false,
+ enumerable: false,
+ value: response['offscreenTabId'],
+ writable: false
+ });
+ }
+ callback(stream);
+ },
+ function(exception) {
+ callback(null);
+ }
+ );
} catch (e) {
callback(null);
}
} else {
callback(null);
}
- });
+ }
+
+ apiFunctions.setCustomCallback('capture', proxyToGetUserMedia);
+ apiFunctions.setCustomCallback('captureOffscreenTab', proxyToGetUserMedia);
});
exports.binding = binding.generate();

Powered by Google App Engine
This is Rietveld 408576698