Skip to content

Commit

Permalink
Ensure navigator.language agrees with navigator.languages
Browse files Browse the repository at this point in the history
Although perhaps not strictly required by the specification, it is at least
quite clearly suggested that navigator.language should equal the first element
of navigator.languages (see note in [1]).

[1]: https://html.spec.whatwg.org/multipage/system-state.html#language-preferences

Changes in behavior:

  - navigator.language:

    Previously returned DefaultLanguage() which may or may not have matched the
    first element of navigator.languages.

    Now always returns the first element from navigator.languages.

  - navigator.languages:

    Previously would return an empty list if ChromeClient's AcceptLanguages()
    happened to return an empty string.

    Now always returns a non-empty list (the existing DefaultLanguage() fallback
    is extended to cover this case too).

Bug: 351715
Change-Id: Id945ec3958180991c0abcfec4e5c191d3cb5e9cf
Reviewed-on: https://chromium-review.googlesource.com/581295
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521394}
  • Loading branch information
valdmann authored and Commit Bot committed Dec 4, 2017
1 parent 5742a1c commit a029f27
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 27 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,7 @@ JungJik Lee <jungjik.lee@samsung.com>
Jungkee Song <jungkee.song@samsung.com>
Junmin Zhu <junmin.zhu@intel.com>
Justin Okamoto <justmoto@amazon.com>
Jüri Valdmann <juri.valdmann@qt.io>
Kai Jiang <jiangkai@gmail.com>
Kai Köhne <kai.koehne@qt.io>
Kal Conley <kcconley@gmail.com>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -90,16 +90,16 @@

test(function() {
var testValues = [
{ accept_languages: 'foo', language: 'foo', languages: ['foo'] },
{ accept_languages: '', language: '', languages: [] },
{ accept_languages: 'foo,bar', language: 'foo', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo , bar ', language: 'foo', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo ; bar ', language: 'foo ; bar', languages: [ 'foo ; bar' ] },
{ accept_languages: '_foo_', language: '_foo_', languages: ['_foo_'] },
{ accept_languages: 'en_', language: 'en-', languages: ['en-'] },
{ accept_languages: 'en__', language: 'en-_', languages: ['en-_'] },
{ accept_languages: 'en_US, fr_FR', language: 'en-US', languages: ['en-US', 'fr-FR'] },
{ accept_languages: 'en_US_CA', language: 'en-US_CA', languages: ['en-US_CA'] },
{ accept_languages: 'foo', languages: ['foo'] },
{ accept_languages: '', languages: ['en-US'] },
{ accept_languages: 'foo,bar', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo , bar ', languages: [ 'foo', 'bar' ] },
{ accept_languages: ' foo ; bar ', languages: [ 'foo ; bar' ] },
{ accept_languages: '_foo_', languages: ['_foo_'] },
{ accept_languages: 'en_', languages: ['en-'] },
{ accept_languages: 'en__', languages: ['en-_'] },
{ accept_languages: 'en_US, fr_FR', languages: ['en-US', 'fr-FR'] },
{ accept_languages: 'en_US_CA', languages: ['en-US_CA'] },
];

var eventsCount = 0;
Expand All @@ -114,7 +114,7 @@
assert_equals(eventsCount, i + 1);

assert_equals(navigator.languages.length, data.languages.length);
// FIXME: test navigator.language
assert_equals(navigator.language, data.languages[0]);
for (var j = 0; j < navigator.languages.length; ++j) {
assert_equals(navigator.languages[j], data.languages[j]);
}
Expand All @@ -130,11 +130,6 @@
assert_not_equals(navigator.languages, previous);
}, "Test navigator.languages' caching behaviour.");

test(function() {
// The region code should be uppercase.
assert_equals(navigator.language, 'en-US');
}, 'Test the default navigator.language in the test environment.');

</script>
</body>
</html>
14 changes: 8 additions & 6 deletions third_party/WebKit/Source/core/frame/Navigator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,15 @@ bool Navigator::cookieEnabled() const {
}

Vector<String> Navigator::languages() {
Vector<String> languages;
languages_changed_ = false;

if (!GetFrame() || !GetFrame()->GetPage()) {
languages.push_back(DefaultLanguage());
return languages;
String accept_languages;
if (GetFrame() && GetFrame()->GetPage()) {
accept_languages =
GetFrame()->GetPage()->GetChromeClient().AcceptLanguages();
}

String accept_languages =
GetFrame()->GetPage()->GetChromeClient().AcceptLanguages();
Vector<String> languages;
accept_languages.Split(',', languages);

// Sanitizing tokens. We could do that more extensively but we should assume
Expand All @@ -110,6 +109,9 @@ Vector<String> Navigator::languages() {
token.replace(2, 1, "-");
}

if (languages.IsEmpty())
languages.push_back(DefaultLanguage());

return languages;
}

Expand Down
2 changes: 1 addition & 1 deletion third_party/WebKit/Source/core/frame/NavigatorLanguage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace blink {
NavigatorLanguage::NavigatorLanguage() {}

AtomicString NavigatorLanguage::language() {
return DefaultLanguage();
return AtomicString(languages().front());
}

bool NavigatorLanguage::hasLanguagesChanged() const {
Expand Down

0 comments on commit a029f27

Please sign in to comment.