void FontFaceSet::clearForBinding(ScriptState*, ExceptionState&) { if (!inActiveDocumentContext() || m_nonCSSConnectedFaces.isEmpty()) return; CSSFontSelector* fontSelector = document()->styleEngine().fontSelector(); FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); for (const auto& fontFace : m_nonCSSConnectedFaces) { fontFaceCache->removeFontFace(fontFace.get(), false); if (fontFace->loadStatus() == FontFace::Loading) removeFromLoadingFonts(fontFace); } m_nonCSSConnectedFaces.clear(); fontSelector->fontFaceInvalidated(); }
void FontFaceSet::clear() { if (!inActiveDocumentContext() || m_nonCSSConnectedFaces.isEmpty()) return; CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector(); FontFaceCache* fontFaceCache = fontSelector->fontFaceCache(); for (ListHashSet<RefPtr<FontFace> >::iterator it = m_nonCSSConnectedFaces.begin(); it != m_nonCSSConnectedFaces.end(); ++it) { fontFaceCache->removeFontFace(it->get(), false); if ((*it)->loadStatus() == FontFace::Loading) removeFromLoadingFonts(*it); } m_nonCSSConnectedFaces.clear(); fontSelector->fontFaceInvalidated(); }
bool FontFaceSet::deleteForBinding(ScriptState*, FontFace* fontFace, ExceptionState&) { ASSERT(fontFace); if (!inActiveDocumentContext()) return false; WillBeHeapListHashSet<RefPtrWillBeMember<FontFace>>::iterator it = m_nonCSSConnectedFaces.find(fontFace); if (it != m_nonCSSConnectedFaces.end()) { m_nonCSSConnectedFaces.remove(it); CSSFontSelector* fontSelector = document()->styleEngine().fontSelector(); fontSelector->fontFaceCache()->removeFontFace(fontFace, false); if (fontFace->loadStatus() == FontFace::Loading) removeFromLoadingFonts(fontFace); fontSelector->fontFaceInvalidated(); return true; } return false; }
bool FontFaceSet::remove(FontFace* fontFace, ExceptionState& exceptionState) { if (!inActiveDocumentContext()) return false; if (!fontFace) { exceptionState.ThrowTypeError("The argument is not a FontFace."); return false; } ListHashSet<RefPtr<FontFace> >::iterator it = m_nonCSSConnectedFaces.find(fontFace); if (it != m_nonCSSConnectedFaces.end()) { m_nonCSSConnectedFaces.remove(it); CSSFontSelector* fontSelector = document()->styleEngine()->fontSelector(); fontSelector->fontFaceCache()->removeFontFace(fontFace, false); if (fontFace->loadStatus() == FontFace::Loading) removeFromLoadingFonts(fontFace); fontSelector->fontFaceInvalidated(); return true; } if (isCSSConnectedFontFace(fontFace)) exceptionState.ThrowDOMException(InvalidModificationError, "Cannot delete a CSS-connected FontFace."); return false; }
void FontFaceSet::loadError(FontFace* fontFace) { m_histogram.updateStatus(fontFace); m_failedFonts.append(fontFace); removeFromLoadingFonts(fontFace); }
void FontFaceSet::fontLoaded(FontFace* fontFace) { m_histogram.updateStatus(fontFace); m_loadedFonts.append(fontFace); removeFromLoadingFonts(fontFace); }