Commit 4e0f76e7 authored by xhwang's avatar xhwang Committed by Commit bot

media: Implement MediaDrmBridge::SetServerCertificate().

Also update MediaDrmBridge to use org.chromium.base.Log. See bug 472152.

BUG=487435, 472152
TEST=Tested using a test certificate. We only get one key request instead of two, and playback works.

Review URL: https://codereview.chromium.org/1145583003

Cr-Commit-Position: refs/heads/master@{#330665}
parent 3cc838a9
......@@ -10,10 +10,10 @@ import android.media.MediaDrm;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.base.Log;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
......@@ -58,6 +58,7 @@ public class MediaDrmBridge {
private static final String TAG = "MediaDrmBridge";
private static final String SECURITY_LEVEL = "securityLevel";
private static final String SERVER_CERTIFICATE = "serviceCertificate";
private static final String PRIVACY_MODE = "privacyMode";
private static final String SESSION_SHARING = "sessionSharing";
private static final String ENABLE = "enable";
......@@ -342,6 +343,26 @@ public class MediaDrmBridge {
return false;
}
/**
* Set the server certificate.
*
* @param certificate Server certificate to be set.
* @return whether the server certificate was successfully set.
*/
@CalledByNative
private boolean setServerCertificate(byte[] certificate) {
try {
mMediaDrm.setPropertyByteArray(SERVER_CERTIFICATE, certificate);
return true;
} catch (java.lang.IllegalArgumentException e) {
Log.e(TAG, "Failed to set server certificate", e);
} catch (java.lang.IllegalStateException e) {
Log.e(TAG, "Failed to set server certificate", e);
}
return false;
}
/**
* Return the MediaCrypto object if available.
*/
......
......@@ -296,8 +296,16 @@ bool MediaDrmBridge::SetSecurityLevel(SecurityLevel security_level) {
void MediaDrmBridge::SetServerCertificate(
const std::vector<uint8_t>& certificate,
scoped_ptr<media::SimpleCdmPromise> promise) {
promise->reject(NOT_SUPPORTED_ERROR, 0,
"SetServerCertificate() is not supported.");
DCHECK(!certificate.empty());
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jbyteArray> j_certificate;
if (Java_MediaDrmBridge_setServerCertificate(env, j_media_drm_.obj(),
j_certificate.obj())) {
promise->resolve();
} else {
promise->reject(INVALID_ACCESS_ERROR, 0, "Set server certificate failed.");
}
}
void MediaDrmBridge::CreateSessionAndGenerateRequest(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment