Added ability to allow Native webclient client to populate the listener class hash table and provide an InstanceOf function. This enables listeners to work for the future. git-svn-id: svn://10.0.0.236/trunk@66043 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -93,8 +93,8 @@ void util_SendEventToJava(JNIEnv *yourEnv, jobject nativeEventThread,
|
||||
{
|
||||
#ifdef BAL_INTERFACE
|
||||
if (nsnull != externalEventOccurred) {
|
||||
externalEventOccurred((void *) yourEnv, (void *) nativeEventThread,
|
||||
(void *) webclientEventListener, eventType);
|
||||
externalEventOccurred(yourEnv, nativeEventThread,
|
||||
webclientEventListener, eventType);
|
||||
}
|
||||
#else
|
||||
if (nsnull == gVm) {
|
||||
@@ -220,13 +220,7 @@ jclass util_FindClass(JNIEnv *env, const char *fullyQualifiedClassName)
|
||||
{
|
||||
jclass result = nsnull;
|
||||
#ifdef BAL_INTERFACE
|
||||
// PENDING(edburns): there will be a function in jni_util_export
|
||||
// that UNO can use to populate a 2d array with const char *, type
|
||||
// pairs. The const char* will be the fullyQualifiedClassName
|
||||
// argument, the type will be returned from this function.
|
||||
|
||||
// For now we just return the argument
|
||||
result = (jclass) fullyQualifiedClassName;
|
||||
result = util_GetClassMapping(fullyQualifiedClassName);
|
||||
#else
|
||||
result = env->FindClass(fullyQualifiedClassName);
|
||||
#endif
|
||||
@@ -259,12 +253,9 @@ jboolean util_IsInstanceOf(JNIEnv *env, jobject obj, jclass clazz)
|
||||
{
|
||||
jboolean result = JNI_FALSE;
|
||||
#ifdef BAL_INTERFACE
|
||||
// PENDING(edburns): the user will set the value of a function
|
||||
// pointer. This function will do QI type stuff. This function
|
||||
// pointer must be initialized at startup.
|
||||
|
||||
// for now we just return JNI_TRUE
|
||||
result = JNI_TRUE;
|
||||
if (nsnull != externalInstanceOf) {
|
||||
result = externalInstanceOf(env, obj, clazz);
|
||||
}
|
||||
#else
|
||||
result = env->IsInstanceOf(obj, clazz);
|
||||
#endif
|
||||
|
||||
@@ -29,7 +29,13 @@
|
||||
|
||||
#include "ns_globals.h" // for prLogModuleInfo
|
||||
|
||||
fpEventOccurredType externalEventOccurred = nsnull;
|
||||
#include "nsHashtable.h" // PENDING(edburns): size optimization?
|
||||
|
||||
static nsHashtable *gClassMappingTable = nsnull;
|
||||
|
||||
fpEventOccurredType externalEventOccurred = nsnull; // jni_util_export.h
|
||||
|
||||
fpInstanceOfType externalInstanceOf = nsnull; // jni_util_export.h
|
||||
|
||||
JNIEXPORT const char * JNICALL util_GetStringUTFChars(JNIEnv *env,
|
||||
jstring inString)
|
||||
@@ -138,8 +144,43 @@ JNIEXPORT void JNICALL util_DeleteString(JNIEnv *env, jstring toDelete)
|
||||
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL util_StoreClassMapping(const char* jniClassName,
|
||||
jclass yourClassType)
|
||||
{
|
||||
if (nsnull == gClassMappingTable) {
|
||||
if (nsnull == (gClassMappingTable = new nsHashtable(20, PR_TRUE))) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
nsStringKey key(jniClassName);
|
||||
gClassMappingTable->Put(&key, yourClassType);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
JNIEXPORT jclass JNICALL util_GetClassMapping(const char* jniClassName)
|
||||
{
|
||||
jclass result = nsnull;
|
||||
|
||||
if (nsnull == gClassMappingTable) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
nsStringKey key(jniClassName);
|
||||
result = (jclass) gClassMappingTable->Get(&key);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL util_SetEventOccurredFunction(fpEventOccurredType fp)
|
||||
{
|
||||
externalEventOccurred = fp;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL util_SetInstanceOfFunction(fpInstanceOfType fp)
|
||||
{
|
||||
externalInstanceOf = fp;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,11 +61,89 @@ JNIEXPORT jstring JNICALL util_NewString(JNIEnv *env, const jchar *inString,
|
||||
|
||||
JNIEXPORT void JNICALL util_DeleteString(JNIEnv *env, jstring toDelete);
|
||||
|
||||
typedef JNIEXPORT void (JNICALL * fpEventOccurredType) (void *env,
|
||||
void *nativeEventThread,
|
||||
void *webclientEventListener,
|
||||
//
|
||||
// BAL methods
|
||||
//
|
||||
|
||||
/*
|
||||
|
||||
* The following methods are used by non Java JNI clients, such a
|
||||
* StarOfficeDesktop.
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
* This method is used to store a mapping from a jniClass Name, such as
|
||||
* "org/mozilla/webclient/DocumentLoadListener" to some external class
|
||||
* type, such as
|
||||
* org::mozilla::webclient::wrapper_native::uno::DocumentLoadListener.
|
||||
|
||||
* This table is used in util_IsInstanceOf.
|
||||
|
||||
* @see util_SetInstanceOfFunction
|
||||
|
||||
* @ret 0 on success
|
||||
|
||||
*/
|
||||
|
||||
JNIEXPORT jint JNICALL util_StoreClassMapping(const char* jniClassName,
|
||||
jclass yourClassType);
|
||||
|
||||
JNIEXPORT jclass JNICALL util_GetClassMapping(const char* jniClassName);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
* Function declaration for the user defined InstanceOf function. It
|
||||
* tells whether the second argument, which is an instance, is an
|
||||
* instance of the type in the third argument.
|
||||
|
||||
* @see util_SetInstanceOfFunction
|
||||
|
||||
*/
|
||||
|
||||
|
||||
typedef JNIEXPORT jboolean (JNICALL *fpInstanceOfType) (JNIEnv *env,
|
||||
jobject obj,
|
||||
jclass clazz);
|
||||
|
||||
/**
|
||||
|
||||
* Function declaration for the user defined EventOccurred function. It
|
||||
* is called when an event occurrs. The second argument is the context
|
||||
* for the event, passed in by the user as the second argument to
|
||||
* NativeEventThreadImpl_nativeAddListener(). The third arcument is the
|
||||
* listener object, passed in as the last argument to
|
||||
* NativeEventThreadImpl_nativeAddListener(). The last argument is a
|
||||
* listener specific type field, to indicate what kind of sub-event
|
||||
* within the listener has occurred.
|
||||
|
||||
*/
|
||||
|
||||
typedef JNIEXPORT void (JNICALL * fpEventOccurredType) (JNIEnv *env,
|
||||
jobject nativeEventThread,
|
||||
jobject webclientEventListener,
|
||||
jlong eventType);
|
||||
|
||||
/**
|
||||
|
||||
* This function must be called at app initialization.
|
||||
|
||||
* @see fpInstanceOfType
|
||||
|
||||
*/
|
||||
|
||||
JNIEXPORT void JNICALL util_SetInstanceOfFunction(fpInstanceOfType fp);
|
||||
|
||||
/**
|
||||
|
||||
* This function must be called at app initialization.
|
||||
|
||||
* @see fpEventOccurredType
|
||||
|
||||
*/
|
||||
|
||||
JNIEXPORT void JNICALL util_SetEventOccurredFunction(fpEventOccurredType fp);
|
||||
|
||||
/**
|
||||
@@ -78,6 +156,16 @@ JNIEXPORT void JNICALL util_SetEventOccurredFunction(fpEventOccurredType fp);
|
||||
|
||||
extern fpEventOccurredType externalEventOccurred;
|
||||
|
||||
/**
|
||||
|
||||
* defined in jni_util_export.cpp
|
||||
|
||||
* The function pointer set with util_SetInstanceOfFunction.
|
||||
|
||||
*/
|
||||
|
||||
extern fpInstanceOfType externalInstanceOf;
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
Reference in New Issue
Block a user