]> source.dussan.org Git - vaadin-framework.git/commitdiff
Detect Edge correctly (#18537)
authorArtur Signell <artur@vaadin.com>
Thu, 30 Jul 2015 10:01:56 +0000 (13:01 +0300)
committerArtur Signell <artur@vaadin.com>
Thu, 30 Jul 2015 17:29:30 +0000 (17:29 +0000)
Change-Id: I6aa7e7b7498ff85489843e52bd351e54c4ba70f9

client/src/com/vaadin/client/BrowserInfo.java
client/tests/src/com/vaadin/client/VBrowserDetailsUserAgentParserTest.java
server/src/com/vaadin/server/WebBrowser.java
shared/src/com/vaadin/shared/VBrowserDetails.java

index 8b274623c1eba1bbffd4fdc966c20c17b087a1e1..8dcefddcf5a36c1fc59a0606d58297b3b67a7634 100644 (file)
@@ -30,6 +30,7 @@ public class BrowserInfo {
 
     private static final String BROWSER_OPERA = "op";
     private static final String BROWSER_IE = "ie";
+    private static final String BROWSER_EDGE = "edge";
     private static final String BROWSER_FIREFOX = "ff";
     private static final String BROWSER_SAFARI = "sa";
 
@@ -171,6 +172,13 @@ public class BrowserInfo {
                 minorVersionClass = majorVersionClass
                         + browserDetails.getBrowserMinorVersion();
                 browserEngineClass = ENGINE_TRIDENT;
+            } else if (browserDetails.isEdge()) {
+                browserIdentifier = BROWSER_EDGE;
+                majorVersionClass = browserIdentifier
+                        + getBrowserMajorVersion();
+                minorVersionClass = majorVersionClass
+                        + browserDetails.getBrowserMinorVersion();
+                browserEngineClass = "";
             } else if (browserDetails.isOpera()) {
                 browserIdentifier = BROWSER_OPERA;
                 majorVersionClass = browserIdentifier
@@ -225,6 +233,10 @@ public class BrowserInfo {
         return browserDetails.isIE();
     }
 
+    public boolean isEdge() {
+        return browserDetails.isEdge();
+    }
+
     public boolean isFirefox() {
         return browserDetails.isFirefox();
     }
@@ -245,6 +257,10 @@ public class BrowserInfo {
         return isIE() && getBrowserMajorVersion() == 10;
     }
 
+    public boolean isIE11() {
+        return isIE() && getBrowserMajorVersion() == 11;
+    }
+
     public boolean isChrome() {
         return browserDetails.isChrome();
     }
index 62b727e5f5407445865c71ecbbf4e5edc2daa714..24bf9b655820af68cece17748ef95c465e9c1590 100644 (file)
@@ -56,6 +56,8 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
     private static final String ANDROID_MOTOROLA_3_0 = "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13";
     private static final String ANDROID_GALAXY_NEXUS_4_0_4_CHROME = "Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19";
 
+    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";
+
     public void testSafari3() {
         VBrowserDetails bd = new VBrowserDetails(SAFARI3_WINDOWS);
         assertWebKit(bd);
@@ -423,6 +425,14 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertWindows(bd, true);
     }
 
+    public void testEdgeWindows10() {
+        VBrowserDetails bd = new VBrowserDetails(EDGE_WINDOWS_10);
+        assertEdge(bd);
+        assertBrowserMajorVersion(bd, 12);
+        assertBrowserMinorVersion(bd, 10240);
+        assertWindows(bd, false);
+    }
+
     /*
      * Helper methods below
      */
@@ -484,6 +494,7 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertFalse(browserDetails.isIE());
         assertFalse(browserDetails.isOpera());
         assertFalse(browserDetails.isSafari());
+        assertFalse(browserDetails.isEdge());
     }
 
     private void assertChrome(VBrowserDetails browserDetails) {
@@ -493,6 +504,7 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertFalse(browserDetails.isIE());
         assertFalse(browserDetails.isOpera());
         assertFalse(browserDetails.isSafari());
+        assertFalse(browserDetails.isEdge());
     }
 
     private void assertIE(VBrowserDetails browserDetails) {
@@ -502,6 +514,7 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertTrue(browserDetails.isIE());
         assertFalse(browserDetails.isOpera());
         assertFalse(browserDetails.isSafari());
+        assertFalse(browserDetails.isEdge());
     }
 
     private void assertOpera(VBrowserDetails browserDetails) {
@@ -511,6 +524,7 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertFalse(browserDetails.isIE());
         assertTrue(browserDetails.isOpera());
         assertFalse(browserDetails.isSafari());
+        assertFalse(browserDetails.isEdge());
     }
 
     private void assertSafari(VBrowserDetails browserDetails) {
@@ -520,6 +534,17 @@ public class VBrowserDetailsUserAgentParserTest extends TestCase {
         assertFalse(browserDetails.isIE());
         assertFalse(browserDetails.isOpera());
         assertTrue(browserDetails.isSafari());
+        assertFalse(browserDetails.isEdge());
+    }
+
+    private void assertEdge(VBrowserDetails browserDetails) {
+        // Browser
+        assertFalse(browserDetails.isFirefox());
+        assertFalse(browserDetails.isChrome());
+        assertFalse(browserDetails.isIE());
+        assertFalse(browserDetails.isOpera());
+        assertFalse(browserDetails.isSafari());
+        assertTrue(browserDetails.isEdge());
     }
 
     private void assertMacOSX(VBrowserDetails browserDetails) {
index 66018b02f200eb443f60fd19325c0e706170b4cb..9bf30cb3dbcc8a63e7e55b355f325c9cef2d21bf 100644 (file)
@@ -125,6 +125,20 @@ public class WebBrowser implements Serializable {
         return browserDetails.isIE();
     }
 
+    /**
+     * Tests whether the user is using Edge.
+     * 
+     * @return true if the user is using Edge, false if the user is not using
+     *         Edge or if no information on the browser is present
+     */
+    public boolean isEdge() {
+        if (browserDetails == null) {
+            return false;
+        }
+
+        return browserDetails.isEdge();
+    }
+
     /**
      * Tests whether the user is using Safari.
      * 
index 561b6c76d05db72dfa9b6e4c5debba82f95fc7ec..d0de8ffb9fbdd7e578b801df0c45fe0a34195e6d 100644 (file)
@@ -41,6 +41,7 @@ public class VBrowserDetails implements Serializable {
     private boolean isFirefox = false;
     private boolean isOpera = false;
     private boolean isIE = false;
+    private boolean isEdge = false;
     private boolean isPhantomJS = false;
 
     private boolean isWindowsPhone;
@@ -88,6 +89,16 @@ public class VBrowserDetails implements Serializable {
         isSafari = !isChrome && !isIE && userAgent.indexOf("safari") != -1;
         isFirefox = userAgent.indexOf(" firefox/") != -1;
         isPhantomJS = userAgent.indexOf("phantomjs/") != -1;
+        if (userAgent.indexOf(" edge/") != -1) {
+            isEdge = true;
+            isChrome = false;
+            isOpera = false;
+            isIE = false;
+            isSafari = false;
+            isFirefox = false;
+            isWebKit = false;
+            isGecko = false;
+        }
 
         // chromeframe
         isChromeFrameCapable = userAgent.indexOf("chromeframe") != -1;
@@ -115,6 +126,8 @@ public class VBrowserDetails implements Serializable {
                     tmp = tmp.replaceFirst("([0-9]+\\.[0-9]+).*", "$1");
                     browserEngineVersion = Float.parseFloat(tmp);
                 }
+            } else if (isEdge) {
+                browserEngineVersion = 0;
             }
         } catch (Exception e) {
             // Browser engine version parsing failed
@@ -158,6 +171,9 @@ public class VBrowserDetails implements Serializable {
                     i = userAgent.indexOf("opera/") + 6;
                 }
                 parseVersionString(safeSubstring(userAgent, i, i + 5));
+            } else if (isEdge) {
+                int i = userAgent.indexOf(" edge/") + 6;
+                parseVersionString(safeSubstring(userAgent, i, i + 8));
             }
         } catch (Exception e) {
             // Browser version parsing failed
@@ -372,6 +388,15 @@ public class VBrowserDetails implements Serializable {
         return isIE;
     }
 
+    /**
+     * Tests if the browser is Edge.
+     * 
+     * @return true if it is Edge, false otherwise
+     */
+    public boolean isEdge() {
+        return isEdge;
+    }
+
     /**
      * Tests if the browser is PhantomJS.
      *