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

Unified 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 comments Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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..5123fd363ccad689ad23798203684fc6ebba1a58 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_;
mlamouri (slow - plz ping) 2015/12/02 15:53:31 I think you can do `int success_count_ = 0;` and r
davve 2015/12/04 12:43:09 Done.
+ 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_;
mlamouri (slow - plz ping) 2015/12/02 15:53:31 I think you are leaking `test_`. Should you use a
davve 2015/12/04 12:43:09 Not sure I follow. WebMediaSessionTest is the 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)); // deactivation 0
+ session->deactivate(new TestDeactivateCallback(this)); // deactivation 1
+ session->deactivate(new TestDeactivateCallback(this)); // deactivation 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_);
+}
+
mlamouri (slow - plz ping) 2015/12/02 15:53:31 Can you add a test where you try to send a message
davve 2015/12/04 12:43:09 Done.
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698