Cherrypick r11349 into 2.5 branch
Link to TroubleshootingOOPHM instead of embedding in iframe

Review by: rdayal@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/2.5@11350 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js b/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
index aebf9c7..1b1e354 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/devmode.js
@@ -122,8 +122,8 @@
   outer.innerHTML = 
     '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
     ';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
-    '<div style="font-size:30px;font-weight:bold;">' + simpleEscape(summary) + '</div>' +
-    '<div style="font-size:15px;">' + simpleEscape(details) + '</div>' +
+    '<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
+    '<div style="font-size:15px;">' + details + '</div>' +
     '</div>' +
     '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
     ';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
@@ -154,7 +154,7 @@
     glassStyle.setExpression("height", "document.documentElement.clientHeight");
   }
 
-  $doc.title = simpleEscape(summary) + " [" + $doc.title + "]";
+  $doc.title = summary + " [" + $doc.title + "]";
 }
 
 
@@ -321,9 +321,11 @@
   if ($errFn) {
     $errFn($moduleName);
   } else {
-    __gwt_displayGlassMessage("Plugin failed to connect to Development Mode server at " + codeServer,
-        "Follow the underlying troubleshooting instructions");
-    loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM");
+    __gwt_displayGlassMessage(
+        "Plugin failed to connect to Development Mode server at " + simpleEscape(codeServer),
+        "Follow the troubleshooting instructions at "
+        + "<a href='http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM'>"
+        + "http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM</a>");
   }
 }
 
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html b/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
index 4c82193..267fdf7 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/hosted.html
@@ -175,8 +175,8 @@
   outer.innerHTML = 
     '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
     ';left:50px;top:50px;width:600px;color:#FFF;font-family:verdana;text-align:left;">' +
-    '<div style="font-size:30px;font-weight:bold;">' + simpleEscape(summary) + '</div>' +
-    '<div style="font-size:15px;">' + simpleEscape(details) + '</div>' +
+    '<div style="font-size:30px;font-weight:bold;">' + summary + '</div>' +
+    '<div style="font-size:15px;">' + details + '</div>' +
     '</div>' +
     '<div style="position:absolute;z-index:' + __gwt_glassMessageZIndex-- +
     ';left:0px;top:0px;right:0px;bottom:0px;filter:alpha(opacity=60);opacity:0.6;background-color:#000;"></div>'
@@ -207,7 +207,7 @@
     glassStyle.setExpression("height", "document.documentElement.clientHeight");
   }
 
-  $doc.title = simpleEscape(summary) + " [" + $doc.title + "]";
+  $doc.title = summary + " [" + $doc.title + "]";
 }
 
 function findPluginObject() {
@@ -294,9 +294,11 @@
       if (errFn) {
         errFn(modName);
       } else {
-        __gwt_displayGlassMessage("Plugin failed to connect to Development Mode server at " + $hosted,
-            "Follow the underlying troubleshooting instructions");
-        loadIframe("http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM");
+        __gwt_displayGlassMessage(
+            "Plugin failed to connect to Development Mode server at " + simpleEscape($hosted),
+            "Follow the troubleshooting instructions at "
+            + "<a href='http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM'>"
+            + "http://code.google.com/p/google-web-toolkit/wiki/TroubleshootingOOPHM</a>");
       }
     }
   }
diff --git a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
index 9a11514..b724854 100644
--- a/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
+++ b/dev/core/src/com/google/gwt/dev/shell/ModuleSpace.java
@@ -18,6 +18,7 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.util.Name;
+import com.google.gwt.dev.util.Util;
 import com.google.gwt.dev.util.Name.BinaryName;
 import com.google.gwt.dev.util.log.speedtracer.DevModeEventType;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger;
@@ -614,17 +615,18 @@
       String summary, String entryPointTypeName, Throwable e) throws Throwable {
     StringWriter writer = new StringWriter();
     e.printStackTrace(new PrintWriter(writer));
-    String stackTrace = writer.toString().replaceFirst(
+    String stackTrace = Util.escapeXml(writer.toString()).replaceFirst(
         // (?ms) for regex pattern modifiers MULTILINE and DOTALL
         "(?ms)(Caused by:.+)", "<b>$1</b>");
     String details = "<p>Exception while loading module <b>"
-        + entryPointTypeName + "</b>. See Development Mode for details.</p>"
+        + Util.escapeXml(entryPointTypeName) + "</b>."
+        + " See Development Mode for details.</p>"
         + "<div style='overflow:visisble;white-space:pre;'>" + stackTrace
         + "</div>";
 
     invokeNativeVoid("__gwt_displayGlassMessage", null,
-        new Class[]{String.class, String.class},
-        new Object[]{summary, details});
+        new Class[] { String.class, String.class },
+        new Object[] { Util.escapeXml(summary), details });
   }
 
   private boolean isUserFrame(StackTraceElement element) {