android/jni/JavaSharedClient.cpp \
android/jni/MockGeolocation.cpp \
android/jni/PictureSet.cpp \
- android/jni/PluginActivity.cpp \
android/jni/WebCoreFrameBridge.cpp \
android/jni/WebCoreJni.cpp \
android/jni/WebCoreResourceLoader.cpp \
+++ /dev/null
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define LOG_TAG "pluginActivity"
-
-#include <config.h>
-
-#include "PluginView.h"
-#include "PluginWidgetAndroid.h"
-#include "WebCoreJni.h"
-#include "jni_utility.h"
-#include <JNIHelp.h>
-
-namespace android {
-
-
-static WebCore::PluginView* pluginViewForInstance(NPP instance) {
- if (instance && instance->ndata)
- return static_cast<WebCore::PluginView*>(instance->ndata);
- return NULL;
-}
-
-//--------------------------------------------------------------------------
-// PluginActivity native methods.
-//--------------------------------------------------------------------------
-
-static jobject getWebkitPlugin(JNIEnv* env, jobject obj, jint npp)
-{
- NPP instance = (NPP)npp;
-
- WebCore::PluginView* pluginView = pluginViewForInstance(instance);
- LOG_ASSERT(pluginView, "Unable to resolve the plugin using the given NPP");
-
- PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
- LOG_ASSERT(pluginWidget, "Unable to retrieve the android specific portion of the plugin");
-
- return pluginWidget->getJavaPluginInstance();
-}
-
-//---------------------------------------------------------
-// JNI registration
-//---------------------------------------------------------
-static JNINativeMethod gPluginActivityMethods[] = {
- { "nativeGetWebkitPlugin", "(I)Landroid/webkit/plugin/WebkitPlugin;",
- (void*) getWebkitPlugin }
-};
-
-
-int register_plugin_activity(JNIEnv* env)
-{
- return jniRegisterNativeMethods(env, "android/webkit/PluginActivity",
- gPluginActivityMethods, NELEM(gPluginActivityMethods));
-}
-
-} /* namespace android */
#if ENABLE(VIDEO)
extern int register_mediaplayer(JNIEnv*);
#endif
-extern int register_plugin_activity(JNIEnv*);
}
#if ENABLE(VIDEO)
{ "HTML5VideoViewProxy", android::register_mediaplayer },
#endif
- { "PluginActivity", android::register_plugin_activity },
};
EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)
jmethodID m_addMessageToConsole;
jmethodID m_getPluginClass;
jmethodID m_createPluginJavaInstance;
- jmethodID m_startFullScreenPluginActivity;
+ jmethodID m_showFullScreenPlugin;
+ jmethodID m_hideFullScreenPlugin;
jmethodID m_createSurface;
jmethodID m_updateSurface;
jmethodID m_destroySurface;
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_createPluginJavaInstance = GetJMethod(env, clazz, "createPluginJavaInstance", "(Ljava/lang/String;I)Landroid/webkit/plugin/WebkitPlugin;");
- m_javaGlue->m_startFullScreenPluginActivity = GetJMethod(env, clazz, "startFullScreenPluginActivity", "(I)V");
+ m_javaGlue->m_showFullScreenPlugin = GetJMethod(env, clazz, "showFullScreenPlugin", "(Landroid/webkit/plugin/WebkitPlugin;)V");
+ m_javaGlue->m_hideFullScreenPlugin = GetJMethod(env, clazz, "hideFullScreenPlugin", "()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");
return result;
}
-void WebViewCore::startFullScreenPluginActivity(NPP npp)
+void WebViewCore::showFullScreenPlugin(jobject webkitPlugin)
{
JNIEnv* env = JSC::Bindings::getJNIEnv();
AutoJObject obj = m_javaGlue->object(env);
return;
env->CallVoidMethod(obj.get(),
- m_javaGlue->m_startFullScreenPluginActivity, (int) npp);
+ m_javaGlue->m_showFullScreenPlugin, webkitPlugin);
+ checkException(env);
+}
+
+void WebViewCore::hideFullScreenPlugin()
+{
+ 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;
+
+ env->CallVoidMethod(obj.get(), m_javaGlue->m_hideFullScreenPlugin);
checkException(env);
}
// 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(NPP npp);
+ // Creates a full screen surface for a plugin
+ void showFullScreenPlugin(jobject webkitPlugin);
+
+ // Discards the full screen surface of a plugin
+ void hideFullScreenPlugin();
// Creates a Surface (i.e. View) for a plugin
jobject createSurface(jobject webkitPlugin, int x, int y, int width, int height);
static void anp_requestFullScreen(NPP instance) {
PluginView* pluginView = pluginViewForInstance(instance);
PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
- pluginWidget->webViewCore()->startFullScreenPluginActivity(instance);
+ jobject javaPlugin = pluginWidget->getJavaPluginInstance();
+ pluginWidget->webViewCore()->showFullScreenPlugin(javaPlugin);
+}
+
+static void anp_exitFullScreen(NPP instance) {
+ PluginView* pluginView = pluginViewForInstance(instance);
+ PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
+ pluginWidget->webViewCore()->hideFullScreenPlugin();
}
///////////////////////////////////////////////////////////////////////////////
ASSIGN(i, clearVisibleRects);
ASSIGN(i, showKeyboard);
ASSIGN(i, requestFullScreen);
+ ASSIGN(i, exitFullScreen);
}
asynchronously to provide a View object to be displayed full screen.
*/
void (*requestFullScreen)(NPP instance);
+ /** Called when a plugin wishes to exit from full screen mode. As a result,
+ the plugin's full screen view will be discarded by the view system.
+ */
+ void (*exitFullScreen)(NPP instance);
};
///////////////////////////////////////////////////////////////////////////////