Browse Source

Replace RegExp with custom search (#10619)

tags/8.4.0.alpha1
Adam Wagner 6 years ago
parent
commit
22beb8b764
1 changed files with 24 additions and 20 deletions
  1. 24
    20
      shared/src/main/java/com/vaadin/shared/VBrowserDetails.java

+ 24
- 20
shared/src/main/java/com/vaadin/shared/VBrowserDetails.java View File

@@ -18,8 +18,6 @@ package com.vaadin.shared;
import java.io.Serializable;
import java.util.Locale;

import com.google.gwt.regexp.shared.RegExp;

/**
* Class that parses the user agent string from the browser and provides
* information about the browser. Used internally by
@@ -146,16 +144,13 @@ public class VBrowserDetails implements Serializable {

// Browser version
try {
RegExp versionRegExp = RegExp.compile("[\\w\\.]*", "g");
if (isIE) {
if (userAgent.indexOf("msie") == -1) {
// IE 11+
int rvPos = userAgent.indexOf("rv:");
if (rvPos >= 0) {
int i = rvPos + "rv:".length();
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent)
.getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
}
} else if (isTrident) {
@@ -164,8 +159,7 @@ public class VBrowserDetails implements Serializable {
setIEMode((int) browserEngineVersion + 4);
} else {
int i = userAgent.indexOf("msie ") + 5;
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
}
} else if (isFirefox) {
@@ -175,8 +169,7 @@ public class VBrowserDetails implements Serializable {
} else {
i = userAgent.indexOf(" fxios/") + " fxios/".length();
}
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
} else if (isChrome) {
int i = userAgent.indexOf(" chrome/");
@@ -185,13 +178,11 @@ public class VBrowserDetails implements Serializable {
} else {
i = userAgent.indexOf(" crios/") + " crios/".length();
}
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
} else if (isSafari) {
int i = userAgent.indexOf(" version/") + 9;
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
} else if (isOpera) {
int i = userAgent.indexOf(" version/");
@@ -201,19 +192,16 @@ public class VBrowserDetails implements Serializable {
} else {
i = userAgent.indexOf("opera/") + 6;
}
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
} else if (isEdge) {
int i = userAgent.indexOf(" edge/") + 6;
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
} else if (isPhantomJS) {
String prefix = " phantomjs/";
int i = userAgent.indexOf(prefix) + prefix.length();
versionRegExp.setLastIndex(i);
browserVersion = versionRegExp.exec(userAgent).getGroup(0);
browserVersion = findBrowserVersion(userAgent, i);
parseVersionString(browserVersion);
}
} catch (Exception e) {
@@ -372,6 +360,22 @@ public class VBrowserDetails implements Serializable {
return string.substring(beginIndex, endIndex);
}

private String findBrowserVersion(String userAgent, int startIndex) {
int index = startIndex;
int length = userAgent.length();

while (index < length) {
char c = userAgent.charAt(index);
// Accept letter, digit, underscore and dot characters
if (!(Character.isLetter(c) || Character.isDigit(c) || c == '_'
|| c == '.')) {
break;
}
index++;
}
return userAgent.substring(startIndex, index);
}

/**
* Tests if the browser is Firefox.
*

Loading…
Cancel
Save