Changeset 57613 in webkit


Ignore:
Timestamp:
Apr 14, 2010 3:15:57 PM (14 years ago)
Author:
sfalken@apple.com
Message:

2010-04-14 Steve Falkenburg <sfalken@apple.com>

Reviewed by Dan Bernstein.

Don't cache SimpleFontData* in getLastResortFallbackFont. The cached entry may be invalidated.
https://bugs.webkit.org/show_bug.cgi?id=37599

  • platform/graphics/win/FontCacheWin.cpp: (WebCore::fontDataFromDescriptionAndLogFont): (WebCore::FontCache::getLastResortFallbackFont):
Location:
trunk/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r57609 r57613  
     12010-04-14  Steve Falkenburg  <sfalken@apple.com>
     2
     3        Reviewed by Dan Bernstein.
     4
     5        Don't cache SimpleFontData* in getLastResortFallbackFont. The cached entry may be invalidated.
     6        https://bugs.webkit.org/show_bug.cgi?id=37599
     7
     8        * platform/graphics/win/FontCacheWin.cpp:
     9        (WebCore::fontDataFromDescriptionAndLogFont):
     10        (WebCore::FontCache::getLastResortFallbackFont):
     11
    1122010-04-14  Andrey Kosyakov  <caseq@chromium.ru>
    213
  • trunk/WebCore/platform/graphics/win/FontCacheWin.cpp

    r57490 r57613  
    302302}
    303303
    304 static SimpleFontData* fontDataFromDescriptionAndLogFont(FontCache* fontCache, const FontDescription& fontDescription, const LOGFONT& font)
    305 {
    306     String fontFamily = String(font.lfFaceName, wcsnlen(font.lfFaceName, LF_FACESIZE));
    307     return fontCache->getCachedFontData(fontDescription, fontFamily);
     304static SimpleFontData* fontDataFromDescriptionAndLogFont(FontCache* fontCache, const FontDescription& fontDescription, const LOGFONT& font, AtomicString& outFontFamilyName)
     305{
     306    AtomicString familyName = String(font.lfFaceName, wcsnlen(font.lfFaceName, LF_FACESIZE));
     307    SimpleFontData* fontData = fontCache->getCachedFontData(fontDescription, familyName);
     308    if (fontData)
     309        outFontFamilyName = familyName;
     310    return fontData;
    308311}
    309312
    310313SimpleFontData* FontCache::getLastResortFallbackFont(const FontDescription& fontDescription)
    311314{
    312     DEFINE_STATIC_LOCAL(SimpleFontData*, simpleFont, ());
    313     if (simpleFont)
    314         return simpleFont;
     315    DEFINE_STATIC_LOCAL(AtomicString, fallbackFontName, ());
     316    if (!fallbackFontName.isEmpty())
     317        return getCachedFontData(fontDescription, fallbackFontName);
    315318
    316319    // FIXME: Would be even better to somehow get the user's default font here.  For now we'll pick
     
    327330        AtomicString("Arial")
    328331    };
     332    SimpleFontData* simpleFont;
    329333    for (int i = 0; i < ARRAYSIZE(fallbackFonts); ++i) {
    330         if (simpleFont = getCachedFontData(fontDescription, fallbackFonts[i]))
     334        if (simpleFont = getCachedFontData(fontDescription, fallbackFonts[i])) {
     335            fallbackFontName = fallbackFonts[i];
    331336            return simpleFont;
     337        }
    332338    }
    333339
     
    336342        LOGFONT defaultGUILogFont;
    337343        GetObject(defaultGUIFont, sizeof(defaultGUILogFont), &defaultGUILogFont);
    338         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, defaultGUILogFont))
     344        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, defaultGUILogFont, fallbackFontName))
    339345            return simpleFont;
    340346    }
     
    344350    nonClientMetrics.cbSize = sizeof(nonClientMetrics);
    345351    if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(nonClientMetrics), &nonClientMetrics, 0)) {
    346         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMessageFont))
     352        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMessageFont, fallbackFontName))
    347353            return simpleFont;
    348         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMenuFont))
     354        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfMenuFont, fallbackFontName))
    349355            return simpleFont;
    350         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfStatusFont))
     356        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfStatusFont, fallbackFontName))
    351357            return simpleFont;
    352         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfCaptionFont))
     358        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfCaptionFont, fallbackFontName))
    353359            return simpleFont;
    354         if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfSmCaptionFont))
     360        if (simpleFont = fontDataFromDescriptionAndLogFont(this, fontDescription, nonClientMetrics.lfSmCaptionFont, fallbackFontName))
    355361            return simpleFont;
    356362    }
Note: See TracChangeset for help on using the changeset viewer.