bug 882196 - Android crash in nsXPCWrappedJS::AddRef, remove nsAppShell::CallObservers r=snorp

This commit is contained in:
Brad Lassey
2013-06-15 17:40:27 -04:00
parent 5c7fd99586
commit f12392615d
7 changed files with 48 additions and 68 deletions

View File

@@ -32,6 +32,7 @@ jfieldID AndroidGeckoEvent::jNativeWindowField = 0;
jfieldID AndroidGeckoEvent::jCharactersField = 0;
jfieldID AndroidGeckoEvent::jCharactersExtraField = 0;
jfieldID AndroidGeckoEvent::jDataField = 0;
jfieldID AndroidGeckoEvent::jKeyCodeField = 0;
jfieldID AndroidGeckoEvent::jMetaStateField = 0;
jfieldID AndroidGeckoEvent::jDomKeyLocationField = 0;
@@ -235,6 +236,7 @@ AndroidGeckoEvent::InitGeckoEventClass(JNIEnv *jEnv)
jCharactersField = getField("mCharacters", "Ljava/lang/String;");
jCharactersExtraField = getField("mCharactersExtra", "Ljava/lang/String;");
jDataField = getField("mData", "Ljava/lang/String;");
jKeyCodeField = getField("mKeyCode", "I");
jMetaStateField = getField("mMetaState", "I");
jDomKeyLocationField = getField("mDomKeyLocation", "Lorg/mozilla/gecko/GeckoEvent$DomKeyLocation;");
@@ -511,6 +513,20 @@ AndroidGeckoEvent::ReadCharactersExtraField(JNIEnv *jenv)
jenv->GetStringRegion(s, 0, len, mCharactersExtra.BeginWriting());
}
void
AndroidGeckoEvent::ReadDataField(JNIEnv *jenv)
{
jstring s = (jstring) jenv->GetObjectField(wrapped_obj, jDataField);
if (!s) {
mData.SetIsVoid(true);
return;
}
int len = jenv->GetStringLength(s);
mData.SetLength(len);
jenv->GetStringRegion(s, 0, len, mData.BeginWriting());
}
void
AndroidGeckoEvent::UnionRect(nsIntRect const& aRect)
{
@@ -667,6 +683,13 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
break;
}
case CALL_OBSERVER: {
ReadCharactersField(jenv);
ReadCharactersExtraField(jenv);
ReadDataField(jenv);
break;
}
default:
break;
}