add ie9 user.agent with fallback binding to ie8. (in preparation for ie9 support).

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


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9835 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java b/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java
index 2daa472..8320610 100644
--- a/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java
+++ b/dev/core/src/com/google/gwt/dev/shell/StandardRebindOracle.java
@@ -161,9 +161,10 @@
       // and we may have a partial match based on fall back values
       assert minCostRuleSoFar != null;
       if (minCostRuleSoFar.getFallbackEvaluationCost() < Integer.MAX_VALUE) {
-        logger.log(TreeLogger.WARN, "Could not find an exact match rule. Using 'closest' rule " + 
-            minCostRuleSoFar + " based on fall back values. You may need to implement a specific " +
-            "binding in case the fall back behavior does not replace the missing binding");
+        // todo - enable 
+        // logger.log(TreeLogger.WARN, "Could not find an exact match rule. Using 'closest' rule " + 
+        //    minCostRuleSoFar + " based on fall back values. You may need to implement a specific " +
+        //    "binding in case the fall back behavior does not replace the missing binding");
         if (!usedRules.contains(minCostRuleSoFar)) {
           usedRules.add(minCostRuleSoFar);
           logger.log(TreeLogger.DEBUG, "No exact match was found, using closest match rule " + minCostRuleSoFar);
diff --git a/user/src/com/google/gwt/user/UserAgent.gwt.xml b/user/src/com/google/gwt/user/UserAgent.gwt.xml
index 261e194..197b0a6 100644
--- a/user/src/com/google/gwt/user/UserAgent.gwt.xml
+++ b/user/src/com/google/gwt/user/UserAgent.gwt.xml
@@ -24,6 +24,7 @@
   <extend-property name="user.agent" values="gecko1_8" />
   <extend-property name="user.agent" values="safari" />
   <extend-property name="user.agent" values="opera" />
+  <extend-property name="user.agent" values="ie9" fallback-value="ie8" />
   <property-provider name="user.agent" generator="com.google.gwt.user.rebind.UserAgentPropertyGenerator"/>
 
   <!-- Set to false to avoid runtime warnings for mismatched runtime and -->
diff --git a/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java b/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
index 8c70403..283d659 100644
--- a/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/UserAgentPropertyGenerator.java
@@ -37,7 +37,7 @@
    * class.
    */
   private static final List<String> VALID_VALUES = Arrays.asList(new String[]{
-      "ie6", "ie8", "gecko1_8", "safari", "opera"});
+      "ie6", "ie8", "gecko1_8", "safari", "opera", "ie9"});
 
   /**
    * List of predicates to identify user agent.
@@ -61,6 +61,12 @@
         .println("return (ua.indexOf('webkit') != -1);")
       .returns("'safari'"),
 
+      // IE9
+      new UserAgentPropertyGeneratorPredicate("ie9")
+      .getPredicateBlock()
+        .println("return (ua.indexOf('msie') != -1 && ($doc.documentMode >= 9));")
+      .returns("'ie9'"),
+      
       // IE8
       new UserAgentPropertyGeneratorPredicate("ie8")
       .getPredicateBlock()
@@ -122,7 +128,7 @@
       String fallback, SortedSet<ConfigurationProperty> configProperties) {
     for (String value : possibleValues) {
       if (!VALID_VALUES.contains(value)) {
-        logger.log(TreeLogger.ERROR, "Unrecognized "
+        logger.log(TreeLogger.WARN, "Unrecognized "
             + UserAgentGenerator.PROPERTY_USER_AGENT + " property value '"
             + value + "', possibly due to UserAgent.gwt.xml and "
             + UserAgentPropertyGenerator.class.getName()