| /* |
| * Copyright 2009, The Android Open Source Project |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "config.h" |
| |
| #include "MyJavaVM.h" |
| #include "jni_utility.h" |
| |
| #include <jni.h> |
| |
| static JNIEnv* s_env; |
| static JavaVM* s_jvm; |
| |
| // JavaVM functions |
| jint vm_attachCurrentThread(JavaVM*, JNIEnv** env, void*) { |
| *env = s_env; |
| return JNI_OK; |
| } |
| |
| // JNIEnv functions |
| jobject env_callObjectMethodV(JNIEnv*, jobject, jmethodID, va_list) { |
| return MY_JOBJECT; |
| } |
| void env_callVoidMethodV(JNIEnv*, jobject, jmethodID, va_list) {} |
| void env_deleteRef(JNIEnv*, jobject) {} |
| jboolean env_exceptionCheck(JNIEnv*) { |
| return false; |
| } |
| jclass env_findClass(JNIEnv*, const char*) { |
| return (jclass) 1; |
| } |
| jbyte* env_getByteArrayElements(JNIEnv*, jbyteArray, jboolean*) { |
| return NULL; |
| } |
| jmethodID env_getMethodID(JNIEnv*, jclass, const char*, const char*) { |
| return (jmethodID) 1; |
| } |
| jclass env_getObjectClass(JNIEnv*, jobject) { |
| return (jclass) 1; |
| } |
| static const char* s_fakeString = "Fake Java String"; |
| const jchar* env_getStringChars(JNIEnv*, jstring, jboolean* isCopy) { |
| if (isCopy) |
| *isCopy = false; |
| return (const jchar*)s_fakeString; |
| } |
| jsize env_getStringLength(JNIEnv*, jstring) { |
| return sizeof(s_fakeString) - 1; |
| } |
| jbyteArray env_newByteArray(JNIEnv*, jsize) { |
| return (jbyteArray) 1; |
| } |
| jobject env_newRef(JNIEnv*, jobject obj) { |
| return obj; |
| } |
| jobject env_newObjectV(JNIEnv*, jclass, jmethodID, va_list) { |
| return MY_JOBJECT; |
| } |
| jstring env_newString(JNIEnv*, const jchar*, jsize) { |
| return (jstring) 1; |
| } |
| void env_releaseByteArrayElements(JNIEnv*, jbyteArray, jbyte*, jint) {} |
| void env_releaseStringChars(JNIEnv*, jstring, const jchar*) {} |
| void env_setIntField(JNIEnv*, jobject, jfieldID, jint) {} |
| |
| void InitializeJavaVM() { |
| // First, create the fake vm |
| s_jvm = new JavaVM; |
| JNIInvokeInterface* i = new JNIInvokeInterface; |
| memset(i, 0, sizeof(JNIInvokeInterface)); |
| s_jvm->functions = i; |
| |
| // Now, assign the functions of the vm to our fake ones. |
| i->AttachCurrentThread = vm_attachCurrentThread; |
| |
| // Create the fake env next |
| s_env = new JNIEnv; |
| JNINativeInterface* n = new JNINativeInterface; |
| memset(n, 0, sizeof(JNINativeInterface)); |
| s_env->functions = n; |
| |
| // Point the functions we care about to out fake ones. |
| n->CallObjectMethodV = env_callObjectMethodV; |
| n->CallVoidMethodV = env_callVoidMethodV; |
| n->DeleteLocalRef = env_deleteRef; |
| n->DeleteGlobalRef = env_deleteRef; |
| n->ExceptionCheck = env_exceptionCheck; |
| n->FindClass = env_findClass; |
| n->GetByteArrayElements = env_getByteArrayElements; |
| n->GetMethodID = env_getMethodID; |
| n->GetObjectClass = env_getObjectClass; |
| n->GetStringChars = env_getStringChars; |
| n->GetStringLength = env_getStringLength; |
| n->NewByteArray = env_newByteArray; |
| n->NewGlobalRef = env_newRef; |
| n->NewObjectV = env_newObjectV; |
| n->NewString = env_newString; |
| n->ReleaseByteArrayElements = env_releaseByteArrayElements; |
| n->ReleaseStringChars = env_releaseStringChars; |
| n->SetIntField = env_setIntField; |
| |
| // Tell WebCore about the vm |
| JSC::Bindings::setJavaVM(s_jvm); |
| } |