Commit d26bde32 authored by Xiaohan Wang's avatar Xiaohan Wang Committed by Commit Bot

media: Add MojoRendererTest.SetCdm_ReleasedCdmId test

This tests the case where MojoRenderer::SetCdm() is called with a CDM ID
where the CDM has already been released.

Bug: 1004730
Test: Add a unittest.
Change-Id: Ia400ccdfac74fb6153c46ba3b216c325b8ea2327
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1819624Reviewed-by: default avatarJohn Rummell <jrummell@chromium.org>
Commit-Queue: Xiaohan Wang <xhwang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699061}
parent d7464dac
......@@ -174,6 +174,7 @@ AesDecryptor::AesDecryptor(
session_closed_cb_(session_closed_cb),
session_keys_change_cb_(session_keys_change_cb),
session_expiration_update_cb_(session_expiration_update_cb) {
DVLOG(1) << __func__;
// AesDecryptor doesn't keep any persistent data, so no need to do anything
// with |security_origin|.
DCHECK(session_message_cb_);
......@@ -182,6 +183,7 @@ AesDecryptor::AesDecryptor(
}
AesDecryptor::~AesDecryptor() {
DVLOG(1) << __func__;
key_map_.clear();
}
......
......@@ -61,8 +61,10 @@ void WaitFor(base::TimeDelta duration) {
class MojoRendererTest : public ::testing::Test {
public:
MojoRendererTest()
: mojo_cdm_service_(&cdm_factory_, &mojo_cdm_service_context_),
cdm_binding_(&mojo_cdm_service_) {
: mojo_cdm_service_(
std::make_unique<MojoCdmService>(&cdm_factory_,
&mojo_cdm_service_context_)),
cdm_binding_(mojo_cdm_service_.get()) {
std::unique_ptr<StrictMock<MockRenderer>> mock_renderer(
new StrictMock<MockRenderer>());
mock_renderer_ = mock_renderer.get();
......@@ -215,7 +217,7 @@ class MojoRendererTest : public ::testing::Test {
// Service side bindings (declaration order is critical).
MojoCdmServiceContext mojo_cdm_service_context_;
DefaultCdmFactory cdm_factory_;
MojoCdmService mojo_cdm_service_;
std::unique_ptr<MojoCdmService> mojo_cdm_service_;
mojo::Binding<mojom::ContentDecryptionModule> cdm_binding_;
// Service side mocks and helpers.
......@@ -306,6 +308,30 @@ TEST_F(MojoRendererTest, SetCdm_NonExistCdmId) {
SetCdmAndExpect(false);
}
TEST_F(MojoRendererTest, SetCdm_ReleasedCdmId) {
// The CdmContext set on |mock_renderer_|.
CdmContext* mock_renderer_cdm_context = nullptr;
Initialize();
CreateCdm();
EXPECT_CALL(*mock_renderer_, SetCdm(_, _))
.WillOnce(
DoAll(SaveArg<0>(&mock_renderer_cdm_context), RunCallback<1>(true)));
SetCdmAndExpect(true);
EXPECT_TRUE(mock_renderer_cdm_context);
// Release the CDM.
mojo_cdm_service_.reset();
base::RunLoop().RunUntilIdle();
// SetCdm() on |mock_renderer_| should not be called.
SetCdmAndExpect(false);
// The CDM should still be around since it's set on the |mock_renderer_|. It
// should have a Decryptor since we use kClearKeyKeySystem.
EXPECT_TRUE(mock_renderer_cdm_context->GetDecryptor());
}
TEST_F(MojoRendererTest, SetCdm_BeforeInitialize) {
CreateCdm();
EXPECT_CALL(*mock_renderer_, SetCdm(_, _)).WillOnce(RunCallback<1>(true));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment