| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 11 #include "extensions/shell/test/shell_apitest.h" | 11 #include "extensions/shell/test/shell_apitest.h" |
| 12 #include "extensions/test/extension_test_message_listener.h" |
| 13 #include "extensions/test/result_catcher.h" |
| 14 |
| 12 #if defined(OS_CHROMEOS) | 15 #if defined(OS_CHROMEOS) |
| 13 #include "chromeos/audio/audio_devices_pref_handler_stub.h" | 16 #include "chromeos/audio/audio_devices_pref_handler_stub.h" |
| 14 #include "chromeos/audio/cras_audio_handler.h" | 17 #include "chromeos/audio/cras_audio_handler.h" |
| 15 #include "chromeos/dbus/dbus_thread_manager.h" | 18 #include "chromeos/dbus/dbus_thread_manager.h" |
| 16 #include "chromeos/dbus/fake_cras_audio_client.h" | 19 #include "chromeos/dbus/fake_cras_audio_client.h" |
| 17 #endif | 20 #endif |
| 18 #include "extensions/test/extension_test_message_listener.h" | |
| 19 | 21 |
| 20 namespace extensions { | 22 namespace extensions { |
| 21 | 23 |
| 22 #if defined(OS_CHROMEOS) | 24 #if defined(OS_CHROMEOS) |
| 23 using chromeos::AudioDevice; | 25 using chromeos::AudioDevice; |
| 24 using chromeos::AudioDeviceList; | 26 using chromeos::AudioDeviceList; |
| 25 using chromeos::AudioNode; | 27 using chromeos::AudioNode; |
| 26 using chromeos::AudioNodeList; | 28 using chromeos::AudioNodeList; |
| 27 | 29 |
| 28 const uint64_t kJabraSpeaker1Id = 30001; | 30 const uint64_t kJabraSpeaker1Id = 30001; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 audio_nodes.push_back(kJabraSpeaker1); | 144 audio_nodes.push_back(kJabraSpeaker1); |
| 143 audio_nodes.push_back(kHDMIOutput); | 145 audio_nodes.push_back(kHDMIOutput); |
| 144 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); | 146 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); |
| 145 | 147 |
| 146 // Verify the jabra speaker is the active output device. | 148 // Verify the jabra speaker is the active output device. |
| 147 AudioDevice device; | 149 AudioDevice device; |
| 148 EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); | 150 EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); |
| 149 EXPECT_EQ(device.id, kJabraSpeaker1.id); | 151 EXPECT_EQ(device.id, kJabraSpeaker1.id); |
| 150 | 152 |
| 151 // Loads background app. | 153 // Loads background app. |
| 154 ResultCatcher result_catcher; |
| 152 ExtensionTestMessageListener load_listener("loaded", false); | 155 ExtensionTestMessageListener load_listener("loaded", false); |
| 153 ExtensionTestMessageListener result_listener("success", false); | |
| 154 result_listener.set_failure_message("failure"); | |
| 155 ASSERT_TRUE(LoadApp("api_test/audio/volume_change")); | 156 ASSERT_TRUE(LoadApp("api_test/audio/volume_change")); |
| 156 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); | 157 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| 157 | 158 |
| 158 // Change output device volume. | 159 // Change output device volume. |
| 159 const int kVolume = 60; | 160 const int kVolume = 60; |
| 160 cras_audio_handler_->SetOutputVolumePercent(kVolume); | 161 cras_audio_handler_->SetOutputVolumePercent(kVolume); |
| 161 | 162 |
| 162 // Verify the output volume is changed to the designated value. | 163 // Verify the output volume is changed to the designated value. |
| 163 EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); | 164 EXPECT_EQ(kVolume, cras_audio_handler_->GetOutputVolumePercent()); |
| 164 EXPECT_EQ(kVolume, | 165 EXPECT_EQ(kVolume, |
| 165 cras_audio_handler_->GetOutputVolumePercentForDevice(device.id)); | 166 cras_audio_handler_->GetOutputVolumePercentForDevice(device.id)); |
| 166 | 167 |
| 167 // Verify the background app got the OnOutputNodeVolumeChanged event | 168 // Verify the background app got the OnOutputNodeVolumeChanged event |
| 168 // with the expected node id and volume value. | 169 // with the expected node id and volume value. |
| 169 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 170 ASSERT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); |
| 170 EXPECT_EQ("success", result_listener.message()); | |
| 171 } | 171 } |
| 172 | 172 |
| 173 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnOutputMuteChanged) { | 173 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnOutputMuteChanged) { |
| 174 AudioNodeList audio_nodes; | 174 AudioNodeList audio_nodes; |
| 175 audio_nodes.push_back(kJabraSpeaker1); | 175 audio_nodes.push_back(kJabraSpeaker1); |
| 176 audio_nodes.push_back(kHDMIOutput); | 176 audio_nodes.push_back(kHDMIOutput); |
| 177 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); | 177 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); |
| 178 | 178 |
| 179 // Verify the jabra speaker is the active output device. | 179 // Verify the jabra speaker is the active output device. |
| 180 AudioDevice device; | 180 AudioDevice device; |
| 181 EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); | 181 EXPECT_TRUE(cras_audio_handler_->GetPrimaryActiveOutputDevice(&device)); |
| 182 EXPECT_EQ(device.id, kJabraSpeaker1.id); | 182 EXPECT_EQ(device.id, kJabraSpeaker1.id); |
| 183 | 183 |
| 184 // Mute the output. | 184 // Mute the output. |
| 185 cras_audio_handler_->SetOutputMute(true); | 185 cras_audio_handler_->SetOutputMute(true); |
| 186 EXPECT_TRUE(cras_audio_handler_->IsOutputMuted()); | 186 EXPECT_TRUE(cras_audio_handler_->IsOutputMuted()); |
| 187 | 187 |
| 188 // Loads background app. | 188 // Loads background app. |
| 189 ResultCatcher result_catcher; |
| 189 ExtensionTestMessageListener load_listener("loaded", false); | 190 ExtensionTestMessageListener load_listener("loaded", false); |
| 190 ExtensionTestMessageListener result_listener("success", false); | |
| 191 result_listener.set_failure_message("failure"); | |
| 192 ASSERT_TRUE(LoadApp("api_test/audio/output_mute_change")); | 191 ASSERT_TRUE(LoadApp("api_test/audio/output_mute_change")); |
| 193 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); | 192 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| 194 | 193 |
| 195 // Un-mute the output. | 194 // Un-mute the output. |
| 196 cras_audio_handler_->SetOutputMute(false); | 195 cras_audio_handler_->SetOutputMute(false); |
| 197 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted()); | 196 EXPECT_FALSE(cras_audio_handler_->IsOutputMuted()); |
| 198 | 197 |
| 199 // Verify the background app got the OnMuteChanged event | 198 // Verify the background app got the OnMuteChanged event |
| 200 // with the expected output un-muted state. | 199 // with the expected output un-muted state. |
| 201 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 200 EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); |
| 202 EXPECT_EQ("success", result_listener.message()); | |
| 203 } | 201 } |
| 204 | 202 |
| 205 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnInputMuteChanged) { | 203 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnInputMuteChanged) { |
| 206 AudioNodeList audio_nodes; | 204 AudioNodeList audio_nodes; |
| 207 audio_nodes.push_back(kJabraMic1); | 205 audio_nodes.push_back(kJabraMic1); |
| 208 audio_nodes.push_back(kUSBCameraMic); | 206 audio_nodes.push_back(kUSBCameraMic); |
| 209 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); | 207 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); |
| 210 | 208 |
| 211 // Set the jabra mic to be the active input device. | 209 // Set the jabra mic to be the active input device. |
| 212 AudioDevice jabra_mic(kJabraMic1); | 210 AudioDevice jabra_mic(kJabraMic1); |
| 213 cras_audio_handler_->SwitchToDevice( | 211 cras_audio_handler_->SwitchToDevice( |
| 214 jabra_mic, true, chromeos::CrasAudioHandler::ACTIVATE_BY_USER); | 212 jabra_mic, true, chromeos::CrasAudioHandler::ACTIVATE_BY_USER); |
| 215 EXPECT_EQ(kJabraMic1.id, cras_audio_handler_->GetPrimaryActiveInputNode()); | 213 EXPECT_EQ(kJabraMic1.id, cras_audio_handler_->GetPrimaryActiveInputNode()); |
| 216 | 214 |
| 217 // Un-mute the input. | 215 // Un-mute the input. |
| 218 cras_audio_handler_->SetInputMute(false); | 216 cras_audio_handler_->SetInputMute(false); |
| 219 EXPECT_FALSE(cras_audio_handler_->IsInputMuted()); | 217 EXPECT_FALSE(cras_audio_handler_->IsInputMuted()); |
| 220 | 218 |
| 221 // Loads background app. | 219 // Loads background app. |
| 220 ResultCatcher result_catcher; |
| 222 ExtensionTestMessageListener load_listener("loaded", false); | 221 ExtensionTestMessageListener load_listener("loaded", false); |
| 223 ExtensionTestMessageListener result_listener("success", false); | |
| 224 result_listener.set_failure_message("failure"); | |
| 225 ASSERT_TRUE(LoadApp("api_test/audio/input_mute_change")); | 222 ASSERT_TRUE(LoadApp("api_test/audio/input_mute_change")); |
| 226 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); | 223 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| 227 | 224 |
| 228 // Mute the input. | 225 // Mute the input. |
| 229 cras_audio_handler_->SetInputMute(true); | 226 cras_audio_handler_->SetInputMute(true); |
| 230 EXPECT_TRUE(cras_audio_handler_->IsInputMuted()); | 227 EXPECT_TRUE(cras_audio_handler_->IsInputMuted()); |
| 231 | 228 |
| 232 // Verify the background app got the OnMuteChanged event | 229 // Verify the background app got the OnMuteChanged event |
| 233 // with the expected input muted state. | 230 // with the expected input muted state. |
| 234 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 231 EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); |
| 235 EXPECT_EQ("success", result_listener.message()); | |
| 236 } | 232 } |
| 237 | 233 |
| 238 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnNodesChangedAddNodes) { | 234 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnNodesChangedAddNodes) { |
| 239 AudioNodeList audio_nodes; | 235 AudioNodeList audio_nodes; |
| 240 audio_nodes.push_back(kJabraSpeaker1); | 236 audio_nodes.push_back(kJabraSpeaker1); |
| 241 audio_nodes.push_back(kJabraSpeaker2); | 237 audio_nodes.push_back(kJabraSpeaker2); |
| 242 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); | 238 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); |
| 243 const size_t init_device_size = audio_nodes.size(); | 239 const size_t init_device_size = audio_nodes.size(); |
| 244 | 240 |
| 245 AudioDeviceList audio_devices; | 241 AudioDeviceList audio_devices; |
| 246 cras_audio_handler_->GetAudioDevices(&audio_devices); | 242 cras_audio_handler_->GetAudioDevices(&audio_devices); |
| 247 EXPECT_EQ(init_device_size, audio_devices.size()); | 243 EXPECT_EQ(init_device_size, audio_devices.size()); |
| 248 | 244 |
| 249 // Load background app. | 245 // Load background app. |
| 246 ResultCatcher result_catcher; |
| 250 ExtensionTestMessageListener load_listener("loaded", false); | 247 ExtensionTestMessageListener load_listener("loaded", false); |
| 251 ExtensionTestMessageListener result_listener("success", false); | |
| 252 result_listener.set_failure_message("failure"); | |
| 253 ASSERT_TRUE(LoadApp("api_test/audio/add_nodes")); | 248 ASSERT_TRUE(LoadApp("api_test/audio/add_nodes")); |
| 254 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); | 249 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| 255 | 250 |
| 256 // Plug in HDMI output. | 251 // Plug in HDMI output. |
| 257 audio_nodes.push_back(kHDMIOutput); | 252 audio_nodes.push_back(kHDMIOutput); |
| 258 ChangeAudioNodes(audio_nodes); | 253 ChangeAudioNodes(audio_nodes); |
| 259 cras_audio_handler_->GetAudioDevices(&audio_devices); | 254 cras_audio_handler_->GetAudioDevices(&audio_devices); |
| 260 EXPECT_EQ(init_device_size + 1, audio_devices.size()); | 255 EXPECT_EQ(init_device_size + 1, audio_devices.size()); |
| 261 | 256 |
| 262 // Verify the background app got the OnNodesChanged event | 257 // Verify the background app got the OnNodesChanged event |
| 263 // with the new node added. | 258 // with the new node added. |
| 264 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 259 EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); |
| 265 EXPECT_EQ("success", result_listener.message()); | |
| 266 } | 260 } |
| 267 | 261 |
| 268 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnNodesChangedRemoveNodes) { | 262 IN_PROC_BROWSER_TEST_F(AudioApiTest, OnNodesChangedRemoveNodes) { |
| 269 AudioNodeList audio_nodes; | 263 AudioNodeList audio_nodes; |
| 270 audio_nodes.push_back(kJabraMic1); | 264 audio_nodes.push_back(kJabraMic1); |
| 271 audio_nodes.push_back(kJabraMic2); | 265 audio_nodes.push_back(kJabraMic2); |
| 272 audio_nodes.push_back(kUSBCameraMic); | 266 audio_nodes.push_back(kUSBCameraMic); |
| 273 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); | 267 SetUpCrasAudioHandlerWithTestingNodes(audio_nodes); |
| 274 const size_t init_device_size = audio_nodes.size(); | 268 const size_t init_device_size = audio_nodes.size(); |
| 275 | 269 |
| 276 AudioDeviceList audio_devices; | 270 AudioDeviceList audio_devices; |
| 277 cras_audio_handler_->GetAudioDevices(&audio_devices); | 271 cras_audio_handler_->GetAudioDevices(&audio_devices); |
| 278 EXPECT_EQ(init_device_size, audio_devices.size()); | 272 EXPECT_EQ(init_device_size, audio_devices.size()); |
| 279 | 273 |
| 280 // Load background app. | 274 // Load background app. |
| 275 ResultCatcher result_catcher; |
| 281 ExtensionTestMessageListener load_listener("loaded", false); | 276 ExtensionTestMessageListener load_listener("loaded", false); |
| 282 ExtensionTestMessageListener result_listener("success", false); | |
| 283 result_listener.set_failure_message("failure"); | |
| 284 ASSERT_TRUE(LoadApp("api_test/audio/remove_nodes")); | 277 ASSERT_TRUE(LoadApp("api_test/audio/remove_nodes")); |
| 285 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); | 278 ASSERT_TRUE(load_listener.WaitUntilSatisfied()); |
| 286 | 279 |
| 287 // Remove camera mic. | 280 // Remove camera mic. |
| 288 audio_nodes.erase(audio_nodes.begin() + init_device_size - 1); | 281 audio_nodes.erase(audio_nodes.begin() + init_device_size - 1); |
| 289 ChangeAudioNodes(audio_nodes); | 282 ChangeAudioNodes(audio_nodes); |
| 290 cras_audio_handler_->GetAudioDevices(&audio_devices); | 283 cras_audio_handler_->GetAudioDevices(&audio_devices); |
| 291 EXPECT_EQ(init_device_size - 1, audio_devices.size()); | 284 EXPECT_EQ(init_device_size - 1, audio_devices.size()); |
| 292 | 285 |
| 293 // Verify the background app got the onNodesChanged event | 286 // Verify the background app got the onNodesChanged event |
| 294 // with the last node removed. | 287 // with the last node removed. |
| 295 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 288 EXPECT_TRUE(result_catcher.GetNextResult()) << result_catcher.message(); |
| 296 EXPECT_EQ("success", result_listener.message()); | |
| 297 } | 289 } |
| 298 | 290 |
| 299 #endif // OS_CHROMEOS | 291 #endif // OS_CHROMEOS |
| 300 | 292 |
| 301 } // namespace extensions | 293 } // namespace extensions |
| OLD | NEW |