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

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

Issue 2367393002: Migrating MediaSession messages to mojo (Closed)
Patch Set: blink typemap (need to revert blink typemap, only need content/ reivew) Created 4 years, 2 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/renderer/media/android/webmediasession_android.h"
6
7 #include <memory>
8
9 #include "content/common/media/media_session_messages_android.h"
10 #include "content/renderer/media/android/renderer_media_session_manager.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12
13 namespace content {
14
15 namespace {
16
17 const int kRouteId = 0;
18
19 } // anonymous namespace
20
21 class WebMediaSessionTest : public testing::Test {
22 public:
23 void OnSuccess() { ++success_count_; }
24 void OnError() { ++error_count_; }
25
26 bool SessionManagerHasSession(RendererMediaSessionManager* session_manager,
27 WebMediaSessionAndroid* session) {
28 for (auto& iter : session_manager->sessions_) {
29 if (iter.second == session)
30 return true;
31 }
32 return false;
33 }
34
35 bool IsSessionManagerEmpty(RendererMediaSessionManager* session_manager) {
36 return session_manager->sessions_.empty();
37 }
38
39 protected:
40 int success_count_ = 0;
41 int error_count_ = 0;
42 };
43
44 class TestActivateCallback : public blink::WebMediaSessionActivateCallback {
45 public:
46 TestActivateCallback(WebMediaSessionTest* test) : test_(test) {}
47
48 private:
49 void onSuccess() override { test_->OnSuccess(); }
50 void onError(const blink::WebMediaSessionError&) override {
51 test_->OnError();
52 }
53
54 WebMediaSessionTest* test_;
55 };
56
57 class TestDeactivateCallback : public blink::WebMediaSessionDeactivateCallback {
58 public:
59 TestDeactivateCallback(WebMediaSessionTest* test) : test_(test) {}
60
61 private:
62 void onSuccess() override { test_->OnSuccess(); }
63 void onError() override { test_->OnError(); }
64
65 WebMediaSessionTest* test_;
66 };
67
68 TEST_F(WebMediaSessionTest, TestRegistration) {
69 std::unique_ptr<RendererMediaSessionManager> session_manager(
70 new RendererMediaSessionManager(nullptr));
71 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
72 {
73 std::unique_ptr<WebMediaSessionAndroid> session(
74 new WebMediaSessionAndroid(session_manager.get()));
75 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session.get()));
76 }
77 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
78 }
79
80 TEST_F(WebMediaSessionTest, TestMultipleRegistration) {
81 std::unique_ptr<RendererMediaSessionManager> session_manager(
82 new RendererMediaSessionManager(nullptr));
83 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
84
85 {
86 std::unique_ptr<WebMediaSessionAndroid> session1(
87 new WebMediaSessionAndroid(session_manager.get()));
88 EXPECT_TRUE(
89 SessionManagerHasSession(session_manager.get(), session1.get()));
90
91 {
92 std::unique_ptr<WebMediaSessionAndroid> session2(
93 new WebMediaSessionAndroid(session_manager.get()));
94 EXPECT_TRUE(
95 SessionManagerHasSession(session_manager.get(), session2.get()));
96 }
97
98 EXPECT_TRUE(
99 SessionManagerHasSession(session_manager.get(), session1.get()));
100 }
101
102 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
103 }
104
105 TEST_F(WebMediaSessionTest, TestMultipleRegistrationOutOfOrder) {
106 std::unique_ptr<RendererMediaSessionManager> session_manager(
107 new RendererMediaSessionManager(nullptr));
108 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
109
110 WebMediaSessionAndroid* session1 =
111 new WebMediaSessionAndroid(session_manager.get());
112 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session1));
113
114 WebMediaSessionAndroid* session2 =
115 new WebMediaSessionAndroid(session_manager.get());
116 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2));
117
118 delete session1;
119 EXPECT_TRUE(SessionManagerHasSession(session_manager.get(), session2));
120
121 delete session2;
122 EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get()));
123 }
124
125 TEST_F(WebMediaSessionTest, ActivationOutOfOrder) {
126 std::unique_ptr<RendererMediaSessionManager> session_manager(
127 new RendererMediaSessionManager(nullptr));
128
129 std::unique_ptr<WebMediaSessionAndroid> session(
130 new WebMediaSessionAndroid(session_manager.get()));
131
132 // Request activate three times
133 session->activate(new TestActivateCallback(this)); // request 1
134 session->activate(new TestActivateCallback(this)); // request 2
135 session->activate(new TestActivateCallback(this)); // request 3
136
137 // Confirm activation out of order
138 session_manager->OnMessageReceived(
139 MediaSessionMsg_DidActivate(kRouteId, 3, true));
140
141 session_manager->OnMessageReceived(
142 MediaSessionMsg_DidActivate(kRouteId, 2, true));
143
144 session_manager->OnMessageReceived(
145 MediaSessionMsg_DidActivate(kRouteId, 1, true));
146
147 EXPECT_EQ(3, success_count_);
148 EXPECT_EQ(0, error_count_);
149 }
150
151 TEST_F(WebMediaSessionTest, ActivationInOrder) {
152 std::unique_ptr<RendererMediaSessionManager> session_manager(
153 new RendererMediaSessionManager(nullptr));
154
155 std::unique_ptr<WebMediaSessionAndroid> session(
156 new WebMediaSessionAndroid(session_manager.get()));
157
158 // Request activate three times
159 session->activate(new TestActivateCallback(this)); // request 1
160 session_manager->OnMessageReceived(
161 MediaSessionMsg_DidActivate(kRouteId, 1, true));
162
163 session->activate(new TestActivateCallback(this)); // request 2
164 session_manager->OnMessageReceived(
165 MediaSessionMsg_DidActivate(kRouteId, 2, true));
166
167 session->activate(new TestActivateCallback(this)); // request 3
168 session_manager->OnMessageReceived(
169 MediaSessionMsg_DidActivate(kRouteId, 3, true));
170
171 EXPECT_EQ(3, success_count_);
172 EXPECT_EQ(0, error_count_);
173 }
174
175 TEST_F(WebMediaSessionTest, ActivationInFlight) {
176 std::unique_ptr<RendererMediaSessionManager> session_manager(
177 new RendererMediaSessionManager(nullptr));
178
179 std::unique_ptr<WebMediaSessionAndroid> session(
180 new WebMediaSessionAndroid(session_manager.get()));
181
182 session->activate(new TestActivateCallback(this)); // request 1
183 session->activate(new TestActivateCallback(this)); // request 2
184 session->activate(new TestActivateCallback(this)); // request 3
185
186 session_manager->OnMessageReceived(
187 MediaSessionMsg_DidActivate(kRouteId, 1, true));
188
189 session->activate(new TestActivateCallback(this)); // request 4
190 session->activate(new TestActivateCallback(this)); // request 5
191
192 session_manager->OnMessageReceived(
193 MediaSessionMsg_DidActivate(kRouteId, 3, true));
194 session_manager->OnMessageReceived(
195 MediaSessionMsg_DidActivate(kRouteId, 2, true));
196 session_manager->OnMessageReceived(
197 MediaSessionMsg_DidActivate(kRouteId, 5, true));
198 session_manager->OnMessageReceived(
199 MediaSessionMsg_DidActivate(kRouteId, 4, true));
200
201 EXPECT_EQ(5, success_count_);
202 EXPECT_EQ(0, error_count_);
203 }
204
205 TEST_F(WebMediaSessionTest, ActivationFailure) {
206 std::unique_ptr<RendererMediaSessionManager> session_manager(
207 new RendererMediaSessionManager(nullptr));
208
209 std::unique_ptr<WebMediaSessionAndroid> session(
210 new WebMediaSessionAndroid(session_manager.get()));
211
212 session->activate(new TestActivateCallback(this)); // request 1
213 session->activate(new TestActivateCallback(this)); // request 2
214 session->activate(new TestActivateCallback(this)); // request 3
215
216 session_manager->OnMessageReceived(
217 MediaSessionMsg_DidActivate(kRouteId, 1, true));
218 EXPECT_EQ(1, success_count_);
219 EXPECT_EQ(0, error_count_);
220 session_manager->OnMessageReceived(
221 MediaSessionMsg_DidActivate(kRouteId, 2, false));
222 EXPECT_EQ(1, success_count_);
223 EXPECT_EQ(1, error_count_);
224 session_manager->OnMessageReceived(
225 MediaSessionMsg_DidActivate(kRouteId, 3, true));
226 EXPECT_EQ(2, success_count_);
227 EXPECT_EQ(1, error_count_);
228 }
229
230 TEST_F(WebMediaSessionTest, Deactivation) {
231 std::unique_ptr<RendererMediaSessionManager> session_manager(
232 new RendererMediaSessionManager(nullptr));
233
234 std::unique_ptr<WebMediaSessionAndroid> session(
235 new WebMediaSessionAndroid(session_manager.get()));
236
237 // Request deactivate three times
238 session->deactivate(new TestDeactivateCallback(this)); // request 1
239 session->deactivate(new TestDeactivateCallback(this)); // request 2
240 session->deactivate(new TestDeactivateCallback(this)); // request 3
241 session_manager->OnMessageReceived(
242 MediaSessionMsg_DidDeactivate(kRouteId, 1));
243 EXPECT_EQ(1, success_count_);
244 session_manager->OnMessageReceived(
245 MediaSessionMsg_DidDeactivate(kRouteId, 2));
246 EXPECT_EQ(2, success_count_);
247 session_manager->OnMessageReceived(
248 MediaSessionMsg_DidDeactivate(kRouteId, 3));
249 EXPECT_EQ(3, success_count_);
250 EXPECT_EQ(0, error_count_);
251 }
252
253 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698