blob: 2edb4e350232d0a8c4577ea28ad9ce2525545852 [file] [log] [blame]
Bryant Chandler32ca6382023-08-02 21:52:311// Copyright 2023 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Bryant Chandlerd5890afb2023-09-11 19:12:135#include "components/media_effects/media_effects_service.h"
Bryant Chandler32ca6382023-08-02 21:52:316
7#include "base/run_loop.h"
8#include "base/test/test_future.h"
Bryant Chandler2c84a6c2023-09-14 14:23:439#include "components/user_prefs/test/test_browser_context_with_prefs.h"
Bryant Chandler32ca6382023-08-02 21:52:3110#include "content/public/test/browser_task_environment.h"
11#include "testing/gtest/include/gtest/gtest.h"
12#include "ui/gfx/geometry/insets_f.h"
13
14namespace {
15
16constexpr char kDeviceId[] = "test_device";
17
Bryant Chandler23896e32024-03-06 17:58:0318media::mojom::VideoEffectsConfigurationPtr GetConfigurationSync(
19 mojo::Remote<media::mojom::VideoEffectsManager>& effects_manager) {
20 base::test::TestFuture<media::mojom::VideoEffectsConfigurationPtr>
Bryant Chandler32ca6382023-08-02 21:52:3121 output_configuration;
22 effects_manager->GetConfiguration(output_configuration.GetCallback());
23 return output_configuration.Take();
24}
25
26void SetFramingSync(
Bryant Chandler23896e32024-03-06 17:58:0327 mojo::Remote<media::mojom::VideoEffectsManager>& effects_manager,
Bryant Chandler32ca6382023-08-02 21:52:3128 float framing_padding_ratio) {
Bryant Chandler23896e32024-03-06 17:58:0329 base::test::TestFuture<media::mojom::SetConfigurationResult> result_future;
Bryant Chandler32ca6382023-08-02 21:52:3130 effects_manager->SetConfiguration(
Bryant Chandler23896e32024-03-06 17:58:0331 media::mojom::VideoEffectsConfiguration::New(
Bryant Chandler32ca6382023-08-02 21:52:3132 nullptr, nullptr,
Bryant Chandler23896e32024-03-06 17:58:0333 media::mojom::Framing::New(gfx::InsetsF{framing_padding_ratio})),
Bryant Chandler32ca6382023-08-02 21:52:3134 result_future.GetCallback());
Bryant Chandler23896e32024-03-06 17:58:0335 EXPECT_EQ(media::mojom::SetConfigurationResult::kOk, result_future.Get());
Bryant Chandler32ca6382023-08-02 21:52:3136}
37} // namespace
38
39class MediaEffectsServiceTest : public testing::Test {
Bryant Chandler32ca6382023-08-02 21:52:3140 protected:
Bryant Chandler32ca6382023-08-02 21:52:3141 content::BrowserTaskEnvironment task_environment_;
Bryant Chandler2c84a6c2023-09-14 14:23:4342 user_prefs::TestBrowserContextWithPrefs browser_context_;
Bryant Chandlerd5890afb2023-09-11 19:12:1343 MediaEffectsService service_{browser_context_.prefs()};
Bryant Chandler32ca6382023-08-02 21:52:3144};
45
46TEST_F(MediaEffectsServiceTest, BindVideoEffectsManager) {
Bryant Chandler23896e32024-03-06 17:58:0347 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager;
Bryant Chandlerd5890afb2023-09-11 19:12:1348 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:3149 kDeviceId, effects_manager.BindNewPipeAndPassReceiver());
50
51 EXPECT_TRUE(GetConfigurationSync(effects_manager)->framing.is_null());
52
53 const float kFramingPaddingRatio = 0.2;
54 SetFramingSync(effects_manager, kFramingPaddingRatio);
55
56 auto configuration = GetConfigurationSync(effects_manager);
57 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
58 configuration->framing->padding_ratios);
59}
60
61TEST_F(MediaEffectsServiceTest,
62 BindVideoEffectsManager_TwoRegistrantsWithSameIdConnectToSameManager) {
Bryant Chandler23896e32024-03-06 17:58:0363 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager1;
Bryant Chandlerd5890afb2023-09-11 19:12:1364 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:3165 kDeviceId, effects_manager1.BindNewPipeAndPassReceiver());
66
67 const float kFramingPaddingRatio = 0.234;
68 SetFramingSync(effects_manager1, kFramingPaddingRatio);
69
70 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
71 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
72
Bryant Chandler23896e32024-03-06 17:58:0373 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager2;
Bryant Chandlerd5890afb2023-09-11 19:12:1374 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:3175 kDeviceId, effects_manager2.BindNewPipeAndPassReceiver());
76
77 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
78 GetConfigurationSync(effects_manager2)->framing->padding_ratios);
79}
80
81TEST_F(
82 MediaEffectsServiceTest,
83 BindVideoEffectsManager_TwoRegistrantsWithDifferentIdConnectToDifferentManager) {
Bryant Chandler23896e32024-03-06 17:58:0384 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager1;
Bryant Chandlerd5890afb2023-09-11 19:12:1385 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:3186 "test_device_1", effects_manager1.BindNewPipeAndPassReceiver());
87
88 const float kFramingPaddingRatio = 0.234;
89 SetFramingSync(effects_manager1, kFramingPaddingRatio);
90
91 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
92 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
93
Bryant Chandler23896e32024-03-06 17:58:0394 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager2;
Bryant Chandlerd5890afb2023-09-11 19:12:1395 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:3196 "test_device_2", effects_manager2.BindNewPipeAndPassReceiver());
97
98 // Expect `framing` to be unset because it is a separate instance of
99 // `VideoEffectsManager`.
100 auto framing = std::move(GetConfigurationSync(effects_manager2)->framing);
101 EXPECT_TRUE(framing.is_null());
102}
103
104TEST_F(
105 MediaEffectsServiceTest,
106 OnLastReceiverDisconnected_ErasesTheManagerWhenAllReceiversAreDisconnected) {
Bryant Chandler23896e32024-03-06 17:58:03107 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager1;
Bryant Chandlerd5890afb2023-09-11 19:12:13108 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31109 kDeviceId, effects_manager1.BindNewPipeAndPassReceiver());
Bryant Chandler23896e32024-03-06 17:58:03110 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager2;
Bryant Chandlerd5890afb2023-09-11 19:12:13111 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31112 kDeviceId, effects_manager2.BindNewPipeAndPassReceiver());
113
114 const float kFramingPaddingRatio = 0.234;
115
116 SetFramingSync(effects_manager1, kFramingPaddingRatio);
117
118 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
119 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
120
121 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
122 GetConfigurationSync(effects_manager2)->framing->padding_ratios);
123
124 effects_manager1.reset();
125 effects_manager2.reset();
126 // Wait for the reset to complete
127 base::RunLoop().RunUntilIdle();
128
Bryant Chandler23896e32024-03-06 17:58:03129 mojo::Remote<media::mojom::VideoEffectsManager> effects_manager3;
Bryant Chandlerd5890afb2023-09-11 19:12:13130 service_.BindVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31131 kDeviceId, effects_manager3.BindNewPipeAndPassReceiver());
132
133 // Expect `framing` to be unset because it is a new instance of
134 // `VideoEffectsManager`.
135 EXPECT_TRUE(GetConfigurationSync(effects_manager3)->framing.is_null());
136}