Commit aa179c6a authored by Jeffrey Kardatzke's avatar Jeffrey Kardatzke Committed by Commit Bot

Handle PlatformVerification loss in ChromeOsCdmFactory

The PlatformVerification mojo object can become invalid during the
lifetime of the CdmFactory, so reset it on error and reconnect it.

BUG=b:153111783
TEST=ChromeOsCdmFactory works across page refreshes

Change-Id: If54667256bcabf8aa2624d6a89c32e4a46f4bcb8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2476727
Commit-Queue: Jeffrey Kardatzke <jkardatzke@google.com>
Commit-Queue: Xiaohan Wang <xhwang@chromium.org>
Reviewed-by: default avatarXiaohan Wang <xhwang@chromium.org>
Auto-Submit: Jeffrey Kardatzke <jkardatzke@google.com>
Cr-Commit-Position: refs/heads/master@{#818001}
parent c4e162c3
...@@ -73,6 +73,9 @@ void ChromeOsCdmFactory::Create( ...@@ -73,6 +73,9 @@ void ChromeOsCdmFactory::Create(
if (!platform_verification_) { if (!platform_verification_) {
frame_interfaces_->BindEmbedderReceiver(mojo::GenericPendingReceiver( frame_interfaces_->BindEmbedderReceiver(mojo::GenericPendingReceiver(
platform_verification_.BindNewPipeAndPassReceiver())); platform_verification_.BindNewPipeAndPassReceiver()));
platform_verification_.set_disconnect_handler(
base::BindOnce(&ChromeOsCdmFactory::OnVerificationMojoConnectionError,
weak_factory_.GetWeakPtr()));
} }
platform_verification_->IsVerifiedAccessEnabled(base::BindOnce( platform_verification_->IsVerifiedAccessEnabled(base::BindOnce(
&ChromeOsCdmFactory::OnVerifiedAccessEnabled, weak_factory_.GetWeakPtr(), &ChromeOsCdmFactory::OnVerifiedAccessEnabled, weak_factory_.GetWeakPtr(),
...@@ -147,7 +150,7 @@ void ChromeOsCdmFactory::OnCreateFactory( ...@@ -147,7 +150,7 @@ void ChromeOsCdmFactory::OnCreateFactory(
if (!remote_factory_) { if (!remote_factory_) {
remote_factory_.Bind(std::move(remote_factory)); remote_factory_.Bind(std::move(remote_factory));
remote_factory_.set_disconnect_handler( remote_factory_.set_disconnect_handler(
base::BindOnce(&ChromeOsCdmFactory::OnMojoConnectionError, base::BindOnce(&ChromeOsCdmFactory::OnFactoryMojoConnectionError,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
...@@ -202,9 +205,14 @@ void ChromeOsCdmFactory::CreateCdm( ...@@ -202,9 +205,14 @@ void ChromeOsCdmFactory::CreateCdm(
FROM_HERE, base::BindOnce(std::move(cdm_created_cb), std::move(cdm), "")); FROM_HERE, base::BindOnce(std::move(cdm_created_cb), std::move(cdm), ""));
} }
void ChromeOsCdmFactory::OnMojoConnectionError() { void ChromeOsCdmFactory::OnFactoryMojoConnectionError() {
DVLOG(1) << __func__; DVLOG(1) << __func__;
remote_factory_.reset(); remote_factory_.reset();
} }
void ChromeOsCdmFactory::OnVerificationMojoConnectionError() {
DVLOG(1) << __func__;
platform_verification_.reset();
}
} // namespace chromeos } // namespace chromeos
...@@ -73,7 +73,8 @@ class COMPONENT_EXPORT(CDM_FACTORY_DAEMON) ChromeOsCdmFactory ...@@ -73,7 +73,8 @@ class COMPONENT_EXPORT(CDM_FACTORY_DAEMON) ChromeOsCdmFactory
const media::SessionKeysChangeCB& session_keys_change_cb, const media::SessionKeysChangeCB& session_keys_change_cb,
const media::SessionExpirationUpdateCB& session_expiration_update_cb, const media::SessionExpirationUpdateCB& session_expiration_update_cb,
media::CdmCreatedCB cdm_created_cb); media::CdmCreatedCB cdm_created_cb);
void OnMojoConnectionError(); void OnFactoryMojoConnectionError();
void OnVerificationMojoConnectionError();
media::mojom::FrameInterfaceFactory* frame_interfaces_; media::mojom::FrameInterfaceFactory* frame_interfaces_;
mojo::Remote<cdm::mojom::CdmFactory> remote_factory_; mojo::Remote<cdm::mojom::CdmFactory> remote_factory_;
......
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