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
Родитель 9e950fb416
Коммит d9340b2f5d
3 изменённых файлов: 31 добавлений и 21 удалений

Просмотреть файл

@ -2275,6 +2275,11 @@ nsresult nsPluginHost::ScanPluginsDirectoryList(nsISimpleEnumerator *dirEnum,
nsresult nsPluginHost::LoadPlugins()
{
#ifdef ANDROID
if (XRE_GetProcessType() == GeckoProcessType_Content) {
return NS_OK;
}
#endif
// do not do anything if it is already done
// use ReloadPlugins() to enforce loading
if (mPluginsLoaded)

Просмотреть файл

@ -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);
}
}
}

Просмотреть файл

@ -440,7 +440,7 @@ pref("browser.ui.touch.weight.visited", 120); // percentage
pref("plugin.disable", false);
pref("dom.ipc.plugins.enabled", true);
#elifdef ANDROID
pref("plugin.disable", false);
pref("plugin.disable", true);
pref("dom.ipc.plugins.enabled", false);
#else
pref("plugin.disable", true);