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.cpp64
1 files changed, 41 insertions, 23 deletions
diff --git a/WebKit/android/plugins/PluginWidgetAndroid.cpp b/WebKit/android/plugins/PluginWidgetAndroid.cpp
index cd7076d..5ee3e0f 100644
--- a/WebKit/android/plugins/PluginWidgetAndroid.cpp
+++ b/WebKit/android/plugins/PluginWidgetAndroid.cpp
@@ -54,7 +54,6 @@ PluginWidgetAndroid::PluginWidgetAndroid(WebCore::PluginView* view)
m_hasFocus = false;
m_isFullScreen = false;
m_zoomLevel = 0;
- m_webkitPlugin = NULL;
m_embeddedView = NULL;
}
@@ -68,9 +67,6 @@ PluginWidgetAndroid::~PluginWidgetAndroid() {
// cleanup any remaining JNI References
JNIEnv* env = JSC::Bindings::getJNIEnv();
- if (m_webkitPlugin) {
- env->DeleteGlobalRef(m_webkitPlugin);
- }
if (m_embeddedView) {
env->DeleteGlobalRef(m_embeddedView);
}
@@ -83,19 +79,6 @@ 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;
@@ -127,9 +110,18 @@ void PluginWidgetAndroid::setWindow(NPWindow* window, bool isTransparent) {
// if the surface does not exist then create a new surface
} else if(!m_embeddedView) {
- jobject tempObj = m_core->createSurface(getJavaPluginInstance(),
- docPoint.x(), docPoint.y(),
- window->width, window->height);
+
+ WebCore::PluginPackage* pkg = m_pluginView->plugin();
+ NPP instance = m_pluginView->instance();
+
+
+ jobject pluginSurface;
+ pkg->pluginFuncs()->getvalue(instance, kJavaSurface_ANPGetValue,
+ static_cast<void*>(&pluginSurface));
+
+ jobject tempObj = m_core->addSurface(pluginSurface,
+ docPoint.x(), docPoint.y(),
+ window->width, window->height);
if (tempObj) {
JNIEnv* env = JSC::Bindings::getJNIEnv();
m_embeddedView = env->NewGlobalRef(tempObj);
@@ -437,21 +429,47 @@ IntPoint PluginWidgetAndroid::frameToDocumentCoords(int frameX, int frameY) cons
}
void PluginWidgetAndroid::requestFullScreen() {
- if (m_isFullScreen || !m_webkitPlugin) {
+ if (m_isFullScreen || !m_embeddedView) {
return;
}
+ // send event to notify plugin of full screen change
+ ANPEvent event;
+ SkANP::InitEvent(&event, kLifecycle_ANPEventType);
+ event.data.lifecycle.action = kEnterFullScreen_ANPLifecycleAction;
+ sendEvent(event);
+
+ // remove the embedded surface from the view hierarchy
+ m_core->destroySurface(m_embeddedView);
+
+ // add the full screen view
IntPoint docPoint = frameToDocumentCoords(m_pluginWindow->x, m_pluginWindow->y);
- m_core->showFullScreenPlugin(m_webkitPlugin, m_pluginView->instance(),
+ m_core->showFullScreenPlugin(m_embeddedView, m_pluginView->instance(),
docPoint.x(), docPoint.y(), m_pluginWindow->width,
m_pluginWindow->height);
m_isFullScreen = true;
}
void PluginWidgetAndroid::exitFullScreen(bool pluginInitiated) {
- if (m_isFullScreen && pluginInitiated) {
+ if (!m_isFullScreen || !m_embeddedView) {
+ return;
+ }
+
+ // remove the full screen surface from the view hierarchy
+ if (pluginInitiated) {
m_core->hideFullScreenPlugin();
}
+ // add the embedded view back
+ IntPoint docPoint = frameToDocumentCoords(m_pluginWindow->x, m_pluginWindow->y);
+ m_core->updateSurface(m_embeddedView, docPoint.x(), docPoint.y(),
+ m_pluginWindow->width, m_pluginWindow->height);
+
+ // send event to notify plugin of full screen change
+ ANPEvent event;
+ SkANP::InitEvent(&event, kLifecycle_ANPEventType);
+ event.data.lifecycle.action = kExitFullScreen_ANPLifecycleAction;
+ sendEvent(event);
+
m_isFullScreen = false;
}