Chromium Code Reviews| Index: chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc |
| diff --git a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc |
| index f82af5b6e62c82164822f5e59fe77f57d3bee103..38b0a41ce737db689c8fd0acbd31a0e4ce31a9aa 100644 |
| --- a/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc |
| +++ b/chrome/browser/extensions/api/webrtc_audio_private/webrtc_audio_private_browsertest.cc |
| @@ -35,7 +35,7 @@ |
| #include "extensions/common/permissions/permission_set.h" |
| #include "extensions/common/permissions/permissions_data.h" |
| #include "media/audio/audio_device_description.h" |
| -#include "media/audio/audio_manager.h" |
| +#include "media/audio/audio_system.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -47,13 +47,34 @@ using base::JSONWriter; |
| using content::RenderProcessHost; |
| using content::WebContents; |
| using media::AudioDeviceDescriptions; |
| -using media::AudioManager; |
| namespace extensions { |
| using extension_function_test_utils::RunFunctionAndReturnError; |
| using extension_function_test_utils::RunFunctionAndReturnSingleResult; |
| +namespace { |
|
Devlin
2017/04/06 01:42:33
nit: \n
o1ka
2017/04/06 11:01:22
Done.
|
| +// Synchronously (from the calling thread's point of view) runs the |
| +// given enumeration function on the device thread. On return, |
| +// |device_descriptions| has been filled with the device descriptions |
| +// resulting from that call. |
| +void GetAudioDeviceDescriptions(bool for_input, |
| + AudioDeviceDescriptions* device_descriptions) { |
| + base::RunLoop run_loop; |
| + media::AudioSystem::Get()->GetDeviceDescriptions( |
| + base::Bind( |
| + [](base::Closure finished_callback, AudioDeviceDescriptions* result, |
|
Devlin
2017/04/06 01:42:33
nit: const base::Closure&
o1ka
2017/04/06 11:01:22
It takes the ownership. base::Closure is movable a
|
| + AudioDeviceDescriptions received) { |
| + *result = std::move(received); |
| + finished_callback.Run(); |
| + }, |
| + base ::Passed(run_loop.QuitClosure()), device_descriptions), |
|
Devlin
2017/04/06 01:42:33
eliminate rogue space between 'base' and '::'
o1ka
2017/04/06 11:01:22
Done.
|
| + for_input); |
| + run_loop.Run(); |
| +} |
| + |
| +} // namespace |
| + |
| class AudioWaitingExtensionTest : public ExtensionApiTest { |
| protected: |
| void WaitUntilAudioIsPlaying(WebContents* tab) { |
| @@ -64,10 +85,8 @@ class AudioWaitingExtensionTest : public ExtensionApiTest { |
| base::RunLoop().RunUntilIdle(); |
| if (audio_playing) |
| break; |
| - |
| base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); |
| } |
| - |
| if (!audio_playing) |
| FAIL() << "Audio did not start playing within ~5 seconds."; |
| } |
| @@ -75,9 +94,7 @@ class AudioWaitingExtensionTest : public ExtensionApiTest { |
| class WebrtcAudioPrivateTest : public AudioWaitingExtensionTest { |
| public: |
| - WebrtcAudioPrivateTest() |
| - : enumeration_event_(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| - base::WaitableEvent::InitialState::NOT_SIGNALED) {} |
| + WebrtcAudioPrivateTest() {} |
| void SetUpOnMainThread() override { |
| AudioWaitingExtensionTest::SetUpOnMainThread(); |
| @@ -104,54 +121,6 @@ class WebrtcAudioPrivateTest : public AudioWaitingExtensionTest { |
| return result; |
| } |
| - // Synchronously (from the calling thread's point of view) runs the |
| - // given enumeration function on the device thread. On return, |
| - // |device_descriptions| has been filled with the device descriptions |
| - // resulting from that call. |
| - void GetAudioDeviceDescriptions( |
| - void (AudioManager::*EnumerationFunc)(AudioDeviceDescriptions*), |
| - AudioDeviceDescriptions* device_descriptions) { |
| - AudioManager* audio_manager = AudioManager::Get(); |
| - |
| - if (!audio_manager->GetTaskRunner()->BelongsToCurrentThread()) { |
| - audio_manager->GetTaskRunner()->PostTask( |
| - FROM_HERE, |
| - base::Bind(&WebrtcAudioPrivateTest::GetAudioDeviceDescriptions, |
| - base::Unretained(this), EnumerationFunc, |
| - device_descriptions)); |
| - enumeration_event_.Wait(); |
| - } else { |
| - (audio_manager->*EnumerationFunc)(device_descriptions); |
| - enumeration_event_.Signal(); |
| - } |
| - } |
| - |
| - // Synchronously (from the calling thread's point of view) retrieve the |
| - // device id in the |origin| on the IO thread. On return, |
| - // |id_in_origin| contains the id |raw_device_id| is known by in |
| - // the origin. |
| - void GetIDInOrigin(content::ResourceContext* resource_context, |
| - GURL origin, |
| - const std::string& raw_device_id, |
| - std::string* id_in_origin) { |
| - if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) { |
| - content::BrowserThread::PostTask( |
| - content::BrowserThread::UI, FROM_HERE, |
| - base::Bind(&WebrtcAudioPrivateTest::GetIDInOrigin, |
| - base::Unretained(this), |
| - resource_context, origin, raw_device_id, id_in_origin)); |
| - enumeration_event_.Wait(); |
| - } else { |
| - *id_in_origin = content::GetHMACForMediaDeviceID( |
| - resource_context->GetMediaDeviceIDSalt(), url::Origin(origin), |
| - raw_device_id); |
| - enumeration_event_.Signal(); |
| - } |
| - } |
| - |
| - // Event used to signal completion of enumeration. |
| - base::WaitableEvent enumeration_event_; |
| - |
| GURL source_url_; |
| }; |
| @@ -159,8 +128,7 @@ class WebrtcAudioPrivateTest : public AudioWaitingExtensionTest { |
| // http://crbug.com/334579 |
| IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetSinks) { |
| AudioDeviceDescriptions devices; |
| - GetAudioDeviceDescriptions(&AudioManager::GetAudioOutputDeviceDescriptions, |
| - &devices); |
| + GetAudioDeviceDescriptions(false, &devices); |
| base::ListValue* sink_list = NULL; |
| std::unique_ptr<base::Value> result = InvokeGetSinks(&sink_list); |
| @@ -182,15 +150,12 @@ IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetSinks) { |
| std::string sink_id; |
| dict->GetString("sinkId", &sink_id); |
| - std::string expected_id; |
| - if (media::AudioDeviceDescription::IsDefaultDevice(it->unique_id)) { |
| - expected_id = media::AudioDeviceDescription::kDefaultDeviceId; |
| - } else { |
| - GetIDInOrigin(profile()->GetResourceContext(), |
| - source_url_.GetOrigin(), |
| - it->unique_id, |
| - &expected_id); |
| - } |
| + std::string expected_id = |
| + media::AudioDeviceDescription::IsDefaultDevice(it->unique_id) |
| + ? media::AudioDeviceDescription::kDefaultDeviceId |
| + : content::GetHMACForMediaDeviceID( |
| + profile()->GetResourceContext()->GetMediaDeviceIDSalt(), |
| + url::Origin(source_url_.GetOrigin()), it->unique_id); |
| EXPECT_EQ(expected_id, sink_id); |
| std::string sink_label; |
| @@ -211,8 +176,7 @@ IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetAssociatedSink) { |
| // run this on the main thread since nobody else will be running at |
| // the same time. |
| AudioDeviceDescriptions devices; |
| - GetAudioDeviceDescriptions(&AudioManager::GetAudioInputDeviceDescriptions, |
| - &devices); |
| + GetAudioDeviceDescriptions(true, &devices); |
| // Try to get an associated sink for each source. |
| for (const auto& device : devices) { |
| @@ -222,12 +186,10 @@ IN_PROC_BROWSER_TEST_F(WebrtcAudioPrivateTest, GetAssociatedSink) { |
| std::string raw_device_id = device.unique_id; |
| VLOG(2) << "Trying to find associated sink for device " << raw_device_id; |
| - std::string source_id_in_origin; |
| GURL origin(GURL("http://www.google.com/").GetOrigin()); |
| - GetIDInOrigin(profile()->GetResourceContext(), |
| - origin, |
| - raw_device_id, |
| - &source_id_in_origin); |
| + std::string source_id_in_origin = content::GetHMACForMediaDeviceID( |
| + profile()->GetResourceContext()->GetMediaDeviceIDSalt(), |
| + url::Origin(origin), raw_device_id); |
| base::ListValue parameters; |
| parameters.AppendString(origin.spec()); |