Bug 720400 - Crash in nsPluginInstanceOwner::RemovePluginView @ mozilla::AndroidBridge::EnsureJNIThread [r=blassey]

This commit is contained in:
Matt Brubeck
2012-01-28 20:16:26 -08:00
parent 335db57769
commit c7bda6e332
3 changed files with 31 additions and 21 deletions

View File

@@ -1668,8 +1668,6 @@ void nsPluginInstanceOwner::ScrollPositionDidChange(nscoord aX, nscoord aY)
#ifdef MOZ_WIDGET_ANDROID
bool nsPluginInstanceOwner::AddPluginView(const gfxRect& aRect)
{
AndroidBridge::AutoLocalJNIFrame frame(1);
void* javaSurface = mInstance->GetJavaSurface();
if (!javaSurface) {
mInstance->RequestJavaSurface();
@@ -1682,6 +1680,11 @@ bool nsPluginInstanceOwner::AddPluginView(const gfxRect& aRect)
}
JNIEnv* env = GetJNIForThread();
if (!env)
return false;
AndroidBridge::AutoLocalJNIFrame frame(env, 1);
jclass cls = env->FindClass("org/mozilla/gecko/GeckoAppShell");
#ifdef MOZ_JAVA_COMPOSITOR
@@ -1733,29 +1736,31 @@ bool nsPluginInstanceOwner::AddPluginView(const gfxRect& aRect)
void nsPluginInstanceOwner::RemovePluginView()
{
AndroidBridge::AutoLocalJNIFrame frame(1);
if (mInstance && mObjectFrame && mPluginViewAdded) {
mPluginViewAdded = false;
void* surface = mInstance->GetJavaSurface();
if (surface) {
JNIEnv* env = GetJNIForThread();
if (env) {
jclass cls = env->FindClass("org/mozilla/gecko/GeckoAppShell");
jmethodID method = env->GetStaticMethodID(cls,
"removePluginView",
"(Landroid/view/View;)V");
env->CallStaticVoidMethod(cls, method, surface);
if (!surface)
return;
{
ANPEvent event;
event.inSize = sizeof(ANPEvent);
event.eventType = kLifecycle_ANPEventType;
event.data.lifecycle.action = kOffScreen_ANPLifecycleAction;
mInstance->HandleEvent(&event, nsnull);
}
}
JNIEnv* env = GetJNIForThread();
if (!env)
return;
AndroidBridge::AutoLocalJNIFrame frame(env, 1);
jclass cls = env->FindClass("org/mozilla/gecko/GeckoAppShell");
jmethodID method = env->GetStaticMethodID(cls,
"removePluginView",
"(Landroid/view/View;)V");
env->CallStaticVoidMethod(cls, method, surface);
{
ANPEvent event;
event.inSize = sizeof(ANPEvent);
event.eventType = kLifecycle_ANPEventType;
event.data.lifecycle.action = kOffScreen_ANPLifecycleAction;
mInstance->HandleEvent(&event, nsnull);
}
}
}