Fix System ID problem for devices with no keybox
Merge from Widevine repo of http://go/wvgerrit/139372 Revert workaround for falling back to L3 (Partially merged previously) Merge from Widevine repo of http://go/wvgerrit/139498 Guard against double initialize (Partially merged previously) Merge from Widevine repo of http://go/wvgerrit/139343 Use a placeholder ID for devices missing a system ID Merge from Widevine repo of http://go/wvgerrit/140934 Check security-level during OpenSession. Merge from Widevine repo of https://go/wvgerrit/141469 Make OTAKeyboxSupported handle the short buffer return code Bug: 187646550 Bug: 206670307 Bug: 206570220 Bug: 205896558 Bug: 205041153 Test: Manual test on flame Change-Id: I71f5faf6b611337b82d8b6179251f6b0224780e6
This commit is contained in:
committed by
Jeff Tinker
parent
8aabf20134
commit
f6d682b182
@@ -121,41 +121,50 @@ CdmResponseType CdmEngine::OpenSession(const CdmKeySystem& key_system,
|
||||
}
|
||||
LOGD("forced_session_id = %s", IdPtrToString(forced_session_id));
|
||||
}
|
||||
|
||||
SecurityLevel requested_security_level = kLevelDefault;
|
||||
if (property_set &&
|
||||
property_set->security_level() == QUERY_VALUE_SECURITY_LEVEL_L3) {
|
||||
requested_security_level = kLevel3;
|
||||
}
|
||||
|
||||
bool forced_level3 = false;
|
||||
if (OkpCheck()) {
|
||||
bool okp_provisioned = false;
|
||||
bool fallback = false;
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||
if (!okp_provisioner_) {
|
||||
// Very rare race condition. Possible if two calls to OpenSession
|
||||
// occur the same time. Cleanup would have been performed.
|
||||
if (okp_fallback_) {
|
||||
fallback = true;
|
||||
} else {
|
||||
if (requested_security_level == kLevelDefault) {
|
||||
if (OkpCheck()) {
|
||||
bool okp_provisioned = false;
|
||||
bool fallback = false;
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||
if (!okp_provisioner_) {
|
||||
// Very rare race condition. Possible if two calls to OpenSession
|
||||
// occur the same time. Cleanup would have been performed.
|
||||
if (okp_fallback_) {
|
||||
fallback = true;
|
||||
} else {
|
||||
okp_provisioned = true;
|
||||
}
|
||||
} else if (okp_provisioner_->IsProvisioned()) {
|
||||
okp_provisioned = true;
|
||||
} else if (okp_provisioner_->IsInFallbackMode()) {
|
||||
fallback = true;
|
||||
}
|
||||
} else if (okp_provisioner_->IsProvisioned()) {
|
||||
okp_provisioned = true;
|
||||
} else if (okp_provisioner_->IsInFallbackMode()) {
|
||||
fallback = true;
|
||||
}
|
||||
}
|
||||
if (okp_provisioned) {
|
||||
// OKP not required, engine may assume normal operations.
|
||||
OkpCleanUp();
|
||||
} else if (fallback) {
|
||||
LOGD("Engine is falling back to L3");
|
||||
OkpTriggerFallback();
|
||||
forced_level3 = true;
|
||||
if (okp_provisioned) {
|
||||
// OKP not required, engine may assume normal operations.
|
||||
OkpCleanUp();
|
||||
} else if (fallback) {
|
||||
LOGD("Engine is falling back to L3");
|
||||
OkpTriggerFallback();
|
||||
forced_level3 = true;
|
||||
} else {
|
||||
// OKP is required.
|
||||
return NEED_PROVISIONING;
|
||||
}
|
||||
} else {
|
||||
// OKP is required.
|
||||
return NEED_PROVISIONING;
|
||||
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||
// |okp_fallback_| would have been set previously if required.
|
||||
if (okp_fallback_) forced_level3 = true;
|
||||
}
|
||||
} else {
|
||||
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||
// |okp_fallback_| would have been set previously if required.
|
||||
if (okp_fallback_) forced_level3 = true;
|
||||
}
|
||||
|
||||
CloseExpiredReleaseSessions();
|
||||
|
||||
Reference in New Issue
Block a user