mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
99217d0d2e
Backed out changeset 53513a959cf0 (bug 913985) Backed out changeset d23d1e678417 (bug 913985) Backed out changeset a9c9187b4f4a (bug 913985) Backed out changeset c6b02e4a3e35 (bug 913985) Backed out changeset 895dae322e3c (bug 913985) Backed out changeset 3d97e6a53313 (bug 913985) Backed out changeset 892bb017f8ba (bug 913985) --HG-- rename : build/annotationProcessors/AnnotationInfo.java => build/annotationProcessors/MethodWithAnnotationInfo.java rename : build/annotationProcessors/utils/AlphabeticAnnotatableEntityComparator.java => build/annotationProcessors/utils/AlphabeticMethodComparator.java rename : build/annotationProcessors/utils/GeneratableElementIterator.java => build/annotationProcessors/utils/GeneratableEntryPointIterator.java rename : mobile/android/base/mozglue/generatorannotations/WrapElementForJNI.java => mobile/android/base/mozglue/GeneratableAndroidBridgeTarget.java rename : mobile/android/base/mozglue/generatorannotations/OptionalGeneratedParameter.java => mobile/android/base/mozglue/OptionalGeneratedParameter.java
138 lines
3.9 KiB
C++
138 lines
3.9 KiB
C++
/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/Util.h"
|
|
|
|
#include <android/log.h>
|
|
#include <dlfcn.h>
|
|
#include <prthread.h>
|
|
|
|
#include "mozilla/DebugOnly.h"
|
|
#include "mozilla/Assertions.h"
|
|
#include "nsThreadUtils.h"
|
|
#include "AndroidBridge.h"
|
|
|
|
#ifdef DEBUG
|
|
#define ALOG_BRIDGE(args...) ALOG(args)
|
|
#else
|
|
#define ALOG_BRIDGE(args...)
|
|
#endif
|
|
|
|
extern "C" {
|
|
jclass __jsjni_GetGlobalClassRef(const char *className);
|
|
}
|
|
|
|
class GetGlobalClassRefRunnable : public nsRunnable {
|
|
public:
|
|
GetGlobalClassRefRunnable(const char *className, jclass *foundClass) :
|
|
mClassName(className), mResult(foundClass) {}
|
|
NS_IMETHOD Run() {
|
|
*mResult = __jsjni_GetGlobalClassRef(mClassName);
|
|
return NS_OK;
|
|
}
|
|
private:
|
|
const char *mClassName;
|
|
jclass *mResult;
|
|
};
|
|
|
|
extern "C" {
|
|
__attribute__ ((visibility("default")))
|
|
jclass
|
|
jsjni_FindClass(const char *className) {
|
|
// FindClass outside the main thread will run into problems due
|
|
// to missing the classpath
|
|
MOZ_ASSERT(NS_IsMainThread());
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
if (!env) return nullptr;
|
|
return env->FindClass(className);
|
|
}
|
|
|
|
jclass
|
|
__jsjni_GetGlobalClassRef(const char *className) {
|
|
// root class globally
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
jclass globalRef = static_cast<jclass>(env->NewGlobalRef(env->FindClass(className)));
|
|
if (!globalRef)
|
|
return nullptr;
|
|
|
|
// return the newly create global reference
|
|
return globalRef;
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
jclass
|
|
jsjni_GetGlobalClassRef(const char *className) {
|
|
nsCOMPtr<nsIThread> mainThread;
|
|
mozilla::DebugOnly<nsresult> rv = NS_GetMainThread(getter_AddRefs(mainThread));
|
|
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
|
|
|
jclass foundClass;
|
|
nsRefPtr<nsIRunnable> runnable_ref(new GetGlobalClassRefRunnable(className,
|
|
&foundClass));
|
|
mainThread->Dispatch(runnable_ref, NS_DISPATCH_SYNC);
|
|
if (!foundClass)
|
|
return nullptr;
|
|
|
|
return foundClass;
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
jmethodID
|
|
jsjni_GetStaticMethodID(jclass methodClass,
|
|
const char *methodName,
|
|
const char *signature) {
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
if (!env) return nullptr;
|
|
return env->GetStaticMethodID(methodClass, methodName, signature);
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
bool
|
|
jsjni_ExceptionCheck() {
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
if (!env) return nullptr;
|
|
return env->ExceptionCheck();
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
void
|
|
jsjni_CallStaticVoidMethodA(jclass cls,
|
|
jmethodID method,
|
|
jvalue *values) {
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
if (!env) return;
|
|
|
|
mozilla::AutoLocalJNIFrame jniFrame(env);
|
|
env->CallStaticVoidMethodA(cls, method, values);
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
int
|
|
jsjni_CallStaticIntMethodA(jclass cls,
|
|
jmethodID method,
|
|
jvalue *values) {
|
|
JNIEnv *env = mozilla::AndroidBridge::GetJNIEnv();
|
|
if (!env) return -1;
|
|
|
|
mozilla::AutoLocalJNIFrame jniFrame(env);
|
|
return env->CallStaticIntMethodA(cls, method, values);
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
jobject jsjni_GetGlobalContextRef() {
|
|
return mozilla::AndroidBridge::Bridge()->GetGlobalContextRef();
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
JavaVM* jsjni_GetVM() {
|
|
return mozilla::AndroidBridge::GetVM();
|
|
}
|
|
|
|
__attribute__ ((visibility("default")))
|
|
JNIEnv* jsjni_GetJNIForThread() {
|
|
return GetJNIForThread();
|
|
}
|
|
}
|