diff --git a/dom/media/MediaDevices.cpp b/dom/media/MediaDevices.cpp index 067094cb6b70..165fa69da767 100644 --- a/dom/media/MediaDevices.cpp +++ b/dom/media/MediaDevices.cpp @@ -264,7 +264,8 @@ RefPtr MediaDevices::FilterExposedDevices( bool dropSpeakers = !Preferences::GetBool("media.setsinkid.enabled") || !FeaturePolicyUtils::IsFeatureAllowed(doc, u"speaker-selection"_ns); - + bool shouldResistFingerprinting = + window->AsGlobal()->ShouldResistFingerprinting(RFPTarget::MediaDevices); bool legacy = IsLegacyMode(window); bool outputIsDefault = true; // First output is the default. bool haveDefaultOutput = false; @@ -293,8 +294,10 @@ RefPtr MediaDevices::FilterExposedDevices( case MediaDeviceKind::Audiooutput: if (dropSpeakers || (!mExplicitlyGrantedAudioOutputRawIds.Contains(device->mRawID) && - // Assumes aDevices order has microphones before speakers. - !exposedMicrophoneGroupIds.Contains(device->mRawGroupID))) { + (!mCanExposeMicrophoneInfo || + (shouldResistFingerprinting && + // Assumes aDevices order has microphones before speakers. + !exposedMicrophoneGroupIds.Contains(device->mRawGroupID))))) { outputIsDefault = false; continue; } diff --git a/dom/media/webrtc/tests/mochitests/testLegacyEnumerateDevices.js b/dom/media/webrtc/tests/mochitests/testLegacyEnumerateDevices.js index de51fdea6a74..3143921b8bc8 100644 --- a/dom/media/webrtc/tests/mochitests/testLegacyEnumerateDevices.js +++ b/dom/media/webrtc/tests/mochitests/testLegacyEnumerateDevices.js @@ -161,5 +161,6 @@ async function testLegacyEnumerateDevices() { ["media.video_loopback_dev", "none"] ); devices = await navigator.mediaDevices.enumerateDevices(); + devices = devices.filter(({ kind }) => kind != "audiooutput"); is(devices.length, 0, "No devices"); } diff --git a/dom/media/webrtc/tests/mochitests/test_enumerateDevices.html b/dom/media/webrtc/tests/mochitests/test_enumerateDevices.html index 48bec0006a48..617fd2c403f4 100644 --- a/dom/media/webrtc/tests/mochitests/test_enumerateDevices.html +++ b/dom/media/webrtc/tests/mochitests/test_enumerateDevices.html @@ -133,6 +133,7 @@ runTest(async () => { ["media.audio_loopback_dev", "none"], ["media.video_loopback_dev", "none"]); devices = await navigator.mediaDevices.enumerateDevices(); + devices = devices.filter(({kind}) => kind != "audiooutput"); is(devices.length, 0, "No devices"); }); diff --git a/dom/media/webrtc/tests/mochitests/test_fingerprinting_resistance.html b/dom/media/webrtc/tests/mochitests/test_fingerprinting_resistance.html index 7e9cd5a21997..ebe27800697d 100644 --- a/dom/media/webrtc/tests/mochitests/test_fingerprinting_resistance.html +++ b/dom/media/webrtc/tests/mochitests/test_fingerprinting_resistance.html @@ -8,16 +8,20 @@ - - + +