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

Commit 1ff496a7 authored by Gloria Wang's avatar Gloria Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix for bug 4371230. - Generate unique ID for each DrmManagerClient in...

Merge "Fix for bug 4371230. - Generate unique ID for each DrmManagerClient in native side - Fix the bug where multiple clients could use the same ID - Return the correct unique ID back to Java - Add a flag in the unique ID to separate native client and Java client"
parents e3f5edf9 a17d454f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -110,11 +110,11 @@ static void clearDecryptHandle(DecryptHandle* handle) {
    handle->extendedData.clear();
}

int BpDrmManagerService::addUniqueId(int uniqueId) {
int BpDrmManagerService::addUniqueId(bool isNative) {
    LOGV("add uniqueid");
    Parcel data, reply;
    data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor());
    data.writeInt32(uniqueId);
    data.writeInt32(isNative);
    remote()->transact(ADD_UNIQUEID, data, &reply);
    return reply.readInt32();
}
+32 −22
Original line number Diff line number Diff line
@@ -49,16 +49,24 @@ DrmManager::~DrmManager() {

}

int DrmManager::addUniqueId(int uniqueId) {
int DrmManager::addUniqueId(bool isNative) {
    Mutex::Autolock _l(mLock);
    if (0 == uniqueId) {

    int temp = 0;
    bool foundUniqueId = false;
    const int size = mUniqueIdVector.size();
    const int uniqueIdRange = 0xfff;
    int maxLoopTimes = (uniqueIdRange - 1) / 2;
    srand(time(NULL));

    while (!foundUniqueId) {
            const int size = mUniqueIdVector.size();
            temp = rand() % 100;
        temp = rand() & uniqueIdRange;

        if (isNative) {
            // set a flag to differentiate DrmManagerClient
            // created from native side and java side
            temp |= 0x1000;
        }

        int index = 0;
        for (; index < size; ++index) {
@@ -70,11 +78,13 @@ int DrmManager::addUniqueId(int uniqueId) {
        if (index == size) {
            foundUniqueId = true;
        }

        maxLoopTimes --;
        LOG_FATAL_IF(maxLoopTimes <= 0, "cannot find an unique ID for this session");
    }
        uniqueId = temp;
    }
    mUniqueIdVector.push(uniqueId);
    return uniqueId;

    mUniqueIdVector.push(temp);
    return temp;
}

void DrmManager::removeUniqueId(int uniqueId) {
+2 −2
Original line number Diff line number Diff line
@@ -78,8 +78,8 @@ DrmManagerService::~DrmManagerService() {
    delete mDrmManager; mDrmManager = NULL;
}

int DrmManagerService::addUniqueId(int uniqueId) {
    return mDrmManager->addUniqueId(uniqueId);
int DrmManagerService::addUniqueId(bool isNative) {
    return mDrmManager->addUniqueId(isNative);
}

void DrmManagerService::removeUniqueId(int uniqueId) {
+2 −4
Original line number Diff line number Diff line
@@ -248,9 +248,7 @@ public class DrmManagerClient {
        mEventHandler = new EventHandler(eventThread.getLooper());

        // save the unique id
        mUniqueId = hashCode();

        _initialize(mUniqueId, new WeakReference<DrmManagerClient>(this));
        mUniqueId = _initialize(new WeakReference<DrmManagerClient>(this));
    }

    protected void finalize() {
@@ -794,7 +792,7 @@ public class DrmManagerClient {
    }

    // private native interfaces
    private native void _initialize(int uniqueId, Object weak_this);
    private native int _initialize(Object weak_this);

    private native void _finalize(int uniqueId);

+7 −4
Original line number Diff line number Diff line
@@ -224,11 +224,12 @@ static sp<DrmManagerClientImpl> getDrmManagerClientImpl(JNIEnv* env, jobject thi
    return sp<DrmManagerClientImpl>(client);
}

static void android_drm_DrmManagerClient_initialize(
        JNIEnv* env, jobject thiz, jint uniqueId, jobject weak_thiz) {
static jint android_drm_DrmManagerClient_initialize(
        JNIEnv* env, jobject thiz, jobject weak_thiz) {
    LOGV("initialize - Enter");

    sp<DrmManagerClientImpl> drmManager = DrmManagerClientImpl::create(&uniqueId);
    int uniqueId = 0;
    sp<DrmManagerClientImpl> drmManager = DrmManagerClientImpl::create(&uniqueId, false);
    drmManager->addClient(uniqueId);

    // Set the listener to DrmManager
@@ -237,6 +238,8 @@ static void android_drm_DrmManagerClient_initialize(

    setDrmManagerClientImpl(env, thiz, drmManager);
    LOGV("initialize - Exit");

    return uniqueId;
}

static void android_drm_DrmManagerClient_finalize(JNIEnv* env, jobject thiz, jint uniqueId) {
@@ -711,7 +714,7 @@ static jobject android_drm_DrmManagerClient_closeConvertSession(

static JNINativeMethod nativeMethods[] = {

    {"_initialize", "(ILjava/lang/Object;)V",
    {"_initialize", "(Ljava/lang/Object;)I",
                                    (void*)android_drm_DrmManagerClient_initialize},

    {"_finalize", "(I)V",
Loading