| Index: Source/platform/fonts/Font.h | 
| diff --git a/Source/platform/fonts/Font.h b/Source/platform/fonts/Font.h | 
| index 9eb7ef52309e592f92084dc0038192325a64ea6c..79fe3513cf5438b3955d6961460b8b9fdea745a9 100644 | 
| --- a/Source/platform/fonts/Font.h | 
| +++ b/Source/platform/fonts/Font.h | 
| @@ -30,6 +30,7 @@ | 
| #include "platform/fonts/FontFallbackList.h" | 
| #include "platform/fonts/SimpleFontData.h" | 
| #include "platform/fonts/TextBlob.h" | 
| +#include "platform/text/TabSize.h" | 
| #include "platform/text/TextDirection.h" | 
| #include "platform/text/TextPath.h" | 
| #include "wtf/HashMap.h" | 
| @@ -105,6 +106,17 @@ public: | 
| GlyphData glyphDataForCharacter(UChar32&, bool mirror, bool normalizeSpace = false, FontDataVariant = AutoVariant) const; | 
| CodePath codePath(const TextRunPaintInfo&) const; | 
|  | 
| +    // Whether the font supports shaping word by word instead of shaping the | 
| +    // full run in one go. Allows better caching for fonts where space cannot | 
| +    // participate in kerning and/or ligatures. | 
| +    bool canShapeWordByWord() const; | 
| + | 
| +    void setCanShapeWordByWordForTesting(bool b) | 
| +    { | 
| +        m_canShapeWordByWord = b; | 
| +        m_shapeWordByWordComputed = true; | 
| +    } | 
| + | 
| private: | 
| enum ForTextEmphasisOrNot { NotForTextEmphasis, ForTextEmphasis }; | 
|  | 
| @@ -129,6 +141,8 @@ private: | 
| int offsetForPositionForComplexText(const TextRun&, float position, bool includePartialGlyphs) const; | 
| FloatRect selectionRectForComplexText(const TextRun&, const FloatPoint&, int h, int from, int to) const; | 
|  | 
| +    bool computeCanShapeWordByWord() const; | 
| + | 
| friend struct SimpleShaper; | 
|  | 
| public: | 
| @@ -147,6 +161,8 @@ private: | 
|  | 
| FontDescription m_fontDescription; | 
| mutable RefPtr<FontFallbackList> m_fontFallbackList; | 
| +    mutable unsigned m_canShapeWordByWord : 1; | 
| +    mutable unsigned m_shapeWordByWordComputed : 1; | 
| }; | 
|  | 
| inline Font::~Font() | 
|  |