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

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

Merge "Bug fixes of DRM framework."

parents d4a9bb56 5c96c65f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@

using namespace android;

Vector<int> DrmManager::mUniqueIdVector;
const String8 DrmManager::EMPTY_STRING("");

DrmManager::DrmManager() :
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import java.util.Iterator;
 *
 */
public class DrmInfoRequest {
    // Changes in following constants should be in sync with DrmInfoRequest.cpp
    // Changes in following constants should be in sync with DrmInfoRequest.h
    /**
     * Constants defines the type of {@link DrmInfoRequest}
     */
+25 −12
Original line number Diff line number Diff line
@@ -28,8 +28,9 @@ using namespace android;

#define INVALID_VALUE -1

Mutex DrmManagerClientImpl::mMutex;
sp<IDrmManagerService> DrmManagerClientImpl::mDrmManagerService;
Mutex DrmManagerClientImpl::sMutex;
sp<IDrmManagerService> DrmManagerClientImpl::sDrmManagerService;
sp<DrmManagerClientImpl::DeathNotifier> DrmManagerClientImpl::sDeathNotifier;
const String8 DrmManagerClientImpl::EMPTY_STRING("");

DrmManagerClientImpl* DrmManagerClientImpl::create(int* pUniqueId) {
@@ -47,8 +48,8 @@ void DrmManagerClientImpl::remove(int uniqueId) {
}

const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
    mMutex.lock();
    if (NULL == mDrmManagerService.get()) {
    Mutex::Autolock lock(sMutex);
    if (NULL == sDrmManagerService.get()) {
        sp<IServiceManager> sm = defaultServiceManager();
        sp<IBinder> binder;
        do {
@@ -62,11 +63,13 @@ const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
            reqt.tv_nsec = 500000000; //0.5 sec
            nanosleep(&reqt, NULL);
        } while (true);

        mDrmManagerService = interface_cast<IDrmManagerService>(binder);
        if (NULL == sDeathNotifier.get()) {
            sDeathNotifier = new DeathNotifier();
        }
        binder->linkToDeath(sDeathNotifier);
        sDrmManagerService = interface_cast<IDrmManagerService>(binder);
    }
    mMutex.unlock();
    return mDrmManagerService;
    return sDrmManagerService;
}

void DrmManagerClientImpl::addClient(int uniqueId) {
@@ -143,12 +146,9 @@ DrmInfo* DrmManagerClientImpl::acquireDrmInfo(
status_t DrmManagerClientImpl::saveRights(int uniqueId, const DrmRights& drmRights,
            const String8& rightsPath, const String8& contentPath) {
    status_t status = DRM_ERROR_UNKNOWN;
    if (EMPTY_STRING != contentPath) {
        status = getDrmManagerService()->saveRights(
    return getDrmManagerService()->saveRights(
                uniqueId, drmRights, rightsPath, contentPath);
}
    return status;
}

String8 DrmManagerClientImpl::getOriginalMimeType(
        int uniqueId, const String8& path) {
@@ -336,3 +336,16 @@ status_t DrmManagerClientImpl::notify(const DrmInfoEvent& event) {
    return DRM_NO_ERROR;
}

DrmManagerClientImpl::DeathNotifier::~DeathNotifier() {
    Mutex::Autolock lock(sMutex);
    if (NULL != sDrmManagerService.get()) {
        sDrmManagerService->asBinder()->unlinkToDeath(this);
    }
}

void DrmManagerClientImpl::DeathNotifier::binderDied(const wp<IBinder>& who) {
    Mutex::Autolock lock(sMutex);
    DrmManagerClientImpl::sDrmManagerService.clear();
    LOGW("DrmManager server died!");
}
+1 −2
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ class IDrmManager;
class DrmRegistrationInfo;
class DrmUnregistrationInfo;
class DrmRightsAcquisitionInfo;
class DrmContentIds;
class DrmConstraints;
class DrmMetadata;
class DrmRights;
@@ -141,7 +140,7 @@ private:
    bool canHandle(int uniqueId, const String8& path);

private:
    static Vector<int> mUniqueIdVector;
    Vector<int> mUniqueIdVector;
    static const String8 EMPTY_STRING;

    int mDecryptSessionId;
+10 −2
Original line number Diff line number Diff line
@@ -407,9 +407,17 @@ private:
    Mutex mLock;
    sp<DrmManagerClient::OnInfoListener> mOnInfoListener;

    class DeathNotifier: public IBinder::DeathRecipient {
        public:
            DeathNotifier() {}
            virtual ~DeathNotifier();
            virtual void binderDied(const wp<IBinder>& who);
    };

private:
    static Mutex mMutex;
    static sp<IDrmManagerService> mDrmManagerService;
    static Mutex sMutex;
    static sp<DeathNotifier> sDeathNotifier;
    static sp<IDrmManagerService> sDrmManagerService;
    static const sp<IDrmManagerService>& getDrmManagerService();
    static const String8 EMPTY_STRING;
};
Loading