Browse Source

Fix for #4356 "Add operating system detection" and #4510 "Add css class names according to browser engine"


svn changeset:12453/svn branch:6.3
tags/6.7.0.beta1
Artur Signell 14 years ago
parent
commit
685d3ef1a1

+ 72
- 20
src/com/vaadin/terminal/gwt/client/BrowserInfo.java View File

@@ -15,6 +15,20 @@ import com.google.gwt.user.client.ui.RootPanel;
*/
public class BrowserInfo {

private static final String BROWSER_OPERA = "op";
private static final String BROWSER_IE = "ie";
private static final String BROWSER_FIREFOX = "ff";
private static final String BROWSER_SAFARI = "sa";

public static final String ENGINE_GECKO = "gecko";
public static final String ENGINE_WEBKIT = "webkit";
public static final String ENGINE_PRESTO = "presto";
public static final String ENGINE_TRIDENT = "trident";

private static final String OS_WINDOWS = "win";
private static final String OS_LINUX = "lin";
private static final String OS_MACOSX = "mac";

private static BrowserInfo instance;

private static String cssClass = null;
@@ -84,39 +98,77 @@ public class BrowserInfo {
String prefix = "v-";

if (cssClass == null) {
String b = "";
String v = "";
String vv = "";
String browserIdentifier = "";
String majorVersionClass = "";
String minorVersionClass = "";
String browserEngineClass = "";

if (browserDetails.isFirefox()) {
b = "ff";
v = b + browserDetails.getBrowserMajorVersion();
vv = v + browserDetails.getBrowserMinorVersion();
browserIdentifier = BROWSER_FIREFOX;
majorVersionClass = browserIdentifier
+ browserDetails.getBrowserMajorVersion();
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_GECKO;
} else if (browserDetails.isChrome()) {
// TODO update when Chrome is more stable
b = "sa";
v = "ch";
browserIdentifier = BROWSER_SAFARI;
majorVersionClass = "ch";
browserEngineClass = ENGINE_WEBKIT;
} else if (browserDetails.isSafari()) {
b = "sa";
v = b + browserDetails.getBrowserMajorVersion();
vv = v + browserDetails.getBrowserMinorVersion();
browserIdentifier = BROWSER_SAFARI;
majorVersionClass = browserIdentifier
+ browserDetails.getBrowserMajorVersion();
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_WEBKIT;
} else if (browserDetails.isIE()) {
b = "ie";
v = b + browserDetails.getBrowserMajorVersion();
vv = v + browserDetails.getBrowserMinorVersion();
browserIdentifier = BROWSER_IE;
majorVersionClass = browserIdentifier
+ browserDetails.getBrowserMajorVersion();
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_TRIDENT;
} else if (browserDetails.isOpera()) {
b = "op";
v = b + browserDetails.getBrowserMajorVersion();
vv = v + browserDetails.getBrowserMinorVersion();
browserIdentifier = BROWSER_OPERA;
majorVersionClass = browserIdentifier
+ browserDetails.getBrowserMajorVersion();
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_PRESTO;
}

cssClass = prefix + browserIdentifier;
if (!"".equals(majorVersionClass)) {
cssClass = cssClass + " " + prefix + majorVersionClass;
}
cssClass = prefix + b + " " + prefix + v;
if (!"".equals(vv)) {
cssClass = cssClass + " " + prefix + vv;
if (!"".equals(minorVersionClass)) {
cssClass = cssClass + " " + prefix + minorVersionClass;
}
if (!"".equals(browserEngineClass)) {
cssClass = cssClass + " " + prefix + browserEngineClass;
}
String osClass = getOperatingSystemClass();
if (osClass != null) {
cssClass = cssClass + " " + prefix + osClass;
}
}

return cssClass;
}

private String getOperatingSystemClass() {
if (browserDetails.isWindows()) {
return OS_WINDOWS;
} else if (browserDetails.isLinux()) {
return OS_LINUX;
} else if (browserDetails.isMacOSX()) {
return OS_MACOSX;
}
// Unknown OS
return null;
}

public boolean isIE() {
return browserDetails.isIE();
}

+ 50
- 8
src/com/vaadin/terminal/gwt/client/VBrowserDetails.java View File

@@ -15,15 +15,19 @@ import com.vaadin.terminal.gwt.server.WebBrowser;
*/
public class VBrowserDetails implements Serializable {
private boolean isGecko;
private boolean isWebKit;
private boolean isPresto;
private boolean isGecko = false;
private boolean isWebKit = false;
private boolean isPresto = false;
private boolean isSafari;
private boolean isChrome;
private boolean isFirefox;
private boolean isOpera;
private boolean isIE;
private boolean isSafari = false;
private boolean isChrome = false;
private boolean isFirefox = false;
private boolean isOpera = false;
private boolean isIE = false;
private boolean isWindows = false;
private boolean isMacOSX = false;
private boolean isLinux = false;
private float browserEngineVersion = -1;
private int browserMajorVersion = -1;
@@ -90,6 +94,16 @@ public class VBrowserDetails implements Serializable {
parseVersionString(safeSubstring(userAgent, i, i + 5));
}
// Operating system
if (userAgent.contains("windows ")) {
isWindows = true;
} else if (userAgent.contains("linux")) {
isLinux = true;
} else if (userAgent.contains("macintosh")
|| userAgent.contains("mac osx")
|| userAgent.contains("mac os x")) {
isMacOSX = true;
}
}
private void parseVersionString(String versionString) {
@@ -240,4 +254,32 @@ public class VBrowserDetails implements Serializable {
browserMinorVersion = 0;
}
}
/**
* Tests if the browser is run on Windows.
*
* @return true if run on Windows, false otherwise
*/
public boolean isWindows() {
return isWindows;
}
/**
* Tests if the browser is run on Mac OSX.
*
* @return true if run on Mac OSX, false otherwise
*/
public boolean isMacOSX() {
return isMacOSX;
}
/**
* Tests if the browser is run on Linux.
*
* @return true if run on Linux, false otherwise
*/
public boolean isLinux() {
return isLinux;
}
}

+ 31
- 0
src/com/vaadin/terminal/gwt/server/WebBrowser.java View File

@@ -225,4 +225,35 @@ public class WebBrowser implements Terminal {

return browserDetails.getBrowserMinorVersion();
}

/**
* Tests whether the user is using Linux.
*
* @return true if the user is using Linux, false if the user is not using
* Linux or if no information on the browser is present
*/
public boolean isLinux() {
return browserDetails.isLinux();
}

/**
* Tests whether the user is using Mac OS X.
*
* @return true if the user is using Mac OS X, false if the user is not
* using Mac OS X or if no information on the browser is present
*/
public boolean isMacOSX() {
return browserDetails.isMacOSX();
}

/**
* Tests whether the user is using Windows.
*
* @return true if the user is using Windows, false if the user is not using
* Windows or if no information on the browser is present
*/
public boolean isWindows() {
return browserDetails.isWindows();
}

}

+ 74
- 30
tests/src/com/vaadin/tests/server/BrowserUserAgentParser.java View File

@@ -6,155 +6,180 @@ import com.vaadin.terminal.gwt.client.VBrowserDetails;
public class BrowserUserAgentParser extends TestCase {
private static final String FIREFOX30 = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6";
private static final String FIREFOX35 = "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";
private static final String FIREFOX36 = "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)";
private static final String FIREFOX36B = "UAString mozilla/5.0 (macintosh; u; intel mac os x 10.6; en-us; rv:1.9.2) gecko/20100115 firefox/3.6";
private static final String FIREFOX30_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6";
private static final String FIREFOX30_LINUX = "Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.12) Gecko/2009070811 Ubuntu/9.04 (jaunty) Firefox/3.0.12";
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";
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)";
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";
private static final String IE6 = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
private static final String IE7 = "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)";
private static final String IE8 = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
private static final String IE8_IN_IE7_MODE = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
private static final String IE6_WINDOWS = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
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)";
private static final String IE8_WINDOWS = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
private static final String IE8_IN_IE7_MODE_WINDOWS = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)";
// "Version/" was added in 10.00
private static final String OPERA964 = "Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1";
private static final String OPERA1010 = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10";
private static final String OPERA1050 = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50";
private static final String OPERA964_WINDOWS = "Opera/9.64(Windows NT 5.1; U; en) Presto/2.1.1";
private static final String OPERA1010_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10";
private static final String OPERA1050_WINDOWS = "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.5.22 Version/10.50";
private static final String CHROME3 = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0";
private static final String CHROME4 = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
private static final String CHROME3_MAC = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.198 Safari/532.0";
private static final String CHROME4_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
private static final String SAFARI3 = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29";
private static final String SAFARI4 = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7";
private static final String SAFARI3_WINDOWS = "Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29";
private static final String SAFARI4_MAC = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7";
public void testSafari3() {
VBrowserDetails bd = new VBrowserDetails(SAFARI3);
VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
assertWebKit(bd);
assertSafari(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 2);
assertEngineVersion(bd, 525.0f);
assertWindows(bd);
}
public void testSafari4() {
VBrowserDetails bd = new VBrowserDetails(SAFARI4);
VBrowserDetails bd = new VBrowserDetails(SAFARI4_MAC);
assertWebKit(bd);
assertSafari(bd);
assertBrowserMajorVersion(bd, 4);
assertBrowserMinorVersion(bd, 0);
assertEngineVersion(bd, 531f);
assertMacOSX(bd);
}
public void testChrome3() {
VBrowserDetails bd = new VBrowserDetails(CHROME3);
VBrowserDetails bd = new VBrowserDetails(CHROME3_MAC);
assertWebKit(bd);
assertChrome(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 0);
assertEngineVersion(bd, 532.0f);
assertMacOSX(bd);
}
public void testChrome4() {
VBrowserDetails bd = new VBrowserDetails(CHROME4);
VBrowserDetails bd = new VBrowserDetails(CHROME4_WINDOWS);
assertWebKit(bd);
assertChrome(bd);
assertBrowserMajorVersion(bd, 4);
assertBrowserMinorVersion(bd, 0);
assertEngineVersion(bd, 532f);
assertWindows(bd);
}
public void testFirefox3() {
VBrowserDetails bd = new VBrowserDetails(FIREFOX30);
VBrowserDetails bd = new VBrowserDetails(FIREFOX30_WINDOWS);
assertGecko(bd);
assertFirefox(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 0);
assertEngineVersion(bd, 1.9f);
assertWindows(bd);
bd = new VBrowserDetails(FIREFOX30_LINUX);
assertGecko(bd);
assertFirefox(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 0);
assertEngineVersion(bd, 1.9f);
assertLinux(bd);
}
public void testFirefox35() {
VBrowserDetails bd = new VBrowserDetails(FIREFOX35);
VBrowserDetails bd = new VBrowserDetails(FIREFOX35_WINDOWS);
assertGecko(bd);
assertFirefox(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 5);
assertEngineVersion(bd, 1.9f);
assertWindows(bd);
}
public void testFirefox36() {
VBrowserDetails bd = new VBrowserDetails(FIREFOX36);
VBrowserDetails bd = new VBrowserDetails(FIREFOX36_WINDOWS);
assertGecko(bd);
assertFirefox(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 6);
assertEngineVersion(bd, 1.9f);
assertWindows(bd);
}
public void testFirefox36b() {
VBrowserDetails bd = new VBrowserDetails(FIREFOX36B);
VBrowserDetails bd = new VBrowserDetails(FIREFOX36B_MAC);
assertGecko(bd);
assertFirefox(bd);
assertBrowserMajorVersion(bd, 3);
assertBrowserMinorVersion(bd, 6);
assertEngineVersion(bd, 1.9f);
assertMacOSX(bd);
}
public void testOpera964() {
VBrowserDetails bd = new VBrowserDetails(OPERA964);
VBrowserDetails bd = new VBrowserDetails(OPERA964_WINDOWS);
assertPresto(bd);
assertOpera(bd);
assertBrowserMajorVersion(bd, 9);
assertBrowserMinorVersion(bd, 64);
assertWindows(bd);
}
public void testOpera1010() {
VBrowserDetails bd = new VBrowserDetails(OPERA1010);
VBrowserDetails bd = new VBrowserDetails(OPERA1010_WINDOWS);
assertPresto(bd);
assertOpera(bd);
assertBrowserMajorVersion(bd, 10);
assertBrowserMinorVersion(bd, 10);
assertWindows(bd);
}
public void testOpera1050() {
VBrowserDetails bd = new VBrowserDetails(OPERA1050);
VBrowserDetails bd = new VBrowserDetails(OPERA1050_WINDOWS);
assertPresto(bd);
assertOpera(bd);
assertBrowserMajorVersion(bd, 10);
assertBrowserMinorVersion(bd, 50);
assertWindows(bd);
}
public void testIE6() {
VBrowserDetails bd = new VBrowserDetails(IE6);
VBrowserDetails bd = new VBrowserDetails(IE6_WINDOWS);
// assertTrident(bd);
assertIE(bd);
assertBrowserMajorVersion(bd, 6);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}
public void testIE7() {
VBrowserDetails bd = new VBrowserDetails(IE7);
VBrowserDetails bd = new VBrowserDetails(IE7_WINDOWS);
// assertTrident(bd);
assertIE(bd);
assertBrowserMajorVersion(bd, 7);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}
public void testIE8() {
VBrowserDetails bd = new VBrowserDetails(IE8);
VBrowserDetails bd = new VBrowserDetails(IE8_WINDOWS);
// assertTrident(bd);
assertIE(bd);
assertBrowserMajorVersion(bd, 8);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}
public void testIE8CompatibilityMode() {
VBrowserDetails bd = new VBrowserDetails(IE8_IN_IE7_MODE);
VBrowserDetails bd = new VBrowserDetails(IE8_IN_IE7_MODE_WINDOWS);
bd.setIE8InCompatibilityMode();
// assertTrident(bd);
assertIE(bd);
assertBrowserMajorVersion(bd, 7);
assertBrowserMinorVersion(bd, 0);
assertWindows(bd);
}
/*
@@ -244,4 +269,23 @@ public class BrowserUserAgentParser extends TestCase {
assertFalse(browserDetails.isOpera());
assertTrue(browserDetails.isSafari());
}
private void assertMacOSX(VBrowserDetails browserDetails) {
assertFalse(browserDetails.isLinux());
assertFalse(browserDetails.isWindows());
assertTrue(browserDetails.isMacOSX());
}
private void assertWindows(VBrowserDetails browserDetails) {
assertFalse(browserDetails.isLinux());
assertTrue(browserDetails.isWindows());
assertFalse(browserDetails.isMacOSX());
}
private void assertLinux(VBrowserDetails browserDetails) {
assertTrue(browserDetails.isLinux());
assertFalse(browserDetails.isWindows());
assertFalse(browserDetails.isMacOSX());
}
}

Loading…
Cancel
Save