Changeset 185816 in webkit


Ignore:
Timestamp:
Jun 21, 2015 9:25:18 PM (9 years ago)
Author:
ap@apple.com
Message:

REGRESSION (r172975): navigator.language unable to tell region for Traditional Chinese users
https://bugs.webkit.org/show_bug.cgi?id=146121
rdar://problem/21395180

Reviewed by Darin Adler.

Source/WebCore:

Revert to previous behavior, which is wrong in many ways, but not as wrong as the new one.

  • platform/mac/Language.mm:

(WebCore::httpStyleLanguageCode):
(WebCore::platformUserPreferredLanguages):

  • platform/spi/cf/CFBundleSPI.h:

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/mac/NavigatorLanguage.mm: Added.

(-[NavigatorLanguageDelegate webView:didFinishLoadForFrame:]):
(TestWebKitAPI::overrideAppleLanguages):
(TestWebKitAPI::languageForSystemLanguage):
(TestWebKitAPI::TEST):

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185813 r185816  
     12015-06-21  Alexey Proskuryakov  <ap@apple.com>
     2
     3        REGRESSION (r172975): navigator.language unable to tell region for Traditional Chinese users
     4        https://bugs.webkit.org/show_bug.cgi?id=146121
     5        rdar://problem/21395180
     6
     7        Reviewed by Darin Adler.
     8
     9        Revert to previous behavior, which is wrong in many ways, but not as wrong as the new one.
     10
     11        * platform/mac/Language.mm:
     12        (WebCore::httpStyleLanguageCode):
     13        (WebCore::platformUserPreferredLanguages):
     14        * platform/spi/cf/CFBundleSPI.h:
     15
    1162015-06-19  Andy Estes  <aestes@apple.com>
    217
  • trunk/Source/WebCore/platform/mac/Language.mm

    r172975 r185816  
    2828
    2929#import "BlockExceptions.h"
     30#import "CFBundleSPI.h"
    3031#import "WebCoreNSStringExtras.h"
    3132#import <mutex>
     
    8081static String httpStyleLanguageCode(NSString *language)
    8182{
    82     return [[NSLocale canonicalLanguageIdentifierFromString:canonicalLocaleName(language)] lowercaseString];
     83    SInt32 languageCode;
     84    SInt32 regionCode;
     85    SInt32 scriptCode;
     86    CFStringEncoding stringEncoding;
     87
     88    // FIXME: This transformation is very wrong:
     89    // 1. There is no reason why CFBundle localization names would be at all related to language names as used on the Web.
     90    // 2. Script Manager codes cannot represent all languages that are now supported by the platform, so the conversion is lossy.
     91    // 3. This should probably match what is sent by the network layer as Accept-Language, but currently, that's implemented separately.
     92    CFBundleGetLocalizationInfoForLocalization((CFStringRef)language, &languageCode, &regionCode, &scriptCode, &stringEncoding);
     93    RetainPtr<CFStringRef> preferredLanguageCode = adoptCF(CFBundleCopyLocalizationForLocalizationInfo(languageCode, regionCode, scriptCode, stringEncoding));
     94    if (preferredLanguageCode)
     95        language = (NSString *)preferredLanguageCode.get();
     96
     97    // Make the string lowercase.
     98    NSString *lowercaseLanguageCode = [language lowercaseString];
     99
     100    // Turn a '_' into a '-' if it appears after a 2-letter language code.
     101    if ([lowercaseLanguageCode length] >= 3 && [lowercaseLanguageCode characterAtIndex:2] == '_') {
     102        RetainPtr<NSMutableString> mutableLanguageCode = adoptNS([lowercaseLanguageCode mutableCopy]);
     103        [mutableLanguageCode.get() replaceCharactersInRange:NSMakeRange(2, 1) withString:@"-"];
     104        return mutableLanguageCode.get();
     105    }
     106
     107    return lowercaseLanguageCode;
    83108}
    84109
  • trunk/Source/WebCore/platform/spi/cf/CFBundleSPI.h

    r183209 r185816  
    3737extern "C" {
    3838void _CFBundleSetupXPCBootstrap(xpc_object_t bootstrap);
     39
     40Boolean CFBundleGetLocalizationInfoForLocalization(CFStringRef localizationName, SInt32 *languageCode, SInt32 *regionCode, SInt32 *scriptCode, CFStringEncoding *stringEncoding);
     41CFStringRef CFBundleCopyLocalizationForLocalizationInfo(SInt32 languageCode, SInt32 regionCode, SInt32 scriptCode, CFStringEncoding stringEncoding);
    3942}
    4043
  • trunk/Tools/ChangeLog

    r185806 r185816  
     12015-06-21  Alexey Proskuryakov  <ap@apple.com>
     2
     3        REGRESSION (r172975): navigator.language unable to tell region for Traditional Chinese users
     4        https://bugs.webkit.org/show_bug.cgi?id=146121
     5        rdar://problem/21395180
     6
     7        Reviewed by Darin Adler.
     8
     9        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     10        * TestWebKitAPI/Tests/mac/NavigatorLanguage.mm: Added.
     11        (-[NavigatorLanguageDelegate webView:didFinishLoadForFrame:]):
     12        (TestWebKitAPI::overrideAppleLanguages):
     13        (TestWebKitAPI::languageForSystemLanguage):
     14        (TestWebKitAPI::TEST):
     15
    1162015-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>
    217
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r185661 r185816  
    295295                E1220DCA155B28AA0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = E1220DC9155B287D0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html */; };
    296296                E194E1BD177E53C7009C4D4E /* StopLoadingFromDidReceiveResponse.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = E194E1BC177E534A009C4D4E /* StopLoadingFromDidReceiveResponse.html */; };
     297                E19DB9791B32137C00DB38D4 /* NavigatorLanguage.mm in Sources */ = {isa = PBXBuildFile; fileRef = E19DB9781B32137C00DB38D4 /* NavigatorLanguage.mm */; };
    297298                E40019331ACE9B88001B0A2A /* BloomFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E40019301ACE9B5C001B0A2A /* BloomFilter.cpp */; };
    298299                F660AA1115A5F631003A1243 /* GetInjectedBundleInitializationUserDataCallback_Bundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F660AA0F15A5F624003A1243 /* GetInjectedBundleInitializationUserDataCallback_Bundle.cpp */; };
     
    716717                E194E1BA177E5145009C4D4E /* StopLoadingFromDidReceiveResponse.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = StopLoadingFromDidReceiveResponse.mm; sourceTree = "<group>"; };
    717718                E194E1BC177E534A009C4D4E /* StopLoadingFromDidReceiveResponse.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = StopLoadingFromDidReceiveResponse.html; sourceTree = "<group>"; };
     719                E19DB9781B32137C00DB38D4 /* NavigatorLanguage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NavigatorLanguage.mm; sourceTree = "<group>"; };
    718720                E40019301ACE9B5C001B0A2A /* BloomFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BloomFilter.cpp; sourceTree = "<group>"; };
    719721                E490296714E2E3A4002BEDD1 /* TypingStyleCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TypingStyleCrash.mm; sourceTree = "<group>"; };
     
    12131215                                517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */,
    12141216                                7A99D9931AD4A29D00373141 /* MenuTypesForMouseEvents.mm */,
     1217                                E19DB9781B32137C00DB38D4 /* NavigatorLanguage.mm */,
    12151218                                A57A34EF16AF677200C2501F /* PageVisibilityStateWithWindowChanges.mm */,
    12161219                                00BC16851680FE810065F1E5 /* PublicSuffix.mm */,
     
    16191622                                260BA5791B1D2E7B004FA07C /* DFACombiner.cpp in Sources */,
    16201623                                7A99D9941AD4A29D00373141 /* MenuTypesForMouseEvents.mm in Sources */,
     1624                                E19DB9791B32137C00DB38D4 /* NavigatorLanguage.mm in Sources */,
    16211625                        );
    16221626                        runOnlyForDeploymentPostprocessing = 0;
Note: See TracChangeset for help on using the changeset viewer.