libmediadrm: handle hidl txn failures

Bug: 164486735
Test: MediaDrmTest
Change-Id: I34c48b93b5fc3be0aa6edaaed89fc5e75dd61212
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index 253a1fa..40d1e0c 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -888,7 +888,7 @@
     Return<void> hResult;
 
     if (mPluginV1_2 != NULL) {
-        Return<void> hResult = mPluginV1_2->getProvisionRequest_1_2(
+        hResult = mPluginV1_2->getProvisionRequest_1_2(
                 toHidlString(certType), toHidlString(certAuthority),
                 [&](Status_V1_2 status, const hidl_vec<uint8_t>& hRequest,
                         const hidl_string& hDefaultUrl) {
@@ -900,7 +900,7 @@
                 }
             );
     } else {
-        Return<void> hResult = mPlugin->getProvisionRequest(
+        hResult = mPlugin->getProvisionRequest(
                 toHidlString(certType), toHidlString(certAuthority),
                 [&](Status status, const hidl_vec<uint8_t>& hRequest,
                         const hidl_string& hDefaultUrl) {
@@ -1522,22 +1522,38 @@
     return metricsString;
 }
 
-bool DrmHal::requiresSecureDecoder(const char *mime) const {
+status_t DrmHal::requiresSecureDecoder(const char *mime, bool *required) const {
     Mutex::Autolock autoLock(mLock);
     if (mPluginV1_4 == NULL) {
         return false;
     }
-    return mPluginV1_4->requiresSecureDecoderDefault(hidl_string(mime));
+    auto hResult = mPluginV1_4->requiresSecureDecoderDefault(hidl_string(mime));
+    if (!hResult.isOk()) {
+        DrmUtils::LOG2BE("requiresSecureDecoder txn failed: %s", hResult.description().c_str());
+        return DEAD_OBJECT;
+    }
+    if (required) {
+        *required = hResult;
+    }
+    return OK;
 }
 
-bool DrmHal::requiresSecureDecoder(const char *mime,
-        DrmPlugin::SecurityLevel securityLevel) const {
+status_t DrmHal::requiresSecureDecoder(const char *mime, DrmPlugin::SecurityLevel securityLevel,
+                                       bool *required) const {
     Mutex::Autolock autoLock(mLock);
     if (mPluginV1_4 == NULL) {
         return false;
     }
     auto hLevel = toHidlSecurityLevel(securityLevel);
-    return mPluginV1_4->requiresSecureDecoder(hidl_string(mime), hLevel);
+    auto hResult = mPluginV1_4->requiresSecureDecoder(hidl_string(mime), hLevel);
+    if (!hResult.isOk()) {
+        DrmUtils::LOG2BE("requiresSecureDecoder txn failed: %s", hResult.description().c_str());
+        return DEAD_OBJECT;
+    }
+    if (required) {
+        *required = hResult;
+    }
+    return OK;
 }
 
 status_t DrmHal::setPlaybackId(Vector<uint8_t> const &sessionId, const char *playbackId) {
@@ -1545,10 +1561,8 @@
     if (mPluginV1_4 == NULL) {
         return ERROR_UNSUPPORTED;
     }
-    drm::V1_0::Status err = mPluginV1_4->setPlaybackId(
-            toHidlVec(sessionId),
-            hidl_string(playbackId));
-    return toStatusT(err);
+    auto err = mPluginV1_4->setPlaybackId(toHidlVec(sessionId), hidl_string(playbackId));
+    return err.isOk() ? toStatusT(err) : DEAD_OBJECT;
 }
 
 status_t DrmHal::getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const {