mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 04:09:50 +00:00
Bug 1785807 - Added duplication check and proper capitilization for computeAcceptLanguages. r=geckoview-reviewers,extension-reviewers,calu,owlish,robwu
Differential Revision: https://phabricator.services.mozilla.com/D162678
This commit is contained in:
parent
0916724862
commit
e20312a8cd
@ -22,4 +22,22 @@ class LocaleTest : BaseSessionTest() {
|
||||
greaterThanOrEqualTo(0)
|
||||
)
|
||||
}
|
||||
|
||||
@Test fun duplicateLocales() {
|
||||
sessionRule.runtime.settings.setLocales(arrayOf("en-gb", "en-US", "en-gb", "en-fr", "en-us", "en-FR"))
|
||||
assertThat(
|
||||
"Locales have no duplicates",
|
||||
sessionRule.requestedLocales,
|
||||
equalTo(listOf("en-GB", "en-US", "en-FR"))
|
||||
)
|
||||
}
|
||||
|
||||
@Test fun lowerCaseToUpperCaseLocales() {
|
||||
sessionRule.runtime.settings.setLocales(arrayOf("en-gb", "en-us", "en-fr"))
|
||||
assertThat(
|
||||
"Locales are formatted properly",
|
||||
sessionRule.requestedLocales,
|
||||
equalTo(listOf("en-GB", "en-US", "en-FR"))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Locale;
|
||||
import org.mozilla.gecko.EventDispatcher;
|
||||
import org.mozilla.gecko.GeckoSystemStateListener;
|
||||
@ -778,23 +778,23 @@ public final class GeckoRuntimeSettings extends RuntimeSettings {
|
||||
}
|
||||
|
||||
private String computeAcceptLanguages() {
|
||||
final ArrayList<String> locales = new ArrayList<String>();
|
||||
final LinkedHashMap<String, String> locales = new LinkedHashMap<>();
|
||||
|
||||
// Explicitly-set app prefs come first:
|
||||
if (mRequestedLocales != null) {
|
||||
for (final String locale : mRequestedLocales) {
|
||||
locales.add(locale.toLowerCase(Locale.ROOT));
|
||||
locales.put(locale.toLowerCase(Locale.ROOT), locale);
|
||||
}
|
||||
}
|
||||
// OS prefs come second:
|
||||
for (final String locale : getDefaultLocales()) {
|
||||
final String localeLowerCase = locale.toLowerCase(Locale.ROOT);
|
||||
if (!locales.contains(localeLowerCase)) {
|
||||
locales.add(localeLowerCase);
|
||||
if (!locales.containsKey(localeLowerCase)) {
|
||||
locales.put(localeLowerCase, locale);
|
||||
}
|
||||
}
|
||||
|
||||
return TextUtils.join(",", locales);
|
||||
return TextUtils.join(",", locales.values());
|
||||
}
|
||||
|
||||
private static String[] getDefaultLocales() {
|
||||
|
@ -352,9 +352,8 @@ add_task(async function test_get_accept_languages() {
|
||||
await extension.awaitMessage("content-loaded");
|
||||
|
||||
// TODO bug 1765375: ", en" is missing on Android.
|
||||
// TODO bug 1785807: "en-us" should be "en-US" on Android
|
||||
let expectedLangs =
|
||||
AppConstants.platform == "android" ? ["en-us"] : ["en-US", "en"];
|
||||
AppConstants.platform == "android" ? ["en-US"] : ["en-US", "en"];
|
||||
extension.sendMessage(["expect-results", expectedLangs]);
|
||||
await extension.awaitMessage("background-done");
|
||||
await extension.awaitMessage("content-done");
|
||||
|
Loading…
x
Reference in New Issue
Block a user