bug 882196 - Android crash in nsXPCWrappedJS::AddRef, remove nsAppShell::CallObservers r=snorp
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user