Index: chromeos/audio/cras_audio_handler_unittest.cc |
diff --git a/chromeos/audio/cras_audio_handler_unittest.cc b/chromeos/audio/cras_audio_handler_unittest.cc |
index bc87b09d869123fb9183c0c598c9d9c0ced3d765..574b421abf21e73121b6622b822034a75c38a080 100644 |
--- a/chromeos/audio/cras_audio_handler_unittest.cc |
+++ b/chromeos/audio/cras_audio_handler_unittest.cc |
@@ -2377,4 +2377,55 @@ TEST_F(CrasAudioHandlerTest, NoMoreAudioInputDevices) { |
EXPECT_EQ(1, test_observer_->active_input_node_changed_count()); |
} |
+// Test the case in which an HDMI output is plugged in with other higher |
+// priority |
+// output devices already plugged and user has manually selected an active |
+// output. |
+// The hotplug of hdmi output should not change user's selection of active |
+// device. |
+// crbug.com/447826. |
+TEST_F(CrasAudioHandlerTest, HotPlugHDMINotChangeActiveOutput) { |
+ AudioNodeList audio_nodes; |
+ AudioNode internal_speaker(kInternalSpeaker); |
+ audio_nodes.push_back(internal_speaker); |
+ AudioNode usb_headset(kUSBHeadphone1); |
+ usb_headset.plugged_time = 80000000; |
+ audio_nodes.push_back(usb_headset); |
+ SetUpCrasAudioHandler(audio_nodes); |
+ |
+ // Verify the audio devices size. |
+ AudioDeviceList audio_devices; |
+ cras_audio_handler_->GetAudioDevices(&audio_devices); |
+ EXPECT_EQ(audio_nodes.size(), audio_devices.size()); |
+ |
+ // Verify the USB headset is selected as active output by default. |
+ EXPECT_EQ(usb_headset.id, cras_audio_handler_->GetPrimaryActiveOutputNode()); |
+ |
+ // Manually set the active output to internal speaker. |
+ AudioDevice internal_output(kInternalSpeaker); |
+ cras_audio_handler_->SwitchToDevice(internal_output, true); |
+ |
+ // Verify the active output is switched to internal speaker. |
+ EXPECT_EQ(internal_speaker.id, |
+ cras_audio_handler_->GetPrimaryActiveOutputNode()); |
+ EXPECT_LT(kInternalSpeaker.plugged_time, usb_headset.plugged_time); |
+ const AudioDevice* usb_device = GetDeviceFromId(usb_headset.id); |
+ EXPECT_FALSE(usb_device->active); |
+ |
+ // Plug in HDMI output. |
+ audio_nodes.clear(); |
+ internal_speaker.active = true; |
+ audio_nodes.push_back(internal_speaker); |
+ usb_headset.active = false; |
+ audio_nodes.push_back(usb_headset); |
+ AudioNode hdmi(kHDMIOutput); |
+ hdmi.plugged_time = 90000000; |
+ audio_nodes.push_back(hdmi); |
+ ChangeAudioNodes(audio_nodes); |
+ |
+ // The active output should not change. |
+ EXPECT_EQ(kInternalSpeaker.id, |
+ cras_audio_handler_->GetPrimaryActiveOutputNode()); |
+} |
+ |
} // namespace chromeos |