Index: content/renderer/media/speech_recognition_audio_sink_unittest.cc |
diff --git a/content/renderer/media/speech_recognition_audio_sink_unittest.cc b/content/renderer/media/speech_recognition_audio_sink_unittest.cc |
index 7cd0aa78189655e213019db8cbbd2ba6c4cac6c7..4ebc87f5c67ca5fb3ce539c1195a6aaef635098a 100644 |
--- a/content/renderer/media/speech_recognition_audio_sink_unittest.cc |
+++ b/content/renderer/media/speech_recognition_audio_sink_unittest.cc |
@@ -11,15 +11,15 @@ |
#include "base/bind.h" |
#include "base/macros.h" |
-#include "base/strings/utf_string_conversions.h" |
#include "content/renderer/media/media_stream_audio_source.h" |
-#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h" |
-#include "content/renderer/media/webrtc_local_audio_track.h" |
+#include "content/renderer/media/media_stream_audio_track.h" |
+#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h" |
#include "media/base/audio_bus.h" |
#include "media/base/audio_parameters.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
+#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/WebKit/public/web/WebHeap.h" |
namespace { |
@@ -204,11 +204,27 @@ class FakeSpeechRecognizer { |
namespace content { |
+namespace { |
+ |
+class TestDrivenAudioSource : public MediaStreamAudioSource { |
+ public: |
+ TestDrivenAudioSource() : MediaStreamAudioSource(true) {} |
+ ~TestDrivenAudioSource() final {} |
+ |
+ // Expose protected methods as public for testing. |
+ using MediaStreamAudioSource::SetFormat; |
+ using MediaStreamAudioSource::DeliverDataToTracks; |
+}; |
+ |
+} // namespace |
+ |
class SpeechRecognitionAudioSinkTest : public testing::Test { |
public: |
SpeechRecognitionAudioSinkTest() {} |
~SpeechRecognitionAudioSinkTest() { |
+ blink_source_.reset(); |
+ blink_track_.reset(); |
speech_audio_sink_.reset(); |
blink::WebHeap::collectAllGarbageForTesting(); |
} |
@@ -238,24 +254,21 @@ class SpeechRecognitionAudioSinkTest : public testing::Test { |
sample_frames_captured_ = 0; |
// Prepare the track and audio source. |
- blink::WebMediaStreamTrack blink_track; |
- PrepareBlinkTrackOfType(MEDIA_DEVICE_AUDIO_CAPTURE, &blink_track); |
- |
- // Get the native track from the blink track and initialize. |
- native_track_ = |
- static_cast<WebRtcLocalAudioTrack*>(blink_track.getExtraData()); |
- native_track_->OnSetFormat(source_params_); |
+ PrepareBlinkTrackOfType(MEDIA_DEVICE_AUDIO_CAPTURE, &blink_track_); |
+ blink_source_ = blink_track_.source(); |
+ static_cast<TestDrivenAudioSource*>( |
+ MediaStreamAudioSource::From(blink_source_))->SetFormat(source_params_); |
// Create and initialize the consumer. |
recognizer_.reset(new FakeSpeechRecognizer()); |
base::SharedMemoryHandle foreign_memory_handle; |
- recognizer_->Initialize(blink_track, sink_params_, &foreign_memory_handle); |
+ recognizer_->Initialize(blink_track_, sink_params_, &foreign_memory_handle); |
// Create the producer. |
std::unique_ptr<base::SyncSocket> sending_socket( |
recognizer_->sending_socket()); |
speech_audio_sink_.reset(new SpeechRecognitionAudioSink( |
- blink_track, sink_params_, foreign_memory_handle, |
+ blink_track_, sink_params_, foreign_memory_handle, |
std::move(sending_socket), |
base::Bind(&SpeechRecognitionAudioSinkTest::StoppedCallback, |
base::Unretained(this)))); |
@@ -272,25 +285,21 @@ class SpeechRecognitionAudioSinkTest : public testing::Test { |
protected: |
// Prepares a blink track of a given MediaStreamType and attaches the native |
// track which can be used to capture audio data and pass it to the producer. |
- static void PrepareBlinkTrackOfType( |
- const MediaStreamType device_type, |
- blink::WebMediaStreamTrack* blink_track) { |
- scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter( |
- WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL)); |
- std::unique_ptr<WebRtcLocalAudioTrack> native_track( |
- new WebRtcLocalAudioTrack(adapter.get())); |
- blink::WebMediaStreamSource blink_audio_source; |
- blink_audio_source.initialize(base::UTF8ToUTF16("dummy_source_id"), |
- blink::WebMediaStreamSource::TypeAudio, |
- base::UTF8ToUTF16("dummy_source_name"), |
- false /* remote */, true /* readonly */); |
- MediaStreamSource::SourceStoppedCallback cb; |
- blink_audio_source.setExtraData(new MediaStreamAudioSource( |
- -1, StreamDeviceInfo(device_type, "Mock device", "mock_device_id"), cb, |
- nullptr)); |
+ void PrepareBlinkTrackOfType(const MediaStreamType device_type, |
+ blink::WebMediaStreamTrack* blink_track) { |
+ blink::WebMediaStreamSource blink_source; |
+ blink_source.initialize(blink::WebString::fromUTF8("dummy_source_id"), |
+ blink::WebMediaStreamSource::TypeAudio, |
+ blink::WebString::fromUTF8("dummy_source_name"), |
+ false /* remote */, true /* readonly */); |
+ TestDrivenAudioSource* const audio_source = new TestDrivenAudioSource(); |
+ audio_source->SetDeviceInfo( |
+ StreamDeviceInfo(device_type, "Mock device", "mock_device_id")); |
+ blink_source.setExtraData(audio_source); // Takes ownership. |
+ |
blink_track->initialize(blink::WebString::fromUTF8("dummy_track"), |
- blink_audio_source); |
- blink_track->setExtraData(native_track.release()); |
+ blink_source); |
+ ASSERT_TRUE(audio_source->ConnectToTrack(*blink_track)); |
} |
// Emulates an audio capture device capturing data from the source. |
@@ -299,7 +308,9 @@ class SpeechRecognitionAudioSinkTest : public testing::Test { |
const base::TimeTicks estimated_capture_time = first_frame_capture_time_ + |
(sample_frames_captured_ * base::TimeDelta::FromSeconds(1) / |
source_params_.sample_rate()); |
- native_track()->Capture(*source_bus_, estimated_capture_time); |
+ static_cast<TestDrivenAudioSource*>( |
+ MediaStreamAudioSource::From(blink_source_)) |
+ ->DeliverDataToTracks(*source_bus_, estimated_capture_time); |
sample_frames_captured_ += source_bus_->frames(); |
} |
} |
@@ -353,9 +364,13 @@ class SpeechRecognitionAudioSinkTest : public testing::Test { |
const media::AudioParameters& sink_params() const { return sink_params_; } |
- WebRtcLocalAudioTrack* native_track() const { return native_track_; } |
+ MediaStreamAudioTrack* native_track() const { |
+ return MediaStreamAudioTrack::From(blink_track_); |
+ } |
private: |
+ MockPeerConnectionDependencyFactory mock_dependency_factory_; |
+ |
// Producer. |
std::unique_ptr<SpeechRecognitionAudioSink> speech_audio_sink_; |
@@ -366,7 +381,8 @@ class SpeechRecognitionAudioSinkTest : public testing::Test { |
std::unique_ptr<media::AudioBus> source_bus_; |
media::AudioParameters source_params_; |
media::AudioParameters sink_params_; |
- WebRtcLocalAudioTrack* native_track_; |
+ blink::WebMediaStreamSource blink_source_; |
+ blink::WebMediaStreamTrack blink_track_; |
base::TimeTicks first_frame_capture_time_; |
int64_t sample_frames_captured_; |