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
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
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