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

Side by Side Diff: content/renderer/media/android/webmediasession_android_unittest.cc

Issue 1441883003: Hook up RendererMediaSessionManager with browser side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comment from philipj: ActiveDOMObject Created 5 years 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
OLDNEW
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;
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
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 EXPECT_TRUE(session->hasPendingCallbacks());
136
137 // Confirm activation out of order
138 session_manager->OnMessageReceived(
139 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true));
140 EXPECT_TRUE(session->hasPendingCallbacks());
141
142 session_manager->OnMessageReceived(
143 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
144 EXPECT_TRUE(session->hasPendingCallbacks());
145
146 session_manager->OnMessageReceived(
147 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
148 EXPECT_FALSE(session->hasPendingCallbacks());
149 EXPECT_EQ(3, success_count_);
150 EXPECT_EQ(0, error_count_);
151 }
152
153 TEST_F(WebMediaSessionTest, ActivationInOrder) {
154 scoped_ptr<RendererMediaSessionManager> session_manager(
155 new RendererMediaSessionManager(nullptr));
156
157 scoped_ptr<WebMediaSessionAndroid> session(
158 new WebMediaSessionAndroid(session_manager.get()));
159
160 // Request activate three times
161 session->activate(new TestActivateCallback(this)); // request 1
162 EXPECT_TRUE(session->hasPendingCallbacks());
163 session_manager->OnMessageReceived(
164 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
165 EXPECT_FALSE(session->hasPendingCallbacks());
166
167 session->activate(new TestActivateCallback(this)); // request 2
168 EXPECT_TRUE(session->hasPendingCallbacks());
169 session_manager->OnMessageReceived(
170 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
171 EXPECT_FALSE(session->hasPendingCallbacks());
172
173 session->activate(new TestActivateCallback(this)); // request 3
174 EXPECT_TRUE(session->hasPendingCallbacks());
175 session_manager->OnMessageReceived(
176 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true));
177 EXPECT_FALSE(session->hasPendingCallbacks());
178 EXPECT_EQ(3, success_count_);
179 EXPECT_EQ(0, error_count_);
180 }
181
182 TEST_F(WebMediaSessionTest, ActivationInFlight) {
183 scoped_ptr<RendererMediaSessionManager> session_manager(
184 new RendererMediaSessionManager(nullptr));
185
186 scoped_ptr<WebMediaSessionAndroid> session(
187 new WebMediaSessionAndroid(session_manager.get()));
188
189 session->activate(new TestActivateCallback(this)); // request 1
190 session->activate(new TestActivateCallback(this)); // request 2
191 session->activate(new TestActivateCallback(this)); // request 3
192
193 session_manager->OnMessageReceived(
194 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
195
196 session->activate(new TestActivateCallback(this)); // request 4
197 session->activate(new TestActivateCallback(this)); // request 5
198
199 session_manager->OnMessageReceived(
200 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true));
201 session_manager->OnMessageReceived(
202 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
203 session_manager->OnMessageReceived(
204 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 5, true));
205 session_manager->OnMessageReceived(
206 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 4, true));
207
208 EXPECT_FALSE(session->hasPendingCallbacks());
209 EXPECT_EQ(5, success_count_);
210 EXPECT_EQ(0, error_count_);
211 }
212
213 TEST_F(WebMediaSessionTest, ActivationFailure) {
214 scoped_ptr<RendererMediaSessionManager> session_manager(
215 new RendererMediaSessionManager(nullptr));
216
217 scoped_ptr<WebMediaSessionAndroid> session(
218 new WebMediaSessionAndroid(session_manager.get()));
219
220 session->activate(new TestActivateCallback(this)); // request 1
221 session->activate(new TestActivateCallback(this)); // request 2
222 session->activate(new TestActivateCallback(this)); // request 3
223 EXPECT_TRUE(session->hasPendingCallbacks());
224
225 session_manager->OnMessageReceived(
226 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
227 EXPECT_EQ(1, success_count_);
228 EXPECT_EQ(0, error_count_);
229 session_manager->OnMessageReceived(
230 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, false));
231 EXPECT_EQ(1, success_count_);
232 EXPECT_EQ(1, error_count_);
233 session_manager->OnMessageReceived(
234 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true));
235 EXPECT_FALSE(session->hasPendingCallbacks());
236 EXPECT_EQ(2, success_count_);
237 EXPECT_EQ(1, error_count_);
238 }
239
240 TEST_F(WebMediaSessionTest, Deactivation) {
241 scoped_ptr<RendererMediaSessionManager> session_manager(
242 new RendererMediaSessionManager(nullptr));
243
244 scoped_ptr<WebMediaSessionAndroid> session(
245 new WebMediaSessionAndroid(session_manager.get()));
246
247 // Request deactivate three times
248 session->deactivate(new TestDeactivateCallback(this)); // request 1
249 session->deactivate(new TestDeactivateCallback(this)); // request 2
250 session->deactivate(new TestDeactivateCallback(this)); // request 3
251 EXPECT_TRUE(session->hasPendingCallbacks());
252 session_manager->OnMessageReceived(
253 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1));
254 EXPECT_EQ(1, success_count_);
255 session_manager->OnMessageReceived(
256 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2));
257 EXPECT_EQ(2, success_count_);
258 session_manager->OnMessageReceived(
259 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3));
260 EXPECT_FALSE(session->hasPendingCallbacks());
261 EXPECT_EQ(3, success_count_);
262 EXPECT_EQ(0, error_count_);
263 }
264
265 TEST_F(WebMediaSessionTest, UnsolicitedResponses) {
266 scoped_ptr<RendererMediaSessionManager> session_manager(
267 new RendererMediaSessionManager(nullptr));
268
269 scoped_ptr<WebMediaSessionAndroid> session(
270 new WebMediaSessionAndroid(session_manager.get()));
271
272 EXPECT_FALSE(session->hasPendingCallbacks());
273
274 session_manager->OnMessageReceived(
275 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, false));
276 session_manager->OnMessageReceived(
277 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
278 session_manager->OnMessageReceived(
279 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, false));
280
281 session_manager->OnMessageReceived(
282 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1));
283 session_manager->OnMessageReceived(
284 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2));
285 session_manager->OnMessageReceived(
286 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3));
287
288 session_manager->OnMessageReceived(
289 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id() + 1, 1));
290 session_manager->OnMessageReceived(
291 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id() + 2, 1));
292 session_manager->OnMessageReceived(
293 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id() + 3, 1));
294
295 EXPECT_FALSE(session->hasPendingCallbacks());
296 EXPECT_EQ(0, success_count_);
297 EXPECT_EQ(0, error_count_);
298 }
299
300 TEST_F(WebMediaSessionTest, DoubleResponses) {
301 scoped_ptr<RendererMediaSessionManager> session_manager(
302 new RendererMediaSessionManager(nullptr));
303
304 scoped_ptr<WebMediaSessionAndroid> session(
305 new WebMediaSessionAndroid(session_manager.get()));
306
307 session->activate(new TestActivateCallback(this)); // request 1
308 EXPECT_TRUE(session->hasPendingCallbacks());
309
310 session_manager->OnMessageReceived(
311 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
312 EXPECT_FALSE(session->hasPendingCallbacks());
313 session_manager->OnMessageReceived(
314 MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
315 EXPECT_EQ(1, success_count_);
316 EXPECT_EQ(0, error_count_);
317
318 session->deactivate(new TestDeactivateCallback(this)); // request 1
319 EXPECT_TRUE(session->hasPendingCallbacks());
320
321 session_manager->OnMessageReceived(
322 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1));
323 EXPECT_FALSE(session->hasPendingCallbacks());
324 session_manager->OnMessageReceived(
325 MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1));
326 EXPECT_EQ(2, success_count_);
327 EXPECT_EQ(0, error_count_);
328 }
329
86 } // namespace content 330 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698