- a/Source/WebCore/ChangeLog +25 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2015-08-07  Myles C. Maxfield  <mmaxfield@apple.com>
2
3
        Post-review comments on r188146
4
        https://bugs.webkit.org/show_bug.cgi?id=147793
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        No new tests because there is no behavior change.
9
10
        * platform/graphics/FontCache.h:
11
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
12
        (WebCore::appendTrueTypeFeature):
13
        (WebCore::appendOpenTypeFeature):
14
        (WebCore::applyFontFeatureSettings):
15
        * platform/graphics/ios/FontCacheIOS.mm:
16
        (WebCore::FontCache::getSystemFontFallbackForCharacters):
17
        (WebCore::FontCache::createFontPlatformData):
18
        * platform/graphics/mac/FontCacheMac.mm:
19
        (WebCore::fontWithFamily):
20
        (WebCore::FontCache::systemFallbackForCharacters):
21
        * platform/graphics/mac/FontCustomPlatformData.cpp:
22
        (WebCore::FontCustomPlatformData::fontPlatformData):
23
        * rendering/RenderThemeIOS.mm:
24
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription):
25
1
2015-08-07  Andy Estes  <aestes@apple.com>
26
2015-08-07  Andy Estes  <aestes@apple.com>
2
27
3
        Crash when following a Google search link to Twitter with Limit Adult Content enabled
28
        Crash when following a Google search link to Twitter with Limit Adult Content enabled
- a/Source/WebCore/platform/graphics/FontCache.h -1 / +1 lines
Lines 215-221 private: a/Source/WebCore/platform/graphics/FontCache.h_sec1
215
};
215
};
216
216
217
#if PLATFORM(COCOA)
217
#if PLATFORM(COCOA)
218
RetainPtr<CTFontRef> applyFontFeatureSettings(CTFontRef, const FontFeatureSettings&);
218
RetainPtr<CTFontRef> applyFontFeatureSettings(CTFontRef, const FontFeatureSettings*);
219
#endif
219
#endif
220
220
221
#if !PLATFORM(MAC)
221
#if !PLATFORM(MAC)
- a/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp -12 / +13 lines
Lines 28-38 a/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp_sec1
28
28
29
namespace WebCore {
29
namespace WebCore {
30
30
31
static inline void appendTrueTypeFeature(CFMutableArrayRef features, const FontFeature& feature)
31
static inline void appendTrueTypeFeature(CFMutableArrayRef, const FontFeature&)
32
{
32
{
33
    // FIXME: We should map OpenType feature strings to the TrueType feature type identifiers listed in <CoreText/SFNTLayoutTypes.h>
33
    // FIXME: We should map OpenType feature strings to the TrueType feature type identifiers listed in <CoreText/SFNTLayoutTypes.h>.
34
    UNUSED_PARAM(features);
35
    UNUSED_PARAM(feature);
36
}
34
}
37
35
38
static inline void appendOpenTypeFeature(CFMutableArrayRef features, const FontFeature& feature)
36
static inline void appendOpenTypeFeature(CFMutableArrayRef features, const FontFeature& feature)
Lines 41-49 static inline void appendOpenTypeFeature(CFMutableArrayRef features, const FontF a/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp_sec2
41
    RetainPtr<CFStringRef> featureKey = feature.tag().string().createCFString();
39
    RetainPtr<CFStringRef> featureKey = feature.tag().string().createCFString();
42
    int rawFeatureValue = feature.value();
40
    int rawFeatureValue = feature.value();
43
    RetainPtr<CFNumberRef> featureValue = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &rawFeatureValue));
41
    RetainPtr<CFNumberRef> featureValue = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &rawFeatureValue));
44
    CFStringRef featureDictionaryKeys[] = {kCTFontOpenTypeFeatureTag, kCTFontOpenTypeFeatureValue};
42
    CFStringRef featureDictionaryKeys[] = { kCTFontOpenTypeFeatureTag, kCTFontOpenTypeFeatureValue };
45
    CFTypeRef featureDictionaryValues[] = {featureKey.get(), featureValue.get()};
43
    CFTypeRef featureDictionaryValues[] = { featureKey.get(), featureValue.get() };
46
    RetainPtr<CFDictionaryRef> featureDictionary = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, (const void**)featureDictionaryKeys, featureDictionaryValues, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
44
    RetainPtr<CFDictionaryRef> featureDictionary = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, (const void**)featureDictionaryKeys, featureDictionaryValues, WTF_ARRAY_LENGTH(featureDictionaryValues), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
47
    CFArrayAppendValue(features, featureDictionary.get());
45
    CFArrayAppendValue(features, featureDictionary.get());
48
#else
46
#else
49
    UNUSED_PARAM(features);
47
    UNUSED_PARAM(features);
Lines 51-62 static inline void appendOpenTypeFeature(CFMutableArrayRef features, const FontF a/Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp_sec3
51
#endif
49
#endif
52
}
50
}
53
51
54
RetainPtr<CTFontRef> applyFontFeatureSettings(CTFontRef originalFont, const FontFeatureSettings& features)
52
RetainPtr<CTFontRef> applyFontFeatureSettings(CTFontRef originalFont, const FontFeatureSettings* features)
55
{
53
{
56
    RetainPtr<CFMutableArrayRef> featureArray = adoptCF(CFArrayCreateMutable(kCFAllocatorDefault, features.size(), &kCFTypeArrayCallBacks));
54
    if (!originalFont || !features || !features->size())
57
    for (size_t i = 0; i < features.size(); ++i) {
55
        return originalFont;
58
        appendTrueTypeFeature(featureArray.get(), features[i]);
56
59
        appendOpenTypeFeature(featureArray.get(), features[i]);
57
    RetainPtr<CFMutableArrayRef> featureArray = adoptCF(CFArrayCreateMutable(kCFAllocatorDefault, features->size(), &kCFTypeArrayCallBacks));
58
    for (size_t i = 0; i < features->size(); ++i) {
59
        appendTrueTypeFeature(featureArray.get(), (*features)[i]);
60
        appendOpenTypeFeature(featureArray.get(), (*features)[i]);
60
    }
61
    }
61
    CFArrayRef featureArrayPtr = featureArray.get();
62
    CFArrayRef featureArrayPtr = featureArray.get();
62
    RetainPtr<CFDictionaryRef> dictionary = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, (const void**)&kCTFontFeatureSettingsAttribute, (const void**)&featureArrayPtr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
63
    RetainPtr<CFDictionaryRef> dictionary = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, (const void**)&kCTFontFeatureSettingsAttribute, (const void**)&featureArrayPtr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
- a/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm -4 / +2 lines
Lines 85-92 PassRefPtr<Font> FontCache::getSystemFontFallbackForCharacters(const FontDescrip a/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm_sec1
85
    if (!substituteFont)
85
    if (!substituteFont)
86
        return nullptr;
86
        return nullptr;
87
87
88
    if (substituteFont && description.featureSettings() && description.featureSettings()->size())
88
    substituteFont = applyFontFeatureSettings(substituteFont.get(), description.featureSettings());
89
        substituteFont = applyFontFeatureSettings(substituteFont.get(), *description.featureSettings());
90
89
91
    CTFontSymbolicTraits originalTraits = CTFontGetSymbolicTraits(ctFont);
90
    CTFontSymbolicTraits originalTraits = CTFontGetSymbolicTraits(ctFont);
92
    CTFontSymbolicTraits actualTraits = 0;
91
    CTFontSymbolicTraits actualTraits = 0;
Lines 695-702 std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDe a/Source/WebCore/platform/graphics/ios/FontCacheIOS.mm_sec2
695
    if (!ctFont)
694
    if (!ctFont)
696
        return nullptr;
695
        return nullptr;
697
696
698
    if (ctFont && fontDescription.featureSettings() && fontDescription.featureSettings()->size())
697
    ctFont = applyFontFeatureSettings(ctFont.get(), fontDescription.featureSettings());
699
        ctFont = applyFontFeatureSettings(ctFont.get(), *fontDescription.featureSettings());
700
698
701
    CTFontSymbolicTraits actualTraits = 0;
699
    CTFontSymbolicTraits actualTraits = 0;
702
    if (isFontWeightBold(fontDescription.weight()) || fontDescription.italic())
700
    if (isFontWeightBold(fontDescription.weight()) || fontDescription.italic())
- a/Source/WebCore/platform/graphics/mac/FontCacheMac.mm -4 / +2 lines
Lines 287-296 static NSFont *fontWithFamily(const AtomicString& family, NSFontTraitMask desire a/Source/WebCore/platform/graphics/mac/FontCacheMac.mm_sec1
287
287
288
    NSString *desiredFamily = family;
288
    NSString *desiredFamily = family;
289
    RetainPtr<CTFontRef> foundFont = adoptCF(CTFontCreateForCSS((CFStringRef)desiredFamily, toCoreTextFontWeight(weight), requestedTraits, size));
289
    RetainPtr<CTFontRef> foundFont = adoptCF(CTFontCreateForCSS((CFStringRef)desiredFamily, toCoreTextFontWeight(weight), requestedTraits, size));
290
    foundFont = applyFontFeatureSettings(foundFont.get(), featureSettings);
290
    if (!foundFont)
291
    if (!foundFont)
291
        return nil;
292
        return nil;
292
    if (featureSettings && featureSettings->size())
293
        foundFont = applyFontFeatureSettings(foundFont.get(), *featureSettings);
294
    font = CFBridgingRelease(CFRetain(foundFont.get()));
293
    font = CFBridgingRelease(CFRetain(foundFont.get()));
295
    availableFamily = [font familyName];
294
    availableFamily = [font familyName];
296
    chosenWeight = [fontManager weightOfFont:font];
295
    chosenWeight = [fontManager weightOfFont:font];
Lines 513-520 RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& descr a/Source/WebCore/platform/graphics/mac/FontCacheMac.mm_sec2
513
    const FontPlatformData& platformData = originalFontData->platformData();
512
    const FontPlatformData& platformData = originalFontData->platformData();
514
    NSFont *nsFont = platformData.nsFont();
513
    NSFont *nsFont = platformData.nsFont();
515
    RetainPtr<CTFontRef> result = lookupCTFont(platformData.font(), platformData.size(), characters, length);
514
    RetainPtr<CTFontRef> result = lookupCTFont(platformData.font(), platformData.size(), characters, length);
516
    if (result && description.featureSettings() && description.featureSettings()->size())
515
    result = applyFontFeatureSettings(result.get(), description.featureSettings());
517
        result = applyFontFeatureSettings(result.get(), *description.featureSettings());
518
    if (!result)
516
    if (!result)
519
        return nullptr;
517
        return nullptr;
520
518
- a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp -2 / +1 lines
Lines 41-48 FontPlatformData FontCustomPlatformData::fontPlatformData(const FontDescription& a/Source/WebCore/platform/graphics/mac/FontCustomPlatformData.cpp_sec1
41
    FontWidthVariant widthVariant = fontDescription.widthVariant();
41
    FontWidthVariant widthVariant = fontDescription.widthVariant();
42
#if CORETEXT_WEB_FONTS
42
#if CORETEXT_WEB_FONTS
43
    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(m_fontDescriptor.get(), size, nullptr));
43
    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(m_fontDescriptor.get(), size, nullptr));
44
    if (font && fontDescription.featureSettings() && fontDescription.featureSettings()->size())
44
    font = applyFontFeatureSettings(font.get(), fontDescription.featureSettings());
45
        font = applyFontFeatureSettings(font.get(), *fontDescription.featureSettings());
46
    return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant);
45
    return FontPlatformData(font.get(), size, bold, italic, orientation, widthVariant);
47
#else
46
#else
48
    return FontPlatformData(m_cgFont.get(), size, bold, italic, orientation, widthVariant);
47
    return FontPlatformData(m_cgFont.get(), size, bold, italic, orientation, widthVariant);
- a/Source/WebCore/rendering/RenderThemeIOS.mm -2 / +1 lines
Lines 1261-1268 void RenderThemeIOS::updateCachedSystemFontDescription(CSSValueID valueID, FontD a/Source/WebCore/rendering/RenderThemeIOS.mm_sec1
1261
1261
1262
    ASSERT(fontDescriptor);
1262
    ASSERT(fontDescriptor);
1263
    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr));
1263
    RetainPtr<CTFontRef> font = adoptCF(CTFontCreateWithFontDescriptor(fontDescriptor.get(), 0, nullptr));
1264
    if (font && fontDescription.featureSettings() && fontDescription.featureSettings()->size())
1264
    font = applyFontFeatureSettings(font.get(), fontDescription.featureSettings());
1265
        font = applyFontFeatureSettings(font.get(), *fontDescription.featureSettings());
1266
    fontDescription.setIsAbsoluteSize(true);
1265
    fontDescription.setIsAbsoluteSize(true);
1267
    fontDescription.setOneFamily(textStyle);
1266
    fontDescription.setOneFamily(textStyle);
1268
    fontDescription.setSpecifiedSize(CTFontGetSize(font.get()));
1267
    fontDescription.setSpecifiedSize(CTFontGetSize(font.get()));

Return to Bug 147793