summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/css/FontLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/css/FontLoader.cpp')
-rw-r--r--chromium/third_party/WebKit/Source/core/css/FontLoader.cpp95
1 files changed, 95 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/core/css/FontLoader.cpp b/chromium/third_party/WebKit/Source/core/css/FontLoader.cpp
new file mode 100644
index 00000000000..189c37cf93c
--- /dev/null
+++ b/chromium/third_party/WebKit/Source/core/css/FontLoader.cpp
@@ -0,0 +1,95 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "core/css/FontLoader.h"
+
+#include "core/css/CSSFontSelector.h"
+#include "core/fetch/FontResource.h"
+#include "core/fetch/ResourceFetcher.h"
+
+namespace WebCore {
+
+FontLoader::FontLoader(CSSFontSelector* fontSelector, ResourceFetcher* resourceFetcher)
+ : m_beginLoadingTimer(this, &FontLoader::beginLoadTimerFired)
+ , m_fontSelector(fontSelector)
+ , m_resourceFetcher(resourceFetcher)
+{
+}
+
+FontLoader::~FontLoader()
+{
+#if ENABLE(OILPAN)
+ if (!m_resourceFetcher) {
+ ASSERT(m_fontsToBeginLoading.isEmpty());
+ return;
+ }
+ m_beginLoadingTimer.stop();
+
+ // When the m_fontsToBeginLoading vector is destroyed it will decrement the
+ // request counts on the ResourceFetcher for all the fonts that were pending
+ // at the time the FontLoader dies.
+#endif
+}
+
+void FontLoader::addFontToBeginLoading(FontResource* fontResource)
+{
+ if (!m_resourceFetcher || !fontResource->stillNeedsLoad())
+ return;
+
+ m_fontsToBeginLoading.append(
+ std::make_pair(fontResource, ResourceLoader::RequestCountTracker(m_resourceFetcher, fontResource)));
+ if (!m_beginLoadingTimer.isActive())
+ m_beginLoadingTimer.startOneShot(0, FROM_HERE);
+}
+
+void FontLoader::beginLoadTimerFired(Timer<WebCore::FontLoader>*)
+{
+ loadPendingFonts();
+}
+
+void FontLoader::loadPendingFonts()
+{
+ ASSERT(m_resourceFetcher);
+
+ FontsToLoadVector fontsToBeginLoading;
+ fontsToBeginLoading.swap(m_fontsToBeginLoading);
+ for (FontsToLoadVector::iterator it = fontsToBeginLoading.begin(); it != fontsToBeginLoading.end(); ++it) {
+ FontResource* fontResource = it->first.get();
+ fontResource->beginLoadIfNeeded(m_resourceFetcher);
+ }
+
+ // When the local fontsToBeginLoading vector goes out of scope it will
+ // decrement the request counts on the ResourceFetcher for all the fonts
+ // that were just loaded.
+}
+
+void FontLoader::fontFaceInvalidated()
+{
+ if (m_fontSelector)
+ m_fontSelector->fontFaceInvalidated();
+}
+
+#if !ENABLE(OILPAN)
+void FontLoader::clearResourceFetcherAndFontSelector()
+{
+ if (!m_resourceFetcher) {
+ ASSERT(m_fontsToBeginLoading.isEmpty());
+ return;
+ }
+
+ m_beginLoadingTimer.stop();
+ m_fontsToBeginLoading.clear();
+ m_resourceFetcher = nullptr;
+ m_fontSelector = nullptr;
+}
+#endif
+
+void FontLoader::trace(Visitor* visitor)
+{
+ visitor->trace(m_resourceFetcher);
+ visitor->trace(m_fontSelector);
+}
+
+} // namespace WebCore