Browse Source

Correctly detect PhantomJS 2.1

Change-Id: I9b1df949b831b84aa05bf611b0128eb2414bbbae
tags/7.7.0.alpha3
Artur Signell 8 years ago
parent
commit
25e824aea4

+ 8
- 0
client/src/main/java/com/vaadin/client/BrowserInfo.java View File

@@ -165,6 +165,14 @@ public class BrowserInfo {
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_WEBKIT;
} else if (browserDetails.isPhantomJS()) {
// Safari needed for theme
browserIdentifier = BROWSER_SAFARI;
majorVersionClass = browserIdentifier
+ getBrowserMajorVersion();
minorVersionClass = majorVersionClass
+ browserDetails.getBrowserMinorVersion();
browserEngineClass = ENGINE_WEBKIT;
} else if (browserDetails.isIE()) {
browserIdentifier = BROWSER_IE;
majorVersionClass = browserIdentifier

+ 29
- 0
client/src/test/java/com/vaadin/client/VBrowserDetailsUserAgentParserTest.java View File

@@ -61,6 +61,8 @@ public class VBrowserDetailsUserAgentParserTest {

private static final String EDGE_WINDOWS_10 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240";

private static final String PHANTOMJS_211_MAC = "Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1";

@Test
public void testSafari3() {
VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
@@ -471,6 +473,16 @@ public class VBrowserDetailsUserAgentParserTest {
assertWindows(bd, false);
}

@Test
public void testPhantomJs211() {
VBrowserDetails bd = new VBrowserDetails(PHANTOMJS_211_MAC);
assertPhantomJS(bd);
assertWebKit(bd);
assertBrowserMajorVersion(bd, 2);
assertBrowserMinorVersion(bd, 1);
assertMacOSX(bd);
}

/*
* Helper methods below
*/
@@ -525,6 +537,17 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isTrident());
}

private void assertPhantomJS(VBrowserDetails browserDetails) {
// Browser
assertFalse(browserDetails.isFirefox());
assertFalse(browserDetails.isChrome());
assertFalse(browserDetails.isIE());
assertFalse(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertTrue(browserDetails.isPhantomJS());
}

private void assertFirefox(VBrowserDetails browserDetails) {
// Browser
assertTrue(browserDetails.isFirefox());
@@ -533,6 +556,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertChrome(VBrowserDetails browserDetails) {
@@ -543,6 +567,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertIE(VBrowserDetails browserDetails) {
@@ -553,6 +578,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertOpera(VBrowserDetails browserDetails) {
@@ -563,6 +589,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertTrue(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertSafari(VBrowserDetails browserDetails) {
@@ -573,6 +600,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isOpera());
assertTrue(browserDetails.isSafari());
assertFalse(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertEdge(VBrowserDetails browserDetails) {
@@ -583,6 +611,7 @@ public class VBrowserDetailsUserAgentParserTest {
assertFalse(browserDetails.isOpera());
assertFalse(browserDetails.isSafari());
assertTrue(browserDetails.isEdge());
assertFalse(browserDetails.isPhantomJS());
}

private void assertMacOSX(VBrowserDetails browserDetails) {

+ 8
- 2
shared/src/main/java/com/vaadin/shared/VBrowserDetails.java View File

@@ -86,9 +86,10 @@ public class VBrowserDetails implements Serializable {
// IE 11 no longer contains MSIE in the user agent
isIE = isIE || isTrident;

isSafari = !isChrome && !isIE && userAgent.indexOf("safari") != -1;
isFirefox = userAgent.indexOf(" firefox/") != -1;
isPhantomJS = userAgent.indexOf("phantomjs/") != -1;
isSafari = !isChrome && !isIE && !isPhantomJS
&& userAgent.indexOf("safari") != -1;
isFirefox = userAgent.indexOf(" firefox/") != -1;
if (userAgent.indexOf(" edge/") != -1) {
isEdge = true;
isChrome = false;
@@ -98,6 +99,7 @@ public class VBrowserDetails implements Serializable {
isFirefox = false;
isWebKit = false;
isGecko = false;
isPhantomJS = false;
}

// chromeframe
@@ -174,6 +176,10 @@ public class VBrowserDetails implements Serializable {
} else if (isEdge) {
int i = userAgent.indexOf(" edge/") + 6;
parseVersionString(safeSubstring(userAgent, i, i + 8));
} else if (isPhantomJS) {
String prefix = " phantomjs/";
int i = userAgent.indexOf(prefix) + prefix.length();
parseVersionString(safeSubstring(userAgent, i, i + 5));
}
} catch (Exception e) {
// Browser version parsing failed

Loading…
Cancel
Save