1 // Copyright 2021 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.
5 #include "media/mojo/services/cdm_service_broker.h"
9 #include "base/files/file_path.h"
10 #include "base/functional/bind.h"
11 #include "base/memory/raw_ptr.h"
12 #include "base/test/task_environment.h"
13 #include "build/build_config.h"
14 #include "media/base/cdm_factory.h"
15 #include "media/media_buildflags.h"
16 #include "mojo/public/cpp/bindings/remote.h"
17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h"
24 class MockCdmServiceClient : public media::CdmService::Client {
26 MockCdmServiceClient() = default;
27 ~MockCdmServiceClient() override = default;
29 // media::CdmService::Client implementation.
30 MOCK_METHOD0(EnsureSandboxed, void());
31 std::unique_ptr<media::CdmFactory> CreateCdmFactory(
32 mojom::FrameInterfaceFactory* frame_interfaces) override {
35 #if BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
36 void AddCdmHostFilePaths(std::vector<media::CdmHostFilePath>*) override {}
37 #endif // BUILDFLAG(ENABLE_CDM_HOST_VERIFICATION)
40 class CdmServiceBrokerTest : public testing::Test {
42 CdmServiceBrokerTest() = default;
43 ~CdmServiceBrokerTest() override = default;
46 auto mock_cdm_service_client = std::make_unique<MockCdmServiceClient>();
47 mock_cdm_service_client_ = mock_cdm_service_client.get();
49 broker_ = std::make_unique<CdmServiceBroker>(
50 std::move(mock_cdm_service_client),
51 remote_.BindNewPipeAndPassReceiver());
54 MockCdmServiceClient* mock_cdm_service_client() {
55 return mock_cdm_service_client_;
58 base::test::TaskEnvironment task_environment_;
59 raw_ptr<MockCdmServiceClient, AcrossTasksDanglingUntriaged>
60 mock_cdm_service_client_ = nullptr;
61 mojo::Remote<mojom::CdmServiceBroker> remote_;
62 std::unique_ptr<CdmServiceBroker> broker_;
67 TEST_F(CdmServiceBrokerTest, GetService) {
70 // Even with a dummy path where the CDM cannot be loaded, EnsureSandboxed()
71 // should still be called to ensure the process is sandboxed.
72 EXPECT_CALL(*mock_cdm_service_client(), EnsureSandboxed());
74 mojo::Remote<mojom::CdmService> service_remote_;
76 base::FilePath cdm_path(FILE_PATH_LITERAL("dummy path"));
78 // Token provider will not be used since the path is a dummy path.
79 remote_->GetService(cdm_path, mojo::NullRemote(),
80 service_remote_.BindNewPipeAndPassReceiver());
82 remote_->GetService(cdm_path, service_remote_.BindNewPipeAndPassReceiver());
85 remote_.FlushForTesting();