Commit c3b293be authored by RJ Ascani's avatar RJ Ascani Committed by Commit Bot

[Fuchsia] Add OnKeyStatesChanged handler

This is the first change in a soft transition change in the
fuchsia.media.drm APIs. The LicenseSession OnKeysChanged event is being
renamed to OnKeyStatesChanged. This adds an identical handler to the
FuchsiaCdm::CdmSession. Implementations will send one or the other, but
not both events.

Bug: fxb/38522
Change-Id: I07b370f18f38b223c11a89bdc68fddc6955a2b21
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1879521Reviewed-by: default avatarYuchen Liu <yucliu@chromium.org>
Reviewed-by: default avatarDavid Dorwin <ddorwin@chromium.org>
Commit-Queue: RJ Ascani <rjascani@google.com>
Cr-Commit-Position: refs/heads/master@{#709288}
parent 6752857b
...@@ -126,6 +126,8 @@ class FuchsiaCdm::CdmSession { ...@@ -126,6 +126,8 @@ class FuchsiaCdm::CdmSession {
fit::bind_member(this, &CdmSession::OnLicenseMessageGenerated); fit::bind_member(this, &CdmSession::OnLicenseMessageGenerated);
session_.events().OnKeysChanged = session_.events().OnKeysChanged =
fit::bind_member(this, &CdmSession::OnKeysChanged); fit::bind_member(this, &CdmSession::OnKeysChanged);
session_.events().OnKeyStatesChanged =
fit::bind_member(this, &CdmSession::OnKeyStatesChanged);
session_.set_error_handler( session_.set_error_handler(
fit::bind_member(this, &CdmSession::OnSessionError)); fit::bind_member(this, &CdmSession::OnSessionError));
...@@ -183,6 +185,8 @@ class FuchsiaCdm::CdmSession { ...@@ -183,6 +185,8 @@ class FuchsiaCdm::CdmSession {
std::vector<uint8_t>(session_msg.begin(), session_msg.end())); std::vector<uint8_t>(session_msg.begin(), session_msg.end()));
} }
// TODO(fxb/38522): Remove this after Fuchsia CDMs have transitioned to
// sending OnKeyStatesChanged
void OnKeysChanged(std::vector<fuchsia::media::drm::KeyInfo> key_info) { void OnKeysChanged(std::vector<fuchsia::media::drm::KeyInfo> key_info) {
std::string new_key_id; std::string new_key_id;
bool has_additional_usable_key = false; bool has_additional_usable_key = false;
...@@ -210,6 +214,35 @@ class FuchsiaCdm::CdmSession { ...@@ -210,6 +214,35 @@ class FuchsiaCdm::CdmSession {
on_new_key_.Run(new_key_id); on_new_key_.Run(new_key_id);
} }
void OnKeyStatesChanged(
std::vector<fuchsia::media::drm::KeyState> key_states) {
std::string new_key_id;
bool has_additional_usable_key = false;
CdmKeysInfo keys_info;
for (const auto& key_state : key_states) {
if (!key_state.has_key_id() || !key_state.has_status()) {
continue;
}
CdmKeyInformation::KeyStatus status = ToCdmKeyStatus(key_state.status());
has_additional_usable_key |= (status == CdmKeyInformation::USABLE);
if (status == CdmKeyInformation::USABLE && new_key_id.empty()) {
// The |key_id| is passed to |on_new_key_| to workaround fxb/38253 in
// FuchsiaSecureStreamDecryptor. It needs just one valid |key_id|, so it
// doesn't matter if |key_info| contains more than one key.
// TODO(crbug.com/1012525): Remove the hack once fxb/38253 is resolved.
new_key_id.assign(key_state.key_id().begin(), key_state.key_id().end());
}
keys_info.emplace_back(
new CdmKeyInformation(key_state.key_id(), status, 0));
}
session_callbacks_->keys_change_cb.Run(
session_id_, has_additional_usable_key, std::move(keys_info));
if (has_additional_usable_key)
on_new_key_.Run(new_key_id);
}
void OnSessionError(zx_status_t status) { void OnSessionError(zx_status_t status) {
ZX_LOG(ERROR, status) << "Session error."; ZX_LOG(ERROR, status) << "Session error.";
if (result_cb_) if (result_cb_)
......
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