| 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 4165e46f9703684a9d3436c411af563b6d30d897..cbbf8330a57a3fda2b1d538904b3650cf79572c8 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
|
| @@ -4,14 +4,20 @@
|
|
|
| package org.chromium.android_webview.test;
|
|
|
| +import android.annotation.SuppressLint;
|
| +import android.os.Build;
|
| +import android.os.LocaleList;
|
| import android.test.suitebuilder.annotation.SmallTest;
|
| +import android.text.TextUtils;
|
|
|
| import org.chromium.android_webview.AwContents;
|
| import org.chromium.android_webview.test.util.JSUtils;
|
| import org.chromium.base.LocaleUtils;
|
| 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;
|
| @@ -95,9 +101,9 @@ public class AcceptLanguageTest extends AwTestBase {
|
| assertEquals(acceptLanguagesJs[i], acceptLanguages[i]);
|
| }
|
|
|
| - // Now test locale change at run time
|
| + // Test locale change at run time
|
| Locale.setDefault(new Locale("de", "DE"));
|
| - mAwContents.setLocale("de-DE");
|
| + mAwContents.updateDefaultLocale();
|
| mAwContents.getSettings().updateAcceptLanguages();
|
|
|
| loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
|
| @@ -108,4 +114,75 @@ public class AcceptLanguageTest extends AwTestBase {
|
| "document.body.textContent"));
|
| assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguages[0]);
|
| }
|
| +
|
| + /**
|
| + * Verify that the Accept Languages string is correct.
|
| + * When default locales do not contain "en-US" or "en-us",
|
| + * "en-US" should be added with lowest priority.
|
| + */
|
| + @SmallTest
|
| + @MinAndroidSdkLevel(Build.VERSION_CODES.N)
|
| + @SuppressLint("NewApi")
|
| + @Feature({"AndroidWebView"})
|
| + public void testAcceptLanguagesWithenUS() 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]);
|
| + }
|
| +
|
| + // 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);
|
| +
|
| + acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitForResult(this,
|
| + mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper(),
|
| + "document.body.textContent"));
|
| + assertEquals(
|
| + LocaleUtils.getDefaultLocaleListString(), 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")));
|
| + 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));
|
| +
|
| + // 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")));
|
| + mAwContents.updateDefaultLocale();
|
| + mAwContents.getSettings().updateAcceptLanguages();
|
| +
|
| + loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
|
| +
|
| + 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));
|
| + }
|
| }
|
|
|