Chromium Code Reviews| Index: media/base/android/media_drm_bridge.cc |
| diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc |
| index b81382cdc5fdd5d506de464a873bb31011917954..fed5fd60e32d66d6a1e03c0368b43a34cbd710ce 100644 |
| --- a/media/base/android/media_drm_bridge.cc |
| +++ b/media/base/android/media_drm_bridge.cc |
| @@ -138,6 +138,16 @@ static bool GetPsshData(const uint8* data, int data_size, |
| return false; |
| } |
| +static MediaDrmBridge::SecurityLevel GetSecurityLevelFromString( |
|
qinmin
2013/08/27 21:41:12
this doesn't needs to be a class member function,
xhwang
2013/08/28 01:21:24
This is already a helper function and not a class
|
| + const std::string& security_level_str) { |
| + if (0 == security_level_str.compare("L1")) |
| + return MediaDrmBridge::SECURITY_LEVEL_1; |
| + if (0 == security_level_str.compare("L3")) |
| + return MediaDrmBridge::SECURITY_LEVEL_3; |
| + DCHECK(security_level_str.empty()); |
| + return MediaDrmBridge::SECURITY_LEVEL_NONE; |
| +} |
| + |
| // static |
| MediaDrmBridge* MediaDrmBridge::Create(int media_keys_id, |
| const std::vector<uint8>& scheme_uuid, |
| @@ -149,10 +159,30 @@ MediaDrmBridge* MediaDrmBridge::Create(int media_keys_id, |
| return new MediaDrmBridge(media_keys_id, scheme_uuid, manager); |
| } |
| +// static |
| bool MediaDrmBridge::IsAvailable() { |
| return base::android::BuildInfo::GetInstance()->sdk_int() >= 18; |
| } |
| +// static |
| +bool MediaDrmBridge::IsSecureDecoderRequired( |
| + const std::string& security_level_str) { |
| + return IsSecureDecoderRequired( |
| + GetSecurityLevelFromString(security_level_str)); |
| +} |
| + |
| +bool MediaDrmBridge::IsCryptoSchemeSupported( |
| + const std::vector<uint8>& scheme_uuid, |
| + const std::string& container_mime_type) { |
| + JNIEnv* env = AttachCurrentThread(); |
| + ScopedJavaLocalRef<jbyteArray> j_scheme_uuid = |
| + base::android::ToJavaByteArray(env, &scheme_uuid[0], scheme_uuid.size()); |
| + ScopedJavaLocalRef<jstring> j_container_mime_type = |
| + ConvertUTF8ToJavaString(env, container_mime_type); |
| + return Java_MediaDrmBridge_isCryptoSchemeSupported( |
| + env, j_scheme_uuid.obj(), j_container_mime_type.obj()); |
| +} |
| + |
| bool MediaDrmBridge::RegisterMediaDrmBridge(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |
| @@ -241,22 +271,22 @@ void MediaDrmBridge::OnKeyError(JNIEnv* env, jobject, jstring j_session_id) { |
| manager_->OnKeyError(media_keys_id_, session_id, MediaKeys::kUnknownError, 0); |
| } |
| +// static |
| +bool MediaDrmBridge::IsSecureDecoderRequired(SecurityLevel security_level) { |
| + return MediaDrmBridge::SECURITY_LEVEL_1 == security_level; |
| +} |
| + |
| MediaDrmBridge::SecurityLevel MediaDrmBridge::GetSecurityLevel() { |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jstring> j_security_level = |
| Java_MediaDrmBridge_getSecurityLevel(env, j_media_drm_.obj()); |
| - std::string security_level = |
| + std::string security_level_str = |
| ConvertJavaStringToUTF8(env, j_security_level.obj()); |
| - if (0 == security_level.compare("L1")) |
| - return SECURITY_LEVEL_1; |
| - if (0 == security_level.compare("L3")) |
| - return SECURITY_LEVEL_3; |
| - DCHECK(security_level.empty()); |
| - return SECURITY_LEVEL_NONE; |
| + return GetSecurityLevelFromString(security_level_str); |
| } |
| bool MediaDrmBridge::IsProtectedSurfaceRequired() { |
| - return MediaDrmBridge::SECURITY_LEVEL_1 == GetSecurityLevel(); |
| + return IsSecureDecoderRequired(GetSecurityLevel()); |
| } |
| } // namespace media |