Changeset 206949 in webkit


Ignore:
Timestamp:
Oct 7, 2016 8:31:15 PM (8 years ago)
Author:
Chris Dumez
Message:

window.navigator.language incorrectly returns all lowercase string
https://bugs.webkit.org/show_bug.cgi?id=163096

Reviewed by Darin Adler.

Source/WebCore:

Update navigator.language so that it no longer returns an all lowercase
string (e.g. 'en-us' -> 'en-US'). This matches the behavior of other
browsers and the specification which indicate we should return a
BCP 47 language tag:

The other call sites relying on userPreferredLanguages() use case
insensitive comparison so they will not break.

No new tests, updated existing test.

  • platform/Language.h:

Source/WTF:

Update platformUserPreferredLanguages() so that it no longer lowercases
the string it returns. On Mac, we rely on CFLocale which returns
BCP-47 language tags as per:

  • wtf/PlatformUserPreferredLanguagesMac.mm:

(WTF::httpStyleLanguageCode):

  • wtf/PlatformUserPreferredLanguagesUnix.cpp:

(WTF::platformLanguage):

LayoutTests:

Update existing test so that it does not lowercase navigator.language
before checking it. This way, we can make sure it returns en-US and
not en-us.

  • js/dom/navigator-language-expected.txt:
  • js/dom/navigator-language.html:
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r206947 r206949  
     12016-10-07  Chris Dumez  <cdumez@apple.com>
     2
     3        window.navigator.language incorrectly returns all lowercase string
     4        https://bugs.webkit.org/show_bug.cgi?id=163096
     5
     6        Reviewed by Darin Adler.
     7
     8        Update existing test so that it does not lowercase navigator.language
     9        before checking it. This way, we can make sure it returns en-US and
     10        not en-us.
     11
     12        * js/dom/navigator-language-expected.txt:
     13        * js/dom/navigator-language.html:
     14
    1152016-10-07  Yusuke Suzuki  <utatane.tea@gmail.com>
    216
  • trunk/LayoutTests/js/dom/navigator-language-expected.txt

    r156066 r206949  
    33
    44
    5 PASS language is 'en-us'
     5PASS language is 'en-US'
    66PASS successfullyParsed is true
    77
  • trunk/LayoutTests/js/dom/navigator-language.html

    r156066 r206949  
    1515}
    1616
    17 var language = navigator.language.toLowerCase();
     17var language = navigator.language;
    1818if (language.length == 2)
    1919    shouldBe("language", "'en'");
    2020else
    21     shouldBe("language", "'en-us'");
     21    shouldBe("language", "'en-US'");
    2222</script>
    2323<script src="../../resources/js-test-post.js"></script>
  • trunk/Source/WTF/ChangeLog

    r206871 r206949  
     12016-10-07  Chris Dumez  <cdumez@apple.com>
     2
     3        window.navigator.language incorrectly returns all lowercase string
     4        https://bugs.webkit.org/show_bug.cgi?id=163096
     5
     6        Reviewed by Darin Adler.
     7
     8        Update platformUserPreferredLanguages() so that it no longer lowercases
     9        the string it returns. On Mac, we rely on CFLocale which returns
     10        BCP-47 language tags as per:
     11        - https://developer.apple.com/reference/corefoundation/1666963-cflocale?language=objc
     12
     13        * wtf/PlatformUserPreferredLanguagesMac.mm:
     14        (WTF::httpStyleLanguageCode):
     15        * wtf/PlatformUserPreferredLanguagesUnix.cpp:
     16        (WTF::platformLanguage):
     17
    1182016-10-06  Brent Fulgham  <bfulgham@apple.com>
    219
  • trunk/Source/WTF/wtf/PlatformUserPreferredLanguagesMac.mm

    r203141 r206949  
    8181{
    8282    SInt32 languageCode;
    83     SInt32 regionCode; 
    84     SInt32 scriptCode; 
     83    SInt32 regionCode;
     84    SInt32 scriptCode;
    8585    CFStringEncoding stringEncoding;
    86    
     86
    8787    // FIXME: This transformation is very wrong:
    8888    // 1. There is no reason why CFBundle localization names would be at all related to language names as used on the Web.
     
    9494        language = (NSString *)preferredLanguageCode.get();
    9595
    96     // Make the string lowercase.
    97     NSString *lowercaseLanguageCode = [language lowercaseString];
    98        
    9996    // Turn a '_' into a '-' if it appears after a 2-letter language code
    100     if ([lowercaseLanguageCode length] >= 3 && [lowercaseLanguageCode characterAtIndex:2] == '_') {
    101         RetainPtr<NSMutableString> mutableLanguageCode = adoptNS([lowercaseLanguageCode mutableCopy]);
     97    if ([language length] >= 3 && [language characterAtIndex:2] == '_') {
     98        RetainPtr<NSMutableString> mutableLanguageCode = adoptNS([language mutableCopy]);
    10299        [mutableLanguageCode.get() replaceCharactersInRange:NSMakeRange(2, 1) withString:@"-"];
    103100        return mutableLanguageCode.get();
    104101    }
    105102
    106     return lowercaseLanguageCode;
     103    return language;
    107104}
    108105
  • trunk/Source/WTF/wtf/PlatformUserPreferredLanguagesUnix.cpp

    r206295 r206949  
    3737    String localeDefault(setlocale(LC_CTYPE, nullptr));
    3838    if (localeDefault.isEmpty() || equalIgnoringASCIICase(localeDefault, "C") || equalIgnoringASCIICase(localeDefault, "POSIX"))
    39         return ASCIILiteral("en-us");
     39        return ASCIILiteral("en-US");
    4040
    41     String normalizedDefault = localeDefault.convertToASCIILowercase();
     41    String normalizedDefault = localeDefault;
    4242    normalizedDefault.replace('_', '-');
    4343    normalizedDefault.truncate(normalizedDefault.find('.'));
  • trunk/Source/WebCore/ChangeLog

    r206944 r206949  
     12016-10-07  Chris Dumez  <cdumez@apple.com>
     2
     3        window.navigator.language incorrectly returns all lowercase string
     4        https://bugs.webkit.org/show_bug.cgi?id=163096
     5
     6        Reviewed by Darin Adler.
     7
     8        Update navigator.language so that it no longer returns an all lowercase
     9        string (e.g. 'en-us' -> 'en-US'). This matches the behavior of other
     10        browsers and the specification which indicate we should return a
     11        BCP 47 language tag:
     12        - https://html.spec.whatwg.org/#dom-navigator-language
     13        - https://tools.ietf.org/html/bcp47
     14
     15        The other call sites relying on userPreferredLanguages() use case
     16        insensitive comparison so they will not break.
     17
     18        No new tests, updated existing test.
     19
     20        * platform/Language.h:
     21
    1222016-10-07  Wenson Hsieh  <wenson_hsieh@apple.com>
    223
  • trunk/Source/WebCore/platform/Language.h

    r201970 r206949  
    3333
    3434WEBCORE_EXPORT String defaultLanguage(); // Thread-safe.
    35 WEBCORE_EXPORT Vector<String> userPreferredLanguages(); // Thread-safe.
     35WEBCORE_EXPORT Vector<String> userPreferredLanguages(); // Thread-safe, returns BCP 47 language tags.
    3636Vector<String> userPreferredLanguagesOverride();
    3737WEBCORE_EXPORT void overrideUserPreferredLanguages(const Vector<String>&);
Note: See TracChangeset for help on using the changeset viewer.