diff options
author | Shimeng (Simon) Wang <swang@google.com> | 2010-09-16 15:03:07 -0700 |
---|---|---|
committer | Shimeng (Simon) Wang <swang@google.com> | 2010-10-06 11:43:33 -0700 |
commit | 90b7966e7815b262cd19ac25f03aaad9b21fdc06 (patch) | |
tree | e0e0ee23f75938df5663c543e480295f106dc710 | |
parent | ab94c4fa344a138877ccfc89d7267e72837b34ae (diff) | |
download | external_webkit-90b7966e7815b262cd19ac25f03aaad9b21fdc06.zip external_webkit-90b7966e7815b262cd19ac25f03aaad9b21fdc06.tar.gz external_webkit-90b7966e7815b262cd19ac25f03aaad9b21fdc06.tar.bz2 |
Implement supportsType in MediaPlayerPrivateAndroid.
Use Java API to obtain this info.
issue: 2816278
Change-Id: Ia525cc84f9a18ad2f9868d9f13d3671da527e5e0
-rw-r--r-- | WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h | 4 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp | 7 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 23 | ||||
-rw-r--r-- | WebKit/android/jni/WebViewCore.h | 3 |
4 files changed, 34 insertions, 3 deletions
diff --git a/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h b/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h index b97691f..0f38034 100644 --- a/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h +++ b/WebCore/platform/graphics/android/MediaPlayerPrivateAndroid.h @@ -96,9 +96,7 @@ protected: // Android-specific methods and fields. static MediaPlayerPrivateInterface* create(MediaPlayer* player); static void getSupportedTypes(HashSet<String>&) { } - static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs) { - return MediaPlayer::IsNotSupported; - } + static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs); MediaPlayerPrivate(MediaPlayer *); virtual void createJavaPlayerIfNeeded() { } diff --git a/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp b/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp index 6224707..f7a1faa 100644 --- a/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp +++ b/WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp @@ -78,6 +78,13 @@ void MediaPlayerPrivate::registerMediaEngine(MediaEngineRegistrar registrar) registrar(create, getSupportedTypes, supportsType); } +MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& type, const String& codecs) +{ + if (WebViewCore::supportsMimeType(type)) + return MediaPlayer::MayBeSupported; + return MediaPlayer::IsNotSupported; +} + void MediaPlayerPrivate::pause() { JNIEnv* env = JSC::Bindings::getJNIEnv(); diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 68b1e01..019fee0 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -200,6 +200,24 @@ jobject WebViewCore::getApplicationContext() { return result; } + +struct WebViewCoreStaticMethods { + jmethodID m_supportsMimeType; +} gWebViewCoreStaticMethods; + +// Check whether a media mimeType is supported in Android media framework. +bool WebViewCore::supportsMimeType(const WTF::String& mimeType) { + JNIEnv* env = JSC::Bindings::getJNIEnv(); + jstring jMimeType = env->NewString(mimeType.characters(), mimeType.length()); + jclass webViewCore = env->FindClass("android/webkit/WebViewCore"); + bool val = env->CallStaticBooleanMethod(webViewCore, + gWebViewCoreStaticMethods.m_supportsMimeType, jMimeType); + checkException(env); + env->DeleteLocalRef(jMimeType); + + return val; +} + // ---------------------------------------------------------------------------- #define GET_NATIVE_VIEW(env, obj) ((WebViewCore*)env->GetIntField(obj, gWebViewCoreFields.m_nativeClass)) @@ -4084,6 +4102,11 @@ int register_webviewcore(JNIEnv* env) LOG_ASSERT(gWebViewCoreFields.m_drawIsPaused, "Unable to find android/webkit/WebViewCore.mDrawIsPaused"); + gWebViewCoreStaticMethods.m_supportsMimeType = + env->GetStaticMethodID(widget, "supportsMimeType", "(Ljava/lang/String;)Z"); + LOG_FATAL_IF(gWebViewCoreStaticMethods.m_supportsMimeType == NULL, + "Could not find static method supportsMimeType from WebViewCore"); + return jniRegisterNativeMethods(env, "android/webkit/WebViewCore", gJavaWebViewCoreMethods, NELEM(gJavaWebViewCoreMethods)); } diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index f898406..7f4f4fa 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -631,6 +631,9 @@ namespace android { // if there exists at least on WebViewCore instance then we return the // application context, otherwise NULL is returned. static jobject getApplicationContext(); + + // Check whether a media mimeType is supported in Android media framework. + static bool supportsMimeType(const WTF::String& mimeType); }; } // namespace android |