summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShimeng (Simon) Wang <swang@google.com>2010-09-16 15:03:07 -0700
committerShimeng (Simon) Wang <swang@google.com>2010-10-06 11:43:33 -0700
commit90b7966e7815b262cd19ac25f03aaad9b21fdc06 (patch)
treee0e0ee23f75938df5663c543e480295f106dc710
parentab94c4fa344a138877ccfc89d7267e72837b34ae (diff)
downloadexternal_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.h4
-rw-r--r--WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp7
-rw-r--r--WebKit/android/jni/WebViewCore.cpp23
-rw-r--r--WebKit/android/jni/WebViewCore.h3
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