Bug 802326 - make getUserMedia fail audio+video request unless user has both.
MozReview-Commit-ID: 8o7p3B6fD5r
--- a/dom/media/MediaManager.cpp
+++ b/dom/media/MediaManager.cpp
@@ -1087,26 +1087,30 @@ MediaManager::SelectSettings(
videos.AppendElement(video);
} else {
RefPtr<AudioDevice> audio = static_cast<AudioDevice*>(source.get());
audios.AppendElement(audio);
}
}
sources.Clear();
const char* badConstraint = nullptr;
-
- if (videos.Length() && IsOn(aConstraints.mVideo)) {
+ bool needVideo = IsOn(aConstraints.mVideo);
+ bool needAudio = IsOn(aConstraints.mAudio);
+
+ if (needVideo && videos.Length()) {
badConstraint = MediaConstraintsHelper::SelectSettings(
GetInvariant(aConstraints.mVideo), videos);
}
- if (!badConstraint && audios.Length() && IsOn(aConstraints.mAudio)) {
+ if (!badConstraint && needAudio && audios.Length()) {
badConstraint = MediaConstraintsHelper::SelectSettings(
GetInvariant(aConstraints.mAudio), audios);
}
- if (!badConstraint) {
+ if (!badConstraint &&
+ !needVideo == !videos.Length() &&
+ !needAudio == !audios.Length()) {
for (auto& video : videos) {
sources.AppendElement(video);
}
for (auto& audio : audios) {
sources.AppendElement(audio);
}
}
NS_DispatchToMainThread(NewRunnableFrom([id, badConstraint]() mutable {