| Index: Source/core/svg/SVGFontData.cpp
|
| diff --git a/Source/core/svg/SVGFontData.cpp b/Source/core/svg/SVGFontData.cpp
|
| index 325d5479b291a6d2eaa8c8aab16e8436d37b1675..a62697455da50d047415d5422b9f577545ca2094 100644
|
| --- a/Source/core/svg/SVGFontData.cpp
|
| +++ b/Source/core/svg/SVGFontData.cpp
|
| @@ -62,7 +62,7 @@ void SVGFontData::initializeFontData(SimpleFontData* fontData, float fontSize)
|
| ASSERT(fontData);
|
|
|
| SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
|
| - ASSERT(svgFontFaceElement);
|
| + ASSERT(svgFontFaceElement && svgFontFaceElement->inDocument());
|
|
|
| SVGFontElement* svgFontElement = svgFontFaceElement->associatedFontElement();
|
| ASSERT(svgFontElement);
|
| @@ -123,6 +123,13 @@ float SVGFontData::widthForSVGGlyph(Glyph glyph, float fontSize) const
|
| {
|
| SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
|
| ASSERT(svgFontFaceElement);
|
| + // RenderView::clearSelection is invoked while removing some element, e.g.
|
| + // Document::nodeWillBeRemoved => FrameSelection::nodeWillBeRemoved => RenderView::clearSelection.
|
| + // Since recalc style has not been executed yet, RenderStyle might have some reference to
|
| + // SVGFontFaceElement which was also removed.
|
| + // In this case, use default horizontalAdvanceX instead of associatedFontElement's one.
|
| + if (!svgFontFaceElement->inDocument())
|
| + return m_horizontalAdvanceX * scaleEmToUnits(fontSize, svgFontFaceElement->unitsPerEm());
|
|
|
| SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
|
| ASSERT(associatedFontElement);
|
| @@ -155,7 +162,7 @@ bool SVGFontData::applySVGGlyphSelection(WidthIterator& iterator, GlyphData& gly
|
| arabicForms = charactersWithArabicForm(remainingTextInRun, mirror);
|
|
|
| SVGFontFaceElement* svgFontFaceElement = this->svgFontFaceElement();
|
| - ASSERT(svgFontFaceElement);
|
| + ASSERT(svgFontFaceElement && svgFontFaceElement->inDocument());
|
|
|
| SVGFontElement* associatedFontElement = svgFontFaceElement->associatedFontElement();
|
| ASSERT(associatedFontElement);
|
| @@ -226,7 +233,7 @@ bool SVGFontData::fillSVGGlyphPage(GlyphPage* pageToFill, unsigned offset, unsig
|
| ASSERT(fontData->isSVGFont());
|
|
|
| SVGFontFaceElement* fontFaceElement = this->svgFontFaceElement();
|
| - ASSERT(fontFaceElement);
|
| + ASSERT(fontFaceElement && fontFaceElement->inDocument());
|
|
|
| SVGFontElement* fontElement = fontFaceElement->associatedFontElement();
|
| ASSERT(fontElement);
|
|
|