| 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..fde5cf506e2cbaea81d1abc8d7a47c994886abe3 100644
|
| --- a/content/renderer/media/android/webmediasession_android_unittest.cc
|
| +++ b/content/renderer/media/android/webmediasession_android_unittest.cc
|
| @@ -5,13 +5,25 @@
|
| #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:
|
| + WebMediaSessionTest() : success_count_(0), error_count_(0) {}
|
| +
|
| + void OnSuccess() { ++success_count_; }
|
| + void OnError() { ++error_count_; }
|
| +
|
| bool SessionManagerHasSession(RendererMediaSessionManager* session_manager,
|
| WebMediaSessionAndroid* session) {
|
| for (auto& iter : session_manager->sessions_) {
|
| @@ -24,6 +36,34 @@ class WebMediaSessionTest : public testing::Test {
|
| bool IsSessionManagerEmpty(RendererMediaSessionManager* session_manager) {
|
| return session_manager->sessions_.empty();
|
| }
|
| +
|
| + protected:
|
| + int success_count_;
|
| + int error_count_;
|
| +};
|
| +
|
| +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 +123,130 @@ 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)); // activation 0
|
| + session->activate(new TestActivateCallback(this)); // activation 1
|
| + session->activate(new TestActivateCallback(this)); // activation 2
|
| +
|
| + // Confirm activation out of order
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 0, 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)); // activation 0
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 0, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // activation 1
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // activation 2
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, 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()));
|
| +
|
| + // Request activate three times
|
| + session->activate(new TestActivateCallback(this)); // activation 0
|
| + session->activate(new TestActivateCallback(this)); // activation 1
|
| + session->activate(new TestActivateCallback(this)); // activation 2
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 0, true));
|
| +
|
| + session->activate(new TestActivateCallback(this)); // activation 4
|
| + session->activate(new TestActivateCallback(this)); // activation 5
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 4, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 3, 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()));
|
| +
|
| + // Request activate three times
|
| + session->activate(new TestActivateCallback(this)); // activation 0
|
| + session->activate(new TestActivateCallback(this)); // activation 1
|
| + session->activate(new TestActivateCallback(this)); // activation 2
|
| +
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 1, true));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 0, false));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidActivate(kRouteId, session->session_id(), 2, 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)); // activation 0
|
| + session->deactivate(new TestDeactivateCallback(this)); // activation 1
|
| + session->deactivate(new TestDeactivateCallback(this)); // activation 2
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 0));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 1));
|
| + session_manager->OnMessageReceived(
|
| + MediaSessionMsg_DidDeactivate(kRouteId, session->session_id(), 2));
|
| +
|
| + EXPECT_EQ(3, success_count_);
|
| + EXPECT_EQ(0, error_count_);
|
| +}
|
| +
|
| } // namespace content
|
|
|