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

Commit a3e4fe3f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Throw exception on mismatched system vs vendor"

parents f3f261a7 db3fa5f9
Loading
Loading
Loading
Loading
+39 −33
Original line number Diff line number Diff line
@@ -586,51 +586,57 @@ Return<void> DrmHal::sendSessionLostState(
    return Void();
}

bool DrmHal::matchMimeTypeAndSecurityLevel(sp<IDrmFactory> &factory,
status_t DrmHal::matchMimeTypeAndSecurityLevel(const sp<IDrmFactory> &factory,
                                               const uint8_t uuid[16],
                                               const String8 &mimeType,
                                           DrmPlugin::SecurityLevel level) {
    if (mimeType == "") {
        return true;
    } else if (!factory->isContentTypeSupported(mimeType.string())) {
        return false;
    }
                                               DrmPlugin::SecurityLevel level,
                                               bool *isSupported) {
    *isSupported = false;

    // handle default value cases
    if (level == DrmPlugin::kSecurityLevelUnknown) {
        return true;
        if (mimeType == "") {
            // isCryptoSchemeSupported(uuid)
            *isSupported = true;
        } else {
            // isCryptoSchemeSupported(uuid, mimeType)
            *isSupported = factory->isContentTypeSupported(mimeType.string());
        }
        return OK;
    } else if (mimeType == "") {
        return BAD_VALUE;
    }

    sp<drm::V1_2::IDrmFactory> factoryV1_2 = drm::V1_2::IDrmFactory::castFrom(factory);
    if (factoryV1_2 == NULL) {
            return true;
        } else if (factoryV1_2->isCryptoSchemeSupported_1_2(uuid,
                        mimeType.string(), toHidlSecurityLevel(level))) {
            return true;
        }
        return ERROR_UNSUPPORTED;
    } else {
        *isSupported = factoryV1_2->isCryptoSchemeSupported_1_2(uuid,
                mimeType.string(), toHidlSecurityLevel(level));
        return OK;
    }
    return false;
}

bool DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16],
status_t DrmHal::isCryptoSchemeSupported(const uint8_t uuid[16],
                                         const String8 &mimeType,
                                     DrmPlugin::SecurityLevel level) {
                                         DrmPlugin::SecurityLevel level,
                                         bool *isSupported) {
    Mutex::Autolock autoLock(mLock);

    for (size_t i = 0; i < mFactories.size(); i++) {
        sp<IDrmFactory> factory = mFactories[i];
        if (factory->isCryptoSchemeSupported(uuid)) {
            if (matchMimeTypeAndSecurityLevel(factory, uuid, mimeType, level)) {
                return true;
            }
    *isSupported = false;
    for (ssize_t i = mFactories.size() - 1; i >= 0; i--) {
        if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
            return matchMimeTypeAndSecurityLevel(mFactories[i],
                    uuid, mimeType, level, isSupported);
        }
    }
    return false;
    return OK;
}

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

    for (size_t i = mFactories.size() - 1; i >= 0; i--) {
    for (ssize_t i = mFactories.size() - 1; i >= 0; i--) {
        if (mFactories[i]->isCryptoSchemeSupported(uuid)) {
            auto plugin = makeDrmPlugin(mFactories[i], uuid, appPackageName);
            if (plugin != NULL) {
@@ -1213,7 +1219,7 @@ status_t DrmHal::getOfflineLicenseKeySetIds(List<Vector<uint8_t>> &keySetIds) co
    }

    if (mPluginV1_2 == NULL) {
        return ERROR_DRM_CANNOT_HANDLE;
        return ERROR_UNSUPPORTED;
    }

    status_t err = UNKNOWN_ERROR;
@@ -1238,7 +1244,7 @@ status_t DrmHal::removeOfflineLicense(Vector<uint8_t> const &keySetId) {
    }

    if (mPluginV1_2 == NULL) {
        return ERROR_DRM_CANNOT_HANDLE;
        return ERROR_UNSUPPORTED;
    }

    Return<Status> status = mPluginV1_2->removeOfflineLicense(toHidlVec(keySetId));
@@ -1254,7 +1260,7 @@ status_t DrmHal::getOfflineLicenseState(Vector<uint8_t> const &keySetId,
    }

    if (mPluginV1_2 == NULL) {
        return ERROR_DRM_CANNOT_HANDLE;
        return ERROR_UNSUPPORTED;
    }
    *licenseState = DrmPlugin::kOfflineLicenseStateUnknown;

+9 −5
Original line number Diff line number Diff line
@@ -83,8 +83,8 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32();
    }

    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType,
            DrmPlugin::SecurityLevel level) {
    virtual status_t isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType,
            DrmPlugin::SecurityLevel level, bool *isSupported) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
        data.write(uuid, 16);
@@ -94,10 +94,11 @@ struct BpDrm : public BpInterface<IDrm> {
        status_t status = remote()->transact(IS_CRYPTO_SUPPORTED, data, &reply);
        if (status != OK) {
            ALOGE("isCryptoSchemeSupported: binder call failed: %d", status);
            return false;
            return status;
        }
        *isSupported = static_cast<bool>(reply.readInt32());

        return reply.readInt32() != 0;
        return reply.readInt32();
    }

    virtual status_t createPlugin(const uint8_t uuid[16],
@@ -773,7 +774,10 @@ status_t BnDrm::onTransact(
            String8 mimeType = data.readString8();
            DrmPlugin::SecurityLevel level =
                    static_cast<DrmPlugin::SecurityLevel>(data.readInt32());
            reply->writeInt32(isCryptoSchemeSupported(uuid, mimeType, level));
            bool isSupported = false;
            status_t result = isCryptoSchemeSupported(uuid, mimeType, level, &isSupported);
            reply->writeInt32(isSupported);
            reply->writeInt32(result);
            return OK;
        }

+9 −7
Original line number Diff line number Diff line
@@ -63,9 +63,10 @@ struct DrmHal : public BnDrm,

    virtual status_t initCheck() const;

    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16],
    virtual status_t isCryptoSchemeSupported(const uint8_t uuid[16],
                                             const String8& mimeType,
                                         DrmPlugin::SecurityLevel level);
                                             DrmPlugin::SecurityLevel level,
                                             bool *isSupported);

    virtual status_t createPlugin(const uint8_t uuid[16],
                                  const String8 &appPackageName);
@@ -226,10 +227,11 @@ private:
    status_t getPropertyStringInternal(String8 const &name, String8 &value) const;
    status_t getPropertyByteArrayInternal(String8 const &name,
                                          Vector<uint8_t> &value) const;
    bool matchMimeTypeAndSecurityLevel(sp<IDrmFactory> &factory,
    status_t matchMimeTypeAndSecurityLevel(const sp<IDrmFactory> &factory,
                                           const uint8_t uuid[16],
                                           const String8 &mimeType,
                                       DrmPlugin::SecurityLevel level);
                                           DrmPlugin::SecurityLevel level,
                                           bool *isSupported);

    DISALLOW_EVIL_CONSTRUCTORS(DrmHal);
};
+4 −3
Original line number Diff line number Diff line
@@ -34,9 +34,10 @@ struct IDrm : public IInterface {

    virtual status_t initCheck() const = 0;

    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16],
    virtual status_t isCryptoSchemeSupported(const uint8_t uuid[16],
                                             const String8 &mimeType,
                                         DrmPlugin::SecurityLevel securityLevel) = 0;
                                             DrmPlugin::SecurityLevel securityLevel,
                                             bool *result) = 0;

    virtual status_t createPlugin(const uint8_t uuid[16],
                                  const String8 &appPackageName) = 0;
+5 −2
Original line number Diff line number Diff line
@@ -159,10 +159,13 @@ Vector<DrmUUID> NuPlayerDrm::getSupportedDrmSchemes(const void *pssh, size_t pss
    if (drm != NULL) {
        for (size_t i = 0; i < psshDRMs.size(); i++) {
            DrmUUID uuid = psshDRMs[i];
            if (drm->isCryptoSchemeSupported(uuid.ptr(), String8(),
                            DrmPlugin::kSecurityLevelUnknown))
            bool isSupported = false;
            status = drm->isCryptoSchemeSupported(uuid.ptr(), String8(),
                    DrmPlugin::kSecurityLevelUnknown, &isSupported);
            if (status == OK && isSupported) {
                supportedDRMs.add(uuid);
            }
        }

        drm.clear();
    } else {
Loading