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));
|
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;
|
bool forced_level3 = false;
|
||||||
if (OkpCheck()) {
|
if (requested_security_level == kLevelDefault) {
|
||||||
bool okp_provisioned = false;
|
if (OkpCheck()) {
|
||||||
bool fallback = false;
|
bool okp_provisioned = false;
|
||||||
{
|
bool fallback = false;
|
||||||
std::unique_lock<std::mutex> lock(okp_mutex_);
|
{
|
||||||
if (!okp_provisioner_) {
|
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||||
// Very rare race condition. Possible if two calls to OpenSession
|
if (!okp_provisioner_) {
|
||||||
// occur the same time. Cleanup would have been performed.
|
// Very rare race condition. Possible if two calls to OpenSession
|
||||||
if (okp_fallback_) {
|
// occur the same time. Cleanup would have been performed.
|
||||||
fallback = true;
|
if (okp_fallback_) {
|
||||||
} else {
|
fallback = true;
|
||||||
|
} else {
|
||||||
|
okp_provisioned = true;
|
||||||
|
}
|
||||||
|
} else if (okp_provisioner_->IsProvisioned()) {
|
||||||
okp_provisioned = true;
|
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) {
|
||||||
if (okp_provisioned) {
|
// OKP not required, engine may assume normal operations.
|
||||||
// OKP not required, engine may assume normal operations.
|
OkpCleanUp();
|
||||||
OkpCleanUp();
|
} else if (fallback) {
|
||||||
} else if (fallback) {
|
LOGD("Engine is falling back to L3");
|
||||||
LOGD("Engine is falling back to L3");
|
OkpTriggerFallback();
|
||||||
OkpTriggerFallback();
|
forced_level3 = true;
|
||||||
forced_level3 = true;
|
} else {
|
||||||
|
// OKP is required.
|
||||||
|
return NEED_PROVISIONING;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// OKP is required.
|
std::unique_lock<std::mutex> lock(okp_mutex_);
|
||||||
return NEED_PROVISIONING;
|
// |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();
|
CloseExpiredReleaseSessions();
|
||||||
|
|||||||
Reference in New Issue
Block a user