Add security controls to all plugins, get plugins build for all tier-1
platforms.

Patch by: jat
Review by: amitmanjhi, jaimeyap


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6085 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/plugins/xpcom/ExternalWrapper.cpp b/plugins/xpcom/ExternalWrapper.cpp
index 1d54747..afb7040 100644
--- a/plugins/xpcom/ExternalWrapper.cpp
+++ b/plugins/xpcom/ExternalWrapper.cpp
@@ -22,6 +22,7 @@
 #include "nsCOMPtr.h"
 #include "nsMemory.h"
 #include "nsServiceManagerUtils.h"
+#include "nsIPromptService.h"
 
 #ifndef NS_IMPL_ISUPPORTS2_CI
 #include "nsIClassInfoImpl.h" // 1.9 only
@@ -30,11 +31,20 @@
 #include "LoadModuleMessage.h"
 #include "ServerMethods.h"
 #include "BrowserChannel.h"
+#include "AllowedConnections.h"
 
 NS_IMPL_ISUPPORTS2_CI(ExternalWrapper, IOOPHM, nsISecurityCheckedComponent)
 
 ExternalWrapper::ExternalWrapper() {
-  Debug::log(Debug::Spam) << "ExternalWrapper::ExternalWrapper()" << Debug::flush;
+  Debug::log(Debug::Spam) << "ExternalWrapper::ExternalWrapper()"
+      << Debug::flush;
+  preferences = new Preferences();
+  windowWatcher = do_GetService(NS_WINDOWWATCHER_CONTRACTID);
+  if (!windowWatcher) {
+    Debug::log(Debug::Warning) << "Can't get WindowWatcher service"
+        << Debug::flush;
+    return;
+  }
 }
 
 ExternalWrapper::~ExternalWrapper() {
@@ -59,13 +69,60 @@
   return NS_OK;
 }
 
-// TODO: handle context object passed in (currently nsIDOMWindow below)
-NS_IMETHODIMP ExternalWrapper::Init(nsIDOMWindow* domWindow, PRBool *_retval) {
+std::string ExternalWrapper::computeTabIdentity() {
+  std::string returnVal;
+  if (!windowWatcher) {
+    return returnVal;
+  }
+  nsCOMPtr<nsIDOMWindow> topWindow(domWindow);
+  if (topWindow->GetTop(getter_AddRefs(topWindow)) != NS_OK) {
+    Debug::log(Debug::Warning) << "Unable to get top window" << Debug::flush;
+    return returnVal;
+  }
+  nsCOMPtr<nsIWebBrowserChrome> chrome;
+  if (windowWatcher->GetChromeForWindow(topWindow.get(),
+      getter_AddRefs(chrome)) != NS_OK) {
+    Debug::log(Debug::Warning) << "Unable to get browser chrome for window"
+        << Debug::flush;
+    return returnVal;
+  }
+  Debug::log(Debug::Debugging) << "computeTabIdentity: browserChrome = "
+      << (void*) chrome.get() << Debug::flush;
+  // TODO(jat): find a way to get the tab from the chrome window
+  return returnVal;
+}
+
+NS_IMETHODIMP ExternalWrapper::Init(nsIDOMWindow* domWindow,
+    PRBool *_retval) {
   Debug::log(Debug::Spam) << "Init" << Debug::flush;
+  this->domWindow = domWindow;
   *_retval = true;
   return NS_OK;
 }
 
+bool ExternalWrapper::askUserToAllow(const std::string& url) {
+  nsCOMPtr<nsIPromptService> promptService = do_GetService(
+      "@mozilla.org/embedcomp/prompt-service;1");
+  if (!promptService) {
+    return false;
+  }
+  NS_ConvertASCIItoUTF16 title("Allow GWT Development Mode Connection");
+  NS_ConvertASCIItoUTF16 text("This web server is requesting a GWT "
+      "development mode connection -- do you want to allow it?");
+  NS_ConvertASCIItoUTF16 checkMsg("Remember this decision for this server "
+      "(change in GWT plugin preferences)");
+  PRBool remember = false;
+  PRBool include = true;
+  if (promptService->ConfirmCheck(domWindow.get(), title.get(), text.get(),
+      checkMsg.get(), &remember, &include) != NS_OK) {
+    return false;
+  }
+  if (remember) {
+    preferences->addNewRule(AllowedConnections::getHostFromUrl(url), !include);
+  }
+  return include;
+}
+
 NS_IMETHODIMP ExternalWrapper::Connect(const nsACString& url,
 		const nsACString& sessionKey, const nsACString& aAddr,
 		const nsACString& aModuleName, const nsACString& hostedHtmlVersion,
@@ -81,6 +138,17 @@
   nsCString moduleAutoStr(aModuleName);
   nsCString hostedHtmlVersionAutoStr(hostedHtmlVersion);
   std::string hostedUrl(addrAutoStr.get());
+  std::string urlStr(urlAutoStr.get());
+
+  bool allowed = false;
+  if (!AllowedConnections::matchesRule(urlStr, &allowed)) {
+    // If we didn't match an existing rule, prompt the user
+    allowed = askUserToAllow(urlStr);
+  }
+  if (!allowed) {
+    *_retval = false;
+    return NS_OK;
+  }
 
   size_t index = hostedUrl.find(':');
   if (index == std::string::npos) {
@@ -120,8 +188,7 @@
     return res;
   }
 
-  std::string urlStr(urlAutoStr.get());
-  std::string tabKeyStr(""); // TODO(jat): add support for tab identity
+  std::string tabKeyStr = computeTabIdentity();
   std::string sessionKeyStr(sessionKeyAutoStr.get());
 
   LoadModuleMessage::send(*channel, urlStr, tabKeyStr, sessionKeyStr,
diff --git a/plugins/xpcom/ExternalWrapper.h b/plugins/xpcom/ExternalWrapper.h
index a21204c..d840827 100755
--- a/plugins/xpcom/ExternalWrapper.h
+++ b/plugins/xpcom/ExternalWrapper.h
@@ -2,13 +2,13 @@
 #define _H_ExternalWrapper
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,11 +22,16 @@
 
 #include "IOOPHM.h"
 
+#include "Preferences.h"
 #include "FFSessionHandler.h"
 #include "Debug.h"
 #include "scoped_ptr/scoped_ptr.h"
+
+#include "nsCOMPtr.h"
 #include "nsISecurityCheckedComponent.h"
 #include "nsStringAPI.h"
+#include "nsIWindowWatcher.h"
+#include "nsIDOMWindow.h"
 
 class nsIDOMWindow;
 
@@ -45,9 +50,28 @@
   NS_DECL_NSISECURITYCHECKEDCOMPONENT
 
   ExternalWrapper();
-  virtual ~ExternalWrapper(); 
+  virtual ~ExternalWrapper();
+
 private:
+  nsCOMPtr<nsIDOMWindow> domWindow;
+  nsCOMPtr<Preferences> preferences;
   scoped_ptr<FFSessionHandler> sessionHandler;
+  nsCOMPtr<nsIWindowWatcher> windowWatcher;
+
+  /**
+   * Prompt the user whether a connection should be allowed, and optionally
+   * update the preferences.
+   */
+  bool askUserToAllow(const std::string& url);
+
+  /**
+   * Compute a stable tab identity value for the DOM window.
+   *
+   * @return a unique tab identifier which is stable across reloads, or an
+   *     empty string if it cannot be computed
+   */
+  std::string computeTabIdentity();
+
 };
 
 inline Debug::DebugStream& operator<<(Debug::DebugStream& dbg, const nsACString& str) {
diff --git a/plugins/xpcom/FFSessionHandler.cpp b/plugins/xpcom/FFSessionHandler.cpp
index 2d74fbe..06a4534 100755
--- a/plugins/xpcom/FFSessionHandler.cpp
+++ b/plugins/xpcom/FFSessionHandler.cpp
@@ -24,9 +24,11 @@
 #include "RootedObject.h"
 #include "InvokeMessage.h"
 #include "ServerMethods.h"
+#include "AllowedConnections.h"
 
 #include "jsapi.h"
 #include "nsCOMPtr.h"
+#include "nsStringAPI.h"
 #include "nsIJSContextStack.h"
 #include "nsIPrincipal.h"
 #include "nsServiceManagerUtils.h"
@@ -45,8 +47,9 @@
   }
 
   if (cx == nsnull) {
-    Debug::log(Debug::Error) << "Null context" << Debug::flush;
-  }  
+    // TODO(jat): figure out why this can be null at plugin unload time
+    Debug::log(Debug::Error) << "GWT DMP: Null JS context" << Debug::flush;
+  }
 
   return cx;
 }
diff --git a/plugins/xpcom/FFSessionHandler.h b/plugins/xpcom/FFSessionHandler.h
index b456dcd..f7fec2b 100755
--- a/plugins/xpcom/FFSessionHandler.h
+++ b/plugins/xpcom/FFSessionHandler.h
@@ -21,6 +21,7 @@
 
 #include "mozincludes.h"
 #include "SessionData.h"
+#include "Preferences.h"
 
 #include "jsapi.h"
 
diff --git a/plugins/xpcom/Makefile b/plugins/xpcom/Makefile
index a1e8186..f36f9dc 100644
--- a/plugins/xpcom/Makefile
+++ b/plugins/xpcom/Makefile
@@ -14,7 +14,7 @@
 
 include ../config.mk
 
-# Make variables intended to be settable fromthe command line:
+# Make variables intended to be settable from the command line:
 #   DEFAULT_FIREFOX_LIBS	points to /usr/lib/firefox or equivalent
 #   PLUGIN_SDKS			points to GWT /plugin-sdks directory
 #   GECKO_PLATFORM		XPCOM ABI (ie, Linux_x86_64-gcc3)
@@ -24,8 +24,8 @@
 DEFAULT_FIREFOX_LIBS ?= /Applications/Firefox.app/Contents/MacOS
 RUN_PATH_FLAG = -executable_path
 DLL_SUFFIX = .dylib
-DLLFLAGS = -bundle -arch i386 -arch ppc
-TARGET_PLATFORM = Darwin_x86-gcc3
+DLLFLAGS = -bundle -arch $(MARCH)
+TARGET_PLATFORM = Darwin_$(ARCH)-gcc3
 # Mac puts multiple architectures into the same files
 GECKO_PLATFORM = Darwin-gcc3
 else
@@ -47,7 +47,7 @@
 export FLAG32BIT
 
 ifeq ($(BROWSER),)
-$(warning Defaulting to FF3 build)
+$(warning Defaulting to FF3 build [set with BROWSER=ff2, ff3, ff3+, or ff35])
 BROWSER=ff3
 endif
 
@@ -89,8 +89,8 @@
 EXTENSION_OUTDIR  = prebuilt/extension-$(BROWSER)
 FF_PLATFORM_DIR   = $(EXTENSION_OUTDIR)/platform/$(TARGET_PLATFORM)
 
-INSTALLER_XPI     = prebuilt/oophm-xpcom-$(BROWSER).xpi
-FF_DLL            = $(OBJ_OUTDIR)/liboophm_$(BROWSER)$(DLL_SUFFIX)
+INSTALLER_XPI     = prebuilt/gwt-dmp-$(BROWSER).xpi
+FF_DLL            = $(OBJ_OUTDIR)/libgwt_dmp_$(BROWSER)$(DLL_SUFFIX)
 #FF_TYPELIB        = build/IOOPHM.xpt
 #FF_HEADER         = $(OBJ_OUTDIR)/IOOPHM.h
 FF_TYPELIB        = prebuilt/extension/components/IOOPHM.xpt
@@ -158,6 +158,7 @@
 		FFSessionHandler.cpp \
 		JavaObject.cpp \
 		JSRunner.cpp \
+		Preferences.cpp \
 		XpcomDebug.cpp
 
 FF_OBJS = $(patsubst %.cpp,$(OBJ_OUTDIR)/%.o,$(SRCS))
@@ -183,10 +184,10 @@
 	$(CXX) -m$(FLAG32BIT) -o $@ $(FF_OBJS) $(COMMON) $(DLLFLAGS) 
 	@mkdir -p $(FF_PLATFORM_DIR)/components
 	cp $(FF_DLL) $(FF_PLATFORM_DIR)/components/
-ifeq ($(OS),mac)
-	@mkdir -p $(subst x86,ppc,$(FF_PLATFORM_DIR))/components
-	cp $(FF_DLL) $(subst x86,ppc,$(FF_PLATFORM_DIR))/components/
-endif
+#ifeq ($(OS),mac)
+#	@mkdir -p $(subst x86,ppc,$(FF_PLATFORM_DIR))/components
+#	cp $(FF_DLL) $(subst x86,ppc,$(FF_PLATFORM_DIR))/components/
+#endif
 
 $(OBJ_OUTDIR)/%.o: %.cpp $(FF_HEADER)
 	$(CXX) $(CXXFLAGS) -c -o $@ -I. -I../common $<
diff --git a/plugins/xpcom/ModuleOOPHM.cpp b/plugins/xpcom/ModuleOOPHM.cpp
index 919d2b3..6fda93c 100644
--- a/plugins/xpcom/ModuleOOPHM.cpp
+++ b/plugins/xpcom/ModuleOOPHM.cpp
@@ -51,7 +51,8 @@
     const char *aLoaderStr, const char *aType,
     const nsModuleComponentInfo *aInfo) {
 
-  Debug::log(Debug::Info) << "Registered GWT hosted mode plugin"
+  Debug::log(Debug::Info)
+      << "  successfully registered GWT Development Mode plugin"
       << Debug::flush;
   nsresult rv;
   nsCOMPtr<nsICategoryManager> categoryManager =
@@ -78,7 +79,7 @@
 static NS_IMETHODIMP unregisterSelf(nsIComponentManager *aCompMgr,
     nsIFile *aPath, const char *aLoaderStr,
     const nsModuleComponentInfo *aInfo) {
-  Debug::log(Debug::Debugging) << "ModuleOOPHM unRegisterSelf()"
+  Debug::log(Debug::Info) << "Unregistered GWT Development Mode plugin"
       << Debug::flush;
   return NS_OK;
 }
@@ -111,7 +112,7 @@
 
 NSGETMODULE_ENTRY_POINT(ExternalWrapperModule) (nsIComponentManager *servMgr,
     nsIFile* location, nsIModule** result) {
-  Debug::log(Debug::Debugging) << "OOPHM ExternalWrapperModule entry point"
+  Debug::log(Debug::Debugging) << "GWT DMP ExternalWrapperModule entry point"
       << Debug::flush;
 
   // CURRENTLY BUILT AS SEPARATE PLUGINS FOR FF1.5/2 and FF3, so the below
@@ -129,7 +130,8 @@
 
   nsCString gecko_version;
   app_info->GetPlatformVersion(gecko_version);
-  Debug::log(Debug::Info) << "  gecko version = "
+  Debug::log(Debug::Info)
+      << "Initializing GWT Development Mode Plugin - gecko version = "
       << gecko_version.BeginReading() << Debug::flush;
 #if defined(BROWSER_FF2)
   if (strncmp(gecko_version.BeginReading(), "1.8", 3) != 0) {
diff --git a/plugins/xpcom/Preferences.cpp b/plugins/xpcom/Preferences.cpp
new file mode 100644
index 0000000..0951711
--- /dev/null
+++ b/plugins/xpcom/Preferences.cpp
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+#include "Preferences.h"
+#include "Debug.h"
+#include "AllowedConnections.h"
+
+#include "nsCOMPtr.h"
+#include "nsStringAPI.h"
+#include "nsISupportsImpl.h"
+#include "nsIObserver.h"
+#include "nsIPrefService.h"
+#include "nsIPrefBranch.h"
+#include "nsIPrefBranch2.h"
+#include "nsServiceManagerUtils.h"
+
+#define DMP_PREFS_PREFIX "gwt-dmp."
+#define DMP_ACCESS_LIST "accessList"
+
+NS_IMPL_ADDREF(Preferences)
+NS_IMPL_RELEASE(Preferences)
+NS_IMPL_QUERY_INTERFACE1(Preferences, nsIObserver)
+
+Preferences::Preferences() {
+  nsCOMPtr<nsIPrefService> prefService = do_GetService(
+      NS_PREFSERVICE_CONTRACTID);
+  if (!prefService) {
+    Debug::log(Debug::Error) << "Unable to get preference service" << Debug::flush;
+    return;
+  }
+  nsCOMPtr<nsIPrefBranch> branch;
+  prefService->GetBranch(DMP_PREFS_PREFIX, getter_AddRefs(branch));
+  if (!branch) {
+    Debug::log(Debug::Error) << "Unable to get gwt-dmp. preference branch"
+        << Debug::flush;
+    return;
+  }
+  prefs = do_QueryInterface(branch);
+  if (!prefs) {
+    Debug::log(Debug::Error) << "Unable to get nsIPrefBranch2" << Debug::flush;
+    return;
+  }
+  prefs->AddObserver(DMP_ACCESS_LIST, this, PR_FALSE);
+  nsCString prefValue;
+  if (branch->GetCharPref(DMP_ACCESS_LIST, getter_Copies(prefValue)) == NS_OK) {
+    loadAccessList(prefValue.get());
+  }
+}
+
+// implements nsIObserver
+NS_IMETHODIMP
+Preferences::Observe(nsISupports *aSubject, const char* aTopic,
+    const PRUnichar *aData) {
+  nsresult rv = NS_OK;
+  Debug::log(Debug::Spam) << "Preferences::Observe(subject="
+      << aSubject << ", topic=" << aTopic << ", data=" << aData << Debug::flush;
+  if (strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
+    return NS_ERROR_UNEXPECTED;
+  }
+  // TODO(jat): check preference name in aData if we ever add another one
+  nsCOMPtr<nsIPrefBranch> prefs(do_QueryInterface(aSubject, &rv));
+  NS_ENSURE_SUCCESS(rv, rv);
+  nsCString prefValue;
+  if (prefs->GetCharPref(DMP_ACCESS_LIST, getter_Copies(prefValue)) == NS_OK) {
+    loadAccessList(prefValue.get());
+  }
+  return NS_OK;
+}
+
+void Preferences::addNewRule(const std::string& pattern, bool exclude) {
+  nsCString prefValue;
+  if (prefs->GetCharPref(DMP_ACCESS_LIST, getter_Copies(prefValue)) != NS_OK) {
+    Debug::log(Debug::Error) << "Unable to retrieve access list preference"
+        << Debug::flush;
+    return;
+  }
+  // TODO(jat): see if the same rule already exists
+  std::string pref(prefValue.get());
+  if (pref.length() > 0) {
+    pref += ',';
+  }
+  if (exclude) {
+    pref += '!';
+  }
+  pref += pattern;
+  if (prefs->SetCharPref(DMP_ACCESS_LIST, pref.c_str()) != NS_OK) {
+    Debug::log(Debug::Error) << "Unable to save modified access list preference"
+        << Debug::flush;
+    return;
+  }
+}
+
+void Preferences::loadAccessList(const char* prefValue) {
+  if (!prefValue) {
+    return;
+  }
+  Debug::log(Debug::Spam) << "loadFromAccessList(prefValue=" << prefValue << ")"
+      << Debug::flush;
+  AllowedConnections::initFromAccessList(prefValue);
+}
+
+Preferences::~Preferences() {
+  if (prefs) {
+    prefs->RemoveObserver(DMP_ACCESS_LIST, this);
+  }
+}
diff --git a/plugins/xpcom/Preferences.h b/plugins/xpcom/Preferences.h
new file mode 100644
index 0000000..bf9a25c
--- /dev/null
+++ b/plugins/xpcom/Preferences.h
@@ -0,0 +1,53 @@
+#ifndef _H_Preferences
+#define _H_Preferences
+/*
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+#include <string>
+
+#include "mozincludes.h"
+
+#include "nsCOMPtr.h"
+#include "nsISupports.h"
+#include "nsIObserver.h"
+#include "nsIPrefBranch2.h"
+
+class HostChannel;
+class Value;
+
+class Preferences : public nsIObserver {
+  NS_DECL_ISUPPORTS
+  NS_DECL_NSIOBSERVER
+public:
+  Preferences();
+  virtual ~Preferences();
+
+  /**
+   * Add a new rule to the access list preference.
+   *
+   * @param pattern pattern to add (currently only an exact-match literal)
+   * @param exclude true if the pattern should be excluded from matches,
+   *     otherwise included
+   */
+  void addNewRule(const std::string& pattern, bool exclude);
+
+private:
+  static void loadAccessList(const char*);
+
+  nsCOMPtr<nsIPrefBranch2> prefs;
+};
+
+#endif
diff --git a/plugins/xpcom/UserAgents.txt b/plugins/xpcom/UserAgents.txt
new file mode 100644
index 0000000..28d70ae
--- /dev/null
+++ b/plugins/xpcom/UserAgents.txt
@@ -0,0 +1,8 @@
+User agents that work with ff3 XPI:
+===================================
+Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.08
+
+User agents that work with ff3+ XPI:
+====================================
+Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.12) Gecko/2009072110 Fedora/3.0.12-1.fc10 Firefox/3.0.12
+
diff --git a/plugins/xpcom/VisualStudio/ff2-xpcom.vcproj b/plugins/xpcom/VisualStudio/ff2-xpcom.vcproj
index 6d71ac0..50674b5 100755
--- a/plugins/xpcom/VisualStudio/ff2-xpcom.vcproj
+++ b/plugins/xpcom/VisualStudio/ff2-xpcom.vcproj
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="8.00"

 	Name="ff2-xpcom"

 	ProjectGUID="{6BF0C2CE-CB0C-421B-A67C-1E448371D24B}"

 	RootNamespace="ff2-xpcom"

 	Keyword="Win32Proj"

-	TargetFrameworkVersion="131072"

 	>

 	<Platforms>

 		<Platform

@@ -72,8 +71,6 @@
 				GenerateDebugInformation="true"

 				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"

 				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

@@ -155,8 +152,6 @@
 				SubSystem="2"

 				OptimizeReferences="2"

 				EnableCOMDATFolding="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

diff --git a/plugins/xpcom/VisualStudio/ff3-xpcom.vcproj b/plugins/xpcom/VisualStudio/ff3-xpcom.vcproj
index 25b9737..37d0f43 100755
--- a/plugins/xpcom/VisualStudio/ff3-xpcom.vcproj
+++ b/plugins/xpcom/VisualStudio/ff3-xpcom.vcproj
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="8.00"

 	Name="ff3-xpcom"

 	ProjectGUID="{6BF0C2CE-CB0C-421B-A67C-1E448371D24C}"

 	RootNamespace="ff3-xpcom"

 	Keyword="Win32Proj"

-	TargetFrameworkVersion="131072"

 	>

 	<Platforms>

 		<Platform

@@ -18,8 +17,8 @@
 	<Configurations>

 		<Configuration

 			Name="Debug|Win32"

-			OutputDirectory="Debug"

-			IntermediateDirectory="Debug"

+			OutputDirectory="Debug3"

+			IntermediateDirectory="Debug3"

 			ConfigurationType="2"

 			UseOfMFC="1"

 			>

@@ -46,6 +45,7 @@
 				MinimalRebuild="true"

 				BasicRuntimeChecks="3"

 				RuntimeLibrary="1"

+				TreatWChar_tAsBuiltInType="false"

 				UsePrecompiledHeader="0"

 				WarningLevel="3"

 				Detect64BitPortabilityProblems="true"

@@ -72,8 +72,6 @@
 				GenerateDebugInformation="true"

 				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"

 				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

@@ -96,13 +94,16 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

 		<Configuration

 			Name="Release|Win32"

-			OutputDirectory="Release"

-			IntermediateDirectory="Release"

+			OutputDirectory="Release3"

+			IntermediateDirectory="Release3"

 			ConfigurationType="2"

 			>

 			<Tool

@@ -124,10 +125,11 @@
 				Name="VCCLCompilerTool"

 				Optimization="3"

 				EnableIntrinsicFunctions="true"

-				AdditionalIncludeDirectories="&quot;..\..\common&quot;"

+				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;&quot;..\prebuilt\ff3\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\caps&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\dom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\js&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\necko&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\string&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\widget&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\xpcom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include\xpconnect&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.0\include&quot;"

 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FIREFOXPLUGIN_EXPORTS;GWT_DEBUGLEVEL=Warning;XPCOM_GLUE;XPCOM_GLUE_USE_NSPR;MOZILLA_STRICT_API;BROWSER_FF3"

 				ExceptionHandling="1"

 				RuntimeLibrary="2"

+				TreatWChar_tAsBuiltInType="false"

 				UsePrecompiledHeader="0"

 				WarningLevel="3"

 				Detect64BitPortabilityProblems="false"

@@ -155,8 +157,6 @@
 				SubSystem="2"

 				OptimizeReferences="2"

 				EnableCOMDATFolding="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

@@ -179,6 +179,9 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -792,6 +795,14 @@
 				</FileConfiguration>

 			</File>

 			<File

+				RelativePath="..\Preferences.cpp"

+				>

+			</File>

+			<File

+				RelativePath="..\Preferences.h"

+				>

+			</File>

+			<File

 				RelativePath="..\..\common\ProtocolVersionMessage.cpp"

 				>

 			</File>

diff --git a/plugins/xpcom/VisualStudio/ff35-xpcom.vcproj b/plugins/xpcom/VisualStudio/ff35-xpcom.vcproj
index 37a6085..3be29b9 100755
--- a/plugins/xpcom/VisualStudio/ff35-xpcom.vcproj
+++ b/plugins/xpcom/VisualStudio/ff35-xpcom.vcproj
@@ -1,12 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="9.00"

+	Version="8.00"

 	Name="ff35-xpcom"

 	ProjectGUID="{6BF0C2CE-CB0C-421B-A67C-1E448371D24D}"

 	RootNamespace="ff35-xpcom"

 	Keyword="Win32Proj"

-	TargetFrameworkVersion="131072"

 	>

 	<Platforms>

 		<Platform

@@ -18,8 +17,8 @@
 	<Configurations>

 		<Configuration

 			Name="Debug|Win32"

-			OutputDirectory="Debug"

-			IntermediateDirectory="Debug"

+			OutputDirectory="Debug35"

+			IntermediateDirectory="Debug35"

 			ConfigurationType="2"

 			UseOfMFC="1"

 			>

@@ -41,11 +40,12 @@
 			<Tool

 				Name="VCCLCompilerTool"

 				Optimization="0"

-				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;&quot;..\prebuilt\ff3\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\caps&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\dom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\js&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\necko&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\string&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\widget&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpcom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpconnect&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include&quot;"

+				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;..\prebuilt\ff3\include;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\caps&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\dom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\js&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\necko&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\string&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\widget&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpcom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpconnect&quot;"

 				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FIREFOXPLUGIN_EXPORTS;GWT_DEBUGLEVEL=Warning;XPCOM_GLUE;XPCOM_GLUE_USE_NSPR;MOZILLA_STRICT_API;BROWSER_FF3"

 				MinimalRebuild="true"

 				BasicRuntimeChecks="3"

 				RuntimeLibrary="1"

+				TreatWChar_tAsBuiltInType="false"

 				UsePrecompiledHeader="0"

 				WarningLevel="3"

 				Detect64BitPortabilityProblems="true"

@@ -72,8 +72,6 @@
 				GenerateDebugInformation="true"

 				ProgramDatabaseFile="$(IntDir)\$(TargetName).pdb"

 				SubSystem="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

@@ -96,13 +94,16 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

 		<Configuration

 			Name="Release|Win32"

-			OutputDirectory="Release"

-			IntermediateDirectory="Release"

+			OutputDirectory="Release35"

+			IntermediateDirectory="Release35"

 			ConfigurationType="2"

 			>

 			<Tool

@@ -124,10 +125,11 @@
 				Name="VCCLCompilerTool"

 				Optimization="3"

 				EnableIntrinsicFunctions="true"

-				AdditionalIncludeDirectories="&quot;..\..\common&quot;"

+				AdditionalIncludeDirectories="&quot;$(ProjectDir)\..\..\common&quot;;..\prebuilt\ff3\include;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\WINNT_x86-msvc\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\caps&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\dom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\js&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\necko&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\string&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\widget&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpcom&quot;;&quot;..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\xpconnect&quot;"

 				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FIREFOXPLUGIN_EXPORTS;GWT_DEBUGLEVEL=Warning;XPCOM_GLUE;XPCOM_GLUE_USE_NSPR;MOZILLA_STRICT_API;BROWSER_FF3"

 				ExceptionHandling="1"

 				RuntimeLibrary="2"

+				TreatWChar_tAsBuiltInType="false"

 				UsePrecompiledHeader="0"

 				WarningLevel="3"

 				Detect64BitPortabilityProblems="false"

@@ -155,8 +157,6 @@
 				SubSystem="2"

 				OptimizeReferences="2"

 				EnableCOMDATFolding="2"

-				RandomizedBaseAddress="1"

-				DataExecutionPrevention="0"

 				ImportLibrary="$(IntDir)\$(TargetName).lib"

 				TargetMachine="1"

 			/>

@@ -179,6 +179,9 @@
 				Name="VCAppVerifierTool"

 			/>

 			<Tool

+				Name="VCWebDeploymentTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

@@ -596,6 +599,10 @@
 				>

 			</File>

 			<File

+				RelativePath="..\Preferences.h"

+				>

+			</File>

+			<File

 				RelativePath="..\..\..\..\plugin-sdks\gecko-sdks\gecko-1.9.1\include\prinrval.h"

 				>

 			</File>

@@ -792,6 +799,10 @@
 				</FileConfiguration>

 			</File>

 			<File

+				RelativePath="..\Preferences.cpp"

+				>

+			</File>

+			<File

 				RelativePath="..\..\common\ProtocolVersionMessage.cpp"

 				>

 			</File>

diff --git a/plugins/xpcom/install-template-ff2.rdf b/plugins/xpcom/install-template-ff2.rdf
index 031924c..29b66d0 100644
--- a/plugins/xpcom/install-template-ff2.rdf
+++ b/plugins/xpcom/install-template-ff2.rdf
@@ -3,7 +3,7 @@
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 
   <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff2@gwt.google.com</em:id>
+    <em:id>gwt-dmp-ff2@gwt.google.com</em:id>
     <em:name>GWT Development Mode Plugin (XPCOM) for FF v1.5-2.x</em:name>
     <em:version>GWT_OOPHM_VERSION</em:version>
     <em:type>2</em:type>
@@ -16,20 +16,22 @@
     </em:targetApplication>
 
     <!-- Front End MetaData -->
-    <em:description>A plugin to support development-mode development of GWT applications</em:description>
+    <em:description>A plugin to support GWT development-mode in XPCOM-based browsers</em:description>
     <em:creator>Google, Inc.</em:creator>
     <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
+    <em:iconURL>chrome://gwt-dmp/skin/icon.png</em:iconURL>
 
     <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
     <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
     <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
+    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
+
+    <em:optionsURL>chrome://gwt-dmp/content/options.xul</em:optionsURL>
 
     <!-- TODO
-    # prefs dialog
 
     # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
+    <em:aboutURL>chrome://gwt-dmp/content/about.xul</em:aboutURL>
 
     # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
     <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
@@ -37,7 +39,6 @@
 
     # platforms - any others?
     <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
     <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
     <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
     -->
diff --git a/plugins/xpcom/install-template-ff3+.rdf b/plugins/xpcom/install-template-ff3+.rdf
index 84a16f9..6cb592b 100644
--- a/plugins/xpcom/install-template-ff3+.rdf
+++ b/plugins/xpcom/install-template-ff3+.rdf
@@ -3,7 +3,7 @@
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 
   <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff3p@gwt.google.com</em:id>
+    <em:id>gwt-dmp-ff3p@gwt.google.com</em:id>
     <em:name>GWT Development Mode Plugin (XPCOM) for FF v3.x (alt libraries)</em:name>
     <em:version>GWT_OOPHM_VERSION</em:version>
     <em:type>2</em:type>
@@ -16,30 +16,32 @@
     </em:targetApplication>
 
     <!-- Front End MetaData -->
-    <em:description>A plugin to support development-mode development of GWT applications</em:description>
+    <em:description>A plugin to support GWT development-mode in XPCOM-based browsers</em:description>
     <em:creator>Google, Inc.</em:creator>
     <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
+    <em:iconURL>chrome://gwt-dmp/skin/icon.png</em:iconURL>
 
     <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
     <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
-    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
+
+    <em:optionsURL>chrome://gwt-dmp/content/options.xul</em:optionsURL>
 
     <!-- TODO
     # prefs dialog
 
     # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
+    <em:aboutURL>chrome://gwt-dmp/content/about.xul</em:aboutURL>
 
     # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
     <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
     <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
 
     # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
     <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
     <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
+    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
+    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
+    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
     -->
 
   </Description>
diff --git a/plugins/xpcom/install-template-ff3.rdf b/plugins/xpcom/install-template-ff3.rdf
index 9082d32..7653ccb 100644
--- a/plugins/xpcom/install-template-ff3.rdf
+++ b/plugins/xpcom/install-template-ff3.rdf
@@ -3,7 +3,7 @@
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 
   <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff3@gwt.google.com</em:id>
+    <em:id>gwt-dmp-ff3@gwt.google.com</em:id>
     <em:name>GWT Development Mode Plugin (XPCOM) for FF v3.x</em:name>
     <em:version>GWT_OOPHM_VERSION</em:version>
     <em:type>2</em:type>
@@ -16,28 +16,29 @@
     </em:targetApplication>
 
     <!-- Front End MetaData -->
-    <em:description>A plugin to support development-mode development of GWT applications</em:description>
+    <em:description>A plugin to support GWT development-mode in XPCOM-based browsers</em:description>
     <em:creator>Google, Inc.</em:creator>
     <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
+    <em:iconURL>chrome://gwt-dmp/skin/icon.png</em:iconURL>
 
     <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
     <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
     <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
     <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
+    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
+
+    <em:optionsURL>chrome://gwt-dmp/content/options.xul</em:optionsURL>
 
     <!-- TODO
-    # prefs dialog
 
     # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
+    <em:aboutURL>chrome://gwt-dmp/content/about.xul</em:aboutURL>
 
     # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
     <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
     <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
 
     # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
     <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
     <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
     -->
diff --git a/plugins/xpcom/install-template-ff35.rdf b/plugins/xpcom/install-template-ff35.rdf
index deec1e8..faeb80e 100644
--- a/plugins/xpcom/install-template-ff35.rdf
+++ b/plugins/xpcom/install-template-ff35.rdf
@@ -3,7 +3,7 @@
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 
   <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff35@gwt.google.com</em:id>
+    <em:id>gwt-dmp-ff35@gwt.google.com</em:id>
     <em:name>GWT Development Mode Plugin (XPCOM) for FF v3.5+</em:name>
     <em:version>GWT_OOPHM_VERSION</em:version>
     <em:type>2</em:type>
@@ -16,28 +16,29 @@
     </em:targetApplication>
 
     <!-- Front End MetaData -->
-    <em:description>A plugin to support development-mode development of GWT applications</em:description>
+    <em:description>A plugin to support GWT development-mode in XPCOM-based browsers</em:description>
     <em:creator>Google, Inc.</em:creator>
     <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
+    <em:iconURL>chrome://gwt-dmp/skin/icon.png</em:iconURL>
 
     <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
     <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
     <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
     <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
+    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
+
+    <em:optionsURL>chrome://gwt-dmp/content/options.xul</em:optionsURL>
 
     <!-- TODO
-    # prefs dialog
 
     # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
+    <em:aboutURL>chrome://gwt-dmp/content/about.xul</em:aboutURL>
 
     # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
     <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
     <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
 
     # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
     <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
     <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
     -->
diff --git a/plugins/xpcom/prebuilt/extension-ff2/chrome.manifest b/plugins/xpcom/prebuilt/extension-ff2/chrome.manifest
deleted file mode 100644
index 38a0fdd..0000000
--- a/plugins/xpcom/prebuilt/extension-ff2/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content gwt-oophm content/
-skin gwt-oophm classic/1.0 skin/
diff --git a/plugins/xpcom/prebuilt/extension-ff2/install.rdf b/plugins/xpcom/prebuilt/extension-ff2/install.rdf
deleted file mode 100644
index 7feda0c..0000000
--- a/plugins/xpcom/prebuilt/extension-ff2/install.rdf
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff2@gwt.google.com</em:id>
-    <em:name>GWT Hosted Mode Plugin (XPCOM) for FF v1.5-2.x</em:name>
-    <em:version>0.0.-1M.20090803104826</em:version>
-    <em:type>2</em:type>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>1.5</em:minVersion>
-        <em:maxVersion>2.*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:description>A plugin to support hosted-mode development of GWT applications</em:description>
-    <em:creator>Google, Inc.</em:creator>
-    <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
-
-    <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
-    <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
-    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
-
-    <!-- TODO
-    # prefs dialog
-
-    # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
-
-    # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
-    <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
-    <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
-
-    # platforms - any others?
-    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-    <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
-    <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
-    -->
-
-  </Description>
-</RDF>
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff2.dylib b/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff2.dylib
new file mode 100755
index 0000000..9e224cd
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff2.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff2.dylib b/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff2.dylib
new file mode 100755
index 0000000..f9ad6ad
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff2/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff2.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/libgwt_dmp_ff2.so b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/libgwt_dmp_ff2.so
new file mode 100755
index 0000000..eecc748
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/libgwt_dmp_ff2.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/liboophm_ff2.so b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/liboophm_ff2.so
deleted file mode 100755
index eedbabb..0000000
--- a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86-gcc3/components/liboophm_ff2.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff2.so b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff2.so
new file mode 100755
index 0000000..46bd8fc
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff2.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/liboophm_ff2.so b/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/liboophm_ff2.so
deleted file mode 100755
index cf54702..0000000
--- a/plugins/xpcom/prebuilt/extension-ff2/platform/Linux_x86_64-gcc3/components/liboophm_ff2.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3+/chrome.manifest b/plugins/xpcom/prebuilt/extension-ff3+/chrome.manifest
deleted file mode 100644
index 38a0fdd..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3+/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content gwt-oophm content/
-skin gwt-oophm classic/1.0 skin/
diff --git a/plugins/xpcom/prebuilt/extension-ff3+/install.rdf b/plugins/xpcom/prebuilt/extension-ff3+/install.rdf
deleted file mode 100644
index 31f4673..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3+/install.rdf
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff3@gwt.google.com</em:id>
-    <em:name>GWT Hosted Mode Plugin (XPCOM) for FF v3.x</em:name>
-    <em:version>0.0.-1M.20090803104811</em:version>
-    <em:type>2</em:type>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>3</em:minVersion>
-        <em:maxVersion>3.*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:description>A plugin to support hosted-mode development of GWT applications</em:description>
-    <em:creator>Google, Inc.</em:creator>
-    <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
-
-    <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
-    <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
-    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
-
-    <!-- TODO
-    # prefs dialog
-
-    # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
-
-    # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
-    <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
-    <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
-
-    # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-    <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
-    <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
-    -->
-
-  </Description>
-</RDF>
diff --git a/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3+.so b/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3+.so
new file mode 100755
index 0000000..4517d2a
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3+.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/liboophm_ff3+.so b/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/liboophm_ff3+.so
deleted file mode 100755
index e1f5935..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3+/platform/Linux_x86_64-gcc3/components/liboophm_ff3+.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/chrome.manifest b/plugins/xpcom/prebuilt/extension-ff3/chrome.manifest
deleted file mode 100644
index 38a0fdd..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content gwt-oophm content/
-skin gwt-oophm classic/1.0 skin/
diff --git a/plugins/xpcom/prebuilt/extension-ff3/install.rdf b/plugins/xpcom/prebuilt/extension-ff3/install.rdf
deleted file mode 100644
index a782f87..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3/install.rdf
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff3@gwt.google.com</em:id>
-    <em:name>GWT Hosted Mode Plugin (XPCOM) for FF v3.x</em:name>
-    <em:version>0.0.-1M.20090803104821</em:version>
-    <em:type>2</em:type>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>3</em:minVersion>
-        <em:maxVersion>3.*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:description>A plugin to support hosted-mode development of GWT applications</em:description>
-    <em:creator>Google, Inc.</em:creator>
-    <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
-
-    <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
-    <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
-    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
-
-    <!-- TODO
-    # prefs dialog
-
-    # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
-
-    # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
-    <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
-    <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
-
-    # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-    <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
-    <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
-    -->
-
-  </Description>
-</RDF>
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff3.dylib b/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff3.dylib
new file mode 100755
index 0000000..81df2bf
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff3.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff3.dylib b/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff3.dylib
new file mode 100755
index 0000000..a23866a
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff3.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/liboophm.dylib b/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/liboophm.dylib
deleted file mode 100755
index eb3864d..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3/platform/Darwin_x86-gcc3/components/liboophm.dylib
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/libgwt_dmp_ff3.so b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/libgwt_dmp_ff3.so
new file mode 100755
index 0000000..637dc24
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/libgwt_dmp_ff3.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/liboophm_ff3.so b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/liboophm_ff3.so
deleted file mode 100755
index 76ace0d..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86-gcc3/components/liboophm_ff3.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3.so b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3.so
new file mode 100755
index 0000000..3fd64cc
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff3.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/liboophm_ff3.so b/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/liboophm_ff3.so
deleted file mode 100755
index 99db367..0000000
--- a/plugins/xpcom/prebuilt/extension-ff3/platform/Linux_x86_64-gcc3/components/liboophm_ff3.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff3/platform/WINNT_x86-msvc/components/xpOOPHM.dll b/plugins/xpcom/prebuilt/extension-ff3/platform/WINNT_x86-msvc/components/xpOOPHM.dll
index 6c8ec68..09a0119 100755
--- a/plugins/xpcom/prebuilt/extension-ff3/platform/WINNT_x86-msvc/components/xpOOPHM.dll
+++ b/plugins/xpcom/prebuilt/extension-ff3/platform/WINNT_x86-msvc/components/xpOOPHM.dll
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/chrome.manifest b/plugins/xpcom/prebuilt/extension-ff35/chrome.manifest
deleted file mode 100644
index 38a0fdd..0000000
--- a/plugins/xpcom/prebuilt/extension-ff35/chrome.manifest
+++ /dev/null
@@ -1,2 +0,0 @@
-content gwt-oophm content/
-skin gwt-oophm classic/1.0 skin/
diff --git a/plugins/xpcom/prebuilt/extension-ff35/install.rdf b/plugins/xpcom/prebuilt/extension-ff35/install.rdf
deleted file mode 100644
index 6148662..0000000
--- a/plugins/xpcom/prebuilt/extension-ff35/install.rdf
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>oophm-xpcom-ff35@gwt.google.com</em:id>
-    <em:name>GWT Hosted Mode Plugin (XPCOM) for FF v3.5+</em:name>
-    <em:version>0.0.-1M.20090803104256</em:version>
-    <em:type>2</em:type>
-    <em:targetApplication>
-      <Description>
-        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
-        <em:minVersion>3.4</em:minVersion>
-        <em:maxVersion>3.*</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-    <!-- Front End MetaData -->
-    <em:description>A plugin to support hosted-mode development of GWT applications</em:description>
-    <em:creator>Google, Inc.</em:creator>
-    <em:homepageURL>http://code.google.com/webtoolkit/</em:homepageURL>
-    <em:iconURL>chrome://gwt-oophm/skin/icon.png</em:iconURL>
-
-    <em:targetPlatform>Linux_x86-gcc3</em:targetPlatform>
-    <em:targetPlatform>Linux_x86_64-gcc3</em:targetPlatform>
-    <em:targetPlatform>WINNT_x86-msvc</em:targetPlatform>
-    <em:targetPlatform>Darwin_x86-gcc3</em:targetPlatform>
-
-    <!-- TODO
-    # prefs dialog
-
-    # replace default about dialog
-    <em:aboutURL>chrome://gwt-oophm/content/about.xul</em:aboutURL>
-
-    # updates, see http://developer.mozilla.org/en/docs/Extension_Versioning%2C_Update_and_Compatibility#Update_RDF_Format
-    <em:updateURL>https://xxx.google.com/.../update.rdf</em:updateURL>
-    <em:updateURL>http://google-web-toolkit.googlecode.com/svn/trunk/plugins/xpcom/prebuilt/update.rdf</em:updateURL>
-
-    # platforms - any others?
-    <em:targetPlatform>Darwin_ppc-gcc3</em:targetPlatform>
-    <em:targetPlatform>SunOS_sparc-sunc</em:targetPlatform>
-    <em:targetPlatform>SunOS_x86-sunc</em:targetPlatform>
-    -->
-
-  </Description>
-</RDF>
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff35.dylib b/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff35.dylib
new file mode 100755
index 0000000..e483be4
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_ppc-gcc3/components/libgwt_dmp_ff35.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff35.dylib b/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff35.dylib
new file mode 100755
index 0000000..74c9132
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff35/platform/Darwin_x86-gcc3/components/libgwt_dmp_ff35.dylib
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86-gcc3/components/libgwt_dmp_ff35.so b/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86-gcc3/components/libgwt_dmp_ff35.so
new file mode 100755
index 0000000..8844bc7
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86-gcc3/components/libgwt_dmp_ff35.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff35.so b/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff35.so
new file mode 100755
index 0000000..ef27b46
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/libgwt_dmp_ff35.so
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/liboophm_ff35.so b/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/liboophm_ff35.so
deleted file mode 100755
index a65b4e6..0000000
--- a/plugins/xpcom/prebuilt/extension-ff35/platform/Linux_x86_64-gcc3/components/liboophm_ff35.so
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension-ff35/platform/WINNT_x86-msvc/components/xpOOPHM.dll b/plugins/xpcom/prebuilt/extension-ff35/platform/WINNT_x86-msvc/components/xpOOPHM.dll
new file mode 100755
index 0000000..5b20eca
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension-ff35/platform/WINNT_x86-msvc/components/xpOOPHM.dll
Binary files differ
diff --git a/plugins/xpcom/prebuilt/extension/chrome.manifest b/plugins/xpcom/prebuilt/extension/chrome.manifest
index 38a0fdd..aaa29b3 100644
--- a/plugins/xpcom/prebuilt/extension/chrome.manifest
+++ b/plugins/xpcom/prebuilt/extension/chrome.manifest
@@ -1,2 +1,2 @@
-content gwt-oophm content/
-skin gwt-oophm classic/1.0 skin/
+content gwt-dmp content/
+skin gwt-dmp classic/1.0 skin/
diff --git a/plugins/xpcom/prebuilt/extension/content/options.xul b/plugins/xpcom/prebuilt/extension/content/options.xul
new file mode 100644
index 0000000..5aebd48
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/content/options.xul
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+
+<dialog buttons="accept"
+     id="gwt-dmp-prefs"
+     title="GWT Development Mode Plugin Options"
+     onload="GwtDevelopmentModePlugin.onload()"
+     ondialogaccept="return true;"
+     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<script type="application/x-javascript"
+    src="chrome://gwt-dmp/content/prefScript.js"/>
+
+<vbox flex="1">
+
+  <groupbox flex="1">
+    <caption>
+      <hbox>
+        <image src="chrome://gwt-dmp/skin/warning.png"/>
+        <label value="Security Restrictions" style="font-weight: bold"/>
+      </hbox>
+    </caption>
+    <description width="55em">
+      The GWT Development Mode Plugin will open a TCP/IP connection to an
+      arbitrary host/port at the request of a web page.  To minimize security
+      risks, by default it will only connect to the local machine.  To allow
+      cross-machine debugging, you can add exceptions here -- include the exact
+      host name of the web servers you will use for debugging, but do not
+      include any you do not trust.
+    </description>
+  </groupbox>
+
+  <hbox align="top" flex="1">
+    <hbox align="center" flex="1">
+      <label control="hostname" value="Host name: "/>
+      <textbox id="hostname" maxlength="40" flex="1"/>
+    </hbox>
+    <radiogroup id="incexc">
+      <radio id="include" label="Include" selected="true"/>
+      <radio id="exclude" label="Exclude"/>
+    </radiogroup>
+    <button id="addButton" label="Add Entry" oncommand="GwtDevelopmentModePlugin.addEntry()"/>
+  </hbox>
+
+  <listbox id="accessListListbox" rows="5">
+    <listhead>
+      <listheader label="Inc/Exc"/>
+      <listheader label="Host Name"/>
+    </listhead>
+    <listcols>
+      <listcol/>
+      <listcol flex="1"/>
+    </listcols>
+  </listbox>
+
+  <hbox>
+    <button id="removeButton" label="Remove Selected"
+        oncommand="GwtDevelopmentModePlugin.removeEntry()"/>
+    <!-- TODO(jat): add move up/down buttons -->
+  </hbox>
+
+</vbox>
+
+</dialog>
diff --git a/plugins/xpcom/prebuilt/extension/content/prefScript.js b/plugins/xpcom/prebuilt/extension/content/prefScript.js
new file mode 100644
index 0000000..9b3e052
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/content/prefScript.js
@@ -0,0 +1,94 @@
+var GwtDevelopmentModePlugin = {
+
+// Add a new entry when the Add Entry button is clicked.
+addEntry: function() {
+  var prefs = this.getAccessList();
+  var hostname = document.getElementById("hostname").value;
+  if (!hostname || hostname.length == 0) {
+    alert("No host name provided");
+    return;
+  }
+  if (hostname.indexOf(",") >=0 || hostname.indexOf("!") >= 0) {
+    alert("Host name must not contain ',' or '!'");
+    return;
+  }
+  var exclude = document.getElementById("exclude");
+  var incText;
+  var prefix = "";
+  if (exclude.selected) {
+    incText = "Exclude";
+    prefix = "!";
+  } else {
+    incText = "Include";
+  }
+  var listboxEntry = this.makeLBE(incText, hostname);
+  var prefsEntry = prefix + hostname;
+  var listbox = document.getElementById("accessListListbox");
+  listbox.appendChild(listboxEntry);
+  prefs.push(prefsEntry.toString());
+  this.saveAccessList(prefs);
+},
+
+// Remove the selected entry when the Remove Entry button is clicked.
+removeEntry: function() {
+  var listbox = document.getElementById("accessListListbox");
+  var idx = listbox.selectedIndex;
+  if (idx >= 0) {
+    listbox.removeItemAt(idx);
+    var prefs = this.getAccessList();
+    prefs.splice(idx, 1);
+    this.saveAccessList(prefs);
+  }
+},
+
+// Populate the listbox when the dialog window is loaded
+onload: function() {
+  var listbox = document.getElementById("accessListListbox");
+  var prefs = this.getAccessList();
+  for (var i = 0 ; i < prefs.length; ++i) {
+    var pref = prefs[i];
+    var hostname = pref;
+    var incexc = "Include";
+    if (pref.length > 0 && pref.charAt(0) == "!") {
+      hostname = hostname.substr(1);
+      incexc = "Exclude";
+    }
+    var listboxEntry = this.makeLBE(incexc, hostname);
+    listbox.appendChild(listboxEntry);
+  }
+},
+
+// Internal - create a entry for the list box
+makeLBE: function(inc, hostname) {
+  var listboxEntry = document.createElement("listitem");
+  var lbeInc = document.createElement("listcell");
+  lbeInc.setAttribute("label", inc);
+  listboxEntry.appendChild(lbeInc);
+  var lbeHost = document.createElement("listcell");
+  lbeHost.setAttribute("label", hostname);
+  listboxEntry.appendChild(lbeHost);
+  return listboxEntry;
+},
+
+// Internal - load the access list from the gwt-dmp.accessList preference
+getAccessList: function() {
+  var prefServ = Components.classes["@mozilla.org/preferences-service;1"]
+                  .getService(Components.interfaces.nsIPrefService);
+  var prefs = prefServ.getBranch("gwt-dmp.");
+  var pref = prefs.getCharPref("accessList");
+  if (!pref) {
+    return [];
+  }
+  return pref.split(",");
+},
+
+// Internal - save the access list to the gwt-dmp.accessList preference
+saveAccessList: function(list) {
+  var prefServ = Components.classes["@mozilla.org/preferences-service;1"]
+                  .getService(Components.interfaces.nsIPrefService);
+  var prefs = prefServ.getBranch("gwt-dmp.");
+  prefs.setCharPref("accessList", list.join(","));
+  prefServ.savePrefFile(null);
+}
+
+};
diff --git a/plugins/xpcom/prebuilt/extension/defaults/preferences/defaults.js b/plugins/xpcom/prebuilt/extension/defaults/preferences/defaults.js
new file mode 100644
index 0000000..8b6558b
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/defaults/preferences/defaults.js
@@ -0,0 +1 @@
+pref("gwt-dmp.accessList", "");
diff --git a/plugins/xpcom/prebuilt/extension/skin/README.txt b/plugins/xpcom/prebuilt/extension/skin/README.txt
new file mode 100644
index 0000000..7d212f0
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/skin/README.txt
@@ -0,0 +1,2 @@
+warning.png generated from public domain SVG file found at
+  http://www.wowwiki.com/File:Icon-warning.svg
diff --git a/plugins/xpcom/prebuilt/extension/skin/warning.png b/plugins/xpcom/prebuilt/extension/skin/warning.png
new file mode 100644
index 0000000..55a203b
--- /dev/null
+++ b/plugins/xpcom/prebuilt/extension/skin/warning.png
Binary files differ
diff --git a/plugins/xpcom/prebuilt/gwt-dmp-ff2.xpi b/plugins/xpcom/prebuilt/gwt-dmp-ff2.xpi
new file mode 100644
index 0000000..098e7d7
--- /dev/null
+++ b/plugins/xpcom/prebuilt/gwt-dmp-ff2.xpi
Binary files differ
diff --git a/plugins/xpcom/prebuilt/gwt-dmp-ff3.xpi b/plugins/xpcom/prebuilt/gwt-dmp-ff3.xpi
new file mode 100644
index 0000000..658c12e
--- /dev/null
+++ b/plugins/xpcom/prebuilt/gwt-dmp-ff3.xpi
Binary files differ
diff --git a/plugins/xpcom/prebuilt/gwt-dmp-ff35.xpi b/plugins/xpcom/prebuilt/gwt-dmp-ff35.xpi
new file mode 100644
index 0000000..ffe6afc
--- /dev/null
+++ b/plugins/xpcom/prebuilt/gwt-dmp-ff35.xpi
Binary files differ
diff --git a/plugins/xpcom/prebuilt/oophm-xpcom-ff2.xpi b/plugins/xpcom/prebuilt/oophm-xpcom-ff2.xpi
deleted file mode 100644
index 96ae80f..0000000
--- a/plugins/xpcom/prebuilt/oophm-xpcom-ff2.xpi
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/oophm-xpcom-ff3+.xpi b/plugins/xpcom/prebuilt/oophm-xpcom-ff3+.xpi
deleted file mode 100644
index 9e5cabc..0000000
--- a/plugins/xpcom/prebuilt/oophm-xpcom-ff3+.xpi
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/oophm-xpcom-ff3.xpi b/plugins/xpcom/prebuilt/oophm-xpcom-ff3.xpi
deleted file mode 100644
index d7fd35a..0000000
--- a/plugins/xpcom/prebuilt/oophm-xpcom-ff3.xpi
+++ /dev/null
Binary files differ
diff --git a/plugins/xpcom/prebuilt/oophm-xpcom-ff35.xpi b/plugins/xpcom/prebuilt/oophm-xpcom-ff35.xpi
deleted file mode 100644
index 3bf14d8..0000000
--- a/plugins/xpcom/prebuilt/oophm-xpcom-ff35.xpi
+++ /dev/null
Binary files differ