A few weeks ago I started working with mozilla to develop a Java-enabled
web browser for Internet kiosks on Linux. I was building off the
SkipStone embedded browser, which was based on mozilla 0.7 and supported
Java. When I upgraded to the moz 0.8 source, I ran into compilation
errors with SkipStone because the linker couldn't find the destructor
for nsCOMPtr_base (from nsCOMPtr.h) in libxpcom.so. Also, I noticed
that Java would not load in 0.8, and despite following instructions from
a dozen web pages and bug reports, I couldn't get mozilla to recognize
the plugin at all.
Eventually, I "fixed" my SkipStone compilation errors by commenting out
all lines with the variable NSCAP_FEATURE_FACTOR_DESTRUCTOR in
nsCOMPtr.cpp and nsCOMPtr.h (all #defines, #ifdefs, and #ifndefs). It
seems like a very brute-force way to handle the issue, since I have no
idea why it's there or what purpose it serves, but after that SkipStone
compiled and ran, and had Java support. What was most suprising is that
this also mysteriously restored Java support in moz 0.8, which now
recognizes the plugin at startup. Just to be sure, I uncommented the
references to NSCAP_FEATURE_FACTOR_DESTRUCTOR and recompiled the xpcom
directory, which broke Java again; commenting it out again restored
functionality. I ran nm on libjavaplugin_oji.so, and it does have a
reference to _._13nsCOMPtr_base (i.e. the destructor for nsCOMPtr_base),
which was not in libxpcom.so until I waved my magic comments into the
nsCOMPtr.* files and rebuilt it.
Here's my dilemma: I don't see this fix as a legitimate solution to
either of these problems. I don't understand why this works at all.
Both mozilla and SkipStone seem to crash from regular browsing more
often than before, although that might just be instability in the 0.8
release. I'd like to get an opinion on this from someone who knows a
lot more about this part of mozilla than I do. Was
NSCAP_FEATURE_FACTOR_DESTRUCTOR added or changed since 0.7? Why would
this have anything to do with the Java plugin? This whole situation is
a little beyond me, so please forgive me if some of this isn't too
coherent. Any help or advice would be greatly appreciated.
-Matt