Bug 802326 - make getUserMedia fail audio+video request unless user has both. draft
authorJan-Ivar Bruaroey <jib@mozilla.com>
Thu, 05 May 2016 17:11:53 -0400
changeset 364177 94ee40b75b0c69147f7ee54f2ee78e3075de6786
parent 364176 656a2913153dbc47903132e5e12b39ed6693c099
child 364178 f2d9281d45ce2f44b361bb22f70e4b5210a463ec
child 364628 b93caceabff632b108291f048f75642632f14d75
push id17378
push userjbruaroey@mozilla.com
push dateFri, 06 May 2016 02:41:52 +0000
bugs802326
milestone49.0a1
Bug 802326 - make getUserMedia fail audio+video request unless user has both. MozReview-Commit-ID: 8o7p3B6fD5r
dom/media/MediaManager.cpp
--- 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 {