webrtc-adapter
Advanced tools
Comparing version 7.2.9 to 7.3.0
@@ -108,2 +108,5 @@ 'use strict'; | ||
firefoxShim.shimRTCDataChannel(window); | ||
firefoxShim.shimAddTransceiver(window); | ||
firefoxShim.shimCreateOffer(window); | ||
firefoxShim.shimCreateAnswer(window); | ||
@@ -110,0 +113,0 @@ commonShim.shimRTCIceCandidate(window); |
@@ -41,2 +41,5 @@ /* | ||
exports.shimRTCDataChannel = shimRTCDataChannel; | ||
exports.shimAddTransceiver = shimAddTransceiver; | ||
exports.shimCreateOffer = shimCreateOffer; | ||
exports.shimCreateAnswer = shimCreateAnswer; | ||
@@ -228,1 +231,103 @@ var _utils = require('../utils'); | ||
} | ||
function shimAddTransceiver(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; | ||
if (origAddTransceiver) { | ||
window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() { | ||
this.setParametersPromises = []; | ||
var initParameters = arguments[1]; | ||
var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters; | ||
if (shouldPerformCheck) { | ||
// If sendEncodings params are provided, validate grammar | ||
initParameters.sendEncodings.forEach(function (encodingParam) { | ||
if ('rid' in encodingParam) { | ||
var ridRegex = /^[a-z0-9]{0,16}$/i; | ||
if (!ridRegex.test(encodingParam.rid)) { | ||
throw new TypeError('Invalid RID value provided.'); | ||
} | ||
} | ||
if ('scaleResolutionDownBy' in encodingParam) { | ||
if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { | ||
throw new RangeError('scale_resolution_down_by must be >= 1.0'); | ||
} | ||
} | ||
if ('maxFramerate' in encodingParam) { | ||
if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { | ||
throw new RangeError('max_framerate must be >= 0.0'); | ||
} | ||
} | ||
}); | ||
} | ||
var transceiver = origAddTransceiver.apply(this, arguments); | ||
if (shouldPerformCheck) { | ||
// Check if the init options were applied. If not we do this in an | ||
// asynchronous way and save the promise reference in a global object. | ||
// This is an ugly hack, but at the same time is way more robust than | ||
// checking the sender parameters before and after the createOffer | ||
// Also note that after the createoffer we are not 100% sure that | ||
// the params were asynchronously applied so we might miss the | ||
// opportunity to recreate offer. | ||
var sender = transceiver.sender; | ||
var params = sender.getParameters(); | ||
if (!('encodings' in params)) { | ||
params.encodings = initParameters.sendEncodings; | ||
this.setParametersPromises.push(sender.setParameters(params).catch(function () {})); | ||
} | ||
} | ||
return transceiver; | ||
}; | ||
} | ||
} | ||
function shimCreateOffer(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
var origCreateOffer = window.RTCPeerConnection.prototype.createOffer; | ||
window.RTCPeerConnection.prototype.createOffer = function createOffer() { | ||
var _this4 = this, | ||
_arguments2 = arguments; | ||
if (this.setParametersPromises && this.setParametersPromises.length) { | ||
return Promise.all(this.setParametersPromises).then(function () { | ||
return origCreateOffer.apply(_this4, _arguments2); | ||
}).finally(function () { | ||
_this4.setParametersPromises = []; | ||
}); | ||
} | ||
return origCreateOffer.apply(this, arguments); | ||
}; | ||
} | ||
function shimCreateAnswer(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; | ||
window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { | ||
var _this5 = this, | ||
_arguments3 = arguments; | ||
if (this.setParametersPromises && this.setParametersPromises.length) { | ||
return Promise.all(this.setParametersPromises).then(function () { | ||
return origCreateAnswer.apply(_this5, _arguments3); | ||
}).finally(function () { | ||
_this5.setParametersPromises = []; | ||
}); | ||
} | ||
return origCreateAnswer.apply(this, arguments); | ||
}; | ||
} |
{ | ||
"name": "webrtc-adapter", | ||
"version": "7.2.9", | ||
"version": "7.3.0", | ||
"description": "A shim to insulate apps from WebRTC spec changes and browser prefix differences", | ||
@@ -26,3 +26,3 @@ "license": "BSD-3-Clause", | ||
"rtcpeerconnection-shim": "^1.2.15", | ||
"sdp": "^2.9.0" | ||
"sdp": "^2.10.0" | ||
}, | ||
@@ -51,3 +51,3 @@ "engines": { | ||
"karma-edge-launcher": "^0.4.1", | ||
"karma-firefox-launcher": "^1.0.1", | ||
"karma-firefox-launcher": "^1.2.0", | ||
"karma-mocha": "^1.3.0", | ||
@@ -54,0 +54,0 @@ "karma-mocha-reporter": "^2.2.3", |
@@ -81,2 +81,5 @@ /* | ||
firefoxShim.shimRTCDataChannel(window); | ||
firefoxShim.shimAddTransceiver(window); | ||
firefoxShim.shimCreateOffer(window); | ||
firefoxShim.shimCreateAnswer(window); | ||
@@ -83,0 +86,0 @@ commonShim.shimRTCIceCandidate(window); |
@@ -193,1 +193,105 @@ /* | ||
} | ||
export function shimAddTransceiver(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!(typeof window === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver; | ||
if (origAddTransceiver) { | ||
window.RTCPeerConnection.prototype.addTransceiver = | ||
function addTransceiver() { | ||
this.setParametersPromises = []; | ||
const initParameters = arguments[1]; | ||
const shouldPerformCheck = initParameters && | ||
'sendEncodings' in initParameters; | ||
if (shouldPerformCheck) { | ||
// If sendEncodings params are provided, validate grammar | ||
initParameters.sendEncodings.forEach((encodingParam) => { | ||
if ('rid' in encodingParam) { | ||
const ridRegex = /^[a-z0-9]{0,16}$/i; | ||
if (!ridRegex.test(encodingParam.rid)) { | ||
throw new TypeError('Invalid RID value provided.'); | ||
} | ||
} | ||
if ('scaleResolutionDownBy' in encodingParam) { | ||
if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) { | ||
throw new RangeError('scale_resolution_down_by must be >= 1.0'); | ||
} | ||
} | ||
if ('maxFramerate' in encodingParam) { | ||
if (!(parseFloat(encodingParam.maxFramerate) >= 0)) { | ||
throw new RangeError('max_framerate must be >= 0.0'); | ||
} | ||
} | ||
}); | ||
} | ||
const transceiver = origAddTransceiver.apply(this, arguments); | ||
if (shouldPerformCheck) { | ||
// Check if the init options were applied. If not we do this in an | ||
// asynchronous way and save the promise reference in a global object. | ||
// This is an ugly hack, but at the same time is way more robust than | ||
// checking the sender parameters before and after the createOffer | ||
// Also note that after the createoffer we are not 100% sure that | ||
// the params were asynchronously applied so we might miss the | ||
// opportunity to recreate offer. | ||
const {sender} = transceiver; | ||
const params = sender.getParameters(); | ||
if (!('encodings' in params)) { | ||
params.encodings = initParameters.sendEncodings; | ||
this.setParametersPromises.push( | ||
sender.setParameters(params) | ||
.catch(() => {}) | ||
); | ||
} | ||
} | ||
return transceiver; | ||
}; | ||
} | ||
} | ||
export function shimCreateOffer(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!(typeof window === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
const origCreateOffer = window.RTCPeerConnection.prototype.createOffer; | ||
window.RTCPeerConnection.prototype.createOffer = function createOffer() { | ||
if (this.setParametersPromises && this.setParametersPromises.length) { | ||
return Promise.all(this.setParametersPromises) | ||
.then(() => { | ||
return origCreateOffer.apply(this, arguments); | ||
}) | ||
.finally(() => { | ||
this.setParametersPromises = []; | ||
}); | ||
} | ||
return origCreateOffer.apply(this, arguments); | ||
}; | ||
} | ||
export function shimCreateAnswer(window) { | ||
// https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647 | ||
// Firefox ignores the init sendEncodings options passed to addTransceiver | ||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1396918 | ||
if (!(typeof window === 'object' && window.RTCPeerConnection)) { | ||
return; | ||
} | ||
const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer; | ||
window.RTCPeerConnection.prototype.createAnswer = function createAnswer() { | ||
if (this.setParametersPromises && this.setParametersPromises.length) { | ||
return Promise.all(this.setParametersPromises) | ||
.then(() => { | ||
return origCreateAnswer.apply(this, arguments); | ||
}) | ||
.finally(() => { | ||
this.setParametersPromises = []; | ||
}); | ||
} | ||
return origCreateAnswer.apply(this, arguments); | ||
}; | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
883056
21121
Updatedsdp@^2.10.0