Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: content/renderer/media/media_stream_dispatcher_unittest.cc

Issue 7184010: MediaStreamDispatcher (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 <string>
6
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop.h"
10 #include "content/common/media/media_stream_messages.h"
11 #include "content/renderer/media/media_stream_dispatcher.h"
12 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace {
16
17 const int kRouteId = 0;
18 const int kAudioSessionId = 3;
19 const int kVideoSessionId = 5;
20 const int kRequestId1 = 10;
21 const int kRequestId2 = 20;
22
23 class MockMediaStreamDispatcherEventHandler
24 : public MediaStreamDispatcherEventHandler {
25 public:
26 MockMediaStreamDispatcherEventHandler()
27 : request_id_(-1),
28 audio_failed(false),
29 video_failed(false) {}
30
31 virtual void OnStreamGenerated(
32 int request_id,
33 const std::string &label,
34 const media_stream::StreamDeviceInfoArray& audio_device_array,
35 const media_stream::StreamDeviceInfoArray& video_device_array) {
36 request_id_ = request_id;
37 label_ = label;
38 }
39
40 virtual void OnStreamGenerationFailed(int request_id) {
41 request_id_ = request_id;
42 }
43
44 virtual void OnAudioDeviceFailed(const std::string& label,
45 int index) {
46 audio_failed = true;
47 }
48
49 virtual void OnVideoDeviceFailed(const std::string& label,
50 int index) {
51 video_failed = true;
52 }
53
54 int request_id_;
55 std::string label_;
56 bool audio_failed;
57 bool video_failed;
58
59 DISALLOW_COPY_AND_ASSIGN(MockMediaStreamDispatcherEventHandler);
60 };
61
62 } // namespace
63
64 TEST(MediaStreamDispatcherTest, Basic) {
65 scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
66 scoped_ptr<MockMediaStreamDispatcherEventHandler>
67 handler(new MockMediaStreamDispatcherEventHandler);
68 media_stream::GenerateStreamOptions components(
69 true, media_stream::GenerateStreamOptions::kVideoFacingUser);
70 std::string security_origin;
71
72 int ipc_request_id1 = dispatcher->next_ipc_id_;
73 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
74 security_origin);
75 int ipc_request_id2 = dispatcher->next_ipc_id_;
76 EXPECT_NE(ipc_request_id1, ipc_request_id2);
77 dispatcher->GenerateStream(kRequestId2, handler.get(), components,
78 security_origin);
79 EXPECT_EQ(dispatcher->requests_.size(), size_t(2));
80
81 media_stream::StreamDeviceInfoArray audio_device_array(1);
82 media_stream::StreamDeviceInfo audio_device_info;
83 audio_device_info.name = "Microphone";
84 audio_device_info.stream_type = media_stream::kAudioCapture;
85 audio_device_info.session_id = kAudioSessionId;
86 audio_device_array[0] = audio_device_info;
87
88 media_stream::StreamDeviceInfoArray video_device_array(1);
89 media_stream::StreamDeviceInfo video_device_info;
90 video_device_info.name = "Camera";
91 video_device_info.stream_type = media_stream::kVideoCapture;
92 video_device_info.session_id = kVideoSessionId;
93 video_device_array[0] = video_device_info;
94
95 // Complete the creation of stream1.
96 std::string stream_label1 = std::string("stream1");
97 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
98 kRouteId, ipc_request_id1, stream_label1,
99 audio_device_array, video_device_array));
100 EXPECT_EQ(handler->request_id_, kRequestId1);
101 EXPECT_EQ(handler->label_, stream_label1);
102
103 // Complete the creation of stream2.
104 std::string stream_label2 = std::string("stream2");
105 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
106 kRouteId, ipc_request_id2, stream_label2,
107 audio_device_array, video_device_array));
108 EXPECT_EQ(handler->request_id_, kRequestId2);
109 EXPECT_EQ(handler->label_, stream_label2);
110
111 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
112 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(2));
113
114 // Verify stream2.
115 const media_stream::StreamDeviceInfoArray& audio_devices =
116 dispatcher->audio_device_array(stream_label2);
117 EXPECT_EQ(audio_devices[0].session_id, kAudioSessionId);
118 EXPECT_EQ(audio_devices[0].name, audio_device_info.name);
119
120 const media_stream::StreamDeviceInfoArray& video_devices =
121 dispatcher->video_device_array(stream_label2);
122 EXPECT_EQ(video_devices[0].session_id, kVideoSessionId);
123 EXPECT_EQ(video_devices[0].name, video_device_info.name);
124
125 // Stop stream2.
126 dispatcher->StopStream(stream_label2);
127 EXPECT_EQ(dispatcher->audio_device_array(stream_label2).size(), size_t(0));
128 EXPECT_EQ(dispatcher->video_device_array(stream_label2).size(), size_t(0));
129
130 // Stop stream1.
131 dispatcher->StopStream(stream_label1);
132 EXPECT_EQ(dispatcher->audio_device_array(stream_label1).size(), size_t(0));
133 EXPECT_EQ(dispatcher->video_device_array(stream_label1).size(), size_t(0));
134 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
135
136 // Verify that the request have been completed.
137 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
138 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
139 }
140
141 TEST(MediaStreamDispatcherTest, TestFailure) {
142 scoped_ptr<MediaStreamDispatcher> dispatcher(new MediaStreamDispatcher(NULL));
143 scoped_ptr<MockMediaStreamDispatcherEventHandler>
144 handler(new MockMediaStreamDispatcherEventHandler);
145 media_stream::GenerateStreamOptions components(
146 true, media_stream::GenerateStreamOptions::kVideoFacingUser);
147 std::string security_origin;
148
149 // Test failure when creating a stream.
150 int ipc_request_id1 = dispatcher->next_ipc_id_;
151 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
152 security_origin);
153 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerationFailed(
154 kRouteId, ipc_request_id1));
155
156 // Verify that the request have been completed.
157 EXPECT_EQ(handler->request_id_, kRequestId1);
158 EXPECT_EQ(dispatcher->requests_.size(), size_t(0));
159
160 // Create a new stream.
161 ipc_request_id1 = dispatcher->next_ipc_id_;
162 dispatcher->GenerateStream(kRequestId1, handler.get(), components,
163 security_origin);
164
165 media_stream::StreamDeviceInfoArray audio_device_array(1);
166 media_stream::StreamDeviceInfo audio_device_info;
167 audio_device_info.name = "Microphone";
168 audio_device_info.stream_type = media_stream::kAudioCapture;
169 audio_device_info.session_id = kAudioSessionId;
170 audio_device_array[0] = audio_device_info;
171
172 media_stream::StreamDeviceInfoArray video_device_array(1);
173 media_stream::StreamDeviceInfo video_device_info;
174 video_device_info.name = "Camera";
175 video_device_info.stream_type = media_stream::kVideoCapture;
176 video_device_info.session_id = kVideoSessionId;
177 video_device_array[0] = video_device_info;
178
179 // Complete the creation of stream1.
180 std::string stream_label1 = std::string("stream1");
181 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerated(
182 kRouteId, ipc_request_id1, stream_label1,
183 audio_device_array, video_device_array));
184 EXPECT_EQ(handler->request_id_, kRequestId1);
185 EXPECT_EQ(handler->label_, stream_label1);
186
187 const media_stream::StreamDeviceInfoArray& video_devices =
188 dispatcher->video_device_array(stream_label1);
189 EXPECT_EQ(video_devices[0].session_id, kVideoSessionId);
190 EXPECT_EQ(video_devices[0].name, video_device_info.name);
191
192 // Test failure of the video device.
193 dispatcher->OnMessageReceived(
194 MediaStreamHostMsg_VideoDeviceFailed(kRouteId, stream_label1, 0));
195 EXPECT_EQ(handler->video_failed, true);
196 EXPECT_EQ(handler->audio_failed, false);
197 // Make sure the audio device still exist but not the video device.
198 EXPECT_EQ(dispatcher->video_device_array(stream_label1).size(), size_t(0));
199
200 EXPECT_EQ(dispatcher->audio_device_array(stream_label1).size(), size_t(1));
201
202 // Test failure of the audio device.
203 dispatcher->OnMessageReceived(
204 MediaStreamHostMsg_AudioDeviceFailed(kRouteId, stream_label1, 0));
205 EXPECT_EQ(handler->audio_failed, true);
206 // Make sure the audio device is removed.
207 EXPECT_EQ(dispatcher->audio_device_array(stream_label1).size(), size_t(0));
208
209 // Stop stream1.
210 dispatcher->StopStream(stream_label1);
211 EXPECT_EQ(dispatcher->audio_device_array(stream_label1).size(), size_t(0));
212 EXPECT_EQ(dispatcher->video_device_array(stream_label1).size(), size_t(0));
213 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0));
214 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698