Remove outdated jni/ folder.
DELTA_BY_EXTENSION=c=0,cpp=0,def=0,h=0,vcproj=0,xml=0
Change-Id: I7069b4eab17a1c0f628e4f88069f8a7e59ae85ae
diff --git a/build.xml b/build.xml
index 49bf3b9..d3d9872 100755
--- a/build.xml
+++ b/build.xml
@@ -42,7 +42,6 @@
<call-subproject subproject="codeserver" subtarget="build"/>
<call-subproject subproject="requestfactory" subtarget="build"/>
<call-subproject subproject="servlet" subtarget="build"/>
- <call-subproject subproject="jni" subtarget="build"/>
</target>
<target name="dist" depends="build, doc" description="[action] Make all the distributions">
@@ -94,10 +93,6 @@
<gwt.ant dir="servlet"/>
</target>
- <target name="jni" description="[subdir] Builds (or runs ${target} if set) jni for all platforms">
- <gwt.ant dir="jni"/>
- </target>
-
<target name="doc" description="[subdir] Builds (or runs ${target} if set) the doc">
<call-subproject subproject="user" subtarget="build"/>
<gwt.ant dir="doc"/>
@@ -121,7 +116,6 @@
<call-subproject subproject="requestfactory" subtarget="build"/>
<call-subproject subproject="servlet" subtarget="build"/>
<call-subproject subproject="tools" subtarget="build"/>
- <call-subproject subproject="jni" subtarget="build"/>
<call-subproject subproject="samples" subtarget="build"/>
</target>
diff --git a/distro-source/build.xml b/distro-source/build.xml
index 969b5bf..02ba43a 100755
--- a/distro-source/build.xml
+++ b/distro-source/build.xml
@@ -45,8 +45,6 @@
<zipfileset file="${gwt.build.lib}/gwt-api-checker.jar" prefix="${project.distname}" />
<zipfileset file="${gwt.build.lib}/requestfactory*.jar" prefix="${project.distname}" />
<zipfileset file="${gwt.build.lib}/gwt-elemental.jar" prefix="${project.distname}" />
- <!-- jni libs-->
- <zipfileset dir="${gwt.build.jni}/windows" prefix="${project.distname}" />
<!-- external libs -->
<zipfileset file="${gwt.tools}/lib/javax/validation/validation-api-1.0.0.GA.jar" prefix="${project.distname}" />
diff --git a/jni/BUILD b/jni/BUILD
deleted file mode 100644
index fcad202..0000000
--- a/jni/BUILD
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright 2012 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-# Description:
-#
-# Not sure what this does.
-
-# Google owns the copyright
-licenses(["unencumbered"])
-
-package(
- default_visibility = ["//third_party/java_src/gwt:__pkg__"],
-)
-
-filegroup(
- name = "ant",
- srcs = glob([
- "**/*.xml",
- "windows/prebuilt/*.dll",
- ]),
-)
diff --git a/jni/build.xml b/jni/build.xml
deleted file mode 100755
index fc25ce0..0000000
--- a/jni/build.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<project name="jni" default="build" basedir=".">
- <property name="gwt.root" location=".." />
- <property name="project.tail" value="jni" />
- <import file="${gwt.root}/common.ant.xml" />
-
- <target name="build" description="Build each platforms">
- <gwt.ant dir="windows" target="build"/>
- </target>
-</project>
diff --git a/jni/core/gwt-ll.cpp b/jni/core/gwt-ll.cpp
deleted file mode 100644
index 4076aea..0000000
--- a/jni/core/gwt-ll.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2005-2006 Google Inc.
-// All Rights Reserved.
-
-// A slim and portable set of JNI methods for GWT hosted mode
-
-#include <jni.h>
-#include <stdlib.h>
-
-extern "C" {
-
-/*
- * Class: com_google_gwt_dev_shell_LowLevel
- * Method: newGlobalRefInt
- * Signature: (Ljava/lang/Object;)I
- */
-JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_LowLevel__1newGlobalRefInt(JNIEnv* env, jclass, jobject o) {
- return reinterpret_cast<int>(env->NewGlobalRef(o));
-}
-/*
- * Class: com_google_gwt_dev_shell_LowLevel
- * Method: objFromGlobalRefInt
- * Signature: (I)Ljava/lang/Object;
- */
-JNIEXPORT jobject JNICALL Java_com_google_gwt_dev_shell_LowLevel__1objFromGlobalRefInt(JNIEnv* env, jclass, jint globalRef) {
- return reinterpret_cast<jobject>(globalRef);
-}
-
-/*
- * Class: com_google_gwt_dev_shell_LowLevel
- * Method: deleteGlobalRefInt
- * Signature: (I)I
- */
-JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_LowLevel__1deleteGlobalRefInt(JNIEnv* env, jclass, jint globalRef) {
- env->DeleteGlobalRef(reinterpret_cast<jobject>(globalRef));
-}
-
-/*
- * Class: com_google_gwt_dev_shell_LowLevel
- * Method: getEnv
- * Signature: (Ljava/lang/String;)Ljava/lang/String;
- */
-JNIEXPORT jstring JNICALL Java_com_google_gwt_dev_shell_LowLevel__1getEnv(JNIEnv* env, jclass, jstring key) {
- if (!key) {
- // null -> null
- return 0;
- }
-
- const char* keyPtr = env->GetStringUTFChars(key, 0);
- if (!keyPtr) {
- // There will be a pending OutOfMemoryException on this thread, so leave immediately and let it be thrown.
- return 0;
- }
-
- const char* valuePtr = getenv(keyPtr);
- env->ReleaseStringUTFChars(key, keyPtr);
-
- if (!valuePtr) {
- // no match found
- return 0;
- }
-
- // return the result
- return env->NewStringUTF(valuePtr);
-}
-
-} // extern "C"
diff --git a/jni/linux/ExternalWrapper.cpp b/jni/linux/ExternalWrapper.cpp
deleted file mode 100644
index 3b2854e..0000000
--- a/jni/linux/ExternalWrapper.cpp
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/*
- * Defines the JavaScript class gwt_external_class, which interface via JNI
- * to Java objects.
- */
-
-#include <jni.h>
-#include "JsRootedValue.h"
-#include "gwt-jni.h"
-#include "ExternalWrapper.h"
-#include "Tracer.h"
-#include "JsStringWrap.h"
-
-#ifdef ENABLE_TRACING
-extern void PrintJSValue(JSContext* cx, jsval val, char* prefix="");
-#else
-// Include a null version just to keep from cluttering up call sites.
-static inline void PrintJSValue(JSContext* cx, jsval val, char* prefix="") { }
-#endif
-
-// note that this does not use the NS_DEFINE_CID macro because it defines
-// the variable as const, which by default has internal linkage. I could
-// work around it by putting extern in front of the macro, but that seems
-// fragile if the macro changes.
-nsCID kGwtExternalCID = GWT_EXTERNAL_FACTORY_CID;
-
-/*
- * definition of JavaScript gwtOnLoad method which maps to the Java
- * gwtOnLoad method.
- */
-static JSBool gwtOnLoad(JSContext *cx, JSObject *obj, uintN argc,
- jsval *argv, jsval *rval)
-{
- Tracer tracer("gwtOnLoad");
- tracer.log("context=%08x", unsigned(cx));
- JsRootedValue::ContextManager context(cx);
- JsRootedValue::ensureRuntime(cx);
- if (argc < 3) {
- tracer.setFail("less than 3 args");
- return JS_FALSE;
- }
-
- JSObject* scriptWindow = 0;
- if (argv[0] != JSVAL_NULL && argv[0] != JSVAL_VOID) {
- if (!JS_ValueToObject(cx, argv[0], &scriptWindow)) {
- tracer.setFail("can't get script window object");
- return JS_FALSE;
- }
- }
-
- JSString* moduleName = 0;
- if (argv[1] != JSVAL_NULL && argv[1] != JSVAL_VOID) {
- moduleName = JS_ValueToString(cx, argv[1]);
- }
-
- JSString* version = 0;
- if (argv[2] != JSVAL_NULL && argv[2] != JSVAL_VOID) {
- version = JS_ValueToString(cx, argv[2]);
- }
-
- nsCOMPtr<nsIScriptGlobalObject> scriptGlobal(0);
- if (scriptWindow) {
- nsCOMPtr<nsIXPConnect> xpConnect = do_GetService(nsIXPConnect::GetCID());
- nsCOMPtr<nsIXPConnectWrappedNative> wrappedNative;
- xpConnect->GetWrappedNativeOfJSObject(cx, scriptWindow,
- getter_AddRefs(wrappedNative));
- if (wrappedNative) {
- nsCOMPtr<nsISupports> native;
- wrappedNative->GetNative(getter_AddRefs(native));
- scriptGlobal = do_QueryInterface(native);
- }
- }
- jstring jModuleName(0);
- if (moduleName) {
- jModuleName = savedJNIEnv->NewString(JS_GetStringChars(moduleName),
- JS_GetStringLength(moduleName));
- if (!jModuleName || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get module name in Java string");
- return JS_FALSE;
- }
- tracer.log("module name=%s", JS_GetStringBytes(moduleName));
- } else {
- tracer.log("null module name");
- }
-
- jstring jVersion(0);
- if (version) {
- jVersion = savedJNIEnv->NewString(JS_GetStringChars(version),
- JS_GetStringLength(version));
- if (!jVersion || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get module name in Java string");
- return JS_FALSE;
- }
- tracer.log("version=%s", JS_GetStringBytes(version));
- } else {
- tracer.log("null version");
- }
-
- jobject externalObject = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- jclass objClass = savedJNIEnv->GetObjectClass(externalObject);
- if (!objClass || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get LowLevelMoz.ExternalObject class");
- return JS_FALSE;
- }
-
- jmethodID methodID = savedJNIEnv->GetMethodID(objClass, "gwtOnLoad",
- "(ILjava/lang/String;Ljava/lang/String;)Z");
- if (!methodID || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get gwtOnLoad method");
- return JS_FALSE;
- }
-
- tracer.log("scriptGlobal=%08x", unsigned(scriptGlobal.get()));
-
- jboolean result = savedJNIEnv->CallBooleanMethod(externalObject, methodID,
- NS_REINTERPRET_CAST(jint, scriptGlobal.get()), jModuleName, jVersion);
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("LowLevelMoz.ExternalObject.gwtOnLoad() threw an exception");
- return JS_FALSE;
- }
- *rval = BOOLEAN_TO_JSVAL((result == JNI_FALSE) ? JS_FALSE : JS_TRUE);
- return JS_TRUE;
-}
-
-/*
- * definition of JavaScript initModule method which maps to the Java
- * initModule method.
- */
-static JSBool initModule(JSContext *cx, JSObject *obj, uintN argc,
- jsval *argv, jsval *rval)
-{
- Tracer tracer("initModule");
- tracer.log("context=%08x", unsigned(cx));
- JsRootedValue::ContextManager context(cx);
- JsRootedValue::ensureRuntime(cx);
- if (argc < 1) {
- tracer.setFail("less than 1 args");
- return JS_FALSE;
- }
-
- JSString* moduleName = 0;
- if (argv[0] != JSVAL_NULL && argv[0] != JSVAL_VOID) {
- moduleName = JS_ValueToString(cx, argv[0]);
- }
-
- jstring jModuleName(0);
- if (moduleName) {
- jModuleName = savedJNIEnv->NewString(JS_GetStringChars(moduleName),
- JS_GetStringLength(moduleName));
- if (!jModuleName || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get module name in Java string");
- return JS_FALSE;
- }
- tracer.log("module name=%s", JS_GetStringBytes(moduleName));
- } else {
- tracer.log("null module name");
- }
-
- jobject externalObject = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- jclass objClass = savedJNIEnv->GetObjectClass(externalObject);
- if (!objClass || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get LowLevelMoz.ExternalObject class");
- return JS_FALSE;
- }
-
- jmethodID methodID = savedJNIEnv->GetMethodID(objClass, "initModule",
- "(Ljava/lang/String;)Z");
- if (!methodID || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get initModule method");
- return JS_FALSE;
- }
-
- jboolean result = savedJNIEnv->CallBooleanMethod(externalObject, methodID,
- jModuleName);
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("LowLevelMoz.ExternalObject.initModule() threw an exception");
- return JS_FALSE;
- }
- *rval = BOOLEAN_TO_JSVAL((result == JNI_FALSE) ? JS_FALSE : JS_TRUE);
- return JS_TRUE;
-}
-
-/*=======================================================================*/
-/* Implementation of the getProperty, setProperty, and finalize methods */
-/* for the JavaScript class gwt_external_class. */
-/*=======================================================================*/
-
-static JSBool JS_DLL_CALLBACK gwt_external_getProperty(JSContext *cx,
- JSObject *obj, jsval id, jsval *vp)
-{
- Tracer tracer("gwt_external_getProperty");
- JsRootedValue::ContextManager context(cx);
- if (*vp != JSVAL_VOID) {
- // we setup the gwtOnLoad function as a property in GetScriptObject and
- // do not maintain a copy of it anywhere. So, if there is a cached
- // value for a property we must return it. As we never redefine any
- // property values, this is safe. If we were going to keep this code
- // around and add Toby's profiling code we would need to revisit this.
- return JS_TRUE;
- }
-
- if (!JSVAL_IS_STRING(id)) {
- tracer.setFail("not a string");
- return JS_FALSE;
- }
- JsStringWrap jsStr(cx, id);
- tracer.log("obj=%08x, property=%.*s", obj, jsStr.length(), jsStr.bytes());
-
-// All this is for calling resolveReference which only returns void. So,
-// just replace this code to return void for now. TODO(jat): revisit when
-// merging in Toby's code.
-#if 0
- jstring jident = savedJNIEnv->NewString(jsStr.chars(), jsStr.length());
- if (!jident || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't create Java string ");
- return JS_FALSE;
- }
- jobject externalObject = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- jclass objClass = savedJNIEnv->GetObjectClass(externalObject);
- if (!objClass || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't find Java class for JS object");
- return JS_FALSE;
- }
-
- jmethodID methodID = savedJNIEnv->GetMethodID(objClass, "resolveReference",
- "(Ljava/lang/String;)I");
- if (!methodID || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("exception getting method for int resolveReference(String)");
- return JS_FALSE;
- }
- int retval = savedJNIEnv->CallIntMethod(externalObject, methodID, jident);
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("exception calling int resolveReference(String)");
- return JS_FALSE;
- }
- *vp = retval;
-#else
- *vp = JSVAL_VOID;
-#endif
- return JS_TRUE;
-}
-
-static void JS_DLL_CALLBACK gwt_external_finalize(JSContext *cx, JSObject *obj)
-{
- // We don't need to push a context if all we do is DeleteGlobalRef
- Tracer tracer("gwt_external_finalize", obj);
- jobject externalObject = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- if (externalObject) {
- savedJNIEnv->DeleteGlobalRef(externalObject);
- }
- JS_FinalizeStub(cx, obj);
-}
-
-static JSBool JS_DLL_CALLBACK gwt_external_setProperty(JSContext *cx,
- JSObject *obj, jsval id, jsval *vp)
-{
- return JS_FALSE;
-}
-
-static JSClass gwt_external_class = {
- "gwt_external_class", JSCLASS_HAS_PRIVATE,
- JS_PropertyStub, JS_PropertyStub, gwt_external_getProperty,
- gwt_external_setProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub,
- gwt_external_finalize,
- JSCLASS_NO_OPTIONAL_MEMBERS
-};
-
-NS_IMPL_ISUPPORTS1(ExternalWrapper, nsIScriptObjectOwner)
-
-/*
- * Create a new LowLevelMoz.ExternalObject instance and a JavaScript object
- * that refers to it, mapping the gwtOnLoad member function mapping to
- * a Javascript method.
- */
-NS_IMETHODIMP ExternalWrapper::GetScriptObject(nsIScriptContext *aContext,
- void** aScriptObject)
-{
- Tracer tracer("ExternalWrapper::GetScriptObject");
- if (!aScriptObject) {
- tracer.setFail("null script object pointer");
- return NS_ERROR_INVALID_POINTER;
- }
- if (!jsWindowExternalObject) {
- JSContext* cx = NS_REINTERPRET_CAST(JSContext*,
- aContext->GetNativeContext());
- if (!cx) {
- tracer.setFail("can't get JSContext");
- return NS_ERROR_UNEXPECTED;
- }
- JsRootedValue::ContextManager context(cx);
- *aScriptObject = 0;
-
- nsIScriptGlobalObject* globalObject = aContext->GetGlobalObject();
- nsCOMPtr<nsIDOMWindow> domWindow(do_QueryInterface(globalObject));
- if (!domWindow) {
- tracer.setFail("can't get DOM window");
- return NS_ERROR_UNEXPECTED;
- }
- nsCOMPtr<nsIDOMWindow> topWindow;
- domWindow->GetTop(getter_AddRefs(topWindow));
- if (!topWindow) {
- tracer.setFail("Can't get top window");
- return NS_ERROR_UNEXPECTED;
- }
-
- tracer.log("savedJNIEnv=%08x, llClass=%08x", unsigned(savedJNIEnv),
- lowLevelMozClass);
-
- jmethodID methodID = savedJNIEnv->GetStaticMethodID(lowLevelMozClass,
- "createExternalObjectForDOMWindow",
- "(I)Lcom/google/gwt/dev/shell/moz/LowLevelMoz$ExternalObject;");
- if (!methodID || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("Can't get createExternalObjectForDOMWindow method");
- return NS_ERROR_UNEXPECTED;
- }
-
- jobject externalObject = savedJNIEnv->CallStaticObjectMethod(
- lowLevelMozClass, methodID, NS_REINTERPRET_CAST(jint, topWindow.get()));
- if (!externalObject || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("createExternalObjectForDOMWindow failed");
- return NS_ERROR_UNEXPECTED;
- }
- externalObject = savedJNIEnv->NewGlobalRef(externalObject);
- if (!externalObject || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get GlobalRef for external object");
- return NS_ERROR_UNEXPECTED;
- }
- JSObject* newObj = JS_NewObject(cx, &gwt_external_class, 0,
- globalObject->GetGlobalJSObject());
- if (!newObj) {
- tracer.setFail("can't create new gwt_external_class object");
- return NS_ERROR_OUT_OF_MEMORY;
- }
- if (!JS_SetPrivate(cx, newObj, externalObject)) {
- savedJNIEnv->DeleteGlobalRef(externalObject);
- tracer.setFail("can't store external object private reference");
- return NS_ERROR_UNEXPECTED;
- }
-
- if (!JS_DefineFunction(cx, newObj, "gwtOnLoad", gwtOnLoad, 3,
- JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT)) {
- tracer.setFail("can't define gwtOnLoad function on JavaScript object");
- return NS_ERROR_UNEXPECTED;
- }
- if (!JS_DefineFunction(cx, newObj, "initModule", initModule, 1,
- JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT)) {
- tracer.setFail("can't define initModule function on JavaScript object");
- return NS_ERROR_UNEXPECTED;
- }
- jsWindowExternalObject = newObj;
- }
-
- *aScriptObject = jsWindowExternalObject;
- return NS_OK;
-}
-
-NS_IMETHODIMP ExternalWrapper::SetScriptObject(void* aScriptObject)
-{
- jsWindowExternalObject = aScriptObject;
- return NS_OK;
-}
-
-NS_IMPL_ISUPPORTS1(nsRpExternalFactory, nsIFactory)
-
-NS_IMETHODIMP nsRpExternalFactory::CreateInstance(nsISupports *aOuter,
- const nsIID& aIID, void** aResult)
-{
- Tracer tracer("nsRpExternalFactory::CreateInstance");
- if (!aResult) {
- tracer.setFail("null pointer for return value");
- return NS_ERROR_INVALID_POINTER;
- }
- *aResult = NULL;
-
- if (aOuter) {
- tracer.setFail("aOuter is not null");
- return NS_ERROR_NO_AGGREGATION;
- }
-
- nsISupports* object = new ExternalWrapper();
- if (!object) {
- tracer.setFail("can't create a new ExternalWrapper");
- return NS_ERROR_OUT_OF_MEMORY;
- }
-
- nsresult result = object->QueryInterface(aIID, aResult);
- if (!*aResult || NS_FAILED(result)) {
- tracer.setFail("ExternalWrapper::QueryInterface failed");
- delete object;
- }
- return result;
-}
-
-NS_IMETHODIMP nsRpExternalFactory::LockFactory(PRBool lock)
-{
- return NS_ERROR_NOT_IMPLEMENTED;
-}
diff --git a/jni/linux/ExternalWrapper.h b/jni/linux/ExternalWrapper.h
deleted file mode 100644
index 0168083..0000000
--- a/jni/linux/ExternalWrapper.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2006 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef EXTERNALWRAPPER_H_
-#define EXTERNALWRAPPER_H_
-
-class ExternalWrapper : public nsIScriptObjectOwner {
-public:
- NS_DECL_ISUPPORTS
- NS_IMETHOD GetScriptObject(nsIScriptContext *aContext, void** aScriptObject);
- NS_IMETHOD SetScriptObject(void* aScriptObject);
- ExternalWrapper(): jsWindowExternalObject(0) { }
-private:
- ~ExternalWrapper() { }
- void *jsWindowExternalObject;
-};
-
-class nsRpExternalFactory : public nsIFactory {
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIFACTORY
- nsRpExternalFactory() { }
-private:
- ~nsRpExternalFactory() { }
-};
-
-#define GWT_EXTERNAL_FACTORY_CID \
-{ 0xF56E23F8, 0x5D06, 0x47F9, \
-{ 0x88, 0x5A, 0xD9, 0xCA, 0xC3, 0x38, 0x41, 0x7F } }
-#define GWT_EXTERNAL_CONTRACTID "@com.google/GWT/external;1"
-
-#endif /*EXTERNALWRAPPER_H_*/
diff --git a/jni/linux/JStringWrap.h b/jni/linux/JStringWrap.h
deleted file mode 100644
index 9d2ebcc..0000000
--- a/jni/linux/JStringWrap.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef JNI_LINUX_JSTRINGWRAP_H_
-#define JNI_LINUX_JSTRINGWRAP_H_
-
-/*
- * Wrapper arouond Java Strings, keeps pointers to unpacked strings
- * and makes sure they are cleaned up.
- */
-class JStringWrap {
- public:
- JStringWrap(JNIEnv* env, jstring str): env(env), s(str), p(0), jp(0) { }
- ~JStringWrap() {
- if (p) env->ReleaseStringUTFChars(s, p);
- if (jp) env->ReleaseStringChars(s, jp);
- }
- const char* str() {
- if (!p) p = env->GetStringUTFChars(s, 0);
- return p;
- }
- const jchar* jstr() {
- if (!jp) jp = env->GetStringChars(s, 0);
- return jp;
- }
- int length() {
- return env->GetStringLength(s);
- }
- private:
- JNIEnv* env;
- jstring s;
- const char* p;
- const jchar* jp;
-};
-
-
-#endif // JNI_LINUX_JSTRINGWRAP_H_
diff --git a/jni/linux/JsRootedValue.cpp b/jni/linux/JsRootedValue.cpp
deleted file mode 100644
index 29b95ca..0000000
--- a/jni/linux/JsRootedValue.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include "JsRootedValue.h"
-
-// Initialize static value used to hold the JavaScript String class.
-JSClass* JsRootedValue::stringClass = 0;
-
-// Initialize static reference to the sole JSRuntime value in Gecko.
-JSRuntime* JsRootedValue::runtime = 0;
-
-// Static stack of JavaScript execution contexts.
-std::stack<JSContext*> JsRootedValue::contextStack;
-
-/*
- * Actually get the stringClass pointer from JavaScript.
- */
-void JsRootedValue::fetchStringClass() const {
- Tracer tracer("JsRootedValue::fetchStringClass");
- JSContext* cx = currentContext();
- jsval val = JS_GetEmptyStringValue(cx);
- JSObject* obj;
- // on error, leave stringClass null
- if (!JS_ValueToObject(cx, val, &obj)) return;
- if (!obj) {
- tracer.log("ensureStringClass: null object");
- return;
- }
- stringClass = JS_GET_CLASS(cx, obj);
- tracer.log("stringClass=%08x", unsigned(stringClass));
-}
diff --git a/jni/linux/JsRootedValue.h b/jni/linux/JsRootedValue.h
deleted file mode 100644
index 65c25af..0000000
--- a/jni/linux/JsRootedValue.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-#ifndef JNI_LINUX_JSROOTEDVALUE_H_
-#define JNI_LINUX_JSROOTEDVALUE_H_
-
-// Mozilla header files
-#include "mozilla-headers.h"
-
-#include "Tracer.h"
-#include <stack>
-
-extern "C" JSClass gwt_nativewrapper_class;
-
-/*
- * Holds a root for Javascript objects, so the JS interpreter knows not to
- * garbage-collect the underlying object as long as this object exists.
- * Java code will pass a pointer to this object around (as an int/long) for
- * referring to the underlying Javascript object.
- *
- * There are also convenience routines for manipulating the underlying value.
- * Note that all get* methods assume the type is correct, so the corresponding
- * is* method should be called first if you aren't sure of the type.
- *
- * See http://developer.mozilla.org/en/docs/JS_AddRoot for details.
- *
- * TODO(jat): rewrite this to minimize the number of roots held and to
- * improve 64-bit compatibility.
- */
-class JsRootedValue
-{
-private:
- // the JavaScript String class
- static JSClass* stringClass;
-
- // Javascript runtime
- static JSRuntime* runtime;
-
- // stack of Javascript contexts
- static std::stack<JSContext*> contextStack;
-
- // underlying Javascript value
- jsval value_;
-
-protected:
- /*
- * Fetch the JavaScript String class.
- * Not inlined to minimize code bloat since it should only be called once.
- */
- void fetchStringClass() const;
-
- /*
- * Make sure we have the JS code to identify String objects installed.
- */
- void ensureStringClass() const {
- if(stringClass) return;
- fetchStringClass();
- }
-
- /*
- * Helper for the various constructors
- */
- void constructorHelper(const char* ctorDesc) {
- Tracer tracer(ctorDesc, this);
- if (!JS_AddNamedRootRT(runtime, &value_, ctorDesc)) {
- tracer.log("JS_AddNamedRootRT failed");
- // TODO(jat): handle errors
- }
- }
-
- /*
- * Push a new JavaScript execution context.
- */
- static void pushContext(JSContext* context) {
- Tracer tracer("JsRootedValue::pushContext");
- tracer.log("pushed context=%08x", unsigned(context));
- contextStack.push(context);
- }
-
- /*
- * Pop a JavaScript execution context from the context stack.
- */
- static void popContext() {
- Tracer tracer("JsRootedValue::popContext");
- JSContext* context = currentContext();
- contextStack.pop();
- tracer.log("popped context=%08x", unsigned(context));
- }
-
-public:
- /*
- * This is a helper class used to push/pop JSContext values automatically,
- * using RAII. Simply create a ContextManager object on the stack and it
- * will push the context at creation time and pop it at destruction time,
- * so you don't have to worry about covering all the exit paths from a
- * function.
- */
- class ContextManager {
- public:
- explicit ContextManager(JSContext* context) {
- JsRootedValue::pushContext(context);
- }
- ~ContextManager() {
- JsRootedValue::popContext();
- }
- };
-
- /*
- * This is a helper class to manage short-lived roots on the stack, using
- * RAII to free the roots when no longer needed.
- */
- class Temp {
- private:
- void* ptr_;
- public:
- explicit Temp(void* ptr) : ptr_(ptr) {
- JS_AddNamedRootRT(runtime, ptr_, "temporary root");
- }
- ~Temp() {
- JS_RemoveRootRT(runtime, ptr_);
- }
- };
-
- /*
- * Copy constructor - make another rooted value that refers to the same
- * JavaScript object (or has the same value if a primitive)
- */
- JsRootedValue(const JsRootedValue& rooted_value) : value_(rooted_value.value_)
- {
- constructorHelper("JsRootedValue copy ctor");
- }
-
- /*
- * Create a value with a given jsval value
- */
- JsRootedValue(jsval value) : value_(value)
- {
- constructorHelper("JsRootedValue jsval ctor");
- }
-
- /*
- * Create a void value
- */
- JsRootedValue() : value_(JSVAL_VOID) {
- constructorHelper("JsRootedValue void ctor");
- }
-
- /*
- * Destroy this object.
- */
- ~JsRootedValue() {
- Tracer tracer("~JsRootedValue", this);
- // ignore error since currently it is not possible to fail
- JS_RemoveRootRT(runtime, &value_);
- }
-
- /*
- * Save a pointer to the JSRuntime if we don't have it yet
- */
- static void ensureRuntime(JSContext* context) {
- if(!runtime) runtime = JS_GetRuntime(context);
- }
-
- /*
- * Return the current JavaScript execution context.
- */
- static JSContext* currentContext() {
- Tracer tracer("JsRootedValue::currentContext");
- if (contextStack.empty()) {
- // TODO(jat): better error handling?
- fprintf(stderr, "JsRootedValue::currentContext - context stack empty\n");
- ::abort();
- }
- JSContext* context = contextStack.top();
- tracer.log("context=%08x", unsigned(context));
- return context;
- }
-
- /*
- * Return the underlying JS object
- */
- jsval getValue() const { return value_; }
-
- /*
- * Sets the value of the underlying JS object.
- *
- * Returns false if an error occurred.
- */
- bool setValue(jsval new_value) {
- value_ = new_value;
- return true;
- }
-
- /*
- * Returns true if the underlying value is of some number type.
- */
- bool isNumber() const {
- return JSVAL_IS_NUMBER(value_);
- }
- /*
- * Returns the underlying value as a double.
- * Result is 0.0 if the underlying value is not a number
- * type.
- */
- double getDouble() const {
- jsdouble return_value=0.0;
- // ignore return value -- if it fails, value will remain 0.0
- JS_ValueToNumber(currentContext(), value_, &return_value);
- return double(return_value);
- }
- /*
- * Set the underlying value to a double value.
- *
- * Returns false on failure.
- */
- bool setDouble(double val) {
- jsval js_double;
- if(!JS_NewDoubleValue(currentContext(), jsdouble(val), &js_double)) {
- return false;
- }
- return setValue(js_double);
- }
-
- /*
- * Returns the underlying value as an integer value. Note that the result
- * is undefined if isInt() does not return true.
- */
- int getInt() {
- return JSVAL_TO_INT(value_);
- }
-
- /*
- * Set the underlying value to an integer value.
- *
- * Returns false on failure.
- */
- bool setInt(int val) {
- // check if it fits in 31 bits (ie, top two bits are equal).
- // if not, store it as a double
- if ((val & 0x80000000) != ((val << 1) & 0x80000000)) {
- return setDouble(val);
- } else {
- return setValue(INT_TO_JSVAL(val));
- }
- }
-
- /*
- * Returns true if the underlying value is a boolean.
- */
- bool isBoolean() const {
- return JSVAL_IS_BOOLEAN(value_);
- }
- /*
- * Returns the underlying value as a boolean.
- * Result is undefined if the value is not actually
- * a boolean.
- */
- bool getBoolean() const {
- return value_ != JSVAL_FALSE;
- }
- /*
- * Set the underlying value to a boolean value.
- *
- * Returns false on failure (impossible?).
- */
- bool setBoolean(bool val) {
- return setValue(val ? JSVAL_TRUE : JSVAL_FALSE);
- }
-
- /*
- * Returns true if the underlying value is a string.
- */
- bool isInt() const {
- return JSVAL_IS_INT(value_);
- }
-
- /*
- * Returns true if the underlying value is a string.
- */
- bool isString() const {
- return JSVAL_IS_STRING(value_);
- }
-
- /*
- * Check if the value is a JavaScript String object.
- */
- bool isJavaScriptStringObject() const {
- if (!isObject()) return false;
- ensureStringClass();
- return getObjectClass() == stringClass;
- }
-
- /*
- * Return this value as a string, converting as necessary.
- */
- JSString* asString() const {
- return JS_ValueToString(currentContext(), value_);
- }
-
- /* Returns the string as a JSString pointer.
- * Result is undefined if the value is not actually a string or String object.
- */
- const JSString* getString() const {
- if (JSVAL_IS_STRING(value_)) {
- return JSVAL_TO_STRING(value_);
- }
- return asString();
- }
- /*
- * Returns the string as a zero-terminated array of UTF16 characters.
- * Note that this pointer may become invalid when JS performs GC, so it
- * may only be used without calling other JS functions. Result is
- * undefined if the value is not actually a string.
- */
- const wchar_t* getStringChars() const {
- return reinterpret_cast<const wchar_t*>(JS_GetStringChars(
- const_cast<JSString*>(getString())));
- }
-
- /*
- * Returns the length of the underlying string. Result is undefined
- * if the value is not actually a string.
- */
- int getStringLength() const {
- return JS_GetStringLength(const_cast<JSString*>(getString()));
- }
-
- /*
- * Sets the underlying value, defined by a null-terminated array of UTF16
- * chars.
- *
- * Returns false on failure.
- */
- bool setString(const wchar_t* utf16) {
- JSString* str = JS_NewUCStringCopyZ(currentContext(),
- reinterpret_cast<const jschar*>(utf16));
- return setValue(STRING_TO_JSVAL(str));
- }
-
- /*
- * Sets the underlying value, defined by a counted array of UTF16 chars.
- *
- * Returns false on failure.
- */
- bool setString(const wchar_t* utf16, size_t len) {
- JSString* str = JS_NewUCStringCopyN(currentContext(),
- reinterpret_cast<const jschar*>(utf16), len);
- return setValue(STRING_TO_JSVAL(str));
- }
-
- /*
- * Returns true if the underlying value is an object.
- */
- bool isObject() const {
- return JSVAL_IS_OBJECT(value_);
- }
-
- /*
- * Returns the underlying value as an object.
- * Result is undefined if it is not actually an object.
- */
- JSObject* getObject() const {
- return isObject() ? JSVAL_TO_OBJECT(value_) : 0;
- }
-
- /*
- * Returns the class name of the underlying value.
- *
- * Result is undefined if it is not actually an object.
- */
- const JSClass* getObjectClass() const {
- return isObject() ? JS_GET_CLASS(currentContext(), getObject()) : 0;
- }
-
- /*
- * Sets the underlying value to be an object.
- *
- * Returns false on failure.
- */
- bool setObject(JSObject* obj) {
- return setValue(OBJECT_TO_JSVAL(obj));
- }
-
- /*
- * Returns true if the underlying value is undefined (void).
- */
- bool isUndefined() const {
- return JSVAL_IS_VOID(value_);
- }
-
- /*
- * Sets the underlying value to be undefined (void).
- *
- * Returns false on failure (impossible?)
- */
- bool setUndefined() {
- return setValue(JSVAL_VOID);
- }
-
- /*
- * Returns true if the underlying value is null.
- */
- bool isNull() const {
- return JSVAL_IS_NULL(value_);
- }
- /*
- * Sets the underlying value to be null.
- *
- * Returns false on failure (impossible?)
- */
- bool setNull() {
- return setValue(JSVAL_NULL);
- }
-};
-
-#endif /*JNI_LINUX_JSROOTEDVALUE_H_*/
diff --git a/jni/linux/JsStringWrap.h b/jni/linux/JsStringWrap.h
deleted file mode 100644
index 7ab0ce6..0000000
--- a/jni/linux/JsStringWrap.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef JNI_LINUX_JSSTRINGWRAP_H_
-#define JNI_LINUX_JSSTRINGWRAP_H_
-
-/*
- * Wrapper arouond JavaScript Strings, keeps pointers to unpacked strings
- * and makes sure they are not cleaned up early.
- */
-class JsStringWrap {
- private:
- JSContext* context_;
- JSString* string_;
- const char* bytes_;
- const wchar_t* chars_;
-
- public:
- JsStringWrap(JSContext* context, JSString* str)
- : context_(context), string_(str), bytes_(0), chars_(0) {
- JS_AddRoot(context_, &string_);
- JS_AddRoot(context_, &bytes_);
- JS_AddRoot(context_, &chars_);
- }
- JsStringWrap(JSContext* context, jsval str)
- : context_(context), string_(JSVAL_TO_STRING(str)), bytes_(0), chars_(0) {
- JS_AddRoot(context_, &string_);
- JS_AddRoot(context_, &bytes_);
- JS_AddRoot(context_, &chars_);
- }
- ~JsStringWrap() {
- JS_RemoveRoot(context_, &string_);
- JS_RemoveRoot(context_, &bytes_);
- JS_RemoveRoot(context_, &chars_);
- }
- const char* bytes() {
- if (!bytes_) bytes_ = JS_GetStringBytes(string_);
- return bytes_;
- }
- const wchar_t* chars() {
- if (!chars_) {
- chars_ = reinterpret_cast<wchar_t*>(JS_GetStringChars(string_));
- }
- return chars_;
- }
- int length() {
- return JS_GetStringLength(string_);
- }
-};
-
-#endif // JNI_LINUX_JSSTRINGWRAP_H_
diff --git a/jni/linux/JsValueMoz.cpp b/jni/linux/JsValueMoz.cpp
deleted file mode 100644
index 195306c..0000000
--- a/jni/linux/JsValueMoz.cpp
+++ /dev/null
@@ -1,993 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include <jni.h>
-#include "JsRootedValue.h"
-#include "gwt-jni.h"
-#include "ExternalWrapper.h"
-#include "Tracer.h"
-
-// include javah-generated header to make sure things match
-#include "JsValueMoz.h"
-
-/*
- * Returns the value of a field on a Java object.
- *
- * context - JavaScript context
- * clazz - class of obj
- * obj - Java object to retreive field from
- * fieldName - name of field on Java object to retrieve
- *
- * Returns null on failure. Caller is responsible for deleting
- * returned JsRootedValue when done with it.
- */
-static JsRootedValue* GetFieldAsRootedValue(JSContext* cx, jclass clazz,
- jobject obj, jstring fieldName)
-{
- Tracer tracer("GetFieldAsRootedValue");
- JsRootedValue::ContextManager context(cx);
- jmethodID getFieldMeth = savedJNIEnv->GetMethodID(clazz, "getField",
- "(Ljava/lang/String;I)V");
- if (!getFieldMeth || savedJNIEnv->ExceptionCheck()) {
- return 0;
- }
-
- JsRootedValue* jsRootedValue = new JsRootedValue();
- savedJNIEnv->CallVoidMethod(obj, getFieldMeth, fieldName,
- reinterpret_cast<jint>(jsRootedValue));
- if (savedJNIEnv->ExceptionCheck()) {
- delete jsRootedValue;
- return 0;
- }
- return jsRootedValue;
-}
-
-/*
- * Sets the value of a field on a Java object.
- *
- * context - JavaScript context
- * clazz - class of obj
- * obj - Java object to store into field
- * fieldName - name of field on Java object to store into
- * jsRootedValue - the value to store in the field
- *
- * returns true on success, false on failure
- */
-static bool SetFieldFromRootedValue(JSContext* cx, jclass clazz,
- jobject obj, jstring fieldName, JsRootedValue* jsRootedValue)
-{
- Tracer tracer("SetFieldAsRootedValue");
- JsRootedValue::ContextManager context(cx);
- jmethodID getFieldMeth = savedJNIEnv->GetMethodID(clazz, "setField",
- "(Ljava/lang/String;I)V");
- if (!getFieldMeth || savedJNIEnv->ExceptionCheck()) {
- return false;
- }
-
- savedJNIEnv->CallVoidMethod(obj, getFieldMeth, fieldName,
- reinterpret_cast<jint>(jsRootedValue));
- if (savedJNIEnv->ExceptionCheck()) {
- return false;
- }
-
- return true;
-}
-
-/*
- * Throws a HostedModeException with the specified message.
- */
-static void ThrowHostedModeException(JNIEnv* jniEnv, const char* msg) {
- jclass exceptionClass
- = jniEnv->FindClass("com/google/gwt/dev/shell/HostedModeException");
- jniEnv->ThrowNew(exceptionClass, msg);
-}
-
-/*
- * Types of jsvals.
- */
-enum JsValueType {
- JSVAL_TYPE_VOID=0,
- JSVAL_TYPE_NULL,
- JSVAL_TYPE_BOOLEAN,
- JSVAL_TYPE_NUMBER,
- JSVAL_TYPE_STRING,
- JSVAL_TYPE_OBJECT,
- JSVAL_TYPE_UNKNOWN,
-};
-
-/*
- * Names of jsval types -- must match the order of the enum above.
- */
-static const char* JsValueTypeStrings[]={
- "undefined",
- "null",
- "boolean",
- "number",
- "string",
- "object",
- "unknown",
-};
-
-/*
- * Return the type of a jsval.
- */
-static JsValueType GetValueType(jsval val) {
- if(JSVAL_IS_VOID(val)) {
- return JSVAL_TYPE_VOID;
- } else if(JSVAL_IS_NULL(val)) {
- return JSVAL_TYPE_NULL;
- } else if(JSVAL_IS_BOOLEAN(val)) {
- return JSVAL_TYPE_BOOLEAN;
- } else if(JSVAL_IS_NUMBER(val)) {
- return JSVAL_TYPE_NUMBER;
- } else if(JSVAL_IS_STRING(val)) {
- return JSVAL_TYPE_STRING;
- } else if(JSVAL_IS_OBJECT(val)) {
- return JSVAL_TYPE_OBJECT;
- } else {
- return JSVAL_TYPE_UNKNOWN;
- }
-}
-
-/*
- * Called from JavaScript to call a Java method that has previously been
- * wrapped. See _setWrappedFunction for use.
- */
-static JSBool invokeJavaMethod(JSContext *cx, JSObject *obj, uintN argc,
- jsval *argv, jsval *rval)
-{
- Tracer tracer("invokeJavaMethod");
- JsRootedValue::ContextManager context(cx);
-
- // I kid you not; this is how XPConnect gets their function object so they can
- // multiplex dispatch the call from a common site. See XPCDispObject.cpp(466)
- //
- // I now have a secondary confirmation that this trick is legit.
- // brandon@mozilla.org writes:
- //
- // argv[-2] is part of the JS API, unabstracted. Just as argv[0] is the
- // first argument (if argc != 0), argv[-1] is the |this| parameter (equal
- // to OBJECT_TO_JSVAL(obj) in a native method with the standard |obj|
- // second formal parameter name), and argv[-2] is the callee object, tagged
- // as a jsval.
- if (JS_TypeOfValue(cx, argv[-2]) != JSTYPE_FUNCTION) {
- tracer.setFail("not a function type");
- return JS_FALSE;
- }
- JSObject* funObj = JSVAL_TO_OBJECT(argv[-2]);
-
- // Pull the wrapper object out of the funObj's reserved slot
- jsval jsCleanupObj;
- if (!JS_GetReservedSlot(cx, funObj, 0, &jsCleanupObj)) {
- tracer.setFail("JS_GetReservedSlot failed");
- return JS_FALSE;
- }
- JSObject* cleanupObj = JSVAL_TO_OBJECT(jsCleanupObj);
- if (!cleanupObj) {
- tracer.setFail("cleanupObj is null");
- return JS_FALSE;
- }
-
- // Get DispatchMethod instance out of the wrapper object
- jobject dispMeth =
- NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, cleanupObj));
- if (!dispMeth) {
- tracer.setFail("dispMeth is null");
- return JS_FALSE;
- }
- jclass dispClass = savedJNIEnv->GetObjectClass(dispMeth);
- if (!dispClass || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("GetObjectClass returns null");
- return JS_FALSE;
- }
-
- // lookup the invoke method on the dispatch object
- jmethodID invokeID =
- savedJNIEnv->GetMethodID(dispClass, "invoke", "(I[II)V");
- if (!invokeID || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("GetMethodID failed");
- return JS_FALSE;
- }
-
- // create an array of integers to hold the JsRootedValue pointers passed
- // to the invoke method
- jintArray args = savedJNIEnv->NewIntArray(argc);
- if (!args || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("NewIntArray failed");
- return JS_FALSE;
- }
-
- // these arguments are already rooted by the JS interpreter, but we
- // can't easily take advantage of that without complicating the JsRootedValue
- // interface.
-
- // argv[-1] is OBJECT_TO_JSVAL(this)
- JsRootedValue* jsThis = new JsRootedValue(argv[-1]);
- tracer.log("jsthis=%08x, RV=%08x", unsigned(argv[-1]), unsigned(jsThis));
-
- // create JsRootedValues for arguments
- JsRootedValue *jsArgs[argc];
- for (uintN i = 0; i < argc; ++i) {
- jsArgs[i] = new JsRootedValue(argv[i]);
- }
- savedJNIEnv->SetIntArrayRegion(args, 0, argc,
- reinterpret_cast<jint*>(jsArgs));
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("SetIntArrayRegion failed");
- return JS_FALSE;
- }
-
- // slot for return value
- JsRootedValue* jsReturnVal = new JsRootedValue();
-
- // TODO(jat): small window here where invocation may fail before Java
- // takes ownership of the JsRootedValue objects. One solution would be
- // to reference-count them between Java and C++ (so the reference count
- // would always be 0, 1, or 2). Also setField has a similar problem.
- // I plan to fix this when switching away from Java holding pointers to
- // C++ objects as part of the fix for 64-bit support (which we could
- // accomplish inefficiently by changing int to long everywhere, but there
- // are other 64-bit issues to resolve and we need to reduce the number of
- // roots the JS interpreter has to search.
-
- // call Java method
- savedJNIEnv->CallVoidMethod(dispMeth, invokeID, reinterpret_cast<int>(jsThis),
- args, reinterpret_cast<int>(jsReturnVal));
-
- JSBool returnValue = JS_TRUE;
-
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.log("dispMeth=%08x", unsigned(dispMeth));
- tracer.setFail("java exception is active:");
- jobject exception = savedJNIEnv->ExceptionOccurred();
- if (exception) {
- fprintf(stderr, "Exception occurred in MethodDispatch.invoke:\n");
- savedJNIEnv->ExceptionDescribe();
- savedJNIEnv->DeleteLocalRef(exception);
- }
- returnValue = JS_FALSE;
- } else if (JS_IsExceptionPending(cx)) {
- tracer.setFail("js exception is active");
- returnValue = JS_FALSE;
- }
-
- // extract return value
- *rval = jsReturnVal->getValue();
-
-#if 0
- // NOTE: C++ objects are not cleaned up here because Java now owns them.
- // TODO(jat): if reference-counted, they *do* need to be Released here.
-
- // free JsRootedValues
- for (uintN i = 0; i < argc; ++i) {
- delete jsArgs[i];
- }
- delete jsThis;
- delete jsReturnVal;
-#endif
-
- return returnValue;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _createJsRootedValue()
- * Signature: (I)I
- */
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1createJsRootedValue
- (JNIEnv* jniEnv, jclass, jint jsval)
-{
- Tracer tracer("JsValueMoz._createJsRootedValue");
- JsRootedValue* jsRootedValue = new JsRootedValue(jsval);
- return NS_REINTERPRET_CAST(jint, jsRootedValue);
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _copyJsRootedValue()
- * Signature: (I)I
- */
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1copyJsRootedValue
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- const JsRootedValue* jsRootedValue = reinterpret_cast<const JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._copyJsRootedValue", jsRootedValue);
- JsRootedValue* newRootedValue = new JsRootedValue(*jsRootedValue);
- return NS_REINTERPRET_CAST(jint, newRootedValue);
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _destroyJsRootedValue()
- * Signature: (I)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1destroyJsRootedValue
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._destroyJsRootedValue", jsRootedValue);
- delete jsRootedValue;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getBoolean()
- * Signature: (I)Z
- *
- * TODO(jat): unboxing Javascript Boolean type?
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getBoolean
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getBoolean", jsRootedValue);
- return jsRootedValue->getBoolean();
-}
-
-/**
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getInt()
- * Signature: (I)I
- *
- * @see com.google.gwt.dev.shell.moz.JsValueMoz#getInt()
- */
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getInt
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getInt", jsRootedValue);
- int val = jsRootedValue->getInt();
- tracer.log("value=%d", val);
- return val;
-}
-
-/**
- * Return a Javascript number as a Java double.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getNumber()
- * Signature: (I)D
- */
-extern "C" JNIEXPORT jdouble JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getNumber
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getNumber", jsRootedValue);
- return jsRootedValue->getDouble();
-}
-
-/**
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getJsval()
- * Signature: (I)I
- */
-extern "C" JNIEXPORT jint JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getJsval
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getObjectPointer", jsRootedValue);
- int val = jsRootedValue->getValue();
- tracer.log("value=%d", val);
- return val;
-}
-
-/**
- * Return a Javascript string as a Java string.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getString()
- * Signature: (I)Ljava/lang/String;
- *
- * Note that this relies on jschar being assignment compatible with jchar
- */
-extern "C" JNIEXPORT jstring JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getString", jsRootedValue);
- const JSString* str = jsRootedValue->getString();
- int len = JS_GetStringLength(const_cast<JSString*>(str));
- jstring javaStr =jniEnv->NewString(reinterpret_cast<const jchar*>(
- JS_GetStringChars(const_cast<JSString*>(str))), len);
- return javaStr;
-}
-
-/*
- * Returns a human-readable Java string describing the type of a
- * JavaScript object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getTypeString
- * Signature: (I)Ljava/lang/String;
- */
-extern "C" JNIEXPORT jstring JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getTypeString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getTypeString", jsRootedValue);
- jsval val = jsRootedValue->getValue();
- JSContext* cx = JsRootedValue::currentContext();
- JsValueType valueType = GetValueType(val);
- const char* typeString = 0;
- char buf[256];
- if(valueType == JSVAL_TYPE_OBJECT) {
- JSObject* jsObject = JSVAL_TO_OBJECT(val);
- JSClass* objClass = JS_GET_CLASS(cx, jsObject);
- if (JS_InstanceOf(cx, jsObject,
- &gwt_nativewrapper_class, 0)) {
- typeString = "Java object";
- } else {
- snprintf(buf, sizeof(buf), "class %s", objClass->name);
- typeString = buf;
- }
- } else {
- typeString = JsValueTypeStrings[valueType];
- }
- jstring returnValue = jniEnv->NewStringUTF(typeString);
- return returnValue;
-}
-
-/*
- * Unwraps a wrapped Java object from a JS object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _getWrappedJavaObject
- * Signature: (I)Ljava/lang/Object;
- */
-extern "C" JNIEXPORT jobject JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1getWrappedJavaObject
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._getWrappedJavaObject", jsRootedValue);
- JSObject* jsObject = jsRootedValue->getObject();
- if(!jsObject) {
- tracer.throwHostedModeException(jniEnv, "Javascript value not an object");
- return 0;
- }
- JSContext* cx = JsRootedValue::currentContext();
- if(!JS_InstanceOf(cx, jsObject, &gwt_nativewrapper_class, 0)) {
- tracer.throwHostedModeException(jniEnv,
- "Javascript object not a Java object");
- return 0;
- }
- jobject javaObject
- = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, jsObject));
- return javaObject;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isBoolean()
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isBoolean
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isBoolean", jsRootedValue);
- return jsRootedValue->isBoolean();
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isInt()
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isInt
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isBoolean", jsRootedValue);
- return jsRootedValue->isInt();
-}
-
-/*
- * Checks if a JS object is a JavaScript object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isJavaScriptObject
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isJavaScriptObject
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isJavaScriptObject", jsRootedValue);
- jsval val = jsRootedValue->getValue();
- bool returnValue = false;
- if(JSVAL_IS_OBJECT(val)) {
- JSObject* jsObject = JSVAL_TO_OBJECT(val);
- returnValue = !JS_InstanceOf(JsRootedValue::currentContext(), jsObject,
- &gwt_nativewrapper_class, 0);
- tracer.log("jsobject=%08x, isJSObject=%s", unsigned(jsObject),
- returnValue ? "true" : "false");
- } else {
- tracer.log("not an object");
- }
- return returnValue;
-}
-
-/*
- * Checks if a JS object is a JavaScript String object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isJavaScriptString
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isJavaScriptString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isJavaScriptString", jsRootedValue);
- bool returnValue = jsRootedValue->isJavaScriptStringObject();
- tracer.log("value=%s", returnValue ? "true" : "false");
- return returnValue;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isNull()
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isNull
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isNull", jsRootedValue);
- return jsRootedValue->isNull();
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isNumber()
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isNumber
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isNumber", jsRootedValue);
- return jsRootedValue->isNumber();
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isString()
- * Signature: (I)Z
- *
- * Handles the case of JavaScript String objects as well
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isString", jsRootedValue);
- return jsRootedValue->isString();
-}
-
-/*
- * Checks if a JS object is undefined (void)
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isUndefined
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isUndefined
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isUndefined", jsRootedValue);
- return jsRootedValue->isUndefined();
-}
-
-/*
- * Checks if a JS object is a wrapped Java object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _isWrappedJavaObject
- * Signature: (I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1isWrappedJavaObject
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._isWrappedJavaObject", jsRootedValue);
- jsval val = jsRootedValue->getValue();
- bool returnValue = false;
- if(JSVAL_IS_OBJECT(val)) {
- JSObject* jsObject = JSVAL_TO_OBJECT(val);
- returnValue = JS_InstanceOf(JsRootedValue::currentContext(), jsObject,
- &gwt_nativewrapper_class, 0);
- tracer.log("jsobject=%08x, wrappedJava=%s", unsigned(jsObject),
- returnValue ? "true" : "false");
- } else {
- tracer.log("not an object");
- }
- return returnValue;
-}
-
-/*
- * Set the JavaScript value to be a boolean of the supplied value.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setBoolean()
- * Signature: (IZ)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setBoolean
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jboolean val)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setBoolean", jsRootedValue);
- jsRootedValue->setBoolean(val == JNI_TRUE);
- return;
-}
-
-/*
- * Set the JavaScript value to be a double of the supplied value.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setDouble()
- * Signature: (ID)V
- */
-extern "C" JNIEXPORT void
-JNICALL Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setDouble
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jdouble val)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setDouble", jsRootedValue);
- if(!jsRootedValue->setDouble(val)) {
- tracer.throwHostedModeException(jniEnv, "Unable to allocate JS double");
- return;
- }
-}
-
-/*
- * Set the Javascript value to be an integer.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setInt()
- * Signature: (II)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setInt
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jint val)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setInt", jsRootedValue);
- tracer.log("val=%d", val);
- jsRootedValue->setInt(val);
-}
-
-/*
- * Set the Javascript value to be another JsRootedValue's value.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setJsRootedValue()
- * Signature: (II)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setJsRootedValue
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jint jsOtherRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- JsRootedValue* jsOtherRootedValue = reinterpret_cast<JsRootedValue*>
- (jsOtherRootedValueInt);
- Tracer tracer("JsValueMoz._setJsRootedValue", jsRootedValue);
- jsRootedValue->setValue(jsOtherRootedValue->getValue());
-}
-
-/*
- * Set the Javascript value to a specific jsval.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setJsval()
- * Signature: (II)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setJsval
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jint jsval)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setJsval", jsRootedValue);
- jsRootedValue->setValue(jsval);
-}
-
-/*
- * Set the JavaScript value to be null.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setNull()
- * Signature: (I)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setNull
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setNull", jsRootedValue);
- jsRootedValue->setNull();
-}
-
-/*
- * Set the JavaScript value to be a string of the supplied value.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setString()
- * Signature: (ILjava/lang/String;)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jstring val)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setString", jsRootedValue);
- JStringWrap strVal(jniEnv, val);
- const jchar* stringUTF16 = strVal.jstr();
- if(!stringUTF16) {
- tracer.throwHostedModeException(jniEnv, "Unable to retrieve Java string");
- return;
- }
- tracer.log("string=%s", strVal.str());
- if(!jsRootedValue->setString(reinterpret_cast<const wchar_t*>(stringUTF16),
- strVal.length())) {
- tracer.throwHostedModeException(jniEnv, "Unable to allocate JS string");
- return;
- }
-}
-
-/*
- * Set the JavaScript value to be undefined (void).
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setUndefined()
- * Signature: (I)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setUndefined
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setUndefined", jsRootedValue);
- jsRootedValue->setUndefined();
-}
-
-/*
- * Wraps a Java object in a JS object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setWrappedJavaObject
- * Signature: (ILjava/lang/Object)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setWrappedJavaObject
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jobject obj)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setWrappedJavaObject", jsRootedValue);
- JSContext* cx = JsRootedValue::currentContext();
- JSObject* scriptWindow = JS_GetGlobalObject(cx);
- JSObject* newObj = JS_NewObject(cx, &gwt_nativewrapper_class, 0,
- scriptWindow);
- if (!newObj) {
- tracer.throwHostedModeException(jniEnv,
- "Unable to allocate JS object to wrap Java object");
- return;
- }
- // Save in output value so it won't get GCed.
- jsRootedValue->setObject(newObj);
- tracer.log("jsobject=%08x", unsigned(newObj));
-
- // This is collected when the gwt_nativewrapper_class destructor runs.
- jobject dispObjRef = jniEnv->NewGlobalRef(obj);
- if (!dispObjRef || jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv,
- "Unable to allocate global reference for JS wrapper");
- return;
- }
- if (!JS_SetPrivate(cx, newObj, dispObjRef)) {
- jniEnv->DeleteGlobalRef(dispObjRef);
- tracer.throwHostedModeException(jniEnv,
- "Unable to allocate global reference for JS wrapper");
- return;
- }
- // forcibly setup a "toString" method to override the default
- jclass dispClass = jniEnv->GetObjectClass(obj);
- if (jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv, "Can't get object class");
- return;
- }
- jmethodID getFieldMeth = jniEnv->GetMethodID(dispClass, "getField",
- "(Ljava/lang/String;I)V");
- if (!getFieldMeth || jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv, "Can't get getField method");
- return;
- }
- jstring ident = jniEnv->NewStringUTF("@java.lang.Object::toString()");
- if (!ident || jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv,
- "Can't create Java string for toString method name");
- return;
- }
- // allocate a new root to hold the result of the getField call
- JsRootedValue* toStringFunc = new JsRootedValue();
- jniEnv->CallVoidMethod(obj, getFieldMeth, ident,
- NS_REINTERPRET_CAST(jint, toStringFunc));
- if (toStringFunc->isUndefined() || jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv, "getField(toString) failed");
- return;
- }
- if (!JS_DefineProperty(cx, newObj, "toString", toStringFunc->getValue(),
- JS_PropertyStub, JS_PropertyStub, JSPROP_READONLY | JSPROP_PERMANENT)) {
- tracer.throwHostedModeException(jniEnv, "Can't define JS toString method");
- return;
- }
-}
-
-/*
- * Wraps a Java function in a JS object.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _setWrappedFunction
- * Signature: (ILjava/lang/String;Lcom/google/gwt/dev/shell/moz/DispatchMethod;)V
- */
-extern "C" JNIEXPORT void JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1setWrappedFunction
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt, jstring methodName,
- jobject dispatchMethod)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._setWrappedFunction", jsRootedValue);
- JSContext* cx = JsRootedValue::currentContext();
- JSObject* scriptWindow = JS_GetGlobalObject(cx);
- JStringWrap nameStr(jniEnv, methodName);
- if (!nameStr.str()) {
- tracer.throwHostedModeException(jniEnv,
- "null method name passed to setWrappedFunction");
- return;
- }
- tracer.log("JsRootedValue=%08x, method=%s, obj=%08x", jsRootedValueInt,
- nameStr.str(), unsigned(dispatchMethod));
- JSFunction* function = JS_NewFunction(cx, invokeJavaMethod, 0,
- JSFUN_LAMBDA, 0, nameStr.str());
- if (!function) {
- tracer.throwHostedModeException(jniEnv, "JS_NewFunction failed");
- return;
- }
- JSObject* funObj = JS_GetFunctionObject(function);
- if (!funObj) {
- tracer.throwHostedModeException(jniEnv, "JS_GetFunctionObject failed");
- return;
- }
- // Save in output value so it won't get GCed.
- jsRootedValue->setObject(funObj);
-
- // Create a cleanup object to hold and clean up dispMeth
- JSObject* cleanupObj = JS_NewObject(cx, &gwt_functionwrapper_class, 0,
- scriptWindow);
- if (!cleanupObj) {
- tracer.throwHostedModeException(jniEnv, "JS_NewObject failed");
- return;
- }
- tracer.log("funObj=%08x, cleanupObj=%08x", unsigned(funObj),
- unsigned(cleanupObj));
- // Store the cleanup object in funObj's reserved slot; now GC protected.
- if(!JS_SetReservedSlot(cx, funObj, 0, OBJECT_TO_JSVAL(cleanupObj))) {
- tracer.throwHostedModeException(jniEnv, "JS_SetReservedSlot failed");
- return;
- }
- jobject dispMethRef = jniEnv->NewGlobalRef(dispatchMethod);
- if (!dispMethRef || jniEnv->ExceptionCheck()) {
- tracer.throwHostedModeException(jniEnv,
- "NewGlobalRef(dispatchMethod) failed");
- return;
- }
- // Store our global ref in the wrapper object
- if (!JS_SetPrivate(cx, cleanupObj, dispMethRef)) {
- jniEnv->DeleteGlobalRef(dispMethRef);
- tracer.throwHostedModeException(jniEnv, "JS_SetPrivate(cleanupObj) failed");
- return;
- }
-}
-
-/*
- * Returns a JavaScript value as a string.
- *
- * Class: com_google_gwt_dev_shell_moz_JsValueMoz
- * Method: _toString
- * Signature: (I)Ljava/lang/String;
- */
-extern "C" JNIEXPORT jstring JNICALL
-Java_com_google_gwt_dev_shell_moz_JsValueMoz__1toString
- (JNIEnv* jniEnv, jclass, jint jsRootedValueInt)
-{
- JsRootedValue* jsRootedValue = reinterpret_cast<JsRootedValue*>
- (jsRootedValueInt);
- Tracer tracer("JsValueMoz._toString", jsRootedValue);
- jsval val = jsRootedValue->getValue();
- JSContext* cx = JsRootedValue::currentContext();
-
- // if it is a JavaScript object that has a toString member function
- // call that, otherwise call JS_ValueToString
- if(JSVAL_IS_OBJECT(val)) {
- JSObject* jsObject = JSVAL_TO_OBJECT(val);
- jsval fval;
- jsval rval;
- if (!JS_InstanceOf(cx, jsObject, &gwt_nativewrapper_class, 0)
- && JS_GetProperty(cx, jsObject, "toString", &fval)
- && JS_ValueToFunction(cx, fval)
- && JS_CallFunctionValue(cx, jsObject, fval, 0, 0, &rval)) {
- // all the steps succeeded, so use the result of toString() instead
- // of the value for JS_ValueToString below
- val = rval;
- }
- }
- JSString* str = JS_ValueToString(cx, val);
- if (!str) {
- return 0;
- }
- int len = JS_GetStringLength(str);
- jstring javaStr =jniEnv->NewString(reinterpret_cast<const jchar*>(
- JS_GetStringChars(str)), len);
- return javaStr;
-}
diff --git a/jni/linux/LowLevelMoz.cpp b/jni/linux/LowLevelMoz.cpp
deleted file mode 100644
index 9c3aba2..0000000
--- a/jni/linux/LowLevelMoz.cpp
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-// Mozilla-specific hosted-mode methods
-
-// Define to log debug-level output rather than just warnings.
-#define DEBUG
-
-#include <cstdio>
-#include <cstdarg>
-#include <cwchar>
-
-// Mozilla header files
-#include "mozilla-headers.h"
-
-#include <jni.h>
-#include "gwt-jni.h"
-#include "JsRootedValue.h"
-#include "ExternalWrapper.h"
-#include "Tracer.h"
-#include "JsStringWrap.h"
-
-/*
- * Debug definitions -- define FILETRACE to have debug output written to
- * a file named gwt-ll.log, or JAVATRACE to have debug output passed to the
- * Java LowLevelMoz.trace method.
- */
-#ifdef ENABLE_TRACING
-#define FILETRACE
-//#define JAVATRACE
-#endif
-
-// include javah-generated header to make sure we match
-#include "LowLevelMoz.h"
-
-JNIEnv* savedJNIEnv = 0;
-jclass lowLevelMozClass;
-
-// Only include debugging code if we are tracing somewhere.
-#ifdef ENABLE_TRACING
-
-/*
- * Template so vsnprintf/vswprintf can be used interchangeably in the
- * append_sprintf template below.
- * buf - pointer to the start of the output buffer
- * len - maximum number of characters to write into the buffer
- * (including the null terminator)
- * fmt - printf-style format string
- * args - stdarg-style variable arguments list
- * Returns the number of characters written (excluding the null terminator)
- * or -1 if an error occurred.
- *
- * Note that %lc and %ls are only legal in the wchar_t implementation.
- */
-template<class charT>
-int safe_vsprintf(charT* buf, size_t len, const charT* fmt, va_list args);
-
-// specialization for char that maps to vsnprintf
-template<>
-inline int safe_vsprintf<char>(char* buf, size_t len, const char* fmt,
- va_list args) {
- return ::vsnprintf(buf, len, fmt, args);
-}
-
-// specialization for wchar_t that maps to vswprintf
-template<>
-inline int safe_vsprintf<wchar_t>(wchar_t* buf, size_t len, const wchar_t* fmt,
- va_list args) {
- return ::vswprintf(buf, len, fmt, args);
-}
-
-/*
- * Safely append to a string buffer, updating the output pointer and always
- * reserving the last character of the buffer for a null terminator.
- * bufStart - pointer to the start of the output buffer
- * bufEnd - pointer just past the end of the output buffer
- * fmt - format string
- * additional arguments as passed to *printf
- * Returns the number of characters actually written, not including the null
- * terminator. Nothing is written, including the null terminator, if the
- * buffer start points beyond the output buffer.
- *
- * Templated to work with any character type that has a safe_vsprintf
- * implementation.
- */
-template<class charT>
-static int append_sprintf(charT* bufStart, const charT* bufEnd,
- const charT* fmt, ...) {
- va_list args;
- va_start(args, fmt); // initialize variable arguments list
- // compute space left in buffer: -1 for null terminator
- int maxlen = bufEnd - bufStart - 1;
- if (maxlen <= 0) return 0;
- int n = safe_vsprintf(bufStart, maxlen, fmt, args);
- va_end(args);
- if (n > maxlen) {
- n = maxlen;
- }
- bufStart[n] = 0;
- return n;
-}
-
-/*
- * Log a given jsval with a prefix.
- * cx - JSContext for the JS execution context to use
- * val - jsval to print
- * prefix - string to print before the value, defaults to empty string
- *
- * TODO(jat): this whole printf-style logging needs to be replaced, but we
- * run into library version issues if we use C++ iostreams so we would need
- * to implement our own equivalent. Given that this code is all likely to
- * be rewritten for out-of-process hosted mode, it seems unlikely to be worth
- * the effort until that is completed.
- */
-void PrintJSValue(JSContext* cx, jsval val, char* prefix="") {
- JSType type = JS_TypeOfValue(cx, val);
- const char* typeString=JS_GetTypeName(cx, type);
- static const int BUF_SIZE = 256;
- char buf[BUF_SIZE];
- const char *bufEnd = buf + BUF_SIZE;
- char* p = buf;
- p += append_sprintf(p, bufEnd, "%s%s", prefix, typeString);
- switch(type) {
- case JSTYPE_VOID:
- break;
- case JSTYPE_BOOLEAN:
- p += append_sprintf(p, bufEnd, ": %s",
- JSVAL_TO_BOOLEAN(val) ? "true" : "false");
- break;
- case JSTYPE_NUMBER:
- if (JSVAL_IS_INT(val)) {
- p += append_sprintf(p, bufEnd, ": %d", JSVAL_TO_INT(val));
- } else {
- p += append_sprintf(p, bufEnd, ": %lf", (double)*JSVAL_TO_DOUBLE(val));
- }
- break;
- case JSTYPE_OBJECT: {
- JSObject* obj = JSVAL_TO_OBJECT(val);
- if (!JSVAL_IS_OBJECT(val)) break;
- JSClass* clazz = obj ? JS_GET_CLASS(cx, obj) : 0;
- p += append_sprintf(p, bufEnd, " @ %08x, class %s",
- (unsigned)obj, clazz ? clazz->name : "<null>");
- break;
- }
- case JSTYPE_FUNCTION:
- case JSTYPE_LIMIT:
- break;
- case JSTYPE_STRING: {
- /*
- * TODO(jat): support JS strings with international characters
- */
- JsStringWrap str(cx, JSVAL_TO_STRING(val));
- p += append_sprintf(p, bufEnd, ": %.*s", str.length(), str.bytes());
- break;
- }
- }
- Tracer::log("%s", buf);
-}
-#else
-// Include a null version just to keep from cluttering up call sites.
-static inline void PrintJSValue(JSContext* cx, jsval val, char* prefix="") { }
-#endif
-
-
-static bool InitGlobals(JNIEnv* env, jclass llClass) {
- if (savedJNIEnv)
- return false;
-
-#ifdef FILETRACE
- Tracer::setFile("gwt-ll.log");
-#endif // FILETRACE
-
-#ifdef JAVATRACE
- Tracer::setJava(env, llClass);
-#endif // JAVATRACE
-
-#ifdef DEBUG
- Tracer::setLevel(Tracer::LEVEL_DEBUG);
-#endif
-
- savedJNIEnv = env;
- lowLevelMozClass = static_cast<jclass>(env->NewGlobalRef(llClass));
- return true;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_LowLevelMoz
- * Method: _executeScriptWithInfo
- * Signature: (ILjava/lang/String;Ljava/lang/String;I)Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_LowLevelMoz__1executeScriptWithInfo
- (JNIEnv* env, jclass llClass, jint scriptObjectInt, jstring code,
- jstring file, jint line)
-{
- Tracer tracer("LowLevelMoz._executeScriptWithInfo");
- JStringWrap jcode(env, code);
- if (!jcode.jstr()) {
- tracer.setFail("null code string");
- return JNI_FALSE;
- }
- JStringWrap jfile(env, file);
- if (!jfile.str()) {
- tracer.setFail("null file name");
- return JNI_FALSE;
- }
- tracer.log("code=%s, file=%s, line=%d", jcode.str(), jfile.str(), line);
- JSContext* cx = JsRootedValue::currentContext();
- nsCOMPtr<nsIScriptContext> scriptContext(GetScriptContextFromJSContext(cx));
-
- nsIScriptGlobalObject* scriptObject =
- NS_REINTERPRET_CAST(nsIScriptGlobalObject*, scriptObjectInt);
- JSObject* scriptWindow =
- reinterpret_cast<JSObject*>(scriptObject->GetGlobalJSObject());
- nsXPIDLString scriptString;
- scriptString = jcode.jstr();
-
- nsXPIDLString aRetValue;
- PRBool aIsUndefined;
- if (NS_FAILED(scriptContext->EvaluateString(scriptString, scriptWindow, 0,
- jfile.str(), line, 0, aRetValue, &aIsUndefined))) {
- tracer.setFail("EvaluateString failed");
- return JNI_FALSE;
- }
- return JNI_TRUE;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_LowLevelMoz
- * Method: _invoke
- * Signature: (ILjava/lang/String;I[I)I
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_LowLevelMoz__1invoke
- (JNIEnv* env, jclass, jint scriptObjInt, jstring methodName, jint jsThisInt,
- jintArray jsArgsInt, jint jsRetValInt)
-{
- Tracer tracer("LowLevelMoz._invoke");
-
- JStringWrap methodStr(env, methodName);
- if (!methodStr.str()) {
- tracer.setFail("null method name");
- return JNI_FALSE;
- }
- JsRootedValue* jsThisRV = reinterpret_cast<JsRootedValue*>(jsThisInt);
- jint jsArgc = env->GetArrayLength(jsArgsInt);
- tracer.log("method=%s, jsthis=%08x, #args=%d", methodStr.str(), jsThisInt,
- jsArgc);
- JSContext* cx = JsRootedValue::currentContext();
- nsIScriptGlobalObject* scriptObject =
- NS_REINTERPRET_CAST(nsIScriptGlobalObject*, scriptObjInt);
- JSObject* scriptWindow
- = reinterpret_cast<JSObject*>(scriptObject->GetGlobalJSObject());
-
- jsval fval;
- if (!JS_GetProperty(cx, scriptWindow, methodStr.str(), &fval)) {
- tracer.setFail("JS_GetProperty(method) failed");
- return JNI_FALSE;
- }
- JSFunction* jsFunction = JS_ValueToFunction(cx, fval);
- if (!jsFunction) {
- tracer.setFail("JS_ValueToFunction failed");
- return JNI_FALSE;
- }
-
- // extract arguments in jsval form
- nsAutoArrayPtr<jint> jsargvals(new jint[jsArgc]);
- if (!jsargvals) {
- tracer.setFail("failed to allocate arg array");
- return JNI_FALSE;
- }
- env->GetIntArrayRegion(jsArgsInt, 0, jsArgc, jsargvals);
- if (env->ExceptionCheck()) {
- tracer.setFail("copy from Java array failed");
- return JNI_FALSE;
- }
- nsAutoArrayPtr<jsval> jsargs(new jsval[jsArgc]);
- for (int i = 0; i < jsArgc; ++i) {
- JsRootedValue* arg = reinterpret_cast<JsRootedValue*>(jsargvals[i]);
- jsargs[i] = arg->getValue();
- }
-
- jsval jsrval;
- JSObject* jsThis;
- if (jsThisRV->isNull()) {
- jsThis = scriptWindow;
- } else {
- jsThis = jsThisRV->getObject();
- }
-
- PrintJSValue(cx, OBJECT_TO_JSVAL(jsThis), "jsThis=");
- for (int i = 0; i < jsArgc; ++i) {
- char buf[256];
- snprintf(buf, sizeof(buf), "arg[%d]=", i);
- PrintJSValue(cx, jsargs[i], buf);
- }
- //tracer.log("fval = %08x, args=%08x", fval, jsargs.get());
- if (!JS_CallFunctionValue(cx, jsThis, fval, jsArgc, jsargs.get(), &jsrval)) {
- tracer.setFail("JS_CallFunctionValue failed");
- return JNI_FALSE;
- }
-
- PrintJSValue(cx, jsrval, "return value=");
- JsRootedValue* returnVal = reinterpret_cast<JsRootedValue*>(jsRetValInt);
- returnVal->setValue(jsrval);
- return JNI_TRUE;
-}
-
-
-/*
- * Class: com_google_gwt_dev_shell_moz_LowLevelMoz
- * Method: _raiseJavaScriptException
- * Signature: ()Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_LowLevelMoz__1raiseJavaScriptException
- (JNIEnv* env, jclass)
-{
- Tracer tracer("LowLevelMoz._raiseJavaScriptException");
- JS_SetPendingException(JsRootedValue::currentContext(), JSVAL_NULL);
- return JNI_TRUE;
-}
-
-/*
- * Class: com_google_gwt_dev_shell_moz_LowLevelMoz
- * Method: _registerExternalFactoryHandler
- * Signature: ()Z
- */
-extern "C" JNIEXPORT jboolean JNICALL
-Java_com_google_gwt_dev_shell_moz_LowLevelMoz__1registerExternalFactoryHandler
- (JNIEnv* env, jclass llClass)
-{
- if (!InitGlobals(env, llClass))
- return JNI_FALSE;
-
- // tracing isn't setup until after InitGlobals is called
- Tracer tracer("LowLevelMoz._registerExternalFactoryHandler");
-
- char buf[256];
- sprintf(buf, " jniEnv=%08x, llClass=%08x", (unsigned)env, (unsigned)llClass);
- tracer.log(buf);
-
- // Register "window.external" as our own class
- if (NS_FAILED(nsComponentManager::RegisterFactory(
- kGwtExternalCID, "externalFactory", GWT_EXTERNAL_CONTRACTID,
- new nsRpExternalFactory(), PR_TRUE))) {
- tracer.setFail("RegisterFactory failed");
- return JNI_FALSE;
- }
-
- nsCOMPtr<nsICategoryManager> categoryManager =
- do_GetService(NS_CATEGORYMANAGER_CONTRACTID);
- if (!categoryManager) {
- tracer.setFail("unable to get category manager");
- return JNI_FALSE;
- }
-
- nsXPIDLCString previous;
- if (NS_FAILED(categoryManager->AddCategoryEntry(
- JAVASCRIPT_GLOBAL_PROPERTY_CATEGORY, "external", GWT_EXTERNAL_CONTRACTID,
- PR_TRUE, PR_TRUE, getter_Copies(previous)))) {
- tracer.setFail("AddCategoryEntry failed");
- return JNI_FALSE;
- }
-
- return JNI_TRUE;
-}
diff --git a/jni/linux/Makefile b/jni/linux/Makefile
deleted file mode 100644
index 8b3a8cf..0000000
--- a/jni/linux/Makefile
+++ /dev/null
@@ -1,153 +0,0 @@
-# Copyright 2007 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-##
-# Target settings
-##
-#JAVA_HOME
-#JAVA_HOME=/usr/lib/j2sdk1.5-sun
-
-# set GWT_TOOLS only if it is not already defined
-GWT_TOOLS ?= ../../../tools
-
-GWT_ROOT = ../../
-OBJDIR := $(GWT_ROOT)build/out/jni/linux/
-OUTDIR := $(GWT_ROOT)build/jni/linux/
-OUT := $(OUTDIR)libgwt-ll.so
-STAGING := $(GWT_ROOT)build/staging/gwt-linux-0.0.0/
-
-##
-# The location to get .class files from for javah
-##
-CLASSDIR := $(GWT_ROOT)build/out/dev/linux/bin
-
-# use this instead if you want to use eclipse to build the class files during
-# development
-#CLASSDIR := $(GWT_ROOT)eclipse/dev/linux/bin
-
-##
-# Tools
-##
-CXX := g++
-AR := ar
-STRIP := strip
-LD := $(CXX)
-JAVAH := $(JAVA_HOME)/bin/javah
-
-##
-# List of source, object, and dependency paths plus the path to them
-##
-SRCDIRS := ./:../core/
-VPATH := .:../core
-SRCS := gwt-ll.cpp LowLevelMoz.cpp JsValueMoz.cpp Tracer.cpp \
- ExternalWrapper.cpp NativeWrapper.cpp JsRootedValue.cpp
-OBJS := $(addprefix $(OBJDIR),$(SRCS:.cpp=.o))
-DEPS := $(addprefix $(OBJDIR),$(SRCS:.cpp=.d))
-
-MOZDIR = $(GWT_TOOLS)/sdk/mozilla-1.7.12
-MOZINC = $(MOZDIR)/include
-MOZLIB = $(MOZDIR)/lib
-
-##
-# Include path configuration
-##
-SYSINCS := \
- $(JAVA_HOME)/include \
- $(JAVA_HOME)/include/linux \
- $(MOZINC) $(MOZINC)/extra
-
-INCS := $(OBJDIR)
-INCS := $(addprefix -I ,$(INCS)) $(addprefix -isystem ,$(SYSINCS))
-
-##
-# Libraries and library path
-##
-LIBS = xpcomglue_s
-LIBPATH = -L$(MOZLIB)
-LIBS := $(addprefix -l,$(LIBS))
-
-# for notes on auto-dependency generation, see
-# http://make.paulandlesley.org/autodep.html
-# -MP obviates the need for sed hackery
-CFLAGS := -ggdb -m32 -Os -fPIC -fno-omit-frame-pointer -fno-strict-aliasing -D_REENTRANT -MMD -MP -Wno-system-headers $(CFLAGS)
-LDFLAGS := -ggdb -m32 -s -fPIC -fno-omit-frame-pointer -fno-strict-aliasing -D_REENTRANT -Wl,-shared-gcc $(LDFLAGS)
-
-#-------------------------------------------------------------------------------
-# Rules
-#-------------------------------------------------------------------------------
-
-##
-# default rule
-##
-all: $(OUT)
-
-# install into prebuilt directory
-install: $(OUT)
- cp $(OUT) prebuilt/
-
-##
-# Include the dependency rules
-##
--include $(DEPS)
-
-##
-# javah-generated headers for native methods
-##
-$(OBJDIR)LowLevelMoz.h : $(CLASSDIR)/com/google/gwt/dev/shell/moz/LowLevelMoz.class
- $(JAVAH) -classpath $(CLASSDIR) -o $(OBJDIR)LowLevelMoz.h com.google.gwt.dev.shell.moz.LowLevelMoz
-
-$(OBJDIR)JsValueMoz.h : $(CLASSDIR)/com/google/gwt/dev/shell/moz/JsValueMoz.class
- $(JAVAH) -classpath $(CLASSDIR) -o $(OBJDIR)JsValueMoz.h com.google.gwt.dev.shell.moz.JsValueMoz
-
-##
-# Dependency rules for generated headers
-# TODO(jat): autogenerate these and others
-##
-$(OBJDIR)LowLevelMoz.o: $(OBJDIR)LowLevelMoz.h $(JAVA_HOME)/include/jni.h
-$(OBJDIR)JsValueMoz.o: $(OBJDIR)JsValueMoz.h $(JAVA_HOME)/include/jni.h
-
-##
-# Compilation rule for cpp files
-##
-$(OBJDIR)%.o : $(SRCDIR)%.cpp
- @[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
- $(CXX) -c $(CFLAGS) $(INCS) -o $@ $<
-
-# generate preprocessed output files upon request for debugging
-%.i : $(SRCDIR)%.cpp
- $(CXX) -E $(CFLAGS) $(INCS) -o $@ $<
-
-%.I : $(SRCDIR)%.cpp
- $(CXX) -E -dDI $(CFLAGS) $(INCS) -o $@ $<
-
-##
-# Actual output file
-##
-$(OUT): $(OBJS) $(MOZLIB)/libxpcomglue_s.a
- @[ -d $(OUTDIR) ] || mkdir -p $(OUTDIR)
- $(LD) -shared $(LDFLAGS) $(LIBPATH) -o $@ $^ $(LIBS)
- $(STRIP) --strip-unneeded $@
-
-##
-# copy to staging area for hosted-mode development
-##
-staging: $(OUT)
- @[ -d $(STAGING) ] || mkdir -p $(STAGING)
- cp $(OUT) $(STAGING)
-
-##
-# Clean rule
-##
-clean:
- @-rm -rf $(OBJDIR) $(OUT)
diff --git a/jni/linux/NativeWrapper.cpp b/jni/linux/NativeWrapper.cpp
deleted file mode 100644
index 38958d0..0000000
--- a/jni/linux/NativeWrapper.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-/*
- * Defines the JavaScript classes gwt_nativewrapper_class and
- * gwt_functionwrapper_class, which interface via JNI to Java objects.
- */
-
-#include <jni.h>
-#include "JsRootedValue.h"
-#include "gwt-jni.h"
-#include "Tracer.h"
-
-/*
- * Helper function to get reference Java attributes from Javascript.
- *
- * cx - JSContext pointer
- * obj - JavaScript object which is a wrapped Java object
- * id - property name, as a jsval string
- * dispClass - output parameter of DispatchMethod subclass
- * dispObj - output parameter of Java object
- * jident - output parameter of property name as a Java string
- */
-static JSBool getJavaPropertyStats(JSContext *cx, JSObject *obj, jsval id,
- jclass& dispClass, jobject& dispObj, jstring& jident)
-{
- Tracer tracer("getJavaPropertyStats");
- if (!JSVAL_IS_STRING(id)) {
- tracer.setFail("id is not a string");
- return JS_FALSE;
- }
-
- jident = savedJNIEnv->NewString(JS_GetStringChars(JSVAL_TO_STRING(id)),
- JS_GetStringLength(JSVAL_TO_STRING(id)));
- if (!jident || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("unable to create Java string");
- return JS_FALSE;
- }
-
- dispObj = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- if (!dispObj) {
- tracer.setFail("can't get dispatch object");
- return JS_FALSE;
- }
-
- dispClass = savedJNIEnv->GetObjectClass(dispObj);
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("can't get class of dispatch object");
- return JS_FALSE;
- }
-
- return JS_TRUE;
-}
-
-/*
- * Returns the value of a field on a Java object.
- *
- * context - JavaScript context
- * clazz - class of obj
- * obj - Java object to retreive field from
- * fieldName - name of field on Java object to retrieve
- *
- * Returns null on failure. Caller is responsible for deleting
- * returned JsRootedValue when done with it.
- */
-static JsRootedValue* GetFieldAsRootedValue(JSContext* cx, jclass clazz,
- jobject obj, jstring fieldName)
-{
- Tracer tracer("GetFieldAsRootedValue");
- JsRootedValue::ContextManager context(cx);
- jmethodID getFieldMeth = savedJNIEnv->GetMethodID(clazz, "getField",
- "(Ljava/lang/String;I)V");
- if (!getFieldMeth || savedJNIEnv->ExceptionCheck()) {
- return 0;
- }
-
- JsRootedValue* jsRootedValue = new JsRootedValue();
- savedJNIEnv->CallVoidMethod(obj, getFieldMeth, fieldName,
- reinterpret_cast<jint>(jsRootedValue));
- if (savedJNIEnv->ExceptionCheck()) {
- delete jsRootedValue;
- return 0;
- }
- return jsRootedValue;
-}
-
-/*
- * Sets the value of a field on a Java object.
- *
- * context - JavaScript context
- * clazz - class of obj
- * obj - Java object to store into field
- * fieldName - name of field on Java object to store into
- * jsRootedValue - the value to store in the field
- *
- * returns true on success, false on failure
- */
-static bool SetFieldFromRootedValue(JSContext* cx, jclass clazz,
- jobject obj, jstring fieldName, JsRootedValue* jsRootedValue)
-{
- Tracer tracer("SetFieldAsRootedValue");
- JsRootedValue::ContextManager context(cx);
- jmethodID getFieldMeth = savedJNIEnv->GetMethodID(clazz, "setField",
- "(Ljava/lang/String;I)V");
- if (!getFieldMeth || savedJNIEnv->ExceptionCheck()) {
- return false;
- }
-
- savedJNIEnv->CallVoidMethod(obj, getFieldMeth, fieldName,
- reinterpret_cast<jint>(jsRootedValue));
- if (savedJNIEnv->ExceptionCheck()) {
- return false;
- }
-
- return true;
-}
-
-static JSBool JS_DLL_CALLBACK gwt_nativewrapper_getProperty(JSContext *cx,
- JSObject *obj, jsval id, jsval *vp)
-{
- Tracer tracer("gwt_nativewrapper_getProperty");
- tracer.log("context=%08x, obj=%08x", unsigned(cx), unsigned(obj));
- JsRootedValue::ContextManager context(cx);
-
- jclass dispClass;
- jobject dispObj;
- jstring ident;
- if (!getJavaPropertyStats(cx, obj, id, dispClass, dispObj, ident)) {
- tracer.setFail("getJavaPropertyStats failed");
- return JS_FALSE;
- }
- JsRootedValue* js_rooted_value = GetFieldAsRootedValue(cx, dispClass,
- dispObj, ident);
- if (!js_rooted_value) {
- tracer.setFail("can't get field");
- return JS_FALSE;
- }
- *vp = js_rooted_value->getValue();
- return JS_TRUE;
-}
-
-static void JS_DLL_CALLBACK gwt_nativewrapper_finalize(JSContext *cx,
- JSObject *obj)
-{
- Tracer tracer("gwt_nativewrapper_finalize");
- jobject dispObj = NS_REINTERPRET_CAST(jobject, JS_GetPrivate(cx, obj));
- if (dispObj) {
- // Remove this pairing from the global map.
- jmethodID removeMethod = savedJNIEnv->GetStaticMethodID(lowLevelMozClass, "removeJsvalForObject",
- "(Ljava/lang/Object;)V");
- if (!removeMethod || savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("Cannot GetMethodID for removeJsvalForObject");
- return;
- }
- savedJNIEnv->CallStaticVoidMethod(lowLevelMozClass, removeMethod, dispObj);
- if (savedJNIEnv->ExceptionCheck()) {
- tracer.setFail("Exception calling removeJsvalForObject");
- return;
- }
- savedJNIEnv->DeleteGlobalRef(dispObj);
- }
-}
-
-static JSBool JS_DLL_CALLBACK gwt_nativewrapper_setProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
-{
- Tracer tracer("gwt_nativewrapper_setProperty");
- tracer.log("context=%08x", unsigned(cx));
- JsRootedValue::ContextManager context(cx);
- jclass dispClass;
- jobject dispObj;
- jstring ident;
- if (!getJavaPropertyStats(cx, obj, id, dispClass, dispObj, ident)) {
- tracer.setFail("getJavaPropertyStats failed");
- return JS_FALSE;
- }
- JsRootedValue* js_rooted_value = new JsRootedValue(*vp);
- if (!SetFieldFromRootedValue(cx, dispClass, dispObj, ident,
- js_rooted_value)) {
- tracer.setFail("can't set field");
- return JS_FALSE;
- }
- return JS_TRUE;
-}
-
-JSClass gwt_nativewrapper_class = {
- "gwt_nativewrapper_class", JSCLASS_HAS_PRIVATE,
- JS_PropertyStub, JS_PropertyStub, gwt_nativewrapper_getProperty,
- gwt_nativewrapper_setProperty, JS_EnumerateStub, JS_ResolveStub,
- JS_ConvertStub, gwt_nativewrapper_finalize,
- JSCLASS_NO_OPTIONAL_MEMBERS
-};
-
-JSClass gwt_functionwrapper_class = {
- "gwt_functionwrapper_class", JSCLASS_HAS_PRIVATE,
- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
- JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, gwt_nativewrapper_finalize,
- JSCLASS_NO_OPTIONAL_MEMBERS
-};
diff --git a/jni/linux/Tracer.cpp b/jni/linux/Tracer.cpp
deleted file mode 100644
index e5f3189..0000000
--- a/jni/linux/Tracer.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include "Tracer.h"
-
-#ifdef ENABLE_TRACING
-
-// initialize static fields
-FILE* Tracer::outfp = 0;
-JNIEnv* Tracer::jniEnv = 0;
-jclass Tracer::traceClass;
-jmethodID Tracer::traceMethod;
-int Tracer::indentation = 0;
-Tracer::LogLevel Tracer::logLevel = Tracer::LEVEL_WARNING;
-
-/*
- * Sets a JNI environment and Java class to pass trace messages to.
- *
- * env - JNI environment to use for trace calls
- * clazz - Java class, which must provide static void trace(String)
- */
-bool Tracer::setJava(JNIEnv* env, jclass clazz) {
- jniEnv = env;
- if (!env) {
- return true;
- }
- traceClass = static_cast<jclass>(env->NewGlobalRef(clazz));
- if (!traceClass || env->ExceptionCheck()) {
- return false;
- }
- traceMethod = env->GetStaticMethodID(traceClass, "trace",
- "(Ljava/lang/String;)V");
- if (!traceMethod || env->ExceptionCheck()) {
- return false;
- }
-
- jstring msg = jniEnv->NewStringUTF("== Java trace started ==");
- jniEnv->CallStaticVoidMethod(traceClass, traceMethod, msg);
- return true;
-}
-
-#endif // ENABLE_TRACING
-
-/*
- * Throw a HostedModeException and log a failure message.
- *
- * Creates a new HostedModeException with the failure message,
- * and also logs the failure message
- *
- * env - JNI environment to throw the exception in
- * msg - failure message
- */
-void Tracer::throwHostedModeException(JNIEnv* env, const char* msg) {
-#ifdef ENABLE_TRACING
- setFail(msg);
-#endif // ENABLE_TRACING
- jclass exceptionClass
- = env->FindClass("com/google/gwt/dev/shell/HostedModeException");
- env->ThrowNew(exceptionClass, msg);
-}
diff --git a/jni/linux/Tracer.h b/jni/linux/Tracer.h
deleted file mode 100644
index ef9fd7d..0000000
--- a/jni/linux/Tracer.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-#ifndef JNI_LINUX_TRACER_H_
-#define JNI_LINUX_TRACER_H_
-
-#include <cstdio>
-#include <cstdarg>
-#include <cstring>
-#include <jni.h>
-
-// comment this out to remove almost all runtime overhead (with usual compiler
-// support) from tracing.
-//#define ENABLE_TRACING
-
-/*
- * Utility class for tracing. This class is intended to be used as follows:
- *
- * {
- * Tracer tracer("method name");
- * ... do work
- * if (fail) {
- * tracer.setFail("failure explanation");
- * return;
- * }
- * if (fail2) {
- * tracer.throwHostedModeException("failure explanation");
- * return;
- * }
- * return;
- * }
- *
- * The class automatically logs an enter message when it is created, as well
- * as leave/fail messages when it is destroyed. Logging is performed to a
- * file or to a Java static member function on a class (or both) -- these
- * are configured by using static member functions setFile() and setJava().
- *
- * This class knows about the Java class
- * com.google.gwt.dev.shell.HostedModeException
- * and throws a new instance of that exception if requested.
- */
-class Tracer {
-public:
- enum LogLevel {
- LEVEL_ERROR = 0,
- LEVEL_WARNING,
- LEVEL_NOTICE,
- LEVEL_INFO,
- LEVEL_DEBUG,
- LEVEL_DEBUG_V1,
- LEVEL_DEBUG_V2,
- };
-protected:
-#ifdef ENABLE_TRACING
- // static variables that specify where logging is performed. This are
- // set by calling setFile() and setJava().
- static FILE* outfp;
- static JNIEnv* jniEnv;
- static jclass traceClass;
- static jmethodID traceMethod;
- static int indentation;
- static LogLevel logLevel;
-
- // method is set when the instance is created.
- const char* method_;
- // fail_msg is set to indicate a failure has occurred.
- const char* fail_msg_;
- // level of this trace object
- LogLevel log_level_;
-#endif
-
-public:
- /*
- * Set the logging level.
- */
- static void setLevel(LogLevel level) {
-#ifdef ENABLE_TRACING
- logLevel = level;
-#endif
- }
-
-protected:
- /*
- * Log a message (with supplied prefix) to the configured file.
- * Only called if a file was specified and successfully opened for writing.
- */
- static void logFile(const char* msg) {
-#ifdef ENABLE_TRACING
- for (int i = 0; i < indentation; ++i) {
- putc(' ', outfp);
- }
- fputs(msg, outfp);
- putc('\n', outfp);
- fflush(outfp);
-#else
- (void)msg; // avoid unused warning
-#endif
- }
-
- /*
- * Log a message (with supplied prefix) to the configured Java class.
- * Only called if a file was specified and successfully accessed.
- *
- * Call static void trace(String msg) on the configured class.
- */
- static void logJava(const char* msg) {
-#ifdef ENABLE_TRACING
- // TODO(jat): fixed buffer size
- char buf[512];
- for (int i = 0; (i < indentation) && (i < int(sizeof(buf))); ++i) {
- buf[i] = ' ';
- }
- strncpy(buf + indentation, msg, sizeof(buf) - indentation);
- buf[sizeof(buf) - 1] = 0; // ensure null termination
- jstring str = jniEnv->NewStringUTF(buf);
- jniEnv->CallStaticVoidMethod(traceClass, traceMethod, str);
-#else
- (void)msg; // avoid unused warning
-#endif
- }
-
- /*
- * Log a message to a file and/or class with the default logging level.
- *
- * If the preprocessor symbol DISABLE_TRACING has been defined, this is
- * completely removed from the code path.
- */
- void logPrefix(const char* prefix) {
-#ifdef ENABLE_TRACING
- logPrefix(prefix, log_level_);
-#else
- (void)prefix; // avoid unused warning
-#endif
- }
-
- /*
- * Log a message to a file and/or class.
- *
- * If the preprocessor symbol DISABLE_TRACING has been defined, this is
- * completely removed from the code path.
- */
- void logPrefix(const char* prefix, LogLevel level) {
-#ifdef ENABLE_TRACING
- if (level>logLevel) return;
- log("%-5.5s %s%s%s", prefix, method_, fail_msg_ ? ": " : "",
- fail_msg_ ? fail_msg_ : "");
-#endif
- }
-
-public:
- /*
- * Create an instance with the specified method name and no failure
- * message. Log an ENTER message.
- */
- Tracer(const char* method, LogLevel log_level = LEVEL_ERROR)
-#ifdef ENABLE_TRACING
- : method_(method), fail_msg_(0), log_level_(log_level) {
- log("ENTER %s", method);
- indentation++;
-#else
- { (void)method; (void)log_level; // avoid unused warnings
-#endif
- }
-
- /*
- * Create an instance with the specified method name and no failure
- * message. Log an ENTER message and the this pointer.
- */
- Tracer(const char* method, const void* objThis,
- LogLevel log_level = LEVEL_ERROR)
-#ifdef ENABLE_TRACING
- : method_(method), fail_msg_(0), log_level_(log_level) {
- log("ENTER %s(this=%08x)", method, unsigned(objThis));
- indentation++;
-#else
- { (void)method; (void)objThis; (void)log_level; // avoid unused warnings
-#endif
- }
-
- /*
- * Destroy the instance and log a fail or leave message.
- */
- ~Tracer() {
-#ifdef ENABLE_TRACING
- --indentation;
- if(fail_msg_) {
- logPrefix("*FAIL", LEVEL_ERROR);
- } else {
- logPrefix("LEAVE");
- }
-#endif
- }
-
- /*
- * Specify a filename to receive logging output. Close any previously
- * opened file. If a null filename is passed, disable logging to a
- * file.
- *
- * filename - the file path to receive logging output. This file is
- * truncated if it already exists.
- *
- * Returns false on failure.
- */
- static bool setFile(const char* filename) {
-#ifdef ENABLE_TRACING
- if (outfp) {
- fclose(outfp);
- outfp = 0;
- }
- if (!filename) {
- return true;
- }
- outfp = fopen(filename, "w");
- if (!outfp) {
- return false;
- }
- fprintf(outfp, "== started logging ==\n");
- fflush(outfp);
-#else
- (void)filename; // avoid unused warning
-#endif
- return true;
- }
-
- /*
- * Specify a Java class to receive logging output. The supplied class
- * must have a static void trace(String) member function which is called
- * for output. Logging to a Java class is disabled if the supplied JNI
- * environment is null.
- *
- * env - JNI environment
- * clazz - the Java class to receive logging output
- *
- * Returns false on failure.
- */
- static bool setJava(JNIEnv* env, jclass clazz)
-#ifdef ENABLE_TRACING
- ;
-#else
- // inline a null body if we aren't debugging; avoid unused warnings
- { (void)env; (void)clazz; return true; }
-#endif
-
- /*
- * Set a failure message, overwriting any previously specified failure
- * message. Passing a null string will remove any previous failure
- * notification.
- */
- void setFail(const char* fail_msg) {
-#ifdef ENABLE_TRACING
- fail_msg_ = fail_msg;
-#else
- (void)fail_msg; // avoid unused warning
-#endif
- }
-
- /*
- * Throw a Java HostedModeException as well as set a failure message to
- * be logged.
- *
- * env - JNI environment to throw exception into
- * fail_msg - failure message
- */
- void throwHostedModeException(JNIEnv* env, const char* fail_msg);
-
- /*
- * Log an arbitrary message.
- */
- static void log(const char* format, ...) {
-#ifdef ENABLE_TRACING
- va_list args;
- va_start(args, format);
- char msg[512]; // TODO(jat): fixed size buffer
- vsnprintf(msg, sizeof(msg), format, args);
- msg[sizeof(msg) - 1] = 0; // ensure null termination
- if(outfp) logFile(msg);
- if(jniEnv) logJava(msg);
- va_end(args);
-#else
- (void)format; // avoid unused warning
-#endif
- }
-};
-
-#endif /* JNI_LINUX_TRACER_H_ */
diff --git a/jni/linux/build.xml b/jni/linux/build.xml
deleted file mode 100755
index 5f0db6b..0000000
--- a/jni/linux/build.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="jni-linux" default="build" basedir=".">
- <property name="gwt.root" location="../.." />
- <property name="project.tail" value="jni/linux" />
- <import file="${gwt.root}/common.ant.xml" />
-
- <target name="build" description="Builds a JNI lib">
- <mkdir dir="${project.jni}" />
- <!-- TODO: Actually build this from source! -->
- <copy todir="${project.jni}">
- <fileset dir="prebuilt" />
- </copy>
- </target>
-
- <target name="clean" description="Cleans this project's intermediate and output files">
- <delete dir="${project.build}" failonerror="false" />
- <delete dir="${project.jni}" failonerror="false" />
- </target>
-</project>
diff --git a/jni/linux/gwt-jni.h b/jni/linux/gwt-jni.h
deleted file mode 100644
index c477f1c..0000000
--- a/jni/linux/gwt-jni.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-#ifndef JNI_LINUX_GWT_JNI_H_
-#define JNI_LINUX_GWT_JNI_H_
-
-#include <jni.h>
-#include "JsRootedValue.h"
-#include "JStringWrap.h"
-
-extern JNIEnv* savedJNIEnv;
-extern jclass lowLevelMozClass;
-
-extern nsCID kGwtExternalCID;
-
-// JavaScript class objects
-extern JSClass gwt_nativewrapper_class;
-extern JSClass gwt_functionwrapper_class;
-
-#endif /*JNI_LINUX_GWT_JNI_H_*/
diff --git a/jni/linux/mozilla-headers.h b/jni/linux/mozilla-headers.h
deleted file mode 100644
index 6259b41..0000000
--- a/jni/linux/mozilla-headers.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-// include all of the necessary Mozilla headers.
-#include "mozilla-config.h"
-#include "nsIServiceManagerUtils.h"
-#include "nsComponentManagerUtils.h"
-#include "nsICategoryManager.h"
-#include "nsIScriptNameSpaceManager.h"
-#include "nsIScriptObjectOwner.h"
-#include "nsIScriptGlobalObject.h"
-#include "nsIScriptContext.h"
-#include "nsIDOMWindow.h"
-#include "nsIXPConnect.h"
-#include "nsIFactory.h"
-#include "nsCOMPtr.h"
-#include "nsAutoPtr.h"
diff --git a/jni/linux/prebuilt/libgwt-ll.so b/jni/linux/prebuilt/libgwt-ll.so
deleted file mode 100755
index 97ead651..0000000
--- a/jni/linux/prebuilt/libgwt-ll.so
+++ /dev/null
Binary files differ
diff --git a/jni/mac/JStringWrap.h b/jni/mac/JStringWrap.h
deleted file mode 100644
index e17981f..0000000
--- a/jni/mac/JStringWrap.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-#ifndef JSTRINGWRAP_H
-#define JSTRINGWRAP_H
-
-#include <jni.h>
-
-/*
- * Wrap a Java String and automatically clean up temporary storage allocated
- * for accessing its contents.
- */
-struct JStringWrap
-{
- JStringWrap(JNIEnv* env, jstring str): env(env), s(str), p(0), jp(0) { }
- ~JStringWrap() {
- if (p) env->ReleaseStringUTFChars(s, p);
- if (jp) env->ReleaseStringChars(s, jp);
- }
- const char* str() { if (!p) p = env->GetStringUTFChars(s, 0); return p; }
- const jchar* jstr() { if (!jp) jp = env->GetStringChars(s, 0); return jp; }
- jsize length() { return env->GetStringLength(s); }
-private:
- JNIEnv* env;
- jstring s;
- const char* p;
- const jchar* jp;
-};
-
-#endif
diff --git a/jni/mac/Makefile b/jni/mac/Makefile
deleted file mode 100644
index 867b511..0000000
--- a/jni/mac/Makefile
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright 2008 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-CC = g++
-JAVAH = javah
-
-##
-# Try a GWT_TOOLS default if it isn't set
-##
-GWT_TOOLS ?= ../../../tools
-GWT_ROOT ?= ../..
-
-##
-# The location to get .class files for javah
-##
-CLASSDIR := $(GWT_ROOT)/build/out/dev/mac/bin
-
-##
-# External SWT products.
-##
-SWT_ORIGINAL_SRC = $(GWT_TOOLS)/lib/eclipse/org.eclipse.swt.carbon-macosx-3.2.1.src.zip
-SWT_PATCH_DIR = ./swt-build
-SWT_LIBS=$(SWT_PATCH_DIR)/libswt-webkit-carbon-3235.jnilib \
- $(SWT_PATCH_DIR)/libswt-agl-carbon-3235.jnilib \
- $(SWT_PATCH_DIR)/libswt-carbon-3235.jnilib \
- $(SWT_PATCH_DIR)/libswt-pi-carbon-3235.jnilib
-
-GWT_LL_LIB = libgwt-ll.jnilib
-GWT_LL_OBJS = gwt-ll.o java-dispatch.o gwt-webkit.o trace.o
-GWT_LL_JNI = gwt-webkit.h
-
-TARGETS = $(GWT_LL_LIB) $(SWT_LIBS)
-ARCHS = -arch i386 -arch ppc
-CFLAGS = -I/System/Library/Frameworks/JavaScriptCore.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers
-LFLAGS = -bundle -framework JavaScriptCore
-
-ALL : $(TARGETS)
-
-##
-# Unpack and patch SWT source.
-##
-$(SWT_PATCH_DIR): $(SWT_ORIGINAL_SRC) ./org.eclipse.swt/webkit.c
- unzip $(SWT_ORIGINAL_SRC) -d $(SWT_PATCH_DIR)
- cp ./org.eclipse.swt/webkit.c $(SWT_PATCH_DIR)
-
-##
-# Build SWT.
-##
-$(SWT_LIBS):$(SWT_PATCH_DIR)
- make -C $(SWT_PATCH_DIR) -f make_macosx.mak
-
-##
-# Build core gwt-ll object.
-##
-gwt-ll.o : ../core/gwt-ll.cpp
- $(CC) -c -Wall -o $@ $(ARCHS) $(CFLAGS) $<
-
-##
-# General coff target.
-##
-%.o : %.cpp
- $(CC) -c -Wall -o $@ $(ARCHS) $(CFLAGS) $<
-
-##
-# Generate JNI Header
-##
-gwt-webkit.h : $(CLASSDIR)/com/google/gwt/dev/shell/mac/LowLevelSaf.class
- $(JAVAH) -classpath $(CLASSDIR) -o gwt-webkit.h com.google.gwt.dev.shell.mac.LowLevelSaf
-
-##
-# Build gwt-ll library.
-##
-$(GWT_LL_LIB) : $(GWT_LL_JNI) $(GWT_LL_OBJS)
- $(CC) -Wall -o $@ $(ARCHS) $(LFLAGS) $(GWT_LL_OBJS)
-
-clean:
- rm -f $(GWT_LL_JNI) $(GWT_LL_OBJS) $(TARGETS)
- rm -rf $(SWT_PATCH_DIR)
diff --git a/jni/mac/build.xml b/jni/mac/build.xml
deleted file mode 100755
index 66b6580..0000000
--- a/jni/mac/build.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="jni-mac" default="build" basedir=".">
- <property name="gwt.root" location="../.." />
- <property name="project.tail" value="jni/mac" />
- <import file="${gwt.root}/common.ant.xml" />
-
- <target name="build" description="Builds a JNI lib">
- <mkdir dir="${project.jni}" />
- <!-- TODO: Actually build this from source! -->
- <copy todir="${project.jni}">
- <fileset dir="prebuilt" />
- </copy>
- </target>
-
- <target name="clean" description="Cleans this project's intermediate and output files">
- <delete dir="${project.build}" failonerror="false" />
- <delete dir="${project.jni}" failonerror="false" />
- </target>
-</project>
diff --git a/jni/mac/gwt-webkit.cpp b/jni/mac/gwt-webkit.cpp
deleted file mode 100644
index 477b312..0000000
--- a/jni/mac/gwt-webkit.cpp
+++ /dev/null
@@ -1,886 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include <iostream>
-#include <JavaScriptCore/JavaScriptCore.h>
-#include "gwt-webkit.h"
-#include "JStringWrap.h"
-#include "java-dispatch.h"
-#include "trace.h"
-
-
-// http://unixjunkie.blogspot.com/2006/07/access-argc-and-argv-from-anywhere.html
-extern "C" int *_NSGetArgc(void);
-extern "C" char ***_NSGetArgv(void);
-
-/*
- *
- */
-JSContextRef ToJSContextRef(jint context) {
- return reinterpret_cast<JSContextRef>(context);
-}
-
-/*
- *
- */
-JSValueRef ToJSValueRef(jint value) {
- return reinterpret_cast<JSValueRef>(value);
-}
-
-/*
- *
- */
-JSObjectRef ToJSObjectRef(JSContextRef jsContext, jint object,
- JSValueRef* jsException) {
- JSValueRef jsValue = reinterpret_cast<JSValueRef>(object);
- if (!jsValue || !JSValueIsObject(jsContext, jsValue)) {
- return NULL;
- }
- return JSValueToObject(jsContext, jsValue, jsException);
-}
-
-/*
- *
- */
-JSObjectRef ToJSObjectRef(JSContextRef jsContext, JSValueRef jsValue,
- JSValueRef* jsException) {
- if (!jsValue || !JSValueIsObject(jsContext, jsValue)) {
- return NULL;
- }
- return JSValueToObject(jsContext, jsValue, jsException);
-}
-
-/*
- *
- */
-JSObjectRef GetStringConstructor(JSContextRef jsContext,
- JSValueRef* jsException) {
- // This could only be cached relative to jsContext.
- JSStringRef script = JSStringCreateWithUTF8CString("(String)");
- JSValueRef ctorVal = JSEvaluateScript(jsContext, script, NULL, NULL, 0, jsException);
- JSStringRelease(script);
- return ToJSObjectRef(jsContext, ctorVal, jsException);
-}
-
-/*
- *
- */
-bool IsObjectOfStringConstructor(JSContextRef jsContext, JSValueRef jsValue,
- JSValueRef* jsException) {
- JSObjectRef jsObject = ToJSObjectRef(jsContext, jsValue, jsException);
- if (!jsObject) {
- return false;
- }
- JSObjectRef stringCtor = GetStringConstructor(jsContext, jsException);
- if (!stringCtor) {
- return false;
- }
- return JSValueIsInstanceOfConstructor(jsContext, jsObject, stringCtor,
- jsException);
-}
-
-#if 0 // For debugging purposes only.
-void PrintJSString(JSStringRef jsString)
-{
- size_t length = JSStringGetMaximumUTF8CStringSize(jsString);
- char* buffer = new char[length];
- JSStringGetUTF8CString(jsString, buffer, length);
- std::cerr << "JSString: " << buffer << std::endl;
- delete[] buffer;
-}
-
-void PrintJSValue(JSContextRef jsContext, JSValueRef jsValue)
-{
- JSValueRef jsException = NULL;
- JSStringRef jsResult = JSValueToStringCopy(jsContext, jsValue,
- &jsException);
- if (!jsException && jsValue) {
- PrintJSString(jsResult);
- } else {
- std::cerr << "Could not convert the value to string." << std::endl;
- }
-}
-#endif
-
-/*
- *
- */
-JSStringRef ToJSStringRef(JNIEnv* env, jstring jstr) {
- if (!jstr) {
- return NULL;
- }
-
- JStringWrap jstrw(env, jstr);
- if (!jstrw.jstr()) {
- return NULL;
- }
-
- return JSStringCreateWithCharacters(static_cast<const JSChar*>(jstrw.jstr()),
- static_cast<size_t>(jstrw.length()));
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsNull
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsNull(jsContext, jsValue));
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsUndefined
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsUndefined(jsContext, jsValue));
-}
-
-/*
- *
- */
-JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getJsUndefined
- (JNIEnv *env, jclass klass, jint context) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- return static_cast<jint>(NULL);
- }
-
- JSValueRef jsUndefined = JSValueMakeUndefined(jsContext);
- JSValueProtectChecked(jsContext, jsUndefined);
- TR_LEAVE();
- return reinterpret_cast<jint>(jsUndefined);
-}
-
-/*
- *
- */
-JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getJsNull
- (JNIEnv *env, jclass klass, jint context) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- return static_cast<jint>(NULL);
- }
- JSValueRef jsNull = JSValueMakeNull(jsContext);
- JSValueProtectChecked(jsContext, jsNull);
- TR_LEAVE();
- return reinterpret_cast<jint>(jsNull);
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsBoolean
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsBoolean(jsContext, jsValue));
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsNumber
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsNumber(jsContext, jsValue));
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toJsBooleanImpl
- (JNIEnv *env, jclass klass, jint context, jboolean jValue, jintArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueRef jsValue = JSValueMakeBoolean(jsContext, static_cast<bool>(jValue));
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<const jint*>(&jsValue));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
- JSValueProtectChecked(jsContext, jsValue);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_gcUnprotect
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- return;
- }
- JSValueUnprotectChecked(jsContext, jsValue);
- TR_LEAVE();
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toJsNumberImpl
- (JNIEnv *env, jclass klass, jint context, jdouble jValue, jintArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueRef jsValue = JSValueMakeNumber(jsContext, static_cast<jdouble>(jValue));
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<const jint*>(&jsValue));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsValue);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_executeScriptWithInfoImpl
- (JNIEnv *env, jclass klass, jint context, jstring jScript, jstring jUrl,
- jint jLine, jintArray rval) {
- TR_ENTER();
- JSValueRef jsException = NULL;
-
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRef jsScript = ToJSStringRef(env, jScript);
- if (!jsScript) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRef jsUrl = ToJSStringRef(env, jUrl);
-
- // Evaluate will set this to global object.
- JSValueRef jsResult = JSEvaluateScript(jsContext, jsScript, NULL, jsUrl,
- static_cast<int>(jLine), &jsException);
- if (jsException) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRelease(jsScript);
- if (jsUrl) {
- JSStringRelease(jsUrl);
- }
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<const jint*>(&jsResult));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsResult);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toJsStringImpl
- (JNIEnv *env, jclass klass, jint context, jstring jValue, jintArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRef jsString = ToJSStringRef(env, jValue);
- if (!jsString) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueRef jsValue = JSValueMakeString(jsContext, jsString);
- JSStringRelease(jsString);
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<const jint*>(&jsValue));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsValue);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsStringImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jbooleanArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- bool isString = JSValueIsString(jsContext, jsValue);
- if (!isString) {
- JSValueRef jsException = NULL;
- isString = IsObjectOfStringConstructor(jsContext, jsValue, &jsException);
- if (jsException) {
- TR_FAIL();
- return JNI_FALSE;
- }
- }
-
- jboolean jIsString = static_cast<jboolean>(isString);
- env->SetBooleanArrayRegion(rval, 0, 1, &jIsString);
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_invokeImpl
- (JNIEnv *env, jclass klass, jint context, jint scriptValue,
- jstring jMethodName, jint thisVal, jintArray jArgs, jint jArgsLength,
- jintArray rval) {
- TR_ENTER();
-
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSObjectRef jsScriptObj = ToJSObjectRef(jsContext, scriptValue, NULL);
- if (!jsScriptObj) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueRef jsThisVal = ToJSValueRef(thisVal);
- JSObjectRef jsThisObj = NULL;
- // If thisVal is null, jsNull, or jsUndefined use the script object
- // as this.
- if (!jsThisVal || JSValueIsNull(jsContext, jsThisVal)
- || JSValueIsUndefined(jsContext, jsThisVal)) {
- jsThisObj = jsScriptObj;
- } else {
- // If we are given a value, ensure that it is an object.
- jsThisObj = ToJSObjectRef(jsContext, jsThisVal, NULL);
- if (!jsThisObj) {
- TR_FAIL();
- return JNI_FALSE;
- }
- }
-
- JSStringRef jsMethodName = ToJSStringRef(env, jMethodName);
- if (!jsMethodName) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSObjectRef jsMethod = ToJSObjectRef(jsContext, JSObjectGetProperty(jsContext,
- jsScriptObj, jsMethodName, NULL), NULL);
- if (!jsMethod || !JSObjectIsFunction(jsContext, jsMethod)) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRelease(jsMethodName);
-
- // NOTE (knorton): Fix for 64-bit.
- JSValueRef* jsArgs = new JSValueRef[static_cast<size_t>(jArgsLength)];
- env->GetIntArrayRegion(jArgs, 0, jArgsLength,
- reinterpret_cast<jint*>(jsArgs));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- delete[] jsArgs;
- return JNI_FALSE;
- }
-
- JSValueRef jsException = NULL;
- JSValueRef jsResult = JSObjectCallAsFunction(jsContext, jsMethod, jsThisObj,
- static_cast<size_t>(jArgsLength), jsArgs, &jsException);
- if (jsException) {
- TR_FAIL();
- delete[] jsArgs;
- return JNI_FALSE;
- }
- delete[] jsArgs;
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<const jint*>(&jsResult));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsResult);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsObject
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsObject(jsContext, jsValue));
-}
-
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toBooleanImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jbooleanArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- jboolean jResult = static_cast<jboolean>(JSValueToBoolean(jsContext, jsValue));
- env->SetBooleanArrayRegion(rval, 0, 1, &jResult);
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toDoubleImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jdoubleArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueRef jsException = NULL;
- double result = JSValueToNumber(jsContext, jsValue, &jsException);
- if (jsException) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- env->SetDoubleArrayRegion(rval, 0, 1, static_cast<jdouble*>(&result));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_toStringImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jobjectArray rval) {
- TR_ENTER();
- JSValueRef jsException = NULL;
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- jstring jResult = NULL;
- // Convert all objects to their string representation, EXCEPT
- // null and undefined which will be returned as a true NULL.
- if (!JSValueIsNull(jsContext, jsValue) &&
- !JSValueIsUndefined(jsContext, jsValue)) {
- JSStringRef jsResult = JSValueToStringCopy(jsContext, jsValue, &jsException);
- if (jsException) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- jResult = env->NewString(
- static_cast<const jchar*>(JSStringGetCharactersPtr(jsResult)),
- static_cast<jsize>(JSStringGetLength(jsResult)));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSStringRelease(jsResult);
- }
-
- env->SetObjectArrayElement(rval, 0, jResult);
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_wrapDispatchObjectImpl
- (JNIEnv *env, jclass klass, jint context, jobject dispatch, jintArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSObjectRef jsDispatch = gwt::DispatchObjectCreate(jsContext, dispatch);
- if (!jsDispatch || env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<jint*>(&jsDispatch));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsDispatch);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_unwrapDispatchObjectImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jobjectArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- if (!JSValueIsObjectOfClass(jsContext, jsValue, gwt::GetDispatchObjectClass())) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSObjectRef jsObject = ToJSObjectRef(jsContext, jsValue, NULL);
- if (!jsObject) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- env->SetObjectArrayElement(rval, 0, reinterpret_cast<jobject>(JSObjectGetPrivate(jsObject)));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_initImpl
- (JNIEnv *env, jclass klass, jclass dispatchObjectClass,
- jclass dispatchMethodClass, jclass lowLevelSafClass) {
- TR_ENTER();
- TR_LEAVE();
- return static_cast<jboolean>(gwt::Initialize(env, dispatchObjectClass, dispatchMethodClass, lowLevelSafClass));
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_wrapDispatchMethodImpl
- (JNIEnv *env, jclass klass, jint context, jstring name, jobject jDispatch,
- jintArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JStringWrap nameWrap(env, name);
- std::string nameStr(nameWrap.str());
- JSObjectRef jsDispatch = gwt::DispatchMethodCreate(jsContext, nameStr,
- jDispatch);
- if (!jsDispatch || env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<jint*>(&jsDispatch));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsDispatch);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jstring JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getTypeString
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- return NULL;
- }
-
- switch (JSValueGetType(jsContext, jsValue)) {
- case kJSTypeUndefined:
- return env->NewStringUTF("undefined");
- case kJSTypeNull:
- return env->NewStringUTF("null");
- case kJSTypeBoolean:
- return env->NewStringUTF("boolean");
- case kJSTypeNumber:
- return env->NewStringUTF("number");
- case kJSTypeString:
- return env->NewStringUTF("string");
- case kJSTypeObject:
- return (JSValueIsObjectOfClass(jsContext, jsValue, gwt::GetDispatchObjectClass()))
- ? env->NewStringUTF("Java object") : env->NewStringUTF("JavaScript object");
- default:
- return env->NewStringUTF("unknown");
- }
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isDispatchObjectImpl
- (JNIEnv *env, jclass klass, jint context, jint value, jbooleanArray rval) {
- TR_ENTER();
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- jboolean jIsDispatchObject = static_cast<jboolean>(JSValueIsObjectOfClass(
- jsContext, jsValue, gwt::GetDispatchObjectClass()));
- env->SetBooleanArrayRegion(rval, 0, 1, &jIsDispatchObject);
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getArgc
- (JNIEnv *env, jclass klass) {
- return *_NSGetArgc();
-}
-
-/*
- *
- */
-JNIEXPORT jstring JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getArgv
- (JNIEnv *env, jclass klass, jint index) {
- int argc = *_NSGetArgc();
- if (index < 0 || index >= argc) {
- return 0;
- }
- char **argv = *_NSGetArgv();
- return env->NewStringUTF(argv[index]);
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_getGlobalJsObjectImpl
- (JNIEnv *env, jclass klass, jint context, jintArray rval) {
- TR_ENTER();
-
- JSContextRef jsContext = ToJSContextRef(context);
- if (!jsContext) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSObjectRef jsGlobalObject = JSContextGetGlobalObject(jsContext);
- env->SetIntArrayRegion(rval, 0, 1, reinterpret_cast<jint*>(&jsGlobalObject));
- if (env->ExceptionCheck()) {
- TR_FAIL();
- return JNI_FALSE;
- }
-
- JSValueProtectChecked(jsContext, jsGlobalObject);
-
- TR_LEAVE();
- return JNI_TRUE;
-}
-
-/*
- *
- */
-JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_gcProtect
- (JNIEnv *env, jclass klass, jint context, jint value) {
- TR_ENTER();
-
- JSContextRef jsContext = ToJSContextRef(context);
- JSValueRef jsValue = ToJSValueRef(value);
- if (!jsContext || !jsValue) {
- return;
- }
-
- JSValueProtectChecked(jsContext, jsValue);
- TR_LEAVE();
-}
-
-/*
- *
- */
-JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_retainJsGlobalContext
- (JNIEnv *env, jclass klass, jint context) {
- TR_ENTER();
- JSGlobalContextRef jsContext = reinterpret_cast<JSGlobalContextRef>(context);
- if (!jsContext) {
- TR_FAIL();
- return;
- }
- JSGlobalContextRetain(jsContext);
- TR_LEAVE();
-}
-
-/*
- *
- */
-JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_releaseJsGlobalContext
- (JNIEnv *env, jclass klass, jint context) {
- TR_ENTER();
- JSGlobalContextRef jsContext = reinterpret_cast<JSGlobalContextRef>(context);
- if (!jsContext) {
- TR_FAIL();
- return;
- }
- JSGlobalContextRelease(jsContext);
- TR_LEAVE();
-}
-
-/*
- *
- */
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isGcProtected
- (JNIEnv *env, jclass klass, jint value) {
- JSValueRef jsValue = ToJSValueRef(value);
- TR_ENTER();
- TR_LEAVE();
- return static_cast<jboolean>(JSValueIsProtected(jsValue));
-}
-
-JNIEXPORT jboolean JNICALL Java_com_google_gwt_dev_shell_mac_LowLevelSaf_isJsValueProtectionCheckingEnabledImpl
- (JNIEnv *env, jclass klass) {
- TR_ENTER();
- TR_LEAVE();
- return static_cast<jboolean>(JSValueProtectCheckingIsEnabled());
-}
diff --git a/jni/mac/java-dispatch.cpp b/jni/mac/java-dispatch.cpp
deleted file mode 100644
index fafab11..0000000
--- a/jni/mac/java-dispatch.cpp
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include <string>
-#include <sstream>
-#include "jni.h"
-#include "java-dispatch.h"
-#include "trace.h"
-#include "JStringWrap.h"
-
-namespace gwt {
-
- /*
- * Declarations for private functions.
- */
- JSClassRef DispatchObjectClassCreate();
-
- JSClassRef DispatchMethodClassCreate();
-
- JSValueRef DispatchObjectGetProperty(JSContextRef, JSObjectRef, JSStringRef,
- JSValueRef*);
-
- JSValueRef DispatchObjectToString(JSContextRef, JSObjectRef, JSObjectRef,
- size_t, const JSValueRef*, JSValueRef*);
-
- bool DispatchObjectSetProperty(JSContextRef, JSObjectRef, JSStringRef,
- JSValueRef, JSValueRef*);
-
- void DispatchObjectFinalize(JSObjectRef);
-
- JSValueRef DispatchMethodCallAsFunction(JSContextRef, JSObjectRef,
- JSObjectRef, size_t,
- const JSValueRef*, JSValueRef*);
-
- JSValueRef DispatchMethodGetToString(JSContextRef, JSObjectRef, JSStringRef,
- JSValueRef*);
-
- JSValueRef DispatchMethodToString(JSContextRef, JSObjectRef, JSObjectRef,
- size_t, const JSValueRef*, JSValueRef*);
-
- void DispatchMethodFinalize(JSObjectRef);
-
- /*
- * Call this when an underlying Java Object should be freed.
- */
- void ReleaseJavaObject(jobject jObject);
-
-
- /*
- * The class definition stuct for DispatchObjects.
- */
- static JSClassDefinition _dispatchObjectClassDef = { 0,
- kJSClassAttributeNone, "DispatchObject", 0, 0, 0, 0,
- DispatchObjectFinalize, 0, DispatchObjectGetProperty,
- DispatchObjectSetProperty, 0, 0, 0, 0, 0, 0 };
-
- /*
- * The class definition structs for DispatchMethods.
- */
- static JSStaticValue _dispatchMethodStaticValues[] = {
- { "toString", DispatchMethodGetToString, 0, kJSPropertyAttributeNone },
- { 0, 0, 0, 0 }
- };
- static JSClassDefinition _dispatchMethodClassDef = { 0,
- kJSClassAttributeNoAutomaticPrototype, "DispatchMethod", 0,
- _dispatchMethodStaticValues, 0, 0, DispatchMethodFinalize, 0, 0, 0, 0,
- 0, DispatchMethodCallAsFunction, 0, 0, 0 };
-
- /*
- * The classes used to create DispatchObjects and DispatchMethods.
- */
- static JSClassRef _dispatchObjectClass = DispatchObjectClassCreate();
- static JSClassRef _dispatchMethodClass = DispatchMethodClassCreate();
-
- /*
- * Java class and method references needed to do delegation.
- */
-
- /*
- * The main JVM, used by foreign threads to attach.
- */
- static JavaVM* _javaVM;
-
- /*
- * Only valid for the main thread! WebKit can finalized on a foreign thread.
- */
- static JNIEnv* _javaEnv;
-
- static jclass _javaDispatchObjectClass;
- static jclass _javaDispatchMethodClass;
- static jclass _lowLevelSafClass;
- static jmethodID _javaDispatchObjectSetFieldMethod;
- static jmethodID _javaDispatchObjectGetFieldMethod;
- static jmethodID _javaDispatchMethodInvokeMethod;
- static jmethodID _javaDispatchObjectToStringMethod;
- static jmethodID _lowLevelSafReleaseObject;
-
- /*
- * Structure to hold DispatchMethod private data.
- *
- * NOTE: utf8Name is defensively copied.
- */
- class DispatchMethodData {
- public:
- DispatchMethodData(jobject jObject, std::string& utf8Name)
- : _jObject(jObject), _utf8Name(utf8Name) { }
- ~DispatchMethodData() {
- ReleaseJavaObject(_jObject);
- }
- jobject _jObject;
- std::string _utf8Name;
- };
-
-/*
- * The following takes the prototype from the Function constructor, this allows
- * us to easily support call and apply on our objects that support CallAsFunction.
- *
- * NOTE: The return value is not protected.
- */
-JSValueRef GetFunctionPrototype(JSContextRef jsContext, JSValueRef* exception) {
- TR_ENTER();
- JSObjectRef globalObject = JSContextGetGlobalObject(jsContext);
- JSStringRef fnPropName= JSStringCreateWithUTF8CString("Function");
- JSValueRef fnCtorValue = JSObjectGetProperty(jsContext, globalObject,
- fnPropName, exception);
- JSStringRelease(fnPropName);
- if (!fnCtorValue) {
- return JSValueMakeUndefined(jsContext);
- }
-
- JSObjectRef fnCtorObject = JSValueToObject(jsContext, fnCtorValue, exception);
- if (!fnCtorObject) {
- return JSValueMakeUndefined(jsContext);
- }
-
- JSStringRef protoPropName = JSStringCreateWithUTF8CString("prototype");
- JSValueRef fnPrototype = JSObjectGetProperty(jsContext, fnCtorObject,
- protoPropName, exception);
- JSStringRelease(protoPropName);
- if (!fnPrototype) {
- return JSValueMakeUndefined(jsContext);
- }
-
- TR_LEAVE();
- return fnPrototype;
-}
-
-/*
- *
- */
-JSClassRef GetDispatchObjectClass() {
- TR_ENTER();
- TR_LEAVE();
- return _dispatchObjectClass;
-}
-
-/*
- *
- */
-JSClassRef GetDispatchMethodClass() {
- TR_ENTER();
- TR_LEAVE();
- return _dispatchMethodClass;
-}
-
-/*
- *
- */
-JSClassRef DispatchObjectClassCreate() {
- TR_ENTER();
- JSClassRef dispClass = JSClassCreate(&_dispatchObjectClassDef);
- JSClassRetain(dispClass);
- TR_LEAVE();
- return dispClass;
-}
-
-/*
- *
- */
-JSClassRef DispatchMethodClassCreate() {
- TR_ENTER();
- JSClassRef dispClass = JSClassCreate(&_dispatchMethodClassDef);
- JSClassRetain(dispClass);
- TR_LEAVE();
- return dispClass;
-}
-
-/*
- * NOTE: The object returned from this function is not protected.
- */
-JSObjectRef DispatchObjectCreate(JSContextRef jsContext, jobject jObject) {
- TR_ENTER();
- JSObjectRef dispInst = JSObjectMake(jsContext, _dispatchObjectClass,
- _javaEnv->NewGlobalRef(jObject));
- TR_LEAVE();
- return dispInst;
-}
-
-/*
- * NOTE: The object returned from this function is not protected.
- */
-JSObjectRef DispatchMethodCreate(JSContextRef jsContext, std::string& name,
- jobject jObject) {
- TR_ENTER();
-
- JSObjectRef dispInst = JSObjectMake(jsContext, _dispatchMethodClass,
- new DispatchMethodData(_javaEnv->NewGlobalRef(jObject), name));
-
- // This could only be cached relative to jsContext.
- JSValueRef fnProtoValue = GetFunctionPrototype(jsContext, NULL);
- JSObjectSetPrototype(jsContext, dispInst, fnProtoValue);
- TR_LEAVE();
- return dispInst;
-}
-
-/*
- * NOTE: The value returned from this function is not protected, but all
- * JSValues that are passed into Java are protected before the invocation.
- */
-JSValueRef DispatchObjectGetProperty(JSContextRef jsContext,
- JSObjectRef jsObject, JSStringRef jsPropertyName,
- JSValueRef* jsException) {
- TR_ENTER();
-
- // If you call toString on a DispatchObject, you should get the results
- // of the java object's toString invcation.
- if (JSStringIsEqualToUTF8CString(jsPropertyName, "toString")) {
- JSObjectRef jsFunction = JSObjectMakeFunctionWithCallback(jsContext,
- jsPropertyName, DispatchObjectToString);
- return jsFunction;
- }
-
- // The class check is omitted because it should not be possible to tear off
- // a getter.
- jobject jObject = reinterpret_cast<jobject>(JSObjectGetPrivate(jsObject));
-
- jstring jPropertyName = _javaEnv->NewString(
- static_cast<const jchar*>(JSStringGetCharactersPtr(jsPropertyName)),
- static_cast<jsize>(JSStringGetLength(jsPropertyName)));
- if (!jObject || !jPropertyName || _javaEnv->ExceptionCheck()) {
- TR_FAIL();
- _javaEnv->ExceptionClear();
- return JSValueMakeUndefined(jsContext);
- }
-
- JSValueRef jsResult = reinterpret_cast<JSValueRef>(
- _javaEnv->CallIntMethod(jObject, _javaDispatchObjectGetFieldMethod,
- reinterpret_cast<jint>(jsContext),
- jPropertyName));
- if (!jsResult || _javaEnv->ExceptionCheck()) {
- TR_FAIL();
- _javaEnv->ExceptionClear();
- return JSValueMakeUndefined(jsContext);
- }
-
- // Java left us an extra reference to eat.
- JSValueUnprotectChecked(jsContext, jsResult);
- TR_LEAVE();
- return jsResult;
-}
-
-/*
- *
- */
-bool DispatchObjectSetProperty(JSContextRef jsContext, JSObjectRef jsObject,
- JSStringRef jsPropertyName, JSValueRef jsValue, JSValueRef* jsException) {
- TR_ENTER();
-
- // The class check is omitted because it should not be possible to tear off
- // a getter.
- jobject jObject = reinterpret_cast<jobject>(JSObjectGetPrivate(jsObject));
-
- jstring jPropertyName = _javaEnv->NewString(
- static_cast<const jchar*>(JSStringGetCharactersPtr(jsPropertyName)),
- static_cast<jsize>(JSStringGetLength(jsPropertyName)));
- if (!jObject || !jPropertyName || _javaEnv->ExceptionCheck()) {
- _javaEnv->ExceptionClear();
- return false;
- }
-
- JSValueProtectChecked(jsContext, jsValue);
-
- _javaEnv->CallIntMethod(jObject, _javaDispatchObjectSetFieldMethod,
- reinterpret_cast<jint>(jsContext), jPropertyName,
- reinterpret_cast<jint>(jsValue));
- if (_javaEnv->ExceptionCheck()) {
- _javaEnv->ExceptionClear();
- return false;
- }
-
- TR_LEAVE();
- return true;
-}
-
-/*
- *
- */
-void DispatchObjectFinalize(JSObjectRef jsObject) {
- TR_ENTER();
- jobject jObject = reinterpret_cast<jobject>(JSObjectGetPrivate(jsObject));
- ReleaseJavaObject(jObject);
- TR_LEAVE();
-}
-
-/*
- *
- */
-void DispatchMethodFinalize(JSObjectRef jsObject) {
- TR_ENTER();
- DispatchMethodData* data = reinterpret_cast<DispatchMethodData*>(
- JSObjectGetPrivate(jsObject));
- delete data;
- TR_LEAVE();
-}
-
-/*
- * NOTE: The value returned from this function is not protected.
- */
-JSValueRef DispatchObjectToString(JSContextRef jsContext, JSObjectRef,
- JSObjectRef jsThis, size_t, const JSValueRef*, JSValueRef*) {
- TR_ENTER();
-
- // This function cannot be torn off and applied to any JSValue. If this does
- // not reference a DispatchObject, return undefined.
- if (!JSValueIsObjectOfClass(jsContext, jsThis, GetDispatchObjectClass())) {
- return JSValueMakeUndefined(jsContext);
- }
-
- jobject jObject = reinterpret_cast<jobject>(JSObjectGetPrivate(jsThis));
- jstring jResult = reinterpret_cast<jstring>(
- _javaEnv->CallObjectMethod(jObject, _javaDispatchObjectToStringMethod));
- if (_javaEnv->ExceptionCheck()) {
- return JSValueMakeUndefined(jsContext);
- } else if (!jResult) {
- return JSValueMakeNull(jsContext);
- } else {
- JStringWrap result(_javaEnv, jResult);
- JSStringRef resultString = JSStringCreateWithCharacters(
- static_cast<const JSChar*>(result.jstr()),
- static_cast<size_t>(result.length()));
- JSValueRef jsResultString = JSValueMakeString(jsContext, resultString);
- JSStringRelease(resultString);
- return jsResultString;
- }
- TR_LEAVE();
-}
-
-/*
- *
- */
-JSValueRef DispatchMethodCallAsFunction(JSContextRef jsContext,
- JSObjectRef jsFunction, JSObjectRef jsThis, size_t argumentCount,
- const JSValueRef arguments[], JSValueRef* exception) {
- TR_ENTER();
-
- // We don't need to check the class here because we take the private
- // data from jsFunction and not jsThis.
-
- DispatchMethodData* data = reinterpret_cast<DispatchMethodData*>(
- JSObjectGetPrivate(jsFunction));
- jobject jObject = data->_jObject;
-
- jintArray jArguments = _javaEnv->NewIntArray(argumentCount);
- if (!jArguments || _javaEnv->ExceptionCheck()) {
- return JSValueMakeUndefined(jsContext);
- }
-
- // This single element int array will be passed into the java call to allow the
- // called java method to raise an exception. We will check for a non-null value
- // after the call is dispatched.
- jintArray jException = _javaEnv->NewIntArray(1);
- if (!jException || _javaEnv->ExceptionCheck()) {
- return JNI_FALSE;
- }
-
- for (size_t i = 0; i < argumentCount; ++i) {
- JSValueRef arg = arguments[i];
- // Java will take ownership of the arguments.
- JSValueProtectChecked(jsContext, arg);
- _javaEnv->SetIntArrayRegion(jArguments, i, 1, reinterpret_cast<jint*>(&arg));
- if (_javaEnv->ExceptionCheck()) {
- return JSValueMakeUndefined(jsContext);
- }
- }
-
- // Java will take ownership of this.
- JSValueProtectChecked(jsContext, jsThis);
-
- JSValueRef jsResult = reinterpret_cast<JSValueRef>(_javaEnv->CallIntMethod(jObject,
- _javaDispatchMethodInvokeMethod, reinterpret_cast<jint>(jsContext),
- reinterpret_cast<jint>(jsThis), jArguments, jException));
- if (_javaEnv->ExceptionCheck()) {
- return JSValueMakeUndefined(jsContext);
- }
-
- JSValueRef jsException = NULL;
- _javaEnv->GetIntArrayRegion(jException, 0, 1, reinterpret_cast<jint*>(&jsException));
- if (!_javaEnv->ExceptionCheck() && jsException) {
- // If the java dispatch set an exception, then we pass it back to our caller.
- if (exception) {
- *exception = jsException;
- }
- // Java left us an extra reference to eat.
- JSValueUnprotectChecked(jsContext, jsException);
- }
-
- // Java left us an extra reference to eat.
- JSValueUnprotectChecked(jsContext, jsResult);
- TR_LEAVE();
- return jsResult;
-}
-
-/*
- * NOTE: The object returned from this function is not protected.
- */
-JSValueRef DispatchMethodToString(JSContextRef jsContext, JSObjectRef,
- JSObjectRef thisObject, size_t, const JSValueRef*, JSValueRef*) {
- TR_ENTER();
-
- // This function cannot be torn off and applied to any JSValue. If this does
- // not reference a DispatchMethod, return undefined.
- if (!JSValueIsObjectOfClass(jsContext, thisObject, GetDispatchMethodClass())) {
- return JSValueMakeUndefined(jsContext);
- }
-
- std::ostringstream ss;
- DispatchMethodData* data = reinterpret_cast<DispatchMethodData*>(
- JSObjectGetPrivate(thisObject));
- ss << "function " << data->_utf8Name << "() {\n [native code]\n}\n";
- JSStringRef stringRep = JSStringCreateWithUTF8CString(ss.str().c_str());
- JSValueRef jsStringRep = JSValueMakeString(jsContext, stringRep);
- JSStringRelease(stringRep);
- TR_LEAVE();
- return jsStringRep;
-}
-
-/*
- * NOTE: The object returned from this function is not protected.
- */
-JSValueRef DispatchMethodGetToString(JSContextRef jsContext,
- JSObjectRef jsObject, JSStringRef jsPropertyName, JSValueRef* jsException) {
- TR_ENTER();
- JSObjectRef toStringFn = JSObjectMakeFunctionWithCallback(jsContext,
- jsPropertyName, DispatchMethodToString);
- TR_LEAVE();
- return toStringFn;
-}
-
-/*
- *
- */
-bool Initialize(JNIEnv* javaEnv, jclass javaDispatchObjectClass,
- jclass javaDispatchMethodClass, jclass lowLevelSafClass) {
- TR_ENTER();
- if (!javaEnv || !javaDispatchObjectClass || !javaDispatchMethodClass
- || !lowLevelSafClass) {
- return false;
- }
-
- _javaVM = 0;
- javaEnv->GetJavaVM(&_javaVM);
-
- _javaEnv = javaEnv;
- _javaDispatchObjectClass = static_cast<jclass>(
- javaEnv->NewGlobalRef(javaDispatchObjectClass));
- _javaDispatchMethodClass = static_cast<jclass>(
- javaEnv->NewGlobalRef(javaDispatchMethodClass));
- _lowLevelSafClass = static_cast<jclass>(
- javaEnv->NewGlobalRef(lowLevelSafClass));
- _javaDispatchObjectSetFieldMethod = javaEnv->GetMethodID(
- javaDispatchObjectClass, "setField", "(ILjava/lang/String;I)V");
- _javaDispatchObjectGetFieldMethod = javaEnv->GetMethodID(
- javaDispatchObjectClass, "getField", "(ILjava/lang/String;)I");
- _javaDispatchMethodInvokeMethod = javaEnv->GetMethodID(
- javaDispatchMethodClass, "invoke", "(II[I[I)I");
- _javaDispatchObjectToStringMethod = javaEnv->GetMethodID(
- javaDispatchObjectClass, "toString", "()Ljava/lang/String;");
- _lowLevelSafReleaseObject = javaEnv->GetStaticMethodID(
- lowLevelSafClass, "releaseObject", "(Ljava/lang/Object;)V");
-
- if (!_javaVM
- || !_javaDispatchObjectSetFieldMethod || !_javaDispatchObjectGetFieldMethod
- || !_javaDispatchMethodInvokeMethod || !_javaDispatchObjectToStringMethod
- || !_lowLevelSafReleaseObject || javaEnv->ExceptionCheck()) {
- return false;
- }
-
- TR_LEAVE();
- return true;
-}
-
-void ReleaseJavaObject(jobject jObject) {
- // Tricky: this call may be on a foreign thread.
- JNIEnv* javaEnv = 0;
- if ((_javaVM->AttachCurrentThreadAsDaemon(reinterpret_cast<void**>(&javaEnv),
- NULL) < 0) || !javaEnv) {
- TR_FAIL();
- return;
- }
-
- // Tell the Java code we're done with this object.
- javaEnv->CallStaticVoidMethod(_lowLevelSafClass, _lowLevelSafReleaseObject,
- jObject);
- if (javaEnv->ExceptionCheck()) {
- TR_FAIL();
- return;
- }
- javaEnv->DeleteGlobalRef(jObject);
-}
-
-} // namespace gwt
diff --git a/jni/mac/java-dispatch.h b/jni/mac/java-dispatch.h
deleted file mode 100644
index f8fa80b..0000000
--- a/jni/mac/java-dispatch.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef JAVA_DISPATCHER_H__
-#define JAVA_DISPATCHER_H__
-#include <iostream>
-#include <JavaScriptCore/JavaScriptCore.h>
-#include <jni.h>
-
-namespace gwt {
-
-/*
- * Initializes static members needed by DispatchObject, DispatchMethod,
- * and LowLevelSaf. This should be called before before calling anything
- * else.
- */
-bool Initialize(JNIEnv*, jclass, jclass, jclass);
-
-/*
- * Returns a shared reference to the DispatchObject class
- */
-JSClassRef GetDispatchObjectClass();
-
-/*
- * Constructs a new DispatchObject.
- *
- * jContext - the JavaScript context
- * jObject - the java instance of DispatchObject to which
- * this instance will dispatch calls
- */
-JSObjectRef DispatchObjectCreate(JSContextRef jContext, jobject jObject);
-
-/*
- * Returns a shared reference to the DispatchMethod class
- */
-JSClassRef GetDispatchMethodClass();
-
-/*
- * Constructs a new DispatchMethod object.
- *
- * jsContext - the JavaScript context
- * name - the name of the method (used in toString)
- * jObject - the java instance of DispatchMethod to which this object will
- * delegate calls.
- */
-JSObjectRef DispatchMethodCreate(JSContextRef jsContext, std::string& name,
- jobject jObject);
-
-
-} // namespace gwt
-
-#endif // JAVA_DISPATCHER_H__
diff --git a/jni/mac/org.eclipse.swt/webkit.c b/jni/mac/org.eclipse.swt/webkit.c
deleted file mode 100644
index 3b704ec..0000000
--- a/jni/mac/org.eclipse.swt/webkit.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-// Modified by Google
-#include <Carbon/Carbon.h>
-#include <WebKit/WebKit.h>
-#include <WebKit/HIWebView.h>
-
-#include "jni.h"
-
-JNIEXPORT void JNICALL Java_org_eclipse_swt_browser_WebKit_WebInitForCarbon(JNIEnv *env, jclass zz) {
- WebInitForCarbon();
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_HIWebViewCreate(JNIEnv *env, jclass zz, jintArray outView) {
- jint *a = (*env)->GetIntArrayElements(env, outView, NULL);
- jint status = (jint) HIWebViewCreate((HIViewRef *)a);
- (*env)->ReleaseIntArrayElements(env, outView, a, 0);
- return status;
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_HIWebViewGetWebView(JNIEnv *env, jclass zz, jint viewRef) {
- return (jint) HIWebViewGetWebView((HIViewRef)viewRef);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1msgSend__II(JNIEnv *env, jclass zz, jint obj, jint sel) {
- return (jint) objc_msgSend((void *)obj, (void *)sel);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1msgSend__III(JNIEnv *env, jclass zz, jint obj, jint sel, jint arg0) {
- return (jint) objc_msgSend((void *)obj, (void *)sel, (void *)arg0);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1msgSend__IIII(JNIEnv *env, jclass zz, jint obj, jint sel, jint arg0, jint arg1) {
- return (jint) objc_msgSend((void *)obj, (void *)sel, (void *)arg0, (void *)arg1);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1msgSend__IIIII(JNIEnv *env, jclass zz, jint obj, jint sel, jint arg0, jint arg1, jint arg2) {
- return (jint) objc_msgSend((void *)obj, (void *)sel, (void *)arg0, (void *)arg1, (void *)arg2);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1msgSend__IIIIII(JNIEnv *env, jclass zz, jint obj, jint sel, jint arg0, jint arg1, jint arg2, jint arg3) {
- return (jint) objc_msgSend((void *)obj, (void *)sel, (void *)arg0, (void *)arg1, (void *)arg2, (void *)arg3);
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_objc_1getClass(JNIEnv *env, jclass zz, jbyteArray name) {
- jbyte *a = (*env)->GetByteArrayElements(env, name, NULL);
- jint id = (jint) objc_getClass((const char *)a);
- (*env)->ReleaseByteArrayElements(env, name, a, 0);
- return id;
-}
-
-JNIEXPORT jint JNICALL Java_org_eclipse_swt_browser_WebKit_sel_1registerName(JNIEnv *env, jclass zz, jbyteArray name) {
- jbyte *a= (*env)->GetByteArrayElements(env, name, NULL);
- jint sel= (jint) sel_registerName((const char *)a);
- (*env)->ReleaseByteArrayElements(env, name, a, 0);
- return sel;
-}
-
-@interface WebKitDelegate : NSObject
-{
- int user_data;
- int (*proc) (int sender, int user_data, int selector, int arg0, int arg1, int arg2, int arg3);
-}
-@end
-
-@implementation WebKitDelegate
-
-- (id)initWithProc:(id)prc user_data:(int)data
-{
- [super init];
- proc= (void *) prc;
- user_data = data;
- return self;
-}
-
-/* WebFrameLoadDelegate */
-
-- (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 1, (int)error, (int)frame, 0, 0);
-}
-
-- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 2, (int)frame, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender didReceiveTitle:(NSString *)title forFrame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 3, (int)title, (int)frame, 0, 0);
-}
-
-- (void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 4, (int)frame, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender didCommitLoadForFrame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 10, (int)frame, 0, 0, 0);
-}
-
-/* WebResourceLoadDelegate */
-
-- (void)webView:(WebView *)sender resource:(id)identifier didFinishLoadingFromDataSource:(WebDataSource *)dataSource
-{
- proc((int)sender, user_data, 5, (int)identifier, (int)dataSource, 0, 0);
-}
-
-- (void)webView:(WebView *)sender resource:(id)identifier didFailLoadingWithError:(NSError *)error fromDataSource:(WebDataSource *)dataSource
-{
- proc((int)sender, user_data, 6, (int)identifier, (int)error, (int)dataSource, 0);
-}
-
-- (id)webView:(WebView *)sender identifierForInitialRequest:(NSURLRequest *)request fromDataSource:(WebDataSource *)dataSource
-{
- return (id) proc((int)sender, user_data, 7, (int)request, (int)dataSource, 0, 0);
-}
-
-- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource
-{
- return (NSURLRequest *) proc((int)sender, user_data, 8, (int)identifier, (int)request, (int)redirectResponse, (int)dataSource);
-}
-
-/* handleNotification */
-
-- (void)handleNotification:(NSNotification *)notification
-{
- proc((int)[notification object], user_data, 9, (int)notification, 0, 0, 0);
-}
-
-/* UIDelegate */
-
-- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
-{
- return (WebView *) proc((int)sender, user_data, 11, (int)request, 0, 0, 0);
-}
-
-- (void)webViewShow:(WebView *)sender
-{
- proc((int)sender, user_data, 12, 0, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender setFrame:(NSRect)frame
-{
- proc((int)sender, user_data, 13, (int)&frame, 0, 0, 0);
-}
-
-- (void)webViewClose:(WebView *)sender
-{
- proc((int)sender, user_data, 14, 0, 0, 0, 0);
-}
-
-- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems
-{
- return (NSArray *)proc((int)sender, user_data, 15, (int)element, (int)defaultMenuItems, 0, 0);
-}
-
-- (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible
-{
- proc((int)sender, user_data, 16, (int)visible, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender setResizable:(BOOL)resizable
-{
- proc((int)sender, user_data, 17, (int)resizable, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible
-{
- proc((int)sender, user_data, 18, (int)visible, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender setStatusText:(NSString *)text
-{
- proc((int)sender, user_data, 23, (int)text, 0, 0, 0);
-}
-
-- (void)webViewFocus:(WebView *)sender
-{
- proc((int)sender, user_data, 24, 0, 0, 0, 0);
-}
-
-- (void)webViewUnfocus:(WebView *)sender
-{
- proc((int)sender, user_data, 25, 0, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message
-{
- proc((int)sender, user_data, 26, (int)message, 0, 0, 0);
-}
-
-- (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message
-{
- return (BOOL) proc((int)sender, user_data, 27, (int)message, 0, 0, 0);
-}
-
-- (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener
-{
- proc((int)sender, user_data, 28, (int)resultListener, 0, 0, 0);
-}
-
-/* WebPolicyDelegate */
-- (void)webView:(WebView *)sender decidePolicyForMIMEType:(NSString *)type request:(NSURLRequest *)request frame:(WebFrame*)frame decisionListener:(id<WebPolicyDecisionListener>)listener
-{
- proc((int)sender, user_data, 19, (int)type, (int)request, (int)frame, (int)listener);
-}
-
-- (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener
-{
- proc((int)sender, user_data, 20, (int)actionInformation, (int)request, (int)frame, (int)listener);
-}
-
-
-- (void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id<WebPolicyDecisionListener>)listener
-{
- proc((int)sender, user_data, 21, (int)actionInformation, (int)request, (int)frameName, (int)listener);
-}
-
-
-- (void)webView:(WebView *)sender unableToImplementPolicyWithError:(NSError *)error frame:(WebFrame *)frame
-{
- proc((int)sender, user_data, 22, (int)error, (int)frame, 0, 0);
-}
-
-/* WebDownload */
-
-- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename
-{
- proc((int)download, user_data, 29, (int)download, (int)filename, 0, 0);
-}
-
-// GOOGLE: we need a notification when the window object is available so we can
-// setup our own hooks before any JavaScript runs.
-- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject
-{
- proc((int)sender, user_data, 99, (int)windowScriptObject, 0, 0, 0);
-}
-
-@end
-
diff --git a/jni/mac/prebuilt/libgwt-ll.jnilib b/jni/mac/prebuilt/libgwt-ll.jnilib
deleted file mode 100755
index 5a4030f..0000000
--- a/jni/mac/prebuilt/libgwt-ll.jnilib
+++ /dev/null
Binary files differ
diff --git a/jni/mac/trace.cpp b/jni/mac/trace.cpp
deleted file mode 100644
index 2127351..0000000
--- a/jni/mac/trace.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#include <iostream>
-#include <map>
-#include <JavaScriptCore/JavaScriptCore.h>
-#include "trace.h"
-
-#ifdef ENABLE_JSVALUE_PROTECTION_CHECKING
-static std::map<JSValueRef, int> _protectMap;
-#endif
-
-/*
- *
- */
-void JSValueProtectChecked(JSContextRef jsContext, JSValueRef jsValue) {
- JSValueProtect(jsContext, jsValue);
-#ifdef ENABLE_JSVALUE_PROTECTION_CHECKING
- _protectMap[jsValue]++;
-#endif
-}
-
-/*
- *
- */
-void JSValueUnprotectChecked(JSContextRef jsContext, JSValueRef jsValue) {
-#ifdef ENABLE_JSVALUE_PROTECTION_CHECKING
- // Unrecord in a hash_map
- unsigned count = _protectMap[jsValue];
- if (count == 0) {
- std::cerr << "[WARNING] JSValueUnprotect called on unprotected JSValueRef (0x"
- << std::hex << ((unsigned)jsValue) << ")" << std::endl;
- return;
- }
- _protectMap[jsValue] = count - 1;
-#else
- JSValueUnprotect(jsContext, jsValue);
-#endif
-}
-
-bool JSValueIsProtected(JSValueRef jsValue) {
-#ifdef ENABLE_JSVALUE_PROTECTION_CHECKING
- return _protectMap[jsValue] > 0;
-#else
- return true;
-#endif
-}
-
-bool JSValueProtectCheckingIsEnabled() {
-#ifdef ENABLE_JSVALUE_PROTECTION_CHECKING
- return true;
-#else
- return false;
-#endif
-}
diff --git a/jni/mac/trace.h b/jni/mac/trace.h
deleted file mode 100644
index e58ca96..0000000
--- a/jni/mac/trace.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-#ifndef TRACE_H__
-#define TRACE_H__
-#include <iostream>
-#include <map>
-
-// Uncomment to trace enter, exit and fail for all native calls.
-// #define ENABLE_CALL_TRACE
-
-// Uncomment to double check that JSValueRef's are protected and
-// unprotected properly.
-// #define ENABLE_JSVALUE_PROTECTION_CHECKING
-
-#ifdef ENABLE_CALL_TRACE
-#define TR_ENTER() std::cout << "ENTER " << __PRETTY_FUNCTION__ << std::endl
-#define TR_LEAVE() std::cout << "LEAVE " << __PRETTY_FUNCTION__ << std::endl
-#define TR_FAIL() std::cout << "FAIL " << __FILE__ << "@" << __LINE__ \
- << std::endl;
-#else
-#define TR_ENTER()
-#define TR_LEAVE()
-#define TR_FAIL()
-#endif // ENABLE_CALL_TRACE
-
-void JSValueUnprotectChecked(JSContextRef, JSValueRef);
-void JSValueProtectChecked(JSContextRef, JSValueRef);
-bool JSValueIsProtected(JSValueRef jsValue);
-bool JSValueProtectCheckingIsEnabled();
-
-#endif // TRACE_H__
diff --git a/jni/windows/IE6.cpp b/jni/windows/IE6.cpp
deleted file mode 100644
index 58330a1..0000000
--- a/jni/windows/IE6.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2006 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-// A very slim and portable set of JNI methods for GWT.
-
-#include <jni.h>
-#include <windows.h>
-#include "wininet.h"
-
-// A home-brewed vector class to eliminate dependence on STL.
-// Reuse at your own peril, it hasn't been tested to do anything
-// more than we're actually using it for here.
-struct char_vector {
- char_vector(long initSize=0): sz(0), cap(0), buf(0) {
- resize(initSize);
- }
-
- ~char_vector() {
- clear();
- }
-
- char& operator[](long i) {
- return buf[i];
- }
-
- void append(const char* start, const char* end) {
- long len = end - start;
- long cursize = sz;
- resize(sz + len);
- memcpy(&buf[cursize], start, len);
- }
-
- void clear() {
- if (buf)
- free(buf);
- buf = 0;
- sz = cap = 0;
- }
-
- void reserve(long newcap) {
- if (newcap <= cap)
- return;
- char* newbuf = (char*)malloc(newcap);
- if (!newbuf)
- return;
- if (buf) {
- memcpy(newbuf, buf, sz);
- free(buf);
- }
- buf = newbuf;
- cap = newcap;
- }
-
- void resize(long newsize) {
- reserve(newsize);
- sz = newsize;
- }
-
- long size() {
- return sz;
- }
-
-private:
- long sz;
- long cap;
- char* buf;
-};
-
-// Does an HTTP GET on the specified URL using the WinInet subsystem, which respects proxy settings.
-// Returns a status code such that
-// 0 Success
-// < 0 Failure at some step (see the code below)
-// > 0 Windows system error code
-//
-int fetch(const char* userAgent, const char* url, char_vector& response) {
- int status = -1;
- HINTERNET h1 = InternetOpenA(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
- if (h1 != NULL) {
- status = -2;
- DWORD flags = INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI;
- HINTERNET h2 = InternetOpenUrlA(h1, url, "", -1L, flags, 0);
- if (h2 != NULL) {
- status = -3;
- const int MAX_BUFFER = 1024 * 1024; // don't grow past this ever
- bool notDone = true;
- response.clear();
- response.reserve(4096);
- char_vector chunk(4096); // initial buffer size
- while (notDone && chunk.size() < MAX_BUFFER) {
- DWORD toRead = (DWORD)chunk.size();
- DWORD didRead;
- while (true) {
- if (InternetReadFile(h2, (LPVOID)&chunk[0], toRead, &didRead)) {
- if (didRead != 0) {
- // Copy to response.
- //
- response.append(&chunk[0], &chunk[0] + didRead);
-
- // Keep going.
- //
- } else {
- // EOF.
- //
- status = 0;
- notDone = false;
- break;
- }
- } else {
- // Oops -- why?
- //
- DWORD err = GetLastError();
- if (err == ERROR_INSUFFICIENT_BUFFER) {
- // Grow the buffer and retry.
- //
- chunk.resize(toRead * 2);
- break;
- } else {
- // Give up.
- //
- status = err;
- notDone = false;
- break;
- }
- }
- }
- }
- InternetCloseHandle(h2);
- }
- InternetCloseHandle(h1);
- }
- return status;
-}
-
-extern "C" {
-
-class UTFChars {
-public:
- UTFChars(JNIEnv* env, jstring str): m_env(env), m_str(str) {
- m_ptr = env->GetStringUTFChars(str, NULL);
- }
-
- ~UTFChars() {
- if (m_ptr) {
- m_env->ReleaseStringUTFChars(m_str, m_ptr);
- }
- }
-
- operator const char*() const {
- return m_ptr;
- }
-
- JNIEnv* m_env;
- jstring m_str;
- const char* m_ptr;
-};
-
-/*
- * Class: com_google_gwt_dev_shell_ie_LowLevelIE6
- * Method: _httpGet
- * Signature: (Ljava/lang/String;Ljava/lang/String;[[B)I
- */
-JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_ie_LowLevelIE6__1httpGet(JNIEnv* env, jclass, jstring userAgent, jstring url, jobjectArray out) {
- UTFChars userAgentChars(env, userAgent);
- if (!userAgentChars || env->ExceptionCheck()) {
- return -100;
- }
-
- UTFChars urlChars(env, url);
- if (!urlChars || env->ExceptionCheck()) {
- return -101;
- }
-
- // Do the fetch.
- //
- char_vector response;
- int status = fetch(userAgentChars, urlChars, response);
-
- if (status != 0) {
- // Failure.
- //
- return status;
- }
-
- // Copy the response.
- //
- jbyteArray byteArray = env->NewByteArray(response.size());
- if (!byteArray || env->ExceptionCheck()) {
- return -102;
- }
-
- jbyte* bytes = env->GetByteArrayElements(byteArray, NULL);
- if (!bytes || env->ExceptionCheck()) {
- return -103;
- }
-
- memcpy(bytes, &response[0], response.size());
-
- env->ReleaseByteArrayElements(byteArray, bytes, 0);
-
- // May throw immediately after return if out array is bad.
- //
- env->SetObjectArrayElement(out, 0, byteArray);
-
- return 0;
-}
-
-} // extern "C"
diff --git a/jni/windows/Makefile b/jni/windows/Makefile
deleted file mode 100644
index 14da521..0000000
--- a/jni/windows/Makefile
+++ /dev/null
@@ -1,113 +0,0 @@
-# Copyright 2006 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not
-# use this file except in compliance with the License. You may obtain a copy of
-# the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations under
-# the License.
-
-##
-# Target settings
-##
-GWT_ROOT = ../../
-OBJDIR := $(GWT_ROOT)build/out/jni/win32/
-OUTDIR := $(GWT_ROOT)build/jni/win32/
-OUT := $(OUTDIR)gwt-ll.dll
-STAGING := $(GWT_ROOT)build/staging/gwt-windows-0.0.0/
-
-##
-# Tools
-##
-CXX := mingw-gcc
-AR := mingw-ar
-STRIP := mingw-strip
-LD := $(CXX)
-
-##
-# List of source, object, and dependency paths plus the path to them
-##
-SRCDIRS := ./:../core/
-VPATH := .:../core
-SRCS := gwt-ll.cpp IE6.cpp
-OBJS := $(addprefix $(OBJDIR),$(SRCS:.cpp=.o))
-DEPS := $(addprefix $(OBJDIR),$(SRCS:.cpp=.d))
-
-##
-# Include path configuration
-##
-SYSINCS := \
- $(JAVA_HOME)/include \
- $(JAVA_HOME)/include/win32
-INCS := $(addprefix -isystem ,$(SYSINCS))
-
-##
-# Libraries and library path
-##
-LIBS := wininet
-LIBPATH := -L$(OBJDIR)
-LIBS := $(addprefix -l,$(LIBS))
-
-# for notes on auto-dependency generation, see
-# http://make.paulandlesley.org/autodep.html
-# -MP obviates the need for sed hackery
-CFLAGS := -Os -fno-exceptions -fshort-wchar -c -MMD -MP -Wno-system-headers $(CFLAGS)
-LDFLAGS := -s -Wl,--kill-at $(LDFLAGS)
-
-#-------------------------------------------------------------------------------
-# Rules
-#-------------------------------------------------------------------------------
-
-##
-# default rule
-##
-all: $(OUT)
-
-# install into prebuilt directory
-install: $(OUT)
- cp $(OUT) prebuilt/
-
-##
-# Include the dependency rules
-##
--include $(DEPS)
-
-##
-# Compilation rule for cpp files
-##
-$(OBJDIR)%.o : $(SRCDIR)%.cpp
- @[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
- $(CXX) $(CFLAGS) $(INCS) -o $@ $<
-
-##
-# Compilation rule for .def files to lib*.a files
-##
-$(OBJDIR)lib%.a : $(SRCDIR)%.def
- @[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
- mingw-dlltool -k -d $< -l $@
-
-##
-# Actual output file
-##
-$(OUT): $(OBJS) $(OBJDIR)libwininet.a
- @[ -d $(OUTDIR) ] || mkdir -p $(OUTDIR)
- $(LD) -shared $(LDFLAGS) $(LIBPATH) -o $@ $^ $(LIBS)
- $(STRIP) --strip-unneeded $@
-
-##
-# copy to staging area for hosted-mode development
-##
-staging: $(OUT)
- @[ -d $(STAGING) ] || mkdir -p $(STAGING)
- cp $(OUT) $(STAGING)
-
-##
-# Clean rule
-##
-clean:
- @-rm -rf $(OBJDIR) $(OUT)
diff --git a/jni/windows/build.xml b/jni/windows/build.xml
deleted file mode 100755
index f5951cf..0000000
--- a/jni/windows/build.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project name="jni-windows" default="build" basedir=".">
- <property name="gwt.root" location="../.." />
- <property name="project.tail" value="jni/windows" />
- <import file="${gwt.root}/common.ant.xml" />
-
- <target name="build" description="Builds a JNI lib">
- <mkdir dir="${project.jni}" />
- <!-- TODO: Actually build this from source! -->
- <copy todir="${project.jni}">
- <fileset dir="prebuilt" />
- </copy>
- </target>
-
- <target name="clean" description="Cleans this project's intermediate and output files">
- <delete dir="${project.build}" failonerror="false" />
- <delete dir="${project.jni}" failonerror="false" />
- </target>
-</project>
diff --git a/jni/windows/gwt-ll.vcproj b/jni/windows/gwt-ll.vcproj
deleted file mode 100644
index 18fee56..0000000
--- a/jni/windows/gwt-ll.vcproj
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="gwt-ll"
- ProjectGUID="{AA853538-40A6-4413-A5B1-74031CB4E887}"
- RootNamespace="gwt-ll"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\..\..\third_party\j2sdk1.4.2_09\include";"$(ProjectDir)..\..\..\..\..\third_party\j2sdk1.4.2_09\include\win32""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wininet.lib"
- OutputFile="$(OutDir)\$(ProjectName).dll"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/$(ProjectName).pdb"
- SubSystem="2"
- ImportLibrary="$(OutDir)/$(ProjectName).lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""$(ProjectDir)..\..\..\..\..\third_party\j2sdk1.4.2_09\include";"$(ProjectDir)..\..\..\..\..\third_party\j2sdk1.4.2_09\include\win32""
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="FALSE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wininet.lib"
- OutputFile="$(OutDir)\$(ProjectName).dll"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- ImportLibrary="$(OutDir)/$(ProjectName).lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath="..\..\..\..\gwt-ll-core\src\main\cpp\gwt-ll.cpp">
- </File>
- <File
- RelativePath=".\IE6.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/jni/windows/prebuilt/gwt-ll.dll b/jni/windows/prebuilt/gwt-ll.dll
deleted file mode 100755
index 49a0a1f..0000000
--- a/jni/windows/prebuilt/gwt-ll.dll
+++ /dev/null
Binary files differ
diff --git a/jni/windows/wininet.def b/jni/windows/wininet.def
deleted file mode 100644
index 83d6751..0000000
--- a/jni/windows/wininet.def
+++ /dev/null
@@ -1,6 +0,0 @@
-LIBRARY wininet.dll
-EXPORTS
-InternetOpenA@20 @264
-InternetOpenUrlA@24 @265
-InternetReadFile@16 @272
-InternetCloseHandle@4 @223
diff --git a/jni/windows/wininet.h b/jni/windows/wininet.h
deleted file mode 100644
index 935c615..0000000
--- a/jni/windows/wininet.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __wininet_h__
-#define __wininet_h__
-
-extern "C" {
-
-#define INTERNET_OPEN_TYPE_PRECONFIG 0
-#define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100
-#define INTERNET_FLAG_RELOAD 0x80000000
-#define INTERNET_FLAG_NO_COOKIES 0x00080000
-#define INTERNET_FLAG_NO_UI 0x00000200
-
-typedef void* HINTERNET;
-HINTERNET STDAPICALLTYPE InternetOpenA(LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy, LPCSTR lpszProxyBypass, DWORD dwFlags);
-HINTERNET STDAPICALLTYPE InternetOpenUrlA(HINTERNET hInternet, LPCSTR lpszUrl, LPCSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext);
-BOOL STDAPICALLTYPE InternetReadFile(HINTERNET hFile, void* lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead);
-BOOL STDAPICALLTYPE InternetCloseHandle(HINTERNET hInternet);
-
-}
-
-#endif // __wininet_h__