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/common/HostChannel.cpp b/plugins/common/HostChannel.cpp
index bff1b21..2cabb01 100644
--- a/plugins/common/HostChannel.cpp
+++ b/plugins/common/HostChannel.cpp
@@ -83,6 +83,7 @@
     disconnectFromHost();
     return false;
   }
+
   switch (type) {
     case MESSAGE_TYPE_PROTOCOL_VERSION:
     {
@@ -237,11 +238,10 @@
   char type;
   while (true) {
     flush();
-    Debug::log(Debug::Spam) << "Waiting for response, flushed output"
-        << Debug::flush;
+    Debug::log(Debug::Debugging) << "Waiting for response, flushed output" << Debug::flush;
     if (!readByte(type)) {
       if (isConnected()) {
-        Debug::log(Debug::Error) << "Failed to receive message type"
+        Debug::log(Debug::Debugging) << "Failed to receive message type"
             << Debug::flush;
       }
       return 0;
@@ -254,7 +254,7 @@
             Debug::log(Debug::Error) << "Failed to receive invoke message" << Debug::flush;
             return 0;
           }
-          Value returnValue;
+          gwt::Value returnValue;
           bool exception = handler->invoke(*this, imsg->getThis(), imsg->getMethodName(),
               imsg->getNumArgs(), imsg->getArgs(), &returnValue);
           handler->sendFreeValues(*this);
@@ -269,7 +269,7 @@
             Debug::log(Debug::Error) << "Failed to receive invoke special message" << Debug::flush;
             return 0;
           }
-          Value returnValue;
+          gwt::Value returnValue;
           bool exception = handler->invokeSpecial(*this, imsg->getDispatchId(),
               imsg->getNumArgs(), imsg->getArgs(), &returnValue);
           handler->sendFreeValues(*this);
@@ -319,81 +319,81 @@
   }
 }
 
-bool HostChannel::readValue(Value& valueRef) {
+bool HostChannel::readValue(gwt::Value& valueRef) {
   char typeBuf;
   if (!readByte(typeBuf)) return false;
-  Value::ValueType type = Value::ValueType(typeBuf);
+  gwt::Value::ValueType type = gwt::Value::ValueType(typeBuf);
   switch (type) {
-    case Value::NULL_TYPE:
+    case gwt::Value::NULL_TYPE:
       valueRef.setNull();
       return true;
-    case Value::UNDEFINED:
+    case gwt::Value::UNDEFINED:
       valueRef.setUndefined();
       return true;
-    case Value::BOOLEAN:
+    case gwt::Value::BOOLEAN:
       {
         char val;
         if (!readByte(val)) return false;
         valueRef.setBoolean(val != 0);
       }
       return true;
-    case Value::BYTE:
+    case gwt::Value::BYTE:
       {
         char val;
         if (!readByte(val)) return false;
         valueRef.setByte(val);
       }
       return true;
-    case Value::CHAR:
+    case gwt::Value::CHAR:
       {
         short val;
         if (!readShort(val)) return false;
         valueRef.setChar(val);
       }
       return true;
-    case Value::SHORT:
+    case gwt::Value::SHORT:
       {
         short val;
         if (!readShort(val)) return false;
         valueRef.setShort(val);
       }
       return true;
-    case Value::STRING:
+    case gwt::Value::STRING:
       {
         std::string val;
         if (!readString(val)) return false;
         valueRef.setString(val);
       }
       return true;
-    case Value::INT:
+    case gwt::Value::INT:
       {
         int val;
         if (!readInt(val)) return false;
         valueRef.setInt(val);
       }
       return true;
-    case Value::LONG:
+    case gwt::Value::LONG:
       {
         int64_t val;
         if (!readLong(val)) return false;
         valueRef.setLong(val);
       }
       return true;
-    case Value::DOUBLE:
+    case gwt::Value::DOUBLE:
       {
         double val;
         if (!readDouble(val)) return false;
         valueRef.setDouble(val);
       }
       return true;
-    case Value::JAVA_OBJECT:
+    case gwt::Value::JAVA_OBJECT:
       {
         int objId;
         if (!readInt(objId)) return false;
         valueRef.setJavaObject(objId);
       }
       return true;
-    case Value::JS_OBJECT:
+    case gwt::Value::JS_OBJECT:
       {
         int val;
         if (!readInt(val)) return false;
@@ -407,35 +407,35 @@
   return false;
 }
 
-bool HostChannel::sendValue(const Value& value) {
-  Value::ValueType type = value.getType();
+bool HostChannel::sendValue(const gwt::Value& value) {
+  gwt::Value::ValueType type = value.getType();
   if (!sendByte(type)) return false;
   switch (type) {
-    case Value::NULL_TYPE:
-    case Value::UNDEFINED:
+    case gwt::Value::NULL_TYPE:
+    case gwt::Value::UNDEFINED:
       // Null and Undefined only have the tag byte, no data
       return true;
-    case Value::BOOLEAN:
+    case gwt::Value::BOOLEAN:
       return sendByte(value.getBoolean() ? 1 : 0);
-    case Value::BYTE:
+    case gwt::Value::BYTE:
       return sendByte(value.getByte());
-    case Value::CHAR:
+    case gwt::Value::CHAR:
       return sendShort(short(value.getChar()));
-    case Value::SHORT:
+    case gwt::Value::SHORT:
       return sendShort(value.getShort());
-    case Value::INT:
+    case gwt::Value::INT:
       return sendInt(value.getInt());
-    case Value::LONG:
+    case gwt::Value::LONG:
       return sendLong(value.getLong());
-    case Value::STRING:
+    case gwt::Value::STRING:
       return sendString(value.getString());
-    case Value::DOUBLE:
+    case gwt::Value::DOUBLE:
       return sendDouble(value.getDouble());
-    case Value::FLOAT:
+    case gwt::Value::FLOAT:
       return sendFloat(value.getFloat());
-    case Value::JS_OBJECT:
+    case gwt::Value::JS_OBJECT:
       return sendInt(value.getJsObjectId());
-    case Value::JAVA_OBJECT:
+    case gwt::Value::JAVA_OBJECT:
       return sendInt(value.getJavaObjectId());
     default:
       Debug::log(Debug::Error) << "Unhandled value type sent to server: " << type << Debug::flush;
diff --git a/plugins/common/HostChannel.h b/plugins/common/HostChannel.h
index 3c5c5e3..e8a53ec 100644
--- a/plugins/common/HostChannel.h
+++ b/plugins/common/HostChannel.h
@@ -131,8 +131,8 @@
     return sendString(str.c_str(), static_cast<uint32_t>(str.length()));
   }
 
-  bool readValue(Value& valueRef);
-  bool sendValue(const Value& value);
+  bool readValue(gwt::Value& valueRef);
+  bool sendValue(const gwt::Value& value);
 
   ReturnMessage* reactToMessages(SessionHandler* handler, bool expectReturn);
 
diff --git a/plugins/common/InvokeMessage.cpp b/plugins/common/InvokeMessage.cpp
index 90fc790..9207f81 100644
--- a/plugins/common/InvokeMessage.cpp
+++ b/plugins/common/InvokeMessage.cpp
@@ -38,7 +38,7 @@
     printf("Failed to read method name\n");
     return 0;
   }
-  Value thisRef;
+  gwt::Value thisRef;
   if (!channel.readValue(thisRef)) {
     // TODO(jat): error handling
     printf("Failed to read thisRef\n");
@@ -50,7 +50,7 @@
     printf("Failed to read #args\n");
     return 0;
   }
-  scoped_array<Value> args(new Value[numArgs]);
+  scoped_array<gwt::Value> args(new gwt::Value[numArgs]);
   for (int i = 0; i < numArgs; ++i) {
     if (!channel.readValue(args[i])) {
       // TODO(jat): error handling
@@ -66,8 +66,8 @@
  * 
  * Note that the method to be invoked is sent as an integer (a dispatch id) to the server.
  */
-bool InvokeMessage::send(HostChannel& channel, const Value& thisRef, int methodDispatchId,
-    int numArgs, const Value* args) {
+bool InvokeMessage::send(HostChannel& channel, const gwt::Value& thisRef, int methodDispatchId,
+    int numArgs, const gwt::Value* args) {
   if (!channel.sendByte(TYPE)) return false;
   if (!channel.sendInt(methodDispatchId)) return false;
   if (!channel.sendValue(thisRef)) return false;
diff --git a/plugins/common/InvokeMessage.h b/plugins/common/InvokeMessage.h
index 7d57e30..0296d75 100644
--- a/plugins/common/InvokeMessage.h
+++ b/plugins/common/InvokeMessage.h
@@ -36,32 +36,32 @@
   static const char TYPE = MESSAGE_TYPE_INVOKE;
   static const int TOSTRING_DISP_ID = 0;
 private:
-  Value thisRef;
+  gwt::Value thisRef;
   std::string methodName;
   int methodDispatchId;
   int numArgs;
-  const Value* args;
+  const gwt::Value* args;
 
 protected:
   /**
    * @param args array of arguments -- InvokeMessage takes ownership and will
    *     destroy when it is destroyed.
    */
-  InvokeMessage(const Value& thisRef, const std::string& methodName,
-      int numArgs, const Value* args) : thisRef(thisRef), methodName(methodName),
+  InvokeMessage(const gwt::Value& thisRef, const std::string& methodName,
+      int numArgs, const gwt::Value* args) : thisRef(thisRef), methodName(methodName),
       numArgs(numArgs), args(args) {}
 
 public:
   ~InvokeMessage();
   virtual char getType() const;
 
-  Value getThis() const { return thisRef; }
+  gwt::Value getThis() const { return thisRef; }
   const std::string& getMethodName() const { return methodName; }
   int getNumArgs() const { return numArgs; }
-  const Value* const getArgs() const { return args; }
+  const gwt::Value* const getArgs() const { return args; }
 
   static InvokeMessage* receive(HostChannel& channel);
-  static bool send(HostChannel& channel, const Value& thisRef, int methodDispatchId,
-      int numArgs, const Value* args);
+  static bool send(HostChannel& channel, const gwt::Value& thisRef, int methodDispatchId,
+      int numArgs, const gwt::Value* args);
 };
 #endif
diff --git a/plugins/common/InvokeSpecialMessage.cpp b/plugins/common/InvokeSpecialMessage.cpp
index 5fd1540..0a9f418 100644
--- a/plugins/common/InvokeSpecialMessage.cpp
+++ b/plugins/common/InvokeSpecialMessage.cpp
@@ -45,7 +45,7 @@
     printf("Failed to read #args\n");
     return 0;
   }
-  scoped_array<Value> args(new Value[numArgs]);
+  scoped_array<gwt::Value> args(new gwt::Value[numArgs]);
   for (int i = 0; i < numArgs; ++i) {
     if (!channel.readValue(args[i])) {
       // TODO(jat): error handling
@@ -63,7 +63,7 @@
  * Request the server perform a special method and return the result.
  */
 bool InvokeSpecialMessage::send(HostChannel& channel, int dispatchId,
-    int numArgs, const Value* args) {
+    int numArgs, const gwt::Value* args) {
   if (!channel.sendByte(TYPE)) return false;
   if (!channel.sendByte(dispatchId)) return false;
   if (!channel.sendInt(numArgs)) return false;
diff --git a/plugins/common/InvokeSpecialMessage.h b/plugins/common/InvokeSpecialMessage.h
index 5888cc1..84c90ff 100644
--- a/plugins/common/InvokeSpecialMessage.h
+++ b/plugins/common/InvokeSpecialMessage.h
@@ -34,15 +34,15 @@
 private:
   SessionHandler::SpecialMethodId dispatchId;
   int numArgs;
-  const Value* args;
+  const gwt::Value* args;
 
 protected:
   /**
    * @param args array of arguments -- InvokeMessage takes ownership and will
    *     destroy when it is destroyed.
    */
-  InvokeSpecialMessage(SessionHandler::SpecialMethodId dispatchId, int numArgs, const Value* args) : dispatchId(dispatchId),
-      numArgs(numArgs), args(args) {}
+  InvokeSpecialMessage(SessionHandler::SpecialMethodId dispatchId, int numArgs,
+      const gwt::Value* args) : dispatchId(dispatchId), numArgs(numArgs), args(args) {}
 
 public:
   ~InvokeSpecialMessage();
@@ -50,10 +50,10 @@
 
   SessionHandler::SpecialMethodId getDispatchId() const { return dispatchId; }
   int getNumArgs() const { return numArgs; }
-  const Value* const getArgs() const { return args; }
+  const gwt::Value* const getArgs() const { return args; }
 
   static InvokeSpecialMessage* receive(HostChannel& channel);
   static bool send(HostChannel& channel, int dispatchId, int numArgs,
-      const Value* args);
+      const gwt::Value* args);
 };
 #endif
diff --git a/plugins/common/LoadModuleMessage.cpp b/plugins/common/LoadModuleMessage.cpp
index 1ee4ab3..525383b 100644
--- a/plugins/common/LoadModuleMessage.cpp
+++ b/plugins/common/LoadModuleMessage.cpp
@@ -30,7 +30,7 @@
     const std::string& tabKey, const std::string& sessionKey,
     const std::string& moduleName, const std::string& userAgent,
     SessionHandler* handler) {
-  Debug::log(Debug::Spam) << "LoadModule(url=\"" << url << "\", tabKey=\""
+  Debug::log(Debug::Debugging) << "LoadModule(url=\"" << url << "\", tabKey=\""
       << "\", sessionKey=\"" << sessionKey << "\", module=\"" << moduleName
       << "\")" << Debug::flush;
   if (!channel.sendByte(TYPE) || !channel.sendString(url)
@@ -45,6 +45,5 @@
   if (!ret.get()) {
     return false;
   }
-
   return !ret.get()->isException();
 }
diff --git a/plugins/common/ReturnMessage.cpp b/plugins/common/ReturnMessage.cpp
index 0149c1f..159d009 100644
--- a/plugins/common/ReturnMessage.cpp
+++ b/plugins/common/ReturnMessage.cpp
@@ -27,7 +27,7 @@
     // TODO(jat): error handling
     return 0;
   }
-  Value retval;
+  gwt::Value retval;
   if (!channel.readValue(retval)) {
     // TODO(jat): error handling
     return 0;
@@ -35,7 +35,7 @@
   return new ReturnMessage(isException != 0, retval);
 }
 
-bool ReturnMessage::send(HostChannel& channel, bool isException, const Value& retval) {
+bool ReturnMessage::send(HostChannel& channel, bool isException, const gwt::Value& retval) {
   if (!channel.sendByte(TYPE)) return false;
   if (!channel.sendByte(isException ? 1 : 0)) return false;
   return channel.sendValue(retval);
diff --git a/plugins/common/ReturnMessage.h b/plugins/common/ReturnMessage.h
index 374b9fe..29141ec 100644
--- a/plugins/common/ReturnMessage.h
+++ b/plugins/common/ReturnMessage.h
@@ -34,17 +34,17 @@
   static const char TYPE = MESSAGE_TYPE_RETURN;
 private:
   bool bisException;
-  Value retval;
+  gwt::Value retval;
 
 public:
-  ReturnMessage(bool isException, const Value& retValue) : bisException(isException),
+  ReturnMessage(bool isException, const gwt::Value& retValue) : bisException(isException),
       retval(retValue) {}
 
   bool isException() const { return bisException; }
-  const Value& getReturnValue() const { return retval; }
+  const gwt::Value& getReturnValue() const { return retval; }
   virtual char getType() const;
 
   static ReturnMessage* receive(HostChannel& channel);
-  static bool send(HostChannel& channel, bool isException, const Value& retValue);
+  static bool send(HostChannel& channel, bool isException, const gwt::Value& retValue);
 };
 #endif
diff --git a/plugins/common/ServerMethods.cpp b/plugins/common/ServerMethods.cpp
index 0be51b0..672b44a 100644
--- a/plugins/common/ServerMethods.cpp
+++ b/plugins/common/ServerMethods.cpp
@@ -27,26 +27,26 @@
 
 using std::string;
 
-Value ServerMethods::getProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
+gwt::Value ServerMethods::getProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
     int dispatchId) {
   if (!channel.isConnected()) {
     Debug::log(Debug::Debugging) << "Ignoring getProperty after disconnect"
         << Debug::flush;
-    return Value();
+    return gwt::Value();
   }
-  Value args[2];
+  gwt::Value args[2];
   args[0].setInt(objectRef);
   args[1].setInt(dispatchId);
   if (!InvokeSpecialMessage::send(channel, SPECIAL_GET_PROPERTY, 2, args)) {
     Debug::log(Debug::Error) << "  failed to send invoke of GetProperty(disp=" << dispatchId
         << ", obj=" << objectRef << ")" << Debug::flush;
-    return Value();
+    return gwt::Value();
   }
   scoped_ptr<ReturnMessage> retMsg(channel.reactToMessagesWhileWaitingForReturn(handler));
   if (!retMsg.get()) {
     Debug::log(Debug::Error) << "getProperty: get return value failed for GetProperty(disp="
         << dispatchId << ", obj=" << objectRef << ")" << Debug::flush;
-    return Value();
+    return gwt::Value();
   }
   return retMsg->getReturnValue();
 }
@@ -62,7 +62,7 @@
         << Debug::flush;
     return -2;
   }
-  Value arg;
+  gwt::Value arg;
   arg.setString(name);
   if (!InvokeSpecialMessage::send(channel, SPECIAL_HAS_METHOD, 1, &arg)) {
     Debug::log(Debug::Error) << "hasMethod: invoke(hasMethod) failed" << Debug::flush;
@@ -73,7 +73,7 @@
     Debug::log(Debug::Error) << "hasMethod: get return value failed" << Debug::flush;
     return -2;
   }
-  Value retval = retMsg->getReturnValue();
+  gwt::Value retval = retMsg->getReturnValue();
   // TODO(jat): better error handling?
   return retval.isInt() ? retval.getInt() : -2;
 }
@@ -89,7 +89,7 @@
         << Debug::flush;
     return -2;
   }
-  Value arg;
+  gwt::Value arg;
   arg.setString(name);
   if (!InvokeSpecialMessage::send(channel, SPECIAL_HAS_PROPERTY, 1, &arg)) {
     Debug::log(Debug::Error) << "hasProperty: invoke(hasProperty) failed" << Debug::flush;
@@ -100,20 +100,20 @@
     Debug::log(Debug::Error) << "hasProperty: get return value failed" << Debug::flush;
     return -2;
   }
-  Value retval = retMsg->getReturnValue();
+  gwt::Value retval = retMsg->getReturnValue();
   // TODO(jat): better error handling?
   return retval.isInt() ? retval.getInt() : -2;
 }
 
 bool ServerMethods::setProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
-    int dispatchId, const Value& value) {
+    int dispatchId, const gwt::Value& value) {
   if (!channel.isConnected()) {
     Debug::log(Debug::Debugging) << "Ignoring setProperty after disconnect"
         << Debug::flush;
     return false;
   }
   // TODO(jat): error handling?
-  Value args[3];
+  gwt::Value args[3];
   args[0].setInt(objectRef);
   args[1].setInt(dispatchId);
   args[2] = value;
diff --git a/plugins/common/ServerMethods.h b/plugins/common/ServerMethods.h
index 3ff0134..02bf921 100644
--- a/plugins/common/ServerMethods.h
+++ b/plugins/common/ServerMethods.h
@@ -33,7 +33,7 @@
    * @param dispatchID dispatch ID of field
    * @return the value of the property, undef if none (or on error)
    */
-  static Value getProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
+  static gwt::Value getProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
       int dispatchId);
   
   /**
@@ -63,7 +63,7 @@
    * @return false if an error occurred
    */
   static bool setProperty(HostChannel& channel, SessionHandler* handler, int objectRef,
-      int dispatchId, const Value& value);
+      int dispatchId, const gwt::Value& value);
   
   /**
    * Tell the server that the client no longer has any references to the specified
diff --git a/plugins/common/SessionHandler.h b/plugins/common/SessionHandler.h
index aebd00d..159f762 100644
--- a/plugins/common/SessionHandler.h
+++ b/plugins/common/SessionHandler.h
@@ -84,8 +84,9 @@
    *
    * Returns true if an exception occurred.
    */
-  virtual bool invoke(HostChannel& channel, const Value& thisObj, const std::string& methodName,
-      int numArgs, const Value* const args, Value* returnValue)=0;
+  virtual bool invoke(HostChannel& channel, const gwt::Value& thisObj,
+      const std::string& methodName, int numArgs, const gwt::Value* const args,
+      gwt::Value* returnValue) = 0;
 
   /**
    * Invoke a plugin-provided method with the given args.  As above, this method does not own
@@ -94,7 +95,7 @@
    * Returns true if an exception occurred.
    */
   virtual bool invokeSpecial(HostChannel& channel, SpecialMethodId method, int numArgs,
-      const Value* const args, Value* returnValue) = 0;
+      const gwt::Value* const args, gwt::Value* returnValue) = 0;
 
   /**
    * Send any queued up free values back to the server.
diff --git a/plugins/common/Value.h b/plugins/common/Value.h
index d19b0b5..ab50f5e 100644
--- a/plugins/common/Value.h
+++ b/plugins/common/Value.h
@@ -27,6 +27,7 @@
 
 #include "BrowserChannel.h"
 
+namespace gwt {
 class Value {
 public:
   enum ValueType {
@@ -393,4 +394,6 @@
   return dbg;
 }
 
+} // namespace gwt
+
 #endif
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>