 Chromium Code Reviews
 Chromium Code Reviews Issue 2559243003:
  Extend with a language code in http accept languages
    
  
    Issue 2559243003:
  Extend with a language code in http accept languages 
  | Index: android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java | 
| diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java | 
| index cbbf8330a57a3fda2b1d538904b3650cf79572c8..ef8daa6fb37db52b0f77f5883617ee494a7019a1 100644 | 
| --- a/android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java | 
| +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java | 
| @@ -17,7 +17,6 @@ import org.chromium.base.test.util.Feature; | 
| import org.chromium.base.test.util.MinAndroidSdkLevel; | 
| import org.chromium.net.test.EmbeddedTestServer; | 
| -import java.util.Arrays; | 
| import java.util.Locale; | 
| import java.util.regex.Matcher; | 
| import java.util.regex.Pattern; | 
| @@ -56,12 +55,12 @@ public class AcceptLanguageTest extends AwTestBase { | 
| * The Accept-Language header can have more than one language along with optional quality | 
| * factors for each, e.g. | 
| * | 
| - * "de-DE,en-US;q=0.8,en-UK;q=0.5" | 
| + * "de-DE,de;q=0.8,en-US;q=0.6,en-UK;q=0.4,en;q=0.2" | 
| 
jungshik at Google
2016/12/16 08:01:45
nit:  you meant en-GB instead of en-UK? UK is rese
 
Yirui Huang
2016/12/16 08:14:25
Done.
 | 
| * | 
| * This function extracts only the language strings from the Accept-Language header, so | 
| * the example above would yield the following: | 
| * | 
| - * ["de-DE", "en-US", "en-UK"] | 
| + * ["de-DE", "de", "en-US", "en-UK", "en"] | 
| * | 
| * @param raw String containing the raw Accept-Language header | 
| * @return A list of languages as Strings. | 
| @@ -96,12 +95,9 @@ public class AcceptLanguageTest extends AwTestBase { | 
| JSUtils.executeJavaScriptAndWaitForResult( | 
| this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "navigator.languages.join(',')")); | 
| - assertEquals(acceptLanguagesJs.length, acceptLanguages.length); | 
| - for (int i = 0; i < acceptLanguagesJs.length; ++i) { | 
| - assertEquals(acceptLanguagesJs[i], acceptLanguages[i]); | 
| - } | 
| + assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguagesJs[0]); | 
| - // Test locale change at run time | 
| + // Test locale change at run time. | 
| Locale.setDefault(new Locale("de", "DE")); | 
| mAwContents.updateDefaultLocale(); | 
| mAwContents.getSettings().updateAcceptLanguages(); | 
| @@ -112,7 +108,7 @@ public class AcceptLanguageTest extends AwTestBase { | 
| JSUtils.executeJavaScriptAndWaitForResult( | 
| this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "document.body.textContent")); | 
| - assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguages[0]); | 
| + assertEquals("de-DE,de", acceptLanguages[0] + "," + acceptLanguages[1]); | 
| } | 
| /** | 
| @@ -124,43 +120,45 @@ public class AcceptLanguageTest extends AwTestBase { | 
| @MinAndroidSdkLevel(Build.VERSION_CODES.N) | 
| @SuppressLint("NewApi") | 
| @Feature({"AndroidWebView"}) | 
| - public void testAcceptLanguagesWithenUS() throws Throwable { | 
| + public void testAcceptLanguages() throws Throwable { | 
| getAwSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true); | 
| - | 
| - // This should yield a lightly formatted page with the contents of the Accept-Language | 
| - // header, e.g. "en-US" or "de-DE,en-US;q=0.8", as the only text content. | 
| String url = mTestServer.getURL("/echoheader?Accept-Language"); | 
| loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); | 
| - String[] acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult( | 
| - this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| - "document.body.textContent")); | 
| - assertEquals( | 
| - LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", acceptLanguages)); | 
| - | 
| String[] acceptLanguagesJs = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult( | 
| this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "navigator.languages.join(',')")); | 
| - assertEquals(acceptLanguagesJs.length, acceptLanguages.length); | 
| - for (int i = 0; i < acceptLanguagesJs.length; ++i) { | 
| - assertEquals(acceptLanguagesJs[i], acceptLanguages[i]); | 
| - } | 
| + assertEquals( | 
| + LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", acceptLanguagesJs)); | 
| - // Test locales that contain "en-US" change at run time | 
| + // Test locales that contain "en-US" change at run time. | 
| LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale("en", "US"))); | 
| mAwContents.updateDefaultLocale(); | 
| mAwContents.getSettings().updateAcceptLanguages(); | 
| loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); | 
| + String[] acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult( | 
| + this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| + "document.body.textContent")); | 
| + assertEquals("de-DE,de,en-US,en", TextUtils.join(",", acceptLanguages)); | 
| + | 
| + // Test locales that do not contain "en-US" change at run time, "en-US" should be added with | 
| + // lower priority. | 
| + LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale("ja", "JP"))); | 
| + mAwContents.updateDefaultLocale(); | 
| + mAwContents.getSettings().updateAcceptLanguages(); | 
| + | 
| + loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); | 
| + | 
| acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult(this, | 
| mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "document.body.textContent")); | 
| - assertEquals( | 
| - LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", acceptLanguages)); | 
| + assertEquals("de-DE,de,ja-JP,ja,en-US,en", TextUtils.join(",", acceptLanguages)); | 
| - // Test locales that contain "en-us" change at run time | 
| - LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale("en", "us"))); | 
| + // Test language code is inserted only after the last language tag that contains that | 
| + // language. | 
| + LocaleList.setDefault(new LocaleList(new Locale("en", "GB"), new Locale("en", "US"))); | 
| mAwContents.updateDefaultLocale(); | 
| mAwContents.getSettings().updateAcceptLanguages(); | 
| @@ -169,11 +167,9 @@ public class AcceptLanguageTest extends AwTestBase { | 
| acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult(this, | 
| mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "document.body.textContent")); | 
| - assertEquals( | 
| - LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", acceptLanguages)); | 
| + assertEquals("en-GB,en-US,en", TextUtils.join(",", acceptLanguages)); | 
| - // Test locales that do not contain "en-us" or "en-US" change at run time | 
| - LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale("ja", "JP"))); | 
| + LocaleList.setDefault(new LocaleList(new Locale("en", "GB"), new Locale("ja", "JP"))); | 
| mAwContents.updateDefaultLocale(); | 
| mAwContents.getSettings().updateAcceptLanguages(); | 
| @@ -182,7 +178,6 @@ public class AcceptLanguageTest extends AwTestBase { | 
| acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult(this, | 
| mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(), | 
| "document.body.textContent")); | 
| - String[] acceptLangs = Arrays.copyOfRange(acceptLanguages, 0, acceptLanguages.length - 1); | 
| - assertEquals(LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", acceptLangs)); | 
| + assertEquals("en-GB,ja-JP,ja,en-US,en", TextUtils.join(",", acceptLanguages)); | 
| } | 
| } |