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

Unified Diff: content/browser/media/session/media_session_impl_service_routing_unittest.cc

Issue 2685373002: [Media>Session] Pause all players for non-routed frames when receiving PAUSE action (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/media/session/media_session_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/media/session/media_session_impl_service_routing_unittest.cc
diff --git a/content/browser/media/session/media_session_impl_service_routing_unittest.cc b/content/browser/media/session/media_session_impl_service_routing_unittest.cc
index e156cd67f86c6bf73b2ffe7a1dc50f4a2280ef20..ff969be22f82f8a2087d93a39661b1d92d4cf39f 100644
--- a/content/browser/media/session/media_session_impl_service_routing_unittest.cc
+++ b/content/browser/media/session/media_session_impl_service_routing_unittest.cc
@@ -8,6 +8,7 @@
#include <memory>
#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "content/browser/media/session/media_session_player_observer.h"
#include "content/browser/media/session/media_session_service_impl.h"
@@ -15,10 +16,12 @@
#include "content/test/test_render_view_host.h"
#include "content/test/test_web_contents.h"
#include "media/base/media_content_type.h"
+#include "third_party/WebKit/public/platform/modules/mediasession/media_session.mojom.h"
using ::testing::_;
using ::testing::AnyNumber;
using ::testing::Eq;
+using ::testing::InvokeWithoutArgs;
namespace content {
@@ -33,6 +36,22 @@ class MockMediaSessionServiceImpl : public MediaSessionServiceImpl {
~MockMediaSessionServiceImpl() override = default;
};
+class MockMediaSessionClient : public blink::mojom::MediaSessionClient {
+ public:
+ MockMediaSessionClient() : binding_(this) {}
+
+ blink::mojom::MediaSessionClientPtr CreateInterfacePtrAndBind() {
+ return binding_.CreateInterfacePtrAndBind();
+ }
+
+ MOCK_METHOD1(DidReceiveAction, void(blink::mojom::MediaSessionAction action));
+
+ private:
+ mojo::Binding<blink::mojom::MediaSessionClient> binding_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockMediaSessionClient);
+};
+
class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver {
public:
explicit MockMediaSessionPlayerObserver(RenderFrameHost* rfh)
@@ -40,10 +59,11 @@ class MockMediaSessionPlayerObserver : public MediaSessionPlayerObserver {
~MockMediaSessionPlayerObserver() override = default;
- void OnSuspend(int player_id) override {}
- void OnResume(int player_id) override {}
- void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override {
- }
+ MOCK_METHOD1(OnSuspend, void(int player_id));
+ MOCK_METHOD1(OnResume, void(int player_id));
+ MOCK_METHOD2(OnSetVolumeMultiplier,
+ void(int player_id, double volume_multiplier));
+
RenderFrameHost* GetRenderFrameHost() const override {
return render_frame_host_;
}
@@ -77,6 +97,7 @@ class MediaSessionImplServiceRoutingTest
void TearDown() override {
mock_media_session_observer_.reset();
services_.clear();
+ clients_.clear();
RenderViewHostImplTestHarness::TearDown();
}
@@ -88,10 +109,18 @@ class MediaSessionImplServiceRoutingTest
void CreateServiceForFrame(TestRenderFrameHost* frame) {
services_[frame] = base::MakeUnique<MockMediaSessionServiceImpl>(frame);
+ clients_[frame] = base::MakeUnique<MockMediaSessionClient>();
+ services_[frame]->SetClient(clients_[frame]->CreateInterfacePtrAndBind());
}
void DestroyServiceForFrame(TestRenderFrameHost* frame) {
services_.erase(frame);
+ clients_.erase(frame);
+ }
+
+ MockMediaSessionClient* GetClientForFrame(TestRenderFrameHost* frame) {
+ auto iter = clients_.find(frame);
+ return (iter != clients_.end()) ? iter->second.get() : nullptr;
}
void StartPlayerForFrame(TestRenderFrameHost* frame) {
@@ -109,6 +138,12 @@ class MediaSessionImplServiceRoutingTest
->RemovePlayer(players_[frame].get(), kPlayerId);
}
+ MockMediaSessionPlayerObserver* GetPlayerForFrame(
+ TestRenderFrameHost* frame) {
+ auto iter = players_.find(frame);
+ return (iter != players_.end()) ? iter->second.get() : nullptr;
+ }
+
MediaSessionServiceImpl* ComputeServiceForRouting() {
return MediaSessionImpl::Get(contents())->ComputeServiceForRouting();
}
@@ -125,6 +160,10 @@ class MediaSessionImplServiceRoutingTest
std::unique_ptr<MockMediaSessionServiceImpl>>;
ServiceMap services_;
+ using ClientMap =
+ std::map<TestRenderFrameHost*, std::unique_ptr<MockMediaSessionClient>>;
+ ClientMap clients_;
+
using PlayerMap = std::map<TestRenderFrameHost*,
std::unique_ptr<MockMediaSessionPlayerObserver>>;
PlayerMap players_;
@@ -319,4 +358,48 @@ TEST_F(MediaSessionImplServiceRoutingTest,
ClearPlayersForFrame(main_frame_);
}
+TEST_F(MediaSessionImplServiceRoutingTest,
+ TestPauseBehaviorWhenMainFrameIsRouted) {
+ base::RunLoop run_loop;
+
+ StartPlayerForFrame(main_frame_);
+ StartPlayerForFrame(sub_frame_);
+
+ CreateServiceForFrame(main_frame_);
+
+ EXPECT_CALL(*GetPlayerForFrame(sub_frame_), OnSuspend(_));
+ EXPECT_CALL(*GetClientForFrame(main_frame_),
+ DidReceiveAction(blink::mojom::MediaSessionAction::PAUSE))
+ .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
+
+ services_[main_frame_]->EnableAction(blink::mojom::MediaSessionAction::PAUSE);
+
+ MediaSessionImpl::Get(contents())
+ ->DidReceiveAction(blink::mojom::MediaSessionAction::PAUSE);
+
+ run_loop.Run();
+}
+
+TEST_F(MediaSessionImplServiceRoutingTest,
+ TestPauseBehaviorWhenSubFrameIsRouted) {
+ base::RunLoop run_loop;
+
+ StartPlayerForFrame(main_frame_);
+ StartPlayerForFrame(sub_frame_);
+
+ CreateServiceForFrame(sub_frame_);
+
+ EXPECT_CALL(*GetPlayerForFrame(main_frame_), OnSuspend(_));
+ EXPECT_CALL(*GetClientForFrame(sub_frame_),
+ DidReceiveAction(blink::mojom::MediaSessionAction::PAUSE))
+ .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
+
+ services_[sub_frame_]->EnableAction(blink::mojom::MediaSessionAction::PAUSE);
+
+ MediaSessionImpl::Get(contents())
+ ->DidReceiveAction(blink::mojom::MediaSessionAction::PAUSE);
+
+ run_loop.Run();
+}
+
} // namespace content
« no previous file with comments | « content/browser/media/session/media_session_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698