Skip to content

Commit

Permalink
Call to Firefox addon when starting screensharing.
Browse files Browse the repository at this point in the history
Firefox needs the domain to be whitelisted, so this is done by the addon.

Signed-off-by: Joachim Bauch <bauch@struktur.de>
  • Loading branch information
fancycode committed Jan 27, 2017
1 parent 054d927 commit 51270b5
Showing 1 changed file with 37 additions and 18 deletions.
55 changes: 37 additions & 18 deletions js/simplewebrtc.js
Original file line number Diff line number Diff line change
Expand Up @@ -4007,23 +4007,15 @@
mediaSource: 'window'
}
}
getUserMedia(constraints, function (err, stream) {
callback(err, stream);
// workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1045810
if (!err) {
var lastTime = stream.currentTime;
var polly = window.setInterval(function () {
if (!stream) window.clearInterval(polly);
if (stream.currentTime == lastTime) {
window.clearInterval(polly);
if (stream.onended) {
stream.onended();
}
}
lastTime = stream.currentTime;
}, 500);
}
});
// Notify extension to add domain to whitelist and defer actual
// getUserMedia call until extension finished adding the domain.
var pending = window.setTimeout(function () {
error = new Error('NavigatorUserMediaError');
error.name = 'EXTENSION_UNAVAILABLE';
return callback(error);
}, 1000);
cache[pending] = [callback, constraints];
window.postMessage({ type: 'webrtcStartScreensharing', id: pending }, '*');
} else {
error = new Error('NavigatorUserMediaError');
error.name = 'EXTENSION_UNAVAILABLE'; // does not make much sense but...
Expand All @@ -4032,7 +4024,7 @@
};

window.addEventListener('message', function (event) {
if (event.origin != window.location.origin) {
if (event.origin != window.location.origin && !event.isTrusted) {
return;
}
if (event.data.type == 'gotScreen' && cache[event.data.id]) {
Expand Down Expand Up @@ -4063,6 +4055,33 @@
}
} else if (event.data.type == 'getScreenPending') {
window.clearTimeout(event.data.id);
} else if (event.data.type == 'webrtcScreensharingWhitelisted' && cache[event.data.id]) {
var data = cache[event.data.id];
window.clearTimeout(event.data.id);
var constraints = data[1];
var callback = data[0];
delete cache[event.data.id];

getUserMedia(constraints, function (err, stream) {
// Notify extension to remove domain from whitelist.
window.postMessage({ type: 'webrtcStopScreensharing' }, '*');
callback(err, stream);
if (err) {
return;
}
// workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=1045810
var lastTime = stream.currentTime;
var polly = window.setInterval(function () {
if (!stream) window.clearInterval(polly);
if (stream.currentTime == lastTime) {
window.clearInterval(polly);
if (stream.onended) {
stream.onended();
}
}
lastTime = stream.currentTime;
}, 500);
});
}
});

Expand Down

0 comments on commit 51270b5

Please sign in to comment.