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)); |
} |
} |