| 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 75160e04f25a96a825d0cb0c4ac787af375421f8..58ed86fbea5c22c9b834b6abf83f24149d4ddef9 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.Pattern;
|
|
|
| @@ -54,12 +53,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-GB;q=0.4,en;q=0.2"
|
| *
|
| * 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-GB", "en"]
|
| *
|
| * @param raw String containing the raw Accept-Language header
|
| * @return A list of languages as Strings.
|
| @@ -91,12 +90,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();
|
| @@ -107,7 +103,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]);
|
| }
|
|
|
| /**
|
| @@ -119,43 +115,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();
|
|
|
| @@ -164,11 +162,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();
|
|
|
| @@ -177,7 +173,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));
|
| }
|
| }
|
|
|