Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68b3d9f4 authored by Edwin Wong's avatar Edwin Wong
Browse files

Pass application packagename to drm plugin.

Pass application package name to createPlugin and createDrmPlugin.
The application packagename will be used as part of a unique
identifier for drm plugin.

Test: Play Movies.

Test: ANDROID_BUILD_TOP= ./android-gts/tools/gts-tradefed run gts -m
GtsMediaTestCases --test
com.google.android.media.gts.WidevineH264PlaybackTests#testL1With480P60

Verify the application's packagename is reachable in the drm plugin's
debug log.

bug: 27101531

Change-Id: I84fb09b591a7af63f6e20004e910112a4ce6ebac
parent 9b088162
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ LOCAL_SRC_FILES:= \
    IDrmClient.cpp \
    IMediaDrmService.cpp \
    SharedLibrary.cpp
ifeq ($(ENABLE_TREBLE_DRM), true)
ifeq ($(ENABLE_TREBLE), true)
LOCAL_SRC_FILES += \
    DrmHal.cpp \
    CryptoHal.cpp
@@ -31,7 +31,7 @@ LOCAL_SHARED_LIBRARIES := \
    libmediautils \
    libstagefright_foundation \
    libutils
ifeq ($(ENABLE_TREBLE_DRM), true)
ifeq ($(ENABLE_TREBLE), true)
LOCAL_SHARED_LIBRARIES += \
    android.hidl.base@1.0 \
    android.hardware.drm@1.0 \
+8 −2
Original line number Diff line number Diff line
@@ -303,7 +303,8 @@ bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeTyp
    return true;
}

status_t Drm::createPlugin(const uint8_t uuid[16]) {
status_t Drm::createPlugin(const uint8_t uuid[16],
                           const String8& /* appPackageName */) {
    Mutex::Autolock autoLock(mLock);

    if (mPlugin != NULL) {
@@ -319,7 +320,12 @@ status_t Drm::createPlugin(const uint8_t uuid[16]) {
    }

    status_t result = mFactory->createDrmPlugin(uuid, &mPlugin);
    if (mPlugin) {
        mPlugin->setListener(this);
    } else {
        ALOGE("Failed to create plugin");
        return UNEXPECTED_NULL;
    }
    return result;
}

+24 −32
Original line number Diff line number Diff line
@@ -205,13 +205,14 @@ sp<IDrmFactory> DrmHal::makeDrmFactory() {
    return factory;
}

sp<IDrmPlugin> DrmHal::makeDrmPlugin(const uint8_t uuid[16]) {
sp<IDrmPlugin> DrmHal::makeDrmPlugin(const uint8_t uuid[16],
        const String8& appPackageName) {
    if (mFactory == NULL){
        return NULL;
    }

    sp<IDrmPlugin> plugin;
    Return<void> hResult = mFactory->createPlugin(uuid,
    Return<void> hResult = mFactory->createPlugin(uuid, appPackageName.string(),
            [&](Status status, const sp<IDrmPlugin>& hPlugin) {
      if (status != Status::OK) {
        ALOGD("Failed to make drm plugin");
@@ -350,10 +351,11 @@ bool DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mime
    return result;
}

status_t DrmHal::createPlugin(const uint8_t uuid[16]) {
status_t DrmHal::createPlugin(const uint8_t uuid[16],
        const String8& appPackageName) {
    Mutex::Autolock autoLock(mLock);

    mPlugin = makeDrmPlugin(uuid);
    mPlugin = makeDrmPlugin(uuid, appPackageName);

    if (mPlugin == NULL) {
        mInitCheck = ERROR_UNSUPPORTED;
@@ -597,8 +599,7 @@ status_t DrmHal::getProvisionRequest(String8 const &certType,
}

status_t DrmHal::provideProvisionResponse(Vector<uint8_t> const &response,
                                       Vector<uint8_t> &certificate,
                                       Vector<uint8_t> &wrappedKey) {
        Vector<uint8_t> &certificate, Vector<uint8_t> &wrappedKey) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -783,10 +784,8 @@ status_t DrmHal::setMacAlgorithm(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::encrypt(Vector<uint8_t> const &sessionId,
                      Vector<uint8_t> const &keyId,
                      Vector<uint8_t> const &input,
                      Vector<uint8_t> const &iv,
                      Vector<uint8_t> &output) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &input,
        Vector<uint8_t> const &iv, Vector<uint8_t> &output) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -811,10 +810,8 @@ status_t DrmHal::encrypt(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::decrypt(Vector<uint8_t> const &sessionId,
                      Vector<uint8_t> const &keyId,
                      Vector<uint8_t> const &input,
                      Vector<uint8_t> const &iv,
                      Vector<uint8_t> &output) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &input,
        Vector<uint8_t> const &iv, Vector<uint8_t> &output) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -839,8 +836,7 @@ status_t DrmHal::decrypt(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::sign(Vector<uint8_t> const &sessionId,
                   Vector<uint8_t> const &keyId,
                   Vector<uint8_t> const &message,
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &message,
        Vector<uint8_t> &signature) {
    Mutex::Autolock autoLock(mLock);

@@ -866,10 +862,8 @@ status_t DrmHal::sign(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::verify(Vector<uint8_t> const &sessionId,
                     Vector<uint8_t> const &keyId,
                     Vector<uint8_t> const &message,
                     Vector<uint8_t> const &signature,
                     bool &match) {
        Vector<uint8_t> const &keyId, Vector<uint8_t> const &message,
        Vector<uint8_t> const &signature, bool &match) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
@@ -896,10 +890,8 @@ status_t DrmHal::verify(Vector<uint8_t> const &sessionId,
}

status_t DrmHal::signRSA(Vector<uint8_t> const &sessionId,
                      String8 const &algorithm,
                      Vector<uint8_t> const &message,
                      Vector<uint8_t> const &wrappedKey,
                      Vector<uint8_t> &signature) {
        String8 const &algorithm, Vector<uint8_t> const &message,
        Vector<uint8_t> const &wrappedKey, Vector<uint8_t> &signature) {
    Mutex::Autolock autoLock(mLock);

    if (mInitCheck != OK) {
+6 −4
Original line number Diff line number Diff line
@@ -88,13 +88,15 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32() != 0;
    }

    virtual status_t createPlugin(const uint8_t uuid[16]) {
    virtual status_t createPlugin(const uint8_t uuid[16],
                                  const String8& appPackageName) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
        data.write(uuid, 16);

        data.writeString8(appPackageName);
        status_t status = remote()->transact(CREATE_PLUGIN, data, &reply);
        if (status != OK) {
            ALOGE("createPlugin: binder call failed: %d", status);
            return status;
        }

@@ -585,7 +587,6 @@ status_t BnDrm::onTransact(
            data.read(uuid, sizeof(uuid));
            String8 mimeType = data.readString8();
            reply->writeInt32(isCryptoSchemeSupported(uuid, mimeType));

            return OK;
        }

@@ -594,7 +595,8 @@ status_t BnDrm::onTransact(
            CHECK_INTERFACE(IDrm, data, reply);
            uint8_t uuid[16];
            data.read(uuid, sizeof(uuid));
            reply->writeInt32(createPlugin(uuid));
            String8 appPackageName = data.readString8();
            reply->writeInt32(createPlugin(uuid, appPackageName));
            return OK;
        }

+2 −1
Original line number Diff line number Diff line
@@ -44,7 +44,8 @@ bool DrmFactory::isContentTypeSupported(const android::String8 &type) {
}

android::status_t DrmFactory::createDrmPlugin(
        const uint8_t uuid[16], android::DrmPlugin** plugin) {
        const uint8_t uuid[16],
        android::DrmPlugin** plugin) {
    if (!isCryptoSchemeSupported(uuid)) {
        *plugin = NULL;
        return android::BAD_VALUE;
Loading