Index: Source/core/css/CSSSegmentedFontFace.cpp |
diff --git a/Source/core/css/CSSSegmentedFontFace.cpp b/Source/core/css/CSSSegmentedFontFace.cpp |
index 420368a25a25c494eb59d8f062b729abbc51ba01..3cc8fa56b3bf03986b80d1be9c3f5ae5d89c47e6 100644 |
--- a/Source/core/css/CSSSegmentedFontFace.cpp |
+++ b/Source/core/css/CSSSegmentedFontFace.cpp |
@@ -37,6 +37,8 @@ |
namespace WebCore { |
+DEFINE_GC_TYPE_MARKER(CSSSegmentedFontFace); |
+ |
CSSSegmentedFontFace::CSSSegmentedFontFace(CSSFontSelector* fontSelector) |
: m_fontSelector(fontSelector) |
{ |
@@ -44,10 +46,17 @@ CSSSegmentedFontFace::CSSSegmentedFontFace(CSSFontSelector* fontSelector) |
CSSSegmentedFontFace::~CSSSegmentedFontFace() |
{ |
+ dispose(); |
+} |
+ |
+void CSSSegmentedFontFace::dispose() |
+{ |
pruneTable(); |
unsigned size = m_fontFaces.size(); |
for (unsigned i = 0; i < size; i++) |
- m_fontFaces[i]->removedFromSegmentedFontFace(this); |
+ m_fontFaces[i]->removedFromSegmentedFontFace(Handle<CSSSegmentedFontFace>(this)); |
+ m_fontFaces.clear(); |
+ m_fontSelector = 0; |
} |
void CSSSegmentedFontFace::pruneTable() |
@@ -79,9 +88,9 @@ void CSSSegmentedFontFace::fontLoaded(CSSFontFace*) |
m_callbacks.swap(callbacks); |
for (size_t index = 0; index < callbacks.size(); ++index) { |
if (checkFont()) |
- callbacks[index]->notifyLoaded(this); |
+ callbacks[index]->notifyLoaded(Handle<CSSSegmentedFontFace>(this)); |
else |
- callbacks[index]->notifyError(this); |
+ callbacks[index]->notifyError(Handle<CSSSegmentedFontFace>(this)); |
} |
} |
} |
@@ -89,7 +98,7 @@ void CSSSegmentedFontFace::fontLoaded(CSSFontFace*) |
void CSSSegmentedFontFace::appendFontFace(PassRefPtr<CSSFontFace> fontFace) |
{ |
pruneTable(); |
- fontFace->addedToSegmentedFontFace(this); |
+ fontFace->addedToSegmentedFontFace(Handle<CSSSegmentedFontFace>(this)); |
m_fontFaces.append(fontFace); |
} |
@@ -175,9 +184,9 @@ void CSSSegmentedFontFace::loadFont(const FontDescription& fontDescription, Pass |
if (isLoading()) |
m_callbacks.append(callback); |
else if (checkFont()) |
- callback->notifyLoaded(this); |
+ callback->notifyLoaded(Handle<CSSSegmentedFontFace>(this)); |
else |
- callback->notifyError(this); |
+ callback->notifyError(Handle<CSSSegmentedFontFace>(this)); |
} |
} |