зеркало из https://github.com/mozilla/gecko-dev.git
Bug 720400 - Crash in nsPluginInstanceOwner::RemovePluginView @ mozilla::AndroidBridge::EnsureJNIThread [r=blassey]
This commit is contained in:
Родитель
9e950fb416
Коммит
d9340b2f5d
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче