diff options
Diffstat (limited to 'WebKit/android/jni')
| -rw-r--r-- | WebKit/android/jni/WebViewCore.cpp | 42 | ||||
| -rw-r--r-- | WebKit/android/jni/WebViewCore.h | 11 |
2 files changed, 34 insertions, 19 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp index 7874598..2684c52 100644 --- a/WebKit/android/jni/WebViewCore.cpp +++ b/WebKit/android/jni/WebViewCore.cpp @@ -190,6 +190,7 @@ struct WebViewCore::JavaGlue { jmethodID m_geolocationPermissionsHidePrompt; jmethodID m_addMessageToConsole; jmethodID m_getPluginClass; + jmethodID m_createPluginJavaInstance; jmethodID m_startFullScreenPluginActivity; jmethodID m_createSurface; jmethodID m_updateSurface; @@ -269,8 +270,9 @@ WebViewCore::WebViewCore(JNIEnv* env, jobject javaWebViewCore, WebCore::Frame* m m_javaGlue->m_geolocationPermissionsHidePrompt = GetJMethod(env, clazz, "geolocationPermissionsHidePrompt", "()V"); m_javaGlue->m_addMessageToConsole = GetJMethod(env, clazz, "addMessageToConsole", "(Ljava/lang/String;ILjava/lang/String;)V"); m_javaGlue->m_getPluginClass = GetJMethod(env, clazz, "getPluginClass", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Class;"); - m_javaGlue->m_startFullScreenPluginActivity = GetJMethod(env, clazz, "startFullScreenPluginActivity", "(Ljava/lang/String;Ljava/lang/String;I)V"); - m_javaGlue->m_createSurface = GetJMethod(env, clazz, "createSurface", "(Ljava/lang/String;Ljava/lang/String;IIIII)Landroid/webkit/ViewManager$ChildView;"); + m_javaGlue->m_createPluginJavaInstance = GetJMethod(env, clazz, "createPluginJavaInstance", "(Ljava/lang/String;I)Landroid/webkit/plugin/WebkitPlugin;"); + m_javaGlue->m_startFullScreenPluginActivity = GetJMethod(env, clazz, "startFullScreenPluginActivity", "(Ljava/lang/String;I)V"); + m_javaGlue->m_createSurface = GetJMethod(env, clazz, "createSurface", "(Landroid/webkit/plugin/WebkitPlugin;IIII)Landroid/webkit/ViewManager$ChildView;"); m_javaGlue->m_updateSurface = GetJMethod(env, clazz, "updateSurface", "(Landroid/webkit/ViewManager$ChildView;IIII)V"); m_javaGlue->m_destroySurface = GetJMethod(env, clazz, "destroySurface", "(Landroid/webkit/ViewManager$ChildView;)V"); m_javaGlue->m_sendFindAgain = GetJMethod(env, clazz, "sendFindAgain", "()V"); @@ -2438,7 +2440,7 @@ void WebViewCore::setBackgroundColor(SkColor c) view->setBaseBackgroundColor(bcolor); } -jclass WebViewCore::getPluginClass(const char* libName, const char* className) +jclass WebViewCore::getPluginClass(const WebCore::String& libName, const char* className) { JNIEnv* env = JSC::Bindings::getJNIEnv(); AutoJObject obj = m_javaGlue->object(env); @@ -2447,7 +2449,7 @@ jclass WebViewCore::getPluginClass(const char* libName, const char* className) if (!obj.get()) return NULL; - jstring libString = env->NewStringUTF(libName); + jstring libString = env->NewString(libName.characters(), libName.length()); jstring classString = env->NewStringUTF(className); jobject pluginClass = env->CallObjectMethod(obj.get(), m_javaGlue->m_getPluginClass, @@ -2461,8 +2463,24 @@ jclass WebViewCore::getPluginClass(const char* libName, const char* className) } } -void WebViewCore::startFullScreenPluginActivity(const char* libName, - const char* className, NPP npp) +jobject WebViewCore::createPluginJavaInstance(const WebCore::String& libName, NPP npp) +{ + JNIEnv* env = JSC::Bindings::getJNIEnv(); + AutoJObject obj = m_javaGlue->object(env); + // if it is called during DESTROY is handled, the real object of WebViewCore + // can be gone. Check before using it. + if (!obj.get()) + return 0; + + jstring libString = env->NewString(libName.characters(), libName.length()); + jobject result = env->CallObjectMethod(obj.get(), + m_javaGlue->m_createPluginJavaInstance, + libString, (int) npp); + checkException(env); + return result; +} + +void WebViewCore::startFullScreenPluginActivity(const char* libName, NPP npp) { JNIEnv* env = JSC::Bindings::getJNIEnv(); AutoJObject obj = m_javaGlue->object(env); @@ -2472,15 +2490,13 @@ void WebViewCore::startFullScreenPluginActivity(const char* libName, return; jstring libString = env->NewStringUTF(libName); - jstring classString = env->NewStringUTF(className); env->CallVoidMethod(obj.get(), m_javaGlue->m_startFullScreenPluginActivity, - libString, classString, (int) npp); + libString, (int) npp); checkException(env); } -jobject WebViewCore::createSurface(const char* libName, const char* className, - NPP npp, int x, int y, int width, int height) +jobject WebViewCore::createSurface(jobject webkitPlugin, int x, int y, int width, int height) { JNIEnv* env = JSC::Bindings::getJNIEnv(); AutoJObject obj = m_javaGlue->object(env); @@ -2489,11 +2505,9 @@ jobject WebViewCore::createSurface(const char* libName, const char* className, if (!obj.get()) return 0; - jstring libString = env->NewStringUTF(libName); - jstring classString = env->NewStringUTF(className); jobject result = env->CallObjectMethod(obj.get(), - m_javaGlue->m_createSurface, libString, - classString,(int) npp, x, y, width, height); + m_javaGlue->m_createSurface, + webkitPlugin, x, y, width, height); checkException(env); return result; diff --git a/WebKit/android/jni/WebViewCore.h b/WebKit/android/jni/WebViewCore.h index 1ff5678..19bca96 100644 --- a/WebKit/android/jni/WebViewCore.h +++ b/WebKit/android/jni/WebViewCore.h @@ -371,15 +371,16 @@ namespace android { void requestKeyboard(bool); // Generates a class loader that contains classes from the plugin's apk - jclass getPluginClass(const char* libName, const char* className); + jclass getPluginClass(const WebCore::String& libName, const char* className); + + // Creates a new instance of the plugin's java component + jobject createPluginJavaInstance(const WebCore::String& libName, NPP npp); // Creates a full screen surface (i.e. View on an Activity) for a plugin - void startFullScreenPluginActivity(const char* libName, - const char* className, NPP npp); + void startFullScreenPluginActivity(const char* libName, NPP npp); // Creates a Surface (i.e. View) for a plugin - jobject createSurface(const char* libName, const char* className, - NPP npp, int x, int y, int width, int height); + jobject createSurface(jobject webkitPlugin, int x, int y, int width, int height); // Updates a Surface coordinates and dimensions for a plugin void updateSurface(jobject childView, int x, int y, int width, int height); |
