Fix getKeyRequest_1_1 using 1.0 callback.

getKeyRequest_1_1 was using 1.0 callback.

This fix creates a common function for both 1.0 and 1.1
getKeyRequest to call. The function now calls the version
appropriate callback to return key request data, key type
and default url.

Test: CTS ClearKeySystemTest#testClearKeyPlaybackCenc
Test: CTS ClearKeySystemTest#testGetProperties
Test: CTS ClearKeySystemTest#testSetProperties
Test: Verify getKeyRequest_1_1 is called

bug: 73085826
Change-Id: Id70a92862473540f5a4eb815892a69dfe1601b92
gugelfrei
Edwin Wong 6 years ago
parent a9eaa7cdb4
commit 3ee1ea2659

@ -110,38 +110,57 @@ Return<Status> DrmPlugin::closeSession(const hidl_vec<uint8_t>& sessionId) {
return Status::ERROR_DRM_SESSION_NOT_OPENED;
}
Return<void> DrmPlugin::getKeyRequest(
const hidl_vec<uint8_t>& scope,
Status DrmPlugin::getKeyRequestCommon(const hidl_vec<uint8_t>& scope,
const hidl_vec<uint8_t>& initData,
const hidl_string& mimeType,
KeyType keyType,
const hidl_vec<KeyValue>& optionalParameters,
getKeyRequest_cb _hidl_cb) {
UNUSED(optionalParameters);
std::vector<uint8_t> *request,
KeyRequestType *keyRequestType,
std::string *defaultUrl) {
UNUSED(optionalParameters);
*defaultUrl = "";
*keyRequestType = KeyRequestType::UNKNOWN;
*request = std::vector<uint8_t>();
if (scope.size() == 0) {
// Returns empty keyRequest, unknown keyType and empty defaultUrl
_hidl_cb(Status::BAD_VALUE, hidl_vec<uint8_t>(),
KeyRequestType::UNKNOWN, "");
return Void();
return Status::BAD_VALUE;
}
if (keyType != KeyType::STREAMING) {
_hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, hidl_vec<uint8_t>(),
KeyRequestType::UNKNOWN, "");
return Void();
return Status::ERROR_DRM_CANNOT_HANDLE;
}
sp<Session> session = mSessionLibrary->findSession(toVector(scope));
if (!session.get()) {
_hidl_cb(Status::ERROR_DRM_SESSION_NOT_OPENED, hidl_vec<uint8_t>(),
KeyRequestType::UNKNOWN, "");
return Void();
return Status::ERROR_DRM_SESSION_NOT_OPENED;
}
Status status = session->getKeyRequest(initData, mimeType, request);
*keyRequestType = KeyRequestType::INITIAL;
return status;
}
Return<void> DrmPlugin::getKeyRequest(
const hidl_vec<uint8_t>& scope,
const hidl_vec<uint8_t>& initData,
const hidl_string& mimeType,
KeyType keyType,
const hidl_vec<KeyValue>& optionalParameters,
getKeyRequest_cb _hidl_cb) {
UNUSED(optionalParameters);
KeyRequestType keyRequestType = KeyRequestType::UNKNOWN;
std::string defaultUrl("");
std::vector<uint8_t> request;
Status status = session->getKeyRequest(initData, mimeType, &request);
_hidl_cb(status, toHidlVec(request), KeyRequestType::INITIAL, "");
Status status = getKeyRequestCommon(
scope, initData, mimeType, keyType, optionalParameters,
&request, &keyRequestType, &defaultUrl);
_hidl_cb(status, toHidlVec(request),
static_cast<drm::V1_0::KeyRequestType>(keyRequestType),
hidl_string(defaultUrl));
return Void();
}
@ -152,23 +171,16 @@ Return<void> DrmPlugin::getKeyRequest_1_1(
KeyType keyType,
const hidl_vec<KeyValue>& optionalParameters,
getKeyRequest_1_1_cb _hidl_cb) {
hidl_string defaultUrl;
hidl_vec<uint8_t> request;
::android::hardware::drm::V1_1::KeyRequestType requestType =
static_cast<::android::hardware::drm::V1_1::KeyRequestType>(KeyRequestType::UNKNOWN);
Status status = Status::OK;
defaultUrl.clear();
getKeyRequest(scope, initData, mimeType, keyType, optionalParameters,
[&](Status statusCode, const hidl_vec<uint8_t>& hResult,
KeyRequestType hKeyRequestType,
const hidl_string& hDefaultUrl) {
defaultUrl = hDefaultUrl;
request = hResult;
requestType = static_cast<::android::hardware::drm::V1_1::KeyRequestType>(hKeyRequestType);
status = statusCode;
});
_hidl_cb(status, request, requestType, defaultUrl);
UNUSED(optionalParameters);
KeyRequestType keyRequestType = KeyRequestType::UNKNOWN;
std::string defaultUrl("");
std::vector<uint8_t> request;
Status status = getKeyRequestCommon(
scope, initData, mimeType, keyType, optionalParameters,
&request, &keyRequestType, &defaultUrl);
_hidl_cb(status, toHidlVec(request), keyRequestType, hidl_string(defaultUrl));
return Void();
}

@ -31,7 +31,6 @@ namespace clearkey {
using ::android::hardware::drm::V1_0::EventType;
using ::android::hardware::drm::V1_0::IDrmPluginListener;
using ::android::hardware::drm::V1_0::KeyRequestType;
using ::android::hardware::drm::V1_0::KeyStatus;
using ::android::hardware::drm::V1_0::KeyType;
using ::android::hardware::drm::V1_0::KeyValue;
@ -39,6 +38,8 @@ using ::android::hardware::drm::V1_0::SecureStop;
using ::android::hardware::drm::V1_0::SecureStopId;
using ::android::hardware::drm::V1_0::Status;
using ::android::hardware::drm::V1_1::DrmMetricGroup;
using ::android::hardware::drm::V1_1::IDrmPlugin;
using ::android::hardware::drm::V1_1::KeyRequestType;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
@ -46,7 +47,6 @@ using ::android::hardware::Return;
using ::android::hardware::Void;
using ::android::sp;
struct DrmPlugin : public IDrmPlugin {
explicit DrmPlugin(SessionLibrary* sessionLibrary);
@ -335,6 +335,15 @@ private:
Return<Status> setSecurityLevel(const hidl_vec<uint8_t>& sessionId,
SecurityLevel level);
Status getKeyRequestCommon(const hidl_vec<uint8_t>& scope,
const hidl_vec<uint8_t>& initData,
const hidl_string& mimeType,
KeyType keyType,
const hidl_vec<KeyValue>& optionalParameters,
std::vector<uint8_t> *request,
KeyRequestType *getKeyRequestType,
std::string *defaultUrl);
std::vector<KeyValue> mPlayPolicy;
std::map<std::string, std::string> mStringProperties;
std::map<std::string, std::vector<uint8_t> > mByteArrayProperties;

Loading…
Cancel
Save