summaryrefslogtreecommitdiffstats
path: root/WebKit/android/plugins/PluginWidgetAndroid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android/plugins/PluginWidgetAndroid.cpp')
-rw-r--r--WebKit/android/plugins/PluginWidgetAndroid.cpp72
1 files changed, 32 insertions, 40 deletions
diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp
index dcd8943..9c8d25d 100644
--- a/WebKit/android/plugins/PluginWidgetAndroid.cpp
+++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp
@@ -36,6 +36,7 @@
#include "SkFlipPixelRef.h"
#include "SkString.h"
#include "WebViewCore.h"
+#include "jni_utility.h"
#define DEBUG_VISIBLE_RECTS 1 // temporary debug printfs and fixes
@@ -52,8 +53,8 @@ PluginWidgetAndroid::PluginWidgetAndroid(WebCore::PluginView* view)
m_pluginBounds.setEmpty();
m_hasFocus = false;
m_zoomLevel = 0;
- m_javaClassName = NULL;
m_childView = NULL;
+ m_webkitPlugin = NULL;
}
PluginWidgetAndroid::~PluginWidgetAndroid() {
@@ -63,9 +64,16 @@ PluginWidgetAndroid::~PluginWidgetAndroid() {
m_core->destroySurface(m_childView);
}
}
- if (m_javaClassName) {
- free(m_javaClassName);
+
+ // cleanup any remaining JNI References
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ if (m_childView) {
+ env->DeleteGlobalRef(m_childView);
+ }
+ if (m_webkitPlugin) {
+ env->DeleteGlobalRef(m_webkitPlugin);
}
+
m_flipPixelRef->safeUnref();
}
@@ -74,6 +82,19 @@ void PluginWidgetAndroid::init(android::WebViewCore* core) {
m_core->addPlugin(this);
}
+jobject PluginWidgetAndroid::getJavaPluginInstance() {
+ if (m_webkitPlugin == NULL && m_core != NULL) {
+
+ jobject tempObj = m_core->createPluginJavaInstance(m_pluginView->plugin()->path(),
+ m_pluginView->instance());
+ if (tempObj) {
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ m_webkitPlugin = env->NewGlobalRef(tempObj);
+ }
+ }
+ return m_webkitPlugin;
+}
+
static SkBitmap::Config computeConfig(bool isTransparent) {
return isTransparent ? SkBitmap::kARGB_8888_Config
: SkBitmap::kRGB_565_Config;
@@ -105,15 +126,13 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) {
// if the surface does not exist then create a new surface
} else if(!m_childView) {
-
- const String& libName = m_pluginView->plugin()->path();
- SkString skLibName;
- skLibName.setUTF16(libName.characters(), libName.length());
-
- m_childView = m_core->createSurface(skLibName.c_str(), m_javaClassName,
- m_pluginView->instance(),
- docPoint.x(), docPoint.y(),
- window->width, window->height);
+ jobject tempObj = m_core->createSurface(getJavaPluginInstance(),
+ docPoint.x(), docPoint.y(),
+ window->width, window->height);
+ if (tempObj) {
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ m_childView = env->NewGlobalRef(tempObj);
+ }
}
} else {
m_flipPixelRef->safeUnref();
@@ -122,44 +141,17 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) {
}
}
-bool PluginWidgetAndroid::setPluginStubJavaClassName(const char* className) {
-
- if (m_javaClassName) {
- free(m_javaClassName);
- }
-
- // don't call strdup() if the className is to be set to NULL
- if (!className) {
- m_javaClassName = NULL;
- return true;
- }
-
- // make a local copy of the className
- m_javaClassName = strdup(className);
- return (m_javaClassName != NULL);
-}
-
void PluginWidgetAndroid::requestFullScreenMode() {
- if (!m_javaClassName) {
- return;
- }
-
const String& libName = m_pluginView->plugin()->path();
SkString skLibName;
skLibName.setUTF16(libName.characters(), libName.length());
- m_core->startFullScreenPluginActivity(skLibName.c_str(), m_javaClassName,
+ m_core->startFullScreenPluginActivity(skLibName.c_str(),
m_pluginView->instance());
}
bool PluginWidgetAndroid::setDrawingModel(ANPDrawingModel model) {
-
- // disallow the surface drawing model if no java class name has been given
- if (model == kSurface_ANPDrawingModel && m_javaClassName == NULL) {
- return false;
- }
-
m_drawingModel = model;
return true;
}