Title: [221286] trunk/Source
Revision
221286
Author
[email protected]
Date
2017-08-28 17:55:01 -0700 (Mon, 28 Aug 2017)

Log Message

[Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
https://bugs.webkit.org/show_bug.cgi?id=176039

Reviewed by Alex Christensen.

Source/WebCore:

* PlatformMac.cmake:
* WebCore.xcodeproj/project.pbxproj:
* platform/ios/WebCoreSystemInterfaceIOS.mm:
* platform/mac/WebCoreSystemInterface.h:
* platform/mac/WebCoreSystemInterface.mm:
* platform/text/TextEncodingRegistry.cpp:
(WebCore::defaultTextEncodingNameForSystemLanguage):
* platform/text/TextEncodingRegistry.h:
* platform/text/ios/TextEncodingRegistryIOS.mm: Added.
(WebCore::webDefaultCFStringEncoding):
* platform/text/mac/TextEncodingRegistryMac.mm: Added.
(WebCore::webDefaultCFStringEncoding):

Source/WebKit:

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

Source/WebKitLegacy/mac:

* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface):
* WebView/WebPreferences.mm:
(+[WebPreferences _systemCFStringEncoding]):

Source/WTF:

* wtf/spi/cf/CFStringSPI.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (221285 => 221286)


--- trunk/Source/WTF/ChangeLog	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WTF/ChangeLog	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1,3 +1,12 @@
+2017-08-28  Andy Estes  <[email protected]>
+
+        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
+        https://bugs.webkit.org/show_bug.cgi?id=176039
+
+        Reviewed by Alex Christensen.
+
+        * wtf/spi/cf/CFStringSPI.h:
+
 2017-08-26  Yusuke Suzuki  <[email protected]>
 
         Unreviewed, suppress warnings in GTK port

Modified: trunk/Source/WTF/wtf/spi/cf/CFStringSPI.h (221285 => 221286)


--- trunk/Source/WTF/wtf/spi/cf/CFStringSPI.h	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WTF/wtf/spi/cf/CFStringSPI.h	2017-08-29 00:55:01 UTC (rev 221286)
@@ -30,6 +30,7 @@
 #if USE(APPLE_INTERNAL_SDK)
 
 #import <CoreFoundation/CFPriv.h>
+#import <CoreFoundation/CFStringDefaultEncoding.h>
 
 #else
 
@@ -49,6 +50,7 @@
 extern "C" {
 
 CFRange CFStringGetRangeOfCharacterClusterAtIndex(CFStringRef, CFIndex charIndex, CFStringCharacterClusterType);
+void _CFStringGetUserDefaultEncoding(UInt32* scriptValue, UInt32* regionValue);
 
 }
 

Modified: trunk/Source/WebCore/ChangeLog (221285 => 221286)


--- trunk/Source/WebCore/ChangeLog	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/ChangeLog	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1,3 +1,23 @@
+2017-08-28  Andy Estes  <[email protected]>
+
+        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
+        https://bugs.webkit.org/show_bug.cgi?id=176039
+
+        Reviewed by Alex Christensen.
+
+        * PlatformMac.cmake:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/ios/WebCoreSystemInterfaceIOS.mm:
+        * platform/mac/WebCoreSystemInterface.h:
+        * platform/mac/WebCoreSystemInterface.mm:
+        * platform/text/TextEncodingRegistry.cpp:
+        (WebCore::defaultTextEncodingNameForSystemLanguage):
+        * platform/text/TextEncodingRegistry.h:
+        * platform/text/ios/TextEncodingRegistryIOS.mm: Added.
+        (WebCore::webDefaultCFStringEncoding):
+        * platform/text/mac/TextEncodingRegistryMac.mm: Added.
+        (WebCore::webDefaultCFStringEncoding):
+
 2017-08-28  Joseph Pecoraro  <[email protected]>
 
         REGRESSION(r220278): Web Inspector: ContextMenu items are not getting triggered

Modified: trunk/Source/WebCore/PlatformMac.cmake (221285 => 221286)


--- trunk/Source/WebCore/PlatformMac.cmake	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/PlatformMac.cmake	2017-08-29 00:55:01 UTC (rev 221286)
@@ -572,6 +572,7 @@
     platform/text/mac/LocaleMac.mm
     platform/text/mac/TextBoundaries.mm
     platform/text/mac/TextCodecMac.cpp
+    platform/text/mac/TextEncodingRegistryMac.mm
 
     rendering/RenderThemeCocoa.mm
     rendering/RenderThemeMac.mm

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (221285 => 221286)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2017-08-29 00:55:01 UTC (rev 221286)
@@ -4408,6 +4408,8 @@
 		A1E1154813015C5D0054AC8C /* SpotLightSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1E1154713015C5D0054AC8C /* SpotLightSource.cpp */; };
 		A1ED778C1BE3294000DC1791 /* Device.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1ED778A1BE3293F00DC1791 /* Device.cpp */; };
 		A1ED778D1BE3294000DC1791 /* Device.h in Headers */ = {isa = PBXBuildFile; fileRef = A1ED778B1BE3294000DC1791 /* Device.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		A1F55DC11F54D2D600EDB75F /* TextEncodingRegistryIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1F55DBF1F54D2D600EDB75F /* TextEncodingRegistryIOS.mm */; };
+		A1F55DC61F54D3F000EDB75F /* TextEncodingRegistryMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = A1F55DC41F54D3F000EDB75F /* TextEncodingRegistryMac.mm */; };
 		A1F600441F4757A90077E83F /* PaymentRequestUpdateEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F600411F4757A90077E83F /* PaymentRequestUpdateEvent.h */; };
 		A1F600451F4757A90077E83F /* PaymentRequestUpdateEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1F600421F4757A90077E83F /* PaymentRequestUpdateEvent.cpp */; };
 		A1F600491F47594E0077E83F /* PaymentDetailsUpdate.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F600471F47594E0077E83F /* PaymentDetailsUpdate.h */; };
@@ -12739,6 +12741,8 @@
 		A1E1154713015C5D0054AC8C /* SpotLightSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpotLightSource.cpp; sourceTree = "<group>"; };
 		A1ED778A1BE3293F00DC1791 /* Device.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Device.cpp; sourceTree = "<group>"; };
 		A1ED778B1BE3294000DC1791 /* Device.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Device.h; sourceTree = "<group>"; };
+		A1F55DBF1F54D2D600EDB75F /* TextEncodingRegistryIOS.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TextEncodingRegistryIOS.mm; sourceTree = "<group>"; };
+		A1F55DC41F54D3F000EDB75F /* TextEncodingRegistryMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = TextEncodingRegistryMac.mm; sourceTree = "<group>"; };
 		A1F600411F4757A90077E83F /* PaymentRequestUpdateEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PaymentRequestUpdateEvent.h; sourceTree = "<group>"; };
 		A1F600421F4757A90077E83F /* PaymentRequestUpdateEvent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentRequestUpdateEvent.cpp; sourceTree = "<group>"; };
 		A1F600431F4757A90077E83F /* PaymentRequestUpdateEvent.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = PaymentRequestUpdateEvent.idl; sourceTree = "<group>"; };
@@ -21360,6 +21364,7 @@
 			children = (
 				A516E8B4136E04DB0076C3C0 /* LocalizedDateCache.h */,
 				A516E8B5136E04DB0076C3C0 /* LocalizedDateCache.mm */,
+				A1F55DBF1F54D2D600EDB75F /* TextEncodingRegistryIOS.mm */,
 			);
 			path = ios;
 			sourceTree = "<group>";
@@ -23657,6 +23662,7 @@
 				B2AFFC8C0D00A5DF0030074D /* TextBoundaries.mm */,
 				B2AFFC8E0D00A5DF0030074D /* TextCodecMac.cpp */,
 				B2AFFC8F0D00A5DF0030074D /* TextCodecMac.h */,
+				A1F55DC41F54D3F000EDB75F /* TextEncodingRegistryMac.mm */,
 			);
 			path = mac;
 			sourceTree = "<group>";
@@ -33886,6 +33892,8 @@
 				B2C3DA460D006C1D00EF6F26 /* TextEncoding.cpp in Sources */,
 				C105DA620F3AA68F001DD44F /* TextEncodingDetectorICU.cpp in Sources */,
 				B2C3DA480D006C1D00EF6F26 /* TextEncodingRegistry.cpp in Sources */,
+				A1F55DC11F54D2D600EDB75F /* TextEncodingRegistryIOS.mm in Sources */,
+				A1F55DC61F54D3F000EDB75F /* TextEncodingRegistryMac.mm in Sources */,
 				933A142E0B7D188600A53FFD /* TextEvent.cpp in Sources */,
 				F55B3DD71251F12D003EF269 /* TextFieldInputType.cpp in Sources */,
 				2D4F96F51A1ECC240098BF88 /* TextIndicator.cpp in Sources */,

Modified: trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm (221285 => 221286)


--- trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -37,7 +37,6 @@
 WEBCORE_EXPORT void (*wkSetCookieStoragePrivateBrowsingEnabled)(BOOL);
 WEBCORE_EXPORT CFHTTPMessageRef (*wkCopyCONNECTProxyResponse)(CFReadStreamRef, CFURLRef responseURL, CFStringRef proxyHost, CFNumberRef proxyPort);
 WEBCORE_EXPORT void (*wkSetLayerContentsScale)(CALayer *);
-WEBCORE_EXPORT CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
 
 WEBCORE_EXPORT void(*wkDestroyRenderingResources)(void);
 

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h (221285 => 221286)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h	2017-08-29 00:55:01 UTC (rev 221286)
@@ -129,7 +129,6 @@
 extern bool (*wkCGContextDrawsWithCorrectShadowOffsets)(CGContextRef);
 #endif
 extern CGPatternRef (*wkCGPatternCreateWithImageAndTransform)(CGImageRef, CGAffineTransform, int);
-extern CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
 #if !PLATFORM(IOS)
 extern void (*wkDrawBezeledTextArea)(NSRect, BOOL enabled);
 extern void (*wkDrawFocusRing)(CGContextRef, CGColorRef, int);

Modified: trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm (221285 => 221286)


--- trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -33,7 +33,6 @@
 void (*wkCALayerEnumerateRectsBeingDrawnWithBlock)(CALayer *, CGContextRef context, void (^block)(CGRect rect));
 bool (*wkCGContextDrawsWithCorrectShadowOffsets)(CGContextRef);
 CGPatternRef (*wkCGPatternCreateWithImageAndTransform)(CGImageRef, CGAffineTransform, int);
-CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
 void (*wkDrawBezeledTextArea)(NSRect, BOOL enabled);
 void (*wkDrawFocusRing)(CGContextRef, CGColorRef, int);
 bool (*wkDrawFocusRingAtTime)(CGContextRef, NSTimeInterval);

Modified: trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp (221285 => 221286)


--- trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/platform/text/TextEncodingRegistry.cpp	2017-08-29 00:55:01 UTC (rev 221286)
@@ -366,7 +366,7 @@
 String defaultTextEncodingNameForSystemLanguage()
 {
 #if PLATFORM(COCOA)
-    String systemEncodingName = CFStringConvertEncodingToIANACharSetName(wkGetWebDefaultCFStringEncoding());
+    String systemEncodingName = CFStringConvertEncodingToIANACharSetName(webDefaultCFStringEncoding());
 
     // CFStringConvertEncodingToIANACharSetName() returns cp949 for kTextEncodingDOSKorean AKA "extended EUC-KR" AKA windows-949.
     // ICU uses this name for a different encoding, so we need to change the name to a value that actually gives us windows-949.

Modified: trunk/Source/WebCore/platform/text/TextEncodingRegistry.h (221285 => 221286)


--- trunk/Source/WebCore/platform/text/TextEncodingRegistry.h	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebCore/platform/text/TextEncodingRegistry.h	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006-2017 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -23,8 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef TextEncodingRegistry_h
-#define TextEncodingRegistry_h
+#pragma once
 
 #include <memory>
 #include <wtf/text/WTFString.h>
@@ -31,29 +30,31 @@
 
 namespace WebCore {
 
-    class TextCodec;
-    class TextEncoding;
+class TextCodec;
+class TextEncoding;
 
-    // Use TextResourceDecoder::decode to decode resources, since it handles BOMs.
-    // Use TextEncoding::encode to encode, since it takes care of normalization.
-    std::unique_ptr<TextCodec> newTextCodec(const TextEncoding&);
+// Use TextResourceDecoder::decode to decode resources, since it handles BOMs.
+// Use TextEncoding::encode to encode, since it takes care of normalization.
+std::unique_ptr<TextCodec> newTextCodec(const TextEncoding&);
 
-    // Only TextEncoding should use the following functions directly.
-    const char* atomicCanonicalTextEncodingName(const char* alias);
-    template <typename CharacterType>
-    const char* atomicCanonicalTextEncodingName(const CharacterType*, size_t);
-    const char* atomicCanonicalTextEncodingName(const String&);
-    bool noExtendedTextEncodingNameUsed();
-    bool isJapaneseEncoding(const char* canonicalEncodingName);
-    bool shouldShowBackslashAsCurrencySymbolIn(const char* canonicalEncodingName);
-    bool isReplacementEncoding(const char* alias);
-    bool isReplacementEncoding(const String& alias);
+// Only TextEncoding should use the following functions directly.
+const char* atomicCanonicalTextEncodingName(const char* alias);
+template <typename CharacterType>
+const char* atomicCanonicalTextEncodingName(const CharacterType*, size_t);
+const char* atomicCanonicalTextEncodingName(const String&);
+bool noExtendedTextEncodingNameUsed();
+bool isJapaneseEncoding(const char* canonicalEncodingName);
+bool shouldShowBackslashAsCurrencySymbolIn(const char* canonicalEncodingName);
+bool isReplacementEncoding(const char* alias);
+bool isReplacementEncoding(const String& alias);
 
-    WEBCORE_EXPORT String defaultTextEncodingNameForSystemLanguage();
+WEBCORE_EXPORT String defaultTextEncodingNameForSystemLanguage();
+#if PLATFORM(COCOA)
+WEBCORE_EXPORT CFStringEncoding webDefaultCFStringEncoding();
+#endif
 
 #ifndef NDEBUG
-    void dumpTextEncodingNameMap();
+void dumpTextEncodingNameMap();
 #endif
-}
 
-#endif // TextEncodingRegistry_h
+} // namespace WebCore

Added: trunk/Source/WebCore/platform/text/ios/TextEncodingRegistryIOS.mm (0 => 221286)


--- trunk/Source/WebCore/platform/text/ios/TextEncodingRegistryIOS.mm	                        (rev 0)
+++ trunk/Source/WebCore/platform/text/ios/TextEncodingRegistryIOS.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "TextEncodingRegistry.h"
+
+#if PLATFORM(IOS)
+
+namespace WebCore {
+
+CFStringEncoding webDefaultCFStringEncoding()
+{
+    // FIXME: we can do better than this hard-coded list once this radar is addressed:
+    // <rdar://problem/4433165> Need API that can get preferred web (and mail) encoding(s) w/o region code.
+    // Alternatively, we could have our own table of preferred encodings in WebKit, shared with Mac.
+
+    NSArray *preferredLanguages = [NSLocale preferredLanguages];
+    if (!preferredLanguages.count)
+        return kCFStringEncodingISOLatin1;
+
+    // We pass in the first language as "en" because if preferredLocalizationsFromArray:forPreferences:
+    // doesn't find a match, it will return the result of the first value in languagesWithCustomDefaultEncodings.
+    // We could really pass anything as this first value, as long as it's not something we're trying to match against
+    // below. We don't want to implictly default to "zh-Hans", that's why it's not first in the array.
+    NSArray *languagesWithCustomDefaultEncodings = @[ @"en", @"zh-Hans", @"zh-Hant", @"zh-HK", @"ja", @"ko", @"ru" ];
+    NSArray *languagesToUse = [NSBundle preferredLocalizationsFromArray:languagesWithCustomDefaultEncodings forPreferences:@[ [preferredLanguages firstObject] ]];
+    if (!languagesToUse.count)
+        return kCFStringEncodingISOLatin1;
+
+    NSString *firstLanguage = languagesToUse.firstObject;
+    if ([firstLanguage isEqualToString:@"zh-Hans"])
+        return kCFStringEncodingEUC_CN;
+    if ([firstLanguage isEqualToString:@"zh-Hant"])
+        return kCFStringEncodingBig5;
+    if ([firstLanguage isEqualToString:@"zh-HK"])
+        return kCFStringEncodingBig5_HKSCS_1999;
+    if ([firstLanguage isEqualToString:@"ja"])
+        return kCFStringEncodingShiftJIS;
+    if ([firstLanguage isEqualToString:@"ko"])
+        return kCFStringEncodingEUC_KR;
+    if ([firstLanguage isEqualToString:@"ru"])
+        return kCFStringEncodingWindowsCyrillic;
+
+    return kCFStringEncodingISOLatin1;
+}
+
+} // namespace WebCore
+
+#endif // PLATFORM(IOS)

Added: trunk/Source/WebCore/platform/text/mac/TextEncodingRegistryMac.mm (0 => 221286)


--- trunk/Source/WebCore/platform/text/mac/TextEncodingRegistryMac.mm	                        (rev 0)
+++ trunk/Source/WebCore/platform/text/mac/TextEncodingRegistryMac.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "config.h"
+#import "TextEncodingRegistry.h"
+
+#if PLATFORM(MAC)
+
+#import <CarbonCore/CarbonCore.h>
+#import <wtf/spi/cf/CFStringSPI.h>
+
+namespace WebCore {
+
+CFStringEncoding webDefaultCFStringEncoding()
+{
+    UInt32 script = 0;
+    UInt32 region = 0;
+    ::TextEncoding encoding;
+    OSErr err;
+    ItemCount dontcare;
+
+    // FIXME: Switch away from using Script Manager, as it does not support some languages newly added in OS X.
+    // <rdar://problem/4433165> Need API that can get preferred web (and mail) encoding(s) w/o region code.
+    // Alternatively, we could have our own table of preferred encodings in WebKit.
+    //
+    // Also, language changes do not apply to _CFStringGetUserDefaultEncoding() until re-login, which could be very confusing.
+
+    _CFStringGetUserDefaultEncoding(&script, &region);
+    err = TECGetWebTextEncodings(region, &encoding, 1, &dontcare);
+    if (err != noErr)
+        encoding = kCFStringEncodingISOLatin1;
+    return encoding;
+}
+
+} // namespace WebCore
+
+#endif // PLATFORM(MAC)

Modified: trunk/Source/WebKit/ChangeLog (221285 => 221286)


--- trunk/Source/WebKit/ChangeLog	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebKit/ChangeLog	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1,3 +1,13 @@
+2017-08-28  Andy Estes  <[email protected]>
+
+        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
+        https://bugs.webkit.org/show_bug.cgi?id=176039
+
+        Reviewed by Alex Christensen.
+
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+
 2017-08-28  Megan Gardner  <[email protected]>
 
         Fix incorrect enum in atBoundaryOfGranularity call

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm (221285 => 221286)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -50,7 +50,6 @@
         INIT(DrawMediaSliderTrack);
         INIT(DrawMediaUIPart);
 #endif
-        INIT(GetWebDefaultCFStringEncoding);
         INIT(CGContextIsPDFContext);
 #if !PLATFORM(IOS)
         INIT(GetWheelEventDeltas);

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (221285 => 221286)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1,5 +1,17 @@
 2017-08-28  Andy Estes  <[email protected]>
 
+        [Cocoa] Upstream WKGetWebDefaultCFStringEncoding()
+        https://bugs.webkit.org/show_bug.cgi?id=176039
+
+        Reviewed by Alex Christensen.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface):
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences _systemCFStringEncoding]):
+
+2017-08-28  Andy Estes  <[email protected]>
+
         [Cocoa] Upstream CFNetwork-related WebKitSystemInterface functions
         https://bugs.webkit.org/show_bug.cgi?id=176032
 

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm (221285 => 221286)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebSystemInterface.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -55,9 +55,6 @@
     INIT(DrawCellFocusRingWithFrameAtTime);
     INIT(DrawMediaUIPart);
     INIT(DrawMediaSliderTrack);
-#endif
-    INIT(GetWebDefaultCFStringEncoding);
-#if !PLATFORM(IOS)
     INIT(GetWheelEventDeltas);
     INIT(GetNSEventKeyChar);
     INIT(HitTestMediaUIPart);

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm (221285 => 221286)


--- trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm	2017-08-29 00:42:27 UTC (rev 221285)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm	2017-08-29 00:55:01 UTC (rev 221286)
@@ -1835,7 +1835,7 @@
 
 + (CFStringEncoding)_systemCFStringEncoding
 {
-    return WKGetWebDefaultCFStringEncoding();
+    return webDefaultCFStringEncoding();
 }
 
 + (void)_setInitialDefaultTextEncodingToSystemEncoding
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to