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; ...@@ -10,10 +10,10 @@ import android.media.MediaDrm;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Handler; import android.os.Handler;
import android.util.Log;
import org.chromium.base.CalledByNative; import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace; import org.chromium.base.JNINamespace;
import org.chromium.base.Log;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
...@@ -58,6 +58,7 @@ public class MediaDrmBridge { ...@@ -58,6 +58,7 @@ public class MediaDrmBridge {
private static final String TAG = "MediaDrmBridge"; private static final String TAG = "MediaDrmBridge";
private static final String SECURITY_LEVEL = "securityLevel"; 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 PRIVACY_MODE = "privacyMode";
private static final String SESSION_SHARING = "sessionSharing"; private static final String SESSION_SHARING = "sessionSharing";
private static final String ENABLE = "enable"; private static final String ENABLE = "enable";
...@@ -342,6 +343,26 @@ public class MediaDrmBridge { ...@@ -342,6 +343,26 @@ public class MediaDrmBridge {
return false; 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. * Return the MediaCrypto object if available.
*/ */
......
...@@ -296,8 +296,16 @@ bool MediaDrmBridge::SetSecurityLevel(SecurityLevel security_level) { ...@@ -296,8 +296,16 @@ bool MediaDrmBridge::SetSecurityLevel(SecurityLevel security_level) {
void MediaDrmBridge::SetServerCertificate( void MediaDrmBridge::SetServerCertificate(
const std::vector<uint8_t>& certificate, const std::vector<uint8_t>& certificate,
scoped_ptr<media::SimpleCdmPromise> promise) { scoped_ptr<media::SimpleCdmPromise> promise) {
promise->reject(NOT_SUPPORTED_ERROR, 0, DCHECK(!certificate.empty());
"SetServerCertificate() is not supported.");
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( 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