blob: c7fbdb627049d36a1c26bd03af47382940567050 [file] [log] [blame]
Avi Drissmand878a5012022-09-12 19:13:301// Copyright 2016 The Chromium Authors
Andres Medinaa65ad1b2019-06-26 22:18:192// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chromecast/browser/application_media_info_manager.h"
6
7#include <memory>
8#include <utility>
9
Avi Drissman710fdab2023-01-11 04:37:3610#include "base/functional/bind.h"
Yuchen Liu3b9cc5a2024-01-09 18:24:1411#include "base/task/sequenced_task_runner.h"
12#include "chromecast/browser/cast_session_id_map.h"
Andres Medinaa65ad1b2019-06-26 22:18:1913#include "content/public/test/test_content_client_initializer.h"
14#include "content/public/test/test_renderer_host.h"
Miyoung Shin5c2d61a2019-11-02 01:08:4015#include "mojo/public/cpp/bindings/remote.h"
Andres Medinaa65ad1b2019-06-26 22:18:1916#include "testing/gmock/include/gmock/gmock.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19namespace chromecast {
20namespace media {
21
22using ::testing::_;
23using ::testing::Invoke;
24
25namespace {
26
27const char kSessionId[] = "test-session-id";
28constexpr bool kMixedAudioEnabled = true;
29
30} // namespace
31
32class ApplicationMediaInfoManagerTest
33 : public content::RenderViewHostTestHarness {
34 public:
35 ApplicationMediaInfoManagerTest() : started_(false) {}
36 ~ApplicationMediaInfoManagerTest() override {}
37
38 void SetUp() override {
39 initializer_ = std::make_unique<content::TestContentClientInitializer>();
40 content::RenderViewHostTestHarness::SetUp();
Yuchen Liu3b9cc5a2024-01-09 18:24:1441 shell::CastSessionIdMap::GetInstance(
42 base::SequencedTaskRunner::GetCurrentDefault().get());
danakjc70aec1f2022-07-07 15:48:1943 application_media_info_manager_ =
44 &ApplicationMediaInfoManager::CreateForTesting(
45 *main_rfh(), kSessionId, kMixedAudioEnabled,
46 application_media_info_manager_remote_
47 .BindNewPipeAndPassReceiver());
Andres Medinaa65ad1b2019-06-26 22:18:1948 }
49
50 void OnCastApplicationMediaInfo(
51 ::media::mojom::CastApplicationMediaInfoPtr ptr) {
52 EXPECT_EQ(ptr->application_session_id, kSessionId);
53 EXPECT_EQ(ptr->mixer_audio_enabled, kMixedAudioEnabled);
54 started_ = true;
55 }
56
Miyoung Shin5c2d61a2019-11-02 01:08:4057 mojo::Remote<::media::mojom::CastApplicationMediaInfoManager>
58 application_media_info_manager_remote_;
Andres Medinaa65ad1b2019-06-26 22:18:1959 std::unique_ptr<content::TestContentClientInitializer> initializer_;
Daniel Cheng9fb887ff2021-10-01 20:27:3860 // `ApplicationMediaInfoManager` is a `DocumentService` and manages its
Daniel Cheng2809eff2021-09-28 00:20:3161 // own lifetime.
62 ApplicationMediaInfoManager* application_media_info_manager_;
Andres Medinaa65ad1b2019-06-26 22:18:1963 bool started_;
64};
65
66TEST_F(ApplicationMediaInfoManagerTest, NoBlock_GetMediaInfo) {
Miyoung Shin5c2d61a2019-11-02 01:08:4067 application_media_info_manager_remote_->GetCastApplicationMediaInfo(
Andres Medinaa65ad1b2019-06-26 22:18:1968 base::BindOnce(
69 &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
70 base::Unretained(this)));
71 base::RunLoop().RunUntilIdle();
72 EXPECT_TRUE(started_);
73}
74
75TEST_F(ApplicationMediaInfoManagerTest, Block_GetMediaInfo_Unblock) {
76 application_media_info_manager_->SetRendererBlock(true);
77 base::RunLoop().RunUntilIdle();
Miyoung Shin5c2d61a2019-11-02 01:08:4078 application_media_info_manager_remote_->GetCastApplicationMediaInfo(
Andres Medinaa65ad1b2019-06-26 22:18:1979 base::BindOnce(
80 &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
81 base::Unretained(this)));
82 base::RunLoop().RunUntilIdle();
83 EXPECT_FALSE(started_);
84 application_media_info_manager_->SetRendererBlock(false);
85 base::RunLoop().RunUntilIdle();
86 EXPECT_TRUE(started_);
87}
88
89TEST_F(ApplicationMediaInfoManagerTest, Block_Unblock_GetMediaInfo) {
90 application_media_info_manager_->SetRendererBlock(true);
91 base::RunLoop().RunUntilIdle();
92 application_media_info_manager_->SetRendererBlock(false);
93 base::RunLoop().RunUntilIdle();
94 EXPECT_FALSE(started_);
Miyoung Shin5c2d61a2019-11-02 01:08:4095 application_media_info_manager_remote_->GetCastApplicationMediaInfo(
Andres Medinaa65ad1b2019-06-26 22:18:1996 base::BindOnce(
97 &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
98 base::Unretained(this)));
99 base::RunLoop().RunUntilIdle();
100 EXPECT_TRUE(started_);
101}
102
103} // namespace media
104} // namespace chromecast