OSDN Git Service

DO NOT MERGE
authorShimeng (Simon) Wang <swang@google.com>
Thu, 16 Sep 2010 22:03:07 +0000 (15:03 -0700)
committerShimeng (Simon) Wang <swang@google.com>
Fri, 15 Oct 2010 23:08:22 +0000 (16:08 -0700)
For cherry-picking to GB.

Implement supportsType in MediaPlayerPrivateAndroid.

Use Java API to obtain this info.

issue: 3101402
Change-Id: I2baaf8ad861bec9b9b6f92fe753cbd879b33497c

WebKit/android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp
WebKit/android/jni/WebViewCore.cpp
WebKit/android/jni/WebViewCore.h

index bfb5305..3767516 100644 (file)
@@ -273,6 +273,8 @@ void MediaPlayerPrivate::getSupportedTypes(HashSet<String>&)
 
 MediaPlayer::SupportsType MediaPlayerPrivate::supportsType(const String& type, const String& codecs)
 {
+    if (WebViewCore::supportsMimeType(type))
+        return MediaPlayer::MayBeSupported;
     return MediaPlayer::IsNotSupported;
 }
 
index 1562775..3f3eb42 100644 (file)
@@ -189,6 +189,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 WebCore::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))
@@ -3295,6 +3313,11 @@ int register_webviewcore(JNIEnv* env)
     LOG_ASSERT(gWebViewCoreFields.m_webView,
             "Unable to find android/webkit/WebViewCore.mWebView");
 
+    gWebViewCoreStaticMethods.m_supportsMimeType =
+        env->GetStaticMethodID(widget, "supportsMimeType", "(Ljava/lang/String;)Z");
+    LOG_ASSERT(gWebViewCoreStaticMethods.m_supportsMimeType == NULL,
+        "Could not find static method supportsMimeType from WebViewCore");
+
     return jniRegisterNativeMethods(env, "android/webkit/WebViewCore",
             gJavaWebViewCoreMethods, NELEM(gJavaWebViewCoreMethods));
 }
index 056dba1..2944599 100644 (file)
@@ -578,6 +578,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 WebCore::String& mimeType);
     };
 
 }   // namespace android