]> source.dussan.org Git - vaadin-framework.git/commitdiff
Test case and fix for #4562 - Browser version parsing fails for some browsers
authorArtur Signell <artur.signell@itmill.com>
Fri, 16 Apr 2010 12:46:07 +0000 (12:46 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 16 Apr 2010 12:46:07 +0000 (12:46 +0000)
svn changeset:12610/svn branch:6.3

src/com/vaadin/terminal/gwt/client/VBrowserDetails.java
tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java

index d9f585e44f1661e057bbf01185991ce761d720d3..92b3dedf1f9f8ceb87ec0b291c996de54a7845c0 100644 (file)
@@ -57,41 +57,57 @@ public class VBrowserDetails implements Serializable {
         isFirefox = userAgent.indexOf(" firefox/") != -1;\r
 \r
         // Rendering engine version\r
-        if (isGecko) {\r
-            String tmp = userAgent.substring(userAgent.indexOf("rv:") + 3);\r
-            tmp = tmp.replaceFirst("(\\.[0-9]+).+", "$1");\r
-            browserEngineVersion = Float.parseFloat(tmp);\r
-        } else if (isWebKit) {\r
-            String tmp = userAgent.substring(userAgent.indexOf("webkit/") + 7);\r
-            tmp = tmp.replaceFirst("([0-9]+)[^0-9].+", "$1");\r
-            browserEngineVersion = Float.parseFloat(tmp);\r
+        try {\r
+            if (isGecko) {\r
+                int rvPos = userAgent.indexOf("rv:");\r
+                if (rvPos >= 0) {\r
+                    String tmp = userAgent.substring(rvPos + 3);\r
+                    tmp = tmp.replaceFirst("(\\.[0-9]+).+", "$1");\r
+                    browserEngineVersion = Float.parseFloat(tmp);\r
+                }\r
+            } else if (isWebKit) {\r
+                String tmp = userAgent\r
+                        .substring(userAgent.indexOf("webkit/") + 7);\r
+                tmp = tmp.replaceFirst("([0-9]+)[^0-9].+", "$1");\r
+                browserEngineVersion = Float.parseFloat(tmp);\r
+            }\r
+        } catch (Exception e) {\r
+            // Browser engine version parsing failed\r
+            System.err.println("Browser engine version parsing failed for: "\r
+                    + userAgent);\r
         }\r
 \r
         // Browser version\r
-        if (isIE) {\r
-            String ieVersionString = userAgent.substring(userAgent\r
-                    .indexOf("msie ") + 5);\r
-            ieVersionString = safeSubstring(ieVersionString, 0, ieVersionString\r
-                    .indexOf(";"));\r
-            parseVersionString(ieVersionString);\r
-        } else if (isFirefox) {\r
-            int i = userAgent.indexOf(" firefox/") + 9;\r
-            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
-        } else if (isChrome) {\r
-            int i = userAgent.indexOf(" chrome/") + 8;\r
-            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
-        } else if (isSafari) {\r
-            int i = userAgent.indexOf(" version/") + 9;\r
-            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
-        } else if (isOpera) {\r
-            int i = userAgent.indexOf(" version/");\r
-            if (i != -1) {\r
-                // Version present in Opera 10 and newer\r
-                i += 9; // " version/".length\r
-            } else {\r
-                i = userAgent.indexOf("opera/") + 6;\r
+        try {\r
+            if (isIE) {\r
+                String ieVersionString = userAgent.substring(userAgent\r
+                        .indexOf("msie ") + 5);\r
+                ieVersionString = safeSubstring(ieVersionString, 0,\r
+                        ieVersionString.indexOf(";"));\r
+                parseVersionString(ieVersionString);\r
+            } else if (isFirefox) {\r
+                int i = userAgent.indexOf(" firefox/") + 9;\r
+                parseVersionString(safeSubstring(userAgent, i, i + 5));\r
+            } else if (isChrome) {\r
+                int i = userAgent.indexOf(" chrome/") + 8;\r
+                parseVersionString(safeSubstring(userAgent, i, i + 5));\r
+            } else if (isSafari) {\r
+                int i = userAgent.indexOf(" version/") + 9;\r
+                parseVersionString(safeSubstring(userAgent, i, i + 5));\r
+            } else if (isOpera) {\r
+                int i = userAgent.indexOf(" version/");\r
+                if (i != -1) {\r
+                    // Version present in Opera 10 and newer\r
+                    i += 9; // " version/".length\r
+                } else {\r
+                    i = userAgent.indexOf("opera/") + 6;\r
+                }\r
+                parseVersionString(safeSubstring(userAgent, i, i + 5));\r
             }\r
-            parseVersionString(safeSubstring(userAgent, i, i + 5));\r
+        } catch (Exception e) {\r
+            // Browser version parsing failed\r
+            System.err.println("Browser version parsing failed for: "\r
+                    + userAgent);\r
         }\r
 \r
         // Operating system\r
index 168b99a19b009057fa7cc4a20d61cdaf115a0f3a..c1fa4e82f6fc951acc63c283703c954b36cd1e56 100644 (file)
@@ -11,6 +11,8 @@ public class BrowserUserAgentParser extends TestCase {
     private static final String FIREFOX35_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 (.NET CLR 3.5.30729) FirePHP/0.4";\r
     private static final String FIREFOX36_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)";\r
     private static final String FIREFOX36B_MAC = "UAString mozilla/5.0 (macintosh; u; intel mac os x 10.6; en-us; rv:1.9.2) gecko/20100115 firefox/3.6";\r
+    private static final String FIREFOX_30B5_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5";\r
+    private static final String KONQUEROR_LINUX = "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)";\r
 \r
     private static final String IE6_WINDOWS = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";\r
     private static final String IE7_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";\r
@@ -106,6 +108,22 @@ public class BrowserUserAgentParser extends TestCase {
         assertWindows(bd);\r
     }\r
 \r
+    public void testFirefox30b5() {\r
+        VBrowserDetails bd = new VBrowserDetails(FIREFOX_30B5_MAC);\r
+        assertGecko(bd);\r
+        assertFirefox(bd);\r
+        assertBrowserMajorVersion(bd, 3);\r
+        assertBrowserMinorVersion(bd, 0);\r
+        assertEngineVersion(bd, 1.9f);\r
+        assertMacOSX(bd);\r
+    }\r
+\r
+    public void testKonquerorLinux() {\r
+        // Just ensure detection does not crash\r
+        VBrowserDetails bd = new VBrowserDetails(KONQUEROR_LINUX);\r
+        assertLinux(bd);\r
+    }\r
+\r
     public void testFirefox36b() {\r
         VBrowserDetails bd = new VBrowserDetails(FIREFOX36B_MAC);\r
         assertGecko(bd);\r