Relax WebView UA string check to ease transition to ChromeView.
The following changes have been made:
- the SSL encryption strength token ("U;") and language specification
made optional to reflect changes in WebKit
(see http://www.webkit.org/blog/1580/user-agent-string-changes-on-webkit-trunk/)
- "Version/4.0" changed to more flexible "Version/<major>.<minor>"
BUG=b/6212306
Change-Id: I028cc857340a93411569a5dbb083b667ea06dad0
diff --git a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
index 27fa5a0..d6416df 100644
--- a/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
+++ b/tests/tests/webkit/src/android/webkit/cts/WebSettingsTest.java
@@ -78,33 +78,51 @@
/**
* Verifies that the default user agent string follows the format defined in Android
- * compatibility definition:
+ * compatibility definition (tokens in angle brackets are variables, tokens in square
+ * brackets are optional):
* <p/>
- * Mozilla/5.0 (Linux; U; Android <version>; <language>-<country>; <devicemodel>;
- * Build/<buildID>) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
+ * Mozilla/5.0 (Linux;[ U;] Android <version>;[ <language>-<country>;]
+ * [<devicemodel>;] Build/<buildID>) AppleWebKit/<major>.<minor> (KHTML, like Gecko)
+ * Version/<major>.<minor>[ Mobile] Safari/<major>.<minor>
*/
public void testUserAgentString_default() {
final String actualUserAgentString = mSettings.getUserAgentString();
Log.i(LOG_TAG, String.format("Checking user agent string %s", actualUserAgentString));
- final String patternString = "Mozilla/5\\.0 \\(Linux; U; Android (.+); (\\w+)-(\\w+);\\s?" +
- "(.*)\\sBuild/(.+)\\) AppleWebKit/(\\d+)\\.(\\d+) \\(KHTML, like Gecko\\) Version/4\\.0" +
- "( Mobile)? Safari/(\\d+)\\.(\\d+)";
+ final String patternString =
+ "Mozilla/5\\.0 \\(Linux;( U;)? Android ([^;]+);( (\\w+)-(\\w+);)?" +
+ "\\s?(.*)\\sBuild/(.+)\\) AppleWebKit/(\\d+)\\.(\\d+) \\(KHTML, like Gecko\\) " +
+ "Version/\\d+\\.\\d+( Mobile)? Safari/(\\d+)\\.(\\d+)";
+ // Groups used:
+ // 1 - SSL encryption strength token " U;" (optional)
+ // 2 - Android version
+ // 3 - full locale string (optional)
+ // 4 - country
+ // 5 - language
+ // 6 - device model (optional)
+ // 7 - build ID
+ // 8 - AppleWebKit major version number
+ // 9 - AppleWebKit minor version number
+ // 10 - " Mobile" string (optional)
+ // 11 - Safari major version number
+ // 12 - Safari minor version number
Log.i(LOG_TAG, String.format("Trying to match pattern %s", patternString));
final Pattern userAgentExpr = Pattern.compile(patternString);
Matcher patternMatcher = userAgentExpr.matcher(actualUserAgentString);
assertTrue(String.format("User agent string did not match expected pattern. \nExpected " +
"pattern:\n%s\nActual:\n%s", patternString, actualUserAgentString),
patternMatcher.find());
- Locale currentLocale = Locale.getDefault();
- assertEquals(currentLocale.getLanguage().toLowerCase(), patternMatcher.group(2));
- assertEquals(currentLocale.getCountry().toLowerCase(), patternMatcher.group(3));
+ if (patternMatcher.group(3) != null) {
+ Locale currentLocale = Locale.getDefault();
+ assertEquals(currentLocale.getLanguage().toLowerCase(), patternMatcher.group(4));
+ assertEquals(currentLocale.getCountry().toLowerCase(), patternMatcher.group(5));
+ }
if ("REL".equals(Build.VERSION.CODENAME)) {
// Model is only added in release builds
- assertEquals(Build.MODEL, patternMatcher.group(4));
+ assertEquals(Build.MODEL, patternMatcher.group(6));
// Release version is valid only in release builds
- assertEquals(Build.VERSION.RELEASE, patternMatcher.group(1));
+ assertEquals(Build.VERSION.RELEASE, patternMatcher.group(2));
}
- assertEquals(Build.ID, patternMatcher.group(5));
+ assertEquals(Build.ID, patternMatcher.group(7));
}
public void testAccessUserAgentString() throws Exception {