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 {