Changeset 172172 in webkit


Ignore:
Timestamp:
Aug 6, 2014 1:25:00 PM (10 years ago)
Author:
ap@apple.com
Message:

REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
https://bugs.webkit.org/show_bug.cgi?id=135667
<rdar://problem/17862892>

Reviewed by Anders Carlsson.

Source/WebCore:
Moved a function that computes default encoding from WebKit to WebCore, so that
it could be shared with WebKit2.

  • WebCore.exp.in:
  • platform/ios/WebCoreSystemInterfaceIOS.mm:
  • platform/mac/WebCoreSystemInterface.h:
  • platform/mac/WebCoreSystemInterface.mm:
  • platform/text/TextEncodingRegistry.cpp:

(WebCore::defaultTextEncodingNameForSystemLanguage):

  • platform/text/TextEncodingRegistry.h:

Source/WebKit/mac:

  • WebView/WebPreferences.mm: (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]):

Moved implementation to WebCore, so that it can be shared with WebKit2.

  • WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface):

We now use WKGetWebDefaultCFStringEncoding in WebCore, so it needs to be initialized.

Source/WebKit2:

  • Shared/WebPreferencesDefinitions.h: Compute the actual proper default, don't

hardcode it to ISO-8859-1 hoping that someone else will correct it later.

  • Shared/WebPreferencesStore.cpp: Added an include for WebPreferencesDefinitions.h

macro expansion to compile.

  • UIProcess/WebPreferences.cpp: (WebKit::WebPreferences::createWithLegacyDefaults):

Added a FIXME.

  • WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):

We now use WKGetWebDefaultCFStringEncoding in WebCore, so it needs to be initialized.

Location:
trunk/Source
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r172165 r172172  
     12014-08-06  Alexey Proskuryakov  <ap@apple.com>
     2
     3        REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
     4        https://bugs.webkit.org/show_bug.cgi?id=135667
     5        <rdar://problem/17862892>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        Moved a function that computes default encoding from WebKit to WebCore, so that
     10        it could be shared with WebKit2.
     11
     12        * WebCore.exp.in:
     13        * platform/ios/WebCoreSystemInterfaceIOS.mm:
     14        * platform/mac/WebCoreSystemInterface.h:
     15        * platform/mac/WebCoreSystemInterface.mm:
     16        * platform/text/TextEncodingRegistry.cpp:
     17        (WebCore::defaultTextEncodingNameForSystemLanguage):
     18        * platform/text/TextEncodingRegistry.h:
     19
    1202014-08-06  Andreas Kling  <akling@apple.com>
    221
  • trunk/Source/WebCore/WebCore.exp.in

    r171964 r172172  
    10761076__ZN7WebCore3URLC1ERKS0_RKN3WTF6StringE
    10771077__ZN7WebCore3macERKNS_23AuthenticationChallengeE
     1078__ZN7WebCore40defaultTextEncodingNameForSystemLanguageEv
    10781079__ZN7WebCore40restrictMinimumScaleFactorToViewportSizeERNS_18ViewportAttributesENS_7IntSizeEf
    10791080__ZN7WebCore42URLByTruncatingOneCharacterBeforeComponentEP5NSURL18CFURLComponentType
     
    21052106_wkGetNSURLResponseLastModifiedDate
    21062107_wkGetUserToBaseCTM
     2108_wkGetWebDefaultCFStringEncoding
    21072109_wkHTTPCookies
    21082110_wkHTTPCookiesForURL
  • trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm

    r167609 r172172  
    7777void (*wkCFURLRequestAllowAllPostCaching)(CFURLRequestRef);
    7878CFArrayRef (*wkCopyNSURLResponseCertificateChain)(NSURLResponse*);
     79CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
    7980
    8081#if USE(CFNETWORK)
  • trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h

    r170295 r172172  
    153153extern NSString* (*wkCopyNSURLResponseStatusLine)(NSURLResponse*);
    154154extern CFArrayRef (*wkCopyNSURLResponseCertificateChain)(NSURLResponse*);
     155extern CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
    155156#if !PLATFORM(IOS)
    156157extern void (*wkDrawBezeledTextFieldCell)(NSRect, BOOL enabled);
  • trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm

    r170295 r172172  
    3939NSString* (*wkCopyNSURLResponseStatusLine)(NSURLResponse*);
    4040CFArrayRef (*wkCopyNSURLResponseCertificateChain)(NSURLResponse*);
     41CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
    4142NSString* (*wkCreateURLPasteboardFlavorTypeName)(void);
    4243NSString* (*wkCreateURLNPasteboardFlavorTypeName)(void);
  • trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp

    r165848 r172172  
    4343#include <wtf/StringExtras.h>
    4444
     45#if PLATFORM(COCOA)
     46#include "WebCoreSystemInterface.h"
     47#endif
     48
    4549#if PLATFORM(MAC)
    4650#include "TextCodecMac.h"
     
    351355}
    352356
     357#if PLATFORM(COCOA)
     358String defaultTextEncodingNameForSystemLanguage()
     359{
     360    String systemEncodingName = CFStringConvertEncodingToIANACharSetName(wkGetWebDefaultCFStringEncoding());
     361
     362    // CFStringConvertEncodingToIANACharSetName() returns cp949 for kTextEncodingDOSKorean AKA "extended EUC-KR" AKA windows-949.
     363    // ICU uses this name for a different encoding, so we need to change the name to a value that actually gives us windows-949.
     364    // In addition, this value must match what is used in Safari, see <rdar://problem/5579292>.
     365    // On some OS versions, the result is CP949 (uppercase).
     366    if (equalIgnoringCase(systemEncodingName, "cp949"))
     367        systemEncodingName = "ks_c_5601-1987";
     368    return systemEncodingName;
     369}
     370#endif
     371
    353372#ifndef NDEBUG
    354373void dumpTextEncodingNameMap()
  • trunk/Source/WebCore/platform/text/TextEncodingRegistry.h

    r165676 r172172  
    4949    bool shouldShowBackslashAsCurrencySymbolIn(const char* canonicalEncodingName);
    5050
     51#if PLATFORM(COCOA)
     52    String defaultTextEncodingNameForSystemLanguage();
     53#endif
     54
    5155#ifndef NDEBUG
    5256    void dumpTextEncodingNameMap();
  • trunk/Source/WebKit/mac/ChangeLog

    r172048 r172172  
     12014-08-06  Alexey Proskuryakov  <ap@apple.com>
     2
     3        REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
     4        https://bugs.webkit.org/show_bug.cgi?id=135667
     5        <rdar://problem/17862892>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        * WebView/WebPreferences.mm: (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]):
     10        Moved implementation to WebCore, so that it can be shared with WebKit2.
     11
     12        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface):
     13        We now use WKGetWebDefaultCFStringEncoding in WebCore, so it needs to be initialized.
     14
    1152014-08-05  Peyton Randolph  <prandolph@apple.com>
    216
  • trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm

    r170299 r172172  
    8181    INIT(GetMIMETypeForExtension);
    8282    INIT(GetNSURLResponseLastModifiedDate);
     83    INIT(GetWebDefaultCFStringEncoding);
    8384#if !PLATFORM(IOS)
    8485    INIT(SignedPublicKeyAndChallengeString);
  • trunk/Source/WebKit/mac/WebView/WebPreferences.mm

    r171673 r172172  
    4545#import <WebCore/NetworkStorageSession.h>
    4646#import <WebCore/ResourceHandle.h>
     47#import <WebCore/TextEncodingRegistry.h>
    4748#import <runtime/InitializeThreading.h>
    4849#import <wtf/MainThread.h>
     
    17161717+ (void)_setInitialDefaultTextEncodingToSystemEncoding
    17171718{
    1718     NSString *systemEncodingName = (NSString *)CFStringConvertEncodingToIANACharSetName([self _systemCFStringEncoding]);
    1719 
    1720     // CFStringConvertEncodingToIANACharSetName() returns cp949 for kTextEncodingDOSKorean AKA "extended EUC-KR" AKA windows-949.
    1721     // ICU uses this name for a different encoding, so we need to change the name to a value that actually gives us windows-949.
    1722     // In addition, this value must match what is used in Safari, see <rdar://problem/5579292>.
    1723     // On some OS versions, the result is CP949 (uppercase).
    1724     if ([systemEncodingName _webkit_isCaseInsensitiveEqualToString:@"cp949"])
    1725         systemEncodingName = @"ks_c_5601-1987";
    17261719    [[NSUserDefaults standardUserDefaults] registerDefaults:
    1727         [NSDictionary dictionaryWithObject:systemEncodingName forKey:WebKitDefaultTextEncodingNamePreferenceKey]];
     1720        [NSDictionary dictionaryWithObject:defaultTextEncodingNameForSystemLanguage() forKey:WebKitDefaultTextEncodingNamePreferenceKey]];
    17281721}
    17291722
  • trunk/Source/WebKit2/ChangeLog

    r172147 r172172  
     12014-08-06  Alexey Proskuryakov  <ap@apple.com>
     2
     3        REGRESSION (WebKit2): iOS Safari default encoding doesn't follow system language
     4        https://bugs.webkit.org/show_bug.cgi?id=135667
     5        <rdar://problem/17862892>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        * Shared/WebPreferencesDefinitions.h: Compute the actual proper default, don't
     10        hardcode it to ISO-8859-1 hoping that someone else will correct it later.
     11
     12        * Shared/WebPreferencesStore.cpp: Added an include for WebPreferencesDefinitions.h
     13        macro expansion to compile.
     14
     15        * UIProcess/WebPreferences.cpp: (WebKit::WebPreferences::createWithLegacyDefaults):
     16        Added a FIXME.
     17
     18        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm: (InitWebCoreSystemInterface):
     19        We now use WKGetWebDefaultCFStringEncoding in WebCore, so it needs to be initialized.
     20
    1212014-08-06  Adrian Perez de Castro  <aperez@igalia.com>
    222
  • trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h

    r171001 r172172  
    276276#define FOR_EACH_WEBKIT_STRING_PREFERENCE(macro) \
    277277    FOR_EACH_WEBKIT_FONT_FAMILY_PREFERENCE(macro) \
    278     macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, "ISO-8859-1") \
     278    macro(DefaultTextEncodingName, defaultTextEncodingName, String, String, defaultTextEncodingNameForSystemLanguage()) \
    279279    macro(FTPDirectoryTemplatePath, ftpDirectoryTemplatePath, String, String, "") \
    280280    \
  • trunk/Source/WebKit2/Shared/WebPreferencesStore.cpp

    r170253 r172172  
    3131#include "WebPreferencesKeys.h"
    3232#include <WebCore/Settings.h>
     33#include <WebCore/TextEncodingRegistry.h>
    3334#include <wtf/NeverDestroyed.h>
    3435
     
    3637#import <WebKitSystemInterfaceIOS.h>
    3738#endif
     39
     40using namespace WebCore;
    3841
    3942namespace WebKit {
  • trunk/Source/WebKit2/UIProcess/WebPreferences.cpp

    r171928 r172172  
    4646{
    4747    RefPtr<WebPreferences> preferences = adoptRef(new WebPreferences(identifier, keyPrefix, globalDebugKeyPrefix));
     48    // FIXME: The registerDefault...ValueForKey machinery is unnecessarily heavyweight and complicated.
     49    // We can just compute different defaults for modern and legacy APIs in WebPreferencesDefinitions.h macros.
    4850    preferences->registerDefaultBoolValueForKey(WebPreferencesKey::javaEnabledKey(), true);
    4951    preferences->registerDefaultBoolValueForKey(WebPreferencesKey::javaEnabledForLocalFilesKey(), true);
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm

    r170300 r172172  
    8181#endif
    8282        INIT(GetUserToBaseCTM);
     83        INIT(GetWebDefaultCFStringEncoding);
    8384        INIT(CGContextIsPDFContext);
    8485#if !PLATFORM(IOS)
Note: See TracChangeset for help on using the changeset viewer.