| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/css/FontLoader.h" | 5 #include "core/css/FontLoader.h" |
| 6 | 6 |
| 7 #include "core/css/CSSFontSelector.h" | 7 #include "core/css/CSSFontSelector.h" |
| 8 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 9 #include "core/dom/IncrementLoadEventDelayCount.h" | 9 #include "core/dom/IncrementLoadEventDelayCount.h" |
| 10 #include "core/fetch/FontResource.h" | 10 #include "core/fetch/FontResource.h" |
| 11 #include "core/inspector/ConsoleMessage.h" | 11 #include "core/inspector/ConsoleMessage.h" |
| 12 | 12 |
| 13 namespace blink { | 13 namespace blink { |
| 14 | 14 |
| 15 struct FontLoader::FontToLoad { | 15 struct FontLoader::FontToLoad : public NoBaseWillBeGarbageCollectedFinalized<Fon
tLoader::FontToLoad> { |
| 16 public: | 16 public: |
| 17 static PassOwnPtr<FontToLoad> create(FontResource* fontResource, Document& d
ocument) | 17 static PassOwnPtrWillBeRawPtr<FontToLoad> create(FontResource* fontResource,
Document& document) |
| 18 { | 18 { |
| 19 return adoptPtr(new FontToLoad(fontResource, document)); | 19 return adoptPtrWillBeNoop(new FontToLoad(fontResource, document)); |
| 20 } | 20 } |
| 21 | 21 |
| 22 ResourcePtr<FontResource> fontResource; | 22 virtual ~FontToLoad() |
| 23 { |
| 24 ASSERT(!fontResource); |
| 25 } |
| 26 |
| 27 RefPtrWillBeMember<FontResource> fontResource; |
| 23 OwnPtr<IncrementLoadEventDelayCount> delay; | 28 OwnPtr<IncrementLoadEventDelayCount> delay; |
| 24 | 29 |
| 30 void dispose() |
| 31 { |
| 32 fontResource = nullptr; |
| 33 delay.clear(); |
| 34 } |
| 35 |
| 36 DEFINE_INLINE_TRACE() { visitor->trace(fontResource); } |
| 37 |
| 25 private: | 38 private: |
| 26 FontToLoad(FontResource* resource, Document& document) | 39 FontToLoad(FontResource* resource, Document& document) |
| 27 : fontResource(resource) | 40 : fontResource(resource) |
| 28 , delay(IncrementLoadEventDelayCount::create(document)) | 41 , delay(IncrementLoadEventDelayCount::create(document)) |
| 29 { | 42 { |
| 30 } | 43 } |
| 31 }; | 44 }; |
| 32 | 45 |
| 33 FontLoader::FontLoader(CSSFontSelector* fontSelector, Document* document) | 46 FontLoader::FontLoader(CSSFontSelector* fontSelector, Document* document) |
| 34 : m_beginLoadingTimer(this, &FontLoader::beginLoadTimerFired) | 47 : m_beginLoadingTimer(this, &FontLoader::beginLoadTimerFired) |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 { | 84 { |
| 72 ASSERT(m_document); | 85 ASSERT(m_document); |
| 73 | 86 |
| 74 FontsToLoadVector fontsToBeginLoading; | 87 FontsToLoadVector fontsToBeginLoading; |
| 75 fontsToBeginLoading.swap(m_fontsToBeginLoading); | 88 fontsToBeginLoading.swap(m_fontsToBeginLoading); |
| 76 for (const auto& fontToLoad : fontsToBeginLoading) { | 89 for (const auto& fontToLoad : fontsToBeginLoading) { |
| 77 if (m_document->frame()) | 90 if (m_document->frame()) |
| 78 fontToLoad->fontResource->beginLoadIfNeeded(m_document->fetcher()); | 91 fontToLoad->fontResource->beginLoadIfNeeded(m_document->fetcher()); |
| 79 else | 92 else |
| 80 fontToLoad->fontResource->error(Resource::LoadError); | 93 fontToLoad->fontResource->error(Resource::LoadError); |
| 94 fontToLoad->dispose(); |
| 81 } | 95 } |
| 82 | 96 |
| 83 // When the local fontsToBeginLoading vector goes out of scope it will | 97 // When the local fontsToBeginLoading vector goes out of scope it will |
| 84 // decrement the request counts on the ResourceFetcher for all the fonts | 98 // decrement the request counts on the ResourceFetcher for all the fonts |
| 85 // that were just loaded. | 99 // that were just loaded. |
| 86 } | 100 } |
| 87 | 101 |
| 88 void FontLoader::fontFaceInvalidated() | 102 void FontLoader::fontFaceInvalidated() |
| 89 { | 103 { |
| 90 if (m_fontSelector) | 104 if (m_fontSelector) |
| (...skipping 21 matching lines...) Expand all Loading... |
| 112 | 126 |
| 113 m_beginLoadingTimer.stop(); | 127 m_beginLoadingTimer.stop(); |
| 114 clearPendingFonts(); | 128 clearPendingFonts(); |
| 115 m_document = nullptr; | 129 m_document = nullptr; |
| 116 m_fontSelector = nullptr; | 130 m_fontSelector = nullptr; |
| 117 } | 131 } |
| 118 #endif | 132 #endif |
| 119 | 133 |
| 120 void FontLoader::clearPendingFonts() | 134 void FontLoader::clearPendingFonts() |
| 121 { | 135 { |
| 122 for (const auto& fontToLoad : m_fontsToBeginLoading) | 136 for (const auto& fontToLoad : m_fontsToBeginLoading) { |
| 123 fontToLoad->fontResource->didUnscheduleLoad(); | 137 fontToLoad->fontResource->didUnscheduleLoad(); |
| 138 fontToLoad->dispose(); |
| 139 } |
| 124 m_fontsToBeginLoading.clear(); | 140 m_fontsToBeginLoading.clear(); |
| 125 } | 141 } |
| 126 | 142 |
| 127 DEFINE_TRACE(FontLoader) | 143 DEFINE_TRACE(FontLoader) |
| 128 { | 144 { |
| 145 visitor->trace(m_fontsToBeginLoading); |
| 129 visitor->trace(m_document); | 146 visitor->trace(m_document); |
| 130 visitor->trace(m_fontSelector); | 147 visitor->trace(m_fontSelector); |
| 131 } | 148 } |
| 132 | 149 |
| 133 } // namespace blink | 150 } // namespace blink |
| OLD | NEW |