diff --git a/libwvdrmengine/cdm/core/src/cdm_engine.cpp b/libwvdrmengine/cdm/core/src/cdm_engine.cpp index 8027f0bb..49ba61b0 100644 --- a/libwvdrmengine/cdm/core/src/cdm_engine.cpp +++ b/libwvdrmengine/cdm/core/src/cdm_engine.cpp @@ -854,12 +854,20 @@ CdmResponseType CdmEngine::HandleProvisioningResponse( } bool CdmEngine::IsProvisioned(CdmSecurityLevel security_level) { - DeviceFiles handle(file_system_); - if (!handle.Init(security_level)) { - LOGE("CdmEngine::IsProvisioned: unable to initialize device files"); - return false; + // To validate whether the given security level is provisioned, we attempt to + // initialize a CdmSession. This verifies the existence of a certificate and + // attempts to load it. If this fails, initialization will return an error. + UsagePropertySet property_set; + property_set.set_security_level( + security_level == kSecurityLevelL3 ? kLevel3 : kLevelDefault); + + CdmSession session(file_system_, metrics_.AddSession()); + + CdmResponseType status = session.Init(&property_set); + if (NO_ERROR != status) { + LOGE("CdmEngine::IsProvisioned: CdmSession::Init returned %lu", status); } - return handle.HasCertificate(); + return status == NO_ERROR; } CdmResponseType CdmEngine::Unprovision(CdmSecurityLevel security_level) {