diff --git a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp index 143496bc..9da6569e 100644 --- a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp @@ -333,13 +333,15 @@ Return WVDrmPlugin::openSession_1_1( status = openSessionCommon(sessionId); hidl_vec hSessionId = toHidlVec(sessionId); if (Status::OK == status) { + SecurityLevel currentSecurityLevel = SecurityLevel::UNKNOWN; Return hResult = getSecurityLevel(hSessionId, [&](Status status, SecurityLevel hSecurityLevel) { + currentSecurityLevel = hSecurityLevel; if (Status::OK != status || requestedLevel != hSecurityLevel) { ALOGE("Failed to open session with the requested security level=%d", requestedLevel); if (Status::OK != closeSession(hSessionId)) sessionId.clear(); } }); - if (!hResult.isOk()) { + if (!hResult.isOk() || (requestedLevel != currentSecurityLevel)) { status = Status::ERROR_DRM_INVALID_STATE; } } diff --git a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp index ac858f81..581e1ad9 100644 --- a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp +++ b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp @@ -402,7 +402,7 @@ TEST_F(WVDrmPluginTest, OpensSessions_1_1) { plugin.openSession_1_1(android::hardware::drm::V1_1::SecurityLevel::SW_SECURE_CRYPTO, [&](Status status, hidl_vec hSessionId) { - ASSERT_EQ(Status::OK, status); + ASSERT_EQ(Status::ERROR_DRM_INVALID_STATE, status); sessionId.clear(); sessionId.assign(hSessionId.data(), hSessionId.data() + hSessionId.size()); });