Chromium Code Reviews| Index: content/renderer/media/android/webmediasession_android_unittest.cc |
| diff --git a/content/renderer/media/android/webmediasession_android_unittest.cc b/content/renderer/media/android/webmediasession_android_unittest.cc |
| index fb153f761d9cc4f5e82bc06cc5638c06a4727413..8fa07d1cc985c21d57f4f305c77d6d3e201f0cfd 100644 |
| --- a/content/renderer/media/android/webmediasession_android_unittest.cc |
| +++ b/content/renderer/media/android/webmediasession_android_unittest.cc |
| @@ -5,13 +5,23 @@ |
| #include "content/renderer/media/android/webmediasession_android.h" |
| #include "base/memory/scoped_ptr.h" |
| +#include "content/common/media/media_session_messages_android.h" |
| #include "content/renderer/media/android/renderer_media_session_manager.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| namespace content { |
| +namespace { |
| + |
| +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
|
| + |
| +} // anonymous namespace |
| + |
| class WebMediaSessionTest : public testing::Test { |
| public: |
| + void OnSuccess() { ++success_count_; } |
| + void OnError() { ++error_count_; } |
| + |
| bool SessionManagerHasSession(RendererMediaSessionManager* session_manager, |
| WebMediaSessionAndroid* session) { |
| for (auto& iter : session_manager->sessions_) { |
| @@ -24,6 +34,34 @@ class WebMediaSessionTest : public testing::Test { |
| bool IsSessionManagerEmpty(RendererMediaSessionManager* session_manager) { |
| return session_manager->sessions_.empty(); |
| } |
| + |
| + protected: |
| + int success_count_ = 0; |
| + int error_count_ = 0; |
| +}; |
| + |
| +class TestActivateCallback : public blink::WebMediaSessionActivateCallback { |
| + public: |
| + TestActivateCallback(WebMediaSessionTest* test) : test_(test) {} |
| + |
| + private: |
| + void onSuccess() override { test_->OnSuccess(); } |
| + void onError(const blink::WebMediaSessionError&) override { |
| + test_->OnError(); |
| + } |
| + |
| + WebMediaSessionTest* test_; |
| +}; |
| + |
| +class TestDeactivateCallback : public blink::WebMediaSessionDeactivateCallback { |
| + public: |
| + TestDeactivateCallback(WebMediaSessionTest* test) : test_(test) {} |
| + |
| + private: |
| + void onSuccess() override { test_->OnSuccess(); } |
| + void onError() override { test_->OnError(); } |
| + |
| + WebMediaSessionTest* test_; |
| }; |
| TEST_F(WebMediaSessionTest, TestRegistration) { |
| @@ -83,4 +121,184 @@ TEST_F(WebMediaSessionTest, TestMultipleRegistrationOutOfOrder) { |
| EXPECT_TRUE(IsSessionManagerEmpty(session_manager.get())); |
| } |
| +TEST_F(WebMediaSessionTest, ActivationOutOfOrder) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + // Request activate three times |
| + session->activate(new TestActivateCallback(this)); // request 1 |
| + session->activate(new TestActivateCallback(this)); // request 2 |
| + session->activate(new TestActivateCallback(this)); // request 3 |
| + |
| + // Confirm activation out of order |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + |
| + EXPECT_EQ(3, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, ActivationInOrder) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + // Request activate three times |
| + session->activate(new TestActivateCallback(this)); // request 1 |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 2 |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 3 |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); |
| + |
| + EXPECT_EQ(3, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, ActivationInFlight) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 1 |
| + session->activate(new TestActivateCallback(this)); // request 2 |
| + session->activate(new TestActivateCallback(this)); // request 3 |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 4 |
| + session->activate(new TestActivateCallback(this)); // request 5 |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 5, true)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 4, true)); |
| + |
| + EXPECT_EQ(5, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, ActivationFailure) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 1 |
| + session->activate(new TestActivateCallback(this)); // request 2 |
| + session->activate(new TestActivateCallback(this)); // request 3 |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + EXPECT_EQ(1, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, false)); |
| + EXPECT_EQ(1, success_count_); |
| + EXPECT_EQ(1, error_count_); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, true)); |
| + EXPECT_EQ(2, success_count_); |
| + EXPECT_EQ(1, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, Deactivation) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + // Request deactivate three times |
| + session->deactivate(new TestDeactivateCallback(this)); // request 1 |
| + session->deactivate(new TestDeactivateCallback(this)); // request 2 |
| + session->deactivate(new TestDeactivateCallback(this)); // request 3 |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); |
| + EXPECT_EQ(1, success_count_); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2)); |
| + EXPECT_EQ(2, success_count_); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3)); |
| + EXPECT_EQ(3, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, UnsolicitedResponses) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, false)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, false)); |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 3)); |
| + |
| + EXPECT_EQ(0, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| +TEST_F(WebMediaSessionTest, DoubleResponses) { |
| + scoped_ptr<RendererMediaSessionManager> session_manager( |
| + new RendererMediaSessionManager(nullptr)); |
| + |
| + scoped_ptr<WebMediaSessionAndroid> session( |
| + new WebMediaSessionAndroid(session_manager.get())); |
| + |
| + session->activate(new TestActivateCallback(this)); // request 1 |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true)); |
| + EXPECT_EQ(1, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| + |
| + session->deactivate(new TestDeactivateCallback(this)); // request 1 |
| + |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); |
| + session_manager->OnMessageReceived( |
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1)); |
| + |
| + EXPECT_EQ(2, success_count_); |
| + EXPECT_EQ(0, error_count_); |
| +} |
| + |
| } // namespace content |