Bug 648593 - Remove JavaXPCOM and its build support code from the main tree, r=ted
authorBenjamin Smedberg <benjamin@smedbergs.us>
Fri, 08 Apr 2011 12:51:33 -0700
changeset 67688 6c73db2ca7cc1442fec5b83dae4818a4ea8de41b
parent 67687 8ad43371c469875bc5342e827abff4edbb82155f
child 67689 851fc65d2f5548fee0f6e673802a698bc5fdbc25
push id19413
push userbsmedberg@mozilla.com
push dateFri, 08 Apr 2011 20:59:09 +0000
treeherdermozilla-central@851fc65d2f55 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs648593
milestone2.2a1pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 648593 - Remove JavaXPCOM and its build support code from the main tree, r=ted
config/autoconf.mk.in
config/rules.mk
configure.in
extensions/java/Makefile.in
extensions/java/xpcom/Makefile.in
extensions/java/xpcom/glue/Makefile.in
extensions/java/xpcom/glue/nsJavaXPCOMGlue.cpp
extensions/java/xpcom/interfaces/Makefile.in
extensions/java/xpcom/interfaces/gen-nsError.pl
extensions/java/xpcom/interfaces/org/mozilla/xpcom/GREVersionRange.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/IAppFileLocProvider.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/IGRE.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/IJavaXPCOMUtils.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/IMozilla.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/INIParser.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/IXPCOM.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/Mozilla.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/ProfileLock.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/VersionComparator.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/XPCOMException.java
extensions/java/xpcom/interfaces/org/mozilla/xpcom/XPCOMInitializationException.java
extensions/java/xpcom/package/Makefile.in
extensions/java/xpcom/package/javaconnect.jst
extensions/java/xpcom/package/packages-mac
extensions/java/xpcom/package/packages-unix
extensions/java/xpcom/package/packages-win
extensions/java/xpcom/src/MacJawt.mm
extensions/java/xpcom/src/Makefile.in
extensions/java/xpcom/src/dlldeps-javaxpcom.cpp
extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp
extensions/java/xpcom/src/nsAppFileLocProviderProxy.h
extensions/java/xpcom/src/nsJavaInterfaces.cpp
extensions/java/xpcom/src/nsJavaInterfaces.h
extensions/java/xpcom/src/nsJavaWrapper.cpp
extensions/java/xpcom/src/nsJavaWrapper.h
extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp
extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h
extensions/java/xpcom/src/nsJavaXPTCStub.cpp
extensions/java/xpcom/src/nsJavaXPTCStub.h
extensions/java/xpcom/src/nsJavaXPTCStubWeakRef.cpp
extensions/java/xpcom/src/nsJavaXPTCStubWeakRef.h
extensions/java/xpcom/src/org/mozilla/xpcom/internal/GREImpl.java
extensions/java/xpcom/src/org/mozilla/xpcom/internal/JavaXPCOMMethods.java
extensions/java/xpcom/src/org/mozilla/xpcom/internal/MozillaImpl.java
extensions/java/xpcom/src/org/mozilla/xpcom/internal/XPCOMImpl.java
extensions/java/xpcom/src/org/mozilla/xpcom/internal/XPCOMJavaProxy.java
extensions/java/xpcom/src/org/mozilla/xpcom/internal/XPCOMJavaProxyBase.java
extensions/java/xpcom/tests/LocationProvider.java
extensions/java/xpcom/tests/Makefile.in
extensions/java/xpcom/tests/TestArray.java
extensions/java/xpcom/tests/TestINIParser.java
extensions/java/xpcom/tests/TestJavaProxy.java
extensions/java/xpcom/tests/TestProps.java
extensions/java/xpcom/tests/TestQI.java
extensions/java/xpcom/tests/TestVersionComparator.java
extensions/java/xpcom/tests/testparams/Makefile.in
extensions/java/xpcom/tests/testparams/TestParams.java
extensions/java/xpcom/tests/testparams/nsIJXTestArrayParams.idl
extensions/java/xpcom/tests/testparams/nsIJXTestParams.idl
extensions/java/xpcom/tests/testparams/nsJXTestParams.js
extensions/java/xpcom/tests/testparams/xpctests.js
extensions/java/xpcom/tools/genifaces/GenerateJavaInterfaces.cpp
extensions/java/xpcom/tools/genifaces/Makefile.in
extensions/java/xpcom/tools/xpidl/Makefile.in
extensions/java/xpcom/tools/xpidl/xpidl.c
extensions/java/xpcom/tools/xpidl/xpidl.h
extensions/java/xpcom/tools/xpidl/xpidl_doc.c
extensions/java/xpcom/tools/xpidl/xpidl_header.c
extensions/java/xpcom/tools/xpidl/xpidl_idl.c
extensions/java/xpcom/tools/xpidl/xpidl_java.c
extensions/java/xpcom/tools/xpidl/xpidl_javastub.c
extensions/java/xpcom/tools/xpidl/xpidl_typelib.c
extensions/java/xpcom/tools/xpidl/xpidl_util.c
js/src/config/rules.mk
toolkit/library/Makefile.in
toolkit/toolkit-makefiles.sh
toolkit/toolkit-tiers.mk
xulrunner/app/Makefile.in
xulrunner/build.mk
--- a/config/autoconf.mk.in
+++ b/config/autoconf.mk.in
@@ -182,18 +182,16 @@ MOZ_DIRECTX_SDK_PATH = @MOZ_DIRECTX_SDK_
 MOZ_DIRECTX_SDK_CPU_SUFFIX = @MOZ_DIRECTX_SDK_CPU_SUFFIX@
 MOZ_D3DX9_VERSION = @MOZ_D3DX9_VERSION@
 MOZ_D3DX9_CAB = @MOZ_D3DX9_CAB@
 MOZ_D3DCOMPILER_CAB = @MOZ_D3DCOMPILER_CAB@
 MOZ_D3DX9_DLL = @MOZ_D3DX9_DLL@
 MOZ_D3DCOMPILER_DLL = @MOZ_D3DCOMPILER_DLL@
 
 
-MOZ_JAVAXPCOM = @MOZ_JAVAXPCOM@
-JAVA_INCLUDE_PATH="@JAVA_INCLUDE_PATH@"
 JAVA="@JAVA@"
 JAVAC="@JAVAC@"
 JAR="@JAR@"
 
 TAR=@TAR@
 
 MAKENSISU=@MAKENSISU@
 
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -1446,23 +1446,16 @@ endif
 
 ###############################################################################
 # Bunch of things that extend the 'export' rule (in order):
 ###############################################################################
 
 ################################################################################
 # Copy each element of EXPORTS to $(DIST)/include
 
-ifdef MOZ_JAVAXPCOM
-ifneq ($(XPIDLSRCS),)
-$(JAVA_DIST_DIR)::
-	$(NSINSTALL) -D $@
-endif
-endif
-
 ifneq ($(XPI_NAME),)
 $(FINAL_TARGET):
 	$(NSINSTALL) -D $@
 
 export:: $(FINAL_TARGET)
 endif
 
 ifndef NO_DIST_INSTALL
@@ -1625,56 +1618,16 @@ ifndef NO_DIST_INSTALL
 export-idl:: $(XPIDLSRCS) $(IDL_DIR)
 	$(INSTALL) $(IFLAGS1) $^
 endif
 endif
 	$(LOOP_OVER_PARALLEL_DIRS)
 	$(LOOP_OVER_DIRS)
 	$(LOOP_OVER_TOOL_DIRS)
 
-ifdef MOZ_JAVAXPCOM
-ifneq ($(XPIDLSRCS),)
-
-JAVA_XPIDLSRCS = $(XPIDLSRCS)
-
-# A single IDL file can contain multiple interfaces, which result in multiple
-# Java interface files.  So use hidden dependency files.
-JAVADEPFILES = $(addprefix $(JAVA_GEN_DIR)/.,$(JAVA_XPIDLSRCS:.idl=.java.pp))
-
-$(JAVA_GEN_DIR):
-	$(NSINSTALL) -D $@
-GARBAGE_DIRS += $(JAVA_GEN_DIR)
-
-# generate .java files into _javagen/[package name dirs]
-_JAVA_GEN_DIR = $(JAVA_GEN_DIR)/$(JAVA_IFACES_PKG_NAME)
-$(_JAVA_GEN_DIR):
-	$(NSINSTALL) -D $@
-
-$(JAVA_GEN_DIR)/.%.java.pp: %.idl $(XPIDL_COMPILE) $(_JAVA_GEN_DIR)
-	$(REPORT_BUILD)
-	$(ELOG) $(XPIDL_COMPILE) -m java -w $(XPIDL_FLAGS) -I$(srcdir) -I$(IDL_DIR) -o $(_JAVA_GEN_DIR)/$* $(_VPATH_SRCS)
-	@touch $@
-
-# "Install" generated Java interfaces.  We segregate them based on the XPI_NAME.
-# If XPI_NAME is not set, install into the "default" directory.
-ifneq ($(XPI_NAME),)
-JAVA_INSTALL_DIR = $(JAVA_DIST_DIR)/$(XPI_NAME)
-else
-JAVA_INSTALL_DIR = $(JAVA_DIST_DIR)/default
-endif
-
-$(JAVA_INSTALL_DIR):
-	$(NSINSTALL) -D $@
-
-export:: $(JAVA_DIST_DIR) $(JAVADEPFILES) $(JAVA_INSTALL_DIR)
-	(cd $(JAVA_GEN_DIR) && tar $(TAR_CREATE_FLAGS) - .) | (cd $(JAVA_INSTALL_DIR) && tar -xf -)
-
-endif # XPIDLSRCS
-endif # MOZ_JAVAXPCOM
-
 ################################################################################
 # Copy each element of EXTRA_COMPONENTS to $(FINAL_TARGET)/components
 ifneq (,$(filter %.js,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS)))
 ifeq (,$(filter %.manifest,$(EXTRA_COMPONENTS) $(EXTRA_PP_COMPONENTS)))
 ifndef NO_JS_MANIFEST
 $(error .js component without matching .manifest. See https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0)
 endif
 endif
--- a/configure.in
+++ b/configure.in
@@ -4918,21 +4918,16 @@ if test -n "$SYSTEM_HUNSPELL"; then
     PKG_CHECK_MODULES(MOZ_HUNSPELL, hunspell)
 fi
 
 AC_SUBST(SYSTEM_HUNSPELL)
 
 dnl ========================================================
 dnl Java SDK support
 dnl ========================================================
-JAVA_INCLUDE_PATH=
-MOZ_ARG_WITH_STRING(java-include-path,
-[  --with-java-include-path=dir
-                          Location of Java SDK headers],
-    JAVA_INCLUDE_PATH=$withval)
 
 JAVA_BIN_PATH=
 MOZ_ARG_WITH_STRING(java-bin-path,
 [  --with-java-bin-path=dir
                           Location of Java binaries (java, javac, jar)],
     JAVA_BIN_PATH=$withval)
 
 dnl ========================================================
@@ -4945,17 +4940,16 @@ MOZ_ARG_HEADER(Application)
 
 BUILD_STATIC_LIBS=
 ENABLE_TESTS=1
 MOZ_ACTIVEX_SCRIPTING_SUPPORT=
 MOZ_BRANDING_DIRECTORY=
 MOZ_OFFICIAL_BRANDING=
 MOZ_FEEDS=1
 MOZ_INSTALLER=1
-MOZ_JAVAXPCOM=
 MOZ_JSDEBUGGER=1
 MOZ_MATHML=1
 MOZ_MORK=
 MOZ_MORKREADER=1
 MOZ_AUTH_EXTENSION=1
 MOZ_NO_ACTIVEX_SUPPORT=1
 MOZ_NO_FAST_LOAD=
 MOZ_OGG=1
@@ -6211,80 +6205,26 @@ dnl ====================================
 dnl = Universalchardet
 dnl ========================================================
 MOZ_ARG_DISABLE_BOOL(universalchardet,
 [  --disable-universalchardet
                           Disable universal encoding detection],
   MOZ_UNIVERSALCHARDET=,
   MOZ_UNIVERSALCHARDET=1 )
 
-dnl ========================================================
-dnl JavaXPCOM
-dnl ========================================================
-case "${target}" in
-*-wince*)
-    MOZ_JAVAXPCOM=
-    ;;
-esac
-
-MOZ_ARG_ENABLE_BOOL(javaxpcom,
-[  --enable-javaxpcom
-                          Enable Java-XPCOM bridge],
-    MOZ_JAVAXPCOM=1,
-    MOZ_JAVAXPCOM=)
-
-case "$host_os" in
-  *mingw*)
-    if test -n "$JAVA_HOME"; then
-      JAVA_HOME=`cd "$JAVA_HOME" && pwd`
-    fi
-    ;;
-esac
-
-if test -n "${JAVA_BIN_PATH}"; then
-  dnl Look for javac and jar in the specified path.
-  JAVA_PATH="$JAVA_BIN_PATH"
-else
-  dnl No path specified, so look for javac and jar in $JAVA_HOME & $PATH.
-  JAVA_PATH="$JAVA_HOME/bin:$PATH"
-fi
-
 MOZ_PATH_PROG(JAVA, java, :, [$JAVA_PATH])
 MOZ_PATH_PROG(JAVAC, javac, :, [$JAVA_PATH])
 MOZ_PATH_PROG(JAR, jar, :, [$JAVA_PATH])
 
 if test -n "${JAVA_BIN_PATH}" -o "$OS_TARGET" = Android; then
   if test -z "$JAVA" -o "$JAVA" = ":" -o -z "$JAVAC" -o "$JAVAC" = ":" -o -z "$JAR" -o "$JAR" = ":"; then
     AC_MSG_ERROR([The programs java, javac and jar were not found.  Set \$JAVA_HOME to your java sdk directory or use --with-java-bin-path={java-bin-dir}])
   fi
 fi
 
-if test -n "${MOZ_JAVAXPCOM}"; then
-  if test -n "${JAVA_INCLUDE_PATH}"; then
-    dnl Make sure jni.h exists in the given include path.
-    if test ! -f "$JAVA_INCLUDE_PATH/jni.h"; then
-      AC_MSG_ERROR([jni.h was not found in given include path $JAVA_INCLUDE_PATH.])
-    fi
-  else
-    case "$target_os" in
-      darwin*)
-        dnl Default to java system location
-        JAVA_INCLUDE_PATH=/System/Library/Frameworks/JavaVM.framework/Headers
-        ;;
-      *)
-        dnl Try $JAVA_HOME
-        JAVA_INCLUDE_PATH="$JAVA_HOME/include"
-        ;;
-    esac
-    if test ! -f "$JAVA_INCLUDE_PATH/jni.h"; then
-      AC_MSG_ERROR([The header jni.h was not found.  Set \$JAVA_HOME to your java sdk directory, use --with-java-bin-path={java-bin-dir}, or reconfigure with --disable-javaxpcom.])
-    fi
-  fi
-fi
-
 dnl ========================================================
 dnl = ANGLE OpenGL->D3D translator for WebGL
 dnl = * only applies to win32
 dnl = * enabled by default (shipping build); requires explicit --disable to disable
 dnl ========================================================
 MOZ_ANGLE=
 MOZ_DIRECTX_SDK_PATH=
 MOZ_DIRECTX_SDK_CPU_SUFFIX=
@@ -6579,21 +6519,16 @@ if test `echo "$MOZ_EXTENSIONS" | grep -
     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|pref||g'`
 fi
 
 if test `echo "$MOZ_EXTENSIONS" | grep -c universalchardet` -ne 0; then
     AC_MSG_WARN([universalchardet is no longer an extension, use --disable-universalchardet to disable.])
     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|universalchardet||g'`
 fi
 
-if test `echo "$MOZ_EXTENSIONS" | grep -c java` -ne 0; then
-    AC_MSG_WARN([java is no longer an extension, use --enable-javaxpcom to enable.])
-    MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|java||g'`
-fi
-
 if test `echo "$MOZ_EXTENSIONS" | grep -c spellcheck` -ne 0; then
     AC_MSG_WARN([spellcheck is no longer an extension.])
     MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|spellcheck||g'`
 fi
 
 dnl Remove dupes
 MOZ_EXTENSIONS=`${PERL} ${srcdir}/build/unix/uniq.pl ${MOZ_EXTENSIONS}`
 
@@ -9036,18 +8971,16 @@ AC_SUBST(MOZ_PLACES)
 AC_SUBST(MOZ_PLACES_BOOKMARKS)
 AC_SUBST(MOZ_STORAGE)
 AC_SUBST(MOZ_TOOLKIT_SEARCH)
 AC_SUBST(MOZ_FEEDS)
 AC_SUBST(NS_PRINTING)
 AC_SUBST(MOZ_WEBGL)
 AC_SUBST(MOZ_HELP_VIEWER)
 
-AC_SUBST(MOZ_JAVAXPCOM)
-AC_SUBST(JAVA_INCLUDE_PATH)
 AC_SUBST(JAVA)
 AC_SUBST(JAVAC)
 AC_SUBST(JAR)
 
 AC_SUBST(MOZ_PROFILELOCKING)
 
 AC_SUBST(HAVE_XIE)
 AC_SUBST(MOZ_XIE_LIBS)
deleted file mode 100644
--- a/extensions/java/Makefile.in
+++ /dev/null
@@ -1,48 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is
-# IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2004
-# IBM Corporation. All Rights Reserved.
-#
-# Contributor(s):
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH     = ../..
-topsrcdir = @top_srcdir@
-srcdir    = @srcdir@
-VPATH     = @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-DIRS = xpcom
-
-include $(topsrcdir)/config/rules.mk
-
deleted file mode 100644
--- a/extensions/java/xpcom/Makefile.in
+++ /dev/null
@@ -1,57 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2007
-# IBM Corporation. All Rights Reserved.
-#
-# Contributor(s):
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-DIRS = interfaces glue
-
-ifdef ENABLE_TESTS
-DIRS += tests
-endif
-
-include $(topsrcdir)/config/rules.mk
-
-# Build the implementation Java classes
-libs::
-	$(MAKE) -C src jar-libs
-
-install::
-	$(MAKE) -C src jar-install
deleted file mode 100644
--- a/extensions/java/xpcom/glue/Makefile.in
+++ /dev/null
@@ -1,87 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is
-# IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2005
-# IBM Corporation. All Rights Reserved.
-#
-# Contributor(s):
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-MODULE		= javaxpcomglue
-LIBRARY_NAME	= javaxpcomglue
-SHORT_LIBNAME	= jxpcmglu
-
-# On Mac OS X, JNI libraries must end with a '.jnilib' extension
-ifeq ($(OS_ARCH),Darwin)
-DLL_SUFFIX = .jnilib
-endif
-
-CPPSRCS	= nsJavaXPCOMGlue.cpp
-
-DEFINES += -DXPCOM_GLUE
-
-
-LOCAL_INCLUDES	= -I$(JAVA_INCLUDE_PATH)
-
-ifeq ($(OS_ARCH),WINNT)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/win32
-else
-ifeq ($(OS_ARCH),OS2)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/OS2
-else
-ifeq ($(OS_ARCH),FreeBSD)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/freebsd
-else
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/linux
-endif
-endif
-endif
-
-LOCAL_INCLUDES += -I$(topsrcdir)/xpcom/build
-
-EXTRA_DSO_LDOPTS = \
-	$(XPCOM_STANDALONE_GLUE_LDOPTS) \
-	$(NULL)
-
-# Need to link with CoreFoundation on Mac
-ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
-EXTRA_DSO_LDOPTS += $(TK_LIBS)
-endif
-
-include $(topsrcdir)/config/rules.mk
-
deleted file mode 100644
--- a/extensions/java/xpcom/glue/nsJavaXPCOMGlue.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "jni.h"
-#include "nsXPCOMPrivate.h" // for XPCOM_DLL defines.
-#include "nsXPCOMGlue.h"
-#include "nsDebug.h"
-#include <stdlib.h>
-
-#if defined(XP_WIN) || defined(XP_OS2)
-#define JX_EXPORT   JNIEXPORT
-#else
-#define JX_EXPORT   JNIEXPORT NS_EXPORT
-#endif
-
-
-/***********************
- *  JNI Load & Unload
- ***********************/
-
-extern "C" JX_EXPORT jint JNICALL
-JNI_OnLoad(JavaVM* vm, void* reserved)
-{
-  // Let the JVM know that we are using JDK 1.2 JNI features.
-  return JNI_VERSION_1_2;
-}
-
-extern "C" JX_EXPORT void JNICALL
-JNI_OnUnload(JavaVM* vm, void* reserved)
-{
-}
-
-/********************************
- *  JavaXPCOM JNI interfaces
- ********************************/
-
-#define JXM_NATIVE(func) Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_##func
-
-enum {
-  kFunc_Initialize,
-  kFunc_InitEmbedding,
-  kFunc_TermEmbedding,
-  kFunc_LockProfileDirectory,
-  kFunc_NotifyProfile,
-  kFunc_InitXPCOM,
-  kFunc_ShutdownXPCOM,
-  kFunc_GetComponentManager,
-  kFunc_GetComponentRegistrar,
-  kFunc_GetServiceManager,
-  kFunc_NewLocalFile,
-  kFunc_CallXPCOMMethod,
-  kFunc_FinalizeProxy,
-  kFunc_IsSameXPCOMObject,
-  kFunc_ReleaseProfileLock,
-  kFunc_GetNativeHandleFromAWT,
-  kFunc_WrapJavaObject,
-  kFunc_WrapXPCOMObject
-};
-
-#define JX_NUM_FUNCS 18
-
-
-// Get path string from java.io.File object.
-jstring
-GetJavaFilePath(JNIEnv* env, jobject aFile)
-{
-  jclass clazz = env->FindClass("java/io/File");
-  if (clazz) {
-    jmethodID pathMID = env->GetMethodID(clazz, "getCanonicalPath",
-                                         "()Ljava/lang/String;");
-    if (pathMID) {
-      return (jstring) env->CallObjectMethod(aFile, pathMID);
-    }
-  }
-
-  return nsnull;
-}
-
-// Calls XPCOMGlueStartup using the given java.io.File object, and loads
-// the JavaXPCOM methods from the XUL shared library.
-nsresult
-LoadXULMethods(JNIEnv* env, jobject aXPCOMPath, void** aFunctions)
-{
-  jstring pathString = GetJavaFilePath(env, aXPCOMPath);
-  if (!pathString)
-    return NS_ERROR_FAILURE;
-  const char* path = env->GetStringUTFChars(pathString, nsnull);
-  if (!path)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  int len = strlen(path);
-  char* xpcomPath = (char*) malloc(len + sizeof(XPCOM_DLL) +
-                                   sizeof(XPCOM_FILE_PATH_SEPARATOR) + 1);
-  if (!xpcomPath)
-    return NS_ERROR_OUT_OF_MEMORY;
-  sprintf(xpcomPath, "%s" XPCOM_FILE_PATH_SEPARATOR XPCOM_DLL, path);
-
-  nsresult rv = XPCOMGlueStartup(xpcomPath);
-  free(xpcomPath);
-  if (NS_FAILED(rv))
-    return rv;
-
-#ifdef XP_WIN32
-  // The JNICALL calling convention defines to "__stdcall" on Win32, which
-  // mangles the name.
-  nsDynamicFunctionLoad funcs[] = {
-    { "_Java_org_mozilla_xpcom_internal_MozillaImpl_initialize@8",
-            (NSFuncPtr*) &aFunctions[kFunc_Initialize] },
-    { "_Java_org_mozilla_xpcom_internal_GREImpl_initEmbedding@20",
-            (NSFuncPtr*) &aFunctions[kFunc_InitEmbedding] },
-    { "_Java_org_mozilla_xpcom_internal_GREImpl_termEmbedding@8",
-            (NSFuncPtr*) &aFunctions[kFunc_TermEmbedding] },
-    { "_Java_org_mozilla_xpcom_internal_GREImpl_lockProfileDirectory@12",
-            (NSFuncPtr*) &aFunctions[kFunc_LockProfileDirectory] },
-    { "_Java_org_mozilla_xpcom_internal_GREImpl_notifyProfile@8",
-            (NSFuncPtr*) &aFunctions[kFunc_NotifyProfile] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_initXPCOM@16",
-            (NSFuncPtr*) &aFunctions[kFunc_InitXPCOM] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_shutdownXPCOM@12",
-            (NSFuncPtr*) &aFunctions[kFunc_ShutdownXPCOM] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_getComponentManager@8",
-            (NSFuncPtr*) &aFunctions[kFunc_GetComponentManager] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_getComponentRegistrar@8",
-            (NSFuncPtr*) &aFunctions[kFunc_GetComponentRegistrar] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_getServiceManager@8",
-            (NSFuncPtr*) &aFunctions[kFunc_GetServiceManager] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMImpl_newLocalFile@16",
-            (NSFuncPtr*) &aFunctions[kFunc_NewLocalFile] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_callXPCOMMethod@20",
-            (NSFuncPtr*) &aFunctions[kFunc_CallXPCOMMethod] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_finalizeProxy@12",
-            (NSFuncPtr*) &aFunctions[kFunc_FinalizeProxy] },
-    { "_Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_isSameXPCOMObject@16",
-            (NSFuncPtr*) &aFunctions[kFunc_IsSameXPCOMObject] },
-    { "_Java_org_mozilla_xpcom_ProfileLock_release@16",
-            (NSFuncPtr*) &aFunctions[kFunc_ReleaseProfileLock] },
-    { "_Java_org_mozilla_xpcom_internal_MozillaImpl_getNativeHandleFromAWT@12",
-            (NSFuncPtr*) &aFunctions[kFunc_GetNativeHandleFromAWT] },
-    { "_Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_wrapJavaObject@16",
-            (NSFuncPtr*) &aFunctions[kFunc_WrapJavaObject] },
-    { "_Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_wrapXPCOMObject@20",
-            (NSFuncPtr*) &aFunctions[kFunc_WrapXPCOMObject] },
-    { nsnull, nsnull }
-  };
-#else
-  nsDynamicFunctionLoad funcs[] = {
-    { "Java_org_mozilla_xpcom_internal_MozillaImpl_initialize",
-            (NSFuncPtr*) &aFunctions[kFunc_Initialize] },
-    { "Java_org_mozilla_xpcom_internal_GREImpl_initEmbedding",
-            (NSFuncPtr*) &aFunctions[kFunc_InitEmbedding] },
-    { "Java_org_mozilla_xpcom_internal_GREImpl_termEmbedding",
-            (NSFuncPtr*) &aFunctions[kFunc_TermEmbedding] },
-    { "Java_org_mozilla_xpcom_internal_GREImpl_lockProfileDirectory",
-            (NSFuncPtr*) &aFunctions[kFunc_LockProfileDirectory] },
-    { "Java_org_mozilla_xpcom_internal_GREImpl_notifyProfile",
-            (NSFuncPtr*) &aFunctions[kFunc_NotifyProfile] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_initXPCOM",
-            (NSFuncPtr*) &aFunctions[kFunc_InitXPCOM] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_shutdownXPCOM",
-            (NSFuncPtr*) &aFunctions[kFunc_ShutdownXPCOM] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_getComponentManager",
-            (NSFuncPtr*) &aFunctions[kFunc_GetComponentManager] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_getComponentRegistrar",
-            (NSFuncPtr*) &aFunctions[kFunc_GetComponentRegistrar] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_getServiceManager",
-            (NSFuncPtr*) &aFunctions[kFunc_GetServiceManager] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMImpl_newLocalFile",
-            (NSFuncPtr*) &aFunctions[kFunc_NewLocalFile] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_callXPCOMMethod",
-            (NSFuncPtr*) &aFunctions[kFunc_CallXPCOMMethod] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_finalizeProxy",
-            (NSFuncPtr*) &aFunctions[kFunc_FinalizeProxy] },
-    { "Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_isSameXPCOMObject",
-            (NSFuncPtr*) &aFunctions[kFunc_IsSameXPCOMObject] },
-    { "Java_org_mozilla_xpcom_ProfileLock_release",
-            (NSFuncPtr*) &aFunctions[kFunc_ReleaseProfileLock] },
-    { "Java_org_mozilla_xpcom_internal_MozillaImpl_getNativeHandleFromAWT",
-            (NSFuncPtr*) &aFunctions[kFunc_GetNativeHandleFromAWT] },
-    { "Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_wrapJavaObject",
-            (NSFuncPtr*) &aFunctions[kFunc_WrapJavaObject] },
-    { "Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_wrapXPCOMObject",
-            (NSFuncPtr*) &aFunctions[kFunc_WrapXPCOMObject] },
-    { nsnull, nsnull }
-  };
-#endif
-
-  rv = XPCOMGlueLoadXULFunctions(funcs);
-  if (NS_FAILED(rv))
-    return rv;
-
-  return NS_OK;
-}
-
-void
-ThrowException(JNIEnv* env, const nsresult aErrorCode, const char* aMessage)
-{
-  // Only throw this exception if one hasn't already been thrown, so we don't
-  // mask a previous exception/error.
-  if (env->ExceptionCheck())
-    return;
-
-  // If the error code we get is for an Out Of Memory error, try to throw an
-  // OutOfMemoryError.  The JVM may have enough memory to create this error.
-  if (aErrorCode == NS_ERROR_OUT_OF_MEMORY) {
-    jclass clazz = env->FindClass("java/lang/OutOfMemoryError");
-    if (clazz) {
-      env->ThrowNew(clazz, aMessage);
-    }
-    env->DeleteLocalRef(clazz);
-    return;
-  }
-
-  // If the error was not handled above, then create an XPCOMException with the
-  // given error code.
-  jthrowable throwObj = nsnull;
-  jclass exceptionClass = env->FindClass("org/mozilla/xpcom/XPCOMException");
-  if (exceptionClass) {
-    jmethodID mid = env->GetMethodID(exceptionClass, "<init>",
-                                     "(JLjava/lang/String;)V");
-    if (mid) {
-      throwObj = (jthrowable) env->NewObject(exceptionClass, mid,
-                                             (PRInt64) aErrorCode,
-                                             env->NewStringUTF(aMessage));
-    }
-  }
-  NS_ASSERTION(throwObj, "Failed to create XPCOMException object");
-
-  // throw exception
-  if (throwObj) {
-    env->Throw(throwObj);
-  }
-}
-
-// Register the JavaXPCOM native methods.  This associates a native Java
-// method with its C implementation.
-nsresult
-RegisterNativeMethods(JNIEnv* env, void** aFunctions)
-{
-  JNINativeMethod mozilla_methods[] = {
-    { "initializeNative", "()V",
-      (void*) aFunctions[kFunc_Initialize] },
-    { "getNativeHandleFromAWT", "(Ljava/lang/Object;)J",
-      (void*) aFunctions[kFunc_GetNativeHandleFromAWT] }
-  };
-
-  JNINativeMethod gre_methods[] = {
-    { "initEmbeddingNative",
-      "(Ljava/io/File;Ljava/io/File;Lorg/mozilla/xpcom/IAppFileLocProvider;)V",
-      (void*) aFunctions[kFunc_InitEmbedding] },
-    { "termEmbedding", "()V",
-      (void*) aFunctions[kFunc_TermEmbedding] },
-    { "lockProfileDirectory", "(Ljava/io/File;)Lorg/mozilla/xpcom/ProfileLock;",
-      (void*) aFunctions[kFunc_LockProfileDirectory] },
-    { "notifyProfile", "()V",
-      (void*) aFunctions[kFunc_NotifyProfile] },
-  };
-
-  JNINativeMethod xpcom_methods[] = {
-    { "initXPCOMNative",
-      "(Ljava/io/File;Lorg/mozilla/xpcom/IAppFileLocProvider;)Lorg/mozilla/interfaces/nsIServiceManager;",
-      (void*) aFunctions[kFunc_InitXPCOM] },
-    { "shutdownXPCOM", "(Lorg/mozilla/interfaces/nsIServiceManager;)V",
-      (void*) aFunctions[kFunc_ShutdownXPCOM] },
-    { "getComponentManager", "()Lorg/mozilla/interfaces/nsIComponentManager;",
-      (void*) aFunctions[kFunc_GetComponentManager] },
-    { "getComponentRegistrar", "()Lorg/mozilla/interfaces/nsIComponentRegistrar;",
-      (void*) aFunctions[kFunc_GetComponentRegistrar] },
-    { "getServiceManager", "()Lorg/mozilla/interfaces/nsIServiceManager;",
-      (void*) aFunctions[kFunc_GetServiceManager] },
-    { "newLocalFile", "(Ljava/lang/String;Z)Lorg/mozilla/interfaces/nsILocalFile;",
-      (void*) aFunctions[kFunc_NewLocalFile] }
-  };
-
-  JNINativeMethod proxy_methods[] = {
-    { "callXPCOMMethod",
-      "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;",
-      (void*) aFunctions[kFunc_CallXPCOMMethod] },
-    { "finalizeProxyNative", "(Ljava/lang/Object;)V",
-      (void*) aFunctions[kFunc_FinalizeProxy] },
-    { "isSameXPCOMObject", "(Ljava/lang/Object;Ljava/lang/Object;)Z",
-      (void*) aFunctions[kFunc_IsSameXPCOMObject] }
-  };
-
-  JNINativeMethod lockProxy_methods[] = {
-    { "releaseNative", "(J)V",
-      (void*) aFunctions[kFunc_ReleaseProfileLock] }
-  };
-
-  JNINativeMethod util_methods[] = {
-    { "wrapJavaObject", "(Ljava/lang/Object;Ljava/lang/String;)J",
-      (void*) aFunctions[kFunc_WrapJavaObject] },
-    { "wrapXPCOMObject", "(JLjava/lang/String;)Ljava/lang/Object;",
-      (void*) aFunctions[kFunc_WrapXPCOMObject] }
-  };
-
-  jint rc = -1;
-  jclass clazz = env->FindClass("org/mozilla/xpcom/internal/MozillaImpl");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, mozilla_methods,
-                          sizeof(mozilla_methods) / sizeof(mozilla_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  rc = -1;
-  clazz = env->FindClass("org/mozilla/xpcom/internal/GREImpl");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, gre_methods,
-                              sizeof(gre_methods) / sizeof(gre_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  rc = -1;
-  clazz = env->FindClass("org/mozilla/xpcom/internal/XPCOMImpl");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, xpcom_methods,
-                              sizeof(xpcom_methods) / sizeof(xpcom_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  rc = -1;
-  clazz = env->FindClass("org/mozilla/xpcom/internal/XPCOMJavaProxy");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, proxy_methods,
-                              sizeof(proxy_methods) / sizeof(proxy_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  rc = -1;
-  clazz = env->FindClass("org/mozilla/xpcom/ProfileLock");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, lockProxy_methods,
-                      sizeof(lockProxy_methods) / sizeof(lockProxy_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  rc = -1;
-  clazz = env->FindClass("org/mozilla/xpcom/internal/JavaXPCOMMethods");
-  if (clazz) {
-    rc = env->RegisterNatives(clazz, util_methods,
-                              sizeof(util_methods) / sizeof(util_methods[0]));
-  }
-  NS_ENSURE_TRUE(rc == 0, NS_ERROR_FAILURE);
-
-  return NS_OK;
-}
-
-// Load the JavaXPCOM methods from the XUL shared library, and registers them
-// as Java native methods.
-extern "C" JX_EXPORT void JNICALL
-JXM_NATIVE(registerJavaXPCOMMethodsNative) (JNIEnv *env, jclass that,
-                                            jobject aXPCOMPath)
-{
-  void* functions[JX_NUM_FUNCS];
-  memset(functions, 0, JX_NUM_FUNCS * sizeof(void*));
-
-  nsresult rv = LoadXULMethods(env, aXPCOMPath, functions);
-  if (NS_SUCCEEDED(rv)) {
-    rv = RegisterNativeMethods(env, functions);
-  }
-
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "Failed to register JavaXPCOM methods");
-  }
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/Makefile.in
+++ /dev/null
@@ -1,132 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2006
-# IBM Corporation. All Rights Reserved.
-#
-# Contributor(s):
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-JAVA_LIBRARY_NAME = MozillaGlue
-
-# Don't install MozillaGlue.jar in $(DIST)/bin
-NO_DIST_INSTALL=1
-NO_INSTALL=1
-
-PACKAGE_DIR = org/mozilla/xpcom
-
-JAVA_SRCS = \
-		$(PACKAGE_DIR)/Mozilla.java \
-		$(PACKAGE_DIR)/GREVersionRange.java \
-		$(PACKAGE_DIR)/IMozilla.java \
-		$(PACKAGE_DIR)/IGRE.java \
-		$(PACKAGE_DIR)/IXPCOM.java \
-		$(PACKAGE_DIR)/IJavaXPCOMUtils.java \
-		$(PACKAGE_DIR)/IAppFileLocProvider.java \
-		$(PACKAGE_DIR)/INIParser.java \
-		$(PACKAGE_DIR)/VersionComparator.java \
-		$(PACKAGE_DIR)/IXPCOMError.java \
-		$(PACKAGE_DIR)/ProfileLock.java \
-		$(PACKAGE_DIR)/XPCOMException.java \
-		$(PACKAGE_DIR)/XPCOMInitializationException.java \
-		$(NULL)
-
-IFACES_JAR = MozillaInterfaces.jar
-IFACES_JAR_SRC = $(patsubst %.jar,%-src.jar,$(IFACES_JAR))
-
-JAVA_CLASSPATH += $(IFACES_JAR)
-
-# install jars into SDK
-SDK_LIBRARY = $(JAVA_LIBRARY_NAME).jar $(IFACES_JAR) $(IFACES_JAR_SRC)
-
-GARBAGE += $(IFACES_JAR) $(IFACES_JAR_SRC) $(PACKAGE_DIR)/IXPCOMError.java java.files
-
-include $(topsrcdir)/config/rules.mk
-
-# MozillaGlue.jar depends on MozillaInterfaces.jar, so make sure to generate
-# the Mozilla Java interfaces first.
-$(addprefix $(_JAVA_DIR)/,$(JAVA_SRCS:.java=.class)): $(IFACES_JAR)
-
-##
-# Generate IXPCOMError.java
-##
-
-$(_JAVA_DIR)/$(PACKAGE_DIR)/Mozilla.class: $(PACKAGE_DIR)/IXPCOMError.java
-
-$(PACKAGE_DIR)::
-	$(NSINSTALL) -D $@
-
-$(PACKAGE_DIR)/IXPCOMError.java: $(topsrcdir)/xpcom/base/nsError.h gen-nsError.pl $(PACKAGE_DIR) $(GLOBAL_DEPS)
-	$(PERL) $(srcdir)/gen-nsError.pl < $< > $@
-
-##
-# Compile generated Java interfaces
-##
-
-IFACES_DIR = _ifaces
-$(IFACES_DIR)::
-	$(NSINSTALL) -D $@
-
-GARBAGE_DIRS += $(IFACES_DIR)
-
-# exclude interfaces that we don't need
-IGNORE_IFACES_NAMES =
-ifneq (,$(IGNORE_IFACES_NAMES))
-IGNORE_IFACES = $(patsubst %, ! -name "*%.java", $(IGNORE_IFACES_NAMES))
-endif
-
-# Using the temporary "java.files" avoids an "argument list too long"
-# error on Windows when using *.java
-$(IFACES_DIR)/$(JAVA_IFACES_PKG_NAME)/nsISupports.class: $(IFACES_DIR) $(wildcard $(JAVA_DIST_DIR)/default/$(JAVA_IFACES_PKG_NAME)/*.java) $(GLOBAL_DEPS)
-	@echo Compiling Java interfaces
-	find $(JAVA_DIST_DIR)/default -name "*.java" $(IGNORE_IFACES) > java.files
-	$(CYGWIN_WRAPPER) $(JAVAC) $(JAVAC_FLAGS) -classpath $(IFACES_DIR) 		\
-		-d $(IFACES_DIR) -sourcepath $(JAVA_DIST_DIR)/default @java.files
-
-$(IFACES_JAR): $(IFACES_DIR)/$(JAVA_IFACES_PKG_NAME)/nsISupports.class Makefile
-	$(JAR) cf $@ -C $(IFACES_DIR) org
-
-$(IFACES_JAR_SRC): $(IFACES_JAR)
-	$(JAR) cf $@ -C $(JAVA_DIST_DIR)/default org
-ifneq (,$(IGNORE_IFACES_NAMES))
-	$(ZIP) -d $@ $(patsubst %, $(JAVA_IFACES_PKG_NAME)/%.java, $(IGNORE_IFACES_NAMES))
-endif
-
-# Since we set NO_DIST_INSTALL above, the jars don't get copied into the SDK.
-# Handle that here.
-libs:: $(SDK_LIBRARY) $(SDK_LIB_DIR)
-	$(INSTALL) $(IFLAGS2) $^
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/gen-nsError.pl
+++ /dev/null
@@ -1,163 +0,0 @@
-#! /usr/bin/env perl
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is
-# Michal Ceresna.
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Michal Ceresna (ceresna@dbai.tuwien.ac.at)
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-# Generates IXPCOMError.java from xpcom/base/nsError.h
-#
-# usage: perl gen-nsErrors.pl < <topsrcdir>/xpcom/base/nsError.h > IXPCOMError.java
-
-
-print "/* ***** BEGIN LICENSE BLOCK *****\n";
-print " * Version: MPL 1.1/GPL 2.0/LGPL 2.1\n";
-print " *\n";
-print " * The contents of this file are subject to the Mozilla Public License Version\n";
-print " * 1.1 (the \"License\"); you may not use this file except in compliance with\n";
-print " * the License. You may obtain a copy of the License at\n";
-print " * http://www.mozilla.org/MPL/\n";
-print " *\n";
-print " * Software distributed under the License is distributed on an \"AS IS\" basis,\n";
-print " * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\n";
-print " * for the specific language governing rights and limitations under the\n";
-print " * License.\n";
-print " *\n";
-print " * The Original Code is mozilla.org code.\n";
-print " *\n";
-print " * The Initial Developer of the Original Code is\n";
-print " * Netscape Communications Corporation.\n";
-print " * Portions created by the Initial Developer are Copyright (C) 1998\n";
-print " * the Initial Developer. All Rights Reserved.\n";
-print " *\n";
-print " * Contributor(s):\n";
-print " *\n";
-print " * Alternatively, the contents of this file may be used under the terms of\n";
-print " * either of the GNU General Public License Version 2 or later (the \"GPL\"),\n";
-print " * or the GNU Lesser General Public License Version 2.1 or later (the \"LGPL\"),\n";
-print " * in which case the provisions of the GPL or the LGPL are applicable instead\n";
-print " * of those above. If you wish to allow use of your version of this file only\n";
-print " * under the terms of either the GPL or the LGPL, and not to allow others to\n";
-print " * use your version of this file under the terms of the MPL, indicate your\n";
-print " * decision by deleting the provisions above and replace them with the notice\n";
-print " * and other provisions required by the GPL or the LGPL. If you do not delete\n";
-print " * the provisions above, a recipient may use your version of this file under\n";
-print " * the terms of any one of the MPL, the GPL or the LGPL.\n";
-print " *\n";
-print " * ***** END LICENSE BLOCK ***** */\n";
-
-print "\n";
-print "package org.mozilla.xpcom;\n";
-print "\n\n";
-
-print "/**\n";
-print " * Mozilla XPCOM error codes.\n";
-print " * <p>\n";
-print " * THIS FILE GENERATED FROM mozilla/xpcom/base/nsError.h.\n";
-print " * PLEASE SEE THAT FILE FOR FULL DOCUMENTATION.\n";
-print " */\n";
-print "public interface IXPCOMError {\n";
-
-while (<STDIN>) {
-  $line = $_;
-
-  if ($prevline) {
-    $_ = $prevline.$_;
-  }
-  if (/(.*)\\$/) {
-    #splitted line
-    $prevline = $1;
-    next;
-  }
-  $prevline = "";
-
-  if (/^\s*#define\s+(NS_[A-Z_]+)\s+(0x)?([0-9a-fA-F]+)\s*$/) {
-    #define NS_ERROR_MODULE_XPCOM      1
-    #define NS_ERROR_MODULE_BASE_OFFSET 0x45
-    print "  long $1 = $2$3L;\n";
-  }
-  elsif (/^\s*#define\s+(NS_[A-Z_]+)\s+\((NS_[A-Z_]+)\s+\+\s+(0x)?([0-9a-fA-F]+)\s*\)\s*/) {
-    #define NS_ERROR_NOT_INITIALIZED           (NS_ERROR_BASE + 1)
-    #define NS_ERROR_FACTORY_EXISTS            (NS_ERROR_BASE + 0x100)
-    print "  long $1 = $2 + $3$4L;\n";
-  }
-  elsif (/^\s*#define\s+(NS_[A-Z_]+)\s+(NS_[A-Z_]+)\s\s*/) {
-    #define NS_ERROR_NO_INTERFACE              NS_NOINTERFACE
-    print "  long $1 = $2;\n";
-  }
-  elsif (/^\s*#define\s+(NS_[A-Z_]+)\s+\(\(nsresult\)\s*(0x)?([0-9a-fA-F]+)L?\)\s*$/) { 
-    #define NS_ERROR_BASE                      ((nsresult) 0xC1F30000)
-    #define NS_ERROR_ABORT                     ((nsresult) 0x80004004L)
-    print "  long $1 = $2$3L;\n";
-  }
-  elsif (/^\s*#define\s+(NS_[A-Z_]+)\s+NS_ERROR_GENERATE_FAILURE\s*\(\s*(NS_[A-Z_]+)\s*,\s*([0-9]+)\s*\)\s*$/) { 
-    #define NS_BASE_STREAM_CLOSED         NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_BASE, 2)
-    $module = $2;
-    $code = $3;
-    print "  long $1 = ((NS_ERROR_SEVERITY_ERROR<<31) |\n";
-    print "      (($module+NS_ERROR_MODULE_BASE_OFFSET)<<16) | $code);\n";
-  }
-  elsif (/^\s*#define\s+(NS_[A-Z_]+)\s+NS_ERROR_GENERATE_SUCCESS\s*\(\s*(NS_[A-Z_]+)\s*,\s*([0-9]+)\s*\)\s*$/) { 
-    #define NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA   NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_XPCOM,  1)
-    $module = $2;
-    $code = $3;
-    print "  long $1 = ((NS_ERROR_SEVERITY_SUCCESS<<31) |\n";
-    print "      (($module+NS_ERROR_MODULE_BASE_OFFSET)<<16) | $code);\n";
-  }
-  elsif (/^\s*\/\*(.*)\*\/\s*$/ && !/^\s*\/\*@[\{\}]\*\/\s*$/ &&
-         !/^\s*\/\*\ -\*- Mode:/) {
-    #single line comment, but not 
-    #/*@{*/, /*@}*/, 
-    #/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-    print "  /*$1*/\n";
-  }
-  elsif (/^\s*$/) {
-    #empty line, but write only the first
-    #line from a sequence of empty lines
-    if (!$wasEmpty) {
-      print "\n";
-    }
-    $wasEmpty = 1;
-    next;
-  }
-  else {
-    next;
-  }
-
-  $wasEmpty = 0;
-}
-
-print "}\n";
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/GREVersionRange.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-
-public class GREVersionRange {
-
-  private String lower;
-  private boolean lowerInclusive;
-  private String upper;
-  private boolean upperInclusive;
-
-  public GREVersionRange(String aLower, boolean aLowerInclusive,
-                         String aUpper, boolean aUpperInclusive) {
-    lower = aLower;
-    lowerInclusive = aLowerInclusive;
-    upper = aUpper;
-    upperInclusive = aUpperInclusive;
-  }
-
-  public boolean check(String aVersion) {
-    VersionComparator comparator = new VersionComparator();
-    int c = comparator.compare(aVersion, lower);
-    if (c < 0) {
-      return false;
-    }
-
-    if (c == 0 && !lowerInclusive) {
-      return false;
-    }
-
-    c = comparator.compare(aVersion, upper);
-    if (c > 0) {
-      return false;
-    }
-
-    if (c == 0 && !upperInclusive) {
-      return false;
-    }
-
-    return true;
-  }
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/IAppFileLocProvider.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.File;
-
-
-/**
- * Used by XPCOM's Directory Service to get file locations.
- * <p>
- * This interface is similar to <code>nsIDirectoryServiceProvider</code> and
- * <code>nsIDirectoryServiceProvider2</code>, except that its methods use
- * <code>java.io.File</code> instead of <code>nsIFile</code>.
- * </p>
- *
- * @see Mozilla#initEmbedding
- * @see Mozilla#initXPCOM
- * @see <a href=
- *     "http://lxr.mozilla.org/mozilla/source/xpcom/io/nsIDirectoryService.idl">
- *      nsIDirectoryServiceProvider </a>
- * @see <a href=
- *    "http://lxr.mozilla.org/mozilla/source/xpcom/io/nsDirectoryServiceDefs.h">
- *      Directory Service property names </a>
- */
-public interface IAppFileLocProvider {
-
-  /**
-   * Directory Service calls this when it gets the first request for
-   * a property or on every request if the property is not persistent.
-   *
-   * @param prop        the symbolic name of the file
-   * @param persistent  an array of length one used to supply the output value:
-   *                    <ul>
-   *                      <li><code>true</code> - The returned file will be
-   *                      cached by Directory Service. Subsequent requests for
-   *                      this prop will bypass the provider and use the cache.
-   *                      </li>
-   *                      <li><code>false</code> - The provider will be asked
-   *                      for this prop each time it is requested. </li>
-   *                    </ul>
-   *
-   * @return            the file represented by the property
-   */
-  File getFile(String prop, boolean[] persistent);
-
-  /**
-   * Directory Service calls this when it gets a request for
-   * a property and the requested type is nsISimpleEnumerator.
-   *
-   * @param prop  the symbolic name of the file list
-   *
-   * @return      an array of file locations
-   */
-  File[] getFiles(String prop);
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/IGRE.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.File;
-
-
-public interface IGRE {
-
-  /**
-   * Initializes libXUL for embedding purposes.
-   * <p>
-   * NOTE: This function must be called from the "main" thread.
-   * <p>
-   * NOTE: At the present time, this function may only be called once in
-   *       a given process. Use <code>termEmbedding</code> to clean up and free
-   *       resources allocated by <code>initEmbedding</code>.
-   *
-   * @param aLibXULDirectory   The directory in which the libXUL shared library
-   *                           was found.
-   * @param aAppDirectory      The directory in which the application components
-   *                           and resources can be found. This will map to
-   *                           the "resource:app" directory service key.
-   * @param aAppDirProvider    A directory provider for the application. This
-   *                           provider will be aggregated by a libXUL provider
-   *                           which will provide the base required GRE keys.
-   *
-   * @throws XPCOMException  if a failure occurred during initialization
-   */
-  void initEmbedding(File aLibXULDirectory, File aAppDirectory,
-          IAppFileLocProvider aAppDirProvider) throws XPCOMException;
-
-  /**
-   * Terminates libXUL embedding.
-   * <p>
-   * NOTE: Release any references to XPCOM objects that you may be holding
-   *       before calling this function.
-   */
-  void termEmbedding();
-
-  /**
-   * Lock a profile directory using platform-specific semantics.
-   *
-   * @param aDirectory  The profile directory to lock.
-   *
-   * @return  A lock object. The directory will remain locked until the lock is
-   *          released by invoking the <code>release</code> method, or by the
-   *          termination of the JVM, whichever comes first.
-   *
-   * @throws XPCOMException if a failure occurred
-   */
-  ProfileLock lockProfileDirectory(File aDirectory) throws XPCOMException;
-
- /**
-   * Fire notifications to inform the toolkit about a new profile. This
-   * method should be called after <code>initEmbedding</code> if the
-   * embedder wishes to run with a profile.
-   * <p>
-   * Normally the embedder should call <code>lockProfileDirectory</code>
-   * to lock the directory before calling this method.
-   * <p>
-   * NOTE: There are two possibilities for selecting a profile:
-   * <ul>
-   * <li>
-   *    Select the profile before calling <code>initEmbedding</code>.
-   *    The aAppDirProvider object passed to <code>initEmbedding</code>
-   *    should provide the NS_APP_USER_PROFILE_50_DIR key, and
-   *    may also provide the following keys:
-   *      <ul>
-   *        <li>NS_APP_USER_PROFILE_LOCAL_50_DIR
-   *        <li>NS_APP_PROFILE_DIR_STARTUP
-   *        <li>NS_APP_PROFILE_LOCAL_DIR_STARTUP
-   *      </ul>
-   *    In this scenario <code>notifyProfile</code> should be called
-   *    immediately after <code>initEmbedding</code>. Component
-   *    registration information will be stored in the profile and
-   *    JS components may be stored in the fastload cache.
-   * </li>
-   * <li>
-   * 	Select a profile some time after calling <code>initEmbedding</code>.
-   *    In this case the embedder must install a directory service 
-   *    provider which provides NS_APP_USER_PROFILE_50_DIR and optionally
-   *    NS_APP_USER_PROFILE_LOCAL_50_DIR. Component registration information
-   *    will be stored in the application directory and JS components will not
-   *    fastload.
-   * </li>
-   * </ul>
-   */
-  void notifyProfile();
-
-}
-
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/IJavaXPCOMUtils.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2007
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-public interface IJavaXPCOMUtils {
-
-	/**
-	 * Returns a pointer to a C++ proxy object for the given Java object.
-	 * 
-	 * @param aJavaObject   Java object to encapsulate in C++ proxy
-	 * @param aIID          interface ID for requested proxy
-	 * @return  C pointer (as long) of new proxy
-	 */
-	long wrapJavaObject(Object aJavaObject, String aIID);
-
-	/**
-	 * Returns a Java proxy for the given C++ XPCOM object
-	 * 
-	 * @param aXPCOMObject  C++ XPCOM object to encapsulate in Java proxy
-	 * @param aIID          interface ID for requested proxy
-	 * @return  new Proxy
-	 */
-	Object wrapXPCOMObject(long aXPCOMObject, String aIID);
-
-}
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/IMozilla.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.File;
-
-public interface IMozilla {
-
-	/**
-	 * Initialize the Mozilla object with the given XULRunner path.  All
-	 * subsequent Mozilla method invocations be done against the given XULRunner
-	 * version.
-	 *
-	 * @param aLibXULDirectory  path of XULRunner build to use
-	 *
-	 * @throws XPCOMInitializationException if failure occurred during
-	 *         initialization
-	 */
-	void initialize(File aLibXULDirectory) throws XPCOMInitializationException;
-
-	/**
-	 * Return the native window handle for an AWT component.
-	 * 
-	 * @param widget  An AWT component (such as Canvas, Frame) that is backed by
-	 * 				  a real native window.
-	 * @return  the pointer to the native window (platform specific)
-	 */
-	long getNativeHandleFromAWT(Object widget);
-}
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/INIParser.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-
-/**
- * A simple parser for INI files.
- */
-public class INIParser {
-
-  private HashMap mSections;
-
-  /**
-   * Creates a new <code>INIParser</code> instance from the INI file at the
-   * given path. <code>aCharset</code> specifies the character encoding of
-   * the file.
-   * 
-   * @param aFilename path of INI file to parse
-   * @param aCharset character encoding of file
-   * @throws FileNotFoundException if <code>aFilename</code> does not exist.
-   * @throws IOException if there is a problem reading the given file.
-   */
-  public INIParser(String aFilename, Charset aCharset)
-          throws FileNotFoundException, IOException {
-    initFromFile(new File(aFilename), aCharset);
-  }
-
-  /**
-   * Creates a new <code>INIParser</code> instance from the INI file at the
-   * given path, which is assumed to be in the <code>UTF-8</code> charset.
-   * 
-   * @param aFilename path of INI file to parse
-   * @throws FileNotFoundException if <code>aFilename</code> does not exist.
-   * @throws IOException if there is a problem reading the given file.
-   */
-  public INIParser(String aFilename) throws FileNotFoundException, IOException {
-    initFromFile(new File(aFilename), Charset.forName("UTF-8"));
-  }
-
-  /**
-   * Creates a new <code>INIParser</code> instance from the given file.
-   * <code>aCharset</code> specifies the character encoding of the file.
-   * 
-   * @param aFile INI file to parse
-   * @param aCharset character encoding of file
-   * @throws FileNotFoundException if <code>aFile</code> does not exist.
-   * @throws IOException if there is a problem reading the given file.
-   */
-  public INIParser(File aFile, Charset aCharset)
-          throws FileNotFoundException, IOException {
-    initFromFile(aFile, aCharset);
-  }
-
-  /**
-   * Creates a new <code>INIParser</code> instance from the given file,
-   * which is assumed to be in the <code>UTF-8</code> charset.
-   * 
-   * @param aFile INI file to parse
-   * @throws FileNotFoundException if <code>aFile</code> does not exist.
-   * @throws IOException if there is a problem reading the given file.
-   */
-  public INIParser(File aFile) throws FileNotFoundException, IOException {
-    initFromFile(aFile, Charset.forName("UTF-8"));
-  }
-
-  /**
-   * Parses given INI file.
-   * 
-   * @param aFile INI file to parse
-   * @param aCharset character encoding of file
-   * @throws FileNotFoundException if <code>aFile</code> does not exist.
-   * @throws IOException if there is a problem reading the given file.
-   */
-  private void initFromFile(File aFile, Charset aCharset)
-          throws FileNotFoundException, IOException {
-    FileInputStream fileStream = new FileInputStream(aFile);
-    InputStreamReader inStream = new InputStreamReader(fileStream, aCharset);
-    BufferedReader reader = new BufferedReader(inStream);
-
-    mSections = new HashMap();
-    String currSection = null;
-
-    String line;
-    while ((line = reader.readLine()) != null) {
-      // skip empty lines and comment lines
-      String trimmedLine = line.trim();
-      if (trimmedLine.length() == 0 || trimmedLine.startsWith("#")
-              || trimmedLine.startsWith(";")) {
-        continue;
-      }
-
-      // Look for section headers (i.e. "[Section]").
-      if (line.startsWith("[")) {
-        /*
-         * We are looking for a well-formed "[Section]".  If this header is
-         * malformed (i.e. "[Section" or "[Section]Moretext"), just skip it
-         * and go on to next well-formed section header.
-         */
-        if (!trimmedLine.endsWith("]") ||
-            trimmedLine.indexOf("]") != (trimmedLine.length() - 1)) {
-          currSection = null;
-          continue;
-        }
-
-        // remove enclosing brackets
-        currSection = trimmedLine.substring(1, trimmedLine.length() - 1);
-        continue;
-      }
-
-      // If we haven't found a valid section header, continue to next line
-      if (currSection == null) {
-        continue;
-      }
-
-      StringTokenizer tok = new StringTokenizer(line, "=");
-      if (tok.countTokens() != 2) { // looking for value pairs
-        continue;
-      }
-
-      Properties props = (Properties) mSections.get(currSection);
-      if (props == null) {
-        props = new Properties();
-        mSections.put(currSection, props);
-      }
-      props.setProperty(tok.nextToken(), tok.nextToken());
-    }
-
-    reader.close();
-  }
-
-  /**
-   * Returns an iterator over the section names available in the INI file.
-   * 
-   * @return an iterator over the section names
-   */
-  public Iterator getSections() {
-    return mSections.keySet().iterator();
-  }
-
-  /**
-   * Returns an iterator over the keys available within a section.
-   *
-   * @param aSection section name whose keys are to be returned 
-   * @return an iterator over section keys, or <code>null</code> if no
-   *          such section exists
-   */
-  public Iterator getKeys(String aSection) {
-    /*
-     * Simple wrapper class to convert Enumeration to Iterator
-     */
-    class PropertiesIterator implements Iterator {
-      private Enumeration e;
-
-      public PropertiesIterator(Enumeration aEnum) {
-        e = aEnum;
-      }
-
-      public boolean hasNext() {
-        return e.hasMoreElements();
-      }
-
-      public Object next() {
-        return e.nextElement();
-      }
-
-      public void remove() {
-        return;
-      }
-    }
-
-    Properties props = (Properties) mSections.get(aSection);
-    if (props == null) {
-      return null;
-    }
-
-    return new PropertiesIterator(props.propertyNames());
-  }
-
-  /**
-   * Gets the string value for a particular section and key.
-   *
-   * @param aSection a section name
-   * @param aKey the key whose value is to be returned.
-   * @return string value of particular section and key
-   */
-  public String getString(String aSection, String aKey) {
-    Properties props = (Properties) mSections.get(aSection);
-    if (props == null) {
-      return null;
-    }
-
-    return props.getProperty(aKey);
-  }
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/IXPCOM.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.File;
-
-import org.mozilla.interfaces.nsIComponentManager;
-import org.mozilla.interfaces.nsIComponentRegistrar;
-import org.mozilla.interfaces.nsILocalFile;
-import org.mozilla.interfaces.nsIServiceManager;
-
-
-public interface IXPCOM {
-
-  /**
-   * Initializes XPCOM. You must call this method before proceeding
-   * to use XPCOM.
-   *
-   * @param aMozBinDirectory The directory containing the component
-   *                         registry and runtime libraries;
-   *                         or use <code>null</code> to use the working
-   *                         directory.
-   *
-   * @param aAppFileLocProvider The object to be used by Gecko that specifies
-   *                         to Gecko where to find profiles, the component
-   *                         registry preferences and so on; or use
-   *                         <code>null</code> for the default behaviour.
-   *
-   * @return the service manager
-   *
-   * @throws XPCOMException <ul>
-   *      <li> NS_ERROR_NOT_INITIALIZED - if static globals were not initialied,
-   *            which can happen if XPCOM is reloaded, but did not completly
-   *            shutdown. </li>
-   *      <li> Other error codes indicate a failure during initialisation. </li>
-   * </ul>
-   */
-  nsIServiceManager initXPCOM(File aMozBinDirectory,
-          IAppFileLocProvider aAppFileLocProvider) throws XPCOMException;
-
-  /**
-   * Shutdown XPCOM. You must call this method after you are finished
-   * using xpcom.
-   *
-   * @param aServMgr    The service manager which was returned by initXPCOM.
-   *                    This will release servMgr.
-   *
-   * @throws XPCOMException  if a failure occurred during termination
-   */
-  void shutdownXPCOM(nsIServiceManager aServMgr) throws XPCOMException;
-
-  /**
-   * Public Method to access to the service manager.
-   *
-   * @return the service manager
-   *
-   * @throws XPCOMException
-   */
-  nsIServiceManager getServiceManager() throws XPCOMException;
-
-  /**
-   * Public Method to access to the component manager.
-   *
-   * @return the component manager
-   *
-   * @throws XPCOMException
-   */
-  nsIComponentManager getComponentManager() throws XPCOMException;
-
-  /**
-   * Public Method to access to the component registration manager.
-   * 
-   * @return the component registration manager
-   *
-   * @throws XPCOMException
-   */
-  nsIComponentRegistrar getComponentRegistrar() throws XPCOMException;
-
-  /**
-   * Public Method to create an instance of a nsILocalFile.
-   *
-   * @param aPath         A string which specifies a full file path to a 
-   *                      location.  Relative paths will be treated as an
-   *                      error (NS_ERROR_FILE_UNRECOGNIZED_PATH).
-   * @param aFollowLinks  This attribute will determine if the nsLocalFile will
-   *                      auto resolve symbolic links.  By default, this value
-   *                      will be false on all non unix systems.  On unix, this
-   *                      attribute is effectively a noop.
-   *
-   * @return an instance of an nsILocalFile that points to given path
-   *
-   * @throws XPCOMException <ul>
-   *      <li> NS_ERROR_FILE_UNRECOGNIZED_PATH - raised for unrecognized paths
-   *           or relative paths (must supply full file path) </li>
-   * </ul>
-   */
-  nsILocalFile newLocalFile(String aPath, boolean aFollowLinks)
-          throws XPCOMException;
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/Mozilla.java
+++ /dev/null
@@ -1,1067 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Properties;
-
-import org.mozilla.interfaces.nsIComponentManager;
-import org.mozilla.interfaces.nsIComponentRegistrar;
-import org.mozilla.interfaces.nsILocalFile;
-import org.mozilla.interfaces.nsIServiceManager;
-import org.mozilla.interfaces.nsISupports;
-
-
-/**
- * A singleton class which provides access to the Mozilla browser.  Requires
- * that XULRunner be installed on the user's system.
- * <p>
- * You would use to class to find a XULRunner installation, setup a profile (if
- * necessary), and initialize embedding.  A typical scenario would look like
- * this:
- * </p><pre>
- * Mozilla mozilla = Mozilla.getInstance();
- * GREVersionRange[] range = new GREVersionRange[1];
- * range[0] = new GREVersionRange("1.8.0.*", false, "1.8.1.*", true);
- * try {
- *    File grePath = Mozilla.getGREPathWithProperties(range, null);
- *    mozilla.initialize(grePath);
- *    profLock = mozilla.lockProfileDirectory(profileDir);
- *    // LocationProvider is a user class that implements IAppFileLocProvider
- *    LocationProvider locProvider = new LocationProvider(grePath, profileDir);
- *    mozilla.initEmbedding(grePath, grePath, locProvider);
- *    mozilla.notifyProfile();
- * } catch (XPCOMInitializationException xie) {
- *    // handle exception
- * } catch (XPCOMException xe) {
- *    // handle exception
- * }
- * </pre>
- * 
- * @see http://www.mozilla.org/projects/embedding/GRE.html
- */
-public class Mozilla implements IMozilla, IGRE, IXPCOM, IJavaXPCOMUtils,
-IXPCOMError {
-
-  private static Mozilla mozillaInstance = new Mozilla();
-
-  private static final String JAVAXPCOM_JAR = "javaxpcom.jar";
-
-  private IMozilla mozilla = null;
-  private IGRE gre = null;
-  private IXPCOM xpcom = null;
-  private IJavaXPCOMUtils jxutils = null;
-
-  /**
-   * @return
-   */
-  public static Mozilla getInstance() {
-    return mozillaInstance;
-  }
-
-  /**
-   * 
-   */
-  private Mozilla() {
-  }
-
-  /**
-   * Locates the path of a GRE with the specified properties.  This method
-   * will only return GREs that support Java embedding (looks for the
-   * presence of "javaxpcom.jar").
-   * <p>
-   * Currently this uses a "first-fit" algorithm, it does not select
-   * the newest available GRE.
-   * 
-   * @param aVersions        An array of version ranges: if any version range
-   *                         matches, the GRE is considered acceptable.
-   * @param aProperties      A list of GRE property/value pairs which must
-   *                         all be satisfied.  This parameter is ignored on
-   *                         Macintosh, because of the manner in which the
-   *                         XUL frameworks are installed.
-   *
-   * @return                 A file object of the appropriate path. If
-   *                         the "local" GRE is specified (via the USE_LOCAL_GRE
-   *                         environment variable, for example), returns
-   *                         <code>null</code>.
-   *
-   * @throws FileNotFoundException if an appropriate GRE could not be found
-   */
-  public static File getGREPathWithProperties(GREVersionRange[] aVersions,
-          Properties aProperties) throws FileNotFoundException {
-    File grePath = null;
-
-    // if GRE_HOME is in the environment, use that GRE
-    String env = System.getProperty("GRE_HOME");
-    if (env != null) {
-      try {
-        grePath = new File(env).getCanonicalFile();
-      } catch (IOException e) {
-        throw new FileNotFoundException("cannot access GRE_HOME");
-      }
-      if (!grePath.exists()) {
-        throw new FileNotFoundException("GRE_HOME doesn't exist");
-      }
-      return grePath;
-    }
-
-    // the Gecko bits that sit next to the application or in the PATH
-    env = System.getProperty("USE_LOCAL_GRE");
-    if (env != null) {
-      return null;
-    }
-
-    // Search for GRE in platform specific locations.  We want a GRE that
-    // supports Java, so we look for the "javaxpcom" property by default.
-    if (aProperties == null) {
-      aProperties = new Properties();
-    }
-    aProperties.setProperty("javaxpcom", "1");
-
-    String osName = System.getProperty("os.name").toLowerCase();
-    if (osName.startsWith("mac os x")) {
-      grePath = getGREPathMacOSX(aVersions);
-    } else if (osName.startsWith("windows")) {
-      grePath = getGREPathWindows(aVersions, aProperties);
-    } else {
-      // assume everything else is Unix/Linux
-      grePath = getGREPathUnix(aVersions, aProperties);
-    }
-
-    if (grePath == null) {
-      throw new FileNotFoundException("GRE not found");
-    }
-
-    return grePath;
-  }
-
-  /**
-   * @param aVersions
-   * @return
-   */
-  private static File getGREPathMacOSX(GREVersionRange[] aVersions) {
-    /*
-     * Check the application bundle first, for
-     * <bundle>/Contents/Frameworks/XUL.framework/libxpcom.dylib.
-     */
-    File grePath = findGREBundleFramework();
-    if (grePath != null) {
-      return grePath;
-    }
-
-    // Check ~/Library/Frameworks/XUL.framework/Versions/<version>/libxpcom.dylib
-    String home = System.getProperty("user.home");
-    if (home != null) {
-      grePath = findGREFramework(home, aVersions);
-      if (grePath != null) {
-        return grePath;
-      }
-    }
-
-    // Check /Library/Frameworks/XUL.framework/Versions/<version>/libxpcom.dylib
-    return findGREFramework("", aVersions);
-  }
-
-  /**
-   * @return
-   */
-  private static File findGREBundleFramework() {
-    /*
-     * Use reflection to get Apple's NSBundle class, which can be used
-     * to get the bundle's "Frameworks" directory.
-     */
-    try {
-      URL[] urls = new URL[1];
-      urls[0] = new File("/System/Library/Java/").toURL();
-      ClassLoader loader = new URLClassLoader(urls);
-      Class bundleClass = Class.forName("com.apple.cocoa.foundation.NSBundle",
-                                        true, loader);
-
-      // Get the bundle for this app.  If this is not executing from
-      // a bundle, this will return null.
-      Method mainBundleMethod = bundleClass.getMethod("mainBundle", null);
-      Object bundle = mainBundleMethod.invoke(null, null);
-
-      if (bundle != null) {
-        // Get the path to the bundle's "Frameworks" directory
-        Method fwPathMethod = bundleClass.getMethod("privateFrameworksPath",
-                                                    null);
-        String path = (String) fwPathMethod.invoke(bundle, null);
-
-        // look for libxpcom.dylib
-        if (path.length() != 0) {
-          File xulDir = new File(path, "XUL.framework");
-          if (xulDir.isDirectory()) {
-            File xpcomLib = new File(xulDir, "libxpcom.dylib");
-            if (xpcomLib.canRead()) {
-              File grePath = xpcomLib.getCanonicalFile().getParentFile();
-
-              // Since GRE Properties aren't supported on Mac OS X, we check
-              // for the existence of the "javaxpcom.jar" file in the GRE.
-              File jar = new File(grePath, JAVAXPCOM_JAR);
-              if (jar.canRead()) {
-                // found GRE
-                return grePath;
-              }
-            }
-          }
-        }
-      }
-    } catch (Exception e) { }
-
-    return null;
-  }
-
-  /**
-   * @param aRootPath
-   * @param aVersions
-   * @return
-   */
-  private static File findGREFramework(String aRootPath,
-                                       GREVersionRange[] aVersions) {
-    File frameworkDir = new File(aRootPath +
-                                 "/Library/Frameworks/XUL.framework/Versions");
-    if (!frameworkDir.exists())
-      return null;
-
-    File[] files = frameworkDir.listFiles();
-    for (int i = 0; i < files.length; i++) {
-      if (checkVersion(files[i].getName(), aVersions)) {
-        File xpcomLib = new File(files[i], "libxpcom.dylib");
-
-        // Since GRE Properties aren't supported on Mac OS X, we check
-        // for the existence of the "javaxpcom.jar" file in the GRE.
-        File jar = new File(files[i], JAVAXPCOM_JAR);
-        if (xpcomLib.canRead() && jar.canRead()) {
-          return files[i];
-        }
-      }
-    }
-
-    return null;
-  }
-
-  /**
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getGREPathWindows(GREVersionRange[] aVersions,
-                                        Properties aProperties) {
-    /*
-     * Note the usage of the "Software\\mozilla.org\\GRE" subkey - this allows
-     * us to have multiple versions of GREs on the same machine by having
-     * subkeys such as 1.0, 1.1, 2.0 etc. under it.
-     *
-     * Please see http://www.mozilla.org/projects/embedding/GRE.html for
-     * more info.
-     */
-
-    final String greKey = "Software\\mozilla.org\\GRE";
-
-    // See if there is a GRE registered for the current user.
-    // If not, look for one on the system.
-    String key = "HKEY_CURRENT_USER" + "\\" + greKey;
-    File grePath = getGREPathFromRegKey(key, aVersions, aProperties);
-    if (grePath == null) {
-      key = "HKEY_LOCAL_MACHINE" + "\\" + greKey;
-      grePath = getGREPathFromRegKey(key, aVersions, aProperties);
-    }
-
-    return grePath;
-  }
-
-  /**
-   * @param aRegKey
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getGREPathFromRegKey(String aRegKey,
-          GREVersionRange[] aVersions, Properties aProperties) {
-    // create a temp file for the registry export
-    File tempFile;
-    try {
-      tempFile = File.createTempFile("jx_registry", null);
-    } catch (IOException e) {
-      // failed to create temp file.  ABORT
-      return null;
-    }
-
-    Process proc;
-    try {
-      proc = Runtime.getRuntime().exec("regedit /e " + "\"" + tempFile.getPath()
-              + "\" \"" + aRegKey + "\"");
-      proc.waitFor();
-    } catch (Exception e) {
-      // Failed to run regedit.exe.  Length of temp file is zero, and that's
-      // handled next.
-    }
-
-    // If there is a key by that name in the registry, then the file length
-    // will not be zero.
-    File grePath = null;
-    if (tempFile.length() != 0) {
-      grePath = getGREPathFromRegistryFile(tempFile.getPath(),
-              aRegKey, aVersions, aProperties);
-    }
-
-    tempFile.delete();
-    return grePath;
-  }
-
-  /**
-   * @param aFileName
-   * @param aCharset
-   * @param aKeyName
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getGREPathFromRegistryFile(String aFileName,
-          String aKeyName, GREVersionRange[] aVersions,
-          Properties aProperties) {
-    INIParser parser;
-    try {
-      parser = new INIParser(aFileName, Charset.forName("UTF-16"));
-    } catch (Exception e) {
-      // Problem reading from file.  Bail out.
-      return null;
-    }
-
-    Iterator sectionsIter = parser.getSections();
-    while (sectionsIter.hasNext()) {
-      // get 'section' name, which will be a registry key name
-      String section = (String) sectionsIter.next();
-
-      // Skip over GRE key ("<root>\Software\mozilla.org\GRE")
-      int gre_len = aKeyName.length();
-      if (section.length() <= gre_len) {
-        continue;
-      }
-
-      // Get the GRE subkey;  that is, everything after
-      // "<root>\Software\mozilla.org\GRE\"
-      String subkeyName = section.substring(gre_len + 1);
-
-      // We are only interested in _immediate_ subkeys.  We want
-      // "<root>\Software\mozilla.org\GRE\<version>" but not
-      // "<root>\Software\mozilla.org\GRE\<version>\<moretext>".
-      if (subkeyName.indexOf('\\') != -1) {
-        continue;
-      }
-
-      // See if this registry key has a "Version" value, and if so, compare
-      // it to our desired versions.
-      String version = parser.getString(section, "\"Version\"");
-      if (version == null) {
-        continue;
-      }
-      // remove quotes around string
-      version = version.substring(1, version.length() - 1);
-      if (!checkVersion(version, aVersions)) {
-        continue;
-      }
-
-      // All properties must match, keeping in mind that the propery/value
-      // pairs returned by regedit.exe have quotes around them.
-      if (aProperties != null) {
-        boolean ok = true;
-        Enumeration e = aProperties.propertyNames();
-        while (ok && e.hasMoreElements()) {
-          String prop = (String) e.nextElement();
-          String greValue = parser.getString(section, "\"" + prop + "\"");
-          if (greValue == null) {
-            // No such property is set for this GRE. Go on to next GRE.
-            ok = false;
-          } else  {
-            // See if the value of the property for the GRE matches
-            // the given value.
-            String value = aProperties.getProperty(prop);
-            if (!greValue.equals("\"" + value + "\"")) {
-              ok = false;
-            }
-          }
-        }
-        if (!ok) {
-          continue;
-        }
-      }
-
-      String pathStr = parser.getString(section, "\"GreHome\"");
-      if (pathStr != null) {
-        // remove quotes around string
-        pathStr = pathStr.substring(1, pathStr.length() - 1);
-        File grePath = new File(pathStr);
-        if (grePath.exists()) {
-          File xpcomLib = new File(grePath, "xpcom.dll");
-          if (xpcomLib.canRead()) {
-            // found a good GRE
-            return grePath;
-          }
-        }
-      }
-    }
-
-    return null;
-  }
-
-  /**
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getGREPathUnix(GREVersionRange[] aVersions,
-                                     Properties aProperties) {
-    File grePath = null;
-
-    String env = System.getProperty("MOZ_GRE_CONF");
-    if (env != null) {
-      grePath = getPathFromConfigFile(env, aVersions, aProperties);
-      if (grePath != null) {
-        return grePath;
-      }
-    }
-
-    final String greUserConfFile = ".gre.config";
-    final String greUserConfDir = ".gre.d";
-    final String greConfPath = "/etc/gre.conf";
-    final String greConfDir = "/etc/gre.d";
-
-    env = System.getProperty("user.home");
-    if (env != null) {
-      // Look in ~/.gre.config
-      grePath = getPathFromConfigFile(env + File.separator + greUserConfFile,
-                                      aVersions, aProperties);
-      if (grePath != null) {
-        return grePath;
-      }
-
-      // Look in ~/.gre.d/*.conf
-      grePath = getPathFromConfigDir(env + File.separator + greUserConfDir,
-                                     aVersions, aProperties);
-      if (grePath != null) {
-        return grePath;
-      }
-    }
-
-    // Look for a global /etc/gre.conf file
-    grePath = getPathFromConfigFile(greConfPath, aVersions, aProperties);
-    if (grePath != null) {
-      return grePath;
-    }
-
-    // Look for a group of config files in /etc/gre.d/
-    grePath = getPathFromConfigDir(greConfDir, aVersions, aProperties);
-    return grePath;
-  }
-
-  /**
-   * @param aFileName
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getPathFromConfigFile(String aFileName,
-          GREVersionRange[] aVersions, Properties aProperties) {
-    INIParser parser;
-    try {
-      parser = new INIParser(aFileName);
-    } catch (Exception e) {
-      // Problem reading from file.  Bail out.
-      return null;
-    }
-
-    Iterator sectionsIter = parser.getSections();
-    while (sectionsIter.hasNext()) {
-      // get 'section' name, which will be a version string
-      String section = (String) sectionsIter.next();
-
-      // if this isn't one of the versions we are looking for, move
-      // on to next section
-      if (!checkVersion(section, aVersions)) {
-        continue;
-      }
-
-      // all properties must match
-      if (aProperties != null) {
-        boolean ok = true;
-        Enumeration e = aProperties.propertyNames();
-        while (ok && e.hasMoreElements()) {
-          String prop = (String) e.nextElement();
-          String greValue = parser.getString(section, prop);
-          if (greValue == null) {
-            // No such property is set for this GRE. Go on to next GRE.
-            ok = false;
-          } else  {
-            // See if the value of the property for the GRE matches
-            // the given value.
-            if (!greValue.equals(aProperties.getProperty(prop))) {
-              ok = false;
-            }
-          }
-        }
-        if (!ok) {
-          continue;
-        }
-      }
-
-      String pathStr = parser.getString(section, "GRE_PATH");
-      if (pathStr != null) {
-        File grePath = new File(pathStr);
-        if (grePath.exists()) {
-          File xpcomLib = new File(grePath, "libxpcom.so");
-          if (xpcomLib.canRead()) {
-            // found a good GRE
-            return grePath;
-          }
-        }
-      }
-    }
-
-    return null;
-  }
-
-  /**
-   * @param aDirName
-   * @param aVersions
-   * @param aProperties
-   * @return
-   */
-  private static File getPathFromConfigDir(String aDirName,
-          GREVersionRange[] aVersions, Properties aProperties) {
-    /*
-     * Open the directory provided and try to read any files in that
-     * directory that end with .conf.  We look for an entry that might
-     * point to the GRE that we're interested in.
-     */
-
-    File dir = new File(aDirName);
-    if (!dir.isDirectory()) {
-      return null;
-    }
-
-    File grePath = null;
-    File[] files = dir.listFiles();
-    for (int i = 0; i < files.length && grePath == null; i++) {
-      // only look for files that end in '.conf'
-      if (!files[i].getName().endsWith(".conf")) {
-        continue;
-      }
-
-      grePath = getPathFromConfigFile(files[i].getPath(), aVersions,
-                                      aProperties);
-    }
-
-    return grePath;
-  }
-
-  /**
-   * @param aVersionToCheck
-   * @param aVersions
-   * @return
-   */
-  private static boolean checkVersion(String aVersionToCheck,
-                                      GREVersionRange[] aVersions) {
-    for (int i = 0; i < aVersions.length; i++) {
-      if (aVersions[i].check(aVersionToCheck)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Initialize the Mozilla object with the given XULRunner path.  All
-   * subsequent Mozilla method invocations be done against the given XULRunner
-   * version.
-   *
-   * @param aLibXULDirectory  path of XULRunner build to use
-   *
-   * @throws XPCOMInitializationException if failure occurred during
-   *         initialization
-   */
-  public void initialize(File aLibXULDirectory)
-  throws XPCOMInitializationException {
-    File jar = new File(aLibXULDirectory, JAVAXPCOM_JAR);
-    if (!jar.exists()) {
-      throw new XPCOMInitializationException("Could not find " + JAVAXPCOM_JAR +
-          " in " + aLibXULDirectory);
-    }
-
-    URL[] urls = new URL[1];
-    try {
-      urls[0] = jar.toURL();
-    } catch (MalformedURLException e) {
-      throw new XPCOMInitializationException(e);
-    }
-    ClassLoader loader = new URLClassLoader(urls,
-            this.getClass().getClassLoader());
-
-    try {
-      Class mozillaClass = Class.forName("org.mozilla.xpcom.internal.MozillaImpl",
-          true, loader);
-      mozilla  = (IMozilla) mozillaClass.newInstance();
-
-      Class greClass = Class.forName("org.mozilla.xpcom.internal.GREImpl",
-          true, loader);
-      gre = (IGRE) greClass.newInstance();
-
-      Class xpcomClass = Class.forName("org.mozilla.xpcom.internal.XPCOMImpl",
-                                       true, loader);
-      xpcom = (IXPCOM) xpcomClass.newInstance();
-
-      Class javaXPCOMClass =
-    	  Class.forName("org.mozilla.xpcom.internal.JavaXPCOMMethods",
-    			  true, loader);
-      jxutils  = (IJavaXPCOMUtils) javaXPCOMClass.newInstance();
-    } catch (Exception e) {
-      throw new XPCOMInitializationException("Could not load " +
-          "org.mozilla.xpcom.internal.* classes", e);
-    }
-    
-    mozilla.initialize(aLibXULDirectory);
-  }
-
-  /**
-   * Initializes libXUL for embedding purposes.
-   * <p>
-   * NOTE: This function must be called from the "main" thread.
-   * <p>
-   * NOTE: At the present time, this function may only be called once in
-   *       a given process. Use <code>termEmbedding</code> to clean up and free
-   *       resources allocated by <code>initEmbedding</code>.
-   *
-   * @param aLibXULDirectory   The directory in which the libXUL shared library
-   *                           was found.
-   * @param aAppDirectory      The directory in which the application components
-   *                           and resources can be found. This will map to
-   *                           the "resource:app" directory service key.
-   * @param aAppDirProvider    A directory provider for the application. This
-   *                           provider will be aggregated by a libXUL provider
-   *                           which will provide the base required GRE keys.
-   *
-   * @throws XPCOMException if a failure occurred during initialization
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public void initEmbedding(File aLibXULDirectory, File aAppDirectory,
-          IAppFileLocProvider aAppDirProvider) throws XPCOMException {
-    try {
-      gre.initEmbedding(aLibXULDirectory, aAppDirectory, aAppDirProvider);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Terminates libXUL embedding.
-   * <p>
-   * NOTE: Release any references to XPCOM objects that you may be holding
-   *       before calling this function.
-   *
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public void termEmbedding() {
-    try {
-      gre.termEmbedding();
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    } finally {
-      mozilla = null;
-      gre = null;
-      xpcom = null;
-    }
-  }
-
-  /**
-   * Lock a profile directory using platform-specific semantics.
-   *
-   * @param aDirectory  The profile directory to lock.
-   *
-   * @return  A lock object. The directory will remain locked until the lock is
-   *          released by invoking the <code>release</code> method, or by the
-   *          termination of the JVM, whichever comes first.
-   *
-   * @throws XPCOMException if profile is already locked (with
-   *         <code>errorcode</code> == <code>NS_ERROR_FILE_ACCESS_DENIED</code>);
-   *         or if a failure occurred
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public ProfileLock lockProfileDirectory(File aDirectory)
-  throws XPCOMException {
-	  try {
-     return gre.lockProfileDirectory(aDirectory);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);      
-    }
-  }
-
-  /**
-   * Fire notifications to inform the toolkit about a new profile. This
-   * method should be called after <code>initEmbedding</code> if the
-   * embedder wishes to run with a profile.
-   * <p>
-   * Normally the embedder should call <code>lockProfileDirectory</code>
-   * to lock the directory before calling this method.
-   * <p>
-   * NOTE: There are two possibilities for selecting a profile:
-   * <ul>
-   * <li>
-   *    Select the profile before calling <code>initEmbedding</code>.
-   *    The aAppDirProvider object passed to <code>initEmbedding</code>
-   *    should provide the NS_APP_USER_PROFILE_50_DIR key, and
-   *    may also provide the following keys:
-   *      <ul>
-   *        <li>NS_APP_USER_PROFILE_LOCAL_50_DIR
-   *        <li>NS_APP_PROFILE_DIR_STARTUP
-   *        <li>NS_APP_PROFILE_LOCAL_DIR_STARTUP
-   *      </ul>
-   *    In this scenario <code>notifyProfile</code> should be called
-   *    immediately after <code>initEmbedding</code>. Component
-   *    registration information will be stored in the profile and
-   *    JS components may be stored in the fastload cache.
-   * </li>
-   * <li>
-   * 	Select a profile some time after calling <code>initEmbedding</code>.
-   *    In this case the embedder must install a directory service 
-   *    provider which provides NS_APP_USER_PROFILE_50_DIR and optionally
-   *    NS_APP_USER_PROFILE_LOCAL_50_DIR. Component registration information
-   *    will be stored in the application directory and JS components will not
-   *    fastload.
-   * </li>
-   * </ul>
-   *
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public void notifyProfile() {
-    try {
-      gre.notifyProfile();
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Initializes XPCOM. You must call this method before proceeding
-   * to use XPCOM.
-   *
-   * @param aMozBinDirectory The directory containing the component
-   *                         registry and runtime libraries;
-   *                         or use <code>null</code> to use the working
-   *                         directory.
-   *
-   * @param aAppFileLocProvider The object to be used by Gecko that specifies
-   *                         to Gecko where to find profiles, the component
-   *                         registry preferences and so on; or use
-   *                         <code>null</code> for the default behaviour.
-   *
-   * @return the service manager
-   *
-   * @throws XPCOMException <ul>
-   *      <li> NS_ERROR_NOT_INITIALIZED - if static globals were not initialied,
-   *            which can happen if XPCOM is reloaded, but did not completly
-   *            shutdown. </li>
-   *      <li> Other error codes indicate a failure during initialisation. </li>
-   * </ul>
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public nsIServiceManager initXPCOM(File aMozBinDirectory,
-          IAppFileLocProvider aAppFileLocProvider) throws XPCOMException {
-    try {
-      return xpcom.initXPCOM(aMozBinDirectory, aAppFileLocProvider);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Shutdown XPCOM. You must call this method after you are finished
-   * using xpcom.
-   *
-   * @param aServMgr    The service manager which was returned by initXPCOM.
-   *                    This will release servMgr.
-   *
-   * @throws XPCOMException if a failure occurred during termination
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public void shutdownXPCOM(nsIServiceManager aServMgr) throws XPCOMException {
-    try {
-      xpcom.shutdownXPCOM(aServMgr);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    } finally {
-      mozilla = null;
-      gre = null;
-      xpcom = null;
-    }
-  }
-
-  /**
-   * Public Method to access to the service manager.
-   *
-   * @return the service manager
-   *
-   * @throws XPCOMException if a failure occurred
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public nsIServiceManager getServiceManager() throws XPCOMException {
-    try {
-      return xpcom.getServiceManager();
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Public Method to access to the component manager.
-   *
-   * @return the component manager
-   *
-   * @throws XPCOMException if a failure occurred
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public nsIComponentManager getComponentManager() throws XPCOMException {
-    try {
-      return xpcom.getComponentManager();
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Public Method to access to the component registration manager.
-   * 
-   * @return the component registration manager
-   *
-   * @throws XPCOMException if a failure occurred
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public nsIComponentRegistrar getComponentRegistrar() throws XPCOMException {
-    try {
-      return xpcom.getComponentRegistrar();
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * Public Method to create an instance of a nsILocalFile.
-   *
-   * @param aPath         A string which specifies a full file path to a 
-   *                      location.  Relative paths will be treated as an
-   *                      error (NS_ERROR_FILE_UNRECOGNIZED_PATH).
-   * @param aFollowLinks  This attribute will determine if the nsLocalFile will
-   *                      auto resolve symbolic links.  By default, this value
-   *                      will be false on all non unix systems.  On unix, this
-   *                      attribute is effectively a noop.
-   *
-   * @return an instance of an nsILocalFile that points to given path
-   *
-   * @throws XPCOMException <ul>
-   *      <li> NS_ERROR_FILE_UNRECOGNIZED_PATH - raised for unrecognized paths
-   *           or relative paths (must supply full file path) </li>
-   * </ul>
-   * @throws XPCOMInitializationException if Mozilla was not properly
-   *         initialized
-   */
-  public nsILocalFile newLocalFile(String aPath, boolean aFollowLinks)
-          throws XPCOMException {
-    try {
-      return xpcom.newLocalFile(aPath, aFollowLinks);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-  /**
-   * If you create a class that implements nsISupports, you will need to provide
-   * an implementation of the <code>queryInterface</code> method.  This helper
-   * function provides a simple implementation.  Therefore, if your class does
-   * not need to do anything special with <code>queryInterface</code>, your
-   * implementation would look like:
-   * <pre>
-   *      public nsISupports queryInterface(String aIID) {
-   *        return XPCOM.queryInterface(this, aIID);
-   *      }
-   * </pre>
-   *
-   * @param aObject object to query
-   * @param aIID    requested interface IID
-   *
-   * @return        <code>aObject</code> if the given object supports that
-   *                interface;
-   *                <code>null</code> otherwise.
-   */
-  public static nsISupports queryInterface(nsISupports aObject, String aIID) {
-    ArrayList classes = new ArrayList();
-    classes.add(aObject.getClass());
-
-    while (!classes.isEmpty()) {
-      Class clazz = (Class) classes.remove(0);
-
-      // Skip over any class/interface in the "java.*" and "javax.*" domains.
-      String className = clazz.getName();
-      if (className.startsWith("java.") || className.startsWith("javax.")) {
-        continue;
-      }
-
-      // If given IID matches that of the current interface, then we
-      // know that aObject implements the interface specified by the given IID.
-      if (clazz.isInterface() && className.startsWith("org.mozilla")) {
-        String iid = Mozilla.getInterfaceIID(clazz);
-        if (iid != null && aIID.equals(iid)) {
-          return aObject;
-        }
-      }
-
-      // clazz didn't match, so add the interfaces it implements
-      Class[] interfaces = clazz.getInterfaces();
-      for (int i = 0; i < interfaces.length; i++ ) {
-        classes.add(interfaces[i]);
-      }
-
-      // Also add its superclass
-      Class superclass = clazz.getSuperclass();
-      if (superclass != null) {
-        classes.add(superclass);
-      }
-    }
-
-    return null;
-  }
-
-  /**
-   * Gets the interface IID for a particular Java interface.  This is similar
-   * to NS_GET_IID in the C++ Mozilla files.
-   *
-   * @param aInterface  interface which has defined an IID
-   *
-   * @return            IID for given interface
-   */
-  public static String getInterfaceIID(Class aInterface) {
-    // Get short class name (i.e. "bar", not "org.blah.foo.bar")
-    StringBuffer iidName = new StringBuffer();
-    String fullClassName = aInterface.getName();
-    int index = fullClassName.lastIndexOf(".");
-    String className = index > 0 ? fullClassName.substring(index + 1)
-                                 : fullClassName;
-
-    // Create iid field name
-    if (className.startsWith("ns")) {
-      iidName.append("NS_");
-      iidName.append(className.substring(2).toUpperCase());
-    } else {
-      iidName.append(className.toUpperCase());
-    }
-    iidName.append("_IID");
-
-    String iid;
-    try {
-      Field iidField = aInterface.getDeclaredField(iidName.toString());
-      iid = (String) iidField.get(null);
-    } catch (NoSuchFieldException e) {
-      // Class may implement non-Mozilla interfaces, which would not have an
-      // IID method.  In that case, just null.
-      iid = null;
-    } catch (IllegalAccessException e) {
-      // Not allowed to access that field for some reason.  Write out an
-      // error message, but don't fail.
-      System.err.println("ERROR: Could not get field " + iidName.toString());
-      iid = null;
-    }
-
-    return iid;
-  }
-
-  public long getNativeHandleFromAWT(Object widget) {
-    try {
-      return mozilla.getNativeHandleFromAWT(widget);
-    } catch (NullPointerException e) {
-      throw new XPCOMInitializationException("Must call " +
-          "Mozilla.getInstance().initialize() before using this method", e);
-    }
-  }
-
-	public long wrapJavaObject(Object aJavaObject, String aIID) {
-		try {
-			return jxutils.wrapJavaObject(aJavaObject, aIID);
-		} catch (NullPointerException e) {
-			throw new XPCOMInitializationException("Must call " +
-					"Mozilla.getInstance().initialize() before using this method", e);
-		}
-	}
-
-	public Object wrapXPCOMObject(long aXPCOMObject, String aIID) {
-		try {
-			return jxutils.wrapXPCOMObject(aXPCOMObject, aIID);
-		} catch (NullPointerException e) {
-			throw new XPCOMInitializationException("Must call " +
-					"Mozilla.getInstance().initialize() before using this method", e);
-		}
-	}
-
-}
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/ProfileLock.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-public class ProfileLock {
-
-  private long lock = 0;
-
-  public ProfileLock(long aLockObject) {
-    lock = aLockObject;
-  }
-
-  public void release() {
-    releaseNative(lock);
-    lock = 0;
-  }
-
-  private native void releaseNative(long aLockObject);
-
-  public boolean isValid() {
-    return lock != 0;
-  }
-
-  protected void finalize() throws Throwable {
-    release();
-    super.finalize();
-  }
-
-}
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/VersionComparator.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-import java.util.Enumeration;
-import java.util.StringTokenizer;
-
-import org.mozilla.interfaces.nsISupports;
-import org.mozilla.interfaces.nsIVersionComparator;
-
-
-/**
- * Version strings are dot-separated sequences of version-parts.
- * <p>
- * A version-part consists of up to four parts, all of which are optional:
- * <br><code>
- * &lt;number-a&gt;&lt;string-b&gt;&lt;number-c&gt;
- * &lt;string-d (everything else)&gt;
- * </code> <p>
- * A version-part may also consist of a single asterisk "*" which indicates
- * "infinity".
- * <p>
- * Numbers are base-10, and are zero if left out.
- * Strings are compared bytewise.
- * <p>
- * For additional backwards compatibility, if "string-b" is "+" then
- * "number-a" is incremented by 1 and "string-b" becomes "pre".
- * <p> <pre>
- * 1.0pre1
- * < 1.0pre2  
- *   < 1.0 == 1.0.0 == 1.0.0.0
- *     < 1.1pre == 1.1pre0 == 1.0+
- *       < 1.1pre1a
- *         < 1.1pre1
- *           < 1.1pre10a
- *             < 1.1pre10
- * </pre>
- * Although not required by this interface, it is recommended that
- * numbers remain within the limits of a signed char, i.e. -127 to 128.
- */
-public class VersionComparator implements nsIVersionComparator {
-
-  public nsISupports queryInterface(String aIID) {
-    return Mozilla.queryInterface(this, aIID);
-  }
-
-  /**
-   * Compare two version strings
-   * @param A   a version string
-   * @param B   a version string
-   * @return a value less than 0 if A < B;
-   *         the value 0 if A == B;
-   *         or a value greater than 0 if A > B
-   */
-  public int compare(String A, String B) {
-    int result;
-    String a = A, b = B;
-
-    do {
-      VersionPart va = new VersionPart();
-      VersionPart vb = new VersionPart();
-      a = parseVersionPart(a, va);
-      b = parseVersionPart(b, vb);
-
-      result = compareVersionPart(va, vb);
-      if (result != 0) {
-        break;
-      }
-    } while (a != null || b != null);
-
-    return result;
-  }
-
-  private class VersionPart {
-    int     numA = 0;
-    String  strB;
-    int     numC = 0;
-    String  extraD;
-  }
-
-  private static String parseVersionPart(String aVersion, VersionPart result) {
-    if (aVersion == null || aVersion.length() == 0) {
-      return aVersion;
-    }
-
-    StringTokenizer tok = new StringTokenizer(aVersion.trim(), ".");
-    String part = tok.nextToken();
-
-    if (part.equals("*")) {
-      result.numA = Integer.MAX_VALUE;
-      result.strB = "";
-    } else {
-      VersionPartTokenizer vertok = new VersionPartTokenizer(part);
-      try {
-        result.numA = Integer.parseInt(vertok.nextToken());
-      } catch (NumberFormatException e) {
-        // parsing error; default to zero like 'strtol' C function
-        result.numA = 0;
-      }
-
-      if (vertok.hasMoreElements()) {
-        String str = vertok.nextToken();
-
-        // if part is of type "<num>+"
-        if (str.charAt(0) == '+') {
-          result.numA++;
-          result.strB = "pre";
-        } else {
-          // else if part is of type "<num><alpha>..."
-          result.strB = str;
-
-          if (vertok.hasMoreTokens()) {
-            try {
-              result.numC = Integer.parseInt(vertok.nextToken());
-            } catch (NumberFormatException e) {
-              // parsing error; default to zero like 'strtol' C function
-              result.numC = 0;
-            }
-            if (vertok.hasMoreTokens()) {
-              result.extraD = vertok.getRemainder();
-            }
-          }
-        }
-      }
-    }
-
-    if (tok.hasMoreTokens()) {
-      // return everything after "."
-      return aVersion.substring(part.length() + 1);
-    }
-    return null;
-  }
-
-  private int compareVersionPart(VersionPart va, VersionPart vb) {
-    int res = compareInt(va.numA, vb.numA);
-    if (res != 0) {
-      return res;
-    }
-
-    res = compareString(va.strB, vb.strB);
-    if (res != 0) {
-      return res;
-    }
-
-    res = compareInt(va.numC, vb.numC);
-    if (res != 0) {
-      return res;
-    }
-
-    return compareString(va.extraD, vb.extraD);
-  }
-
-  private int compareInt(int n1, int n2) {
-    return n1 - n2;
-  }
-
-  private int compareString(String str1, String str2) {
-    // any string is *before* no string
-    if (str1 == null) {
-      return (str2 != null) ? 1 : 0;
-    }
-
-    if (str2 == null) {
-      return -1;
-    }
-
-    return str1.compareTo(str2);
-  }
-
-}
-
-/**
- * Specialized tokenizer for Mozilla version strings.  A token can
- * consist of one of the four sections of a version string: <code>
- * &lt;number-a&gt;&lt;string-b&gt;&lt;number-c&gt;
- * &lt;string-d (everything else)&gt;</code>.
- */
-class VersionPartTokenizer implements Enumeration {
-
-  String part;
-
-  public VersionPartTokenizer(String aPart) {
-    part = aPart;
-  }
-
-  public boolean hasMoreElements() {
-    return part.length() != 0;
-  }
-
-  public boolean hasMoreTokens() {
-    return part.length() != 0;
-  }
-
-  public Object nextElement() {
-    if (part.matches("[\\+\\-]?[0-9].*")) {
-      // if string starts with a number...
-      int index = 0;
-      if (part.charAt(0) == '+' || part.charAt(0) == '-') {
-        index = 1;
-      }
-
-      while (index < part.length() && Character.isDigit(part.charAt(index))) {
-        index++;
-      }
-
-      String numPart = part.substring(0, index);
-      part = part.substring(index);
-      return numPart;
-    } else {
-      // ... or if this is the non-numeric part of version string
-      int index = 0;
-      while (index < part.length() && !Character.isDigit(part.charAt(index))) {
-        index++;
-      }
-
-      String alphaPart = part.substring(0, index);
-      part = part.substring(index);
-      return alphaPart;
-    }
-  }
-
-  public String nextToken() {
-    return (String) nextElement();
-  }
-
-  /**
-   * Returns what remains of the original string, without tokenization.  This
-   * method is useful for getting the <code>&lt;string-d (everything else)&gt;
-   * </code> section of a version string.
-   * 
-   * @return remaining version string
-   */
-  public String getRemainder() {
-    return part;
-  }
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/XPCOMException.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-
-/**
- * This exception is thrown whenever an internal XPCOM/Gecko error occurs.
- * You can query the error ID returned by XPCOM by checking
- * <code>errorcode</code> field.
- */
-public class XPCOMException extends RuntimeException {
-
-  /**
-   * The XPCOM error value.
-   */
-  public long errorcode;
-
-  private static final long serialVersionUID = 198521829884000593L;
-
-  /**
-   * Constructs a new XPCOMException instance, with a default error
-   * (NS_ERROR_FAILURE) and message.
-   */
-  public XPCOMException() {
-    this(0x80004005L, "Unspecified internal XPCOM error");
-  }
-
-  /**
-   * Constructs a new XPCOMException instance with the given message, passing
-   * NS_ERROR_FAILURE as the error code.
-   *
-   * @param message   detailed message of exception
-   */
-  public XPCOMException(String message) {
-    this(0x80004005L, message);
-  }
-
-  /**
-   * Constructs a new XPCOMException instance with the given code, passing
-   * a default message.
-   *
-   * @param code      internal XPCOM error ID
-   */
-  public XPCOMException(long code) {
-    this(code, "Internal XPCOM error");
-  }
-
-  /**
-   * Constructs a new XPCOMException instance with an error code and message.
-   *
-   * @param code      internal XPCOM error ID
-   * @param message   detailed message of exception
-   */
-  public XPCOMException(long code, String message) {
-    super(message + "  (0x" + Long.toHexString(code) + ")");
-    this.errorcode = code;
-  }
-
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/interfaces/org/mozilla/xpcom/XPCOMInitializationException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.xpcom;
-
-
-public class XPCOMInitializationException extends RuntimeException {
-
-  private static final long serialVersionUID = -7067350325909231055L;
-
-  public XPCOMInitializationException(String message) {
-    super(message);
-  }
-
-  public XPCOMInitializationException(Throwable cause) {
-    super(cause);
-  }
-
-  public XPCOMInitializationException(String message, Throwable cause) {
-    super(message, cause);
-  }
-
-}
deleted file mode 100644
--- a/extensions/java/xpcom/package/Makefile.in
+++ /dev/null
@@ -1,84 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is mozilla.org code.
-#
-# The Initial Developer of the Original Code is
-# IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2005
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#   Brian Ryner <bryner@brianryner.com>
-#   Javier Pedemonte <jhpedemonte@gmail.com>
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-ifeq ($(OS_ARCH),WINNT)
-PKGCP_PLATFORM = dos
-PACKAGE_FILE = packages-win
-else
-PKGCP_PLATFORM=unix
-ifeq ($(OS_ARCH),Darwin)
-PACKAGE_FILE = packages-mac
-else
-PACKAGE_FILE = packages-unix
-endif
-endif
-
-PACKAGE_VERSION = 0.1
-
-GARBAGE += javaconnect.js javaconnect.template
-GARBAGE_DIRS += stage
-
-include $(topsrcdir)/config/rules.mk
-
-stage/javaconnect/.done:
-	@echo Copying files to staging area...
-	rm -rf stage
-	$(NSINSTALL) -D stage
-	$(PERL) $(topsrcdir)/xpinstall/packager/pkgcp.pl -o $(PKGCP_PLATFORM) \
-		-s $(DIST) -d stage -f $(srcdir)/$(PACKAGE_FILE) -v
-
-javaconnect.js: stage/javaconnect/.done
-	@echo Creating $@...
-	rm -f javaconnect.js
-	@if test ! -e "javaconnect.jst"; then             \
-		$(INSTALL) -m 644 $(srcdir)/javaconnect.jst .; \
-	fi
-	$(PERL) $(topsrcdir)/toolkit/mozapps/installer/makejs.pl javaconnect.jst \
-		$(PACKAGE_VERSION) stage/javaconnect
-
-xpi: javaconnect.js
-	@echo Creating XPI...
-	$(PERL) $(topsrcdir)/toolkit/mozapps/installer/makexpi.pl javaconnect stage .
deleted file mode 100755
--- a/extensions/java/xpcom/package/javaconnect.jst
+++ /dev/null
@@ -1,24 +0,0 @@
-var err = initInstall("Mozilla Javaconnect", "Javaconnect", "0.1");
-logComment("initInstall: " + err);
-
-var fProgram = getFolder("Program");
-var srLibs = $SpaceRequired$:bin;
-
-if (verifyDiskSpace(fProgram, srLibs))
-{
-  err = addDirectory("", "0.1", "bin", fProgram, "", true);
-  logComment("addDirectory(): " + err);
-
-  if (err == SUCCESS)
-  {
-    err = performInstall();
-    logComment("performInstall() returned: " + err);
-  }
-  else
-  {
-    cancelInstall();
-    logComment("cancelInstall() due to error: "+err);
-  }
-}
-else
-  cancelInstall(INSUFFICIENT_DISK_SPACE);
deleted file mode 100755
--- a/extensions/java/xpcom/package/packages-mac
+++ /dev/null
@@ -1,3 +0,0 @@
-[javaconnect]
-bin/mozjava.jar
-bin/libjavaxpcom.jnilib
deleted file mode 100755
--- a/extensions/java/xpcom/package/packages-unix
+++ /dev/null
@@ -1,3 +0,0 @@
-[javaconnect]
-bin/mozjava.jar
-bin/libjavaxpcom.so
deleted file mode 100755
--- a/extensions/java/xpcom/package/packages-win
+++ /dev/null
@@ -1,3 +0,0 @@
-[javaconnect]
-bin/mozjava.jar
-bin/javaxpcom.dll
deleted file mode 100644
--- a/extensions/java/xpcom/src/MacJawt.mm
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include <jni.h>
-#import <JavaVM/jawt_md.h>
-#include "prtypes.h"
-
-
-PRUint64 GetPlatformHandle(JAWT_DrawingSurfaceInfo* dsi)
-{
-	JAWT_MacOSXDrawingSurfaceInfo* dsi_mac =
-	    static_cast<JAWT_MacOSXDrawingSurfaceInfo*> (dsi->platformInfo);
-	return reinterpret_cast<PRUint64> (dsi_mac->cocoaViewRef);
-}
deleted file mode 100644
--- a/extensions/java/xpcom/src/Makefile.in
+++ /dev/null
@@ -1,119 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (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.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is Java XPCOM Bindings.
-#
-# The Initial Developer of the Original Code is IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2006
-# IBM Corporation. All Rights Reserved.
-#
-# Contributor(s):
-#   Javier Pedemonte (jhpedemonte@gmail.com)
-#
-# Alternatively, the contents of this file may be used under the terms of
-# either the GNU General Public License Version 2 or later (the "GPL"), or
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-MODULE		= javaxpcom
-LIBRARY_NAME	= javaxpcom
-LIBXUL_LIBRARY	= 1
-FORCE_STATIC_LIB = 1
-
-ifndef MOZ_ENABLE_LIBXUL
-DEFINES += -DIMPL_XREAPI
-endif
-
-
-CPPSRCS		= \
-		nsAppFileLocProviderProxy.cpp \
-		nsJavaInterfaces.cpp \
-		nsJavaWrapper.cpp \
-		nsJavaXPTCStub.cpp \
-		nsJavaXPTCStubWeakRef.cpp \
-		nsJavaXPCOMBindingUtils.cpp \
-		$(NULL)
-
-ifeq ($(OS_ARCH),Darwin)
-CMMSRCS = MacJawt.mm
-endif
-
-LOCAL_INCLUDES	= -I$(JAVA_INCLUDE_PATH)
-
-ifeq ($(OS_ARCH),WINNT)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/win32
-else
-ifeq ($(OS_ARCH),OS2)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/OS2
-else
-ifeq ($(OS_ARCH),Darwin)
-LOCAL_INCLUDES += -I/System/Library/Frameworks/CoreFoundation.framework/Headers
-else
-ifeq ($(OS_ARCH),FreeBSD)
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/freebsd
-else
-LOCAL_INCLUDES += -I$(JAVA_INCLUDE_PATH)/linux
-endif
-endif
-endif
-endif
-
-# Don't set JAVA_LIBRARY_NAME, since we don't want to build during 'libs'
-# stage, but rather when explicitly called.
-#JAVA_LIBRARY_NAME = javaxpcom
-JARFILE = javaxpcom.jar
-
-PACKAGE_DIR = org/mozilla/xpcom/internal
-
-JAVA_SRCS = \
-		$(PACKAGE_DIR)/XPCOMJavaProxy.java \
-		$(PACKAGE_DIR)/XPCOMJavaProxyBase.java \
-		$(PACKAGE_DIR)/MozillaImpl.java \
-		$(PACKAGE_DIR)/GREImpl.java \
-		$(PACKAGE_DIR)/XPCOMImpl.java \
-		$(PACKAGE_DIR)/JavaXPCOMMethods.java \
-		$(NULL)
-
-JAVA_CLASSPATH = \
-	../interfaces/MozillaInterfaces.jar \
-	../interfaces/MozillaGlue.jar \
-	$(NULL)
-
-GARBAGE += $(JARFILE)
-
-include $(topsrcdir)/config/rules.mk
-
-$(JARFILE): $(addprefix $(_JAVA_DIR)/,$(JAVA_SRCS:.java=.class)) Makefile Makefile.in
-	$(JAR) cf $@ -C $(_JAVA_DIR) .
-
-jar-libs:: $(JARFILE)
-	$(INSTALL) $(IFLAGS1) $(JARFILE) $(FINAL_TARGET)
-
-jar-install:: $(JARFILE)
-	$(SYSINSTALL) $(IFLAGS2) $(JARFILE) $(DESTDIR)$(mozappdir)
deleted file mode 100644
--- a/extensions/java/xpcom/src/dlldeps-javaxpcom.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsJavaInterfaces.h"
-
-
-void XXXNeverCalled_javaxpcom()
-{
-  MOZILLA_NATIVE(initialize) (nsnull, nsnull);
-
-  GRE_NATIVE(initEmbedding) (nsnull, nsnull, nsnull, nsnull, nsnull);
-
-  GRE_NATIVE(termEmbedding) (nsnull, nsnull);
-
-  GRE_NATIVE(lockProfileDirectory) (nsnull, nsnull, nsnull);
-
-  GRE_NATIVE(notifyProfile) (nsnull, nsnull);
-
-  GRE_NATIVE(lockProfileDirectory) (nsnull, nsnull, nsnull);
-
-  GRE_NATIVE(notifyProfile) (nsnull, nsnull);
-
-  XPCOM_NATIVE(initXPCOM) (nsnull, nsnull, nsnull, nsnull);
-
-  XPCOM_NATIVE(shutdownXPCOM) (nsnull, nsnull, nsnull);
-
-  XPCOM_NATIVE(newLocalFile) (nsnull, nsnull, nsnull, nsnull);
-
-  XPCOM_NATIVE(getComponentManager) (nsnull, nsnull);
-
-  XPCOM_NATIVE(getComponentRegistrar) (nsnull, nsnull);
-
-  XPCOM_NATIVE(getServiceManager) (nsnull, nsnull);
-
-  JAVAPROXY_NATIVE(callXPCOMMethod) (nsnull, nsnull, nsnull, nsnull, nsnull);
-
-  JAVAPROXY_NATIVE(finalizeProxy) (nsnull, nsnull, nsnull);
-
-  JAVAPROXY_NATIVE(isSameXPCOMObject) (nsnull, nsnull, nsnull, nsnull);
-
-  LOCKPROXY_NATIVE(release) (nsnull, nsnull, nsnull);
-
-  MOZILLA_NATIVE(getNativeHandleFromAWT) (nsnull, nsnull, nsnull);
-
-  JXUTILS_NATIVE(wrapJavaObject) (nsnull, nsnull, nsnull, nsnull);
-
-  JXUTILS_NATIVE(wrapXPCOMObject) (nsnull, nsnull, nsnull, nsnull);
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsAppFileLocProviderProxy.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsAppFileLocProviderProxy.h"
-#include "nsJavaXPCOMBindingUtils.h"
-#include "nsILocalFile.h"
-#include "nsISimpleEnumerator.h"
-
-
-nsAppFileLocProviderProxy::nsAppFileLocProviderProxy(jobject aJavaObject)
-{
-  mJavaLocProvider = GetJNIEnv()->NewGlobalRef(aJavaObject);
-}
-
-nsAppFileLocProviderProxy::~nsAppFileLocProviderProxy()
-{
-  GetJNIEnv()->DeleteGlobalRef(mJavaLocProvider);
-}
-
-NS_IMPL_ISUPPORTS2(nsAppFileLocProviderProxy,
-                   nsIDirectoryServiceProvider,
-                   nsIDirectoryServiceProvider2)
-
-
-// nsIDirectoryServiceProvider
-
-NS_IMETHODIMP
-nsAppFileLocProviderProxy::GetFile(const char* aProp, PRBool* aIsPersistant,
-                                   nsIFile** aResult)
-{
-  // Setup params for calling Java function
-  JNIEnv* env = GetJNIEnv();
-  jstring prop = env->NewStringUTF(aProp);
-  if (!prop)
-    return NS_ERROR_OUT_OF_MEMORY;
-  jbooleanArray persistant = env->NewBooleanArray(1);
-  if (!persistant)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  // Create method ID
-  jmethodID mid = nsnull;
-  jclass clazz = env->GetObjectClass(mJavaLocProvider);
-  if (clazz) {
-    mid = env->GetMethodID(clazz, "getFile",
-                           "(Ljava/lang/String;[Z)Ljava/io/File;");
-  }
-  if (!mid)
-    return NS_ERROR_FAILURE;
-
-  // Call Java function
-  jobject javaFile = nsnull;
-  javaFile = env->CallObjectMethod(mJavaLocProvider, mid, prop, persistant);
-  if (javaFile == nsnull || env->ExceptionCheck())
-    return NS_ERROR_FAILURE;
-
-  // Set boolean output value
-  env->GetBooleanArrayRegion(persistant, 0, 1, (jboolean*) aIsPersistant);
-
-  // Set nsIFile result value
-  nsCOMPtr<nsILocalFile> localFile;
-  nsresult rv = File_to_nsILocalFile(env, javaFile, getter_AddRefs(localFile));
-  if (NS_SUCCEEDED(rv)) {
-    return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)aResult);
-  }
-
-  return rv;
-}
-
-
-// nsIDirectoryServiceProvider2
-
-class DirectoryEnumerator : public nsISimpleEnumerator
-{
-public:
-  NS_DECL_ISUPPORTS
-
-  DirectoryEnumerator(jobjectArray aJavaFileArray)
-    : mIndex(0)
-  {
-    JNIEnv* env = GetJNIEnv();
-    mJavaFileArray = static_cast<jobjectArray>
-                                (env->NewGlobalRef(aJavaFileArray));
-    mArraySize = env->GetArrayLength(aJavaFileArray);
-  }
-
-  ~DirectoryEnumerator()
-  {
-    GetJNIEnv()->DeleteGlobalRef(mJavaFileArray);
-  }
-
-  NS_IMETHOD HasMoreElements(PRBool* aResult)
-  {
-    if (!mJavaFileArray) {
-      *aResult = PR_FALSE;
-    } else {
-      *aResult = (mIndex < mArraySize);
-    }
-    return NS_OK;
-  }
-
-  NS_IMETHOD GetNext(nsISupports** aResult)
-  {
-    nsresult rv = NS_ERROR_FAILURE;
-
-    JNIEnv* env = GetJNIEnv();
-    jobject javaFile = env->GetObjectArrayElement(mJavaFileArray, mIndex++);
-    if (javaFile) {
-      nsCOMPtr<nsILocalFile> localFile;
-      rv = File_to_nsILocalFile(env, javaFile, getter_AddRefs(localFile));
-      env->DeleteLocalRef(javaFile);
-
-      if (NS_SUCCEEDED(rv)) {
-        return localFile->QueryInterface(NS_GET_IID(nsIFile), (void**)aResult);
-      }
-    }
-
-    env->ExceptionClear();
-    return NS_ERROR_FAILURE;
-  }
-
-private:
-  jobjectArray  mJavaFileArray;
-  PRUint32      mArraySize;
-  PRUint32      mIndex;
-};
-
-NS_IMPL_ISUPPORTS1(DirectoryEnumerator, nsISimpleEnumerator)
-
-NS_IMETHODIMP
-nsAppFileLocProviderProxy::GetFiles(const char* aProp,
-                                    nsISimpleEnumerator** aResult)
-{
-  nsresult rv = NS_OK;
-
-  // Setup params for calling Java function
-  JNIEnv* env = GetJNIEnv();
-  jstring prop = env->NewStringUTF(aProp);
-  if (!prop)
-    rv = NS_ERROR_OUT_OF_MEMORY;
-
-  // Create method ID
-  jmethodID mid = nsnull;
-  if (NS_SUCCEEDED(rv)) {
-    jclass clazz = env->GetObjectClass(mJavaLocProvider);
-    if (clazz) {
-      mid = env->GetMethodID(clazz, "getFiles",
-                             "(Ljava/lang/String;)[Ljava/io/File;");
-      env->DeleteLocalRef(clazz);
-    }
-    if (!mid)
-      rv = NS_ERROR_FAILURE;
-  }
-
-  // Call Java function
-  jobject javaFileArray = nsnull;
-  if (NS_SUCCEEDED(rv)) {
-    javaFileArray = env->CallObjectMethod(mJavaLocProvider, mid, prop);
-
-    // Handle any exception thrown by Java method.
-    jthrowable exp = env->ExceptionOccurred();
-    if (exp) {
-#ifdef DEBUG
-      env->ExceptionDescribe();
-#endif
-
-      // If the exception is an instance of XPCOMException, then get the
-      // nsresult from the exception instance.  Else, default to
-      // NS_ERROR_FAILURE.
-      if (env->IsInstanceOf(exp, xpcomExceptionClass)) {
-        jfieldID fid;
-        fid = env->GetFieldID(xpcomExceptionClass, "errorcode", "J");
-        if (fid) {
-          rv = env->GetLongField(exp, fid);
-        } else {
-          rv = NS_ERROR_FAILURE;
-        }
-        NS_ASSERTION(fid, "Couldn't get 'errorcode' field of XPCOMException");
-      } else {
-        rv = NS_ERROR_FAILURE;
-      }
-    } else {
-      // No exception thrown.  Check the result.
-      if (javaFileArray == nsnull) {
-        rv = NS_ERROR_FAILURE;
-      }
-    }
-  }
-
-  if (NS_SUCCEEDED(rv)) {
-    // Parse return value
-    *aResult = new DirectoryEnumerator(static_cast<jobjectArray>
-                                                  (javaFileArray));
-    NS_ADDREF(*aResult);
-    return NS_OK;
-  }
-
-  // Handle error conditions
-  *aResult = nsnull;
-  env->ExceptionClear();
-  return rv;
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-
-nsresult
-NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider,
-                              nsIDirectoryServiceProvider** aResult)
-{
-  nsAppFileLocProviderProxy* provider =
-            new nsAppFileLocProviderProxy(aJavaLocProvider);
-  if (provider == nsnull)
-    return NS_ERROR_OUT_OF_MEMORY;
-  NS_ADDREF(provider);
-
-  *aResult = provider;
-  return NS_OK;
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsAppFileLocProviderProxy.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef _nsAppFileLocProviderProxy_h_
-#define _nsAppFileLocProviderProxy_h_
-
-#include "nsIDirectoryService.h"
-#include "jni.h"
-
-
-class nsAppFileLocProviderProxy : public nsIDirectoryServiceProvider2
-{
-public:
-  nsAppFileLocProviderProxy(jobject aJavaLocProvider);
-  ~nsAppFileLocProviderProxy();
-
-  NS_DECL_ISUPPORTS
-  NS_DECL_NSIDIRECTORYSERVICEPROVIDER
-  NS_DECL_NSIDIRECTORYSERVICEPROVIDER2
-
-private:
-  jobject   mJavaLocProvider;
-};
-
-extern "C" nsresult
-NS_NewAppFileLocProviderProxy(jobject aJavaLocProvider,
-                              nsIDirectoryServiceProvider** aResult);
-
-
-#endif  //_nsAppFileLocProviderProxy_h_
-
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaInterfaces.cpp
+++ /dev/null
@@ -1,430 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2007
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsJavaInterfaces.h"
-#include "nsJavaWrapper.h"
-#include "nsJavaXPCOMBindingUtils.h"
-#include "nsJavaXPTCStub.h"
-#include "nsIComponentRegistrar.h"
-#include "nsString.h"
-#include "nsISimpleEnumerator.h"
-#include "nsIInterfaceInfoManager.h"
-#include "nsIInputStream.h"
-#include "nsEnumeratorUtils.h"
-#include "nsAppFileLocProviderProxy.h"
-#include "nsXULAppAPI.h"
-#include "nsILocalFile.h"
-
-#ifdef XP_MACOSX
-#include "jawt.h"
-#endif
-
-
-extern "C" NS_EXPORT void JNICALL
-MOZILLA_NATIVE(initialize) (JNIEnv* env, jobject)
-{
-  if (!InitializeJavaGlobals(env)) {
-    jclass clazz =
-        env->FindClass("org/mozilla/xpcom/XPCOMInitializationException");
-    if (clazz) {
-      env->ThrowNew(clazz, "Failed to initialize JavaXPCOM");
-    }
-  }
-}
-
-nsresult
-InitEmbedding_Impl(JNIEnv* env, jobject aLibXULDirectory,
-                   jobject aAppDirectory, jobject aAppDirProvider)
-{
-  nsresult rv;
-
-  // create an nsILocalFile from given java.io.File
-  nsCOMPtr<nsILocalFile> libXULDir;
-  if (aLibXULDirectory) {
-    rv = File_to_nsILocalFile(env, aLibXULDirectory, getter_AddRefs(libXULDir));
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-  nsCOMPtr<nsILocalFile> appDir;
-  if (aAppDirectory) {
-    rv = File_to_nsILocalFile(env, aAppDirectory, getter_AddRefs(appDir));
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // create nsAppFileLocProviderProxy from given Java object
-  nsCOMPtr<nsIDirectoryServiceProvider> provider;
-  if (aAppDirProvider) {
-    rv = NS_NewAppFileLocProviderProxy(aAppDirProvider,
-                                       getter_AddRefs(provider));
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // init libXUL
-  return XRE_InitEmbedding(libXULDir, appDir, provider, nsnull, 0);
-}
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(initEmbedding) (JNIEnv* env, jobject, jobject aLibXULDirectory,
-                           jobject aAppDirectory, jobject aAppDirProvider)
-{
-  nsresult rv = InitEmbedding_Impl(env, aLibXULDirectory, aAppDirectory,
-                                   aAppDirProvider);
-
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "Failure in initEmbedding");
-    FreeJavaGlobals(env);
-  }
-}
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(termEmbedding) (JNIEnv *env, jobject)
-{
-  // Free globals before calling XRE_TermEmbedding(), since we need some
-  // XPCOM services.
-  FreeJavaGlobals(env);
-
-  XRE_TermEmbedding();
-}
-
-nsresult
-InitXPCOM_Impl(JNIEnv* env, jobject aMozBinDirectory,
-               jobject aAppFileLocProvider, jobject* aResult)
-{
-  nsresult rv;
-
-  // create an nsILocalFile from given java.io.File
-  nsCOMPtr<nsILocalFile> directory;
-  if (aMozBinDirectory) {
-    rv = File_to_nsILocalFile(env, aMozBinDirectory, getter_AddRefs(directory));
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // create nsAppFileLocProviderProxy from given Java object
-  nsCOMPtr<nsIDirectoryServiceProvider> provider;
-  if (aAppFileLocProvider) {
-    rv = NS_NewAppFileLocProviderProxy(aAppFileLocProvider,
-                                       getter_AddRefs(provider));
-    NS_ENSURE_SUCCESS(rv, rv);
-  }
-
-  // init XPCOM
-  nsCOMPtr<nsIServiceManager> servMan;
-  rv = NS_InitXPCOM2(getter_AddRefs(servMan), directory, provider);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  // create Java proxy for service manager returned by NS_InitXPCOM2
-  return NativeInterfaceToJavaObject(env, servMan, NS_GET_IID(nsIServiceManager),
-                                     nsnull, aResult);
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(initXPCOM) (JNIEnv* env, jobject, jobject aMozBinDirectory,
-                         jobject aAppFileLocProvider)
-{
-  jobject servMan;
-  nsresult rv = InitXPCOM_Impl(env, aMozBinDirectory, aAppFileLocProvider,
-                               &servMan);
-  if (NS_SUCCEEDED(rv))
-    return servMan;
-
-  ThrowException(env, rv, "Failure in initXPCOM");
-  FreeJavaGlobals(env);
-  return nsnull;
-}
-
-extern "C" NS_EXPORT void JNICALL
-XPCOM_NATIVE(shutdownXPCOM) (JNIEnv *env, jobject, jobject aServMgr)
-{
-  nsresult rv;
-  nsIServiceManager* servMgr = nsnull;
-  if (aServMgr) {
-    // Get native XPCOM instance
-    nsISupports* instancePtr = nsnull;
-    rv = JavaObjectToNativeInterface(env, aServMgr,
-            NS_GET_IID(nsIServiceManager), (void**) &instancePtr);
-    NS_ASSERTION(NS_SUCCEEDED(rv) && instancePtr != nsnull,
-                 "Failed to get XPCOM obj for ServiceMgr.");
-    if (NS_SUCCEEDED(rv)) {
-      rv = instancePtr->QueryInterface(NS_GET_IID(nsIServiceManager),
-                                       (void**) &servMgr);
-      NS_ASSERTION(NS_SUCCEEDED(rv), "QI for nsIServiceManager failed");
-    }
-
-    // Even if we failed to get the matching xpcom object, we don't abort this
-    // function.  Just call NS_ShutdownXPCOM with a null service manager.
-  }
-
-  // Free globals before calling NS_ShutdownXPCOM(), since we need some
-  // XPCOM services.
-  FreeJavaGlobals(env);
-
-  rv = NS_ShutdownXPCOM(servMgr);
-  if (NS_FAILED(rv))
-    ThrowException(env, rv, "NS_ShutdownXPCOM failed");
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(newLocalFile) (JNIEnv *env, jobject, jstring aPath,
-                            jboolean aFollowLinks)
-{
-  // Create a Mozilla string from the jstring
-  const PRUnichar* buf = nsnull;
-  if (aPath) {
-    buf = env->GetStringChars(aPath, nsnull);
-    if (!buf)
-      return nsnull;  // exception already thrown
-  }
-
-  nsAutoString path_str(buf);
-  env->ReleaseStringChars(aPath, buf);
-
-  // Make call to given function
-  nsCOMPtr<nsILocalFile> file;
-  nsresult rv = NS_NewLocalFile(path_str, aFollowLinks, getter_AddRefs(file));
-
-  if (NS_SUCCEEDED(rv)) {
-    jobject javaProxy;
-    rv = NativeInterfaceToJavaObject(env, file, NS_GET_IID(nsILocalFile),
-                                     nsnull, &javaProxy);
-    if (NS_SUCCEEDED(rv))
-      return javaProxy;
-  }
-
-  ThrowException(env, rv, "Failure in newLocalFile");
-  return nsnull;
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getComponentManager) (JNIEnv *env, jobject)
-{
-  // Call XPCOM method
-  nsCOMPtr<nsIComponentManager> cm;
-  nsresult rv = NS_GetComponentManager(getter_AddRefs(cm));
-
-  if (NS_SUCCEEDED(rv)) {
-    jobject javaProxy;
-    rv = NativeInterfaceToJavaObject(env, cm, NS_GET_IID(nsIComponentManager),
-                                     nsnull, &javaProxy);
-    if (NS_SUCCEEDED(rv))
-      return javaProxy;
-  }
-
-  ThrowException(env, rv, "Failure in getComponentManager");
-  return nsnull;
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getComponentRegistrar) (JNIEnv *env, jobject)
-{
-  // Call XPCOM method
-  nsCOMPtr<nsIComponentRegistrar> cr;
-  nsresult rv = NS_GetComponentRegistrar(getter_AddRefs(cr));
-
-  if (NS_SUCCEEDED(rv)) {
-    jobject javaProxy;
-    rv = NativeInterfaceToJavaObject(env, cr, NS_GET_IID(nsIComponentRegistrar),
-                                     nsnull, &javaProxy);
-    if (NS_SUCCEEDED(rv))
-      return javaProxy;
-  }
-
-  ThrowException(env, rv, "Failure in getComponentRegistrar");
-  return nsnull;
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getServiceManager) (JNIEnv *env, jobject)
-{
-  // Call XPCOM method
-  nsCOMPtr<nsIServiceManager> sm;
-  nsresult rv = NS_GetServiceManager(getter_AddRefs(sm));
-
-  if (NS_SUCCEEDED(rv)) {
-    jobject javaProxy;
-    rv = NativeInterfaceToJavaObject(env, sm, NS_GET_IID(nsIServiceManager),
-                                     nsnull, &javaProxy);
-    if (NS_SUCCEEDED(rv))
-      return javaProxy;
-  }
-
-  ThrowException(env, rv, "Failure in getServiceManager");
-  return nsnull;
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-GRE_NATIVE(lockProfileDirectory) (JNIEnv* env, jobject, jobject aDirectory)
-{
-  nsresult rv = NS_ERROR_FAILURE;
-
-  if (aDirectory) {
-    nsCOMPtr<nsILocalFile> profileDir;
-    rv = File_to_nsILocalFile(env, aDirectory, getter_AddRefs(profileDir));
-
-    if (NS_SUCCEEDED(rv)) {
-      nsISupports* lock;
-      rv = XRE_LockProfileDirectory(profileDir, &lock);
-
-      if (NS_SUCCEEDED(rv)) {
-        jclass clazz =
-            env->FindClass("org/mozilla/xpcom/ProfileLock");
-        if (clazz) {
-          jmethodID mid = env->GetMethodID(clazz, "<init>", "(J)V");
-          if (mid) {
-            return env->NewObject(clazz, mid, reinterpret_cast<jlong>(lock));
-          }
-        }
-
-        // if we get here, then something failed
-        rv = NS_ERROR_FAILURE;
-      }
-    }
-  }
-
-  ThrowException(env, rv, "Failure in lockProfileDirectory");
-  return nsnull;
-}
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(notifyProfile) (JNIEnv *env, jobject)
-{
-  XRE_NotifyProfile();
-}
-
-#ifdef XP_MACOSX
-extern PRUint64 GetPlatformHandle(JAWT_DrawingSurfaceInfo* dsi);
-#endif
-
-extern "C" NS_EXPORT jlong JNICALL
-MOZILLA_NATIVE(getNativeHandleFromAWT) (JNIEnv* env, jobject clazz,
-                                        jobject widget)
-{
-  PRUint64 handle = 0;
-
-#ifdef XP_MACOSX
-  JAWT awt;
-  awt.version = JAWT_VERSION_1_4;
-  jboolean result = JAWT_GetAWT(env, &awt);
-  if (result == JNI_FALSE)
-    return 0;
-    
-  JAWT_DrawingSurface* ds = awt.GetDrawingSurface(env, widget);
-  if (ds != nsnull) {
-    jint lock = ds->Lock(ds);
-    if (!(lock & JAWT_LOCK_ERROR)) {
-      JAWT_DrawingSurfaceInfo* dsi = ds->GetDrawingSurfaceInfo(ds);
-      if (dsi) {
-        handle = GetPlatformHandle(dsi);
-        ds->FreeDrawingSurfaceInfo(dsi);
-      }
-
-      ds->Unlock(ds);
-    }
-
-    awt.FreeDrawingSurface(ds);
-  }
-#else
-  NS_WARNING("getNativeHandleFromAWT JNI method not implemented");
-#endif
-
-  return handle;
-}
-
-extern "C" NS_EXPORT jlong JNICALL
-JXUTILS_NATIVE(wrapJavaObject) (JNIEnv* env, jobject, jobject aJavaObject,
-                                jstring aIID)
-{
-  nsresult rv;
-  void* xpcomObject = nsnull;
-
-  if (!aJavaObject || !aIID) {
-    rv = NS_ERROR_NULL_POINTER;
-  } else {
-    const char* str = env->GetStringUTFChars(aIID, nsnull);
-    if (!str) {
-      rv = NS_ERROR_OUT_OF_MEMORY;
-    } else {
-      nsID iid;
-      if (iid.Parse(str)) {
-        rv = JavaObjectToNativeInterface(env, aJavaObject, iid, &xpcomObject);
-        if (NS_SUCCEEDED(rv)) {
-          rv = ((nsISupports*) xpcomObject)->QueryInterface(iid, &xpcomObject);
-        }
-      } else {
-        rv = NS_ERROR_INVALID_ARG;
-      }
-
-      env->ReleaseStringUTFChars(aIID, str);
-    }
-  }
-
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "Failed to create XPCOM proxy for Java object");
-  }
-  return reinterpret_cast<jlong>(xpcomObject);
-}
-
-extern "C" NS_EXPORT jobject JNICALL
-JXUTILS_NATIVE(wrapXPCOMObject) (JNIEnv* env, jobject, jlong aXPCOMObject,
-                                 jstring aIID)
-{
-  nsresult rv;
-  jobject javaObject = nsnull;
-  nsISupports* xpcomObject = reinterpret_cast<nsISupports*>(aXPCOMObject);
-
-  if (!xpcomObject || !aIID) {
-    rv = NS_ERROR_NULL_POINTER;
-  } else {
-    const char* str = env->GetStringUTFChars(aIID, nsnull);
-    if (!str) {
-      rv = NS_ERROR_OUT_OF_MEMORY;
-    } else {
-      nsID iid;
-      if (iid.Parse(str)) {
-        // XXX Should we be passing something other than NULL for aObjectLoader?
-        rv = NativeInterfaceToJavaObject(env, xpcomObject, iid, nsnull,
-                                         &javaObject);
-      } else {
-        rv = NS_ERROR_INVALID_ARG;
-      }
-
-      env->ReleaseStringUTFChars(aIID, str);
-    }
-  }
-
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "Failed to create XPCOM proxy for Java object");
-  }
-  return javaObject;
-}
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaInterfaces.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef _nsJavaInterfaces_h_
-#define _nsJavaInterfaces_h_
-
-#include "jni.h"
-#include "nscore.h"
-
-#define MOZILLA_NATIVE(func) Java_org_mozilla_xpcom_internal_MozillaImpl_##func
-#define GRE_NATIVE(func) Java_org_mozilla_xpcom_internal_GREImpl_##func
-#define XPCOM_NATIVE(func) Java_org_mozilla_xpcom_internal_XPCOMImpl_##func
-#define JAVAPROXY_NATIVE(func) \
-          Java_org_mozilla_xpcom_internal_XPCOMJavaProxy_##func
-#define LOCKPROXY_NATIVE(func) Java_org_mozilla_xpcom_ProfileLock_##func
-#define JXUTILS_NATIVE(func) \
-          Java_org_mozilla_xpcom_internal_JavaXPCOMMethods_##func
-
-
-extern "C" NS_EXPORT void JNICALL
-MOZILLA_NATIVE(initialize) (JNIEnv* env, jobject);
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(initEmbedding) (JNIEnv* env, jobject, jobject aLibXULDirectory,
-                           jobject aAppDirectory, jobject aAppDirProvider);
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(termEmbedding) (JNIEnv *env, jobject);
-
-extern "C" NS_EXPORT jobject JNICALL
-GRE_NATIVE(lockProfileDirectory) (JNIEnv *, jobject, jobject aDirectory);
-
-extern "C" NS_EXPORT void JNICALL
-GRE_NATIVE(notifyProfile) (JNIEnv *env, jobject);
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(initXPCOM) (JNIEnv* env, jobject, jobject aMozBinDirectory,
-                         jobject aAppFileLocProvider);
-
-extern "C" NS_EXPORT void JNICALL
-XPCOM_NATIVE(shutdownXPCOM) (JNIEnv *env, jobject, jobject aServMgr);
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(newLocalFile) (JNIEnv *env, jobject, jstring aPath,
-                            jboolean aFollowLinks);
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getComponentManager) (JNIEnv *env, jobject);
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getComponentRegistrar) (JNIEnv *env, jobject);
-
-extern "C" NS_EXPORT jobject JNICALL
-XPCOM_NATIVE(getServiceManager) (JNIEnv *env, jobject);
-
-extern "C" NS_EXPORT jobject JNICALL
-JAVAPROXY_NATIVE(callXPCOMMethod) (JNIEnv *env, jclass that, jobject aJavaProxy,
-                                   jstring aMethodName, jobjectArray aParams);
-
-extern "C" NS_EXPORT void JNICALL
-JAVAPROXY_NATIVE(finalizeProxy) (JNIEnv *env, jclass that, jobject aJavaProxy);
-
-extern "C" NS_EXPORT jboolean JNICALL
-JAVAPROXY_NATIVE(isSameXPCOMObject) (JNIEnv *env, jclass that, jobject aProxy1,
-                                     jobject aProxy2);
-
-extern "C" NS_EXPORT void JNICALL
-LOCKPROXY_NATIVE(release) (JNIEnv *env, jclass that, jlong aLockObject);
-
-extern "C" NS_EXPORT jlong JNICALL
-MOZILLA_NATIVE(getNativeHandleFromAWT) (JNIEnv* env, jobject, jobject widget);
-
-extern "C" NS_EXPORT jlong JNICALL
-JXUTILS_NATIVE(wrapJavaObject) (JNIEnv* env, jobject, jobject aJavaObject,
-                                jstring aIID);
-
-extern "C" NS_EXPORT jobject JNICALL
-JXUTILS_NATIVE(wrapXPCOMObject) (JNIEnv* env, jobject, jlong aXPCOMObject,
-                                 jstring aIID);
-
-#endif // _nsJavaInterfaces_h_
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaWrapper.cpp
+++ /dev/null
@@ -1,1941 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsJavaInterfaces.h"
-#include "nsJavaWrapper.h"
-#include "nsJavaXPTCStub.h"
-#include "nsJavaXPCOMBindingUtils.h"
-#include "jni.h"
-#include "xptcall.h"
-#include "nsIInterfaceInfoManager.h"
-#include "nsString.h"
-#include "nsCRT.h"
-#include "prmem.h"
-#include "nsServiceManagerUtils.h"
-#include "nsThreadUtils.h"
-#include "nsProxyRelease.h"
-
-static nsID nullID = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};
-
-
-nsresult
-CreateJavaArray(JNIEnv* env, PRUint8 aType, PRUint32 aSize, const nsID& aIID,
-                jobject* aResult)
-{
-  jobject array = nsnull;
-  switch (aType)
-  {
-    case nsXPTType::T_I8:
-      array = env->NewByteArray(aSize);
-      break;
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U8:
-      array = env->NewShortArray(aSize);
-      break;
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U16:
-      array = env->NewIntArray(aSize);
-      break;
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U32:
-      array = env->NewLongArray(aSize);
-      break;
-
-    case nsXPTType::T_FLOAT:
-      array = env->NewFloatArray(aSize);
-      break;
-
-    // XXX how do we handle unsigned 64-bit values?
-    case nsXPTType::T_U64:
-    case nsXPTType::T_DOUBLE:
-      array = env->NewDoubleArray(aSize);
-      break;
-
-    case nsXPTType::T_BOOL:
-      array = env->NewBooleanArray(aSize);
-      break;
-
-    case nsXPTType::T_CHAR:
-    case nsXPTType::T_WCHAR:
-      array = env->NewCharArray(aSize);
-      break;
-
-    case nsXPTType::T_CHAR_STR:
-    case nsXPTType::T_WCHAR_STR:
-    case nsXPTType::T_IID:
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-      array = env->NewObjectArray(aSize, stringClass, nsnull);
-      break;
-
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-    {
-      nsCOMPtr<nsIInterfaceInfoManager>
-        iim(do_GetService(NS_INTERFACEINFOMANAGER_SERVICE_CONTRACTID));
-      NS_ASSERTION(iim, "Failed to get InterfaceInfoManager");
-      if (!iim)
-        return NS_ERROR_FAILURE;
-
-      // Get interface info for given IID
-      nsCOMPtr<nsIInterfaceInfo> info;
-      nsresult rv = iim->GetInfoForIID(&aIID, getter_AddRefs(info));
-      if (NS_FAILED(rv))
-        return rv;
-
-      // Get interface name
-      const char* iface_name;
-      rv = info->GetNameShared(&iface_name);
-      if (NS_FAILED(rv))
-        return rv;
-
-      // Create proper Java interface name
-      nsCAutoString class_name("org/mozilla/interfaces/");
-      class_name.AppendASCII(iface_name);
-      jclass ifaceClass = env->FindClass(class_name.get());
-      if (!ifaceClass)
-        return NS_ERROR_FAILURE;
-
-      array = env->NewObjectArray(aSize, ifaceClass, nsnull);
-      break;
-    }
-
-    case nsXPTType::T_VOID:
-      array = env->NewLongArray(aSize);
-      break;
-
-    default:
-      NS_WARNING("unknown type");
-      return NS_ERROR_FAILURE;
-  }
-
-  if (!array)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  *aResult = array;
-  return NS_OK;
-}
-
-nsresult
-GetNativeArrayElement(PRUint8 aType, void* aArray, PRUint32 aIndex,
-                      nsXPTCVariant* aResult)
-{
-  switch (aType)
-  {
-    case nsXPTType::T_I8:
-    case nsXPTType::T_U8:
-      aResult->val.u8 = static_cast<PRUint8*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U16:
-      aResult->val.u16 = static_cast<PRUint16*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U32:
-      aResult->val.u32 = static_cast<PRUint32*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U64:
-      aResult->val.u64 = static_cast<PRUint64*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_FLOAT:
-      aResult->val.f = static_cast<float*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_DOUBLE:
-      aResult->val.d = static_cast<double*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_BOOL:
-      aResult->val.b = static_cast<PRBool*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_CHAR:
-      aResult->val.c = static_cast<char*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_WCHAR:
-      aResult->val.wc = static_cast<PRUnichar*>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_CHAR_STR:
-      aResult->val.p = static_cast<char**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_WCHAR_STR:
-      aResult->val.p = static_cast<PRUnichar**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_IID:
-      aResult->val.p = static_cast<nsID**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-      aResult->val.p = static_cast<nsISupports**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-      aResult->val.p = static_cast<nsString**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-      aResult->val.p = static_cast<nsCString**>(aArray)[aIndex];
-      break;
-
-    case nsXPTType::T_VOID:
-      aResult->val.p = static_cast<void**>(aArray)[aIndex];
-      break;
-
-    default:
-      NS_WARNING("unknown type");
-      return NS_ERROR_FAILURE;
-  }
-
-  return NS_OK;
-}
-
-nsresult
-CreateNativeArray(PRUint8 aType, PRUint32 aSize, void** aResult)
-{
-  void* array = nsnull;
-  switch (aType)
-  {
-    case nsXPTType::T_I8:
-    case nsXPTType::T_U8:
-      array = PR_Malloc(aSize * sizeof(PRUint8));
-      break;
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U16:
-      array = PR_Malloc(aSize * sizeof(PRUint16));
-      break;
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U32:
-      array = PR_Malloc(aSize * sizeof(PRUint32));
-      break;
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U64:
-      array = PR_Malloc(aSize * sizeof(PRUint64));
-      break;
-
-    case nsXPTType::T_FLOAT:
-      array = PR_Malloc(aSize * sizeof(float));
-      break;
-
-    case nsXPTType::T_DOUBLE:
-      array = PR_Malloc(aSize * sizeof(double));
-      break;
-
-    case nsXPTType::T_BOOL:
-      array = PR_Malloc(aSize * sizeof(PRBool));
-      break;
-
-    case nsXPTType::T_CHAR:
-      array = PR_Malloc(aSize * sizeof(char));
-      break;
-
-    case nsXPTType::T_WCHAR:
-      array = PR_Malloc(aSize * sizeof(PRUnichar));
-      break;
-
-    case nsXPTType::T_CHAR_STR:
-    case nsXPTType::T_WCHAR_STR:
-    case nsXPTType::T_IID:
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-      array = PR_Malloc(aSize * sizeof(void*));
-      break;
-
-    case nsXPTType::T_VOID:
-      array = PR_Malloc(aSize * sizeof(void*));
-      break;
-
-    default:
-      NS_WARNING("unknown type");
-      return NS_ERROR_FAILURE;
-  }
-
-  if (!array)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  *aResult = array;
-  return NS_OK;
-}
-
-/**
- * Handle 'in' and 'inout' params.
- */
-nsresult
-SetupParams(JNIEnv *env, const jobject aParam, PRUint8 aType, PRBool aIsOut,
-            const nsID& aIID, PRUint8 aArrayType, PRUint32 aArraySize,
-            PRBool aIsArrayElement, PRUint32 aIndex, nsXPTCVariant &aVariant)
-{
-  nsresult rv = NS_OK;
-
-  switch (aType)
-  {
-    case nsXPTType::T_I8:
-    {
-      LOG(("byte\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.i8 = env->CallByteMethod(aParam, byteValueMID);
-      } else { // 'inout' & 'array'
-        jbyte value;
-        if (aParam) {
-          env->GetByteArrayRegion((jbyteArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.i8 = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<PRInt8*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U8:   // C++ unsigned octet <=> Java short
-    {
-      LOG(("short\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        jshort value = env->CallShortMethod(aParam, shortValueMID);
-        if (aType == nsXPTType::T_I16)
-          aVariant.val.i16 = value;
-        else
-          aVariant.val.u8 = value;
-      } else { // 'inout' & 'array'
-        jshort value;
-        if (aParam) {
-          env->GetShortArrayRegion((jshortArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            if (aType == nsXPTType::T_I16)
-              aVariant.val.i16 = value;
-            else
-              aVariant.val.u8 = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          if (aType == nsXPTType::T_I16)
-            static_cast<PRInt16*>(aVariant.val.p)[aIndex] = value;
-          else
-            static_cast<PRUint8*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U16:  // C++ unsigned short <=> Java int
-    {
-      LOG(("int\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        jint value = env->CallIntMethod(aParam, intValueMID);
-        if (aType == nsXPTType::T_I32)
-          aVariant.val.i32 = value;
-        else
-          aVariant.val.u16 = value;
-      } else { // 'inout' & 'array'
-        jint value;
-        if (aParam) {
-          env->GetIntArrayRegion((jintArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            if (aType == nsXPTType::T_I32)
-              aVariant.val.i32 = value;
-            else
-              aVariant.val.u16 = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          if (aType == nsXPTType::T_I32)
-            static_cast<PRInt32*>(aVariant.val.p)[aIndex] = value;
-          else
-            static_cast<PRUint16*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U32:  // C++ unsigned int <=> Java long
-    {
-      LOG(("long\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        jlong value = env->CallLongMethod(aParam, longValueMID);
-        if (aType == nsXPTType::T_I64)
-          aVariant.val.i64 = value;
-        else
-          aVariant.val.u32 = value;
-      } else { // 'inout' & 'array'
-        jlong value;
-        if (aParam) {
-          env->GetLongArrayRegion((jlongArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            if (aType == nsXPTType::T_I64)
-              aVariant.val.i64 = value;
-            else
-              aVariant.val.u32 = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          if (aType == nsXPTType::T_I64)
-            static_cast<PRInt64*>(aVariant.val.p)[aIndex] = value;
-          else
-            static_cast<PRUint32*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_FLOAT:
-    {
-      LOG(("float\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.f = env->CallFloatMethod(aParam, floatValueMID);
-      } else { // 'inout' & 'array'
-        jfloat value;
-        if (aParam) {
-          env->GetFloatArrayRegion((jfloatArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.f = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<float*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    // XXX how do we handle unsigned 64-bit value?
-    case nsXPTType::T_U64:  // C++ unsigned long <=> Java double
-    case nsXPTType::T_DOUBLE:
-    {
-      LOG(("double\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        jdouble value = env->CallDoubleMethod(aParam, doubleValueMID);
-        if (aType == nsXPTType::T_DOUBLE)
-          aVariant.val.d = value;
-        else
-          aVariant.val.u64 = static_cast<PRUint64>(value);
-      } else { // 'inout' & 'array'
-        jdouble value;
-        if (aParam) {
-          env->GetDoubleArrayRegion((jdoubleArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            if (aType == nsXPTType::T_DOUBLE)
-              aVariant.val.d = value;
-            else
-              aVariant.val.u64 = static_cast<PRUint64>(value);
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          if (aType == nsXPTType::T_DOUBLE)
-            static_cast<double*>(aVariant.val.p)[aIndex] = value;
-          else
-            static_cast<PRUint64*>(aVariant.val.p)[aIndex] =
-                                                static_cast<PRUint64>(value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_BOOL:
-    {
-      LOG(("boolean\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.b = env->CallBooleanMethod(aParam, booleanValueMID);
-      } else { // 'inout' & 'array'
-        jboolean value;
-        if (aParam) {
-          env->GetBooleanArrayRegion((jbooleanArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.b = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<PRBool*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_CHAR:
-    {
-      LOG(("char\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.c = env->CallCharMethod(aParam, charValueMID);
-      } else { // 'inout' & 'array'
-        jchar value;
-        if (aParam) {
-          env->GetCharArrayRegion((jcharArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.c = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<char*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_WCHAR:
-    {
-      LOG(("char\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.wc = env->CallCharMethod(aParam, charValueMID);
-      } else { // 'inout' & 'array'
-        jchar value;
-        if (aParam) {
-          env->GetCharArrayRegion((jcharArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.wc = value;
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<PRUnichar*>(aVariant.val.p)[aIndex] = value;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_CHAR_STR:
-    case nsXPTType::T_WCHAR_STR:
-    {
-      LOG(("String\n"));
-      jstring data = nsnull;
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        data = (jstring) aParam;
-      } else if (aParam) {  // 'inout' & 'array'
-        data = (jstring) env->GetObjectArrayElement((jobjectArray) aParam,
-                                                    aIndex);
-      }
-
-      void* buf = nsnull;
-      if (data) {
-        jsize uniLength = env->GetStringLength(data);
-        if (uniLength > 0) {
-          if (aType == nsXPTType::T_CHAR_STR) {
-            jsize utf8Length = env->GetStringUTFLength(data);
-            buf = nsMemory::Alloc((utf8Length + 1) * sizeof(char));
-            if (!buf) {
-              rv = NS_ERROR_OUT_OF_MEMORY;
-              break;
-            }
-
-            char* char_str = static_cast<char*>(buf);
-            env->GetStringUTFRegion(data, 0, uniLength, char_str);
-            char_str[utf8Length] = '\0';
-
-          } else {  // if T_WCHAR_STR
-            buf = nsMemory::Alloc((uniLength + 1) * sizeof(jchar));
-            if (!buf) {
-              rv = NS_ERROR_OUT_OF_MEMORY;
-              break;
-            }
-
-            jchar* jchar_str = static_cast<jchar*>(buf);
-            env->GetStringRegion(data, 0, uniLength, jchar_str);
-            jchar_str[uniLength] = '\0';
-          }
-        } else {
-          // create empty string
-          buf = nsMemory::Alloc(2);
-          if (!buf) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-          ((jchar*)buf)[0] = '\0';
-        }
-      }
-
-      if (!aIsArrayElement) { // 'in' & 'inout'
-        aVariant.val.p = buf;
-        if (aIsOut) { // 'inout'
-          aVariant.ptr = &aVariant.val;
-          aVariant.SetPtrIsData();
-        }
-      } else {  // 'array'
-        if (aType == nsXPTType::T_CHAR_STR) {
-          char* str = static_cast<char*>(buf);
-          static_cast<char**>(aVariant.val.p)[aIndex] = str;
-        } else {
-          PRUnichar* str = static_cast<PRUnichar*>(buf);
-          static_cast<PRUnichar**>(aVariant.val.p)[aIndex] = str;
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_IID:
-    {
-      LOG(("String(IID)\n"));
-      jstring data = nsnull;
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        data = (jstring) aParam;
-      } else if (aParam) {  // 'inout' & 'array'
-        data = (jstring) env->GetObjectArrayElement((jobjectArray) aParam,
-                                                    aIndex);
-      }
-
-      nsID* iid = new nsID;
-      if (!iid) {
-        rv = NS_ERROR_OUT_OF_MEMORY;
-        break;
-      }
-      if (data) {
-        // extract IID string from Java string
-        const char* str = env->GetStringUTFChars(data, nsnull);
-        if (!str) {
-          rv = NS_ERROR_OUT_OF_MEMORY;
-          break;
-        }
-
-        // parse string into IID object
-        iid->Parse(str);
-        env->ReleaseStringUTFChars(data, str);
-      } else {
-        *iid = nullID;
-      }
-
-      if (!aIsArrayElement) { // 'in' & 'inout'
-        aVariant.val.p = iid;
-        if (aIsOut) { // 'inout'
-          aVariant.ptr = &aVariant.val;
-          aVariant.SetPtrIsData();
-        }
-      } else {  // 'array'
-        static_cast<nsID**>(aVariant.val.p)[aIndex] = iid;
-      }
-      break;
-    }
-
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-    {
-      LOG(("nsISupports\n"));
-      jobject java_obj = nsnull;
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        java_obj = (jobject) aParam;
-      } else if (aParam) {  // 'inout' & 'array'
-        java_obj = (jobject) env->GetObjectArrayElement((jobjectArray) aParam,
-                                                        aIndex);
-      }
-
-      void* xpcom_obj;
-      if (java_obj) {
-        // If the requested interface is nsIWeakReference, then we look for or
-        // create a stub for the nsISupports interface.  Then we create a weak
-        // reference from that stub.
-        PRBool isWeakRef;
-        nsID iid;
-        if (aIID.Equals(NS_GET_IID(nsIWeakReference))) {
-          isWeakRef = PR_TRUE;
-          iid = NS_GET_IID(nsISupports);
-        } else {
-          isWeakRef = PR_FALSE;
-          iid = aIID;
-        }
-
-        rv = JavaObjectToNativeInterface(env, java_obj, iid, &xpcom_obj);
-        if (NS_FAILED(rv))
-          break;
-        rv = ((nsISupports*) xpcom_obj)->QueryInterface(iid, &xpcom_obj);
-        if (NS_FAILED(rv))
-          break;
-
-        // If the function expects a weak reference, then we need to
-        // create it here.
-        if (isWeakRef) {
-          nsISupports* isupports = (nsISupports*) xpcom_obj;
-          nsCOMPtr<nsISupportsWeakReference> supportsweak =
-                  do_QueryInterface(isupports);
-          if (supportsweak) {
-            nsWeakPtr weakref;
-            supportsweak->GetWeakReference(getter_AddRefs(weakref));
-            NS_RELEASE(isupports);
-            xpcom_obj = weakref;
-            NS_ADDREF((nsISupports*) xpcom_obj);
-          } else {
-            xpcom_obj = nsnull;
-          }
-        }
-      } else {
-        xpcom_obj = nsnull;
-      }
-
-      if (!aIsArrayElement) { // 'in' & 'inout'
-        aVariant.val.p = xpcom_obj;
-        aVariant.SetValIsInterface();
-        if (aIsOut) { // 'inout'
-          aVariant.ptr = &aVariant.val;
-          aVariant.SetPtrIsData();
-        }
-      } else {  // 'array'
-        static_cast<void**>(aVariant.val.p)[aIndex] = xpcom_obj;
-      }
-      break;
-    }
-
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-    {
-      LOG(("String\n"));
-      // Expecting only 'in' and 'in dipper'
-      NS_PRECONDITION(!aIsOut, "unexpected param descriptor");
-      if (aIsOut) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      jstring jstr = static_cast<jstring>(aParam);
-      nsAString* str = jstring_to_nsAString(env, jstr);
-      if (!str) {
-        rv = NS_ERROR_OUT_OF_MEMORY;
-        break;
-      }
-
-      aVariant.val.p = str;
-      aVariant.SetValIsDOMString();
-      break;
-    }
-
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-    {
-      LOG(("StringUTF\n"));
-      // Expecting only 'in' and 'in dipper'
-      NS_PRECONDITION(!aIsOut, "unexpected param descriptor");
-      if (aIsOut) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      jstring jstr = static_cast<jstring>(aParam);
-      nsACString* str = jstring_to_nsACString(env, jstr);
-      if (!str) {
-        rv = NS_ERROR_OUT_OF_MEMORY;
-        break;
-      }
-
-      aVariant.val.p = str;
-      if (aType == nsXPTType::T_CSTRING) {
-        aVariant.SetValIsCString();
-      } else {
-        aVariant.SetValIsUTF8String();
-      }
-      break;
-    }
-
-    // handle "void *" as an "long" in Java
-    case nsXPTType::T_VOID:
-    {
-      LOG(("long (void*)\n"));
-      if (!aIsOut && !aIsArrayElement) {  // 'in'
-        aVariant.val.p =
-          reinterpret_cast<void*>(env->CallLongMethod(aParam, longValueMID));
-      } else { // 'inout' & 'array'
-        jlong value;
-        if (aParam) {
-          env->GetLongArrayRegion((jlongArray) aParam, aIndex, 1, &value);
-        }
-
-        if (aIsOut) { // 'inout'
-          if (aParam) {
-            aVariant.val.p = reinterpret_cast<void*>(value);
-            aVariant.ptr = &aVariant.val;
-          } else {
-            aVariant.ptr = nsnull;
-          }
-          aVariant.SetPtrIsData();
-        } else {  // 'array'
-          static_cast<void**>(aVariant.val.p)[aIndex] =
-                  reinterpret_cast<void*>(value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_ARRAY:
-    {
-      jobject sourceArray = nsnull;
-      if (!aIsOut) {  // 'in'
-        sourceArray = aParam;
-      } else if (aParam) {  // 'inout'
-        jobjectArray array = static_cast<jobjectArray>(aParam);
-        sourceArray = env->GetObjectArrayElement(array, 0);
-      }
-
-      if (sourceArray) {
-        rv = CreateNativeArray(aArrayType, aArraySize, &aVariant.val.p);
-
-        for (PRUint32 i = 0; i < aArraySize && NS_SUCCEEDED(rv); i++) {
-          rv = SetupParams(env, sourceArray, aArrayType, PR_FALSE, aIID, 0, 0,
-                           PR_TRUE, i, aVariant);
-        }
-      }
-
-      if (aIsOut) { // 'inout'
-        aVariant.ptr = &aVariant.val.p;
-        aVariant.SetPtrIsData();
-      }
-      break;
-    }
-
-    case nsXPTType::T_PSTRING_SIZE_IS:
-    case nsXPTType::T_PWSTRING_SIZE_IS:
-    {
-      NS_PRECONDITION(!aIsArrayElement, "sized string array not supported");
-      
-      LOG(("Sized string\n"));
-      jstring data = nsnull;
-      if (!aIsOut) {  // 'in'
-        data = (jstring) aParam;
-      } else if (aParam) {  // 'inout'
-        data = (jstring) env->GetObjectArrayElement((jobjectArray) aParam,
-                                                    aIndex);
-      }
-
-      PRUint32 length = 0;
-      if (data) {
-        if (aType == nsXPTType::T_PSTRING_SIZE_IS) {
-          length = env->GetStringUTFLength(data);
-        } else {
-          length = env->GetStringLength(data);
-        }
-        if (length > aArraySize) {
-          rv = NS_ERROR_ILLEGAL_VALUE;
-          break;
-        }
-      }
-
-      PRUint32 size_of_char = (aType == nsXPTType::T_PSTRING_SIZE_IS) ?
-                              sizeof(char) : sizeof(jchar);
-      PRUint32 allocLength = (aArraySize + 1) * size_of_char;
-      void* buf = nsMemory::Alloc(allocLength);
-      if (!buf) {
-        rv = NS_ERROR_OUT_OF_MEMORY;
-        break;
-      }
-
-      if (data) {
-        if (aType == nsXPTType::T_PSTRING_SIZE_IS) {
-          const char* str = env->GetStringUTFChars(data, nsnull);
-          if (!str) {
-            nsMemory::Free(buf);
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-          memcpy(buf, str, length);
-          env->ReleaseStringUTFChars(data, str);
-        } else {
-          jchar* jchar_str = static_cast<jchar*>(buf);
-          env->GetStringRegion(data, 0, length, jchar_str);
-        }
-      }
-      
-      aVariant.val.p = buf;
-      if (aIsOut) { // 'inout'
-        aVariant.ptr = &aVariant.val;
-        aVariant.SetPtrIsData();
-      }
-
-      break;
-    }
-
-    default:
-      NS_WARNING("unexpected parameter type");
-      return NS_ERROR_UNEXPECTED;
-  }
-
-  return rv;
-}
-
-/**
- * Does any cleanup from objects created in SetupParams, as well as converting
- * any out params to Java.
- *
- * NOTE: If aInvokeResult is an error condition, then we just do cleanup in
- *  this function.
- */
-nsresult
-FinalizeParams(JNIEnv *env, const nsXPTParamInfo &aParamInfo, PRUint8 aType,
-               nsXPTCVariant &aVariant, const nsID& aIID,
-               PRBool aIsArrayElement, PRUint8 aArrayType, PRUint32 aArraySize,
-               PRUint32 aIndex, nsresult aInvokeResult, jobject* aParam)
-{
-  nsresult rv = NS_OK;
-
-  switch (aType)
-  {
-    case nsXPTType::T_I8:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jbyte value = aVariant.val.i8;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(byteClass, byteInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetByteArrayRegion((jbyteArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U8:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jshort value = (aType == nsXPTType::T_I16) ? aVariant.val.i16 :
-                                                     aVariant.val.u8;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(shortClass, shortInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && aParam) {
-          env->SetShortArrayRegion((jshortArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U16:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jint value = (aType == nsXPTType::T_I32) ? aVariant.val.i32 :
-                                                   aVariant.val.u16;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(intClass, intInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetIntArrayRegion((jintArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U32:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jlong value = (aType == nsXPTType::T_I64) ? aVariant.val.i64 :
-                                                    aVariant.val.u32;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(longClass, longInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetLongArrayRegion((jlongArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_FLOAT:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jfloat value = aVariant.val.f;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(floatClass, floatInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetFloatArrayRegion((jfloatArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    // XXX how do we handle unsigned 64-bit values?
-    case nsXPTType::T_U64:
-    case nsXPTType::T_DOUBLE:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jdouble value = (aType == nsXPTType::T_DOUBLE) ? aVariant.val.d :
-                                                         aVariant.val.u64;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(doubleClass, doubleInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetDoubleArrayRegion((jdoubleArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_BOOL:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jboolean value = aVariant.val.b;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(booleanClass, booleanInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetBooleanArrayRegion((jbooleanArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_CHAR:
-    case nsXPTType::T_WCHAR:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jchar value;
-        if (aType == nsXPTType::T_CHAR)
-          value = aVariant.val.c;
-        else
-          value = aVariant.val.wc;
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(charClass, charInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetCharArrayRegion((jcharArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_CHAR_STR:
-    case nsXPTType::T_WCHAR_STR:
-    {
-      if ((aParamInfo.IsOut() || aIsArrayElement) &&
-          NS_SUCCEEDED(aInvokeResult))
-      {
-        // create new string from data
-        jstring str = nsnull;
-        if (aVariant.val.p) {
-          if (aType == nsXPTType::T_CHAR_STR) {
-            str = env->NewStringUTF((const char*) aVariant.val.p);
-          } else {
-            PRUint32 length = nsCRT::strlen((const PRUnichar*) aVariant.val.p);
-            str = env->NewString((const jchar*) aVariant.val.p, length);
-          }
-          if (!str) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        }
-
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = str;
-        } else if (*aParam) {
-          // put new string into output array
-          env->SetObjectArrayElement((jobjectArray) *aParam, aIndex, str);
-        }
-      }
-
-      // cleanup
-      if (aVariant.val.p)
-        nsMemory::Free(aVariant.val.p);
-      break;
-    }
-
-    case nsXPTType::T_IID:
-    {
-      nsID* iid = static_cast<nsID*>(aVariant.val.p);
-
-      if ((aParamInfo.IsOut() || aIsArrayElement) &&
-          NS_SUCCEEDED(aInvokeResult))
-      {
-        // Create the string from nsID
-        jstring str = nsnull;
-        if (iid) {
-          char iid_str[NSID_LENGTH];
-          iid->ToProvidedString(iid_str);
-          str = env->NewStringUTF(iid_str);
-          if (!str) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        }
-
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = str;
-        } else if (*aParam) {
-          // put new string into output array
-          env->SetObjectArrayElement((jobjectArray) *aParam, aIndex, str);
-        }
-      }
-
-      // Ordinarily, we would delete 'iid' here.  But we cannot do that until
-      // we've handled all of the params.  See comment in CallXPCOMMethod.
-      // We can safely delete array elements, though.
-      if (aIsArrayElement)
-        delete iid;
-
-      break;
-    }
-
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-    {
-      nsISupports* xpcom_obj = static_cast<nsISupports*>(aVariant.val.p);
-
-      if ((aParamInfo.IsOut() || aIsArrayElement) &&
-          NS_SUCCEEDED(aInvokeResult))
-      {
-        jobject java_obj = nsnull;
-        if (xpcom_obj) {
-          // Get matching Java object for given xpcom object
-          rv = NativeInterfaceToJavaObject(env, xpcom_obj, aIID, nsnull,
-                                           &java_obj);
-          if (NS_FAILED(rv))
-            break;
-        }
-
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = java_obj;
-        } else if (*aParam) {
-          // put new Java object into output array
-          env->SetObjectArrayElement((jobjectArray) *aParam, aIndex, java_obj);
-        }
-      }
-
-      // cleanup
-      NS_IF_RELEASE(xpcom_obj);
-      break;
-    }
-
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-    {
-      NS_PRECONDITION(aParamInfo.IsIn(), "unexpected param descriptor");
-      if (!aParamInfo.IsIn()) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      nsString* str = static_cast<nsString*>(aVariant.val.p);
-      if (NS_SUCCEEDED(aInvokeResult) && aParamInfo.IsDipper()) {
-        // Create Java string from returned nsString
-        jstring jstr = nsnull;
-        if (str && !str->IsVoid()) {
-          jstr = env->NewString((const jchar*) str->get(), str->Length());
-          if (!jstr) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        }
-
-        *aParam = jstr;        
-      }
-
-      // cleanup
-      if (str) {
-        delete str;
-      }
-      break;
-    }
-
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-    {
-      NS_PRECONDITION(aParamInfo.IsIn(), "unexpected param descriptor");
-      if (!aParamInfo.IsIn()) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      nsCString* str = static_cast<nsCString*>(aVariant.val.p);
-      if (NS_SUCCEEDED(aInvokeResult) && aParamInfo.IsDipper()) {
-        // Create Java string from returned nsString
-        jstring jstr = nsnull;
-        if (str && !str->IsVoid()) {
-          jstr = env->NewStringUTF((const char*) str->get());
-          if (!jstr) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        }
-
-        *aParam = jstr;        
-      }
-
-      // cleanup
-      if (str) {
-        delete str;
-      }
-      break;
-    }
-
-    case nsXPTType::T_VOID:
-    {
-      if (NS_SUCCEEDED(aInvokeResult)) {
-        jlong value = reinterpret_cast<jlong>(aVariant.val.p);
-        if (aParamInfo.IsRetval() && !aIsArrayElement) {
-          *aParam = env->NewObject(longClass, longInitMID, value);
-        } else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
-          env->SetLongArrayRegion((jlongArray) *aParam, aIndex, 1, &value);
-        }
-      }
-      break;
-    }
-
-    case nsXPTType::T_ARRAY:
-    {
-      if (aParamInfo.IsOut() && NS_SUCCEEDED(aInvokeResult)) {
-        // Create Java array from returned native array
-        jobject jarray = nsnull;
-        if (aVariant.val.p) {
-          rv = CreateJavaArray(env, aArrayType, aArraySize, aIID, &jarray);
-          if (NS_FAILED(rv))
-            break;
-
-          nsXPTCVariant var;
-          for (PRUint32 i = 0; i < aArraySize && NS_SUCCEEDED(rv); i++) {
-            rv = GetNativeArrayElement(aArrayType, aVariant.val.p, i, &var);
-            if (NS_SUCCEEDED(rv)) {
-              rv = FinalizeParams(env, aParamInfo, aArrayType, var, aIID,
-                                  PR_TRUE, 0, 0, i, aInvokeResult, &jarray);
-            }
-          }
-        }
-
-        if (aParamInfo.IsRetval()) {
-          *aParam = jarray;
-        } else if (*aParam) {
-          // put new Java array into output array
-          env->SetObjectArrayElement((jobjectArray) *aParam, 0, jarray);
-        }
-      }
-
-      // cleanup
-      // If this is not an out param or if the invokeResult is a failure case,
-      // then the array elements have not been cleaned up.  Do so now.
-      if (!aParamInfo.IsOut() || (NS_FAILED(aInvokeResult) && aVariant.val.p)) {
-        nsXPTCVariant var;
-        for (PRUint32 i = 0; i < aArraySize; i++) {
-          rv = GetNativeArrayElement(aArrayType, aVariant.val.p, i, &var);
-          if (NS_SUCCEEDED(rv)) {
-            FinalizeParams(env, aParamInfo, aArrayType, var, aIID, PR_TRUE,
-                           0, 0, i, NS_ERROR_FAILURE, nsnull);
-          }
-        }
-      }
-      PR_Free(aVariant.val.p);
-      break;
-    }
-
-    case nsXPTType::T_PSTRING_SIZE_IS:
-    case nsXPTType::T_PWSTRING_SIZE_IS:
-    {
-      NS_PRECONDITION(!aIsArrayElement, "sized string array not supported");
-
-      if ((aParamInfo.IsOut()) && NS_SUCCEEDED(aInvokeResult))
-      {
-        // create new string from data
-        jstring str = nsnull;
-        if (aVariant.val.p) {
-          if (aType == nsXPTType::T_PSTRING_SIZE_IS) {
-            PRUint32 len = (aArraySize + 1) * sizeof(char);
-            char* buf = (char*) nsMemory::Alloc(len);
-            if (buf) {
-              memcpy(buf, aVariant.val.p, len);
-              buf[aArraySize] = '\0';
-              str = env->NewStringUTF((const char*) buf);
-              nsMemory::Free(buf);
-            }
-          } else {
-            str = env->NewString((const jchar*) aVariant.val.p, aArraySize);
-          }
-          if (!str) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        }
-
-        if (aParamInfo.IsRetval()) {
-          *aParam = str;
-        } else if (*aParam) {
-          // put new string into output array
-          env->SetObjectArrayElement((jobjectArray) *aParam, aIndex, str);
-        }
-      }
-
-      // cleanup
-      if (aVariant.val.p)
-        nsMemory::Free(aVariant.val.p);
-      break;
-    }
-
-    default:
-      NS_WARNING("unexpected parameter type");
-      return NS_ERROR_UNEXPECTED;
-  }
-
-  // Check for Java exception, but don't overwrite pre-existing error code.
-  if (NS_SUCCEEDED(rv) && env->ExceptionCheck())
-    rv = NS_ERROR_FAILURE;
-
-  return rv;
-}
-
-nsresult
-QueryAttributeInfo(nsIInterfaceInfo* aIInfo, const char* aMethodName,
-                   PRBool aCapitalizedAttr, PRUint16* aMethodIndex,
-                   const nsXPTMethodInfo** aMethodInfo)
-
-{
-  nsresult rv = NS_ERROR_FAILURE;
-
-  // An 'attribute' will start with either "get" or "set".  But first,
-  // we check the length, in order to skip over method names that match exactly
-  // "get" or "set".
-  if (strlen(aMethodName) > 3) {
-    if (strncmp("get", aMethodName, 3) == 0) {
-      char* getterName = strdup(aMethodName + 3);
-      if (!aCapitalizedAttr) {
-        getterName[0] = tolower(getterName[0]);
-      }
-      rv = aIInfo->GetMethodInfoForName(getterName, aMethodIndex, aMethodInfo);
-      free(getterName);
-    } else if (strncmp("set", aMethodName, 3) == 0) {
-      char* setterName = strdup(aMethodName + 3);
-      if (!aCapitalizedAttr) {
-        setterName[0] = tolower(setterName[0]);
-      }
-      rv = aIInfo->GetMethodInfoForName(setterName, aMethodIndex, aMethodInfo);
-      if (NS_SUCCEEDED(rv)) {
-        // If this succeeded, GetMethodInfoForName will have returned the
-        // method info for the 'getter'.  We want the 'setter', so increase
-        // method index by one ('setter' immediately follows the 'getter'),
-        // and get its method info.
-        (*aMethodIndex)++;
-        rv = aIInfo->GetMethodInfo(*aMethodIndex, aMethodInfo);
-        if (NS_SUCCEEDED(rv)) {
-          // Double check that this methodInfo matches the given method.
-          if (!(*aMethodInfo)->IsSetter() ||
-              strcmp(setterName, (*aMethodInfo)->name) != 0) {
-            rv = NS_ERROR_FAILURE;
-          }
-        }
-      }
-      free(setterName);
-    }
-  }
-
-  return rv;
-}
-
-/**
- * Given an interface info struct and a method name, returns the method info
- * and index, if that method exists.
- *
- * Most method names are lower case.  Unfortunately, the method names of some
- * interfaces (such as nsIAppShell) start with a capital letter.  This function
- * will try all of the permutations.
- */
-nsresult
-QueryMethodInfo(nsIInterfaceInfo* aIInfo, const char* aMethodName,
-                PRUint16* aMethodIndex, const nsXPTMethodInfo** aMethodInfo)
-{
-  // Skip over any leading underscores, since these are methods that conflicted
-  // with existing Java keywords
-  const char* methodName = aMethodName;
-  if (methodName[0] == '_') {
-    methodName++;
-  }
-
-  // The common case is that the method name is lower case, so we check
-  // that first.
-  nsresult rv;
-  rv = aIInfo->GetMethodInfoForName(methodName, aMethodIndex, aMethodInfo);
-  if (NS_SUCCEEDED(rv))
-    return rv;
-
-  // If there is no method called <aMethodName>, then maybe it is an
-  // 'attribute'.
-  rv = QueryAttributeInfo(aIInfo, methodName, PR_FALSE, aMethodIndex,
-                          aMethodInfo);
-  if (NS_SUCCEEDED(rv))
-    return rv;
-
-  // If we get here, then maybe the method name is capitalized.
-  char* name = strdup(methodName);
-  name[0] = toupper(name[0]);
-  rv = aIInfo->GetMethodInfoForName(name, aMethodIndex, aMethodInfo);
-  free(name);
-  if (NS_SUCCEEDED(rv))
-    return rv;
-
-  // If there is no method called <aMethodName>, then maybe it is an
-  // 'attribute'.
-  rv = QueryAttributeInfo(aIInfo, methodName, PR_TRUE, aMethodIndex,
-                          aMethodInfo);
-
-  return rv;
-}
-
-/**
- *  org.mozilla.xpcom.XPCOMJavaProxy.internal.callXPCOMMethod
- */
-extern "C" NS_EXPORT jobject JNICALL
-JAVAPROXY_NATIVE(callXPCOMMethod) (JNIEnv *env, jclass that, jobject aJavaProxy,
-                                   jstring aMethodName, jobjectArray aParams)
-{
-  nsresult rv;
-
-  // Get native XPCOM instance
-  void* xpcom_obj;
-  rv = GetXPCOMInstFromProxy(env, aJavaProxy, &xpcom_obj);
-  if (NS_FAILED(rv)) {
-    ThrowException(env, 0, "Failed to get matching XPCOM object");
-    return nsnull;
-  }
-  JavaXPCOMInstance* inst = static_cast<JavaXPCOMInstance*>(xpcom_obj);
-
-  // Get method info
-  PRUint16 methodIndex;
-  const nsXPTMethodInfo* methodInfo;
-  nsIInterfaceInfo* iinfo = inst->InterfaceInfo();
-  const char* methodName = env->GetStringUTFChars(aMethodName, nsnull);
-  rv = QueryMethodInfo(iinfo, methodName, &methodIndex, &methodInfo);
-  env->ReleaseStringUTFChars(aMethodName, methodName);
-
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "GetMethodInfoForName failed");
-    return nsnull;
-  }
-
-#ifdef DEBUG_JAVAXPCOM
-  const char* ifaceName;
-  iinfo->GetNameShared(&ifaceName);
-  LOG(("===> (XPCOM) %s::%s()\n", ifaceName, methodInfo->GetName()));
-#endif
-
-  // Convert the Java params
-  PRUint8 paramCount = methodInfo->GetParamCount();
-  nsXPTCVariant* params = nsnull;
-  if (paramCount)
-  {
-    params = new nsXPTCVariant[paramCount];
-    if (!params) {
-      ThrowException(env, NS_ERROR_OUT_OF_MEMORY, "Can't create params array");
-      return nsnull;
-    }
-    memset(params, 0, paramCount * sizeof(nsXPTCVariant));
-
-    PRBool foundDependentParam = PR_FALSE;
-    for (PRUint8 i = 0; i < paramCount && NS_SUCCEEDED(rv); i++)
-    {
-      LOG(("\t Param %d: ", i));
-      const nsXPTParamInfo &paramInfo = methodInfo->GetParam(i);
-      params[i].type = paramInfo.GetType();
-
-      if (params[i].type.IsDependent() && paramInfo.IsIn()) {
-        foundDependentParam = PR_TRUE;
-        continue;
-      }
-      
-      if (paramInfo.IsIn()) {
-        PRUint8 type = params[i].type.TagPart();
-
-        // get IID for interface params
-        nsID iid;
-        if (type == nsXPTType::T_INTERFACE) {
-          rv = GetIIDForMethodParam(iinfo, methodInfo, paramInfo, type,
-                                    methodIndex, params, PR_TRUE, iid);
-        }
-
-        if (NS_SUCCEEDED(rv)) {
-          jobject param = nsnull;
-          if (aParams && !paramInfo.IsRetval()) {
-            param = env->GetObjectArrayElement(aParams, i);
-          }
-          rv = SetupParams(env, param, type, paramInfo.IsOut(), iid, 0, 0,
-                           PR_FALSE, 0, params[i]);
-        }
-      } else {
-        LOG(("out/retval\n"));
-        params[i].ptr = &(params[i].val);
-        params[i].SetPtrIsData();
-      }
-    }
-    
-    // Handle any dependent params by doing a second pass
-    if (foundDependentParam) {
-      
-      for (PRUint8 j = 0; j < paramCount && NS_SUCCEEDED(rv); j++) {
-        
-        const nsXPTParamInfo &paramInfo = methodInfo->GetParam(j);
-        params[j].type = paramInfo.GetType();
-
-        if (!params[j].type.IsDependent())
-          continue;
-
-        if (paramInfo.IsIn()) {
-          PRUint8 type = params[j].type.TagPart();
-
-          // is paramater an array or sized string?
-          PRUint8 arrayType = 0;
-          PRUint32 arraySize = 0;
-          PRBool isArray = params[j].type.IsArray();
-          PRBool isSizedString = isArray ? PR_FALSE :
-                   type == nsXPTType::T_PSTRING_SIZE_IS ||
-                   type == nsXPTType::T_PWSTRING_SIZE_IS;
-
-          if (isArray) {
-            // get array type
-            nsXPTType xpttype;
-            rv = iinfo->GetTypeForParam(methodIndex, &paramInfo, 1, &xpttype);
-            if (NS_FAILED(rv))
-              break;
-            arrayType = xpttype.TagPart();
-            // IDL 'octet' arrays are not 'promoted' to short, but kept as 'byte';
-            // therefore, treat as a signed 8bit value
-            if (arrayType == nsXPTType::T_U8)
-              arrayType = nsXPTType::T_I8;
-          }
-
-          if (isArray || isSizedString) {
-            // get size of array or string
-            PRUint8 argnum;
-            rv = iinfo->GetSizeIsArgNumberForParam(methodIndex, &paramInfo, 0,
-                                                   &argnum);
-            if (NS_FAILED(rv))
-              break;
-            arraySize = params[argnum].val.u32;
-          }
-
-          // get IID for interface params
-          nsID iid;
-          if (type == nsXPTType::T_INTERFACE_IS ||
-              type == nsXPTType::T_ARRAY &&
-                (arrayType == nsXPTType::T_INTERFACE ||
-                 arrayType == nsXPTType::T_INTERFACE_IS))
-          {
-            PRUint8 paramType = type == nsXPTType::T_ARRAY ? arrayType : type;
-            rv = GetIIDForMethodParam(iinfo, methodInfo, paramInfo, paramType,
-                                      methodIndex, params, PR_TRUE, iid);
-          }
-
-          if (NS_SUCCEEDED(rv)) {
-            jobject param = nsnull;
-            if (aParams && !paramInfo.IsRetval()) {
-              param = env->GetObjectArrayElement(aParams, j);
-            }
-            rv = SetupParams(env, param, type, paramInfo.IsOut(), iid, arrayType,
-                             arraySize, PR_FALSE, 0, params[j]);
-          }
-        }
-      }
-    }
-    
-    if (NS_FAILED(rv)) {
-      ThrowException(env, rv, "SetupParams failed");
-      return nsnull;
-    }
-  }
-
-  // Call the XPCOM method
-  const nsIID* iid;
-  iinfo->GetIIDShared(&iid);
-  nsISupports* realObject;
-  rv = inst->GetInstance()->QueryInterface(*iid, (void**) &realObject);
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "Failed to get real XPCOM object");
-    return nsnull;
-  }
-  nsresult invokeResult = NS_InvokeByIndex(realObject, methodIndex,
-                                           paramCount, params);
-  NS_RELEASE(realObject);
-
-  // Clean up params
-  jobject result = nsnull;
-  for (PRUint8 i = 0; i < paramCount && NS_SUCCEEDED(rv); i++)
-  {
-    const nsXPTParamInfo &paramInfo = methodInfo->GetParam(i);
-    PRUint8 type = paramInfo.GetType().TagPart();
-
-    // is paramater an array or sized string?
-    PRUint8 arrayType = 0;
-    PRUint32 arraySize = 0;
-    PRBool isArray = params[i].type.IsArray();
-    PRBool isSizedString = isArray ? PR_FALSE :
-             type == nsXPTType::T_PSTRING_SIZE_IS ||
-             type == nsXPTType::T_PWSTRING_SIZE_IS;
-
-    if (isArray) {
-      // get array type
-      nsXPTType array_xpttype;
-      rv = iinfo->GetTypeForParam(methodIndex, &paramInfo, 1, &array_xpttype);
-      if (NS_FAILED(rv))
-        break;
-      arrayType = array_xpttype.TagPart();
-      // IDL 'octet' arrays are not 'promoted' to short, but kept as 'byte';
-      // therefore, treat as a signed 8bit value
-      if (arrayType == nsXPTType::T_U8)
-        arrayType = nsXPTType::T_I8;
-    }
-
-    if (isArray || isSizedString) {
-      // get size of array
-      PRUint8 argnum;
-      rv = iinfo->GetSizeIsArgNumberForParam(methodIndex, &paramInfo, 0,
-                                             &argnum);
-      if (NS_FAILED(rv))
-        break;
-      arraySize = params[argnum].val.u32;
-    }
-
-    // get IID for interface params
-    nsID iid;
-    if (type == nsXPTType::T_INTERFACE || type == nsXPTType::T_INTERFACE_IS ||
-        type == nsXPTType::T_ARRAY && (arrayType == nsXPTType::T_INTERFACE ||
-                                       arrayType == nsXPTType::T_INTERFACE_IS))
-    {
-      PRUint8 paramType = type == nsXPTType::T_ARRAY ? arrayType : type;
-      rv = GetIIDForMethodParam(iinfo, methodInfo, paramInfo, paramType,
-                                methodIndex, params, PR_TRUE, iid);
-      if (NS_FAILED(rv))
-        break;
-    }
-
-    jobject* javaElement;
-    if (!paramInfo.IsRetval()) {
-      jobject element = env->GetObjectArrayElement(aParams, i);
-      javaElement = &element;
-    } else {
-      javaElement = &result;
-    }
-    rv = FinalizeParams(env, paramInfo, type, params[i], iid, PR_FALSE,
-                        arrayType, arraySize, 0, invokeResult, javaElement);
-  }
-
-  // Normally, we would delete any created nsID object in the above loop.
-  // However, GetIIDForMethodParam may need some of the nsID params when it's
-  // looking for the IID of an INTERFACE_IS.  Therefore, we can't delete it
-  // until we've gone through the 'Finalize' loop once and created the result.
-  for (PRUint8 j = 0; j < paramCount; j++)
-  {
-    const nsXPTParamInfo &paramInfo = methodInfo->GetParam(j);
-    const nsXPTType &type = paramInfo.GetType();
-    if (type.TagPart() == nsXPTType::T_IID) {
-      nsID* iid = (nsID*) params[j].val.p;
-      delete iid;
-    }
-  }
-
-  if (params) {
-    delete params;
-  }
-
-  // If the XPCOM method invocation failed, we don't immediately throw an
-  // exception and return so that we can clean up any parameters.
-  if (NS_FAILED(invokeResult)) {
-    nsCAutoString message("The function \"");
-    message.AppendASCII(methodInfo->GetName());
-    message.AppendLiteral("\" returned an error condition");
-    ThrowException(env, invokeResult, message.get());
-  }
-  if (NS_FAILED(rv)) {
-    ThrowException(env, rv, "FinalizeParams failed");
-    return nsnull;
-  }
-
-  LOG(("<=== (XPCOM) %s::%s()\n", ifaceName, methodInfo->GetName()));
-  return result;
-}
-
-nsresult
-GetNewOrUsedJavaWrapper(JNIEnv* env, nsISupports* aXPCOMObject,
-                        const nsIID& aIID, jobject aObjectLoader,
-                        jobject* aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_NULL_POINTER;
-
-  // Get the root nsISupports of the xpcom object
-  nsresult rv;
-  nsCOMPtr<nsISupports> rootObject = do_QueryInterface(aXPCOMObject, &rv);
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  // Get associated Java object from hash table
-  rv = gNativeToJavaProxyMap->Find(env, rootObject, aIID, aResult);
-  NS_ENSURE_SUCCESS(rv, rv);
-  if (*aResult)
-    return NS_OK;
-
-  // No Java object is associated with the given XPCOM object, so we
-  // create a Java proxy.
-
-  nsCOMPtr<nsIInterfaceInfoManager>
-    iim(do_GetService(NS_INTERFACEINFOMANAGER_SERVICE_CONTRACTID));
-  NS_ASSERTION(iim, "Failed to get InterfaceInfoManager");
-  if (!iim)
-    return NS_ERROR_FAILURE;
-
-  // Get interface info for class
-  nsCOMPtr<nsIInterfaceInfo> info;
-  rv = iim->GetInfoForIID(&aIID, getter_AddRefs(info));
-  if (NS_FAILED(rv))
-    return rv;
-
-  // Wrap XPCOM object (addrefs rootObject)
-  JavaXPCOMInstance* inst = new JavaXPCOMInstance(rootObject, info);
-  if (!inst)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  // Get interface name
-  const char* iface_name;
-  rv = info->GetNameShared(&iface_name);
-
-  if (NS_SUCCEEDED(rv)) {
-    jobject java_obj = nsnull;
-
-    // Create proper Java interface name
-    nsCAutoString class_name("org.mozilla.interfaces.");
-    class_name.AppendASCII(iface_name);
-    jclass ifaceClass = FindClassInLoader(env, aObjectLoader, class_name.get());
-
-    if (ifaceClass) {
-      java_obj = env->CallStaticObjectMethod(xpcomJavaProxyClass,
-                                             createProxyMID, ifaceClass,
-                                             reinterpret_cast<jlong>(inst));
-      if (env->ExceptionCheck())
-        java_obj = nsnull;
-    }
-
-    if (java_obj) {
-#ifdef DEBUG_JAVAXPCOM
-      char* iid_str = aIID.ToString();
-      LOG(("+ CreateJavaProxy (Java=%08x | XPCOM=%08x | IID=%s)\n",
-           (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                               java_obj),
-           (PRUint32) rootObject, iid_str));
-      NS_Free(iid_str);
-#endif
-
-      // Associate XPCOM object with Java proxy
-      rv = gNativeToJavaProxyMap->Add(env, rootObject, aIID, java_obj);
-      if (NS_SUCCEEDED(rv)) {
-        *aResult = java_obj;
-        return NS_OK;
-      }
-    } else {
-      rv = NS_ERROR_FAILURE;
-    }
-  }
-
-  // If there was an error, clean up.
-  delete inst;
-  return rv;
-}
-
-nsresult
-GetXPCOMInstFromProxy(JNIEnv* env, jobject aJavaObject, void** aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_NULL_POINTER;
-
-  jlong xpcom_obj = env->CallStaticLongMethod(xpcomJavaProxyClass,
-                                            getNativeXPCOMInstMID, aJavaObject);
-
-  if (!xpcom_obj || env->ExceptionCheck()) {
-    return NS_ERROR_FAILURE;
-  }
-
-  *aResult = reinterpret_cast<void*>(xpcom_obj);
-#ifdef DEBUG_JAVAXPCOM
-  JavaXPCOMInstance* inst = static_cast<JavaXPCOMInstance*>(*aResult);
-  nsIID* iid;
-  inst->InterfaceInfo()->GetInterfaceIID(&iid);
-  char* iid_str = iid->ToString();
-  LOG(("< GetXPCOMInstFromProxy (Java=%08x | XPCOM=%08x | IID=%s)\n",
-       (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                           aJavaObject),
-       (PRUint32) inst->GetInstance(), iid_str));
-  NS_Free(iid_str);
-  nsMemory::Free(iid);
-#endif
-  return NS_OK;
-}
-
-/**
- *  org.mozilla.xpcom.internal.XPCOMJavaProxy.finalizeProxy
- */
-extern "C" NS_EXPORT void JNICALL
-JAVAPROXY_NATIVE(finalizeProxy) (JNIEnv *env, jclass that, jobject aJavaProxy)
-{
-#ifdef DEBUG_JAVAXPCOM
-  PRUint32 xpcom_addr = 0;
-#endif
-
-  // Due to Java's garbage collection, this finalize statement may get called
-  // after FreeJavaGlobals().  So check to make sure that everything is still
-  // initialized.
-  if (gJavaXPCOMLock) {
-    nsAutoLock lock(gJavaXPCOMLock);
-
-    // If may be possible for the lock to be acquired here when FreeGlobals is
-    // in the middle of running.  If so, then this thread will sleep until
-    // FreeGlobals releases its lock.  At that point, we resume this thread
-    // here, but JavaXPCOM may no longer be initialized.  So we need to check
-    // that everything is legit after acquiring the lock.
-    if (gJavaXPCOMInitialized) {
-      // Get native XPCOM instance
-      void* xpcom_obj;
-      nsresult rv = GetXPCOMInstFromProxy(env, aJavaProxy, &xpcom_obj);
-      if (NS_SUCCEEDED(rv)) {
-        JavaXPCOMInstance* inst = static_cast<JavaXPCOMInstance*>(xpcom_obj);
-#ifdef DEBUG_JAVAXPCOM
-        xpcom_addr = reinterpret_cast<PRUint32>(inst->GetInstance());
-#endif
-        nsIID* iid;
-        rv = inst->InterfaceInfo()->GetInterfaceIID(&iid);
-        if (NS_SUCCEEDED(rv)) {
-          rv = gNativeToJavaProxyMap->Remove(env, inst->GetInstance(), *iid);
-          nsMemory::Free(iid);
-        }
-        NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to RemoveJavaProxy");
-        // Release gJavaXPCOMLock before deleting inst (see bug 340022)
-        lock.unlock();
-        delete inst;
-      }
-    }
-  }
-
-#ifdef DEBUG_JAVAXPCOM
-  LOG(("- Finalize (Java=%08x | XPCOM=%08x)\n",
-       (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                           aJavaProxy),
-       xpcom_addr));
-#endif
-}
-
-/**
- *  org.mozilla.xpcom.XPCOMJavaProxy.isSameXPCOMObject
- */
-extern "C" NS_EXPORT jboolean JNICALL
-JAVAPROXY_NATIVE(isSameXPCOMObject) (JNIEnv *env, jclass that,
-                                     jobject aProxy1, jobject aProxy2)
-{
-  void* xpcom_obj1;
-  nsresult rv = GetXPCOMInstFromProxy(env, aProxy1, &xpcom_obj1);
-  if (NS_SUCCEEDED(rv)) {
-    void* xpcom_obj2;
-    rv = GetXPCOMInstFromProxy(env, aProxy2, &xpcom_obj2);
-    if (NS_SUCCEEDED(rv)) {
-      JavaXPCOMInstance* inst1 = static_cast<JavaXPCOMInstance*>(xpcom_obj1);
-      JavaXPCOMInstance* inst2 = static_cast<JavaXPCOMInstance*>(xpcom_obj2);
-      if (inst1->GetInstance() == inst2->GetInstance()) {
-        return JNI_TRUE;
-      }
-    }
-  }
-  return JNI_FALSE;
-}
-
-/**
- *  org.mozilla.xpcom.ProfileLock.release
- */
-extern "C" NS_EXPORT void JNICALL
-LOCKPROXY_NATIVE(release) (JNIEnv *env, jclass that, jlong aLockObject)
-{
-  // Need to release object on the main thread.
-  nsresult rv = NS_ERROR_FAILURE;
-  nsCOMPtr<nsIThread> thread = do_GetMainThread();
-  if (thread) {
-    rv = NS_ProxyRelease(thread, reinterpret_cast<nsISupports*>(aLockObject));
-  }
-  NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to release using NS_ProxyRelease");
-}
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaWrapper.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2004
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef _nsJavaWrapper_h_
-#define _nsJavaWrapper_h_
-
-#include "jni.h"
-#include "nsISupports.h"
-
-
-/**
- * Finds the associated Java wraper for the given XPCOM object and IID.  If no
- * such Java wrapper exists, then a new one is created.
- *
- * @param env           Java environment pointer
- * @param aXPCOMObject  XPCOM object for which to find/create Java wrapper
- * @param aIID          desired interface IID for Java wrapper
- * @param aObjectLoader Java wrapper whose class loader we use for finding
- *                      classes; can be null
- * @param aResult       on success, holds reference to Java wrapper
- *
- * @return  NS_OK if succeeded; all other return values are error codes.
- */
-nsresult GetNewOrUsedJavaWrapper(JNIEnv* env, nsISupports* aXPCOMObject,
-                                 const nsIID& aIID, jobject aObjectLoader,
-                                 jobject* aResult);
-
-/**
- * Returns the XPCOM object for which the given Java proxy was created.
- *
- * @param env           pointer to Java context
- * @param aJavaObject   a Java proxy created by CreateJavaProxy()
- * @param aResult       on exit, holds pointer to XPCOM instance
- *
- * @return NS_OK if the XPCOM object was successfully retrieved;
- *         any other value denotes an error condition.
- */
-nsresult GetXPCOMInstFromProxy(JNIEnv* env, jobject aJavaObject,
-                               void** aResult);
-
-#endif // _nsJavaWrapper_h_
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.cpp
+++ /dev/null
@@ -1,1061 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-#include "nsJavaXPCOMBindingUtils.h"
-#include "nsJavaXPTCStub.h"
-#include "nsJavaWrapper.h"
-#include "jni.h"
-#include "nsIInterfaceInfoManager.h"
-#include "nsILocalFile.h"
-#include "nsThreadUtils.h"
-#include "nsProxyRelease.h"
-
-
-/* Java JNI globals */
-
-JavaVM* gCachedJVM = nsnull;
-
-jclass systemClass = nsnull;
-jclass booleanClass = nsnull;
-jclass charClass = nsnull;
-jclass byteClass = nsnull;
-jclass shortClass = nsnull;
-jclass intClass = nsnull;
-jclass longClass = nsnull;
-jclass floatClass = nsnull;
-jclass doubleClass = nsnull;
-jclass stringClass = nsnull;
-jclass nsISupportsClass = nsnull;
-jclass xpcomExceptionClass = nsnull;
-jclass xpcomJavaProxyClass = nsnull;
-jclass weakReferenceClass = nsnull;
-jclass javaXPCOMUtilsClass = nsnull;
-
-jmethodID hashCodeMID = nsnull;
-jmethodID booleanValueMID = nsnull;
-jmethodID booleanInitMID = nsnull;
-jmethodID charValueMID = nsnull;
-jmethodID charInitMID = nsnull;
-jmethodID byteValueMID = nsnull;
-jmethodID byteInitMID = nsnull;
-jmethodID shortValueMID = nsnull;
-jmethodID shortInitMID = nsnull;
-jmethodID intValueMID = nsnull;
-jmethodID intInitMID = nsnull;
-jmethodID longValueMID = nsnull;
-jmethodID longInitMID = nsnull;
-jmethodID floatValueMID = nsnull;
-jmethodID floatInitMID = nsnull;
-jmethodID doubleValueMID = nsnull;
-jmethodID doubleInitMID = nsnull;
-jmethodID createProxyMID = nsnull;
-jmethodID isXPCOMJavaProxyMID = nsnull;
-jmethodID getNativeXPCOMInstMID = nsnull;
-jmethodID weakReferenceConstructorMID = nsnull;
-jmethodID getReferentMID = nsnull;
-jmethodID clearReferentMID = nsnull;
-jmethodID findClassInLoaderMID = nsnull;
-
-#ifdef DEBUG_JAVAXPCOM
-jmethodID getNameMID = nsnull;
-jmethodID proxyToStringMID = nsnull;
-#endif
-
-NativeToJavaProxyMap* gNativeToJavaProxyMap = nsnull;
-JavaToXPTCStubMap* gJavaToXPTCStubMap = nsnull;
-
-PRBool gJavaXPCOMInitialized = PR_FALSE;
-PRLock* gJavaXPCOMLock = nsnull;
-
-static const char* kJavaKeywords[] = {
-  "abstract", "default"  , "if"        , "private"     , "throw"       ,
-  "boolean" , "do"       , "implements", "protected"   , "throws"      ,
-  "break"   , "double"   , "import",     "public"      , "transient"   ,
-  "byte"    , "else"     , "instanceof", "return"      , "try"         ,
-  "case"    , "extends"  , "int"       , "short"       , "void"        ,
-  "catch"   , "final"    , "interface" , "static"      , "volatile"    ,
-  "char"    , "finally"  , "long"      , "super"       , "while"       ,
-  "class"   , "float"    , "native"    , "switch"      ,
-  "const"   , "for"      , "new"       , "synchronized",
-  "continue", "goto"     , "package"   , "this"        ,
-    /* added in Java 1.2 */
-  "strictfp",
-    /* added in Java 1.4 */
-  "assert"  ,
-    /* added in Java 5.0 */
-  "enum"    ,
-    /* Java constants */
-  "true"    , "false"    , "null"      ,
-    /* java.lang.Object methods                                           *
-     *    - don't worry about "toString", since it does the same thing    *
-     *      as Object's "toString"                                        */
-  "clone"   , "equals"   , "finalize"  , "getClass"    , "hashCode"    ,
-  "notify"  , "notifyAll", /*"toString"  ,*/ "wait"
-};
-
-nsTHashtable<nsDepCharHashKey>* gJavaKeywords = nsnull;
-
-
-/******************************
- *  InitializeJavaGlobals
- ******************************/
-PRBool
-InitializeJavaGlobals(JNIEnv *env)
-{
-  if (gJavaXPCOMInitialized)
-    return PR_TRUE;
-
-  // Save pointer to JavaVM, which is valid across threads.
-  jint rc = env->GetJavaVM(&gCachedJVM);
-  if (rc != 0) {
-    NS_WARNING("Failed to get JavaVM");
-    goto init_error;
-  }
-
-  jclass clazz;
-  if (!(clazz = env->FindClass("java/lang/System")) ||
-      !(systemClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(hashCodeMID = env->GetStaticMethodID(clazz, "identityHashCode",
-                                             "(Ljava/lang/Object;)I")))
-  {
-    NS_WARNING("Problem creating java.lang.System globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Boolean")) ||
-      !(booleanClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(booleanValueMID = env->GetMethodID(clazz, "booleanValue", "()Z")) ||
-      !(booleanInitMID = env->GetMethodID(clazz, "<init>", "(Z)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Boolean globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Character")) ||
-      !(charClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(charValueMID = env->GetMethodID(clazz, "charValue", "()C")) ||
-      !(charInitMID = env->GetMethodID(clazz, "<init>", "(C)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Character globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Byte")) ||
-      !(byteClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(byteValueMID = env->GetMethodID(clazz, "byteValue", "()B")) ||
-      !(byteInitMID = env->GetMethodID(clazz, "<init>", "(B)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Byte globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Short")) ||
-      !(shortClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(shortValueMID = env->GetMethodID(clazz, "shortValue", "()S")) ||
-      !(shortInitMID = env->GetMethodID(clazz, "<init>", "(S)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Short globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Integer")) ||
-      !(intClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(intValueMID = env->GetMethodID(clazz, "intValue", "()I")) ||
-      !(intInitMID = env->GetMethodID(clazz, "<init>", "(I)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Integer globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Long")) ||
-      !(longClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(longValueMID = env->GetMethodID(clazz, "longValue", "()J")) ||
-      !(longInitMID = env->GetMethodID(clazz, "<init>", "(J)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Long globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Float")) ||
-      !(floatClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(floatValueMID = env->GetMethodID(clazz, "floatValue", "()F")) ||
-      !(floatInitMID = env->GetMethodID(clazz, "<init>", "(F)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Float globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/Double")) ||
-      !(doubleClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(doubleValueMID = env->GetMethodID(clazz, "doubleValue", "()D")) ||
-      !(doubleInitMID = env->GetMethodID(clazz, "<init>", "(D)V")))
-  {
-    NS_WARNING("Problem creating java.lang.Double globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/String")) ||
-      !(stringClass = (jclass) env->NewGlobalRef(clazz)))
-  {
-    NS_WARNING("Problem creating java.lang.String globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("org/mozilla/interfaces/nsISupports")) ||
-      !(nsISupportsClass = (jclass) env->NewGlobalRef(clazz)))
-  {
-    NS_WARNING("Problem creating org.mozilla.interfaces.nsISupports globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("org/mozilla/xpcom/XPCOMException")) ||
-      !(xpcomExceptionClass = (jclass) env->NewGlobalRef(clazz)))
-  {
-    NS_WARNING("Problem creating org.mozilla.xpcom.XPCOMException globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("org/mozilla/xpcom/internal/XPCOMJavaProxy")) ||
-      !(xpcomJavaProxyClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(createProxyMID = env->GetStaticMethodID(clazz, "createProxy",
-                                   "(Ljava/lang/Class;J)Ljava/lang/Object;")) ||
-      !(isXPCOMJavaProxyMID = env->GetStaticMethodID(clazz, "isXPCOMJavaProxy",
-                                                    "(Ljava/lang/Object;)Z")) ||
-      !(getNativeXPCOMInstMID = env->GetStaticMethodID(xpcomJavaProxyClass,
-                                                       "getNativeXPCOMInstance",
-                                                       "(Ljava/lang/Object;)J")))
-  {
-    NS_WARNING("Problem creating org.mozilla.xpcom.internal.XPCOMJavaProxy globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("java/lang/ref/WeakReference")) ||
-      !(weakReferenceClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(weakReferenceConstructorMID = env->GetMethodID(weakReferenceClass, 
-                                           "<init>","(Ljava/lang/Object;)V")) ||
-      !(getReferentMID = env->GetMethodID(weakReferenceClass,
-                                          "get", "()Ljava/lang/Object;")) ||
-      !(clearReferentMID = env->GetMethodID(weakReferenceClass, 
-                                            "clear", "()V")))
-  {
-    NS_WARNING("Problem creating java.lang.ref.WeakReference globals");
-    goto init_error;
-  }
-
-  if (!(clazz = env->FindClass("org/mozilla/xpcom/internal/JavaXPCOMMethods")) ||
-      !(javaXPCOMUtilsClass = (jclass) env->NewGlobalRef(clazz)) ||
-      !(findClassInLoaderMID = env->GetStaticMethodID(clazz,
-                    "findClassInLoader",
-                    "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Class;")))
-  {
-    NS_WARNING("Problem creating org.mozilla.xpcom.internal.JavaXPCOMMethods globals");
-    goto init_error;
-  }
-
-#ifdef DEBUG_JAVAXPCOM
-  if (!(clazz = env->FindClass("java/lang/Class")) ||
-      !(getNameMID = env->GetMethodID(clazz, "getName","()Ljava/lang/String;")))
-  {
-    NS_WARNING("Problem creating java.lang.Class globals");
-    goto init_error;
-  }
-
-  if (!(proxyToStringMID = env->GetStaticMethodID(xpcomJavaProxyClass,
-                                                  "proxyToString",
-                                     "(Ljava/lang/Object;)Ljava/lang/String;")))
-  {
-    NS_WARNING("Problem creating proxyToString global");
-    goto init_error;
-  }
-#endif
-
-  gNativeToJavaProxyMap = new NativeToJavaProxyMap();
-  if (!gNativeToJavaProxyMap || NS_FAILED(gNativeToJavaProxyMap->Init())) {
-    NS_WARNING("Problem creating NativeToJavaProxyMap");
-    goto init_error;
-  }
-  gJavaToXPTCStubMap = new JavaToXPTCStubMap();
-  if (!gJavaToXPTCStubMap || NS_FAILED(gJavaToXPTCStubMap->Init())) {
-    NS_WARNING("Problem creating JavaToXPTCStubMap");
-    goto init_error;
-  }
-
-  {
-    nsresult rv = NS_OK;
-    PRUint32 size = NS_ARRAY_LENGTH(kJavaKeywords);
-    gJavaKeywords = new nsTHashtable<nsDepCharHashKey>();
-    if (!gJavaKeywords || NS_FAILED(gJavaKeywords->Init(size))) {
-      NS_WARNING("Failed to init JavaKeywords HashSet");
-      goto init_error;
-    }
-    for (PRUint32 i = 0; i < size && NS_SUCCEEDED(rv); i++) {
-      if (!gJavaKeywords->PutEntry(kJavaKeywords[i])) {
-        rv = NS_ERROR_OUT_OF_MEMORY;
-      }
-    }
-    if (NS_FAILED(rv)) {
-      NS_WARNING("Failed to populate JavaKeywords hash");
-      goto init_error;
-    }
-  }
-
-  gJavaXPCOMLock = nsAutoLock::NewLock("gJavaXPCOMLock");
-  gJavaXPCOMInitialized = PR_TRUE;
-  return PR_TRUE;
-
-init_error:
-  // If we encounter an error during initialization, then free any globals that
-  // were allocated, and return false.
-  FreeJavaGlobals(env);
-  return PR_FALSE;
-}
-
-/*************************
- *    FreeJavaGlobals
- *************************/
-void
-FreeJavaGlobals(JNIEnv* env)
-{
-  PRLock* tempLock = nsnull;
-  if (gJavaXPCOMLock) {
-    PR_Lock(gJavaXPCOMLock);
-
-    // null out global lock so no one else can use it
-    tempLock = gJavaXPCOMLock;
-    gJavaXPCOMLock = nsnull;
-  }
-
-  gJavaXPCOMInitialized = PR_FALSE;
-
-  // Free the mappings first, since that process depends on some of the Java
-  // globals that are freed later.
-  if (gNativeToJavaProxyMap) {
-    gNativeToJavaProxyMap->Destroy(env);
-    delete gNativeToJavaProxyMap;
-    gNativeToJavaProxyMap = nsnull;
-  }
-  if (gJavaToXPTCStubMap) {
-    gJavaToXPTCStubMap->Destroy();
-    delete gJavaToXPTCStubMap;
-    gJavaToXPTCStubMap = nsnull;
-  }
-
-  // Free remaining Java globals
-  if (systemClass) {
-    env->DeleteGlobalRef(systemClass);
-    systemClass = nsnull;
-  }
-  if (booleanClass) {
-    env->DeleteGlobalRef(booleanClass);
-    booleanClass = nsnull;
-  }
-  if (charClass) {
-    env->DeleteGlobalRef(charClass);
-    charClass = nsnull;
-  }
-  if (byteClass) {
-    env->DeleteGlobalRef(byteClass);
-    byteClass = nsnull;
-  }
-  if (shortClass) {
-    env->DeleteGlobalRef(shortClass);
-    shortClass = nsnull;
-  }
-  if (intClass) {
-    env->DeleteGlobalRef(intClass);
-    intClass = nsnull;
-  }
-  if (longClass) {
-    env->DeleteGlobalRef(longClass);
-    longClass = nsnull;
-  }
-  if (floatClass) {
-    env->DeleteGlobalRef(floatClass);
-    floatClass = nsnull;
-  }
-  if (doubleClass) {
-    env->DeleteGlobalRef(doubleClass);
-    doubleClass = nsnull;
-  }
-  if (stringClass) {
-    env->DeleteGlobalRef(stringClass);
-    stringClass = nsnull;
-  }
-  if (nsISupportsClass) {
-    env->DeleteGlobalRef(nsISupportsClass);
-    nsISupportsClass = nsnull;
-  }
-  if (xpcomExceptionClass) {
-    env->DeleteGlobalRef(xpcomExceptionClass);
-    xpcomExceptionClass = nsnull;
-  }
-  if (xpcomJavaProxyClass) {
-    env->DeleteGlobalRef(xpcomJavaProxyClass);
-    xpcomJavaProxyClass = nsnull;
-  }
-  if (weakReferenceClass) {
-    env->DeleteGlobalRef(weakReferenceClass);
-    weakReferenceClass = nsnull;
-  }
-
-  if (gJavaKeywords) {
-    delete gJavaKeywords;
-    gJavaKeywords = nsnull;
-  }
-
-  if (tempLock) {
-    PR_Unlock(tempLock);
-    nsAutoLock::DestroyLock(tempLock);
-  }
-}
-
-
-/**************************************
- *  Java<->XPCOM object mappings
- **************************************/
-
-// NativeToJavaProxyMap: The common case is that each XPCOM object will have
-// one Java proxy.  But there are instances where there will be multiple Java
-// proxies for a given XPCOM object, each representing a different interface.
-// So we optimize the common case by using a hash table.  Then, if there are
-// multiple Java proxies, we cycle through the linked list, comparing IIDs.
-
-nsresult
-NativeToJavaProxyMap::Init()
-{
-  mHashTable = PL_NewDHashTable(PL_DHashGetStubOps(), nsnull,
-                                sizeof(Entry), 16);
-  if (!mHashTable)
-    return NS_ERROR_OUT_OF_MEMORY;
-  return NS_OK;
-}
-
-PLDHashOperator
-DestroyJavaProxyMappingEnum(PLDHashTable* aTable, PLDHashEntryHdr* aHeader,
-                            PRUint32 aNumber, void* aData)
-{
-  JNIEnv* env = static_cast<JNIEnv*>(aData);
-  NativeToJavaProxyMap::Entry* entry =
-                          static_cast<NativeToJavaProxyMap::Entry*>(aHeader);
-
-  // first, delete XPCOM instances from the Java proxies
-  nsresult rv;
-  NativeToJavaProxyMap::ProxyList* item = entry->list;
-  while(item != nsnull) {
-    void* xpcom_obj;
-    jobject javaObject = env->CallObjectMethod(item->javaObject, getReferentMID);
-    rv = GetXPCOMInstFromProxy(env, javaObject, &xpcom_obj);
-    NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to get XPCOM instance from Java proxy");
-
-    if (NS_SUCCEEDED(rv)) {
-      JavaXPCOMInstance* inst = static_cast<JavaXPCOMInstance*>(xpcom_obj);
-#ifdef DEBUG_JAVAXPCOM
-      char* iid_str = item->iid.ToString();
-      LOG(("- NativeToJavaProxyMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-           (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                               javaObject),
-           (PRUint32) entry, iid_str));
-      NS_Free(iid_str);
-#endif
-      delete inst;  // releases native XPCOM object
-    }
-
-    NativeToJavaProxyMap::ProxyList* next = item->next;
-    env->CallVoidMethod(item->javaObject, clearReferentMID);
-    env->DeleteGlobalRef(item->javaObject);
-    delete item;
-    item = next;
-  }
-
-  return PL_DHASH_REMOVE;
-}
-
-nsresult
-NativeToJavaProxyMap::Destroy(JNIEnv* env)
-{
-  // This is only called from FreeGlobals(), which already holds the lock.
-  //  nsAutoLock lock(gJavaXPCOMLock);
-
-  PL_DHashTableEnumerate(mHashTable, DestroyJavaProxyMappingEnum, env);
-  PL_DHashTableDestroy(mHashTable);
-  mHashTable = nsnull;
-
-  return NS_OK;
-}
-
-nsresult
-NativeToJavaProxyMap::Add(JNIEnv* env, nsISupports* aXPCOMObject,
-                          const nsIID& aIID, jobject aProxy)
-{
-  nsAutoLock lock(gJavaXPCOMLock);
-
-  Entry* e = static_cast<Entry*>(PL_DHashTableOperate(mHashTable,
-                                                         aXPCOMObject,
-                                                         PL_DHASH_ADD));
-  if (!e)
-    return NS_ERROR_FAILURE;
-
-  jobject ref = nsnull;
-  jobject weakRefObj = env->NewObject(weakReferenceClass,
-                                      weakReferenceConstructorMID, aProxy);
-  if (weakRefObj)
-    ref = env->NewGlobalRef(weakRefObj);
-  if (!ref)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  // Add Java proxy weak reference ref to start of list
-  ProxyList* item = new ProxyList(ref, aIID, e->list);
-  e->key = aXPCOMObject;
-  e->list = item;
-
-#ifdef DEBUG_JAVAXPCOM
-  char* iid_str = aIID.ToString();
-  LOG(("+ NativeToJavaProxyMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-       (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID, aProxy),
-       (PRUint32) aXPCOMObject, iid_str));
-  NS_Free(iid_str);
-#endif
-  return NS_OK;
-}
-
-nsresult
-NativeToJavaProxyMap::Find(JNIEnv* env, nsISupports* aNativeObject,
-                           const nsIID& aIID, jobject* aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_FAILURE;
-
-  nsAutoLock lock(gJavaXPCOMLock);
-
-  *aResult = nsnull;
-  Entry* e = static_cast<Entry*>(PL_DHashTableOperate(mHashTable,
-                                                         aNativeObject,
-                                                         PL_DHASH_LOOKUP));
-
-  if (PL_DHASH_ENTRY_IS_FREE(e))
-    return NS_OK;
-
-  ProxyList* item = e->list;
-  while (item != nsnull && *aResult == nsnull) {
-    if (item->iid.Equals(aIID)) {
-      jobject referentObj = env->CallObjectMethod(item->javaObject,
-                                                  getReferentMID);
-      if (!env->IsSameObject(referentObj, NULL)) {
-        *aResult = referentObj;
-#ifdef DEBUG_JAVAXPCOM
-        char* iid_str = aIID.ToString();
-        LOG(("< NativeToJavaProxyMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-             (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                                 *aResult),
-             (PRUint32) aNativeObject, iid_str));
-        NS_Free(iid_str);
-#endif
-      }
-    }
-    item = item->next;
-  }
-
-  return NS_OK;
-}
-
-nsresult
-NativeToJavaProxyMap::Remove(JNIEnv* env, nsISupports* aNativeObject,
-                             const nsIID& aIID)
-{
-  // This is only called from finalizeProxy(), which already holds the lock.
-  //  nsAutoLock lock(gJavaXPCOMLock);
-
-  Entry* e = static_cast<Entry*>(PL_DHashTableOperate(mHashTable,
-                                                         aNativeObject,
-                                                         PL_DHASH_LOOKUP));
-
-  if (PL_DHASH_ENTRY_IS_FREE(e)) {
-    NS_WARNING("XPCOM object not found in hash table");
-    return NS_ERROR_FAILURE;
-  }
-
-  ProxyList* item = e->list;
-  ProxyList* last = e->list;
-  while (item != nsnull) {
-    if (item->iid.Equals(aIID)) {
-#ifdef DEBUG_JAVAXPCOM
-      char* iid_str = aIID.ToString();
-      LOG(("- NativeToJavaProxyMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-           (PRUint32) env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                               item->javaObject),
-           (PRUint32) aNativeObject, iid_str));
-      NS_Free(iid_str);
-#endif
-
-      env->CallVoidMethod(item->javaObject, clearReferentMID);
-      env->DeleteGlobalRef(item->javaObject);
-      if (item == e->list) {
-        e->list = item->next;
-        if (e->list == nsnull)
-          PL_DHashTableOperate(mHashTable, aNativeObject, PL_DHASH_REMOVE);
-      } else {
-        last->next = item->next;
-      }
-
-      delete item;
-      return NS_OK;
-    }
-
-    last = item;
-    item = item->next;
-  }
-
-  NS_WARNING("Java proxy matching given IID not found");
-  return NS_ERROR_FAILURE;
-}
-
-nsresult
-JavaToXPTCStubMap::Init()
-{
-  mHashTable = PL_NewDHashTable(PL_DHashGetStubOps(), nsnull,
-                                sizeof(Entry), 16);
-  if (!mHashTable)
-    return NS_ERROR_OUT_OF_MEMORY;
-  return NS_OK;
-}
-
-
-PLDHashOperator
-DestroyXPTCMappingEnum(PLDHashTable* aTable, PLDHashEntryHdr* aHeader,
-                       PRUint32 aNumber, void* aData)
-{
-  JavaToXPTCStubMap::Entry* entry =
-                             static_cast<JavaToXPTCStubMap::Entry*>(aHeader);
-
-  // The XPTC stub will be released by the XPCOM side, if it hasn't been
-  // already.  We just need to delete the Java global ref held by the XPTC stub,
-  // so the Java garbage collector can handle the Java object when necessary.
-  entry->xptcstub->DeleteStrongRef();
-
-  return PL_DHASH_REMOVE;
-}
-
-nsresult
-JavaToXPTCStubMap::Destroy()
-{
-  // This is only called from FreeGlobals(), which already holds the lock.
-  //  nsAutoLock lock(gJavaXPCOMLock);
-
-  PL_DHashTableEnumerate(mHashTable, DestroyXPTCMappingEnum, nsnull);
-  PL_DHashTableDestroy(mHashTable);
-  mHashTable = nsnull;
-
-  return NS_OK;
-}
-
-nsresult
-JavaToXPTCStubMap::Add(jint aJavaObjectHashCode, nsJavaXPTCStub* aProxy)
-{
-  nsAutoLock lock(gJavaXPCOMLock);
-
-  Entry* e = static_cast<Entry*>
-                        (PL_DHashTableOperate(mHashTable,
-                                           NS_INT32_TO_PTR(aJavaObjectHashCode),
-                                           PL_DHASH_ADD));
-  if (!e)
-    return NS_ERROR_FAILURE;
-
-  NS_ASSERTION(e->key == nsnull,
-               "XPTCStub for given Java object already exists in hash table");
-  e->key = aJavaObjectHashCode;
-  e->xptcstub = aProxy;
-
-#ifdef DEBUG_JAVAXPCOM
-  nsIInterfaceInfo* iface_info;
-  aProxy->GetInterfaceInfo(&iface_info);
-  nsIID* iid;
-  iface_info->GetInterfaceIID(&iid);
-  char* iid_str = iid->ToString();
-  LOG(("+ JavaToXPTCStubMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-       (PRUint32) aJavaObjectHashCode, (PRUint32) aProxy, iid_str));
-  NS_Free(iid_str);
-  nsMemory::Free(iid);
-  NS_RELEASE(iface_info);
-#endif
-  return NS_OK;
-}
-
-nsresult
-JavaToXPTCStubMap::Find(jint aJavaObjectHashCode, const nsIID& aIID,
-                        nsJavaXPTCStub** aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_FAILURE;
-
-  nsAutoLock lock(gJavaXPCOMLock);
-
-  *aResult = nsnull;
-  Entry* e = static_cast<Entry*>
-                        (PL_DHashTableOperate(mHashTable,
-                                           NS_INT32_TO_PTR(aJavaObjectHashCode),
-                                           PL_DHASH_LOOKUP));
-
-  if (PL_DHASH_ENTRY_IS_FREE(e))
-    return NS_OK;
-
-  nsresult rv = e->xptcstub->QueryInterface(aIID, (void**) aResult);
-
-#ifdef DEBUG_JAVAXPCOM
-  if (NS_SUCCEEDED(rv)) {
-    char* iid_str = aIID.ToString();
-    LOG(("< JavaToXPTCStubMap (Java=%08x | XPCOM=%08x | IID=%s)\n",
-         (PRUint32) aJavaObjectHashCode, (PRUint32) *aResult, iid_str));
-    PR_Free(iid_str);
-  }
-#endif
-
-  // NS_NOINTERFACE is not an error condition
-  if (rv == NS_NOINTERFACE)
-    rv = NS_OK;
-  return rv;
-}
-
-nsresult
-JavaToXPTCStubMap::Remove(jint aJavaObjectHashCode)
-{
-  PL_DHashTableOperate(mHashTable, NS_INT32_TO_PTR(aJavaObjectHashCode),
-                       PL_DHASH_REMOVE);
-
-#ifdef DEBUG_JAVAXPCOM
-  LOG(("- JavaToXPTCStubMap (Java=%08x)\n", (PRUint32) aJavaObjectHashCode));
-#endif
-
-  return NS_OK;
-}
-
-
-/**********************************************************
- *    JavaXPCOMInstance
- *********************************************************/
-JavaXPCOMInstance::JavaXPCOMInstance(nsISupports* aInstance,
-                                     nsIInterfaceInfo* aIInfo)
-    : mInstance(aInstance)
-    , mIInfo(aIInfo)
-{
-  NS_ADDREF(mInstance);
-  NS_ADDREF(mIInfo);
-}
-
-JavaXPCOMInstance::~JavaXPCOMInstance()
-{
-  nsresult rv = NS_OK;
-
-  // Need to release these objects on the main thread.
-  nsCOMPtr<nsIThread> thread = do_GetMainThread();
-  if (thread) {
-    rv = NS_ProxyRelease(thread, mInstance);
-    rv |= NS_ProxyRelease(thread, mIInfo);
-  }
-  NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to release using NS_ProxyRelease");
-}
-
-
-/*******************************
- *  Helper functions
- *******************************/
-
-nsresult
-NativeInterfaceToJavaObject(JNIEnv* env, nsISupports* aXPCOMObject,
-                            const nsIID& aIID, jobject aObjectLoader,
-                            jobject* aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_NULL_POINTER;
-
-  // If the object is an nsJavaXPTCStub, then get the Java object directly
-  nsJavaXPTCStub* stub = nsnull;
-  aXPCOMObject->QueryInterface(NS_GET_IID(nsJavaXPTCStub), (void**) &stub);
-  if (stub) {
-    *aResult = stub->GetJavaObject();
-    NS_ASSERTION(*aResult != nsnull, "nsJavaXPTCStub w/o matching Java object");
-    NS_RELEASE(stub);
-    return NS_OK;
-  }
-
-  // ... else, get a Java wrapper for the native object
-  return GetNewOrUsedJavaWrapper(env, aXPCOMObject, aIID, aObjectLoader,
-                                 aResult);
-}
-
-nsresult
-JavaObjectToNativeInterface(JNIEnv* env, jobject aJavaObject, const nsIID& aIID,
-                            void** aResult)
-{
-  NS_PRECONDITION(aResult != nsnull, "null ptr");
-  if (!aResult)
-    return NS_ERROR_NULL_POINTER;
-
-  nsresult rv;
-  *aResult = nsnull;
-
-  // If the given Java object is one of our Java proxies, then query the
-  // associated XPCOM object directly from the proxy.
-  jboolean isProxy = env->CallStaticBooleanMethod(xpcomJavaProxyClass,
-                                                  isXPCOMJavaProxyMID,
-                                                  aJavaObject);
-  if (env->ExceptionCheck())
-    return NS_ERROR_FAILURE;
-
-  if (isProxy) {
-    void* inst;
-    rv = GetXPCOMInstFromProxy(env, aJavaObject, &inst);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    nsISupports* rootObject =
-              static_cast<JavaXPCOMInstance*>(inst)->GetInstance();
-    rv = rootObject->QueryInterface(aIID, aResult);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    return NS_OK;
-  }
-
-  // ... else, we get an nsJavaXPTCStub
-  return nsJavaXPTCStub::GetNewOrUsed(env, aJavaObject, aIID, aResult);
-}
-
-nsresult
-GetIIDForMethodParam(nsIInterfaceInfo *iinfo,
-                     const XPTMethodDescriptor *methodInfo,
-                     const nsXPTParamInfo &paramInfo, PRUint8 paramType,
-                     PRUint16 methodIndex, nsXPTCMiniVariant *dispatchParams,
-                     PRBool isFullVariantArray, nsID &result)
-{
-  nsresult rv;
-
-  switch (paramType)
-  {
-    case nsXPTType::T_INTERFACE:
-      rv = iinfo->GetIIDForParamNoAlloc(methodIndex, &paramInfo, &result);
-      break;
-
-    case nsXPTType::T_INTERFACE_IS:
-    {
-      PRUint8 argnum;
-      rv = iinfo->GetInterfaceIsArgNumberForParam(methodIndex, &paramInfo,
-                                                  &argnum);
-      if (NS_FAILED(rv))
-        break;
-
-      const nsXPTParamInfo& arg_param = methodInfo->params[argnum];
-      const nsXPTType& arg_type = arg_param.GetType();
-
-      // The xpidl compiler ensures this. We reaffirm it for safety.
-      if (!arg_type.IsPointer() || arg_type.TagPart() != nsXPTType::T_IID) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      nsID *p = nsnull;
-      if (isFullVariantArray) {
-        p = (nsID *) ((nsXPTCVariant*) dispatchParams)[argnum].val.p;
-      } else {
-        p = (nsID *) dispatchParams[argnum].val.p;
-      }
-      if (!p)
-        return NS_ERROR_UNEXPECTED;
-
-      result = *p;
-      break;
-    }
-
-    default:
-      rv = NS_ERROR_UNEXPECTED;
-  }
-  return rv;
-}
-
-
-/*******************************
- *  JNI helper functions
- *******************************/
-
-JNIEnv*
-GetJNIEnv()
-{
-  JNIEnv* env;
-  jint rc = gCachedJVM->GetEnv((void**) &env, JNI_VERSION_1_2);
-  NS_ASSERTION(rc == JNI_OK && env != nsnull,
-               "Current thread not attached to given JVM instance");
-  return env;
-}
-
-void
-ThrowException(JNIEnv* env, const nsresult aErrorCode, const char* aMessage)
-{
-  // Only throw this exception if one hasn't already been thrown, so we don't
-  // mask a previous exception/error.
-  if (env->ExceptionCheck())
-    return;
-
-  // If the error code we get is for an Out Of Memory error, try to throw an
-  // OutOfMemoryError.  The JVM may have enough memory to create this error.
-  if (aErrorCode == NS_ERROR_OUT_OF_MEMORY) {
-    jclass clazz = env->FindClass("java/lang/OutOfMemoryError");
-    if (clazz) {
-      env->ThrowNew(clazz, aMessage);
-    }
-    env->DeleteLocalRef(clazz);
-    return;
-  }
-
-  // If the error was not handled above, then create an XPCOMException with the
-  // given error code and message.
-
-  // Create parameters and method signature. Max of 2 params.  The error code
-  // comes before the message string.
-  PRInt64 errorCode = aErrorCode ? aErrorCode : NS_ERROR_FAILURE;
-  nsCAutoString methodSig("(J");
-  jstring message = nsnull;
-  if (aMessage) {
-    message = env->NewStringUTF(aMessage);
-    if (!message) {
-      return;
-    }
-    methodSig.AppendLiteral("Ljava/lang/String;");
-  }
-  methodSig.AppendLiteral(")V");
-
-  // In some instances (such as in shutdownXPCOM() and termEmbedding()), we
-  // will need to throw an exception when JavaXPCOM has already been
-  // terminated.  In such a case, 'xpcomExceptionClass' will be null.  So we
-  // reset it temporarily in order to throw the appropriate exception.
-  if (xpcomExceptionClass == nsnull) {
-    xpcomExceptionClass = env->FindClass("org/mozilla/xpcom/XPCOMException");
-    if (!xpcomExceptionClass) {
-      return;
-    }
-  }
-
-  // create exception object
-  jthrowable throwObj = nsnull;
-  jmethodID mid = env->GetMethodID(xpcomExceptionClass, "<init>",
-                                   methodSig.get());
-  if (mid) {
-    throwObj = (jthrowable) env->NewObject(xpcomExceptionClass, mid, errorCode,
-                                           message);
-  }
-  NS_ASSERTION(throwObj, "Failed to create XPCOMException object");
-
-  // throw exception
-  if (throwObj) {
-    env->Throw(throwObj);
-  }
-}
-
-nsAString*
-jstring_to_nsAString(JNIEnv* env, jstring aString)
-{
-  const PRUnichar* buf = nsnull;
-  if (aString) {
-    buf = env->GetStringChars(aString, nsnull);
-    if (!buf)
-      return nsnull;  // exception already thrown
-  }
-
-  nsString* str = new nsString(buf);
-
-  if (aString) {
-    env->ReleaseStringChars(aString, buf);
-  } else {
-    str->SetIsVoid(PR_TRUE);
-  }
-
-  // returns string, or nsnull if 'new' failed
-  return str;
-}
-
-nsACString*
-jstring_to_nsACString(JNIEnv* env, jstring aString)
-{
-  const char* buf = nsnull;
-  if (aString) {
-    buf = env->GetStringUTFChars(aString, nsnull);
-    if (!buf)
-      return nsnull;  // exception already thrown
-  }
-
-  nsCString* str = new nsCString(buf);
-
-  if (aString) {
-    env->ReleaseStringUTFChars(aString, buf);
-  } else {
-    str->SetIsVoid(PR_TRUE);
-  }
-
-  // returns string, or nsnull if 'new' failed
-  return str;
-}
-
-nsresult
-File_to_nsILocalFile(JNIEnv* env, jobject aFile, nsILocalFile** aLocalFile)
-{
-  nsresult rv = NS_ERROR_FAILURE;
-  jstring pathName = nsnull;
-  jclass clazz = env->FindClass("java/io/File");
-  if (clazz) {
-    jmethodID pathMID = env->GetMethodID(clazz, "getCanonicalPath",
-                                         "()Ljava/lang/String;");
-    if (pathMID) {
-      pathName = (jstring) env->CallObjectMethod(aFile, pathMID);
-      if (pathName != nsnull && !env->ExceptionCheck())
-        rv = NS_OK;
-    }
-  }
-
-  if (NS_SUCCEEDED(rv)) {
-    nsAString* path = jstring_to_nsAString(env, pathName);
-    if (!path)
-      rv = NS_ERROR_OUT_OF_MEMORY;
-
-    if (NS_SUCCEEDED(rv)) {
-      rv = NS_NewLocalFile(*path, false, aLocalFile);
-      delete path;
-    }
-  }
-
-  return rv;
-}
-
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaXPCOMBindingUtils.h
+++ /dev/null
@@ -1,391 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef _nsJavaXPCOMBindingUtils_h_
-#define _nsJavaXPCOMBindingUtils_h_
-
-#include "jni.h"
-#include "xptcall.h"
-#include "nsCOMPtr.h"
-#include "nsString.h"
-#include "pldhash.h"
-#include "nsJavaXPTCStub.h"
-#include "nsAutoLock.h"
-#include "nsTHashtable.h"
-#include "nsHashKeys.h"
-
-//#define DEBUG_JAVAXPCOM
-//#define DEBUG_JAVAXPCOM_REFCNT
-
-#ifdef DEBUG_JAVAXPCOM
-#define LOG(x)  printf x
-#else
-#define LOG(x)  /* nothing */
-#endif
-
-
-/*********************
- * Java JNI globals
- *********************/
-
-extern jclass systemClass;
-extern jclass booleanClass;
-extern jclass charClass;
-extern jclass byteClass;
-extern jclass shortClass;
-extern jclass intClass;
-extern jclass longClass;
-extern jclass floatClass;
-extern jclass doubleClass;
-extern jclass stringClass;
-extern jclass nsISupportsClass;
-extern jclass xpcomExceptionClass;
-extern jclass xpcomJavaProxyClass;
-extern jclass weakReferenceClass;
-extern jclass javaXPCOMUtilsClass;
-
-extern jmethodID hashCodeMID;
-extern jmethodID booleanValueMID;
-extern jmethodID booleanInitMID;
-extern jmethodID charValueMID;
-extern jmethodID charInitMID;
-extern jmethodID byteValueMID;
-extern jmethodID byteInitMID;
-extern jmethodID shortValueMID;
-extern jmethodID shortInitMID;
-extern jmethodID intValueMID;
-extern jmethodID intInitMID;
-extern jmethodID longValueMID;
-extern jmethodID longInitMID;
-extern jmethodID floatValueMID;
-extern jmethodID floatInitMID;
-extern jmethodID doubleValueMID;
-extern jmethodID doubleInitMID;
-extern jmethodID createProxyMID;
-extern jmethodID isXPCOMJavaProxyMID;
-extern jmethodID getNativeXPCOMInstMID;
-extern jmethodID weakReferenceConstructorMID;
-extern jmethodID getReferentMID;
-extern jmethodID clearReferentMID;
-extern jmethodID findClassInLoaderMID;
-
-#ifdef DEBUG_JAVAXPCOM
-extern jmethodID getNameMID;
-extern jmethodID proxyToStringMID;
-#endif
-
-class NativeToJavaProxyMap;
-extern NativeToJavaProxyMap* gNativeToJavaProxyMap;
-class JavaToXPTCStubMap;
-extern JavaToXPTCStubMap* gJavaToXPTCStubMap;
-
-extern nsTHashtable<nsDepCharHashKey>* gJavaKeywords;
-
-// The Java garbage collector runs in a separate thread.  Since it calls the
-// finalizeProxy() function in nsJavaWrapper.cpp, we need to make sure that
-// all the structures touched by finalizeProxy() are multithread aware.
-extern PRLock* gJavaXPCOMLock;
-
-extern PRBool gJavaXPCOMInitialized;
-
-/**
- * Initialize global structures used by JavaXPCOM.
- * @param env   Java environment pointer
- * @return PR_TRUE if JavaXPCOM is initialized; PR_FALSE if an error occurred
- */
-PRBool InitializeJavaGlobals(JNIEnv *env);
-
-/**
- * Frees global structures that were allocated by InitializeJavaGlobals().
- * @param env   Java environment pointer
- */
-void FreeJavaGlobals(JNIEnv* env);
-
-
-/*************************
- *  JavaXPCOMInstance
- *************************/
-
-class JavaXPCOMInstance
-{
-public:
-  JavaXPCOMInstance(nsISupports* aInstance, nsIInterfaceInfo* aIInfo);
-  ~JavaXPCOMInstance();
-
-  nsISupports* GetInstance()  { return mInstance; }
-  nsIInterfaceInfo* InterfaceInfo() { return mIInfo; }
-
-private:
-  nsISupports*        mInstance;
-  nsIInterfaceInfo*   mIInfo;
-};
-
-
-/**************************************
- *  Java<->XPCOM object mappings
- **************************************/
-
-/**
- * Maps native XPCOM objects to their associated Java proxy object.
- */
-class NativeToJavaProxyMap
-{
-  friend PLDHashOperator DestroyJavaProxyMappingEnum(PLDHashTable* aTable,
-                                                     PLDHashEntryHdr* aHeader,
-                                                     PRUint32 aNumber,
-                                                     void* aData);
-
-protected:
-  struct ProxyList
-  {
-    ProxyList(const jobject aRef, const nsIID& aIID, ProxyList* aList)
-      : javaObject(aRef)
-      , iid(aIID)
-      , next(aList)
-    { }
-
-    const jobject   javaObject;
-    const nsIID     iid;
-    ProxyList*      next;
-  };
-
-  struct Entry : public PLDHashEntryHdr
-  {
-    nsISupports*  key;
-    ProxyList*    list;
-  };
-
-public:
-  NativeToJavaProxyMap()
-    : mHashTable(nsnull)
-  { }
-
-  ~NativeToJavaProxyMap()
-  {
-    NS_ASSERTION(mHashTable == nsnull,
-                 "MUST call Destroy() before deleting object");
-  }
-
-  nsresult Init();
-
-  nsresult Destroy(JNIEnv* env);
-
-  nsresult Add(JNIEnv* env, nsISupports* aXPCOMObject, const nsIID& aIID,
-               jobject aProxy);
-
-  nsresult Find(JNIEnv* env, nsISupports* aNativeObject, const nsIID& aIID,
-                jobject* aResult);
-
-  nsresult Remove(JNIEnv* env, nsISupports* aNativeObject, const nsIID& aIID);
-
-protected:
-  PLDHashTable* mHashTable;
-};
-
-/**
- * Maps Java objects to their associated nsJavaXPTCStub.
- */
-class JavaToXPTCStubMap
-{
-  friend PLDHashOperator DestroyXPTCMappingEnum(PLDHashTable* aTable,
-                                                PLDHashEntryHdr* aHeader,
-                                                PRUint32 aNumber, void* aData);
-
-protected:
-  struct Entry : public PLDHashEntryHdr
-  {
-    jint              key;
-    nsJavaXPTCStub*   xptcstub;
-  };
-
-public:
-  JavaToXPTCStubMap()
-    : mHashTable(nsnull)
-  { }
-
-  ~JavaToXPTCStubMap()
-  {
-    NS_ASSERTION(mHashTable == nsnull,
-                 "MUST call Destroy() before deleting object");
-  }
-
-  nsresult Init();
-
-  nsresult Destroy();
-
-  nsresult Add(jint aJavaObjectHashCode, nsJavaXPTCStub* aProxy);
-
-  nsresult Find(jint aJavaObjectHashCode, const nsIID& aIID,
-                nsJavaXPTCStub** aResult);
-
-  nsresult Remove(jint aJavaObjectHashCode);
-
-protected:
-  PLDHashTable* mHashTable;
-};
-
-
-/*******************************
- *  Helper functions
- *******************************/
-
-/**
- * Convert a native nsISupports to a Java object.
- *
- * @param env           Java environment pointer
- * @param aXPCOMObject  XPCOM object for which to find/create Java object
- * @param aIID          desired interface IID for Java object
- * @param aObjectLoader Java object whose class loader we use for finding
- *                      classes; can be null
- * @param aResult       on success, holds reference to Java object
- *
- * @return  NS_OK if succeeded; all other return values are error codes.
- */
-nsresult NativeInterfaceToJavaObject(JNIEnv* env, nsISupports* aXPCOMObject,
-                                     const nsIID& aIID, jobject aObjectLoader,
-                                     jobject* aResult);
-
-/**
- * Convert a Java object to a native nsISupports object.
- *
- * @param env           Java environment pointer
- * @param aJavaObject   Java object for which to find/create XPCOM object
- * @param aIID          desired interface IID for XPCOM object
- * @param aResult       on success, holds AddRef'd reference to XPCOM object
- *
- * @return  NS_OK if succeeded; all other return values are error codes.
- */
-nsresult JavaObjectToNativeInterface(JNIEnv* env, jobject aJavaObject,
-                                     const nsIID& aIID, void** aResult);
-
-nsresult GetIIDForMethodParam(nsIInterfaceInfo *iinfo,
-                              const XPTMethodDescriptor *methodInfo,
-                              const nsXPTParamInfo &paramInfo,
-                              PRUint8 paramType, PRUint16 methodIndex,
-                              nsXPTCMiniVariant *dispatchParams,
-                              PRBool isFullVariantArray,
-                              nsID &result);
-
-/**
- * Returns the Class object associated with the class or interface with the
- * given string name, using the class loader of the given object.
- *
- * @param env           Java environment pointer
- * @param aObjectLoader Java object whose class loader is used to load class
- * @param aClassName    fully qualified name of class to load
- *
- * @return java.lang.Class object of requested Class; NULL if the class
- *         wasn't found
- *
- * @see http://java.sun.com/j2se/1.3/docs/guide/jni/jni-12.html#classops
- */
-inline jclass
-FindClassInLoader(JNIEnv* env, jobject aObjectLoader, const char* aClassName)
-{
-  jclass clazz = nsnull;
-  jstring name = env->NewStringUTF(aClassName);
-  if (name)
-    clazz = (jclass) env->CallStaticObjectMethod(javaXPCOMUtilsClass,
-                                  findClassInLoaderMID, aObjectLoader, name);
-
-#ifdef DEBUG
-  if (!clazz)
-    fprintf(stderr, "WARNING: failed to find class [%s]\n", aClassName);
-#endif
-  return clazz;
-}
-
-
-/*******************************
- *  JNI helper functions
- *******************************/
-
-/**
- * Returns a pointer to the appropriate JNIEnv structure.  This function is
- * useful in callbacks or other functions that are not called directly from
- * Java and therefore do not have the JNIEnv structure passed in.
- *
- * @return  pointer to JNIEnv structure for current thread
- */
-JNIEnv* GetJNIEnv();
-
-/**
- * Constructs and throws an exception.  Some error codes (such as
- * NS_ERROR_OUT_OF_MEMORY) are handled by the appropriate Java exception/error.
- * Otherwise, an instance of XPCOMException is created with the given error
- * code and message.
- *
- * @param env         Java environment pointer
- * @param aErrorCode  The error code returned by an XPCOM/Gecko function. Pass
- *                    zero for the default behaviour.
- * @param aMessage    A string that provides details for throwing this
- *                    exception. Pass in <code>nsnull</code> for the default
- *                    behaviour.
- *
- * @throws OutOfMemoryError if aErrorCode == NS_ERROR_OUT_OF_MEMORY
- *         XPCOMException   for all other error codes
- */
-void ThrowException(JNIEnv* env, const nsresult aErrorCode,
-                    const char* aMessage);
-
-/**
- * Helper functions for converting from java.lang.String to
- * nsAString/nsACstring.  Caller must delete nsAString/nsACString.
- *
- * @param env       Java environment pointer
- * @param aString   Java string to convert
- *
- * @return  nsAString/nsACString with same content as given Java string;
- *          a 'void' nsAString/nsACString object if aString is
- *          <code>null</code>; or <code>nsnull</code> if out of memory
- */
-nsAString* jstring_to_nsAString(JNIEnv* env, jstring aString);
-nsACString* jstring_to_nsACString(JNIEnv* env, jstring aString);
-
-/**
- * Helper function for converting from java.io.File to nsILocalFile.
- *
- * @param env         Java environment pointer
- * @param aFile       Java File to convert
- * @param aLocalFile  returns the converted nsILocalFile
- *
- * @return  NS_OK for success; other values indicate error in conversion
- */
-nsresult File_to_nsILocalFile(JNIEnv* env, jobject aFile,
-                              nsILocalFile** aLocalFile);
-
-#endif // _nsJavaXPCOMBindingUtils_h_
deleted file mode 100644
--- a/extensions/java/xpcom/src/nsJavaXPTCStub.cpp
+++ /dev/null
@@ -1,1711 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (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.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Java XPCOM Bindings.
- *
- * The Initial Developer of the Original Code is
- * IBM Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2005
- * IBM Corporation. All Rights Reserved.
- *
- * Contributor(s):
- *   Javier Pedemonte (jhpedemonte@gmail.com)
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "nsJavaXPTCStub.h"
-#include "nsJavaWrapper.h"
-#include "nsJavaXPCOMBindingUtils.h"
-#include "prmem.h"
-#include "nsIInterfaceInfoManager.h"
-#include "nsString.h"
-#include "nsString.h"
-#include "nsCRT.h"
-#include "nsServiceManagerUtils.h"
-
-
-nsJavaXPTCStub::nsJavaXPTCStub(jobject aJavaObject, nsIInterfaceInfo *aIInfo,
-                               nsresult *rv)
-  : mJavaStrongRef(nsnull)
-  , mIInfo(aIInfo)
-  , mMaster(nsnull)
-  , mWeakRefCnt(0)
-{
-  const nsIID *iid = nsnull;
-  aIInfo->GetIIDShared(&iid);
-  NS_ASSERTION(iid, "GetIIDShared must not fail!");
-
-  *rv = InitStub(*iid);
-  if (NS_FAILED(*rv))
-    return;
-
-  JNIEnv* env = GetJNIEnv();
-  jobject weakref = env->NewObject(weakReferenceClass,
-                                   weakReferenceConstructorMID, aJavaObject);
-  mJavaWeakRef = env->NewGlobalRef(weakref);
-  mJavaRefHashCode = env->CallStaticIntMethod(systemClass, hashCodeMID,
-                                              aJavaObject);
-
-#ifdef DEBUG_JAVAXPCOM
-  char* iid_str = iid->ToString();
-  LOG(("+ nsJavaXPTCStub (Java=%08x | XPCOM=%08x | IID=%s)\n",
-      (PRUint32) mJavaRefHashCode, (PRUint32) this, iid_str));
-  NS_Free(iid_str);
-#endif
-}
-
-nsJavaXPTCStub::~nsJavaXPTCStub()
-{
-}
-
-NS_IMETHODIMP_(nsrefcnt)
-nsJavaXPTCStub::AddRefInternal()
-{
-  // If this is the first AddRef call, we create a strong global ref to the
-  // Java object to keep it from being garbage collected.
-  if (mRefCnt == 0) {
-    JNIEnv* env = GetJNIEnv();
-    jobject referent = env->CallObjectMethod(mJavaWeakRef, getReferentMID);
-    if (!env->IsSameObject(referent, NULL)) {
-      mJavaStrongRef = env->NewGlobalRef(referent);
-    }
-    NS_ASSERTION(mJavaStrongRef != nsnull, "Failed to acquire strong ref");
-  }
-
-  // if this is the master interface
-  NS_PRECONDITION(PRInt32(mRefCnt) >= 0, "illegal refcnt");
-  NS_ASSERT_OWNINGTHREAD(nsJavaXPTCStub);
-  ++mRefCnt;
-  NS_LOG_ADDREF(this, mRefCnt, "nsJavaXPTCStub", sizeof(*this));
-  return mRefCnt;
-}
-
-NS_IMETHODIMP_(nsrefcnt)
-nsJavaXPTCStub::AddRef()
-{
-#ifdef DEBUG_JAVAXPCOM_REFCNT
-  nsIID* iid;
-  mIInfo->GetInterfaceIID(&iid);
-  char* iid_str = iid->ToString();
-  int refcnt = PRInt32(mMaster ? mMaster->mRefCnt : mRefCnt) + 1;
-  LOG(("= nsJavaXPTCStub::AddRef (XPCOM=%08x | refcnt = %d | IID=%s)\n",
-       (int) this, refcnt, iid_str));
-  NS_Free(iid_str);
-  nsMemory::Free(iid);
-#endif
-
-  nsJavaXPTCStub* master = mMaster ? mMaster : this;
-  return master->AddRefInternal();
-}
-
-NS_IMETHODIMP_(nsrefcnt)
-nsJavaXPTCStub::ReleaseInternal()
-{
-  NS_PRECONDITION(0 != mRefCnt, "dup release");
-  NS_ASSERT_OWNINGTHREAD(nsJavaXPTCStub);
-  --mRefCnt;
-  NS_LOG_RELEASE(this, mRefCnt, "nsJavaXPTCStub");
-  if (mRefCnt == 0) {
-    // delete strong ref; allows Java object to be garbage collected
-    DeleteStrongRef();
-
-    // If we have a weak ref, we don't delete this object.
-    if (mWeakRefCnt == 0) {
-      mRefCnt = 1; /* stabilize */
-      Destroy();
-      delete this;
-    }
-    return 0;
-  }
-  return mRefCnt;
-}
-
-NS_IMETHODIMP_(nsrefcnt)
-nsJavaXPTCStub::Release()
-{
-#ifdef DEBUG_JAVAXPCOM_REFCNT
-  nsIID* iid;
-  mIInfo->GetInterfaceIID(&iid);
-  char* iid_str = iid->ToString();
-  int refcnt = PRInt32(mMaster ? mMaster->mRefCnt : mRefCnt) - 1;
-  LOG(("= nsJavaXPTCStub::Release (XPCOM=%08x | refcnt = %d | IID=%s)\n",
-       (int) this, refcnt, iid_str));
-  NS_Free(iid_str);
-  nsMemory::Free(iid);
-#endif
-
-  nsJavaXPTCStub* master = mMaster ? mMaster : this;
-  return master->ReleaseInternal();
-}
-
-void
-nsJavaXPTCStub::Destroy()
-{
-  JNIEnv* env = GetJNIEnv();
-
-#ifdef DEBUG_JAVAXPCOM
-  nsIID* iid;
-  mIInfo->GetInterfaceIID(&iid);
-  char* iid_str = iid->ToString();
-  LOG(("- nsJavaXPTCStub (Java=%08x | XPCOM=%08x | IID=%s)\n",
-      (PRUint32) mJavaRefHashCode, (PRUint32) this, iid_str));
-  NS_Free(iid_str);
-  nsMemory::Free(iid);
-#endif
-
-  if (!mMaster) {
-    // delete each child stub
-    for (PRInt32 i = 0; i < mChildren.Count(); i++) {
-      delete (nsJavaXPTCStub*) mChildren[i];
-    }
-
-    // Since we are destroying this stub, also remove the mapping.
-    // It is possible for mJavaStrongRef to be NULL here.  That is why we
-    // store the hash code value earlier.
-    if (gJavaXPCOMInitialized) {
-      gJavaToXPTCStubMap->Remove(mJavaRefHashCode);
-    }
-  }
-
-  env->CallVoidMethod(mJavaWeakRef, clearReferentMID);
-  env->DeleteGlobalRef(mJavaWeakRef);
-}
-
-void
-nsJavaXPTCStub::ReleaseWeakRef()
-{
-  // if this is a child
-  if (mMaster)
-    mMaster->ReleaseWeakRef();
-
-  --mWeakRefCnt;
-
-  // If there are no more associated weak refs, and no one else holds a strong
-  // ref to this object, then delete it.
-  if (mWeakRefCnt == 0 && mRefCnt == 0) {
-    NS_ASSERT_OWNINGTHREAD(nsJavaXPTCStub);
-    mRefCnt = 1; /* stabilize */
-    Destroy();
-    delete this;
-  }
-}
-
-void
-nsJavaXPTCStub::DeleteStrongRef()
-{
-  if (mJavaStrongRef == nsnull)
-    return;
-
-  GetJNIEnv()->DeleteGlobalRef(mJavaStrongRef);
-  mJavaStrongRef = nsnull;
-}
-
-NS_IMETHODIMP
-nsJavaXPTCStub::QueryInterface(const nsID &aIID, void **aInstancePtr)
-{
-  nsresult rv;
-
-  LOG(("JavaStub::QueryInterface()\n"));
-  *aInstancePtr = nsnull;
-  nsJavaXPTCStub *master = mMaster ? mMaster : this;
-
-  // This helps us differentiate between the help classes.
-  if (aIID.Equals(NS_GET_IID(nsJavaXPTCStub)))
-  {
-    *aInstancePtr = master;
-    NS_ADDREF(this);
-    return NS_OK;
-  }
-
-  // always return the master stub for nsISupports
-  if (aIID.Equals(NS_GET_IID(nsISupports)))
-  {
-    *aInstancePtr = master->mXPTCStub;
-    NS_ADDREF(master);
-    return NS_OK;
-  }
-
-  // All Java objects support weak references
-  if (aIID.Equals(NS_GET_IID(nsISupportsWeakReference)))
-  {
-    *aInstancePtr = static_cast<nsISupportsWeakReference*>(master);
-    NS_ADDREF(master);
-    return NS_OK;
-  }
-
-  // does any existing stub support the requested IID?
-  nsJavaXPTCStub *stub = master->FindStubSupportingIID(aIID);
-  if (stub)
-  {
-    *aInstancePtr = stub->mXPTCStub;
-    NS_ADDREF(stub);
-    return NS_OK;
-  }
-
-  JNIEnv* env = GetJNIEnv();
-
-  // Query Java object
-  LOG(("\tCalling Java object queryInterface\n"));
-  jobject javaObject = env->CallObjectMethod(mJavaWeakRef, getReferentMID);
-
-  jmethodID qiMID = 0;
-  jclass clazz = env->GetObjectClass(javaObject);
-  if (clazz) {
-    char* sig = "(Ljava/lang/String;)Lorg/mozilla/interfaces/nsISupports;";
-    qiMID = env->GetMethodID(clazz, "queryInterface", sig);
-    NS_ASSERTION(qiMID, "Failed to get queryInterface method ID");
-  }
-
-  if (qiMID == 0) {
-    env->ExceptionClear();
-    return NS_NOINTERFACE;
-  }
-
-  // construct IID string
-  jstring iid_jstr = nsnull;
-  char* iid_str = aIID.ToString();
-  if (iid_str) {
-    iid_jstr = env->NewStringUTF(iid_str);
-  }
-  if (!iid_str || !iid_jstr) {
-    env->ExceptionClear();
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-  NS_Free(iid_str);
-
-  // call queryInterface method
-  jobject obj = env->CallObjectMethod(javaObject, qiMID, iid_jstr);
-  if (env->ExceptionCheck()) {
-    env->ExceptionClear();
-    return NS_ERROR_FAILURE;
-  }
-  if (!obj)
-    return NS_NOINTERFACE;
-
-  // Get interface info for new java object
-  nsCOMPtr<nsIInterfaceInfoManager>
-    iim(do_GetService(NS_INTERFACEINFOMANAGER_SERVICE_CONTRACTID, &rv));
-  NS_ENSURE_SUCCESS(rv, rv);
-
-  nsCOMPtr<nsIInterfaceInfo> iinfo;
-  rv = iim->GetInfoForIID(&aIID, getter_AddRefs(iinfo));
-  if (NS_FAILED(rv))
-    return rv;
-
-  stub = new nsJavaXPTCStub(obj, iinfo, &rv);
-  if (!stub)
-    return NS_ERROR_OUT_OF_MEMORY;
-
-  if (NS_FAILED(rv)) {
-    delete stub;
-    return rv;
-  }
-
-  // add stub to the master's list of children, so we can preserve
-  // symmetry in future QI calls.  the master will delete each child
-  // when it is destroyed.  the refcount of each child is bound to
-  // the refcount of the master.  this is done to deal with code
-  // like this:
-  //
-  //   nsCOMPtr<nsIBar> bar = ...;
-  //   nsIFoo *foo;
-  //   {
-  //     nsCOMPtr<nsIFoo> temp = do_QueryInterface(bar);
-  //     foo = temp;
-  //   }
-  //   foo->DoStuff();
-  //
-  // while this code is not valid XPCOM (since it is using |foo|
-  // after having called Release on it), such code is unfortunately
-  // very common in the mozilla codebase.  the assumption this code
-  // is making is that so long as |bar| is alive, it should be valid
-  // to access |foo| even if the code doesn't own a strong reference
-  // to |foo|!  clearly wrong, but we need to support it anyways.
-
-  stub->mMaster = master;
-  master->mChildren.AppendElement(stub);
-
-  *aInstancePtr = stub->mXPTCStub;
-  NS_ADDREF(stub);
-  return NS_OK;
-}
-
-PRBool
-nsJavaXPTCStub::SupportsIID(const nsID &iid)
-{
-  PRBool match;
-  nsCOMPtr<nsIInterfaceInfo> iter = mIInfo;
-  do
-  {
-    if (NS_SUCCEEDED(iter->IsIID(&iid, &match)) && match)
-      return PR_TRUE;
-
-    nsCOMPtr<nsIInterfaceInfo> parent;
-    iter->GetParent(getter_AddRefs(parent));
-    iter = parent;
-  }
-  while (iter != nsnull);
-
-  return PR_FALSE;
-}
-
-nsJavaXPTCStub *
-nsJavaXPTCStub::FindStubSupportingIID(const nsID &iid)
-{
-  NS_ASSERTION(mMaster == nsnull, "this is not a master stub");
-
-  if (SupportsIID(iid))
-    return this;
-
-  for (PRInt32 i = 0; i < mChildren.Count(); i++)
-  {
-    nsJavaXPTCStub *child = (nsJavaXPTCStub *) mChildren[i];
-    if (child->SupportsIID(iid))
-      return child;
-  }
-  return nsnull;
-}
-
-NS_IMETHODIMP
-nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex,
-                           const XPTMethodDescriptor *aMethodInfo,
-                           nsXPTCMiniVariant *aParams)
-{
-#ifdef DEBUG_JAVAXPCOM
-  const char* ifaceName;
-  mIInfo->GetNameShared(&ifaceName);
-  LOG(("---> (Java) %s::%s()\n", ifaceName, aMethodInfo->name));
-#endif
-
-  nsresult rv = NS_OK;
-  JNIEnv* env = GetJNIEnv();
-  jobject javaObject = env->CallObjectMethod(mJavaWeakRef, getReferentMID);
-
-  nsCAutoString methodSig("(");
-
-  // Create jvalue array to hold Java params
-  PRUint8 paramCount = aMethodInfo->num_args;
-  jvalue* java_params = nsnull;
-  const nsXPTParamInfo* retvalInfo = nsnull;
-  if (paramCount) {
-    java_params = new jvalue[paramCount];
-    if (!java_params)
-      return NS_ERROR_OUT_OF_MEMORY;
-
-    for (PRUint8 i = 0; i < paramCount && NS_SUCCEEDED(rv); i++)
-    {
-      const nsXPTParamInfo &paramInfo = aMethodInfo->params[i];
-      if (!paramInfo.IsRetval()) {
-        rv = SetupJavaParams(paramInfo, aMethodInfo, aMethodIndex, aParams,
-                             aParams[i], java_params[i], methodSig);
-      } else {
-        retvalInfo = &paramInfo;
-      }
-    }
-    NS_ASSERTION(NS_SUCCEEDED(rv), "SetupJavaParams failed");
-  }
-
-  // Finish method signature
-  if (NS_SUCCEEDED(rv)) {
-    methodSig.Append(')');
-    if (retvalInfo) {
-      nsCAutoString retvalSig;
-      rv = GetRetvalSig(retvalInfo, aMethodInfo, aMethodIndex, aParams,
-                        retvalSig);
-      methodSig.Append(retvalSig);
-    } else {
-      methodSig.Append('V');
-    }
-    NS_ASSERTION(NS_SUCCEEDED(rv), "GetRetvalSig failed");
-  }
-
-  // Get Java method to call
-  jmethodID mid = nsnull;
-  if (NS_SUCCEEDED(rv)) {
-    nsCAutoString methodName;
-    if (XPT_MD_IS_GETTER(aMethodInfo->flags) ||
-        XPT_MD_IS_SETTER(aMethodInfo->flags)) {
-      if (XPT_MD_IS_GETTER(aMethodInfo->flags))
-        methodName.AppendLiteral("get");
-      else
-        methodName.AppendLiteral("set");
-      methodName.AppendASCII(aMethodInfo->name);
-      methodName.SetCharAt(toupper(methodName[3]), 3);
-    } else {
-      methodName.AppendASCII(aMethodInfo->name);
-      methodName.SetCharAt(tolower(methodName[0]), 0);
-    }
-    // If it's a Java keyword, then prepend an underscore
-    if (gJavaKeywords->GetEntry(methodName.get())) {
-      methodName.Insert('_', 0);
-    }
-
-    jclass clazz = env->GetObjectClass(javaObject);
-    if (clazz)
-      mid = env->GetMethodID(clazz, methodName.get(), methodSig.get());
-    NS_ASSERTION(mid, "Failed to get requested method for Java object");
-    if (!mid)
-      rv = NS_ERROR_FAILURE;
-  }
-
-  // Call method
-  jvalue retval;
-  if (NS_SUCCEEDED(rv)) {
-    if (!retvalInfo) {
-      env->CallVoidMethodA(javaObject, mid, java_params);
-    } else {
-      switch (retvalInfo->GetType().TagPart())
-      {
-        case nsXPTType::T_I8:
-          retval.b = env->CallByteMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_I16:
-        case nsXPTType::T_U8:
-          retval.s = env->CallShortMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_I32:
-        case nsXPTType::T_U16:
-          retval.i = env->CallIntMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_I64:
-        case nsXPTType::T_U32:
-          retval.j = env->CallLongMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_FLOAT:
-          retval.f = env->CallFloatMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_U64:
-        case nsXPTType::T_DOUBLE:
-          retval.d = env->CallDoubleMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_BOOL:
-          retval.z = env->CallBooleanMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_CHAR:
-        case nsXPTType::T_WCHAR:
-          retval.c = env->CallCharMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_CHAR_STR:
-        case nsXPTType::T_WCHAR_STR:
-        case nsXPTType::T_IID:
-        case nsXPTType::T_ASTRING:
-        case nsXPTType::T_DOMSTRING:
-        case nsXPTType::T_UTF8STRING:
-        case nsXPTType::T_CSTRING:
-        case nsXPTType::T_INTERFACE:
-        case nsXPTType::T_INTERFACE_IS:
-          retval.l = env->CallObjectMethodA(javaObject, mid, java_params);
-          break;
-
-        case nsXPTType::T_VOID:
-          retval.j = env->CallLongMethodA(javaObject, mid, java_params);
-          break;
-
-        default:
-          NS_WARNING("Unhandled retval type");
-          break;
-      }
-    }
-
-    // Check for exception from called Java function
-    jthrowable exp = env->ExceptionOccurred();
-    if (exp) {
-      // If the exception is an instance of XPCOMException, then get the
-      // nsresult from the exception instance.  Else, default to
-      // NS_ERROR_FAILURE.
-      if (env->IsInstanceOf(exp, xpcomExceptionClass)) {
-        jfieldID fid;
-        fid = env->GetFieldID(xpcomExceptionClass, "errorcode", "J");
-        if (fid) {
-          rv = env->GetLongField(exp, fid);
-        } else {
-          rv = NS_ERROR_FAILURE;
-        }
-        NS_ASSERTION(fid, "Couldn't get 'errorcode' field of XPCOMException");
-      } else {
-        rv = NS_ERROR_FAILURE;
-      }
-    }
-  }
-
-  // Handle any 'inout', 'out' and 'retval' params
-  if (NS_SUCCEEDED(rv)) {
-    for (PRUint8 i = 0; i < paramCount; i++)
-    {
-      const nsXPTParamInfo &paramInfo = aMethodInfo->params[i];
-      if (paramInfo.IsIn() && !paramInfo.IsOut() && !paramInfo.IsDipper()) // 'in'
-        continue;
-
-      // If param is null, then caller is not expecting an output value.
-      if (aParams[i].val.p == nsnull)
-        continue;
-
-      if (!paramInfo.IsRetval()) {
-        rv = FinalizeJavaParams(paramInfo, aMethodInfo, aMethodIndex, aParams,
-                                aParams[i], java_params[i]);
-      } else {
-        rv = FinalizeJavaParams(paramInfo, aMethodInfo, aMethodIndex, aParams,
-                                aParams[i], retval);
-      }
-    }
-    NS_ASSERTION(NS_SUCCEEDED(rv), "FinalizeJavaParams/SetXPCOMRetval failed");
-  }
-
-  if (java_params)
-    delete [] java_params;
-
-#ifdef DEBUG
-  if (env->ExceptionCheck())
-    env->ExceptionDescribe();
-#endif
-  env->ExceptionClear();
-
-  LOG(("<--- (Java) %s::%s()\n", ifaceName, aMethodInfo->name));
-  return rv;
-}
-
-/**
- * Handle 'in', 'inout', and 'out' params
- */
-nsresult
-nsJavaXPTCStub::SetupJavaParams(const nsXPTParamInfo &aParamInfo,
-                const XPTMethodDescriptor* aMethodInfo,
-                PRUint16 aMethodIndex,
-                nsXPTCMiniVariant* aDispatchParams,
-                nsXPTCMiniVariant &aVariant, jvalue &aJValue,
-                nsACString &aMethodSig)
-{
-  nsresult rv = NS_OK;
-  JNIEnv* env = GetJNIEnv();
-  const nsXPTType &type = aParamInfo.GetType();
-
-  PRUint8 tag = type.TagPart();
-  switch (tag)
-  {
-    case nsXPTType::T_I8:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.b = aVariant.val.i8;
-        aMethodSig.Append('B');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jbyteArray array = env->NewByteArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetByteArrayRegion(array, 0, 1, (jbyte*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[B");
-      }
-    }
-    break;
-
-    case nsXPTType::T_I16:
-    case nsXPTType::T_U8:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.s = (tag == nsXPTType::T_I16) ? aVariant.val.i16 :
-                                                aVariant.val.u8;
-        aMethodSig.Append('S');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jshortArray array = env->NewShortArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetShortArrayRegion(array, 0, 1, (jshort*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[S");
-      }
-    }
-    break;
-
-    case nsXPTType::T_I32:
-    case nsXPTType::T_U16:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.i = (tag == nsXPTType::T_I32) ? aVariant.val.i32 :
-                                                aVariant.val.u16;
-        aMethodSig.Append('I');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jintArray array = env->NewIntArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetIntArrayRegion(array, 0, 1, (jint*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[I");
-      }
-    }
-    break;
-
-    case nsXPTType::T_I64:
-    case nsXPTType::T_U32:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.j = (tag == nsXPTType::T_I64) ? aVariant.val.i64 :
-                                                aVariant.val.u32;
-        aMethodSig.Append('J');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jlongArray array = env->NewLongArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetLongArrayRegion(array, 0, 1, (jlong*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[J");
-      }
-    }
-    break;
-
-    case nsXPTType::T_FLOAT:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.f = aVariant.val.f;
-        aMethodSig.Append('F');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jfloatArray array = env->NewFloatArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetFloatArrayRegion(array, 0, 1, (jfloat*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[F");
-      }
-    }
-    break;
-
-    // XXX how do we handle unsigned 64-bit values?
-    case nsXPTType::T_U64:
-    case nsXPTType::T_DOUBLE:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.d = (tag == nsXPTType::T_DOUBLE) ? aVariant.val.d :
-                                                   aVariant.val.u64;
-        aMethodSig.Append('D');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jdoubleArray array = env->NewDoubleArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetDoubleArrayRegion(array, 0, 1, (jdouble*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[D");
-      }
-    }
-    break;
-
-    case nsXPTType::T_BOOL:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.z = aVariant.val.b;
-        aMethodSig.Append('Z');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jbooleanArray array = env->NewBooleanArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetBooleanArrayRegion(array, 0, 1, (jboolean*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[Z");
-      }
-    }
-    break;
-
-    case nsXPTType::T_CHAR:
-    case nsXPTType::T_WCHAR:
-    {
-      if (!aParamInfo.IsOut()) {  // 'in'
-        if (tag == nsXPTType::T_CHAR)
-          aJValue.c = aVariant.val.c;
-        else
-          aJValue.c = aVariant.val.wc;
-        aMethodSig.Append('C');
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          jcharArray array = env->NewCharArray(1);
-          if (!array) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-
-          env->SetCharArrayRegion(array, 0, 1, (jchar*) aVariant.val.p);
-          aJValue.l = array;
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[C");
-      }
-    }
-    break;
-
-    case nsXPTType::T_CHAR_STR:
-    case nsXPTType::T_WCHAR_STR:
-    {
-      void* ptr = nsnull;
-      if (!aParamInfo.IsOut()) {  // 'in'
-        ptr = aVariant.val.p;
-      } else if (aVariant.val.p) {  // 'inout' & 'out'
-        void** variant = static_cast<void**>(aVariant.val.p);
-        ptr = *variant;
-      }
-
-      jobject str;
-      if (ptr) {
-        if (tag == nsXPTType::T_CHAR_STR) {
-          str = env->NewStringUTF((const char*) ptr);
-        } else {
-          const PRUnichar* buf = (const PRUnichar*) ptr;
-          str = env->NewString(buf, nsCRT::strlen(buf));
-        }
-        if (!str) {
-          rv = NS_ERROR_OUT_OF_MEMORY;
-          break;
-        }
-      } else {
-        str = nsnull;
-      }
-
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.l = str;
-        aMethodSig.AppendLiteral("Ljava/lang/String;");
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          aJValue.l = env->NewObjectArray(1, stringClass, str);
-          if (aJValue.l == nsnull) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[Ljava/lang/String;");
-      }
-    }
-    break;
-
-    case nsXPTType::T_IID:
-    {
-      nsID* iid = nsnull;
-      if (!aParamInfo.IsOut()) {  // 'in'
-        iid = static_cast<nsID*>(aVariant.val.p);
-      } else if (aVariant.val.p) {  // 'inout' & 'out'
-        nsID** variant = static_cast<nsID**>(aVariant.val.p);
-        iid = *variant;
-      }
-
-      jobject str = nsnull;
-      if (iid) {
-        char iid_str[NSID_LENGTH];
-        iid->ToProvidedString(iid_str);
-        str = env->NewStringUTF(iid_str);
-        if (!str) {
-          rv = NS_ERROR_OUT_OF_MEMORY;
-          break;
-        }
-      }
-
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.l = str;
-        aMethodSig.AppendLiteral("Ljava/lang/String;");
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          aJValue.l = env->NewObjectArray(1, stringClass, str);
-          if (aJValue.l == nsnull) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.AppendLiteral("[Ljava/lang/String;");
-      }
-    }
-    break;
-
-    case nsXPTType::T_INTERFACE:
-    case nsXPTType::T_INTERFACE_IS:
-    {
-      nsISupports* xpcom_obj = nsnull;
-      if (!aParamInfo.IsOut()) {  // 'in'
-        xpcom_obj = static_cast<nsISupports*>(aVariant.val.p);
-      } else if (aVariant.val.p) {  // 'inout' & 'out'
-        nsISupports** variant = static_cast<nsISupports**>(aVariant.val.p);
-        xpcom_obj = *variant;
-      }
-
-      nsID iid;
-      rv = GetIIDForMethodParam(mIInfo, aMethodInfo, aParamInfo,
-                                aParamInfo.GetType().TagPart(), aMethodIndex,
-                                aDispatchParams, PR_FALSE, iid);
-      if (NS_FAILED(rv))
-        break;
-
-      // get name of interface
-      char* iface_name = nsnull;
-      nsCOMPtr<nsIInterfaceInfoManager>
-        iim(do_GetService(NS_INTERFACEINFOMANAGER_SERVICE_CONTRACTID, &rv));
-      if (NS_FAILED(rv))
-        break;
-
-      rv = iim->GetNameForIID(&iid, &iface_name);
-      if (NS_FAILED(rv) || !iface_name)
-        break;
-
-      jobject java_stub = nsnull;
-      if (xpcom_obj) {
-        // Get matching Java object for given xpcom object
-        jobject objLoader = env->CallObjectMethod(mJavaWeakRef, getReferentMID);
-        rv = NativeInterfaceToJavaObject(env, xpcom_obj, iid, objLoader,
-                                         &java_stub);
-        if (NS_FAILED(rv))
-          break;
-      }
-
-      if (!aParamInfo.IsOut()) {  // 'in'
-        aJValue.l = java_stub;
-      } else {  // 'inout' & 'out'
-        if (aVariant.val.p) {
-          aJValue.l = env->NewObjectArray(1, nsISupportsClass, java_stub);
-          if (aJValue.l == nsnull) {
-            rv = NS_ERROR_OUT_OF_MEMORY;
-            break;
-          }
-        } else {
-          aJValue.l = nsnull;
-        }
-        aMethodSig.Append('[');
-      }
-
-      if (tag != nsXPTType::T_INTERFACE_IS) {
-        aMethodSig.AppendLiteral("Lorg/mozilla/interfaces/");
-        aMethodSig.AppendASCII(iface_name);
-        aMethodSig.Append(';');
-      } else {
-        aMethodSig.AppendLiteral("Lorg/mozilla/interfaces/nsISupports;");
-      }
-
-      nsMemory::Free(iface_name);
-    }
-    break;
-
-    case nsXPTType::T_ASTRING:
-    case nsXPTType::T_DOMSTRING:
-    {
-      // This only handle 'in' or 'in dipper' params.  In XPIDL, the 'out'
-      // descriptor is mapped to 'in dipper'.
-      NS_PRECONDITION(aParamInfo.IsIn(), "unexpected param descriptor");
-      if (!aParamInfo.IsIn()) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      nsString* str = static_cast<nsString*>(aVariant.val.p);
-      if (!str) {
-        rv = NS_ERROR_FAILURE;
-        break;
-      }
-
-      jstring jstr = nsnull;
-      if (!str->IsVoid()) {
-        jstr = env->NewString(str->get(), str->Length());
-        if (!jstr) {
-          rv = NS_ERROR_OUT_OF_MEMORY;
-          break;
-        }
-      }
-
-      aJValue.l = jstr;
-      aMethodSig.AppendLiteral("Ljava/lang/String;");
-    }
-    break;
-
-    case nsXPTType::T_UTF8STRING:
-    case nsXPTType::T_CSTRING:
-    {
-      // This only handle 'in' or 'in dipper' params.  In XPIDL, the 'out'
-      // descriptor is mapped to 'in dipper'.
-      NS_PRECONDITION(aParamInfo.IsIn(), "unexpected param descriptor");
-      if (!aParamInfo.IsIn()) {
-        rv = NS_ERROR_UNEXPECTED;
-        break;
-      }
-
-      nsCString* str = static_cast<nsCString*>(aVariant.val.p);
-      if (!str) {
-        rv = NS_ERROR_FAILURE;