in tobago-core/src/main/java/org/apache/myfaces/tobago/context/UserAgent.java [280:335]
public static UserAgent getInstance(final String header) {
if (header == null) {
return DEFAULT;
}
if (header.contains("MSIE") || header.contains("Trident")) {
if (header.contains("MSIE 6.0")) {
return MSIE_6_0;
} else if (header.contains("MSIE 7.0")) {
if (header.contains("Trident")) {
return MSIE_7_0_COMPAT;
} else {
return MSIE_7_0;
}
} else if (header.contains("MSIE 8.0")) {
return MSIE_8_0;
} else if (header.contains("MSIE 9.0")) {
return MSIE_9_0;
} else if (header.contains("MSIE 10.0")) {
return MSIE_10_0;
} else if (header.contains("rv:11")) {
return MSIE_11_0;
} else {
return MSIE;
}
} else if (header.contains("AppleWebKit")) {
return WEBKIT;
} else if (header.contains("Gecko")) {
if (header.contains("rv:1.8")) {
return GECKO_1_8;
} else if (header.contains("rv:1.9")) {
return GECKO_1_9;
} else {
final int index = header.indexOf("rv:");
final StringTokenizer tokenizer = new StringTokenizer(header.substring(index + 3), " .");
final String versionString = tokenizer.nextToken();
try {
final int version = Integer.parseInt(versionString);
if (version >= 23) {
return GECKO_23_0;
} else if (version >= 2) {
return GECKO_2_0;
}
} catch (final NumberFormatException e) {
if (LOG.isDebugEnabled()) {
LOG.debug(header, e);
}
}
return GECKO;
}
} else if (header.contains("Presto")) {
return PRESTO;
}
return DEFAULT;
}