OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "content/renderer/media/android/webmediasession_android.h" | 5 #include "content/renderer/media/android/webmediasession_android.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "content/common/media/media_session_messages_android.h" | |
8 #include "content/renderer/media/android/renderer_media_session_manager.h" | 9 #include "content/renderer/media/android/renderer_media_session_manager.h" |
9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
10 | 11 |
11 namespace content { | 12 namespace content { |
12 | 13 |
14 namespace { | |
15 | |
16 const int kRouteId = 0; | |
philipj_slow
2015/12/04 14:01:04
kRoutingID to match GetRoutingID()?
davve
2015/12/04 14:52:55
kRouteId seems to be the popular name, so keeping
| |
17 | |
18 } // anonymous namespace | |
19 | |
13 class WebMediaSessionTest : public testing::Test { | 20 class WebMediaSessionTest : public testing::Test { |
14 public: | 21 public: |
22 void OnSuccess() { ++success_count_; } | |
23 void OnError() { ++error_count_; } | |
24 | |
15 bool SessionManagerHasSession(RendererMediaSessionManager* session_manager, | 25 bool SessionManagerHasSession(RendererMediaSessionManager* session_manager, |
16 WebMediaSessionAndroid* session) { | 26 WebMediaSessionAndroid* session) { |
17 for (auto& iter : session_manager->sessions_) { | 27 for (auto& iter : session_manager->sessions_) { |
18 if (iter.second == session) | 28 if (iter.second == session) |
19 return true; | 29 return true; |
20 } | 30 } |
21 return false; | 31 return false; |
22 } | 32 } |
23 | 33 |
24 bool IsSessionManagerEmpty(RendererMediaSessionManager* session_manager) { | 34 bool IsSessionManagerEmpty(RendererMediaSessionManager* session_manager) { |
25 return session_manager->sessions_.empty(); | 35 return session_manager->sessions_.empty(); |
26 } | 36 } |
37 | |
38 protected: | |
39 int success_count_ = 0; | |
40 int error_count_ = 0; | |
41 }; | |
42 | |
43 class TestActivateCallback : public blink::WebMediaSessionActivateCallback { | |
44 public: | |
45 TestActivateCallback(WebMediaSessionTest* test) : test_(test) {} | |
46 | |
47 private: | |
48 void onSuccess() override { test_->OnSuccess(); } | |
49 void onError(const blink::WebMediaSessionError&) override { | |
50 test_->OnError(); | |
51 } | |
52 | |
53 WebMediaSessionTest* test_; | |
54 }; | |
55 | |
56 class TestDeactivateCallback : public blink::WebMediaSessionDeactivateCallback { | |
57 public: | |
58 TestDeactivateCallback(WebMediaSessionTest* test) : test_(test) {} | |
59 | |
60 private: | |
61 void onSuccess() override { test_->OnSuccess(); } | |
62 void onError() override { test_->OnError(); } | |
63 | |
64 WebMediaSessionTest* test_; | |
27 }; | 65 }; |
28 | 66 |
29 TEST_F(WebMediaSessionTest, TestRegistration) { | 67 TEST_F(WebMediaSessionTest, TestRegistration) { |
30 scoped_ptr<RendererMediaSessionManager> session_manager( | 68 scoped_ptr<RendererMediaSessionManager> session_manager( |
31 new RendererMediaSessionManager(nullptr)); | 69 new RendererMediaSessionManager(nullptr)); |
32 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get())); | 70 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get())); |
33 { | 71 { |
34 scoped_ptr<WebMediaSessionAndroid> session( | 72 scoped_ptr<WebMediaSessionAndroid> session( |
35 new WebMediaSessionAndroid(session_manager.get())); | 73 new WebMediaSessionAndroid(session_manager.get())); |
36 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session.get())); | 74 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session.get())); |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
76 new WebMediaSessionAndroid(session_manager.get()); | 114 new WebMediaSessionAndroid(session_manager.get()); |
77 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2)); | 115 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2)); |
78 | 116 |
79 delete session1; | 117 delete session1; |
80 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2)); | 118 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2)); |
81 | 119 |
82 delete session2; | 120 delete session2; |
83 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get())); | 121 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get())); |
84 } | 122 } |
85 | 123 |
124 TEST_F(WebMediaSessionTest, ActivationOutOfOrder) { | |
125 scoped_ptr<RendererMediaSessionManager> session_manager( | |
126 new RendererMediaSessionManager(nullptr)); | |
127 | |
128 scoped_ptr<WebMediaSessionAndroid> session( | |
129 new WebMediaSessionAndroid(session_manager.get())); | |
130 | |
131 // Request activate three times | |
132 session->activate(new TestActivateCallback(this)); // request 1 | |
133 session->activate(new TestActivateCallback(this)); // request 2 | |
134 session->activate(new TestActivateCallback(this)); // request 3 | |
135 | |
136 // Confirm activation out of order | |
137 session_manager->OnMessageReceived( | |
138 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); | |
139 | |
140 session_manager->OnMessageReceived( | |
141 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); | |
142 | |
143 session_manager->OnMessageReceived( | |
144 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
145 | |
146 EXPECT_EQ(3, success_count_); | |
147 EXPECT_EQ(0, error_count_); | |
148 } | |
149 | |
150 TEST_F(WebMediaSessionTest, ActivationInOrder) { | |
151 scoped_ptr<RendererMediaSessionManager> session_manager( | |
152 new RendererMediaSessionManager(nullptr)); | |
153 | |
154 scoped_ptr<WebMediaSessionAndroid> session( | |
155 new WebMediaSessionAndroid(session_manager.get())); | |
156 | |
157 // Request activate three times | |
158 session->activate(new TestActivateCallback(this)); // request 1 | |
159 session_manager->OnMessageReceived( | |
160 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
161 | |
162 session->activate(new TestActivateCallback(this)); // request 2 | |
163 session_manager->OnMessageReceived( | |
164 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); | |
165 | |
166 session->activate(new TestActivateCallback(this)); // request 3 | |
167 session_manager->OnMessageReceived( | |
168 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); | |
169 | |
170 EXPECT_EQ(3, success_count_); | |
171 EXPECT_EQ(0, error_count_); | |
172 } | |
173 | |
174 TEST_F(WebMediaSessionTest, ActivationInFlight) { | |
175 scoped_ptr<RendererMediaSessionManager> session_manager( | |
176 new RendererMediaSessionManager(nullptr)); | |
177 | |
178 scoped_ptr<WebMediaSessionAndroid> session( | |
179 new WebMediaSessionAndroid(session_manager.get())); | |
180 | |
181 session->activate(new TestActivateCallback(this)); // request 1 | |
182 session->activate(new TestActivateCallback(this)); // request 2 | |
183 session->activate(new TestActivateCallback(this)); // request 3 | |
184 | |
185 session_manager->OnMessageReceived( | |
186 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
187 | |
188 session->activate(new TestActivateCallback(this)); // request 4 | |
189 session->activate(new TestActivateCallback(this)); // request 5 | |
190 | |
191 session_manager->OnMessageReceived( | |
192 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); | |
193 session_manager->OnMessageReceived( | |
194 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); | |
195 session_manager->OnMessageReceived( | |
196 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 5, true)); | |
197 session_manager->OnMessageReceived( | |
198 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 4, true)); | |
199 | |
200 EXPECT_EQ(5, success_count_); | |
201 EXPECT_EQ(0, error_count_); | |
202 } | |
203 | |
204 TEST_F(WebMediaSessionTest, ActivationFailure) { | |
205 scoped_ptr<RendererMediaSessionManager> session_manager( | |
206 new RendererMediaSessionManager(nullptr)); | |
207 | |
208 scoped_ptr<WebMediaSessionAndroid> session( | |
209 new WebMediaSessionAndroid(session_manager.get())); | |
210 | |
211 session->activate(new TestActivateCallback(this)); // request 1 | |
212 session->activate(new TestActivateCallback(this)); // request 2 | |
213 session->activate(new TestActivateCallback(this)); // request 3 | |
214 | |
215 session_manager->OnMessageReceived( | |
216 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
217 EXPECT_EQ(1, success_count_); | |
218 EXPECT_EQ(0, error_count_); | |
219 session_manager->OnMessageReceived( | |
220 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, false)); | |
221 EXPECT_EQ(1, success_count_); | |
222 EXPECT_EQ(1, error_count_); | |
223 session_manager->OnMessageReceived( | |
224 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); | |
225 EXPECT_EQ(2, success_count_); | |
226 EXPECT_EQ(1, error_count_); | |
227 } | |
228 | |
229 TEST_F(WebMediaSessionTest, Deactivation) { | |
230 scoped_ptr<RendererMediaSessionManager> session_manager( | |
231 new RendererMediaSessionManager(nullptr)); | |
232 | |
233 scoped_ptr<WebMediaSessionAndroid> session( | |
234 new WebMediaSessionAndroid(session_manager.get())); | |
235 | |
236 // Request deactivate three times | |
237 session->deactivate(new TestDeactivateCallback(this)); // request 1 | |
238 session->deactivate(new TestDeactivateCallback(this)); // request 2 | |
239 session->deactivate(new TestDeactivateCallback(this)); // request 3 | |
240 session_manager->OnMessageReceived( | |
241 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); | |
242 EXPECT_EQ(1, success_count_); | |
243 session_manager->OnMessageReceived( | |
244 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2)); | |
245 EXPECT_EQ(2, success_count_); | |
246 session_manager->OnMessageReceived( | |
247 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3)); | |
248 EXPECT_EQ(3, success_count_); | |
249 EXPECT_EQ(0, error_count_); | |
250 } | |
251 | |
252 TEST_F(WebMediaSessionTest, UnsolicitedResponses) { | |
253 scoped_ptr<RendererMediaSessionManager> session_manager( | |
254 new RendererMediaSessionManager(nullptr)); | |
255 | |
256 scoped_ptr<WebMediaSessionAndroid> session( | |
257 new WebMediaSessionAndroid(session_manager.get())); | |
258 | |
259 session_manager->OnMessageReceived( | |
260 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, false)); | |
261 session_manager->OnMessageReceived( | |
262 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); | |
263 session_manager->OnMessageReceived( | |
264 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, false)); | |
265 | |
266 session_manager->OnMessageReceived( | |
267 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); | |
268 session_manager->OnMessageReceived( | |
269 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2)); | |
270 session_manager->OnMessageReceived( | |
271 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3)); | |
272 | |
273 EXPECT_EQ(0, success_count_); | |
274 EXPECT_EQ(0, error_count_); | |
275 } | |
276 | |
277 TEST_F(WebMediaSessionTest, DoubleResponses) { | |
278 scoped_ptr<RendererMediaSessionManager> session_manager( | |
279 new RendererMediaSessionManager(nullptr)); | |
280 | |
281 scoped_ptr<WebMediaSessionAndroid> session( | |
282 new WebMediaSessionAndroid(session_manager.get())); | |
283 | |
284 session->activate(new TestActivateCallback(this)); // request 1 | |
285 | |
286 session_manager->OnMessageReceived( | |
287 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
288 session_manager->OnMessageReceived( | |
289 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); | |
290 EXPECT_EQ(1, success_count_); | |
291 EXPECT_EQ(0, error_count_); | |
292 | |
293 session->deactivate(new TestDeactivateCallback(this)); // request 1 | |
294 | |
295 session_manager->OnMessageReceived( | |
296 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); | |
297 session_manager->OnMessageReceived( | |
298 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); | |
299 | |
300 EXPECT_EQ(2, success_count_); | |
301 EXPECT_EQ(0, error_count_); | |
302 } | |
303 | |
86 } // namespace content | 304 } // namespace content |
OLD | NEW |