Merge "Check security-level during OpenSession." into sc-widevine-release
This commit is contained in:
committed by
Android (Google) Code Review
commit
0ec1993d39
@@ -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