diff --git a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp index a1785254..7e7d11c7 100644 --- a/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src/WVDrmPlugin.cpp @@ -59,7 +59,7 @@ status_t WVDrmPlugin::openSession(Vector& sessionId) { &cdmSessionId); if (!isCdmResponseTypeSuccess(res)) { - return mapCdmResponseType(res); + return mapAndNotifyOfCdmResponseType(sessionId, res); } bool success = false; diff --git a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp index 6e5aa2f4..9c0922de 100644 --- a/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp +++ b/libwvdrmengine/mediadrm/test/WVDrmPlugin_test.cpp @@ -11,6 +11,7 @@ #include "gtest/gtest.h" #include "media/stagefright/foundation/ABase.h" #include "media/stagefright/foundation/AString.h" +#include "media/stagefright/MediaErrors.h" #include "wv_cdm_constants.h" #include "wv_cdm_types.h" #include "wv_content_decryption_module.h" @@ -1102,6 +1103,43 @@ TEST_F(WVDrmPluginTest, MarshalsEvents) { plugin.onEvent(cdmSessionId, LICENSE_RENEWAL_NEEDED_EVENT); } +TEST_F(WVDrmPluginTest, GeneratesProvisioningNeededEvent) { + StrictMock cdm; + StrictMock crypto; + WVDrmPlugin plugin(&cdm, &crypto); + + sp listener = new MockDrmPluginListener(); + + EXPECT_CALL(*listener, sendEvent(DrmPlugin::kDrmPluginEventProvisionRequired, 0, + Pointee(ElementsAreArray(sessionIdRaw, + kSessionIdSize)), + NULL)) + .Times(1); + + // Provide expected behavior to support session creation + EXPECT_CALL(cdm, OpenSession(StrEq("com.widevine"), _, _)) + .Times(AtLeast(1)) + .WillRepeatedly(DoAll(SetArgPointee<2>(cdmSessionId), + Return(wvcdm::NEED_PROVISIONING))); + + // Let gMock know these calls will happen but we aren't interested in them. + EXPECT_CALL(cdm, AttachEventListener(_, _)) + .Times(AtLeast(0)); + + EXPECT_CALL(cdm, DetachEventListener(_, _)) + .Times(AtLeast(0)); + + EXPECT_CALL(cdm, CloseSession(_)) + .Times(AtLeast(0)); + + status_t res = plugin.setListener(listener); + ASSERT_EQ(OK, res); + + res = plugin.openSession(sessionId); + ASSERT_EQ(ERROR_DRM_NOT_PROVISIONED, res); +} + + TEST_F(WVDrmPluginTest, ProvidesExpectedDefaultPropertiesToCdm) { StrictMock cdm; StrictMock crypto;