Firefox 9 DevMode Plugin

Review at http://gwt-code-reviews.appspot.com/1620803

Review by: conroy@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10837 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/plugins/xpcom/FFSessionHandler.cpp b/plugins/xpcom/FFSessionHandler.cpp
index 8bc5ceb..7bc3dc0 100755
--- a/plugins/xpcom/FFSessionHandler.cpp
+++ b/plugins/xpcom/FFSessionHandler.cpp
@@ -206,9 +206,9 @@
   // TODO(jat): implement
 }
 
-bool FFSessionHandler::invoke(HostChannel& channel, const Value& thisObj, const std::string& methodName,
-    int numArgs, const Value* const args, Value* returnValue) {
-  Debug::log(Debug::Spam) << "FFSessionHandler::invoke " << thisObj.toString()
+bool FFSessionHandler::invoke(HostChannel& channel, const gwt::Value& thisObj, const std::string& methodName,
+    int numArgs, const gwt::Value* const args, gwt::Value* returnValue) {
+  Debug::log(Debug::Debugging) << "FFSessionHandler::invoke " << thisObj.toString()
       << "::" << methodName << Debug::flush;
   JSContext* ctx = getJSContext();
 
@@ -300,7 +300,7 @@
  * Returns true if an exception occurred.
  */
 bool FFSessionHandler::invokeSpecial(HostChannel& channel, SpecialMethodId method, int numArgs,
-    const Value* const args, Value* returnValue)  {
+    const gwt::Value* const args, gwt::Value* returnValue)  {
   Debug::log(Debug::Spam) << "FFSessionHandler::invokeSpecial" << Debug::flush;
   return false;
 }
@@ -434,7 +434,7 @@
   return JS_NewUCString(ctx, buf, p - buf);
 }
 
-void FFSessionHandler::makeValueFromJsval(Value& retVal, JSContext* ctx,
+void FFSessionHandler::makeValueFromJsval(gwt::Value& retVal, JSContext* ctx,
     const jsval& value) {
   if (JSVAL_IS_VOID(value)) {
     retVal.setUndefined();
@@ -491,24 +491,24 @@
 }
 
 void FFSessionHandler::makeJsvalFromValue(jsval& retVal, JSContext* ctx,
-    const Value& value) {
+    const gwt::Value& value) {
   switch (value.getType()) {
-    case Value::NULL_TYPE:
+    case gwt::Value::NULL_TYPE:
       retVal = JSVAL_NULL;
       break;
-    case Value::BOOLEAN:
+    case gwt::Value::BOOLEAN:
       retVal = BOOLEAN_TO_JSVAL(value.getBoolean());
       break;
-    case Value::BYTE:
+    case gwt::Value::BYTE:
       retVal = INT_TO_JSVAL((int) value.getByte());
       break;
-    case Value::CHAR:
+    case gwt::Value::CHAR:
       retVal = INT_TO_JSVAL((int) value.getChar());
       break;
-    case Value::SHORT:
+    case gwt::Value::SHORT:
       retVal = INT_TO_JSVAL((int) value.getShort());
       break;
-    case Value::INT: {
+    case gwt::Value::INT: {
       int intValue = value.getInt();
       if (INT_FITS_IN_JSVAL(intValue)) {
         retVal = INT_TO_JSVAL(intValue);
@@ -518,22 +518,22 @@
       break;
     }
     // TODO(jat): do we still need long support in the wire format and Value?
-//    case Value::LONG:
+//    case gwt::Value::LONG:
 //      retVal = value.getLong();
 //      break;
-    case Value::FLOAT:
+    case gwt::Value::FLOAT:
       JS_NewNumberValue(ctx, (jsdouble) value.getFloat(), &retVal);
       break;
-    case Value::DOUBLE:
+    case gwt::Value::DOUBLE:
       JS_NewNumberValue(ctx, (jsdouble) value.getDouble(), &retVal);
       break;
-    case Value::STRING:
+    case gwt::Value::STRING:
       {
         JSString* str = stringUtf8(ctx, value.getString());
         retVal = STRING_TO_JSVAL(str);
       }
       break;
-    case Value::JAVA_OBJECT:
+    case gwt::Value::JAVA_OBJECT:
       {
         int javaId = value.getJavaObjectId();
         std::map<int, JSObject*>::iterator i = javaObjectsById.find(javaId);
@@ -549,7 +549,7 @@
         }
       }
       break;
-    case Value::JS_OBJECT:
+    case gwt::Value::JS_OBJECT:
       {
         int jsId = value.getJsObjectId();
         if (!JS_GetElement(ctx, jsObjectsById, jsId, &retVal)) {
@@ -560,7 +560,7 @@
         }
       }
       break;
-    case Value::UNDEFINED:
+    case gwt::Value::UNDEFINED:
       retVal = JSVAL_VOID;
       break;
     default:
diff --git a/plugins/xpcom/FFSessionHandler.h b/plugins/xpcom/FFSessionHandler.h
index 0a2b1fc..f7941bf 100755
--- a/plugins/xpcom/FFSessionHandler.h
+++ b/plugins/xpcom/FFSessionHandler.h
@@ -26,17 +26,19 @@
 #include "jsapi.h"
 
 class HostChannel;
-class Value;
+namespace gwt {
+  class Value;
+}
 
 class FFSessionHandler : public SessionData, public SessionHandler {
   friend class JavaObject;
 public:
   FFSessionHandler(HostChannel* channel);
   ~FFSessionHandler(void);
-  virtual void makeValueFromJsval(Value& retVal, JSContext* ctx,
+  virtual void makeValueFromJsval(gwt::Value& retVal, JSContext* ctx,
       const jsval& value);
   virtual void makeJsvalFromValue(jsval& retVal, JSContext* ctx,
-      const Value& value);
+      const gwt::Value& value);
   virtual void freeJavaObject(int objectId);
   void disconnect();
 
@@ -44,10 +46,10 @@
   virtual void disconnectDetectedImpl();
   virtual void freeValue(HostChannel& channel, int idCount, const int* ids);
   virtual void loadJsni(HostChannel& channel, const std::string& js);
-  virtual bool invoke(HostChannel& channel, const Value& thisObj, const std::string& methodName,
-      int numArgs, const Value* const args, Value* returnValue);
+  virtual bool invoke(HostChannel& channel, const gwt::Value& thisObj, const std::string& methodName,
+      int numArgs, const gwt::Value* const args, gwt::Value* returnValue);
   virtual bool invokeSpecial(HostChannel& channel, SpecialMethodId method, int numArgs,
-      const Value* const args, Value* returnValue);
+      const gwt::Value* const args, gwt::Value* returnValue);
   virtual void sendFreeValues(HostChannel& channel);
   virtual void fatalError(HostChannel& channel, const std::string& message);
 
diff --git a/plugins/xpcom/JavaObject.cpp b/plugins/xpcom/JavaObject.cpp
index 440858f..e63019b 100644
--- a/plugins/xpcom/JavaObject.cpp
+++ b/plugins/xpcom/JavaObject.cpp
@@ -148,14 +148,16 @@
       *rval = JSVAL_VOID;
       return JS_TRUE;
     }
-    Debug::log(Debug::Error) << "Getting unexpected string property "
-        << dumpJsVal(ctx, id) << Debug::flush;
+    // TODO: dumpJsVal can no longer handle this case
+    //Debug::log(Debug::Error) << "Getting unexpected string property "
+    //    << dumpJsVal(ctx, id) << Debug::flush;
     // TODO: throw a better exception here
     return JS_FALSE;
   }
   if (!JSID_IS_INT(id)) {
-    Debug::log(Debug::Error) << "Getting non-int/non-string property "
-          << dumpJsVal(ctx, id) << Debug::flush;
+    // TODO: dumpJsVal can no longer handle this case
+    //Debug::log(Debug::Error) << "Getting non-int/non-string property "
+    //      << dumpJsVal(ctx, id) << Debug::flush;
     // TODO: throw a better exception here
     return JS_FALSE;
   }
@@ -164,7 +166,7 @@
   HostChannel* channel = data->getHostChannel();
   SessionHandler* handler = data->getSessionHandler();
 
-  Value value = ServerMethods::getProperty(*channel, handler, objectRef, dispId);
+  gwt::Value value = ServerMethods::getProperty(*channel, handler, objectRef, dispId);
   data->makeJsvalFromValue(*rval, ctx, value);
   return JS_TRUE;
 }
@@ -192,7 +194,7 @@
   int objectRef = JavaObject::getObjectId(ctx, obj);
   int dispId = JSID_TO_INT(id);
 
-  Value value;
+  gwt::Value value;
   data->makeValueFromJsval(value, ctx, *vp);
 
   HostChannel* channel = data->getHostChannel();
@@ -301,7 +303,7 @@
   int oid = getObjectId(ctx, obj);
   Debug::log(Debug::Spam) << "JavaObject::toString(id=" << oid << ")"
       << Debug::flush;
-  Value javaThis;
+  gwt::Value javaThis;
   javaThis.setJavaObject(oid);
   // we ignore any supplied parameters
   return invokeJava(ctx, data, javaThis, InvokeMessage::TOSTRING_DISP_ID, 0,
@@ -346,7 +348,7 @@
   }
   Debug::log(Debug::Spam) << "Data = " << data << Debug::flush;
 
-  Value javaThis;
+  gwt::Value javaThis;
   if (!JSVAL_IS_NULL(argv[1])) {
     JSObject* thisObj = JSVAL_TO_OBJECT(argv[1]);
     if (isJavaObject(ctx, thisObj)) {
@@ -392,17 +394,17 @@
  * and the second element is the actual return value or exception.
  */
 JSBool JavaObject::invokeJava(JSContext* ctx, SessionData* data,
-    const Value& javaThis, int dispId, int numArgs, const jsval* jsargs,
+    const gwt::Value& javaThis, int dispId, int numArgs, const jsval* jsargs,
     jsval* rval) {
   HostChannel* channel = data->getHostChannel();
   SessionHandler* handler = data->getSessionHandler();
-  scoped_array<Value> args(new Value[numArgs]);
+  scoped_array<gwt::Value> args(new gwt::Value[numArgs]);
   for (int i = 0; i < numArgs; ++i) {
     data->makeValueFromJsval(args[i], ctx, jsargs[i]);
   }
 
   bool isException = false;
-  Value returnValue;
+  gwt::Value returnValue;
   if (!InvokeMessage::send(*channel, javaThis, dispId, numArgs, args.get())) {
     Debug::log(Debug::Debugging) << "JavaObject::call failed to send invoke message" << Debug::flush;
   } else {
diff --git a/plugins/xpcom/JavaObject.h b/plugins/xpcom/JavaObject.h
index acfb0a9..ea32ee7 100755
--- a/plugins/xpcom/JavaObject.h
+++ b/plugins/xpcom/JavaObject.h
@@ -20,7 +20,9 @@
 #include "jsapi.h"
 
 class SessionData;
-class Value;
+namespace gwt {
+  class Value;
+}
 
 #if GECKO_VERSION < 2000
 #define jsid jsval
@@ -61,7 +63,7 @@
 private:
   static SessionData* getSessionData(JSContext* ctx, JSObject* obj);
   static JSBool invokeJava(JSContext* ctx, SessionData* data,
-      const Value& javaThis, int dispId, int numArgs, const jsval* jsargs,
+      const gwt::Value& javaThis, int dispId, int numArgs, const jsval* jsargs,
       jsval* rval);
 };
 
diff --git a/plugins/xpcom/Makefile b/plugins/xpcom/Makefile
index 28f8bf4..dd4624e 100644
--- a/plugins/xpcom/Makefile
+++ b/plugins/xpcom/Makefile
@@ -77,7 +77,11 @@
 #default ALLARCHFLAGS for post-FF4
 ALLARCHCFLAGS = -arch i386 -arch x86_64 -Xarch_i386 -DFLAG32BIT=32 -Xarch_x86_64 -DFLAG32BIT=64
 
+# Python xpidl tool is the new hotness post-FF9
+XPIDL_TOOL = python
+
 ifeq ($(BROWSER),ff3)
+XPIDL_TOOL = binary
 MOZALLOC_DLLFLAGS =
 GECKO_VERSION   = 1.9.0
 CFLAGS += -DGECKO_VERSION=1900
@@ -87,6 +91,7 @@
 endif
 else
 ifeq ($(BROWSER),ff3+)
+XPIDL_TOOL = binary
 MOZALLOC_DLLFLAGS =
 GECKO_VERSION   = 1.9.0
 CFLAGS += -DGECKO_VERSION=1901
@@ -97,6 +102,7 @@
 endif
 else
 ifeq ($(BROWSER),ff35)
+XPIDL_TOOL = binary
 MOZALLOC_DLLFLAGS =
 GECKO_VERSION   = 1.9.1
 CFLAGS += -DGECKO_VERSION=1910
@@ -106,6 +112,7 @@
 endif
 else
 ifeq ($(BROWSER),ff36)
+XPIDL_TOOL = binary
 MOZALLOC_DLLFLAGS =
 GECKO_VERSION   = 1.9.2
 CFLAGS += -DGECKO_VERSION=1920
@@ -115,26 +122,36 @@
 endif
 else
 ifeq ($(BROWSER),ff40)
+XPIDL_TOOL = binary
 GECKO_VERSION   = 2.0.0
 CFLAGS += -DGECKO_VERSION=2000
 else
 ifeq ($(BROWSER),ff50)
+XPIDL_TOOL = binary
 GECKO_VERSION   = 5.0.0
 CFLAGS += -DGECKO_VERSION=5000
 else
 ifeq ($(BROWSER),ff60)
+XPIDL_TOOL = binary
 GECKO_VERSION   = 6.0.0
 CFLAGS += -DGECKO_VERSION=6000
 else
 ifeq ($(BROWSER),ff70)
+XPIDL_TOOL = binary
 GECKO_VERSION   = 7.0.0
 CFLAGS += -DGECKO_VERSION=7000
 else
 ifeq ($(BROWSER),ff80)
+XPIDL_TOOL = binary
 GECKO_VERSION   = 8.0.0
 CFLAGS += -DGECKO_VERSION=8000
 else
-$(error Unrecognized BROWSER of $(BROWSER) - options are ff3, ff3+, ff35, ff36, ff40, ff50, ff60, ff70, f80)
+ifeq ($(BROWSER),ff90)
+GECKO_VERSION   = 9.0.0
+CFLAGS += -DGECKO_VERSION=9000
+else
+$(error Unrecognized BROWSER of $(BROWSER) - options are ff3, ff3+, ff35, ff36, ff40, ff50, ff60, ff70, ff80, ff90)
+endif
 endif
 endif
 endif
@@ -171,7 +188,17 @@
 GECKO_SDK         = $(SDK_PATH)/gecko-$(GECKO_VERSION)
 GECKO_PLAT_INC    = $(GECKO_SDK)/$(GECKO_PLATFORM)/include
 GECKO_LIBS        = $(GECKO_SDK)/$(GECKO_PLATFORM)/lib$(GECKO_MINOR_VERSION)
+
+ifeq ($(XPIDL_TOOL),python)
+XPIDL             = $(GECKO_SDK)/bin/xpidl.py
+XPIDL_HEADER      = $(GECKO_SDK)/bin/header.py
+XPIDL_TYPELIBS    = $(GECKO_SDK)/bin/typelib.py
+else
 XPIDL             = $(GECKO_SDK)/$(GECKO_PLATFORM)/bin/xpidl
+XPIDL_HEADER      = $(GECKO_SDK)/$(GECKO_PLATFORM)/bin/xpidl -m header 
+XPIDL_TYPELIBS    = $(GECKO_SDK)/$(GECKO_PLATFORM)/bin/xpidl -m typelib
+endif
+
 XPIDL_FLAGS       = -I$(GECKO_SDK)/idl
 
 DLLFLAGS += \
@@ -225,6 +252,8 @@
 	$(MAKE) lib BROWSER=ff60 ARCH=x86_64
 	$(MAKE) lib BROWSER=ff70 ARCH=x86_64
 	$(MAKE) lib BROWSER=ff80 ARCH=x86_64
+	$(MAKE) lib BROWSER=ff90 ARCH=x86
+	$(MAKE) lib BROWSER=ff90 ARCH=x86_64
 
 macplatforms:
 	$(MAKE) lib BROWSER=ff3
@@ -235,6 +264,7 @@
 	$(MAKE) lib BROWSER=ff60
 	$(MAKE) lib BROWSER=ff70
 	$(MAKE) lib BROWSER=ff80
+	$(MAKE) lib BROWSER=ff90
 
 SRCS =	\
 		ExternalWrapper.cpp \
@@ -259,10 +289,10 @@
 	(cd $(EXTENSION_OUTDIR) && zip -r -D -9 $(DIR)/$(INSTALLER_XPI) * -x '*/.svn/*' -x 'META-INF/*')
 
 $(FF_TYPELIB): IOOPHM.idl
-	[ ! -x $(XPIDL) -o \( -e $(FF_TYPELIB) -a ! -w $(FF_TYPELIB) \) ] || $(XPIDL) $(XPIDL_FLAGS) -m typelib -e $@ $<
+	[ ! -x $(XPIDL) -o \( -e $(FF_TYPELIB) -a ! -w $(FF_TYPELIB) \) ] || $(XPIDL_TYPELIBS) $(XPIDL_FLAGS) -o $@ $<
 
 $(FF_HEADER): IOOPHM.idl $(OBJ_OUTDIR)
-	[ ! -x $(XPIDL) -o \( -e $(FF_HEADER) -a ! -w $(FF_HEADER) \) ] || $(XPIDL) $(XPIDL_FLAGS) -m header -e $@ $<
+	[ ! -x $(XPIDL) -o \( -e $(FF_HEADER) -a ! -w $(FF_HEADER) \) ] || $(XPIDL_HEADER) $(XPIDL_FLAGS) -o $@ $<
 
 $(FF_DLL): $(FF_OBJS) $(COMMON)
 	$(CXX) -o $@ $(FF_OBJS) $(COMMON) $(DLLFLAGS)
diff --git a/plugins/xpcom/Preferences.h b/plugins/xpcom/Preferences.h
index bf9a25c..2bc0a81 100644
--- a/plugins/xpcom/Preferences.h
+++ b/plugins/xpcom/Preferences.h
@@ -26,7 +26,9 @@
 #include "nsIPrefBranch2.h"
 
 class HostChannel;
-class Value;
+namespace gwt {
+  class Value;
+}
 
 class Preferences : public nsIObserver {
   NS_DECL_ISUPPORTS
diff --git a/plugins/xpcom/SessionData.h b/plugins/xpcom/SessionData.h
index 3d28742..35c66c1 100755
--- a/plugins/xpcom/SessionData.h
+++ b/plugins/xpcom/SessionData.h
@@ -57,13 +57,13 @@
   * Convert a value from the JavaScript into something that can be sent back
   * to the OOPHM host.
   */
-  virtual void makeValueFromJsval(Value& retVal, JSContext* ctx, const jsval& value)=0;
+  virtual void makeValueFromJsval(gwt::Value& retVal, JSContext* ctx, const jsval& value)=0;
 
   /*
   * Convert a value from the OOPHM host into something that can be passed into
   * the JavaScript execution environment.
   */
-  virtual void makeJsvalFromValue(jsval& retVal, JSContext* ctx, const Value& value)=0;
+  virtual void makeJsvalFromValue(jsval& retVal, JSContext* ctx, const gwt::Value& value)=0;
   
   /*
   * Removes the JavaObject wrapper with the given id and notifies the host.
diff --git a/plugins/xpcom/VisualStudio/ff90-xpcom.vcproj b/plugins/xpcom/VisualStudio/ff90-xpcom.vcproj
new file mode 100755
index 0000000..51ee65c
--- /dev/null
+++ b/plugins/xpcom/VisualStudio/ff90-xpcom.vcproj
@@ -0,0 +1,845 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="ff90-xpcom"
+	ProjectGUID="{6BF0C2CE-CB0C-421B-A67C-1E448371D24D}"
+	RootNamespace="ff90-xpcom"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug90"
+			IntermediateDirectory="Debug90"
+			ConfigurationType="2"
+			UseOfMFC="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;..\prebuilt\ff90\include;&quot;..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include&quot;;&quot;..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\mozilla&quot;;&quot;..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect&quot;;&quot;..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include&quot;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FIREFOXPLUGIN_EXPORTS;GWT_DEBUGLEVEL=Debugging;XPCOM_GLUE;XPCOM_GLUE_USE_NSPR;MOZILLA_STRICT_API;BROWSER_FF8;GECKO_VERSION=9000"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				ResourceOutputFileName="$(IntDir)/$(TargetName).res"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib Advapi32.lib xpcomglue_s.lib xpcom.lib nspr4.lib mozalloc.lib xul.lib mozjs.lib"
+				ShowProgress="2"
+				OutputFile="$(ProjectDir)\..\prebuilt\extension\lib\WINNT_x86-msvc\ff90\xpGwtDevPlugin.dll"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="&quot;..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\lib&quot;"
+				ModuleDefinitionFile="$(ProjectDir)\..\xpGwtDevPlugin.def"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)\$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release90"
+			IntermediateDirectory="Release90"
+			ConfigurationType="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="3"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;..\prebuilt\ff90\include;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\mozilla&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect&quot;"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;FIREFOXPLUGIN_EXPORTS;GWT_DEBUGLEVEL=Debugging;XPCOM_GLUE;XPCOM_GLUE_USE_NSPR;MOZILLA_STRICT_API;BROWSER_FF8;GECKO_VERSION=9000;$(NOINHERIT)"
+				ExceptionHandling="1"
+				RuntimeLibrary="0"
+				TreatWChar_tAsBuiltInType="true"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="false"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				ResourceOutputFileName="$(IntDir)/$(TargetName).res"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib Advapi32.lib xpcomglue_s.lib xpcom.lib nspr4.lib mozalloc.lib xul.lib mozjs.lib"
+				ShowProgress="2"
+				OutputFile="$(ProjectDir)\..\prebuilt\extension\lib\WINNT_x86-msvc\ff90\xpGwtDevPlugin.dll"
+				LinkIncremental="0"
+				AdditionalLibraryDirectories="&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\lib&quot;"
+				ModuleDefinitionFile="$(ProjectDir)\..\xpGwtDevPlugin.def"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)\$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\ExternalWrapper.h"
+				>
+			</File>
+			<File
+				RelativePath="..\FFSessionHandler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\prebuilt\ff90\include\IOOPHM.h"
+				>
+			</File>
+			<File
+				RelativePath="..\JavaObject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\JSRunner.h"
+				>
+			</File>
+			<File
+				RelativePath="..\mozincludes.h"
+				>
+			</File>
+			<File
+				RelativePath="..\Preferences.h"
+				>
+			</File>
+			<File
+				RelativePath="..\RootedObject.h"
+				>
+			</File>
+			<File
+				RelativePath="..\SessionData.h"
+				>
+			</File>
+			<File
+				RelativePath="..\XpcomDebug.h"
+				>
+			</File>
+			<Filter
+				Name="common"
+				>
+				<File
+					RelativePath="..\..\common\AllowedConnections.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\BrowserChannel.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ByteOrder.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\CheckVersionsMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ChooseTransportMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Debug.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\DebugLevel.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\FatalErrorMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\FreeValueMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\HashMap.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\HostChannel.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\InvokeMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\InvokeSpecialMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\LoadJsniMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\LoadModuleMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Message.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Platform.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ProtocolVersionMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\QuitMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ReturnMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\scoped_ptr\scoped_ptr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ServerMethods.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\SessionHandler.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Socket.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\SwitchTransportMessage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Value.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="gecko"
+				>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include\js-config.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsapi.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsautocfg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jscompat.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsconfig.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include\jscpucfg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\jscpucfg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\jsinttypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jslong.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\jsosdep.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsotypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsproto.tbl"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jspubtd.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jstypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsutil.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsutil.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsutil.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\js\jsutil.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include\mozilla-config.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\nsAXPCNativeCallContext.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsCOMPtr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nscore.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nscore.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsCycleCollector.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsDebug.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsError.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\widget\nsEvent.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsICategoryManager.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIClassInfo.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIClassInfoImpl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIComponentManager.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsID.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIEnumerator.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIException.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIExceptionService.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIFactory.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIGenericFactory.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\necko\nsIHttpProtocolHandler.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIInterfaceInfo.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIInterfaceInfoManager.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\nsIJSContextStack.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIMemory.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIModule.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\caps\nsIPrincipal.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIProgrammingLanguage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\necko\nsIProtocolHandler.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\necko\nsIProxiedProtocolHandler.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\nsIScriptableInterfaces.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\dom\nsIScriptGlobalObject.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\dom\nsIScriptObjectPrincipal.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\caps\nsISecurityCheckedComponent.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsISerializable.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIServiceManager.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsISimpleEnumerator.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsISimpleEnumerator.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsISupports.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsISupports.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsISupportsBase.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsISupportsBase.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsISupportsImpl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsISupportsUtils.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsISupportsUtils.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsIURI.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsIVariant.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\nsIXPConnect.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsMemory.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\necko\nsNetCID.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsrootidl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\nsrootidl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsServiceManagerUtils.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsStringAPI.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsTraceRefcnt.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsXPCOM.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsXPCOMCID.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\nsXPCOMStrings.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\pratom.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prcpucfg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prinrval.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prlock.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prlog.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prlong.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\obsolete\protypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prthread.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prtime.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\prtypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\xpccomponents.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\xpcexception.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpconnect\xpcjsid.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\WINNT_x86-msvc\include\xpcom-config.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\xpt_arena.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\xpt_struct.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-9.0.0\include\xpcom\xptinfo.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\xpGwtDevPlugin.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\ExternalWrapper.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\FFSessionHandler.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\JavaObject.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\JSRunner.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\ModuleOOPHM.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						GeneratePreprocessedFile="0"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="..\Preferences.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\XpcomDebug.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\xpGwtDevPlugin.def"
+				>
+			</File>
+			<Filter
+				Name="common"
+				>
+				<File
+					RelativePath="..\..\common\AllowedConnections.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\CheckVersionsMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ChooseTransportMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Debug.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\FatalErrorMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\FreeValueMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\HostChannel.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\InvokeMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\InvokeSpecialMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\LoadJsniMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\LoadModuleMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ProtocolVersionMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ReturnMessage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\ServerMethods.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\Socket.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\common\SwitchTransportMessage.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/plugins/xpcom/XpcomDebug.cpp b/plugins/xpcom/XpcomDebug.cpp
index 826cf04..cb18b29 100644
--- a/plugins/xpcom/XpcomDebug.cpp
+++ b/plugins/xpcom/XpcomDebug.cpp
@@ -77,7 +77,8 @@
     snprintf(buf, sizeof(buf), "bool(%s)", JSVAL_TO_BOOLEAN(v) ? "true"
         : " false");
   } else {
-    snprintf(buf, sizeof(buf), "unknown(%08x)", (unsigned) v);
+    // TODO(acleung): When we run into this, use the other api to figure out what v is.
+    // snprintf(buf, sizeof(buf), "unknown(%08x)", (unsigned) v);
   }
   buf[sizeof(buf) - 1] = 0;
   return std::string(buf);
diff --git a/plugins/xpcom/install-template.rdf b/plugins/xpcom/install-template.rdf
index 21c3ba0..163ed5a 100644
--- a/plugins/xpcom/install-template.rdf
+++ b/plugins/xpcom/install-template.rdf
@@ -12,7 +12,7 @@
       <Description>
         <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
         <em:minVersion>3.0</em:minVersion>
-        <em:maxVersion>8.0.*</em:maxVersion>
+        <em:maxVersion>9.0.*</em:maxVersion>
       </Description>
     </em:targetApplication>
 
diff --git a/plugins/xpcom/prebuilt/extension/chrome.manifest b/plugins/xpcom/prebuilt/extension/chrome.manifest
index f5f39dd..fd48201 100644
--- a/plugins/xpcom/prebuilt/extension/chrome.manifest
+++ b/plugins/xpcom/prebuilt/extension/chrome.manifest
@@ -38,5 +38,12 @@
 binary-component lib/Darwin-gcc3/ff80/libgwt_dev_ff80.dylib ABI=Darwin_x86-gcc3 appversion<=8.0.*
 binary-component lib/WINNT_x86-msvc/ff80/xpGwtDevPlugin.dll ABI=WINNT_x86-msvc appversion<=8.0.*
 
+# Firefox 9
+binary-component lib/Linux_x86_64-gcc3/ff90/libgwt_dev_ff90.so ABI=Linux_x86_64-gcc3 appversion<=9.0.*
+binary-component lib/Linux_x86-gcc3/ff90/libgwt_dev_ff90.so ABI=Linux_x86-gcc3 appversion<=9.0.*
+binary-component lib/Darwin-gcc3/ff90/libgwt_dev_ff90.dylib ABI=Darwin_x86_64-gcc3 appversion<=9.0.*
+binary-component lib/Darwin-gcc3/ff90/libgwt_dev_ff90.dylib ABI=Darwin_x86-gcc3 appversion<=9.0.*
+binary-component lib/WINNT_x86-msvc/ff90/xpGwtDevPlugin.dll ABI=WINNT_x86-msvc appversion<=9.0.*
+
 interfaces components/IOOPHM.xpt
 contract @gwt.google.com/ExternalWrapper;1 {028DD88B-6D65-401D-AAFD-17E497D15D09}
diff --git a/plugins/xpcom/prebuilt/extension/lib/Darwin-gcc3/ff90/libgwt_dev_ff90.dylib b/plugins/xpcom/prebuilt/extension/lib/Darwin-gcc3/ff90/libgwt_dev_ff90.dylib
new file mode 100755
index 0000000..8b6b066
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/lib/Darwin-gcc3/ff90/libgwt_dev_ff90.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3+/libgwt_dev_ff3+.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3+/libgwt_dev_ff3+.so
index fe05e1b..5bd1445 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3+/libgwt_dev_ff3+.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3+/libgwt_dev_ff3+.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3/libgwt_dev_ff3.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3/libgwt_dev_ff3.so
index e1bf96b..6f16d23 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3/libgwt_dev_ff3.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff3/libgwt_dev_ff3.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff35/libgwt_dev_ff35.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff35/libgwt_dev_ff35.so
index 910e4fe..6be2bfa 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff35/libgwt_dev_ff35.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff35/libgwt_dev_ff35.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff36/libgwt_dev_ff36.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff36/libgwt_dev_ff36.so
index 9fe2794..8bfca75 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff36/libgwt_dev_ff36.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff36/libgwt_dev_ff36.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff40/libgwt_dev_ff40.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff40/libgwt_dev_ff40.so
index e33d5cc..3b7fd5c 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff40/libgwt_dev_ff40.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff40/libgwt_dev_ff40.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff50/libgwt_dev_ff50.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff50/libgwt_dev_ff50.so
index 1b159b0..f14318d 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff50/libgwt_dev_ff50.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff50/libgwt_dev_ff50.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff60/libgwt_dev_ff60.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff60/libgwt_dev_ff60.so
index dbbe645..4eeeb88 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff60/libgwt_dev_ff60.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff60/libgwt_dev_ff60.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff70/libgwt_dev_ff70.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff70/libgwt_dev_ff70.so
index 3493fef..9e72523 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff70/libgwt_dev_ff70.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff70/libgwt_dev_ff70.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff80/libgwt_dev_ff80.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff80/libgwt_dev_ff80.so
index 5592fed..8c0d4f4 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff80/libgwt_dev_ff80.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff80/libgwt_dev_ff80.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff90/libgwt_dev_ff90.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff90/libgwt_dev_ff90.so
new file mode 100755
index 0000000..7a2bfff
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86-gcc3/ff90/libgwt_dev_ff90.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3+/libgwt_dev_ff3+.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3+/libgwt_dev_ff3+.so
index 7adf26f..78e1d94 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3+/libgwt_dev_ff3+.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3+/libgwt_dev_ff3+.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3/libgwt_dev_ff3.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3/libgwt_dev_ff3.so
index 33a32e1..70db0c6 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3/libgwt_dev_ff3.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff3/libgwt_dev_ff3.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff35/libgwt_dev_ff35.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff35/libgwt_dev_ff35.so
index 06b9ddc..0d44a8d 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff35/libgwt_dev_ff35.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff35/libgwt_dev_ff35.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff36/libgwt_dev_ff36.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff36/libgwt_dev_ff36.so
index 5ec651a..fbbb3c5 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff36/libgwt_dev_ff36.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff36/libgwt_dev_ff36.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff40/libgwt_dev_ff40.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff40/libgwt_dev_ff40.so
index 055a3fd..2e7566e 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff40/libgwt_dev_ff40.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff40/libgwt_dev_ff40.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff50/libgwt_dev_ff50.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff50/libgwt_dev_ff50.so
index 6b8dbdb..a528ffc 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff50/libgwt_dev_ff50.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff50/libgwt_dev_ff50.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff60/libgwt_dev_ff60.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff60/libgwt_dev_ff60.so
index 8474cf7..eeae984 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff60/libgwt_dev_ff60.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff60/libgwt_dev_ff60.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff70/libgwt_dev_ff70.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff70/libgwt_dev_ff70.so
index ff0e788..724bb52 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff70/libgwt_dev_ff70.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff70/libgwt_dev_ff70.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff80/libgwt_dev_ff80.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff80/libgwt_dev_ff80.so
index f45c575..4fe7633 100755
--- a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff80/libgwt_dev_ff80.so
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff80/libgwt_dev_ff80.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff90/libgwt_dev_ff90.so b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff90/libgwt_dev_ff90.so
new file mode 100755
index 0000000..065c062
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/lib/Linux_x86_64-gcc3/ff90/libgwt_dev_ff90.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/lib/WINNT_x86-msvc/ff90/xpGwtDevPlugin.dll b/plugins/xpcom/prebuilt/extension/lib/WINNT_x86-msvc/ff90/xpGwtDevPlugin.dll
new file mode 100755
index 0000000..bcf7476
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/lib/WINNT_x86-msvc/ff90/xpGwtDevPlugin.dll
Binary files differ
diff --git a/plugins/xpcom/prebuilt/gwt-dev-plugin.xpi b/plugins/xpcom/prebuilt/gwt-dev-plugin.xpi
index a332a8d..d52faa5 100644
--- a/plugins/xpcom/prebuilt/gwt-dev-plugin.xpi
+++ b/plugins/xpcom/prebuilt/gwt-dev-plugin.xpi
Binary files differ
diff --git a/plugins/xpcom/prebuilt/update.rdf b/plugins/xpcom/prebuilt/update.rdf
index 9ca0f40..7581898 100644
--- a/plugins/xpcom/prebuilt/update.rdf
+++ b/plugins/xpcom/prebuilt/update.rdf
@@ -14,7 +14,7 @@
               <Description>
                 <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                 <em:minVersion>3.0</em:minVersion>
-                <em:maxVersion>8.0.*</em:maxVersion>
+                <em:maxVersion>9.0.*</em:maxVersion>
                 <em:updateLink>https://dl-ssl.google.com/gwt/plugins/firefox/gwt-dev-plugin.xpi</em:updateLink>
                 <em:updateInfoURL>https://dl-ssl.google.com/gwt/plugins/firefox/gwt-dev-plugin-info.xhtml?locale=%APP_LOCALE%</em:updateInfoURL>