Index: browser-plugin/totemStringGlue.h
===================================================================
--- browser-plugin/totemStringGlue.h	(revision 5396)
+++ browser-plugin/totemStringGlue.h	(working copy)
@@ -1,58 +0,0 @@
-/* Totem browser plugin
- *
- * Copyright © 2006 Bastien Nocera <hadess@hadess.net>
- * Copyright © 2006 Christian Persch
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301  USA.
- */
-
-#include <nsEmbedString.h>
-
-#ifndef NS_LITERAL_CSTRING
-#define NS_LITERAL_CSTRING(x) (x)
-#endif
-
-class nsString : public nsEmbedString {
-  public:
-    PRBool IsEmpty () { return !Length (); }
-};
-
-class nsCString : public nsEmbedCString {
-  public:
-    nsCString () : nsEmbedCString () { }
-    explicit nsCString (const char *aData, PRUint32 aLength) : nsEmbedCString (aData, aLength) { }
-    explicit nsCString (const abstract_string_type& aOther) { Assign (aOther); }
-    explicit nsCString (const char *&aOther) { Assign (aOther); }
-    explicit nsCString (const nsCString& aData, int aStartPos, PRUint32 aLength) : nsEmbedCString (aData.get() + aStartPos, aLength-aStartPos) { }
-    PRBool IsEmpty () { return !Length (); }
-    PRBool Equals (const self_type& aOther) { return !strcmp (aOther.get (), get ()); }
-    PRBool Equals (const char_type *aOther) { return !strcmp (aOther, get ()); }
-    void SetLength (PRUint32 aLen) { Assign (""); }
-    self_type& operator=(const abstract_string_type& aOther) { Assign (aOther); return *this; }
-    self_type& operator=(const char_type* aOther) { Assign (aOther); return *this; }
-};
-
-class NS_ConvertUTF16toUTF8 : public nsCString {
-  public:
-    explicit NS_ConvertUTF16toUTF8 (const nsAString& aString) {
-	 NS_UTF16ToCString (aString, NS_CSTRING_ENCODING_UTF8, *this);
-      }
-};
-
-typedef nsString nsDependentString;
-typedef nsCString nsDependentCString;
-typedef nsCString nsDependentCSubstring;
-
Index: browser-plugin/totemPlugin.h
===================================================================
--- browser-plugin/totemPlugin.h	(revision 5396)
+++ browser-plugin/totemPlugin.h	(working copy)
@@ -29,9 +29,8 @@
 
 #include <nsStringAPI.h>
 
-#ifdef NEED_STRING_GLUE
-#include "totemStringGlue.h"
-#endif
+#define NS_STATIC_CAST(__type, __ptr) static_cast< __type >(__ptr)
+#define NS_REINTERPRET_CAST(__type, __expr) reinterpret_cast< __type >(__expr)
 
 #if defined(TOTEM_COMPLEX_PLUGIN) && defined(HAVE_NSTARRAY_H)
 #include <nsTArray.h>
Index: browser-plugin/Makefile.am
===================================================================
--- browser-plugin/Makefile.am	(revision 5396)
+++ browser-plugin/Makefile.am	(working copy)
@@ -145,7 +145,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemBasicPlugin.cpp		\
 	totemBasicPlugin.h		\
 	totemClassInfo.h		\
@@ -183,12 +182,13 @@
 	libtotempluginviewer_helper.la					\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_basic_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
@@ -211,7 +211,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemGMPPlugin.cpp		\
 	totemGMPPlugin.h		\
 	totemClassInfo.h		\
@@ -249,12 +248,13 @@
 	libtotempluginviewer_helper.la	\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_gmp_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
@@ -271,7 +271,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemComplexPlugin.cpp		\
 	totemComplexPlugin.h		\
 	totemClassInfo.h		\
@@ -309,12 +308,13 @@
 	libtotempluginviewer_helper.la					\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_complex_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
@@ -331,7 +331,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemNarrowSpacePlugin.cpp	\
 	totemNarrowSpacePlugin.h	\
 	totemClassInfo.h		\
@@ -369,12 +368,13 @@
 	libtotempluginviewer_helper.la					\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_narrowspace_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
@@ -391,7 +391,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemMullYPlugin.cpp		\
 	totemMullYPlugin.h		\
 	totemClassInfo.h		\
@@ -429,12 +428,13 @@
 	libtotempluginviewer_helper.la					\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_mully_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
@@ -451,7 +451,6 @@
 	totemPluginGlue.h		\
 	totemPlugin.cpp			\
 	totemPlugin.h			\
-	totemStringGlue.h		\
 	totemConePlugin.cpp		\
 	totemConePlugin.h		\
 	totemClassInfo.h		\
@@ -489,12 +488,13 @@
 	libtotempluginviewer_helper.la					\
 	$(DBUS_LIBS)	\
 	$(BROWSER_PLUGIN_LIBS)	\
-	$(LIBXPCOMGLUE_S)
+	$(GECKO_LIBS)
 
 libtotem_cone_plugin_la_LDFLAGS = \
 	-avoid-version	\
 	-export-symbols $(srcdir)/plugin.symbols \
 	-module		\
+	-no-undefined	\
 	$(AM_LDFLAGS)
 
 endif
Index: configure.in
===================================================================
--- configure.in	(revision 5396)
+++ configure.in	(working copy)
@@ -40,6 +40,7 @@
 GNOMEICON_REQS=2.15.90
 DBUS_REQS=0.61
 VALA_REQS=0.1.6
+XULRUNNER_REQS=1.9
 
 TOTEM_VERSION_MAJOR=totem_version_major
 TOTEM_VERSION_MINOR=totem_version_minor
@@ -570,61 +571,23 @@
 	[AS_HELP_STRING([--enable-browser-plugins],[compile the totem browser plugins])],
 	[],[enable_browser_plugins=autodetect])
 
-# Backward compatibility
-AC_ARG_ENABLE([mozilla],[],[enable_browser_plugins=$enableval],[])
-
 AC_MSG_RESULT([$enable_browser_plugins])
 
 # Check which mozilla to use
 
 if test "$enable_browser_plugins" != "no" ; then
-	AC_MSG_CHECKING([which gecko to use])
+	PKG_CHECK_MODULES([GECKO], [libxul >= $XULRUNNER_REQS], [gecko=xulrunner], [gecko=""])
 
-	AC_ARG_WITH([gecko],
-		[AS_HELP_STRING([--with-gecko],[Which gecko engine to use (default: autodetect)])])
-
-	# backward compat
-	AC_ARG_WITH([mozilla],[],[with_gecko=$withval])
-
-	GECKOS="xulrunner firefox mozilla-firefox seamonkey mozilla"
-	gecko=$with_gecko
-
-	if test -z "$with_gecko"; then
-		dnl Autodetect gecko
-		for g in $GECKOS; do
-			if $PKG_CONFIG --exists $g-xpcom; then
-				gecko=$g
-				break;
-			fi
-		done
-	elif ! $PKG_CONFIG --exists $gecko-xpcom; then
-		AC_MSG_ERROR([Gecko "$gecko" not found])
-	fi
-
-	if test -z "$gecko" -a "$enable_browser_plugins" = "autodetect"; then
+	if "x$enable_browser_plugins" = "xautodetect"; then
 		dnl No gecko found, disable plugin
 		AC_MSG_WARN([No gecko found, disabling plugin])
 		enable_browser_plugins=no
 	elif test -z "$gecko"; then
-		AC_MSG_ERROR([No gecko found])
-	elif ! ( echo "$GECKOS" | egrep "(^| )$gecko(\$| )" > /dev/null); then
-		AC_MSG_ERROR([Unknown gecko "$gecko" specified])
+		AC_MSG_ERROR([No xulrunner found])
 	else
 		enable_browser_plugins=yes
 	fi
 
-	AC_MSG_RESULT([$gecko])
-
-	case "$gecko" in
-		mozilla) MOZILLA_VERSION_MIN=1.7 ;;
-		seamonkey) MOZILLA_VERSION_MIN=1.0 ;;
-		*firefox) MOZILLA_VERSION_MIN=1.0 ;;
-		xulrunner) MOZILLA_VERSION_MIN=1.8 ;;
-	esac
-
-	MOZILLA=$gecko
-	AC_SUBST([MOZILLA])
-
 	if test "$enable_cxx_warnings" != "no" -a "$GXX" = "yes"; then
 		PLUGIN_EXTRA_WARN_CXXFLAGS="-Wno-ctor-dtor-privacy -Wno-non-virtual-dtor -Woverloaded-virtual"
 	else
@@ -635,15 +598,14 @@
 
 # Check for mozilla modules, but keep the CFLAGS and LIBS in
 # separate vars
-if test "$enable_browser_plugins" = "yes" ; then
+if test "x$enable_browser_plugins" = "xyes" ; then
 	PKG_CHECK_MODULES([MOZILLA_NOT_LINKED],
-		[$MOZILLA-xpcom >= $MOZILLA_VERSION_MIN \
-		 $MOZILLA-plugin],,
+		[libxul >= $XULRUNNER_REQS],,
                 [enable_browser_plugins=no])
 fi
 # Check for other required modules, and merge CFLAGS, but not link
 # flags to avoid linking against -lxpcom -lplds4 -lplc4 -lnspr4
-if test "$enable_browser_plugins" = "yes" ; then
+if test "x$enable_browser_plugins" = "xyes" ; then
 	PKG_CHECK_MODULES([BROWSER_PLUGIN],
 		[glib-2.0
 		 gnome-vfs-2.0 >= $GNOMEVFS_REQS
@@ -664,7 +626,7 @@
 				>= 0.22 to function.])])
 fi
 
-if test "$enable_browser_plugins" = "yes" ; then
+if test "x$enable_browser_plugins" = "xyes" ; then
 	PKG_CHECK_MODULES([DBUS], [dbus-glib-1 >= $DBUS_REQS],,
 			[enable_browser_plugins=no])
 	DBUSLIBDIR="`$PKG_CONFIG dbus-glib-1 --variable=libdir`"
@@ -685,56 +647,46 @@
 
 # Sets some variables, and check for xpidl
 if test "$enable_browser_plugins" = "yes" ; then
-	MOZILLA_PREFIX="`$PKG_CONFIG $MOZILLA-xpcom --variable=prefix`"
-	MOZILLA_LIBDIR="`$PKG_CONFIG $MOZILLA-xpcom --variable=libdir`"
-	MOZILLA_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir $MOZILLA-xpcom`"
-	MOZILLA_XPCOM_CFLAGS="-I`$PKG_CONFIG --variable=includedir $MOZILLA-xpcom`"
+	LIBXUL_SDK_DIR=`$PKG_CONFIG --variable=sdkdir libxul`
+	MOZILLA_PREFIX="`$PKG_CONFIG libxul --variable=prefix`"
+	MOZILLA_LIBDIR="`$PKG_CONFIG libxul --variable=libdir`"
+	MOZILLA_INCLUDE_ROOT="`$PKG_CONFIG --variable=includedir libxul`"
+	MOZILLA_XPCOM_CFLAGS="`$PKG_CONFIG --cflags libxul-unstable`"
+	MOZILLA_LIBS="`$PKG_CONFIG --libs libxul`"
+	MOZILLA_IDLDIR="`$PKG_CONFIG --variable=idldir libxul`"
+
 	MOZILLA_PLUGINDIR="${MOZILLA_PLUGINDIR:-"\${libdir}/mozilla/plugins"}"
 
-	AC_PATH_PROG([MOZILLA_XPIDL], [xpidl], [no], [$MOZILLA_LIBDIR:$PATH])
+	AC_PATH_PROG([MOZILLA_XPIDL], [xpidl], [no], [$LIBXUL_SDK_DIR/bin:$PATH])
 	if test "x$MOZILLA_XPIDL" = "xno"; then
 		AC_MSG_ERROR([xpidl compiler not found])
 	fi
 
-	AC_PATH_PROG([MOZILLA_XPT_LINK],[xpt_link],[no],[$MOZILLA_LIBDIR:$PATH])
+	AC_PATH_PROG([MOZILLA_XPT_LINK],[xpt_link],[no],[$LIBXUL_SDK_DIR/bin:$PATH])
 	if test "$MOZILLA_XPT_LINK" = "no"; then
 		AC_MSG_ERROR([xpt_link not found])
 	fi
 
 	AC_SUBST([MOZILLA_PREFIX])
 	AC_SUBST([MOZILLA_LIBDIR])
+	AC_SUBST([MOZILLA_LIBS])
 	AC_SUBST([MOZILLA_XPCOM_CFLAGS])
 	AC_SUBST([MOZILLA_INCLUDE_ROOT])
+	AC_SUBST([MOZILLA_IDLDIR])
 	AC_ARG_VAR([MOZILLA_PLUGINDIR],[Where to install the plugin to])
 fi
 
-# Search for the idl include directory
-if test "$enable_browser_plugins" = "yes" ; then
-	dnl This only works on gecko 1.8
-	MOZILLA_IDLDIR="`$PKG_CONFIG --variable=idldir $MOZILLA-xpcom`"
-	dnl Fallback for older versions
-	if test "x$MOZILLA_IDLDIR" = "x"; then
-		MOZILLA_IDLDIR="`echo $MOZILLA_LIBDIR | sed -e s!lib!share/idl!`"
-	fi
-	dnl Some distributions (Gentoo) have it in unusual places
-	if test "x$MOZILLA_IDLDIR" = "x"; then
-		MOZILLA_IDLDIR="$MOZILLA_INCLUDE_ROOT/idl"
-	fi
-
-	AC_SUBST([MOZILLA_IDLDIR])
-fi
-
-if test "$enable_browser_plugins" = "yes" ; then
+if test "x$enable_browser_plugins" = "xyes" ; then
 	AC_DEFINE([ENABLE_BROWSER_PLUGINS],[1],[Define if you build the mozilla plugin])
 fi
 
-AM_CONDITIONAL([ENABLE_BROWSER_PLUGINS], [test "$enable_browser_plugins" = "yes"])
+AM_CONDITIONAL([ENABLE_BROWSER_PLUGINS], [test "x$enable_browser_plugins" = "xyes"])
 
 # check for libxpcomglue_s
 
 LIBXPCOMGLUE_S=
 
-if test "$enable_browser_plugins" = "yes"; then
+if test "x$enable_browser_plugins" = "xyes"; then
 	AC_LANG_PUSH([C++])
 	__SAVE_CPPFLAGS=$CPPFLAGS
 	__SAVE_CXXFLAGS=$CXXFLAGS
@@ -775,7 +727,7 @@
 
 # check for -fno-rtti flag
 
-if test "$enable_browser_plugins" = "yes"; then
+if test "x$enable_browser_plugins" = "xyes"; then
 	AC_LANG_PUSH([C++])
 	__SAVE_CXXFLAGS=$CXXFLAGS
 	CXXFLAGS="-fno-rtti $CXXFLAGS"
@@ -792,35 +744,9 @@
 	fi
 fi
 
-# check for some additional xpcom headers and for string compatibility
-
-if test "$enable_browser_plugins" = "yes"; then
-	AC_LANG_PUSH([C++])
-	__SAVE_CPPFLAGS=$CPPFLAGS
-	CPPFLAGS="$CPPFLAGS $MOZILLA_NOT_LINKED_CFLAGS -I$MOZILLA_INCLUDE_ROOT -I$MOZILLA_INCLUDE_ROOT/xpcom"
-
-	AC_CHECK_HEADERS([nsTArray.h])
-
-	AC_MSG_CHECKING([whether we need string glue])
-	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
-				#include <mozilla-config.h>
-				#include <nsStringAPI.h>
-		],[
-				nsDependentCString test("Test");
-		])],[need_string_glue=no],[need_string_glue=yes])
-	AC_MSG_RESULT([$need_string_glue])
-
-	CPPFLAGS=$__SAVE_CPPFLAGS
-	AC_LANG_POP([C++])
-
-	if test "$need_string_glue" = "yes"; then
-		AC_DEFINE([NEED_STRING_GLUE],[1],[Define if we need string glue])
-	fi
-fi
-
 # check which plugins to enable
 
-if test "$enable_browser_plugins" = "yes"; then
+if test "x$enable_browser_plugins" = "xyes"; then
 
 AC_MSG_CHECKING([whether to enable the basic browser plugin])
 AC_ARG_ENABLE([basic-plugin],
@@ -1125,7 +1051,7 @@
 	AC_MSG_NOTICE([   No Totem plugins enabled])
 fi
 if test x$enable_browser_plugins = xyes ; then
-	AC_MSG_NOTICE([** Browser plugin enabled (using $MOZILLA)])
+	AC_MSG_NOTICE([** Browser plugin enabled (using xulrunner)])
 	if test x$enable_basic_plugin = xyes ; then
 		AC_MSG_NOTICE([** Basic browser plugin enabled])
 	else
