Upgrades HtmlUnit and it dependencies

Some major upgrades:
  /htmlunit
  /jetty
  /apache/commons
  /apache/http
  /xerces
  /tomcat/servlet-api

Fixes issue 7224

Change-Id: I36cc569c2926aa59ee7375e719b917d6d3681a43
Review-Link: https://gwt-review.googlesource.com/#/c/4323/
diff --git a/dev/build.xml b/dev/build.xml
index a301c4e..7c3219b 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -60,7 +60,8 @@
           <include name="eclipse/jdtCompilerAdapter-3.8.3.v20130121-145325.jar" />
           <include name="guava/guava-15.0/guava-15.0-rebased.jar" />
           <include name="icu4j/50.1.1/icu4j.jar" />
-          <include name="jetty/jetty-6.1.11.jar" />
+          <include name="jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
+          <include name="jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
           <include name="jscomp/20131014/compiler-rebased.jar" />
           <include name="jscomp/20131014/sourcemap-rebased.jar" />
           <include name="jsr305/jsr305.jar" />
@@ -73,23 +74,23 @@
           <!-- dependencies needed for JSP support in DevMode: END -->
           <include name="apache/commons/commons-collections-3.2.1.jar" />
           <!-- htmlunit dependencies not already included: BEGIN -->
-          <include name="apache/http/httpclient-4.1.2.jar" />
-          <include name="apache/http/httpcore-4.1.2.jar" />
-          <include name="apache/http/httpmime-4.1.2.jar" />
+          <include name="apache/http/httpclient-4.3.1.jar" />
+          <include name="apache/http/httpcore-4.3.jar" />
+          <include name="apache/http/httpmime-4.3.1.jar" />
           <include name="apache/james/apache-mime4j-0.6.jar" />
-          <include name="apache/commons/commons-codec-1.3.jar" />
-          <include name="apache/commons/commons-io-1.4.jar" />
-          <include name="apache/commons/commons-lang-2.6.jar" />
-          <include name="apache/commons/commons-logging-1.1.1.jar" />
-          <include name="cssparser/cssparser-0.9.5.jar" />
-          <include name="htmlunit/htmlunit-2.9/htmlunit-v2.9.jar" />
-          <include name="htmlunit/htmlunit-2.9/htmlunit-core-js-v2.9.jar" />
-          <include name="nekohtml/nekohtml-1.9.15.jar" />
+          <include name="apache/commons/commons-codec-1.8.jar" />
+          <include name="apache/commons/commons-io-2.4.jar" />
+          <include name="apache/commons/commons-lang3-3.1.jar" />
+          <include name="apache/commons/commons-logging-1.1.3.jar" />
+          <include name="cssparser/cssparser-0.9.11.jar" />
+          <include name="htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+          <include name="htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
+          <include name="nekohtml/nekohtml-1.9.19.jar" />
           <include name="cup/java-cup-11a.jar" />
           <include name="xalan/xalan-2.7.1-nocup.jar" />
-          <include name="xerces/xerces-2_9_1/serializer.jar" />
-          <include name="xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar" />
-          <include name="xerces/xerces-2_9_1/xml-apis.jar" />
+          <include name="xerces/xerces-2_11_0/serializer-2.7.1.jar" />
+          <include name="xerces/xerces-2_11_0/xercesImpl-2.11.0.jar" />
+          <include name="xerces/xerces-2_11_0/xml-apis-1.4.01.jar" />
           <include name="w3c/sac/sac-1.3.jar" />
           <!-- htmlunit dependencies not already included: END -->
           <include name="sun/swingworker/swing-worker-1.1.jar" />
@@ -110,7 +111,8 @@
           <zipfileset src="${gwt.tools.lib}/eclipse/jdtCompilerAdapter-3.8.3.v20130121-145325.jar" />
           <zipfileset src="${gwt.tools.lib}/guava/guava-15.0/guava-15.0-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/icu4j/50.1.1/icu4j.jar" />
-          <zipfileset src="${gwt.tools.lib}/jetty/jetty-6.1.11.jar" />
+          <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
+          <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
           <zipfileset src="${gwt.tools.lib}/jscomp/20131014/compiler-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/jscomp/20131014/sourcemap-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/jsr305/jsr305.jar" />
@@ -123,23 +125,23 @@
           <!-- dependencies needed for JSP support in DevMode: END -->
           <zipfileset src="${gwt.tools.lib}/apache/commons/commons-collections-3.2.1.jar" />
           <!-- htmlunit dependencies not already included: BEGIN -->
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpclient-4.1.2.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpcore-4.1.2.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpmime-4.1.2.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpclient-4.3.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpcore-4.3.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpmime-4.3.1.jar" />
           <zipfileset src="${gwt.tools.lib}/apache/james/apache-mime4j-0.6.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-codec-1.3.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-io-1.4.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-lang-2.6.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-logging-1.1.1.jar" />
-          <zipfileset src="${gwt.tools.lib}/cssparser/cssparser-0.9.5.jar" />
-          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.9/htmlunit-2.9.jar" />
-          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9.jar" />
-          <zipfileset src="${gwt.tools.lib}/nekohtml/nekohtml-1.9.15.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-codec-1.8.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-io-2.4.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-lang3-3.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-logging-1.1.3.jar" />
+          <zipfileset src="${gwt.tools.lib}/cssparser/cssparser-0.9.11.jar" />
+          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
+          <zipfileset src="${gwt.tools.lib}/nekohtml/nekohtml-1.9.19.jar" />
           <zipfileset src="${gwt.tools.lib}/cup/java-cup-11a.jar" />
           <zipfileset src="${gwt.tools.lib}/xalan/xalan-2.7.1-nocup.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/serializer.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/xml-apis.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/serializer-2.7.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/xercesImpl-2.11.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/xml-apis-1.4.01.jar" />
           <zipfileset src="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" />
           <!-- htmlunit dependencies not already included: END -->
           <zipfileset src="${gwt.tools.lib}/sun/swingworker/swing-worker-1.1.jar" />
diff --git a/dev/codeserver/build.xml b/dev/codeserver/build.xml
index 52af07f..3c523e4 100755
--- a/dev/codeserver/build.xml
+++ b/dev/codeserver/build.xml
@@ -22,8 +22,8 @@
         <include name="**/*.java"/>
       </fileset>
     </copy>
-    <replace dir="${src}" token="com.google.gwt.thirdparty.org.mortbay."
-             value="org.mortbay."/>
+    <replace dir="${src}" token="com.google.gwt.thirdparty.org.eclipse.jetty."
+             value="org.eclipse.jetty."/>
   </target>
 
   <target name="compile" depends="preprocess">
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
index d443ea9..6699312 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
@@ -20,17 +20,16 @@
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.json.JsonArray;
 import com.google.gwt.dev.json.JsonObject;
-import com.google.gwt.thirdparty.org.mortbay.io.Buffer;
-import com.google.gwt.thirdparty.org.mortbay.jetty.HttpConnection;
-import com.google.gwt.thirdparty.org.mortbay.jetty.MimeTypes;
-import com.google.gwt.thirdparty.org.mortbay.jetty.Request;
-import com.google.gwt.thirdparty.org.mortbay.jetty.Server;
-import com.google.gwt.thirdparty.org.mortbay.jetty.handler.AbstractHandler;
-import com.google.gwt.thirdparty.org.mortbay.jetty.nio.SelectChannelConnector;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.FilterHolder;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.ServletHandler;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.ServletHolder;
-import com.google.gwt.thirdparty.org.mortbay.servlet.GzipFilter;
+import com.google.gwt.thirdparty.org.eclipse.jetty.http.MimeTypes;
+import com.google.gwt.thirdparty.org.eclipse.jetty.io.Buffer;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.AbstractHttpConnection;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.Request;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.Server;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.nio.SelectChannelConnector;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.FilterHolder;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.ServletHolder;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlets.GzipFilter;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -39,12 +38,14 @@
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import javax.servlet.ServletException;
+import javax.servlet.DispatcherType;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -115,17 +116,17 @@
     Server server = new Server();
     server.addConnector(connector);
 
-    ServletHandler servletHandler = new ServletHandler();
-    servletHandler.addServletWithMapping(new ServletHolder(new HttpServlet() {
+    ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+    handler.setContextPath("/");
+    handler.addServlet(new ServletHolder(new HttpServlet() {
       @Override
       protected void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
         handleRequest(request.getPathInfo(), request, response);
       }
     }), "/*");
-    servletHandler.addFilterWithMapping(new FilterHolder(GzipFilter.class),
-        "/*", AbstractHandler.DEFAULT);
-    server.addHandler(servletHandler);
+    handler.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
+    server.setHandler(handler);
     try {
       server.start();
     } catch (Exception e) {
@@ -505,7 +506,7 @@
 
   private static void setHandled(HttpServletRequest request) {
     Request baseRequest = (request instanceof Request) ? (Request) request :
-        HttpConnection.getCurrentConnection().getRequest();
+        AbstractHttpConnection.getCurrentConnection().getRequest();
     baseRequest.setHandled(true);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
index 4b6942b..f391985 100644
--- a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
+++ b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
@@ -32,6 +32,7 @@
 import com.gargoylesoftware.htmlunit.javascript.SimpleScriptableProxy;
 import com.gargoylesoftware.htmlunit.javascript.host.Window;
 
+import net.sourceforge.htmlunit.corejs.javascript.ConsString;
 import net.sourceforge.htmlunit.corejs.javascript.Context;
 import net.sourceforge.htmlunit.corejs.javascript.Function;
 import net.sourceforge.htmlunit.corejs.javascript.JavaScriptException;
@@ -210,7 +211,7 @@
       if (args.length == 1
           && methodName.indexOf(REPLACE_METHOD_SIGNATURE) != -1) {
         // getUrl() is not visible
-        String currentUrl = window.jsxGet_location().toString();
+        String currentUrl = window.getLocation().toString();
         currentUrl = getUrlBeforeHash(currentUrl);
         String newUrl = getUrlBeforeHash((String) args[0].getValue());
         if (!newUrl.equals(currentUrl)) {
@@ -303,6 +304,9 @@
       returnVal.setJsObject(new JsObjectRef(refId));
       return returnVal;
     }
+    if (value instanceof ConsString) {
+      return new Value(value.toString());
+    }
     if (value instanceof Number) {
       return new Value(convertNumberFromJsval(((Number) value)));
     }
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
index b282825..7e4e3ee 100644
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
+++ b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
@@ -24,20 +24,22 @@
 
 import org.apache.tools.ant.taskdefs.Javac;
 import org.eclipse.jdt.core.JDTCompilerAdapter;
-import org.mortbay.component.AbstractLifeCycle;
-import org.mortbay.jetty.AbstractConnector;
-import org.mortbay.jetty.HttpFields.Field;
-import org.mortbay.jetty.Request;
-import org.mortbay.jetty.RequestLog;
-import org.mortbay.jetty.Response;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.RequestLogHandler;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.security.SslSocketConnector;
-import org.mortbay.jetty.webapp.WebAppClassLoader;
-import org.mortbay.jetty.webapp.WebAppContext;
-import org.mortbay.log.Log;
-import org.mortbay.log.Logger;
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.http.HttpFields.Field;
+import org.eclipse.jetty.server.AbstractConnector;
+import org.eclipse.jetty.server.AbstractHttpConnection;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.RequestLog;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.RequestLogHandler;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.server.ssl.SslSocketConnector;
+import org.eclipse.jetty.util.component.AbstractLifeCycle;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.webapp.WebAppClassLoader;
+import org.eclipse.jetty.webapp.WebAppContext;
 
 import java.io.File;
 import java.io.IOException;
@@ -46,7 +48,6 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
-import java.util.Iterator;
 
 import javax.imageio.ImageIO;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -139,25 +140,21 @@
             + " - " + request.getMethod() + ' ' + request.getUri() + " ("
             + userString + request.getRemoteHost() + ')' + bytesString);
         if (branch.isLoggable(logHeaders)) {
-          // Request headers
-          TreeLogger headers = branch.branch(logHeaders, "Request headers");
-          Iterator<Field> headerFields = request.getConnection().getRequestFields().getFields();
-          while (headerFields.hasNext()) {
-            Field headerField = headerFields.next();
-            headers.log(logHeaders, headerField.getName() + ": "
-                + headerField.getValue());
-          }
-          // Response headers
-          headers = branch.branch(logHeaders, "Response headers");
-          headerFields = response.getHttpFields().getFields();
-          while (headerFields.hasNext()) {
-            Field headerField = headerFields.next();
-            headers.log(logHeaders, headerField.getName() + ": "
-                + headerField.getValue());
-          }
+          AbstractHttpConnection connection = request.getConnection();
+          logHeaders(branch.branch(logHeaders, "Request headers"), logHeaders,
+              connection.getRequestFields());
+          logHeaders(branch.branch(logHeaders, "Response headers"), logHeaders,
+              connection.getResponseFields());
         }
       }
     }
+
+    private void logHeaders(TreeLogger logger, TreeLogger.Type logLevel, HttpFields fields) {
+      for (int i = 0; i < fields.size(); ++i) {
+        Field field = fields.getField(i);
+        logger.log(logLevel, field.getName() + ": " + field.getValue());
+      }
+    }
   }
 
   /**
@@ -178,9 +175,9 @@
       this.logger = logger;
     }
 
-    public void debug(String msg, Object arg0, Object arg1) {
+    public void debug(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.SPAM)) {
-        logger.log(TreeLogger.SPAM, format(msg, arg0, arg1));
+        logger.log(TreeLogger.SPAM, format(msg, args));
       }
     }
 
@@ -188,16 +185,32 @@
       logger.log(TreeLogger.SPAM, msg, th);
     }
 
+    public void debug(Throwable th) {
+      logger.log(TreeLogger.SPAM, "", th);
+    }
+
     public Logger getLogger(String name) {
       return this;
     }
 
-    public void info(String msg, Object arg0, Object arg1) {
+    public String getName() {
+      return "";
+    }
+
+    public void info(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.TRACE)) {
-        logger.log(TreeLogger.TRACE, format(msg, arg0, arg1));
+        logger.log(TreeLogger.TRACE, format(msg, args));
       }
     }
 
+    public void info(String msg, Throwable th) {
+      logger.log(TreeLogger.TRACE, msg, th);
+    }
+
+    public void info(Throwable th) {
+      logger.log(TreeLogger.TRACE, "", th);
+    }
+
     public boolean isDebugEnabled() {
       return logger.isLoggable(TreeLogger.SPAM);
     }
@@ -206,9 +219,9 @@
       // ignored
     }
 
-    public void warn(String msg, Object arg0, Object arg1) {
+    public void warn(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.WARN)) {
-        logger.log(TreeLogger.WARN, format(msg, arg0, arg1));
+        logger.log(TreeLogger.WARN, format(msg, args));
       }
     }
 
@@ -216,20 +229,42 @@
       logger.log(TreeLogger.WARN, msg, th);
     }
 
-    /**
-     * Copied from org.mortbay.log.StdErrLog.
-     */
-    private String format(String msg, Object arg0, Object arg1) {
-      int i0 = msg.indexOf("{}");
-      int i1 = i0 < 0 ? -1 : msg.indexOf("{}", i0 + 2);
+    public void warn(Throwable th) {
+      logger.log(TreeLogger.WARN, "", th);
+    }
 
-      if (arg1 != null && i1 >= 0) {
-        msg = msg.substring(0, i1) + arg1 + msg.substring(i1 + 2);
+    public void ignore(Throwable th) {
+      logger.log(TreeLogger.SPAM, "IGNORE", th);
+    }
+
+    /**
+     * Copied from org.eclipse.log.StdErrLog.
+     */
+    private String format(String msg, Object... args) {
+      if (msg == null) {
+        msg = "";
+        for (int i = 0; i < args.length; i++) {
+          msg += "{} ";
+        }
       }
-      if (arg0 != null && i0 >= 0) {
-        msg = msg.substring(0, i0) + arg0 + msg.substring(i0 + 2);
+      String braces = "{}";
+      int start = 0;
+      StringBuilder builder = new StringBuilder();
+      for (Object arg : args) {
+        int bracesIndex = msg.indexOf(braces, start);
+        if (bracesIndex < 0) {
+          builder.append(msg.substring(start));
+          builder.append(" ");
+          builder.append(arg);
+          start = msg.length();
+        } else {
+          builder.append(msg.substring(start, bracesIndex));
+          builder.append(String.valueOf(arg));
+          start = bracesIndex + braces.length();
+        }
       }
-      return msg;
+      builder.append(msg.substring(start));
+      return builder.toString();
     }
   }
 
@@ -335,7 +370,7 @@
 
         // For a system path, load from the outside world.
         URL found;
-        if (isSystemPath(checkName)) {
+        if (isSystemClass(checkName.replace('/', '.'))) {
           found = systemClassLoader.getResource(name);
           if (found != null) {
             return found;
@@ -364,23 +399,10 @@
         return super.findResource(name);
       }
 
-      /**
-       * Override to additionally consider the most commonly available JSP and
-       * XML implementation as system resources. (In fact, Jasper is in gwt-dev
-       * via embedded Tomcat, so we always hit this case.)
-       */
-      @Override
-      public boolean isSystemPath(String name) {
-        name = name.replace('/', '.');
-        return super.isSystemPath(name)
-            || name.startsWith("org.apache.jasper.")
-            || name.startsWith("org.apache.xerces.");
-      }
-
       @Override
       protected Class<?> findClass(String name) throws ClassNotFoundException {
         // For system path, always prefer the outside world.
-        if (isSystemPath(name)) {
+        if (isSystemClass(name)) {
           try {
             return systemClassLoader.loadClass(name);
           } catch (ClassNotFoundException e) {
@@ -391,7 +413,7 @@
           return super.findClass(name);
         } catch (ClassNotFoundException e) {
           // Don't allow server classes to be loaded from the outside.
-          if (isServerPath(name)) {
+          if (isServerClass(name)) {
             throw e;
           }
         }
@@ -464,8 +486,6 @@
      */
     private final ClassLoader systemClassLoader = Thread.currentThread().getContextClassLoader();
 
-    private WebAppClassLoaderExtension classLoader;
-
     @SuppressWarnings("unchecked")
     private WebAppContextWithReload(TreeLogger logger, String webApp,
         String contextPath) {
@@ -474,16 +494,27 @@
 
       // Prevent file locking on Windows; pick up file changes.
       getInitParams().put(
-          "org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");
+          "org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
 
       // Since the parent class loader is bootstrap-only, prefer it first.
       setParentLoaderPriority(true);
     }
 
+    /**
+     * Override to additionally consider the most commonly available JSP and
+     * XML implementation as system resources. (In fact, Jasper is in gwt-dev
+     * via embedded Tomcat, so we always hit this case.)
+     */
+    @Override
+    public boolean isSystemClass(String name) {
+      return super.isSystemClass(name)
+          || name.startsWith("org.apache.jasper.")
+          || name.startsWith("org.apache.xerces.");
+    }
+
     @Override
     protected void doStart() throws Exception {
-      classLoader = new WebAppClassLoaderExtension();
-      setClassLoader(classLoader);
+      setClassLoader(new WebAppClassLoaderExtension());
       super.doStart();
     }
 
@@ -491,12 +522,12 @@
     protected void doStop() throws Exception {
       super.doStop();
       
-      Class<?> jdbcUnloader = classLoader.loadClass("com.google.gwt.dev.shell.jetty.JDBCUnloader");
+      Class<?> jdbcUnloader =
+          getClassLoader().loadClass("com.google.gwt.dev.shell.jetty.JDBCUnloader");
       java.lang.reflect.Method unload = jdbcUnloader.getMethod("unload");
       unload.invoke(null);
       
       setClassLoader(null);
-      classLoader.destroy();
     }
   }
 
@@ -516,10 +547,6 @@
   private static final String PROPERTY_NOWARN_WEBAPP_CLASSPATH = "gwt.nowarn.webapp.classpath";
 
   static {
-    // Suppress spammy Jetty log initialization.
-    System.setProperty("org.mortbay.log.class", JettyNullLogger.class.getName());
-    Log.getLog();
-
     /*
      * Make JDT the default Ant compiler so that JSP compilation just works
      * out-of-the-box. If we don't set this, it's very, very difficult to make
@@ -672,7 +699,7 @@
     jreLeakPrevention(logger);
     
     // Turn off XML validation.
-    System.setProperty("org.mortbay.xml.XmlParser.Validating", "false");
+    System.setProperty("org.eclipse.jetty.xml.XmlParser.Validating", "false");
 
     Server server = new Server();
 
@@ -704,7 +731,6 @@
         branch.log(TreeLogger.TRACE, "Connection is null");
       }
     }
-
     return createServletContainer(logger, appRootDir, server, wac,
         connectorPort);
   }
@@ -715,8 +741,7 @@
   }
 
   protected WebAppContext createWebAppContext(TreeLogger logger, File appRootDir) {
-    return new WebAppContextWithReload(logger, appRootDir.getAbsolutePath(),
-        "/");
+    return new WebAppContextWithReload(logger, appRootDir.getAbsolutePath(), "/");
   }
 
   protected AbstractConnector getConnector(TreeLogger logger) {
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java
deleted file mode 100644
index 81418ad..0000000
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.
- */
-package com.google.gwt.dev.shell.jetty;
-
-import org.mortbay.log.Logger;
-
-/**
- * A Jetty {@link Logger} that suppresses all output.
- */
-public class JettyNullLogger implements Logger {
-
-  public void debug(String msg, Throwable th) {
-  }
-
-  public void debug(String msg, Object arg0, Object arg1) {
-  }
-
-  public Logger getLogger(String name) {
-    return this;
-  }
-
-  public void info(String msg, Object arg0, Object arg1) {
-  }
-
-  public boolean isDebugEnabled() {
-    return false;
-  }
-
-  public void setDebugEnabled(boolean enabled) {
-  }
-
-  public void warn(String msg, Throwable th) {
-  }
-
-  public void warn(String msg, Object arg0, Object arg1) {
-  }
-}
diff --git a/eclipse/user/.classpath b/eclipse/user/.classpath
index c857194..b168113 100644
--- a/eclipse/user/.classpath
+++ b/eclipse/user/.classpath
@@ -8,25 +8,25 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2.jar" sourcepath="/GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2-src.zip"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/junit/junit-4.8.2.jar" sourcepath="/GWT_TOOLS/lib/junit/junit-4.8.2-src.jar"/>
-	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/tomcat/servlet-api-2.5.jar"/>
-  <classpathentry kind="var" path="GWT_TOOLS/lib/jsr305/jsr305.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpclient-4.1.2.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpcore-4.1.2.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpmime-4.1.2.jar"/>
+	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/jsr305/jsr305.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpclient-4.3.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpcore-4.3.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpmime-4.3.1.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/james/apache-mime4j-0.6.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-codec-1.3.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-codec-1.8.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/tomcat/commons-collections-3.1.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-lang-2.6.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/tomcat/commons-logging-1.0.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-io-1.4.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/cssparser/cssparser-0.9.5.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/nekohtml/nekohtml-1.9.15.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-lang3-3.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-logging-1.1.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-io-2.4.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/cssparser/cssparser-0.9.11.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/nekohtml/nekohtml-1.9.19.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/selenium/selenium-java-client-driver.jar" sourcepath="/GWT_TOOLS/lib/selenium/selenium-java-client-driver-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/cup/java-cup-11a.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/xalan/xalan-2.7.1-nocup.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/serializer.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/xml-apis.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/serializer-2.7.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/xercesImpl-2.11.0.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/xml-apis-1.4.01.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/w3c/sac/sac-1.3.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/w3c/flute/flute-1.3-gg2.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/cglib/cglib-2.2.jar"/>
@@ -34,12 +34,12 @@
 	<classpathentry kind="var" path="GWT_TOOLS/lib/easymock/easymock-3.0.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/objectweb/asm-3.1.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/gwt-dev"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-2.9.jar" sourcepath="/GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-2.9-sources.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9.jar" sourcepath="/GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9-sources.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
 	<classpathentry kind="var" path="GWT_TOOLS/redist/json/r2_20080312/json-1.5.jar" sourcepath="/GWT_TOOLS/redist/json/r2_20080312/json-src.jar"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA.jar" sourcepath="/GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA-sources.jar"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA-sources.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/jetty/jetty-6.1.11.jar" sourcepath="/GWT_TOOLS/lib/jetty/jetty-6.1.11-src.zip"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
 	<classpathentry kind="var" path="GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final.jar" sourcepath="/GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/log4j/log4j-1.2.16.jar"/>
diff --git a/requestfactory/build.xml b/requestfactory/build.xml
index 2da2feb..40ea109 100755
--- a/requestfactory/build.xml
+++ b/requestfactory/build.xml
@@ -132,7 +132,7 @@
       classname="com.google.web.bindery.requestfactory.vm.RequestFactoryJreSuite">
       <jvmarg value="-Xss8m" />
       <classpath>
-        <fileset dir="${gwt.tools.lib}" includes="tomcat/servlet-api-2.5.jar" />
+        <fileset dir="${gwt.tools.lib}" includes="jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
         <fileset dir="${gwt.tools.lib}" includes="apache/log4j/log4j-1.2.16.jar" />
         <fileset dir="${gwt.tools.lib}" includes="slf4j/slf4j-api/slf4j-api-1.6.1.jar" />
         <fileset dir="${gwt.tools.lib}" includes="slf4j/slf4j-log4j12/slf4j-log4j12-1.6.1.jar" />
diff --git a/user/build.xml b/user/build.xml
index 42a0758..1a77b29 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -90,7 +90,7 @@
     <mkdir dir="${javac.out}" />
     <gwt.javac excludes="**/super/**">
       <classpath>
-        <pathelement location="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" />
+        <pathelement location="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar" />
         <pathelement location="${gwt.tools.lib}/jfreechart/jfreechart-1.0.3.jar" />
         <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
@@ -210,7 +210,7 @@
       <fileset dir="src" excludes="**/package.html" />
       <fileset dir="super" excludes="**/package.html" />
       <fileset dir="${javac.out}" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" excludes="**/*.java"/>
+      <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" excludes="**/*.java"/>
       <zipfileset src="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" />
       <zipfileset src="${gwt.tools.lib}/w3c/flute/flute-1.3-gg2.jar" />
       <zipfileset src="${gwt.tools.lib}/streamhtmlparser/streamhtmlparser-jsilver-r10/streamhtmlparser-jsilver-r10-1.5-rebased.jar" />
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 5c12917..ffcfe98 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -73,8 +73,8 @@
 import junit.framework.TestCase;
 import junit.framework.TestResult;
 
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.webapp.WebAppContext;
 
 import java.io.File;
 import java.lang.reflect.Constructor;
@@ -606,7 +606,7 @@
         {
           // Prevent file locking on Windows; pick up file changes.
           getInitParams().put(
-              "org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");
+              "org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
 
           // Prefer the parent class loader so that JUnit works.
           setParentLoaderPriority(true);
@@ -1144,10 +1144,9 @@
       path = '/' + module.getName() + path;
       if (!servletClass.equals(loadedServletsByPath.get(path))) {
         try {
-          Class<?> clazz = wac.loadClass(servletClass);
-          wac.addServlet(clazz, path);
+          wac.addServlet(servletClass, path);
           loadedServletsByPath.put(path, servletClass);
-        } catch (ClassNotFoundException e) {
+        } catch (Exception e) {
           getTopLogger().log(
               TreeLogger.WARN,
               "Failed to load servlet class '" + servletClass
diff --git a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
index 93d2dbb..e81f885c 100644
--- a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
+++ b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
@@ -35,9 +35,6 @@
 
 import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject;
 
-import org.w3c.css.sac.CSSParseException;
-import org.w3c.css.sac.ErrorHandler;
-
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -99,28 +96,9 @@
     public void run() {
       WebClient webClient = new WebClient(browser);
       webClient.setAlertHandler(this);
-      // Adding a handler that ignores errors to work-around
-      // https://sourceforge.net/tracker/?func=detail&aid=3090806&group_id=47038&atid=448266
-      webClient.setCssErrorHandler(new ErrorHandler() {
-
-        public void error(CSSParseException exception) {
-          // ignore
-        }
-
-        public void fatalError(CSSParseException exception) {
-          treeLogger.log(TreeLogger.WARN,
-              "CSS fatal error: " + exception.getURI() + " ["
-                  + exception.getLineNumber() + ":"
-                  + exception.getColumnNumber() + "] " + exception.getMessage());
-        }
-
-        public void warning(CSSParseException exception) {
-          // ignore
-        }
-      });
       webClient.setIncorrectnessListener(this);
-      webClient.setThrowExceptionOnFailingStatusCode(false);
-      webClient.setThrowExceptionOnScriptError(true);
+      webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
+      webClient.getOptions().setThrowExceptionOnScriptError(true);
       webClient.setOnbeforeunloadHandler(this);
       webClient.setJavaScriptErrorListener(new JavaScriptErrorListener() {
 
@@ -237,8 +215,8 @@
   private static Map<String, BrowserVersion> createBrowserMap() {
     Map<String, BrowserVersion> browserMap = new HashMap<String, BrowserVersion>();
     for (BrowserVersion browser : new BrowserVersion[] {
-        BrowserVersion.FIREFOX_3, BrowserVersion.FIREFOX_3_6, BrowserVersion.INTERNET_EXPLORER_6,
-        BrowserVersion.INTERNET_EXPLORER_7}) {
+        BrowserVersion.FIREFOX_17, BrowserVersion.INTERNET_EXPLORER_8,
+        BrowserVersion.INTERNET_EXPLORER_9, BrowserVersion.CHROME}) {
       browserMap.put(browser.getNickname(), browser);
     }
     return Collections.unmodifiableMap(browserMap);
@@ -263,8 +241,8 @@
   @Override
   public int initialize(String args) {
     if (args == null || args.length() == 0) {
-      // If no browsers specified, default to Firefox 3.
-      args = "FF3";
+      // If no browsers specified, default to Firefox 17.
+      args = "FF17";
     }
     Set<BrowserVersion> browserSet = new HashSet<BrowserVersion>();
     for (String browserName : args.split(",")) {
diff --git a/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java b/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
index 6ebaa39..6caa54b 100644
--- a/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
+++ b/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
@@ -19,12 +19,21 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.FilterRegistration.Dynamic;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 @SuppressWarnings(value = {"deprecation", "unchecked"})
 abstract class LogFilterServletContext implements ServletContext {
@@ -140,5 +149,110 @@
     realContext.setAttribute(name, object);
   }
 
+  public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public Dynamic addFilter(String arg0, Filter arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public Dynamic addFilter(String arg0, String arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public void addListener(Class<? extends EventListener> arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public void addListener(String arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public <T extends EventListener> void addListener(T arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(
+      String arg0, Class<? extends Servlet> arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {
+    return realContext.createFilter(arg0);
+  }
+
+  public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {
+    return realContext.createListener(arg0);
+  }
+
+  public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {
+    return realContext.createServlet(arg0);
+  }
+
+  public void declareRoles(String... arg0) {
+    realContext.declareRoles(arg0);
+  }
+
+  public ClassLoader getClassLoader() {
+    return realContext.getClassLoader();
+  }
+
+  public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+    return realContext.getDefaultSessionTrackingModes();
+  }
+
+  public int getEffectiveMajorVersion() {
+    return realContext.getEffectiveMajorVersion();
+  }
+
+  public int getEffectiveMinorVersion() {
+    return realContext.getEffectiveMinorVersion();
+  }
+
+  public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+    return realContext.getEffectiveSessionTrackingModes();
+  }
+
+  public FilterRegistration getFilterRegistration(String arg0) {
+    return realContext.getFilterRegistration(arg0);
+  }
+
+  public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+    return realContext.getFilterRegistrations();
+  }
+
+  public JspConfigDescriptor getJspConfigDescriptor() {
+    return realContext.getJspConfigDescriptor();
+  }
+
+  public ServletRegistration getServletRegistration(String arg0) {
+    return realContext.getServletRegistration(arg0);
+  }
+
+  public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+    return realContext.getServletRegistrations();
+  }
+
+  public SessionCookieConfig getSessionCookieConfig() {
+    return realContext.getSessionCookieConfig();
+  }
+
+  public boolean setInitParameter(String arg0, String arg1) {
+    return realContext.setInitParameter(arg0, arg1);
+  }
+
+  public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {
+    realContext.setSessionTrackingModes(arg0);
+  }
+
   protected abstract boolean shouldLog(Throwable t, String msg);
 }
\ No newline at end of file
diff --git a/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java b/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
index 865c48c..1772c68 100644
--- a/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
+++ b/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
@@ -18,21 +18,38 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.security.Principal;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.Locale;
 import java.util.Map;
 
+import javax.servlet.AsyncContext;
+import javax.servlet.DispatcherType;
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
 import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.Part;
 
 /**
  * A dummy class for testing methods that require an HttpServletRequest.
  */
 public class MockHttpServletRequest implements HttpServletRequest {
 
+  public boolean authenticate(HttpServletResponse arg0) throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public AsyncContext getAsyncContext() {
+    throw new UnsupportedOperationException();
+  }
+
   public Object getAttribute(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -69,6 +86,10 @@
     throw new UnsupportedOperationException();
   }
 
+  public DispatcherType getDispatcherType() {
+    throw new UnsupportedOperationException();
+  }
+
   public String getHeader(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -129,6 +150,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public Part getPart(String arg0) throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public Collection<Part> getParts() throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
   public String getPathInfo() {
     throw new UnsupportedOperationException();
   }
@@ -197,6 +226,10 @@
     throw new UnsupportedOperationException();
   }
 
+  public ServletContext getServletContext() {
+    throw new UnsupportedOperationException();
+  }
+
   public String getServletPath() {
     throw new UnsupportedOperationException();
   }
@@ -213,6 +246,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public boolean isAsyncStarted() {
+    throw new UnsupportedOperationException();
+  }
+
+  public boolean isAsyncSupported() {
+    throw new UnsupportedOperationException();
+  }
+
   public boolean isRequestedSessionIdFromCookie() {
     throw new UnsupportedOperationException();
   }
@@ -237,6 +278,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public void login(String arg0, String arg1) throws ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public void logout() throws ServletException {
+    throw new UnsupportedOperationException();
+  }
+
   public void removeAttribute(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -248,4 +297,13 @@
   public void setCharacterEncoding(String arg0) {
     throw new UnsupportedOperationException();
   }
+
+  public AsyncContext startAsync() throws IllegalStateException {
+    throw new UnsupportedOperationException();
+  }
+
+  public AsyncContext startAsync(ServletRequest arg0, ServletResponse arg1)
+      throws IllegalStateException {
+    throw new UnsupportedOperationException();
+  }
 }
diff --git a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
index 6ab9605..518cc4a 100644
--- a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
+++ b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
@@ -27,13 +27,22 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.FilterRegistration.Dynamic;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 /**
  * Test some of the failure modes associated with
@@ -168,7 +177,7 @@
       throw new UnsupportedOperationException();
     }
 
-    public Enumeration<String> getServlets() {
+    public Enumeration<Servlet> getServlets() {
       throw new UnsupportedOperationException();
     }
 
@@ -190,6 +199,111 @@
     public void setAttribute(String arg0, Object arg1) {
       throw new UnsupportedOperationException();
     }
+
+    public Dynamic addFilter(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Dynamic addFilter(String arg0, Filter arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void addListener(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends EventListener> void addListener(T arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void addListener(Class<? extends EventListener> arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(
+        String arg0, Class<? extends Servlet> arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public void declareRoles(String... arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public ClassLoader getClassLoader() {
+      throw new UnsupportedOperationException();
+    }
+
+    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+      throw new UnsupportedOperationException();
+    }
+
+    public int getEffectiveMajorVersion() {
+      throw new UnsupportedOperationException();
+    }
+
+    public int getEffectiveMinorVersion() {
+      throw new UnsupportedOperationException();
+    }
+
+    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+      throw new UnsupportedOperationException();
+    }
+
+    public FilterRegistration getFilterRegistration(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+      throw new UnsupportedOperationException();
+    }
+
+    public JspConfigDescriptor getJspConfigDescriptor() {
+      throw new UnsupportedOperationException();
+    }
+
+    public ServletRegistration getServletRegistration(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+      throw new UnsupportedOperationException();
+    }
+
+    public SessionCookieConfig getSessionCookieConfig() {
+      throw new UnsupportedOperationException();
+    }
+
+    public boolean setInitParameter(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {
+      throw new UnsupportedOperationException();
+    }
   }
 
   public void testDoGetSerializationPolicy_FailToOpenMD5Resource()
diff --git a/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java b/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
index 3f51bd5..cf6d44b 100644
--- a/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
+++ b/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
@@ -15,12 +15,15 @@
  */
 package com.google.web.bindery.requestfactory.server;
 
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.bio.SocketConnector;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.SessionHandler;
-import org.mortbay.servlet.GzipFilter;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.bio.SocketConnector;
+import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlets.GzipFilter;
+
+import java.util.EnumSet;
+
+import javax.servlet.DispatcherType;
 
 /**
  * A utility class for hosting an instance of {@link RequestFactoryServlet}.
@@ -33,13 +36,15 @@
     connector.setPort(9999);
     server.addConnector(connector);
 
-    Context ctx = new Context();
-    ctx.addServlet(RequestFactoryServlet.class, "/gwtRequest");
-    ctx.addFilter(GzipFilter.class, "*", Handler.DEFAULT);
+    ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+    handler.setContextPath("/");
+    handler.addServlet(RequestFactoryServlet.class, "/gwtRequest");
+    handler.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
+
     SessionHandler sessionHandler = new SessionHandler();
     sessionHandler.getSessionManager().setMaxInactiveInterval(5);
-    ctx.setSessionHandler(sessionHandler);
-    server.addHandler(ctx);
+    handler.setSessionHandler(sessionHandler);
+    server.setHandler(handler);
 
     try {
       server.start();