Index: content/renderer/media/media_stream_dependency_factory_unittest.cc |
diff --git a/content/renderer/media/media_stream_dependency_factory_unittest.cc b/content/renderer/media/media_stream_dependency_factory_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a1a11310217bd534e7093f447d964a1b5cddda86 |
--- /dev/null |
+++ b/content/renderer/media/media_stream_dependency_factory_unittest.cc |
@@ -0,0 +1,110 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/memory/scoped_ptr.h" |
+#include "content/common/media/media_stream_options.h" |
+#include "content/renderer/media/media_stream_extra_data.h" |
+#include "content/renderer/media/media_stream_source_extra_data.h" |
+#include "content/renderer/media/mock_media_stream_dependency_factory.h" |
+#include "content/renderer/media/mock_web_peer_connection_00_handler_client.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamComponent.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamDescriptor.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStreamSource.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPeerConnection00Handler.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPeerConnectionHandler.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
+ |
+ |
+class MediaStreamDependencyFactoryTest : public ::testing::Test { |
+ public: |
+ void SetUp() { |
+ dependency_factory_.reset(new MockMediaStreamDependencyFactory()); |
+ } |
+ |
+ WebKit::WebMediaStreamDescriptor CreateWebKitMediaStream(bool audio, |
+ bool video) { |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( |
+ audio ? static_cast<size_t>(1) : 0); |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( |
+ video ? static_cast<size_t>(1) : 0); |
+ |
+ if (audio) { |
+ media_stream::StreamDeviceInfo info; |
+ info.stream_type = content::MEDIA_DEVICE_AUDIO_CAPTURE; |
+ info.name = "audio"; |
+ info.session_id = 99; |
+ audio_sources[0].initialize("audio", |
+ WebKit::WebMediaStreamSource::TypeAudio, |
+ "audio"); |
+ audio_sources[0].setExtraData( |
+ new MediaStreamSourceExtraData(info)); |
+ } |
+ if (video) { |
+ media_stream::StreamDeviceInfo info; |
+ info.stream_type = content::MEDIA_DEVICE_VIDEO_CAPTURE; |
+ info.name = "video"; |
+ info.session_id = 98; |
+ video_sources[0].initialize("video", |
+ WebKit::WebMediaStreamSource::TypeVideo, |
+ "video"); |
+ video_sources[0].setExtraData( |
+ new MediaStreamSourceExtraData(info)); |
+ } |
+ WebKit::WebMediaStreamDescriptor stream_desc; |
+ stream_desc.initialize("media stream", audio_sources, video_sources); |
+ |
+ return stream_desc; |
+ } |
+ |
+ protected: |
+ scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_; |
+}; |
+ |
+TEST_F(MediaStreamDependencyFactoryTest, CreatePeerConnectionHandlerJsep) { |
+ // Create JSEP PeerConnection. |
+ WebKit::MockWebPeerConnection00HandlerClient client_jsep; |
+ scoped_ptr<WebKit::WebPeerConnection00Handler> pc_handler_jsep( |
+ dependency_factory_->CreatePeerConnectionHandlerJsep(&client_jsep)); |
+ EXPECT_TRUE(pc_handler_jsep.get() != NULL); |
+ pc_handler_jsep.reset(); |
+} |
+ |
+TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) { |
+ WebKit::WebMediaStreamDescriptor stream_desc = CreateWebKitMediaStream(true, |
+ true); |
+ EXPECT_TRUE(dependency_factory_->CreateNativeLocalMediaStream(&stream_desc)); |
+ |
+ MediaStreamExtraData* extra_data = static_cast<MediaStreamExtraData*>( |
+ stream_desc.extraData()); |
+ ASSERT_TRUE(extra_data && extra_data->local_stream()); |
+ EXPECT_EQ(1u, extra_data->local_stream()->audio_tracks()->count()); |
+ EXPECT_EQ(1u, extra_data->local_stream()->video_tracks()->count()); |
+} |
+ |
+// Test that we don't crash if a MediaStream is created in WebKit with unknown |
+// sources. This can for example happen if a MediaStream is created with |
+// remote tracks. |
+TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) { |
+ // Create a WebKit MediaStream description. |
+ WebKit::WebMediaStreamDescriptor stream_desc; |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( |
+ static_cast<size_t>(1)); |
+ audio_sources[0].initialize("audio source", |
+ WebKit::WebMediaStreamSource::TypeAudio, |
+ "something"); |
+ WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( |
+ static_cast<size_t>(1)); |
+ video_sources[0].initialize("video source", |
+ WebKit::WebMediaStreamSource::TypeVideo, |
+ "something"); |
+ stream_desc.initialize("new stream", audio_sources, video_sources); |
+ |
+ EXPECT_TRUE(dependency_factory_->CreateNativeLocalMediaStream(&stream_desc)); |
+ MediaStreamExtraData* extra_data = static_cast<MediaStreamExtraData*>( |
+ stream_desc.extraData()); |
+ ASSERT_TRUE(extra_data && extra_data->local_stream()); |
+ EXPECT_EQ(0u, extra_data->local_stream()->video_tracks()->count()); |
+ EXPECT_EQ(0u, extra_data->local_stream()->audio_tracks()->count()); |
+} |