Home | History | Annotate | Download | only in audio
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chromeos/audio/cras_audio_handler.h"
      6 
      7 #include "base/memory/ref_counted.h"
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/message_loop/message_loop.h"
     10 #include "base/values.h"
     11 #include "chromeos/audio/audio_devices_pref_handler_stub.h"
     12 #include "chromeos/dbus/audio_node.h"
     13 #include "chromeos/dbus/cras_audio_client_stub_impl.h"
     14 #include "chromeos/dbus/dbus_thread_manager.h"
     15 #include "testing/gtest/include/gtest/gtest.h"
     16 
     17 namespace chromeos {
     18 
     19 const uint64 kInternalSpeakerId = 10001;
     20 const uint64 kHeadphoneId = 10002;
     21 const uint64 kInternalMicId = 10003;
     22 const uint64 kUSBMicId = 10004;
     23 const uint64 kBluetoothHeadsetId = 10005;
     24 const uint64 kHDMIOutputId = 10006;
     25 const uint64 kUSBHeadphoneId1 = 10007;
     26 const uint64 kUSBHeadphoneId2 = 10008;
     27 const uint64 kMicJackId = 10009;
     28 const uint64 kKeyboardMicId = 10010;
     29 const uint64 kOtherTypeOutputId = 90001;
     30 const uint64 kOtherTypeInputId = 90002;
     31 const uint64 kUSBJabraSpeakerOutputId1 = 90003;
     32 const uint64 kUSBJabraSpeakerOutputId2 = 90004;
     33 const uint64 kUSBJabraSpeakerInputId1 = 90005;
     34 const uint64 kUSBJabraSpeakerInputId2 = 90006;
     35 const uint64 kUSBCameraInputId = 90007;
     36 
     37 const AudioNode kInternalSpeaker(
     38     false,
     39     kInternalSpeakerId,
     40     "Fake Speaker",
     41     "INTERNAL_SPEAKER",
     42     "Speaker",
     43     false,
     44     0
     45 );
     46 
     47 const AudioNode kHeadphone(
     48     false,
     49     kHeadphoneId,
     50     "Fake Headphone",
     51     "HEADPHONE",
     52     "Headphone",
     53     false,
     54     0
     55 );
     56 
     57 const AudioNode kInternalMic(
     58     true,
     59     kInternalMicId,
     60     "Fake Mic",
     61     "INTERNAL_MIC",
     62     "Internal Mic",
     63     false,
     64     0
     65 );
     66 
     67 const AudioNode kMicJack(
     68     true,
     69     kMicJackId,
     70     "Fake Mic Jack",
     71     "MIC",
     72     "Mic Jack",
     73     false,
     74     0
     75 );
     76 
     77 const AudioNode kUSBMic(
     78     true,
     79     kUSBMicId,
     80     "Fake USB Mic",
     81     "USB",
     82     "USB Microphone",
     83     false,
     84     0
     85 );
     86 
     87 const AudioNode kKeyboardMic(
     88     true,
     89     kKeyboardMicId,
     90     "Fake Keyboard Mic",
     91     "KEYBOARD_MIC",
     92     "Keyboard Mic",
     93     false,
     94     0
     95 );
     96 
     97 const AudioNode kOtherTypeOutput(
     98     false,
     99     kOtherTypeOutputId,
    100     "Output Device",
    101     "SOME_OTHER_TYPE",
    102     "Other Type Output Device",
    103     false,
    104     0
    105 );
    106 
    107 const AudioNode kOtherTypeInput(
    108     true,
    109     kOtherTypeInputId,
    110     "Input Device",
    111     "SOME_OTHER_TYPE",
    112     "Other Type Input Device",
    113     false,
    114     0
    115 );
    116 
    117 const AudioNode kBluetoothHeadset (
    118     false,
    119     kBluetoothHeadsetId,
    120     "Bluetooth Headset",
    121     "BLUETOOTH",
    122     "Bluetooth Headset 1",
    123     false,
    124     0
    125 );
    126 
    127 const AudioNode kHDMIOutput (
    128     false,
    129     kHDMIOutputId,
    130     "HDMI output",
    131     "HDMI",
    132     "HDMI output",
    133     false,
    134     0
    135 );
    136 
    137 const AudioNode kUSBHeadphone1 (
    138     false,
    139     kUSBHeadphoneId1,
    140     "USB Headphone",
    141     "USB",
    142     "USB Headphone 1",
    143     false,
    144     0
    145 );
    146 
    147 const AudioNode kUSBHeadphone2 (
    148     false,
    149     kUSBHeadphoneId2,
    150     "USB Headphone",
    151     "USB",
    152     "USB Headphone 1",
    153     false,
    154     0
    155 );
    156 
    157 const AudioNode kUSBJabraSpeakerOutput1(false,
    158                                         kUSBJabraSpeakerOutputId1,
    159                                         "Jabra Speaker 1",
    160                                         "USB",
    161                                         "Jabra Speaker 1",
    162                                         false,
    163                                         0);
    164 
    165 const AudioNode kUSBJabraSpeakerOutput2(false,
    166                                         kUSBJabraSpeakerOutputId2,
    167                                         "Jabra Speaker 2",
    168                                         "USB",
    169                                         "Jabra Speaker 2",
    170                                         false,
    171                                         0);
    172 
    173 const AudioNode kUSBJabraSpeakerInput1(true,
    174                                        kUSBJabraSpeakerInputId1,
    175                                        "Jabra Speaker 1",
    176                                        "USB",
    177                                        "Jabra Speaker",
    178                                        false,
    179                                        0);
    180 
    181 const AudioNode kUSBJabraSpeakerInput2(true,
    182                                        kUSBJabraSpeakerInputId2,
    183                                        "Jabra Speaker 2",
    184                                        "USB",
    185                                        "Jabra Speaker 2",
    186                                        false,
    187                                        0);
    188 
    189 const AudioNode kUSBCameraInput(true,
    190                                 kUSBCameraInputId,
    191                                 "USB Camera",
    192                                 "USB",
    193                                 "USB Camera",
    194                                 false,
    195                                 0);
    196 
    197 class TestObserver : public chromeos::CrasAudioHandler::AudioObserver {
    198  public:
    199   TestObserver() : active_output_node_changed_count_(0),
    200                    active_input_node_changed_count_(0),
    201                    audio_nodes_changed_count_(0),
    202                    output_mute_changed_count_(0),
    203                    input_mute_changed_count_(0),
    204                    output_volume_changed_count_(0),
    205                    input_gain_changed_count_(0) {
    206   }
    207 
    208   int active_output_node_changed_count() const {
    209     return active_output_node_changed_count_;
    210   }
    211 
    212   void reset_active_output_node_changed_count() {
    213     active_output_node_changed_count_ = 0;
    214   }
    215 
    216   int active_input_node_changed_count() const {
    217     return active_input_node_changed_count_;
    218   }
    219 
    220   void reset_active_input_node_changed_count() {
    221     active_output_node_changed_count_ = 0;
    222   }
    223 
    224   int audio_nodes_changed_count() const {
    225     return audio_nodes_changed_count_;
    226   }
    227 
    228   int output_mute_changed_count() const {
    229     return output_mute_changed_count_;
    230   }
    231 
    232   int input_mute_changed_count() const {
    233     return input_mute_changed_count_;
    234   }
    235 
    236   int output_volume_changed_count() const {
    237     return output_volume_changed_count_;
    238   }
    239 
    240   int input_gain_changed_count() const {
    241     return input_gain_changed_count_;
    242   }
    243 
    244   virtual ~TestObserver() {}
    245 
    246  protected:
    247   // chromeos::CrasAudioHandler::AudioObserver overrides.
    248   virtual void OnActiveOutputNodeChanged() OVERRIDE {
    249     ++active_output_node_changed_count_;
    250   }
    251 
    252   virtual void OnActiveInputNodeChanged() OVERRIDE {
    253     ++active_input_node_changed_count_;
    254   }
    255 
    256   virtual void OnAudioNodesChanged() OVERRIDE {
    257     ++audio_nodes_changed_count_;
    258   }
    259 
    260   virtual void OnOutputMuteChanged() OVERRIDE {
    261     ++output_mute_changed_count_;
    262   }
    263 
    264   virtual void OnInputMuteChanged() OVERRIDE {
    265     ++input_mute_changed_count_;
    266   }
    267 
    268   virtual void OnOutputVolumeChanged() OVERRIDE {
    269     ++output_volume_changed_count_;
    270   }
    271 
    272   virtual void OnInputGainChanged() OVERRIDE {
    273     ++input_gain_changed_count_;
    274   }
    275 
    276  private:
    277   int active_output_node_changed_count_;
    278   int active_input_node_changed_count_;
    279   int audio_nodes_changed_count_;
    280   int output_mute_changed_count_;
    281   int input_mute_changed_count_;
    282   int output_volume_changed_count_;
    283   int input_gain_changed_count_;
    284 
    285   DISALLOW_COPY_AND_ASSIGN(TestObserver);
    286 };
    287 
    288 class CrasAudioHandlerTest : public testing::Test {
    289  public:
    290   CrasAudioHandlerTest() : cras_audio_handler_(NULL),
    291                            cras_audio_client_stub_(NULL) {
    292   }
    293   virtual ~CrasAudioHandlerTest() {}
    294 
    295   virtual void SetUp() OVERRIDE {
    296   }
    297 
    298   virtual void TearDown() OVERRIDE {
    299     cras_audio_handler_->RemoveAudioObserver(test_observer_.get());
    300     test_observer_.reset();
    301     CrasAudioHandler::Shutdown();
    302     audio_pref_handler_ = NULL;
    303     DBusThreadManager::Shutdown();
    304   }
    305 
    306   void SetUpCrasAudioHandler(const AudioNodeList& audio_nodes) {
    307     DBusThreadManager::Initialize();
    308     cras_audio_client_stub_ = static_cast<CrasAudioClientStubImpl*>(
    309         DBusThreadManager::Get()->GetCrasAudioClient());
    310     cras_audio_client_stub_->SetAudioNodesForTesting(audio_nodes);
    311     audio_pref_handler_ = new AudioDevicesPrefHandlerStub();
    312     CrasAudioHandler::Initialize(audio_pref_handler_);
    313     cras_audio_handler_ = CrasAudioHandler::Get();
    314     test_observer_.reset(new TestObserver);
    315     cras_audio_handler_->AddAudioObserver(test_observer_.get());
    316     message_loop_.RunUntilIdle();
    317   }
    318 
    319   void SetUpCrasAudioHandlerWithPrimaryActiveNode(
    320       const AudioNodeList& audio_nodes,
    321       const AudioNode& primary_active_node) {
    322     DBusThreadManager::Initialize();
    323     cras_audio_client_stub_ = static_cast<CrasAudioClientStubImpl*>(
    324         DBusThreadManager::Get()->GetCrasAudioClient());
    325     cras_audio_client_stub_->SetAudioNodesForTesting(audio_nodes);
    326     cras_audio_client_stub_->SetActiveOutputNode(primary_active_node.id),
    327         audio_pref_handler_ = new AudioDevicesPrefHandlerStub();
    328     CrasAudioHandler::Initialize(audio_pref_handler_);
    329     cras_audio_handler_ = CrasAudioHandler::Get();
    330     test_observer_.reset(new TestObserver);
    331     cras_audio_handler_->AddAudioObserver(test_observer_.get());
    332     message_loop_.RunUntilIdle();
    333   }
    334 
    335   void ChangeAudioNodes(const AudioNodeList& audio_nodes) {
    336     cras_audio_client_stub_->SetAudioNodesAndNotifyObserversForTesting(
    337         audio_nodes);
    338     message_loop_.RunUntilIdle();
    339   }
    340 
    341   const AudioDevice* GetDeviceFromId(uint64 id) {
    342     return cras_audio_handler_->GetDeviceFromId(id);
    343   }
    344 
    345   int GetActiveDeviceCount() const {
    346     int num_active_nodes = 0;
    347     AudioDeviceList audio_devices;
    348     cras_audio_handler_->GetAudioDevices(&audio_devices);
    349     for (size_t i = 0; i < audio_devices.size(); ++i) {
    350       if (audio_devices[i].active)
    351         ++num_active_nodes;
    352     }
    353     return num_active_nodes;
    354   }
    355 
    356  protected:
    357   base::MessageLoopForUI message_loop_;
    358   CrasAudioHandler* cras_audio_handler_;  // Not owned.
    359   CrasAudioClientStubImpl* cras_audio_client_stub_;  // Not owned.
    360   scoped_ptr<TestObserver> test_observer_;
    361   scoped_refptr<AudioDevicesPrefHandlerStub> audio_pref_handler_;
    362 
    363  private:
    364   DISALLOW_COPY_AND_ASSIGN(CrasAudioHandlerTest);
    365 };
    366 
    367 TEST_F(CrasAudioHandlerTest, InitializeWithOnlyDefaultAudioDevices) {
    368   AudioNodeList audio_nodes;
    369   audio_nodes.push_back(kInternalSpeaker);
    370   audio_nodes.push_back(kInternalMic);
    371   SetUpCrasAudioHandler(audio_nodes);
    372 
    373   // Verify the audio devices size.
    374   AudioDeviceList audio_devices;
    375   cras_audio_handler_->GetAudioDevices(&audio_devices);
    376   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    377 
    378   // Verify the internal speaker has been selected as the active output.
    379   AudioDevice active_output;
    380   EXPECT_TRUE(
    381       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    382   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    383   EXPECT_EQ(kInternalSpeaker.id,
    384             cras_audio_handler_->GetPrimaryActiveOutputNode());
    385   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    386 
    387   // Ensure the internal microphone has been selected as the active input.
    388   AudioDevice active_input;
    389   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    390   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
    391 }
    392 
    393 TEST_F(CrasAudioHandlerTest, InitializeWithAlternativeAudioDevices) {
    394   AudioNodeList audio_nodes;
    395   audio_nodes.push_back(kInternalSpeaker);
    396   audio_nodes.push_back(kHeadphone);
    397   audio_nodes.push_back(kInternalMic);
    398   audio_nodes.push_back(kUSBMic);
    399   SetUpCrasAudioHandler(audio_nodes);
    400 
    401   // Verify the audio devices size.
    402   AudioDeviceList audio_devices;
    403   cras_audio_handler_->GetAudioDevices(&audio_devices);
    404   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    405 
    406   // Verify the headphone has been selected as the active output.
    407   AudioDevice active_output;
    408   EXPECT_TRUE(
    409       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    410   EXPECT_EQ(kHeadphone.id, active_output.id);
    411   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    412   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    413 
    414   // Ensure the USB microphone has been selected as the active input.
    415   AudioDevice active_input;
    416   EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
    417   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
    418 }
    419 
    420 TEST_F(CrasAudioHandlerTest, InitializeWithKeyboardMic) {
    421   AudioNodeList audio_nodes;
    422   audio_nodes.push_back(kInternalSpeaker);
    423   audio_nodes.push_back(kInternalMic);
    424   audio_nodes.push_back(kKeyboardMic);
    425   SetUpCrasAudioHandler(audio_nodes);
    426 
    427   // Verify the audio devices size.
    428   AudioDeviceList audio_devices;
    429   cras_audio_handler_->GetAudioDevices(&audio_devices);
    430   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    431   EXPECT_TRUE(cras_audio_handler_->HasKeyboardMic());
    432 
    433   // Verify the internal speaker has been selected as the active output.
    434   AudioDevice active_output;
    435   EXPECT_TRUE(
    436       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    437   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    438   EXPECT_EQ(kInternalSpeaker.id,
    439             cras_audio_handler_->GetPrimaryActiveOutputNode());
    440   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    441 
    442   // Ensure the internal microphone has been selected as the active input,
    443   // not affected by keyboard mic.
    444   AudioDevice active_input;
    445   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    446   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
    447   const AudioDevice* keyboard_mic = GetDeviceFromId(kKeyboardMic.id);
    448   EXPECT_FALSE(keyboard_mic->active);
    449 }
    450 
    451 TEST_F(CrasAudioHandlerTest, SetKeyboardMicActive) {
    452   AudioNodeList audio_nodes;
    453   audio_nodes.push_back(kInternalMic);
    454   audio_nodes.push_back(kKeyboardMic);
    455   SetUpCrasAudioHandler(audio_nodes);
    456 
    457   // Verify the audio devices size.
    458   AudioDeviceList audio_devices;
    459   cras_audio_handler_->GetAudioDevices(&audio_devices);
    460   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    461   EXPECT_TRUE(cras_audio_handler_->HasKeyboardMic());
    462 
    463   // Ensure the internal microphone has been selected as the active input,
    464   // not affected by keyboard mic.
    465   AudioDevice active_input;
    466   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    467   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
    468   const AudioDevice* keyboard_mic = GetDeviceFromId(kKeyboardMic.id);
    469   EXPECT_FALSE(keyboard_mic->active);
    470 
    471   // Make keyboard mic active.
    472   cras_audio_handler_->SetKeyboardMicActive(true);
    473   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    474   const AudioDevice* active_keyboard_mic = GetDeviceFromId(kKeyboardMic.id);
    475   EXPECT_TRUE(active_keyboard_mic->active);
    476 
    477   // Make keyboard mic inactive.
    478   cras_audio_handler_->SetKeyboardMicActive(false);
    479   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    480   const AudioDevice* inactive_keyboard_mic = GetDeviceFromId(kKeyboardMic.id);
    481   EXPECT_FALSE(inactive_keyboard_mic->active);
    482 }
    483 
    484 TEST_F(CrasAudioHandlerTest, SwitchActiveOutputDevice) {
    485   AudioNodeList audio_nodes;
    486   audio_nodes.push_back(kInternalSpeaker);
    487   audio_nodes.push_back(kHeadphone);
    488   SetUpCrasAudioHandler(audio_nodes);
    489   AudioDeviceList audio_devices;
    490   cras_audio_handler_->GetAudioDevices(&audio_devices);
    491   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    492 
    493   // Verify the initial active output device is headphone.
    494   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    495   AudioDevice active_output;
    496   EXPECT_TRUE(
    497       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    498   EXPECT_EQ(kHeadphone.id, active_output.id);
    499   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    500 
    501   // Switch the active output to internal speaker.
    502   AudioDevice internal_speaker(kInternalSpeaker);
    503   cras_audio_handler_->SwitchToDevice(internal_speaker, true);
    504 
    505   // Verify the active output is switched to internal speaker, and the
    506   // ActiveOutputNodeChanged event is fired.
    507   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    508   EXPECT_TRUE(
    509       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    510   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    511   EXPECT_EQ(kInternalSpeaker.id,
    512             cras_audio_handler_->GetPrimaryActiveOutputNode());
    513 }
    514 
    515 TEST_F(CrasAudioHandlerTest, SwitchActiveInputDevice) {
    516   AudioNodeList audio_nodes;
    517   audio_nodes.push_back(kInternalMic);
    518   audio_nodes.push_back(kUSBMic);
    519   SetUpCrasAudioHandler(audio_nodes);
    520   AudioDeviceList audio_devices;
    521   cras_audio_handler_->GetAudioDevices(&audio_devices);
    522   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    523 
    524   // Verify the initial active input device is USB mic.
    525   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
    526   EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
    527 
    528   // Switch the active input to internal mic.
    529   AudioDevice internal_mic(kInternalMic);
    530   cras_audio_handler_->SwitchToDevice(internal_mic, true);
    531 
    532   // Verify the active output is switched to internal speaker, and the active
    533   // ActiveInputNodeChanged event is fired.
    534   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
    535   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
    536 }
    537 
    538 TEST_F(CrasAudioHandlerTest, PlugHeadphone) {
    539   // Set up initial audio devices, only with internal speaker.
    540   AudioNodeList audio_nodes;
    541   audio_nodes.push_back(kInternalSpeaker);
    542   SetUpCrasAudioHandler(audio_nodes);
    543   const size_t init_nodes_size = audio_nodes.size();
    544 
    545   // Verify the audio devices size.
    546   AudioDeviceList audio_devices;
    547   cras_audio_handler_->GetAudioDevices(&audio_devices);
    548   EXPECT_EQ(init_nodes_size, audio_devices.size());
    549   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    550 
    551   // Verify the internal speaker has been selected as the active output.
    552   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    553   AudioDevice active_output;
    554   EXPECT_TRUE(
    555       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    556   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    557   EXPECT_EQ(kInternalSpeaker.id,
    558             cras_audio_handler_->GetPrimaryActiveOutputNode());
    559   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    560 
    561   // Plug the headphone.
    562   audio_nodes.clear();
    563   AudioNode internal_speaker(kInternalSpeaker);
    564   internal_speaker.active = true;
    565   audio_nodes.push_back(internal_speaker);
    566   audio_nodes.push_back(kHeadphone);
    567   ChangeAudioNodes(audio_nodes);
    568 
    569   // Verify the AudioNodesChanged event is fired and new audio device is added.
    570   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    571   cras_audio_handler_->GetAudioDevices(&audio_devices);
    572   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
    573 
    574   // Verify the active output device is switched to headphone and
    575   // ActiveOutputChanged event is fired.
    576   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    577   EXPECT_TRUE(
    578       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    579   EXPECT_EQ(kHeadphone.id, active_output.id);
    580   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    581   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    582 }
    583 
    584 TEST_F(CrasAudioHandlerTest, UnplugHeadphone) {
    585   // Set up initial audio devices, with internal speaker and headphone.
    586   AudioNodeList audio_nodes;
    587   audio_nodes.push_back(kInternalSpeaker);
    588   audio_nodes.push_back(kHeadphone);
    589   SetUpCrasAudioHandler(audio_nodes);
    590   const size_t init_nodes_size = audio_nodes.size();
    591 
    592   // Verify the audio devices size.
    593   AudioDeviceList audio_devices;
    594   cras_audio_handler_->GetAudioDevices(&audio_devices);
    595   EXPECT_EQ(init_nodes_size, audio_devices.size());
    596   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    597 
    598   // Verify the headphone has been selected as the active output.
    599   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    600   AudioDevice active_output;
    601   EXPECT_TRUE(
    602       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    603   EXPECT_EQ(kHeadphone.id, active_output.id);
    604   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    605   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    606 
    607   // Unplug the headphone.
    608   audio_nodes.clear();
    609   audio_nodes.push_back(kInternalSpeaker);
    610   ChangeAudioNodes(audio_nodes);
    611 
    612   // Verify the AudioNodesChanged event is fired and one audio device is
    613   // removed.
    614   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    615   cras_audio_handler_->GetAudioDevices(&audio_devices);
    616   EXPECT_EQ(init_nodes_size - 1, audio_devices.size());
    617 
    618   // Verify the active output device is switched to internal speaker and
    619   // ActiveOutputChanged event is fired.
    620   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    621   EXPECT_TRUE(
    622       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    623   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    624   EXPECT_EQ(kInternalSpeaker.id,
    625             cras_audio_handler_->GetPrimaryActiveOutputNode());
    626   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    627 }
    628 
    629 TEST_F(CrasAudioHandlerTest, InitializeWithBluetoothHeadset) {
    630   AudioNodeList audio_nodes;
    631   audio_nodes.push_back(kInternalSpeaker);
    632   audio_nodes.push_back(kBluetoothHeadset);
    633   SetUpCrasAudioHandler(audio_nodes);
    634 
    635   // Verify the audio devices size.
    636   AudioDeviceList audio_devices;
    637   cras_audio_handler_->GetAudioDevices(&audio_devices);
    638   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    639   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    640 
    641   // Verify the bluetooth headset has been selected as the active output.
    642   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    643   AudioDevice active_output;
    644   EXPECT_TRUE(
    645       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    646   EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
    647   EXPECT_EQ(kBluetoothHeadset.id,
    648             cras_audio_handler_->GetPrimaryActiveOutputNode());
    649   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    650 }
    651 
    652 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectBluetoothHeadset) {
    653   // Initialize with internal speaker and headphone.
    654   AudioNodeList audio_nodes;
    655   audio_nodes.push_back(kInternalSpeaker);
    656   audio_nodes.push_back(kHeadphone);
    657   SetUpCrasAudioHandler(audio_nodes);
    658   const size_t init_nodes_size = audio_nodes.size();
    659 
    660   // Verify the audio devices size.
    661   AudioDeviceList audio_devices;
    662   cras_audio_handler_->GetAudioDevices(&audio_devices);
    663   EXPECT_EQ(init_nodes_size, audio_devices.size());
    664   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    665 
    666   // Verify the headphone is selected as the active output initially.
    667   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    668   AudioDevice active_output;
    669   EXPECT_TRUE(
    670       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    671   EXPECT_EQ(kHeadphone.id, active_output.id);
    672   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    673   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    674 
    675   // Connect to bluetooth headset. Since it is plugged in later than
    676   // headphone, active output should be switched to it.
    677   audio_nodes.clear();
    678   audio_nodes.push_back(kInternalSpeaker);
    679   AudioNode headphone(kHeadphone);
    680   headphone.plugged_time = 80000000;
    681   headphone.active = true;
    682   audio_nodes.push_back(headphone);
    683   AudioNode bluetooth_headset(kBluetoothHeadset);
    684   bluetooth_headset.plugged_time = 90000000;
    685   audio_nodes.push_back(bluetooth_headset);
    686   ChangeAudioNodes(audio_nodes);
    687 
    688   // Verify the AudioNodesChanged event is fired and new audio device is added.
    689   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    690   cras_audio_handler_->GetAudioDevices(&audio_devices);
    691   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
    692 
    693   // Verify the active output device is switched to bluetooth headset, and
    694   // ActiveOutputChanged event is fired.
    695   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    696   EXPECT_TRUE(
    697       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    698   EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
    699   EXPECT_EQ(kBluetoothHeadset.id,
    700             cras_audio_handler_->GetPrimaryActiveOutputNode());
    701   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    702 
    703   // Disconnect bluetooth headset.
    704   audio_nodes.clear();
    705   audio_nodes.push_back(kInternalSpeaker);
    706   headphone.active = false;
    707   audio_nodes.push_back(headphone);
    708   ChangeAudioNodes(audio_nodes);
    709 
    710   // Verify the AudioNodesChanged event is fired and one audio device is
    711   // removed.
    712   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
    713   cras_audio_handler_->GetAudioDevices(&audio_devices);
    714   EXPECT_EQ(init_nodes_size, audio_devices.size());
    715 
    716   // Verify the active output device is switched to headphone, and
    717   // ActiveOutputChanged event is fired.
    718   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
    719   EXPECT_TRUE(
    720       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    721   EXPECT_EQ(kHeadphone.id, active_output.id);
    722   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    723   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    724 }
    725 
    726 TEST_F(CrasAudioHandlerTest, InitializeWithHDMIOutput) {
    727   AudioNodeList audio_nodes;
    728   audio_nodes.push_back(kInternalSpeaker);
    729   audio_nodes.push_back(kHDMIOutput);
    730   SetUpCrasAudioHandler(audio_nodes);
    731 
    732   // Verify the audio devices size.
    733   AudioDeviceList audio_devices;
    734   cras_audio_handler_->GetAudioDevices(&audio_devices);
    735   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    736   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    737 
    738   // Verify the HDMI device has been selected as the active output.
    739   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    740   AudioDevice active_output;
    741   EXPECT_TRUE(
    742       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    743   EXPECT_EQ(kHDMIOutput.id, active_output.id);
    744   EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    745   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    746 }
    747 
    748 TEST_F(CrasAudioHandlerTest, ConnectAndDisconnectHDMIOutput) {
    749   // Initialize with internal speaker.
    750   AudioNodeList audio_nodes;
    751   audio_nodes.push_back(kInternalSpeaker);
    752   SetUpCrasAudioHandler(audio_nodes);
    753   const size_t init_nodes_size = audio_nodes.size();
    754 
    755   // Verify the audio devices size.
    756   AudioDeviceList audio_devices;
    757   cras_audio_handler_->GetAudioDevices(&audio_devices);
    758   EXPECT_EQ(init_nodes_size, audio_devices.size());
    759   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    760 
    761   // Verify the internal speaker is selected as the active output initially.
    762   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    763   AudioDevice active_output;
    764   EXPECT_TRUE(
    765       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    766   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    767   EXPECT_EQ(kInternalSpeaker.id,
    768             cras_audio_handler_->GetPrimaryActiveOutputNode());
    769   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    770 
    771   // Connect to HDMI output.
    772   audio_nodes.clear();
    773   AudioNode internal_speaker(kInternalSpeaker);
    774   internal_speaker.active = true;
    775   internal_speaker.plugged_time = 80000000;
    776   audio_nodes.push_back(internal_speaker);
    777   AudioNode hdmi(kHDMIOutput);
    778   hdmi.plugged_time = 90000000;
    779   audio_nodes.push_back(hdmi);
    780   ChangeAudioNodes(audio_nodes);
    781 
    782   // Verify the AudioNodesChanged event is fired and new audio device is added.
    783   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    784   cras_audio_handler_->GetAudioDevices(&audio_devices);
    785   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
    786 
    787   // Verify the active output device is switched to hdmi output, and
    788   // ActiveOutputChanged event is fired.
    789   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    790   EXPECT_TRUE(
    791       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    792   EXPECT_EQ(kHDMIOutput.id, active_output.id);
    793   EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    794   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    795 
    796   // Disconnect hdmi headset.
    797   audio_nodes.clear();
    798   audio_nodes.push_back(kInternalSpeaker);
    799   ChangeAudioNodes(audio_nodes);
    800 
    801   // Verify the AudioNodesChanged event is fired and one audio device is
    802   // removed.
    803   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
    804   cras_audio_handler_->GetAudioDevices(&audio_devices);
    805   EXPECT_EQ(init_nodes_size, audio_devices.size());
    806 
    807   // Verify the active output device is switched to internal speaker, and
    808   // ActiveOutputChanged event is fired.
    809   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
    810   EXPECT_TRUE(
    811       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    812   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    813   EXPECT_EQ(kInternalSpeaker.id,
    814             cras_audio_handler_->GetPrimaryActiveOutputNode());
    815   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    816 }
    817 
    818 TEST_F(CrasAudioHandlerTest, HandleHeadphoneAndHDMIOutput) {
    819   // Initialize with internal speaker, headphone and HDMI output.
    820   AudioNodeList audio_nodes;
    821   audio_nodes.push_back(kInternalSpeaker);
    822   audio_nodes.push_back(kHeadphone);
    823   audio_nodes.push_back(kHDMIOutput);
    824   SetUpCrasAudioHandler(audio_nodes);
    825   const size_t init_nodes_size = audio_nodes.size();
    826 
    827   // Verify the audio devices size.
    828   AudioDeviceList audio_devices;
    829   cras_audio_handler_->GetAudioDevices(&audio_devices);
    830   EXPECT_EQ(init_nodes_size, audio_devices.size());
    831   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    832 
    833   // Verify the headphone is selected as the active output initially.
    834   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    835   AudioDevice active_output;
    836   EXPECT_TRUE(
    837       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    838   EXPECT_EQ(kHeadphone.id, active_output.id);
    839   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    840   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    841 
    842   // Disconnect HDMI output.
    843   audio_nodes.clear();
    844   audio_nodes.push_back(kInternalSpeaker);
    845   audio_nodes.push_back(kHDMIOutput);
    846   ChangeAudioNodes(audio_nodes);
    847 
    848   // Verify the AudioNodesChanged event is fired and one audio device is
    849   // removed.
    850   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    851   cras_audio_handler_->GetAudioDevices(&audio_devices);
    852   EXPECT_EQ(init_nodes_size - 1, audio_devices.size());
    853 
    854   // Verify the active output device is switched to HDMI output, and
    855   // ActiveOutputChanged event is fired.
    856   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    857   EXPECT_TRUE(
    858       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    859   EXPECT_EQ(kHDMIOutput.id, active_output.id);
    860   EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
    861   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    862 }
    863 
    864 TEST_F(CrasAudioHandlerTest, InitializeWithUSBHeadphone) {
    865   AudioNodeList audio_nodes;
    866   audio_nodes.push_back(kInternalSpeaker);
    867   audio_nodes.push_back(kUSBHeadphone1);
    868   SetUpCrasAudioHandler(audio_nodes);
    869 
    870   // Verify the audio devices size.
    871   AudioDeviceList audio_devices;
    872   cras_audio_handler_->GetAudioDevices(&audio_devices);
    873   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
    874   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    875 
    876   // Verify the usb headphone has been selected as the active output.
    877   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    878   AudioDevice active_output;
    879   EXPECT_TRUE(
    880       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    881   EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
    882   EXPECT_EQ(kUSBHeadphone1.id,
    883             cras_audio_handler_->GetPrimaryActiveOutputNode());
    884   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    885 }
    886 
    887 TEST_F(CrasAudioHandlerTest, PlugAndUnplugUSBHeadphone) {
    888   // Initialize with internal speaker.
    889   AudioNodeList audio_nodes;
    890   audio_nodes.push_back(kInternalSpeaker);
    891   SetUpCrasAudioHandler(audio_nodes);
    892   const size_t init_nodes_size = audio_nodes.size();
    893 
    894   // Verify the audio devices size.
    895   AudioDeviceList audio_devices;
    896   cras_audio_handler_->GetAudioDevices(&audio_devices);
    897   EXPECT_EQ(init_nodes_size, audio_devices.size());
    898   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    899 
    900   // Verify the internal speaker is selected as the active output initially.
    901   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    902   AudioDevice active_output;
    903   EXPECT_TRUE(
    904       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    905   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    906   EXPECT_EQ(kInternalSpeaker.id,
    907             cras_audio_handler_->GetPrimaryActiveOutputNode());
    908   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    909 
    910   // Plug in usb headphone
    911   audio_nodes.clear();
    912   AudioNode internal_speaker(kInternalSpeaker);
    913   internal_speaker.active = true;
    914   internal_speaker.plugged_time = 80000000;
    915   audio_nodes.push_back(internal_speaker);
    916   AudioNode usb_headphone(kUSBHeadphone1);
    917   usb_headphone.plugged_time = 90000000;
    918   audio_nodes.push_back(usb_headphone);
    919   ChangeAudioNodes(audio_nodes);
    920 
    921   // Verify the AudioNodesChanged event is fired and new audio device is added.
    922   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    923   cras_audio_handler_->GetAudioDevices(&audio_devices);
    924   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
    925 
    926   // Verify the active output device is switched to usb headphone, and
    927   // ActiveOutputChanged event is fired.
    928   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
    929   EXPECT_TRUE(
    930       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    931   EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
    932   EXPECT_EQ(kUSBHeadphone1.id,
    933             cras_audio_handler_->GetPrimaryActiveOutputNode());
    934   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    935 
    936   // Unplug usb headphone.
    937   audio_nodes.clear();
    938   audio_nodes.push_back(kInternalSpeaker);
    939   ChangeAudioNodes(audio_nodes);
    940 
    941   // Verify the AudioNodesChanged event is fired and one audio device is
    942   // removed.
    943   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
    944   cras_audio_handler_->GetAudioDevices(&audio_devices);
    945   EXPECT_EQ(init_nodes_size, audio_devices.size());
    946 
    947   // Verify the active output device is switched to internal speaker, and
    948   // ActiveOutputChanged event is fired.
    949   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
    950   EXPECT_TRUE(
    951       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    952   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
    953   EXPECT_EQ(kInternalSpeaker.id,
    954             cras_audio_handler_->GetPrimaryActiveOutputNode());
    955   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
    956 }
    957 
    958 TEST_F(CrasAudioHandlerTest, HandleMultipleUSBHeadphones) {
    959   // Initialize with internal speaker and one usb headphone.
    960   AudioNodeList audio_nodes;
    961   audio_nodes.push_back(kInternalSpeaker);
    962   audio_nodes.push_back(kUSBHeadphone1);
    963   SetUpCrasAudioHandler(audio_nodes);
    964   const size_t init_nodes_size = audio_nodes.size();
    965 
    966   // Verify the audio devices size.
    967   AudioDeviceList audio_devices;
    968   cras_audio_handler_->GetAudioDevices(&audio_devices);
    969   EXPECT_EQ(init_nodes_size, audio_devices.size());
    970   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
    971 
    972   // Verify the usb headphone is selected as the active output initially.
    973   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
    974   AudioDevice active_output;
    975   EXPECT_TRUE(
    976       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
    977   EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
    978   EXPECT_EQ(kUSBHeadphone1.id,
    979             cras_audio_handler_->GetPrimaryActiveOutputNode());
    980   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
    981 
    982   // Plug in another usb headphone.
    983   audio_nodes.clear();
    984   audio_nodes.push_back(kInternalSpeaker);
    985   AudioNode usb_headphone_1(kUSBHeadphone1);
    986   usb_headphone_1.active = true;
    987   usb_headphone_1.plugged_time = 80000000;
    988   audio_nodes.push_back(usb_headphone_1);
    989   AudioNode usb_headphone_2(kUSBHeadphone2);
    990   usb_headphone_2.plugged_time = 90000000;
    991   audio_nodes.push_back(usb_headphone_2);
    992   ChangeAudioNodes(audio_nodes);
    993 
    994   // Verify the AudioNodesChanged event is fired and new audio device is added.
    995   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
    996   cras_audio_handler_->GetAudioDevices(&audio_devices);
    997   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
    998 
    999   // Verify the active output device is switched to the 2nd usb headphone, which
   1000   // is plugged later, and ActiveOutputChanged event is fired.
   1001   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1002   EXPECT_TRUE(
   1003       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1004   EXPECT_EQ(kUSBHeadphone2.id, active_output.id);
   1005   EXPECT_EQ(kUSBHeadphone2.id,
   1006             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1007   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1008 
   1009   // Unplug the 2nd usb headphone.
   1010   audio_nodes.clear();
   1011   audio_nodes.push_back(kInternalSpeaker);
   1012   audio_nodes.push_back(kUSBHeadphone1);
   1013   ChangeAudioNodes(audio_nodes);
   1014 
   1015   // Verify the AudioNodesChanged event is fired and one audio device is
   1016   // removed.
   1017   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1018   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1019   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1020 
   1021   // Verify the active output device is switched to the first usb headphone, and
   1022   // ActiveOutputChanged event is fired.
   1023   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
   1024   EXPECT_TRUE(
   1025       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1026   EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
   1027   EXPECT_EQ(kUSBHeadphone1.id,
   1028             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1029   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1030 }
   1031 
   1032 TEST_F(CrasAudioHandlerTest, UnplugUSBHeadphonesWithActiveSpeaker) {
   1033   // Initialize with internal speaker and one usb headphone.
   1034   AudioNodeList audio_nodes;
   1035   audio_nodes.push_back(kInternalSpeaker);
   1036   audio_nodes.push_back(kUSBHeadphone1);
   1037   SetUpCrasAudioHandler(audio_nodes);
   1038   const size_t init_nodes_size = audio_nodes.size();
   1039 
   1040   // Verify the audio devices size.
   1041   AudioDeviceList audio_devices;
   1042   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1043   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1044   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1045 
   1046   // Verify the usb headphone is selected as the active output initially.
   1047   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1048   AudioDevice active_output;
   1049   EXPECT_TRUE(
   1050       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1051   EXPECT_EQ(kUSBHeadphone1.id, active_output.id);
   1052   EXPECT_EQ(kUSBHeadphone1.id,
   1053             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1054   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1055 
   1056   // Plug in the headphone jack.
   1057   audio_nodes.clear();
   1058   audio_nodes.push_back(kInternalSpeaker);
   1059   AudioNode usb_headphone_1(kUSBHeadphone1);
   1060   usb_headphone_1.active = true;
   1061   usb_headphone_1.plugged_time = 80000000;
   1062   audio_nodes.push_back(usb_headphone_1);
   1063   AudioNode headphone_jack(kHeadphone);
   1064   headphone_jack.plugged_time = 90000000;
   1065   audio_nodes.push_back(headphone_jack);
   1066   ChangeAudioNodes(audio_nodes);
   1067 
   1068   // Verify the AudioNodesChanged event is fired and new audio device is added.
   1069   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1070   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1071   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
   1072 
   1073   // Verify the active output device is switched to the headphone jack, which
   1074   // is plugged later, and ActiveOutputChanged event is fired.
   1075   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1076   EXPECT_TRUE(
   1077       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1078   EXPECT_EQ(kHeadphone.id, active_output.id);
   1079   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1080   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1081 
   1082   // Select the speaker to be the active output device.
   1083   AudioDevice internal_speaker(kInternalSpeaker);
   1084   cras_audio_handler_->SwitchToDevice(internal_speaker, true);
   1085 
   1086   // Verify the active output is switched to internal speaker, and the
   1087   // ActiveOutputNodeChanged event is fired.
   1088   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
   1089   EXPECT_TRUE(
   1090       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1091   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
   1092   EXPECT_EQ(kInternalSpeaker.id,
   1093             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1094 
   1095   // Unplug the usb headphone.
   1096   audio_nodes.clear();
   1097   AudioNode internal_speaker_node(kInternalSpeaker);
   1098   internal_speaker_node.active = true;
   1099   internal_speaker_node.plugged_time = 70000000;
   1100   audio_nodes.push_back(internal_speaker_node);
   1101   headphone_jack.active = false;
   1102   audio_nodes.push_back(headphone_jack);
   1103   ChangeAudioNodes(audio_nodes);
   1104 
   1105   // Verify the AudioNodesChanged event is fired and one audio device is
   1106   // removed.
   1107   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1108   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1109   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1110 
   1111   // Verify the active output device remains to be speaker.
   1112   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
   1113   EXPECT_TRUE(
   1114       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1115   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
   1116   EXPECT_EQ(kInternalSpeaker.id,
   1117             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1118   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1119 }
   1120 
   1121 TEST_F(CrasAudioHandlerTest, OneActiveAudioOutputAfterLoginNewUserSession) {
   1122   // This tests the case found with crbug.com/273271.
   1123   // Initialize with internal speaker, bluetooth headphone and headphone jack
   1124   // for a new chrome session after user signs out from the previous session.
   1125   // Headphone jack is plugged in later than bluetooth headphone, but bluetooth
   1126   // headphone is selected as the active output by user from previous user
   1127   // session.
   1128   AudioNodeList audio_nodes;
   1129   audio_nodes.push_back(kInternalSpeaker);
   1130   AudioNode bluetooth_headphone(kBluetoothHeadset);
   1131   bluetooth_headphone.active = true;
   1132   bluetooth_headphone.plugged_time = 70000000;
   1133   audio_nodes.push_back(bluetooth_headphone);
   1134   AudioNode headphone_jack(kHeadphone);
   1135   headphone_jack.plugged_time = 80000000;
   1136   audio_nodes.push_back(headphone_jack);
   1137   SetUpCrasAudioHandlerWithPrimaryActiveNode(audio_nodes, bluetooth_headphone);
   1138   const size_t init_nodes_size = audio_nodes.size();
   1139 
   1140   // Verify the audio devices size.
   1141   AudioDeviceList audio_devices;
   1142   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1143   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1144   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1145 
   1146   // Verify the headphone jack is selected as the active output and all other
   1147   // audio devices are not active.
   1148   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1149   AudioDevice active_output;
   1150   EXPECT_TRUE(
   1151       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1152   EXPECT_EQ(kHeadphone.id, active_output.id);
   1153   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1154   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1155   for (size_t i = 0; i < audio_devices.size(); ++i) {
   1156     if (audio_devices[i].id != kHeadphone.id)
   1157       EXPECT_FALSE(audio_devices[i].active);
   1158   }
   1159 }
   1160 
   1161 TEST_F(CrasAudioHandlerTest, BluetoothSpeakerIdChangedOnFly) {
   1162   // Initialize with internal speaker and bluetooth headset.
   1163   AudioNodeList audio_nodes;
   1164   audio_nodes.push_back(kInternalSpeaker);
   1165   audio_nodes.push_back(kBluetoothHeadset);
   1166   SetUpCrasAudioHandler(audio_nodes);
   1167   const size_t init_nodes_size = audio_nodes.size();
   1168 
   1169   // Verify the audio devices size.
   1170   AudioDeviceList audio_devices;
   1171   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1172   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1173   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1174 
   1175   // Verify the bluetooth headset is selected as the active output and all other
   1176   // audio devices are not active.
   1177   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1178   AudioDevice active_output;
   1179   EXPECT_TRUE(
   1180       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1181   EXPECT_EQ(kBluetoothHeadset.id, active_output.id);
   1182   EXPECT_EQ(kBluetoothHeadset.id,
   1183             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1184   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1185 
   1186   // Cras changes the bluetooth headset's id on the fly.
   1187   audio_nodes.clear();
   1188   AudioNode internal_speaker(kInternalSpeaker);
   1189   internal_speaker.active = false;
   1190   audio_nodes.push_back(internal_speaker);
   1191   AudioNode bluetooth_headphone(kBluetoothHeadset);
   1192   // Change bluetooth headphone id.
   1193   bluetooth_headphone.id = kBluetoothHeadsetId + 20000;
   1194   bluetooth_headphone.active = false;
   1195   audio_nodes.push_back(bluetooth_headphone);
   1196   ChangeAudioNodes(audio_nodes);
   1197 
   1198   // Verify NodesChanged event is fired, and the audio devices size is not
   1199   // changed.
   1200   audio_devices.clear();
   1201   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1202   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1203   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1204 
   1205   // Verify ActiveOutputNodeChanged event is fired, and active device should be
   1206   // bluetooth headphone.
   1207   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1208   EXPECT_TRUE(
   1209       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1210   EXPECT_EQ(bluetooth_headphone.id, active_output.id);
   1211 }
   1212 
   1213 TEST_F(CrasAudioHandlerTest, PlugUSBMic) {
   1214   // Set up initial audio devices, only with internal mic.
   1215   AudioNodeList audio_nodes;
   1216   audio_nodes.push_back(kInternalMic);
   1217   SetUpCrasAudioHandler(audio_nodes);
   1218   const size_t init_nodes_size = audio_nodes.size();
   1219 
   1220   // Verify the audio devices size.
   1221   AudioDeviceList audio_devices;
   1222   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1223   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1224   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1225 
   1226   // Verify the internal mic is selected as the active input.
   1227   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1228   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1229   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
   1230 
   1231   // Plug the USB Mic.
   1232   audio_nodes.clear();
   1233   AudioNode internal_mic(kInternalMic);
   1234   internal_mic.active = true;
   1235   audio_nodes.push_back(internal_mic);
   1236   audio_nodes.push_back(kUSBMic);
   1237   ChangeAudioNodes(audio_nodes);
   1238 
   1239   // Verify the AudioNodesChanged event is fired and new audio device is added.
   1240   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1241   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1242   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
   1243 
   1244   // Verify the active input device is switched to USB mic and
   1245   // and ActiveInputChanged event is fired.
   1246   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   1247   EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
   1248   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1249 }
   1250 
   1251 TEST_F(CrasAudioHandlerTest, UnplugUSBMic) {
   1252   // Set up initial audio devices, with internal mic and USB Mic.
   1253   AudioNodeList audio_nodes;
   1254   audio_nodes.push_back(kInternalMic);
   1255   audio_nodes.push_back(kUSBMic);
   1256   SetUpCrasAudioHandler(audio_nodes);
   1257   const size_t init_nodes_size = audio_nodes.size();
   1258 
   1259   // Verify the audio devices size.
   1260   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1261   AudioDeviceList audio_devices;
   1262   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1263   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1264 
   1265   // Verify the USB mic is selected as the active output.
   1266   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1267   EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
   1268   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1269 
   1270   // Unplug the USB Mic.
   1271   audio_nodes.clear();
   1272   audio_nodes.push_back(kInternalMic);
   1273   ChangeAudioNodes(audio_nodes);
   1274 
   1275   // Verify the AudioNodesChanged event is fired, and one audio device is
   1276   // removed.
   1277   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1278   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1279   EXPECT_EQ(init_nodes_size - 1, audio_devices.size());
   1280 
   1281   // Verify the active input device is switched to internal mic, and
   1282   // and ActiveInputChanged event is fired.
   1283   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   1284   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1285   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
   1286 }
   1287 
   1288 TEST_F(CrasAudioHandlerTest, PlugUSBMicNotAffectActiveOutput) {
   1289   // Set up initial audio devices.
   1290   AudioNodeList audio_nodes;
   1291   audio_nodes.push_back(kInternalSpeaker);
   1292   audio_nodes.push_back(kHeadphone);
   1293   audio_nodes.push_back(kInternalMic);
   1294   SetUpCrasAudioHandler(audio_nodes);
   1295   const size_t init_nodes_size = audio_nodes.size();
   1296 
   1297   // Verify the audio devices size.
   1298   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1299   AudioDeviceList audio_devices;
   1300   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1301   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1302 
   1303   // Verify the internal mic is selected as the active input.
   1304   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1305   EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
   1306   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
   1307 
   1308   // Verify the headphone is selected as the active output.
   1309   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1310   EXPECT_EQ(kHeadphoneId, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1311   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1312 
   1313   // Switch the active output to internal speaker.
   1314   AudioDevice internal_speaker(kInternalSpeaker);
   1315   cras_audio_handler_->SwitchToDevice(internal_speaker, true);
   1316 
   1317   // Verify the active output is switched to internal speaker, and the
   1318   // ActiveOutputNodeChanged event is fired.
   1319   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1320   AudioDevice active_output;
   1321   EXPECT_TRUE(
   1322       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1323   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
   1324   EXPECT_EQ(kInternalSpeaker.id,
   1325             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1326 
   1327   // Plug the USB Mic.
   1328   audio_nodes.clear();
   1329   AudioNode internal_speaker_node(kInternalSpeaker);
   1330   internal_speaker_node.active = true;
   1331   audio_nodes.push_back(internal_speaker_node);
   1332   audio_nodes.push_back(kHeadphone);
   1333   AudioNode internal_mic(kInternalMic);
   1334   internal_mic.active = true;
   1335   audio_nodes.push_back(internal_mic);
   1336   audio_nodes.push_back(kUSBMic);
   1337   ChangeAudioNodes(audio_nodes);
   1338 
   1339   // Verify the AudioNodesChanged event is fired, one new device is added.
   1340   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1341   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1342   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
   1343 
   1344   // Verify the active input device is switched to USB mic, and
   1345   // and ActiveInputChanged event is fired.
   1346   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   1347   EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1348   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1349 
   1350   // Verify the active output device is not changed.
   1351   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1352   EXPECT_TRUE(
   1353       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1354   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
   1355   EXPECT_EQ(kInternalSpeaker.id,
   1356             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1357 }
   1358 
   1359 TEST_F(CrasAudioHandlerTest, PlugHeadphoneAutoUnplugSpeakerWithActiveUSB) {
   1360   // Set up initial audio devices.
   1361   AudioNodeList audio_nodes;
   1362   audio_nodes.push_back(kUSBHeadphone1);
   1363   audio_nodes.push_back(kInternalSpeaker);
   1364   audio_nodes.push_back(kInternalMic);
   1365   SetUpCrasAudioHandler(audio_nodes);
   1366   const size_t init_nodes_size = audio_nodes.size();
   1367 
   1368   // Verify the audio devices size.
   1369   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1370   AudioDeviceList audio_devices;
   1371   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1372   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1373 
   1374   // Verify the internal mic is selected as the active input.
   1375   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1376   EXPECT_EQ(kInternalMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
   1377   EXPECT_FALSE(cras_audio_handler_->has_alternative_input());
   1378 
   1379   // Verify the USB headphone is selected as the active output.
   1380   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1381   EXPECT_EQ(kUSBHeadphoneId1,
   1382             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1383   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1384 
   1385   // Plug the headphone and auto-unplug internal speaker.
   1386   audio_nodes.clear();
   1387   AudioNode usb_headphone_node(kUSBHeadphone1);
   1388   usb_headphone_node.active = true;
   1389   audio_nodes.push_back(usb_headphone_node);
   1390   AudioNode headphone_node(kHeadphone);
   1391   headphone_node.plugged_time = 1000;
   1392   audio_nodes.push_back(headphone_node);
   1393   AudioNode internal_mic(kInternalMic);
   1394   internal_mic.active = true;
   1395   audio_nodes.push_back(internal_mic);
   1396   ChangeAudioNodes(audio_nodes);
   1397 
   1398   // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
   1399   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1400   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1401   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1402 
   1403   // Verify the active output device is switched to headphone, and
   1404   // an ActiveOutputChanged event is fired.
   1405   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1406   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1407   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1408 
   1409   // Unplug the headphone and internal speaker auto-plugs back.
   1410   audio_nodes.clear();
   1411   audio_nodes.push_back(kUSBHeadphone1);
   1412   AudioNode internal_speaker_node(kInternalSpeaker);
   1413   internal_speaker_node.plugged_time = 2000;
   1414   audio_nodes.push_back(internal_speaker_node);
   1415   audio_nodes.push_back(internal_mic);
   1416   ChangeAudioNodes(audio_nodes);
   1417 
   1418   // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
   1419   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1420   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1421   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1422 
   1423   // Verify the active output device is switched back to USB, and
   1424   // an ActiveOutputChanged event is fired.
   1425   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
   1426   EXPECT_EQ(kUSBHeadphone1.id,
   1427             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1428   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1429 
   1430   // Verify the active input device is not changed.
   1431   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1432   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1433 }
   1434 
   1435 TEST_F(CrasAudioHandlerTest, PlugMicAutoUnplugInternalMicWithActiveUSB) {
   1436   // Set up initial audio devices.
   1437   AudioNodeList audio_nodes;
   1438   audio_nodes.push_back(kUSBHeadphone1);
   1439   audio_nodes.push_back(kInternalSpeaker);
   1440   audio_nodes.push_back(kUSBMic);
   1441   audio_nodes.push_back(kInternalMic);
   1442   SetUpCrasAudioHandler(audio_nodes);
   1443   const size_t init_nodes_size = audio_nodes.size();
   1444 
   1445   // Verify the audio devices size.
   1446   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1447   AudioDeviceList audio_devices;
   1448   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1449   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1450 
   1451   // Verify the internal mic is selected as the active input.
   1452   EXPECT_EQ(0, test_observer_->active_input_node_changed_count());
   1453   EXPECT_EQ(kUSBMicId, cras_audio_handler_->GetPrimaryActiveInputNode());
   1454   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1455 
   1456   // Verify the internal speaker is selected as the active output.
   1457   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1458   EXPECT_EQ(kUSBHeadphoneId1,
   1459             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1460   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1461 
   1462   // Plug the headphone and mic, auto-unplug internal mic and speaker.
   1463   audio_nodes.clear();
   1464   AudioNode usb_headphone_node(kUSBHeadphone1);
   1465   usb_headphone_node.active = true;
   1466   audio_nodes.push_back(usb_headphone_node);
   1467   AudioNode headphone_node(kHeadphone);
   1468   headphone_node.plugged_time = 1000;
   1469   audio_nodes.push_back(headphone_node);
   1470   AudioNode usb_mic(kUSBMic);
   1471   usb_mic.active = true;
   1472   audio_nodes.push_back(usb_mic);
   1473   AudioNode mic_jack(kMicJack);
   1474   mic_jack.plugged_time = 1000;
   1475   audio_nodes.push_back(mic_jack);
   1476   ChangeAudioNodes(audio_nodes);
   1477 
   1478   // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
   1479   EXPECT_EQ(1, test_observer_->audio_nodes_changed_count());
   1480   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1481   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1482 
   1483   // Verify the active output device is switched to headphone, and
   1484   // an ActiveOutputChanged event is fired.
   1485   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1486   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1487   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1488 
   1489   // Verify the active input device is switched to mic jack, and
   1490   // an ActiveInputChanged event is fired.
   1491   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   1492   EXPECT_EQ(kMicJack.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1493   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1494 
   1495   // Unplug the headphone and internal speaker auto-plugs back.
   1496   audio_nodes.clear();
   1497   audio_nodes.push_back(kUSBHeadphone1);
   1498   AudioNode internal_speaker_node(kInternalSpeaker);
   1499   internal_speaker_node.plugged_time = 2000;
   1500   audio_nodes.push_back(internal_speaker_node);
   1501   audio_nodes.push_back(kUSBMic);
   1502   AudioNode internal_mic(kInternalMic);
   1503   internal_mic.plugged_time = 2000;
   1504   audio_nodes.push_back(internal_mic);
   1505   ChangeAudioNodes(audio_nodes);
   1506 
   1507   // Verify the AudioNodesChanged event is fired, with nodes count unchanged.
   1508   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1509   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1510   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1511 
   1512   // Verify the active output device is switched back to USB, and
   1513   // an ActiveOutputChanged event is fired.
   1514   EXPECT_EQ(2, test_observer_->active_output_node_changed_count());
   1515   EXPECT_EQ(kUSBHeadphone1.id,
   1516             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1517   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1518 
   1519   // Verify the active input device is switched back to USB mic, and
   1520   // an ActiveInputChanged event is fired.
   1521   EXPECT_EQ(2, test_observer_->active_input_node_changed_count());
   1522   EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1523   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1524 }
   1525 
   1526 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnPlugInHeadphone) {
   1527   // Set up initial audio devices.
   1528   AudioNodeList audio_nodes;
   1529   audio_nodes.push_back(kInternalSpeaker);
   1530   audio_nodes.push_back(kBluetoothHeadset);
   1531   SetUpCrasAudioHandler(audio_nodes);
   1532   const size_t init_nodes_size = audio_nodes.size();
   1533 
   1534   // Verify the audio devices size.
   1535   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1536   AudioDeviceList audio_devices;
   1537   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1538   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1539 
   1540   // Verify the bluetooth headset is selected as the active output.
   1541   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1542   EXPECT_EQ(kBluetoothHeadsetId,
   1543             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1544   AudioDevice active_output;
   1545   EXPECT_TRUE(
   1546       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1547   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1548 
   1549   // Plug in headphone, but fire NodesChanged signal twice.
   1550   audio_nodes.clear();
   1551   audio_nodes.push_back(kInternalSpeaker);
   1552   AudioNode bluetooth_headset(kBluetoothHeadset);
   1553   bluetooth_headset.plugged_time = 1000;
   1554   bluetooth_headset.active = true;
   1555   audio_nodes.push_back(bluetooth_headset);
   1556   AudioNode headphone(kHeadphone);
   1557   headphone.active = false;
   1558   headphone.plugged_time = 2000;
   1559   audio_nodes.push_back(headphone);
   1560   ChangeAudioNodes(audio_nodes);
   1561   ChangeAudioNodes(audio_nodes);
   1562 
   1563   // Verify the active output device is set to headphone.
   1564   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1565   EXPECT_LE(1, test_observer_->active_output_node_changed_count());
   1566   EXPECT_EQ(headphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1567   EXPECT_TRUE(
   1568       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1569   EXPECT_EQ(headphone.id, active_output.id);
   1570 
   1571   // Verfiy the audio devices data is consistent, i.e., the active output device
   1572   // should be headphone.
   1573   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1574   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
   1575   for (size_t i = 0; i < audio_devices.size(); ++i) {
   1576     if (audio_devices[i].id == kInternalSpeaker.id)
   1577       EXPECT_FALSE(audio_devices[i].active);
   1578     else if (audio_devices[i].id == bluetooth_headset.id)
   1579       EXPECT_FALSE(audio_devices[i].active);
   1580     else if (audio_devices[i].id == headphone.id)
   1581       EXPECT_TRUE(audio_devices[i].active);
   1582     else
   1583       NOTREACHED();
   1584   }
   1585 }
   1586 
   1587 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnPlugInUSBMic) {
   1588   // Set up initial audio devices.
   1589   AudioNodeList audio_nodes;
   1590   audio_nodes.push_back(kInternalMic);
   1591   SetUpCrasAudioHandler(audio_nodes);
   1592   const size_t init_nodes_size = audio_nodes.size();
   1593 
   1594   // Verify the audio devices size.
   1595   EXPECT_EQ(0, test_observer_->audio_nodes_changed_count());
   1596   AudioDeviceList audio_devices;
   1597   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1598   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1599 
   1600   // Verify the internal mic is selected as the active output.
   1601   EXPECT_EQ(0, test_observer_->active_output_node_changed_count());
   1602   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1603   EXPECT_FALSE(cras_audio_handler_->has_alternative_output());
   1604   EXPECT_TRUE(audio_devices[0].active);
   1605 
   1606   // Plug in usb mic, but fire NodesChanged signal twice.
   1607   audio_nodes.clear();
   1608   AudioNode internal_mic(kInternalMic);
   1609   internal_mic.active = true;
   1610   internal_mic.plugged_time = 1000;
   1611   audio_nodes.push_back(internal_mic);
   1612   AudioNode usb_mic(kUSBMic);
   1613   usb_mic.active = false;
   1614   usb_mic.plugged_time = 2000;
   1615   audio_nodes.push_back(usb_mic);
   1616   ChangeAudioNodes(audio_nodes);
   1617   ChangeAudioNodes(audio_nodes);
   1618 
   1619   // Verify the active output device is set to headphone.
   1620   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1621   EXPECT_LE(1, test_observer_->active_input_node_changed_count());
   1622   EXPECT_EQ(usb_mic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1623   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1624 
   1625   // Verfiy the audio devices data is consistent, i.e., the active input device
   1626   // should be usb mic.
   1627   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1628   EXPECT_EQ(init_nodes_size + 1, audio_devices.size());
   1629   for (size_t i = 0; i < audio_devices.size(); ++i) {
   1630     if (audio_devices[i].id == kInternalMic.id)
   1631       EXPECT_FALSE(audio_devices[i].active);
   1632     else if (audio_devices[i].id == usb_mic.id)
   1633       EXPECT_TRUE(audio_devices[i].active);
   1634     else
   1635       NOTREACHED();
   1636   }
   1637 }
   1638 
   1639 // This is the case of crbug.com/291303.
   1640 TEST_F(CrasAudioHandlerTest, MultipleNodesChangedSignalsOnSystemBoot) {
   1641   // Set up audio handler with empty audio_nodes.
   1642   AudioNodeList audio_nodes;
   1643   SetUpCrasAudioHandler(audio_nodes);
   1644 
   1645   AudioNode internal_speaker(kInternalSpeaker);
   1646   internal_speaker.active = false;
   1647   AudioNode headphone(kHeadphone);
   1648   headphone.active = false;
   1649   AudioNode internal_mic(kInternalMic);
   1650   internal_mic.active = false;
   1651   audio_nodes.push_back(internal_speaker);
   1652   audio_nodes.push_back(headphone);
   1653   audio_nodes.push_back(internal_mic);
   1654   const size_t init_nodes_size = audio_nodes.size();
   1655 
   1656   // Simulate AudioNodesChanged signal being fired twice during system boot.
   1657   ChangeAudioNodes(audio_nodes);
   1658   ChangeAudioNodes(audio_nodes);
   1659 
   1660   // Verify the active output device is set to headphone.
   1661   EXPECT_EQ(2, test_observer_->audio_nodes_changed_count());
   1662   EXPECT_LE(1, test_observer_->active_output_node_changed_count());
   1663   EXPECT_EQ(headphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1664   AudioDevice active_output;
   1665   EXPECT_TRUE(
   1666       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1667   EXPECT_EQ(headphone.id, active_output.id);
   1668 
   1669   // Verify the active input device id is set to internal mic.
   1670   EXPECT_EQ(internal_mic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1671 
   1672   // Verfiy the audio devices data is consistent, i.e., the active output device
   1673   // should be headphone, and the active input device should internal mic.
   1674   AudioDeviceList audio_devices;
   1675   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1676   EXPECT_EQ(init_nodes_size, audio_devices.size());
   1677   for (size_t i = 0; i < audio_devices.size(); ++i) {
   1678     if (audio_devices[i].id == internal_speaker.id)
   1679       EXPECT_FALSE(audio_devices[i].active);
   1680     else if (audio_devices[i].id == headphone.id)
   1681       EXPECT_TRUE(audio_devices[i].active);
   1682     else if (audio_devices[i].id == internal_mic.id)
   1683       EXPECT_TRUE(audio_devices[i].active);
   1684     else
   1685       NOTREACHED();
   1686   }
   1687 }
   1688 
   1689 TEST_F(CrasAudioHandlerTest, SetOutputMute) {
   1690   AudioNodeList audio_nodes;
   1691   audio_nodes.push_back(kInternalSpeaker);
   1692   SetUpCrasAudioHandler(audio_nodes);
   1693   EXPECT_EQ(0, test_observer_->output_mute_changed_count());
   1694 
   1695   // Mute the device.
   1696   cras_audio_handler_->SetOutputMute(true);
   1697 
   1698   // Verify the output is muted, OnOutputMuteChanged event is fired,
   1699   // and mute value is saved in the preferences.
   1700   EXPECT_TRUE(cras_audio_handler_->IsOutputMuted());
   1701   EXPECT_EQ(1, test_observer_->output_mute_changed_count());
   1702   AudioDevice speaker(kInternalSpeaker);
   1703   EXPECT_TRUE(audio_pref_handler_->GetMuteValue(speaker));
   1704 
   1705   // Unmute the device.
   1706   cras_audio_handler_->SetOutputMute(false);
   1707 
   1708   // Verify the output is unmuted, OnOutputMuteChanged event is fired,
   1709   // and mute value is saved in the preferences.
   1710   EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
   1711   EXPECT_EQ(2, test_observer_->output_mute_changed_count());
   1712   EXPECT_FALSE(audio_pref_handler_->GetMuteValue(speaker));
   1713 }
   1714 
   1715 TEST_F(CrasAudioHandlerTest, SetInputMute) {
   1716   AudioNodeList audio_nodes;
   1717   audio_nodes.push_back(kInternalMic);
   1718   SetUpCrasAudioHandler(audio_nodes);
   1719   EXPECT_EQ(0, test_observer_->input_mute_changed_count());
   1720 
   1721   // Mute the device.
   1722   cras_audio_handler_->SetInputMute(true);
   1723 
   1724   // Verify the input is muted, OnInputMuteChanged event is fired.
   1725   EXPECT_TRUE(cras_audio_handler_->IsInputMuted());
   1726   EXPECT_EQ(1, test_observer_->input_mute_changed_count());
   1727 
   1728   // Unmute the device.
   1729   cras_audio_handler_->SetInputMute(false);
   1730 
   1731   // Verify the input is unmuted, OnInputMuteChanged event is fired.
   1732   EXPECT_FALSE(cras_audio_handler_->IsInputMuted());
   1733   EXPECT_EQ(2, test_observer_->input_mute_changed_count());
   1734 }
   1735 
   1736 TEST_F(CrasAudioHandlerTest, SetOutputVolumePercent) {
   1737   AudioNodeList audio_nodes;
   1738   audio_nodes.push_back(kInternalSpeaker);
   1739   SetUpCrasAudioHandler(audio_nodes);
   1740   EXPECT_EQ(0, test_observer_->output_volume_changed_count());
   1741 
   1742   cras_audio_handler_->SetOutputVolumePercent(60);
   1743 
   1744   // Verify the output volume is changed to the designated value,
   1745   // OnOutputVolumeChanged event is fired, and the device volume value
   1746   // is saved the preferences.
   1747   const int kVolume = 60;
   1748   EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent());
   1749   EXPECT_EQ(1, test_observer_->output_volume_changed_count());
   1750   AudioDevice device;
   1751   EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device));
   1752   EXPECT_EQ(device.id, kInternalSpeaker.id);
   1753   EXPECT_EQ(kVolume, audio_pref_handler_->GetOutputVolumeValue(&device));
   1754 }
   1755 
   1756 TEST_F(CrasAudioHandlerTest, SetInputGainPercent) {
   1757   AudioNodeList audio_nodes;
   1758   audio_nodes.push_back(kInternalMic);
   1759   SetUpCrasAudioHandler(audio_nodes);
   1760   EXPECT_EQ(0, test_observer_->input_gain_changed_count());
   1761 
   1762   cras_audio_handler_->SetInputGainPercent(60);
   1763 
   1764   // Verify the input gain changed to the designated value,
   1765   // OnInputGainChanged event is fired, and the device gain value
   1766   // is saved in the preferences.
   1767   const int kGain = 60;
   1768   EXPECT_EQ(kGain, cras_audio_handler_->GetInputGainPercent());
   1769   EXPECT_EQ(1, test_observer_->input_gain_changed_count());
   1770   AudioDevice internal_mic(kInternalMic);
   1771   EXPECT_EQ(kGain, audio_pref_handler_->GetInputGainValue(&internal_mic));
   1772 }
   1773 
   1774 TEST_F(CrasAudioHandlerTest, SetMuteForDevice) {
   1775   AudioNodeList audio_nodes;
   1776   audio_nodes.push_back(kInternalSpeaker);
   1777   audio_nodes.push_back(kHeadphone);
   1778   audio_nodes.push_back(kInternalMic);
   1779   audio_nodes.push_back(kUSBMic);
   1780   SetUpCrasAudioHandler(audio_nodes);
   1781 
   1782   // Mute the active output device.
   1783   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1784   cras_audio_handler_->SetMuteForDevice(kHeadphone.id, true);
   1785 
   1786   // Verify the headphone is muted and mute value is saved in the preferences.
   1787   EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kHeadphone.id));
   1788   AudioDevice headphone(kHeadphone);
   1789   EXPECT_TRUE(audio_pref_handler_->GetMuteValue(headphone));
   1790 
   1791   // Mute the non-active output device.
   1792   cras_audio_handler_->SetMuteForDevice(kInternalSpeaker.id, true);
   1793 
   1794   // Verify the internal speaker is muted and mute value is saved in the
   1795   // preferences.
   1796   EXPECT_TRUE(cras_audio_handler_->IsOutputMutedForDevice(kInternalSpeaker.id));
   1797   AudioDevice internal_speaker(kInternalSpeaker);
   1798   EXPECT_TRUE(audio_pref_handler_->GetMuteValue(internal_speaker));
   1799 
   1800   // Mute the active input device.
   1801   EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1802   cras_audio_handler_->SetMuteForDevice(kUSBMic.id, true);
   1803 
   1804   // Verify the USB Mic is muted.
   1805   EXPECT_TRUE(cras_audio_handler_->IsInputMutedForDevice(kUSBMic.id));
   1806 
   1807   // Mute the non-active input device should be a no-op, see crbug.com/365050.
   1808   cras_audio_handler_->SetMuteForDevice(kInternalMic.id, true);
   1809 
   1810   // Verify IsInputMutedForDevice returns false for non-active input device.
   1811   EXPECT_FALSE(cras_audio_handler_->IsInputMutedForDevice(kInternalMic.id));
   1812 }
   1813 
   1814 TEST_F(CrasAudioHandlerTest, SetVolumeGainPercentForDevice) {
   1815   AudioNodeList audio_nodes;
   1816   audio_nodes.push_back(kInternalSpeaker);
   1817   audio_nodes.push_back(kHeadphone);
   1818   audio_nodes.push_back(kInternalMic);
   1819   audio_nodes.push_back(kUSBMic);
   1820   SetUpCrasAudioHandler(audio_nodes);
   1821 
   1822   // Set volume percent for active output device.
   1823   const int kHeadphoneVolume = 30;
   1824   EXPECT_EQ(kHeadphone.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   1825   cras_audio_handler_->SetVolumeGainPercentForDevice(kHeadphone.id,
   1826                                                      kHeadphoneVolume);
   1827 
   1828   // Verify the volume percent of headphone is set, and saved in preferences.
   1829   EXPECT_EQ(kHeadphoneVolume,
   1830             cras_audio_handler_->GetOutputVolumePercentForDevice(
   1831                 kHeadphone.id));
   1832   AudioDevice headphone(kHeadphone);
   1833   EXPECT_EQ(kHeadphoneVolume,
   1834             audio_pref_handler_->GetOutputVolumeValue(&headphone));
   1835 
   1836   // Set volume percent for non-active output device.
   1837   const int kSpeakerVolume = 60;
   1838   cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalSpeaker.id,
   1839                                                      kSpeakerVolume);
   1840 
   1841   // Verify the volume percent of speaker is set, and saved in preferences.
   1842   EXPECT_EQ(kSpeakerVolume,
   1843             cras_audio_handler_->GetOutputVolumePercentForDevice(
   1844                 kInternalSpeaker.id));
   1845   AudioDevice speaker(kInternalSpeaker);
   1846   EXPECT_EQ(kSpeakerVolume,
   1847             audio_pref_handler_->GetOutputVolumeValue(&speaker));
   1848 
   1849   // Set gain percent for active input device.
   1850   const int kUSBMicGain = 30;
   1851   EXPECT_EQ(kUSBMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1852   cras_audio_handler_->SetVolumeGainPercentForDevice(kUSBMic.id,
   1853                                                      kUSBMicGain);
   1854 
   1855   // Verify the gain percent of USB mic is set, and saved in preferences.
   1856   EXPECT_EQ(kUSBMicGain,
   1857             cras_audio_handler_->GetOutputVolumePercentForDevice(kUSBMic.id));
   1858   AudioDevice usb_mic(kHeadphone);
   1859   EXPECT_EQ(kUSBMicGain,
   1860             audio_pref_handler_->GetInputGainValue(&usb_mic));
   1861 
   1862   // Set gain percent for non-active input device.
   1863   const int kInternalMicGain = 60;
   1864   cras_audio_handler_->SetVolumeGainPercentForDevice(kInternalMic.id,
   1865                                                      kInternalMicGain);
   1866 
   1867   // Verify the gain percent of internal mic is set, and saved in preferences.
   1868   EXPECT_EQ(kInternalMicGain,
   1869             cras_audio_handler_->GetOutputVolumePercentForDevice(
   1870                 kInternalMic.id));
   1871   AudioDevice internal_mic(kInternalMic);
   1872   EXPECT_EQ(kInternalMicGain,
   1873             audio_pref_handler_->GetInputGainValue(&internal_mic));
   1874 }
   1875 
   1876 TEST_F(CrasAudioHandlerTest, HandleOtherDeviceType) {
   1877   const size_t kNumValidAudioDevices = 4;
   1878   AudioNodeList audio_nodes;
   1879   audio_nodes.push_back(kInternalSpeaker);
   1880   audio_nodes.push_back(kOtherTypeOutput);
   1881   audio_nodes.push_back(kInternalMic);
   1882   audio_nodes.push_back(kOtherTypeInput);
   1883   SetUpCrasAudioHandler(audio_nodes);
   1884 
   1885   // Verify the audio devices size.
   1886   AudioDeviceList audio_devices;
   1887   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1888   EXPECT_EQ(kNumValidAudioDevices, audio_devices.size());
   1889 
   1890   // Verify the internal speaker has been selected as the active output,
   1891   // and the output device with some randown unknown type is handled gracefully.
   1892   AudioDevice active_output;
   1893   EXPECT_TRUE(
   1894       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1895   EXPECT_EQ(kInternalSpeaker.id, active_output.id);
   1896   EXPECT_EQ(kInternalSpeaker.id,
   1897             cras_audio_handler_->GetPrimaryActiveOutputNode());
   1898   EXPECT_TRUE(cras_audio_handler_->has_alternative_output());
   1899 
   1900   // Ensure the internal microphone has been selected as the active input,
   1901   // and the input device with some random unknown type is handled gracefully.
   1902   AudioDevice active_input;
   1903   EXPECT_EQ(kInternalMic.id, cras_audio_handler_->GetPrimaryActiveInputNode());
   1904   EXPECT_TRUE(cras_audio_handler_->has_alternative_input());
   1905 }
   1906 
   1907 TEST_F(CrasAudioHandlerTest, ChangeActiveNodesHotrodInit) {
   1908   AudioNodeList audio_nodes;
   1909   audio_nodes.push_back(kHDMIOutput);
   1910   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   1911   audio_nodes.push_back(kUSBJabraSpeakerOutput2);
   1912   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   1913   audio_nodes.push_back(kUSBJabraSpeakerInput2);
   1914   audio_nodes.push_back(kUSBCameraInput);
   1915   SetUpCrasAudioHandler(audio_nodes);
   1916 
   1917   // Verify the audio devices size.
   1918   AudioDeviceList audio_devices;
   1919   cras_audio_handler_->GetAudioDevices(&audio_devices);
   1920   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   1921 
   1922   // Verify only the 1st jabra speaker's output and input are selected as active
   1923   // nodes by CrasAudioHandler.
   1924   AudioDevice active_output;
   1925   EXPECT_TRUE(
   1926       cras_audio_handler_->GetPrimaryActiveOutputDevice(&active_output));
   1927   EXPECT_EQ(2, GetActiveDeviceCount());
   1928   AudioDevice primary_active_device;
   1929   EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(
   1930       &primary_active_device));
   1931   EXPECT_EQ(kUSBJabraSpeakerOutput1.id, primary_active_device.id);
   1932   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   1933             cras_audio_handler_->GetPrimaryActiveInputNode());
   1934 
   1935   // Set both jabra speakers's input and output nodes to active, this simulate
   1936   // the call sent by hotrod initialization process.
   1937   test_observer_->reset_active_output_node_changed_count();
   1938   test_observer_->reset_active_input_node_changed_count();
   1939   CrasAudioHandler::NodeIdList active_nodes;
   1940   active_nodes.push_back(kUSBJabraSpeakerOutput1.id);
   1941   active_nodes.push_back(kUSBJabraSpeakerOutput2.id);
   1942   active_nodes.push_back(kUSBJabraSpeakerInput1.id);
   1943   active_nodes.push_back(kUSBJabraSpeakerInput2.id);
   1944   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   1945 
   1946   // Verify both jabra speakers' input/output nodes are made active.
   1947   // num_active_nodes = GetActiveDeviceCount();
   1948   EXPECT_EQ(4, GetActiveDeviceCount());
   1949   const AudioDevice* active_output_1 =
   1950       GetDeviceFromId(kUSBJabraSpeakerOutput1.id);
   1951   EXPECT_TRUE(active_output_1->active);
   1952   const AudioDevice* active_output_2 =
   1953       GetDeviceFromId(kUSBJabraSpeakerOutput2.id);
   1954   EXPECT_TRUE(active_output_2->active);
   1955   EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(
   1956       &primary_active_device));
   1957   EXPECT_EQ(kUSBJabraSpeakerOutput1.id, primary_active_device.id);
   1958   const AudioDevice* active_input_1 =
   1959       GetDeviceFromId(kUSBJabraSpeakerInput1.id);
   1960   EXPECT_TRUE(active_input_1->active);
   1961   const AudioDevice* active_input_2 =
   1962       GetDeviceFromId(kUSBJabraSpeakerInput2.id);
   1963   EXPECT_TRUE(active_input_2->active);
   1964   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   1965             cras_audio_handler_->GetPrimaryActiveInputNode());
   1966 
   1967   // Verify only 1 ActiveOutputNodeChanged notification has been sent out
   1968   // by calling ChangeActiveNodes.
   1969   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   1970   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   1971 
   1972   // Verify all active devices are the not muted and their volume values are
   1973   // the same.
   1974   EXPECT_FALSE(cras_audio_handler_->IsOutputMuted());
   1975   EXPECT_FALSE(
   1976       cras_audio_handler_->IsOutputMutedForDevice(kUSBJabraSpeakerOutput1.id));
   1977   EXPECT_FALSE(
   1978       cras_audio_handler_->IsOutputMutedForDevice(kUSBJabraSpeakerOutput2.id));
   1979   EXPECT_EQ(cras_audio_handler_->GetOutputVolumePercent(),
   1980             cras_audio_handler_->GetOutputVolumePercentForDevice(
   1981                 kUSBJabraSpeakerOutput1.id));
   1982   EXPECT_EQ(cras_audio_handler_->GetOutputVolumePercent(),
   1983             cras_audio_handler_->GetOutputVolumePercentForDevice(
   1984                 kUSBJabraSpeakerOutput2.id));
   1985 
   1986   // Adjust the volume of output devices, verify all active nodes are set to
   1987   // the same volume.
   1988   cras_audio_handler_->SetOutputVolumePercent(25);
   1989   EXPECT_EQ(25, cras_audio_handler_->GetOutputVolumePercent());
   1990   EXPECT_EQ(25, cras_audio_handler_->GetOutputVolumePercentForDevice(
   1991                     kUSBJabraSpeakerOutput1.id));
   1992   EXPECT_EQ(25, cras_audio_handler_->GetOutputVolumePercentForDevice(
   1993                     kUSBJabraSpeakerOutput2.id));
   1994 }
   1995 
   1996 TEST_F(CrasAudioHandlerTest, ChangeActiveNodesHotrodInitWithCameraInputActive) {
   1997   AudioNodeList audio_nodes;
   1998   audio_nodes.push_back(kHDMIOutput);
   1999   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2000   audio_nodes.push_back(kUSBJabraSpeakerOutput2);
   2001   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2002   audio_nodes.push_back(kUSBJabraSpeakerInput2);
   2003   // Make the camera input to be plugged in later than jabra's input.
   2004   AudioNode usb_camera(kUSBCameraInput);
   2005   usb_camera.plugged_time = 10000000;
   2006   audio_nodes.push_back(usb_camera);
   2007   SetUpCrasAudioHandler(audio_nodes);
   2008 
   2009   // Verify the audio devices size.
   2010   AudioDeviceList audio_devices;
   2011   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2012   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2013 
   2014   // Verify the 1st jabra speaker's output is selected as active output
   2015   // node and camera's input is selected active input by CrasAudioHandler.
   2016   EXPECT_EQ(2, GetActiveDeviceCount());
   2017   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2018             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2019   EXPECT_EQ(kUSBCameraInput.id,
   2020             cras_audio_handler_->GetPrimaryActiveInputNode());
   2021 
   2022   // Set both jabra speakers's input and output nodes to active, this simulates
   2023   // the call sent by hotrod initialization process.
   2024   test_observer_->reset_active_output_node_changed_count();
   2025   test_observer_->reset_active_input_node_changed_count();
   2026   CrasAudioHandler::NodeIdList active_nodes;
   2027   active_nodes.push_back(kUSBJabraSpeakerOutput1.id);
   2028   active_nodes.push_back(kUSBJabraSpeakerOutput2.id);
   2029   active_nodes.push_back(kUSBJabraSpeakerInput1.id);
   2030   active_nodes.push_back(kUSBJabraSpeakerInput2.id);
   2031   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2032 
   2033   // Verify both jabra speakers' input/output nodes are made active.
   2034   // num_active_nodes = GetActiveDeviceCount();
   2035   EXPECT_EQ(4, GetActiveDeviceCount());
   2036   const AudioDevice* active_output_1 =
   2037       GetDeviceFromId(kUSBJabraSpeakerOutput1.id);
   2038   EXPECT_TRUE(active_output_1->active);
   2039   const AudioDevice* active_output_2 =
   2040       GetDeviceFromId(kUSBJabraSpeakerOutput2.id);
   2041   EXPECT_TRUE(active_output_2->active);
   2042   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2043             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2044   const AudioDevice* active_input_1 =
   2045       GetDeviceFromId(kUSBJabraSpeakerInput1.id);
   2046   EXPECT_TRUE(active_input_1->active);
   2047   const AudioDevice* active_input_2 =
   2048       GetDeviceFromId(kUSBJabraSpeakerInput2.id);
   2049   EXPECT_TRUE(active_input_2->active);
   2050   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2051             cras_audio_handler_->GetPrimaryActiveInputNode());
   2052 
   2053   // Verify only 1 ActiveOutputNodeChanged notification has been sent out
   2054   // by calling ChangeActiveNodes.
   2055   EXPECT_EQ(1, test_observer_->active_output_node_changed_count());
   2056   EXPECT_EQ(1, test_observer_->active_input_node_changed_count());
   2057 }
   2058 
   2059 TEST_F(CrasAudioHandlerTest, ChangeActiveNodesWithFewerActives) {
   2060   AudioNodeList audio_nodes;
   2061   audio_nodes.push_back(kHDMIOutput);
   2062   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2063   audio_nodes.push_back(kUSBJabraSpeakerOutput2);
   2064   SetUpCrasAudioHandler(audio_nodes);
   2065 
   2066   // Verify the audio devices size.
   2067   AudioDeviceList audio_devices;
   2068   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2069   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2070 
   2071   // Set all three nodes to be active.
   2072   CrasAudioHandler::NodeIdList active_nodes;
   2073   active_nodes.push_back(kHDMIOutput.id);
   2074   active_nodes.push_back(kUSBJabraSpeakerOutput1.id);
   2075   active_nodes.push_back(kUSBJabraSpeakerOutput2.id);
   2076   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2077 
   2078   // Verify all three nodes are active.
   2079   EXPECT_EQ(3, GetActiveDeviceCount());
   2080   const AudioDevice* active_output_1 = GetDeviceFromId(kHDMIOutput.id);
   2081   EXPECT_TRUE(active_output_1->active);
   2082   const AudioDevice* active_output_2 =
   2083       GetDeviceFromId(kUSBJabraSpeakerOutput1.id);
   2084   EXPECT_TRUE(active_output_2->active);
   2085   const AudioDevice* active_output_3 =
   2086       GetDeviceFromId(kUSBJabraSpeakerOutput2.id);
   2087   EXPECT_TRUE(active_output_3->active);
   2088 
   2089   // Now call ChangeActiveDevices with only 2 nodes.
   2090   active_nodes.clear();
   2091   active_nodes.push_back(kUSBJabraSpeakerOutput1.id);
   2092   active_nodes.push_back(kUSBJabraSpeakerOutput2.id);
   2093   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2094 
   2095   // Verify only 2 nodes are active.
   2096   EXPECT_EQ(2, GetActiveDeviceCount());
   2097   const AudioDevice* output_1 = GetDeviceFromId(kHDMIOutput.id);
   2098   EXPECT_FALSE(output_1->active);
   2099   const AudioDevice* output_2 = GetDeviceFromId(kUSBJabraSpeakerOutput1.id);
   2100   EXPECT_TRUE(output_2->active);
   2101   const AudioDevice* output_3 = GetDeviceFromId(kUSBJabraSpeakerOutput2.id);
   2102   EXPECT_TRUE(output_3->active);
   2103 }
   2104 
   2105 TEST_F(CrasAudioHandlerTest, HotrodInitWithSingleJabra) {
   2106   // Simulates the hotrod initializated with a single jabra device and
   2107   // CrasAudioHandler selected jabra input/output as active devices.
   2108   AudioNodeList audio_nodes;
   2109   audio_nodes.push_back(kHDMIOutput);
   2110   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2111   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2112   audio_nodes.push_back(kUSBCameraInput);
   2113   SetUpCrasAudioHandler(audio_nodes);
   2114 
   2115   // Verify the audio devices size.
   2116   AudioDeviceList audio_devices;
   2117   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2118   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2119 
   2120   // Verify the jabra speaker's output and input are selected as active nodes
   2121   // by CrasAudioHandler.
   2122   EXPECT_EQ(2, GetActiveDeviceCount());
   2123   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2124             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2125   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2126             cras_audio_handler_->GetPrimaryActiveInputNode());
   2127 }
   2128 
   2129 TEST_F(CrasAudioHandlerTest,
   2130        ChangeActiveNodesHotrodInitWithSingleJabraCameraPlugInLater) {
   2131   AudioNodeList audio_nodes;
   2132   audio_nodes.push_back(kHDMIOutput);
   2133   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2134   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2135   AudioNode usb_camera(kUSBCameraInput);
   2136   usb_camera.plugged_time = 10000000;
   2137   audio_nodes.push_back(usb_camera);
   2138   SetUpCrasAudioHandler(audio_nodes);
   2139 
   2140   // Verify the audio devices size.
   2141   AudioDeviceList audio_devices;
   2142   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2143   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2144 
   2145   // Verify the jabra speaker's output is selected as active output, and
   2146   // camera's input is selected as active input by CrasAudioHandler
   2147   EXPECT_EQ(2, GetActiveDeviceCount());
   2148   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2149             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2150   EXPECT_EQ(kUSBCameraInput.id,
   2151             cras_audio_handler_->GetPrimaryActiveInputNode());
   2152 
   2153   // Simulate hotrod app call to set jabra input as active device with only
   2154   // jabra input node in the active node list, which does not conform to the
   2155   // new SetActiveDevices protocol, but just show we can still handle it if
   2156   // this happens.
   2157   CrasAudioHandler::NodeIdList active_nodes;
   2158   active_nodes.push_back(kUSBJabraSpeakerOutput1.id);
   2159   active_nodes.push_back(kUSBJabraSpeakerInput1.id);
   2160   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2161 
   2162   // Verify the jabra speaker's output is selected as active output, and
   2163   // jabra's input is selected as active input.
   2164   EXPECT_EQ(2, GetActiveDeviceCount());
   2165   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2166             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2167   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2168             cras_audio_handler_->GetPrimaryActiveInputNode());
   2169 }
   2170 
   2171 TEST_F(CrasAudioHandlerTest,
   2172        ChangeActiveNodesHotrodInitWithSingleJabraCameraPlugInLaterOldCall) {
   2173   AudioNodeList audio_nodes;
   2174   audio_nodes.push_back(kHDMIOutput);
   2175   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2176   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2177   AudioNode usb_camera(kUSBCameraInput);
   2178   usb_camera.plugged_time = 10000000;
   2179   audio_nodes.push_back(usb_camera);
   2180   SetUpCrasAudioHandler(audio_nodes);
   2181 
   2182   // Verify the audio devices size.
   2183   AudioDeviceList audio_devices;
   2184   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2185   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2186 
   2187   // Verify the jabra speaker's output is selected as active output, and
   2188   // camera's input is selected as active input by CrasAudioHandler
   2189   EXPECT_EQ(2, GetActiveDeviceCount());
   2190   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2191             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2192   EXPECT_EQ(kUSBCameraInput.id,
   2193             cras_audio_handler_->GetPrimaryActiveInputNode());
   2194 
   2195   // Simulate hotrod app call to set jabra input as active device with only
   2196   // jabra input node in the active node list, which does not conform to the
   2197   // new SetActiveDevices protocol, but just show we can still handle it if
   2198   // this happens.
   2199   CrasAudioHandler::NodeIdList active_nodes;
   2200   active_nodes.push_back(kUSBJabraSpeakerInput1.id);
   2201   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2202 
   2203   // Verify the jabra speaker's output is selected as active output, and
   2204   // jabra's input is selected as active input.
   2205   EXPECT_EQ(2, GetActiveDeviceCount());
   2206   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2207             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2208   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2209             cras_audio_handler_->GetPrimaryActiveInputNode());
   2210 }
   2211 
   2212 TEST_F(CrasAudioHandlerTest,
   2213        ChangeActiveNodesHotrodInitWithSingleJabraChangeOutput) {
   2214   AudioNodeList audio_nodes;
   2215   audio_nodes.push_back(kHDMIOutput);
   2216   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2217   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2218   audio_nodes.push_back(kUSBCameraInput);
   2219   SetUpCrasAudioHandler(audio_nodes);
   2220 
   2221   // Verify the audio devices size.
   2222   AudioDeviceList audio_devices;
   2223   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2224   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2225 
   2226   // Verify the jabra speaker's output and input are selected as active output
   2227   // by CrasAudioHandler.
   2228   EXPECT_EQ(2, GetActiveDeviceCount());
   2229   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2230             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2231   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2232             cras_audio_handler_->GetPrimaryActiveInputNode());
   2233 
   2234   // Simulate hotrod app call SetActiveDevices to change active output
   2235   // with only complete list of active nodes passed in, which is the new
   2236   // way of hotrod app.
   2237   CrasAudioHandler::NodeIdList active_nodes;
   2238   active_nodes.push_back(kHDMIOutput.id);
   2239   active_nodes.push_back(kUSBJabraSpeakerInput1.id);
   2240   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2241 
   2242   // Verify the jabra speaker's output is selected as active output, and
   2243   // jabra's input is selected as active input.
   2244   EXPECT_EQ(2, GetActiveDeviceCount());
   2245   EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   2246   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2247             cras_audio_handler_->GetPrimaryActiveInputNode());
   2248 }
   2249 
   2250 TEST_F(CrasAudioHandlerTest,
   2251        ChangeActiveNodesHotrodInitWithSingleJabraChangeOutputOldCall) {
   2252   AudioNodeList audio_nodes;
   2253   audio_nodes.push_back(kHDMIOutput);
   2254   audio_nodes.push_back(kUSBJabraSpeakerOutput1);
   2255   audio_nodes.push_back(kUSBJabraSpeakerInput1);
   2256   audio_nodes.push_back(kUSBCameraInput);
   2257   SetUpCrasAudioHandler(audio_nodes);
   2258 
   2259   // Verify the audio devices size.
   2260   AudioDeviceList audio_devices;
   2261   cras_audio_handler_->GetAudioDevices(&audio_devices);
   2262   EXPECT_EQ(audio_nodes.size(), audio_devices.size());
   2263 
   2264   // Verify the jabra speaker's output and input are selected as active output
   2265   // by CrasAudioHandler.
   2266   EXPECT_EQ(2, GetActiveDeviceCount());
   2267   EXPECT_EQ(kUSBJabraSpeakerOutput1.id,
   2268             cras_audio_handler_->GetPrimaryActiveOutputNode());
   2269   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2270             cras_audio_handler_->GetPrimaryActiveInputNode());
   2271 
   2272   // Simulate hotrod app call SetActiveDevices to change active output
   2273   // with only a single active output nodes passed in, which is the old
   2274   // way of hotrod app.
   2275   CrasAudioHandler::NodeIdList active_nodes;
   2276   active_nodes.push_back(kHDMIOutput.id);
   2277   cras_audio_handler_->ChangeActiveNodes(active_nodes);
   2278 
   2279   // Verify the jabra speaker's output is selected as active output, and
   2280   // jabra's input is selected as active input.
   2281   EXPECT_EQ(2, GetActiveDeviceCount());
   2282   EXPECT_EQ(kHDMIOutput.id, cras_audio_handler_->GetPrimaryActiveOutputNode());
   2283   EXPECT_EQ(kUSBJabraSpeakerInput1.id,
   2284             cras_audio_handler_->GetPrimaryActiveInputNode());
   2285 }
   2286 
   2287 }  // namespace chromeos
   2288