| 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..69e8138cb6d15e85fbb42d2bc1be2c26548bd439 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;
|
| +
|
| +} // 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,132 @@ 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, 3, true));
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 2, true));
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 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, 1, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // request 2
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 2, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // request 3
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 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, 1, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // request 4
|
| + session->activate(new TestActivateCallback(this)); // request 5
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 3, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 2, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 5, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 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, 1, true));
|
| + EXPECT_EQ(1, success_count_);
|
| + EXPECT_EQ(0, error_count_);
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 2, false));
|
| + EXPECT_EQ(1, success_count_);
|
| + EXPECT_EQ(1, error_count_);
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, 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, 1));
|
| + EXPECT_EQ(1, success_count_);
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidDeactivate(kRouteId, 2));
|
| + EXPECT_EQ(2, success_count_);
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidDeactivate(kRouteId, 3));
|
| + EXPECT_EQ(3, success_count_);
|
| + EXPECT_EQ(0, error_count_);
|
| +}
|
| +
|
| } // namespace content
|
|
|