Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* Bug 2000906 - Microsoft Teams, for getDisplayMedia requests resizeMode: "none" but expects downscaling and frameRate decimation
*
* If a constraint for width, height or frameRate is present together with resizeMode: "none", we clear resizeMode.
* Chrome seems to incorrectly ignore the resizeMode constraint for getDisplayMedia.
*/
/* globals exportFunction */
console.info(
'getDisplayMedia has been modified to drop resizeMode: "none" for compatibility reasons. See https://bugzilla.mozilla.org/show_bug.cgi?id=2000906 for details.'
);
function maybeDeleteResizeMode(video) {
const { resizeMode, width, height, frameRate } = video;
if (resizeMode == "none" && (width || height || frameRate)) {
delete video.resizeMode;
}
}
if (navigator.mediaDevices?.getDisplayMedia) {
{
const { prototype } = MediaDevices.wrappedJSObject;
const { getDisplayMedia: gDM } = prototype;
prototype.getDisplayMedia = exportFunction(function getDisplayMedia(
options
) {
const { video } = options || {};
if (video) {
maybeDeleteResizeMode(video);
}
return gDM.call(this, options);
}, window);
}
{
const { prototype } = MediaStreamTrack.wrappedJSObject;
const { applyConstraints: aC } = prototype;
prototype.applyConstraints = exportFunction(function applyConstraints(
constraints
) {
// Don't allow adding resizeMode if it wasn't there from the start.
// Ideally we'd check for a gDM-sourced track instead but there's no
// spec-compliant way to do that.
if (!this.getConstraints().resizeMode) {
maybeDeleteResizeMode(constraints || {});
}
return aC.call(this, constraints);
}, window);
}
}