Diff
Modified: trunk/Source/WebCore/ChangeLog (271741 => 271742)
--- trunk/Source/WebCore/ChangeLog 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/ChangeLog 2021-01-22 10:59:50 UTC (rev 271742)
@@ -1,3 +1,62 @@
+2021-01-22 Chris Lord <[email protected]>
+
+ Move FontGenericFamilies storage from SettingsBase to Settings::Values
+ https://bugs.webkit.org/show_bug.cgi?id=220801
+
+ Reviewed by Myles C. Maxfield.
+
+ Move FontGenericFamilies member from SettingsBase to Settings::Values
+ so that it can potentially be used within Workers. This will aid with
+ font usage off the main thread.
+
+ No new tests, no behavior change.
+
+ * Headers.cmake:
+ * Scripts/SettingsTemplates/Settings.cpp.erb:
+ * Scripts/SettingsTemplates/Settings.h.erb:
+ * css/CSSFontSelector.cpp:
+ (WebCore::resolveGenericFamily):
+ (WebCore::CSSFontSelector::fallbackFontAt):
+ * page/SettingsBase.cpp:
+ (WebCore::SettingsBase::SettingsBase):
+ (WebCore::SettingsBase::standardFontFamily const):
+ (WebCore::SettingsBase::setStandardFontFamily):
+ (WebCore::SettingsBase::fixedFontFamily const):
+ (WebCore::SettingsBase::setFixedFontFamily):
+ (WebCore::SettingsBase::serifFontFamily const):
+ (WebCore::SettingsBase::setSerifFontFamily):
+ (WebCore::SettingsBase::sansSerifFontFamily const):
+ (WebCore::SettingsBase::setSansSerifFontFamily):
+ (WebCore::SettingsBase::cursiveFontFamily const):
+ (WebCore::SettingsBase::setCursiveFontFamily):
+ (WebCore::SettingsBase::fantasyFontFamily const):
+ (WebCore::SettingsBase::setFantasyFontFamily):
+ (WebCore::SettingsBase::pictographFontFamily const):
+ (WebCore::SettingsBase::setPictographFontFamily):
+ * page/SettingsBase.h:
+ * platform/graphics/FontGenericFamilies.cpp:
+ (WebCore::setGenericFontFamilyForScript):
+ (WebCore::genericFontFamilyForScript):
+ (WebCore::FontGenericFamilies::FontGenericFamilies):
+ (WebCore::FontGenericFamilies::isolatedCopy const):
+ (WebCore::FontGenericFamilies::standardFontFamily const):
+ (WebCore::FontGenericFamilies::fixedFontFamily const):
+ (WebCore::FontGenericFamilies::serifFontFamily const):
+ (WebCore::FontGenericFamilies::sansSerifFontFamily const):
+ (WebCore::FontGenericFamilies::cursiveFontFamily const):
+ (WebCore::FontGenericFamilies::fantasyFontFamily const):
+ (WebCore::FontGenericFamilies::pictographFontFamily const):
+ (WebCore::FontGenericFamilies::setStandardFontFamily):
+ (WebCore::FontGenericFamilies::setFixedFontFamily):
+ (WebCore::FontGenericFamilies::setSerifFontFamily):
+ (WebCore::FontGenericFamilies::setSansSerifFontFamily):
+ (WebCore::FontGenericFamilies::setCursiveFontFamily):
+ (WebCore::FontGenericFamilies::setFantasyFontFamily):
+ (WebCore::FontGenericFamilies::setPictographFontFamily):
+ * platform/graphics/FontGenericFamilies.h:
+ * style/StyleResolveForFontRaw.cpp:
+ (WebCore::Style::resolveForFontRaw):
+
2021-01-22 Youenn Fablet <[email protected]>
Validate ItemHandles when decoding them in GPUProcess
Modified: trunk/Source/WebCore/Headers.cmake (271741 => 271742)
--- trunk/Source/WebCore/Headers.cmake 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/Headers.cmake 2021-01-22 10:59:50 UTC (rev 271742)
@@ -1177,6 +1177,7 @@
platform/graphics/FontCascadeFonts.h
platform/graphics/FontDescription.h
platform/graphics/FontFamilySpecificationNull.h
+ platform/graphics/FontGenericFamilies.h
platform/graphics/FontMetrics.h
platform/graphics/FontPlatformData.h
platform/graphics/FontRanges.h
Modified: trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb (271741 => 271742)
--- trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb 2021-01-22 10:59:50 UTC (rev 271742)
@@ -68,6 +68,10 @@
: SettingsBase(page)
{
m_values.initialize();
+
+ m_page = nullptr; // Page is not yet fully initialized when constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call.
+ initializeDefaultFontFamilies();
+ m_page = page;
}
void Settings::Values::initialize()
@@ -106,6 +110,7 @@
<%- for @setting in @allSettingsSet.inspectorOverrideSettings do -%>
crossThreadCopy(<%= @setting.name %>InspectorOverride),
<%- end -%>
+ crossThreadCopy(fontGenericFamilies),
<%- for @condition in @allSettingsSet.conditions do -%>
<%- if @condition.nonBoolSettingsNeedingImplementation.length != 0 -%>
<%- if @condition.condition -%>
Modified: trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.h.erb (271741 => 271742)
--- trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.h.erb 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.h.erb 2021-01-22 10:59:50 UTC (rev 271742)
@@ -38,7 +38,7 @@
WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
public:
WEBCORE_EXPORT static Ref<Settings> create(Page*);
- WEBCORE_EXPORT ~Settings();
+ WEBCORE_EXPORT virtual ~Settings();
<%- for @condition in @allSettingsSet.conditions do -%>
<%- if @condition.condition -%>
@@ -68,6 +68,8 @@
void <%= @setting.setterFunctionName %>InspectorOverride(Optional<<%= @setting.parameterType %>> <%= @setting.name %>InspectorOverride) { m_values.<%= @setting.name %>InspectorOverride = <%= @setting.name %>InspectorOverride; }
<%- end -%>
<%- end -%>
+ FontGenericFamilies& fontGenericFamilies() final { return m_values.fontGenericFamilies; }
+ const FontGenericFamilies& fontGenericFamilies() const final { return m_values.fontGenericFamilies; }
struct Values {
void initialize();
@@ -77,6 +79,7 @@
Optional<<%= @setting.type %>> <%= @setting.name %>InspectorOverride;
<%- end -%>
+ FontGenericFamilies fontGenericFamilies;
<%- for @condition in @allSettingsSet.conditions do -%>
<%- if @condition.nonBoolSettingsNeedingImplementation.length != 0 -%>
<%- if @condition.condition -%>
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (271741 => 271742)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2021-01-22 10:59:50 UTC (rev 271742)
@@ -5112,6 +5112,7 @@
E446143C0CD689CC00FADA75 /* JSHTMLSourceElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B423720CBFB6E000AF2ECE /* JSHTMLSourceElement.h */; };
E44614520CD68A3500FADA75 /* RenderVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B41E340CBFB60900AF2ECE /* RenderVideo.h */; settings = {ATTRIBUTES = (Private, ); }; };
E44B4BB4141650D7002B1D8B /* SelectorChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = E44B4BB2141650D7002B1D8B /* SelectorChecker.h */; };
+ E42EE3A717576E5500EEE8CF /* FontGenericFamilies.h in Headers */ = {isa = PBXBuildFile; fileRef = E44EE3A717576E5500EEE8CF /* FontGenericFamilies.h */; settings = {ATTRIBUTES = (Private, ); }; };
E44FA1851BCA6B5A0091B6EF /* ComposedTreeIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E44FA1841BCA6B5A0091B6EF /* ComposedTreeIterator.h */; };
E451C6312394027900993190 /* LayoutUnits.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F73918C2106CEDD006AF262 /* LayoutUnits.h */; settings = {ATTRIBUTES = (Private, ); }; };
E451C6322394031A00993190 /* MarginTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE7AA2621C37B6300296DCD /* MarginTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -32133,6 +32134,7 @@
1C6626111C6E7CA600AB527C /* FontFace.h in Headers */,
1C24EEA51C729CE40080F8FC /* FontFaceSet.h in Headers */,
1C12AC2B1EE778AE0079E0A0 /* FontFamilySpecificationCoreText.h in Headers */,
+ E42EE3A717576E5500EEE8CF /* FontGenericFamilies.h in Headers */,
BC4A532F256057CD0028C592 /* FontLoadTimingOverride.h in Headers */,
0845680812B90DA600960A9F /* FontMetrics.h in Headers */,
B5320D6B122A24E9002D1440 /* FontPlatformData.h in Headers */,
Modified: trunk/Source/WebCore/css/CSSFontSelector.cpp (271741 => 271742)
--- trunk/Source/WebCore/css/CSSFontSelector.cpp 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/css/CSSFontSelector.cpp 2021-01-22 10:59:50 UTC (rev 271742)
@@ -277,19 +277,19 @@
UScriptCode script = fontDescription.script();
if (familyName == serifFamily)
- return settings.serifFontFamily(script);
+ return AtomString(settings.serifFontFamily(script));
if (familyName == sansSerifFamily)
- return settings.sansSerifFontFamily(script);
+ return AtomString(settings.sansSerifFontFamily(script));
if (familyName == cursiveFamily)
- return settings.cursiveFontFamily(script);
+ return AtomString(settings.cursiveFontFamily(script));
if (familyName == fantasyFamily)
- return settings.fantasyFontFamily(script);
+ return AtomString(settings.fantasyFontFamily(script));
if (familyName == monospaceFamily)
- return settings.fixedFontFamily(script);
+ return AtomString(settings.fixedFontFamily(script));
if (familyName == pictographFamily)
- return settings.pictographFontFamily(script);
+ return AtomString(settings.pictographFontFamily(script));
if (familyName == standardFamily)
- return settings.standardFontFamily(script);
+ return AtomString(settings.standardFontFamily(script));
return WTF::nullopt;
}
@@ -429,8 +429,8 @@
auto& pictographFontFamily = m_document->settings().pictographFontFamily();
auto font = FontCache::singleton().fontForFamily(fontDescription, pictographFontFamily);
if (RuntimeEnabledFeatures::sharedFeatures().webAPIStatisticsEnabled())
- ResourceLoadObserver::shared().logFontLoad(*m_document, pictographFontFamily.string(), !!font);
-
+ ResourceLoadObserver::shared().logFontLoad(*m_document, pictographFontFamily, !!font);
+
return font;
}
Modified: trunk/Source/WebCore/page/SettingsBase.cpp (271741 => 271742)
--- trunk/Source/WebCore/page/SettingsBase.cpp 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/page/SettingsBase.cpp 2021-01-22 10:59:50 UTC (rev 271742)
@@ -35,7 +35,6 @@
#include "Database.h"
#include "Document.h"
#include "FontCascade.h"
-#include "FontGenericFamilies.h"
#include "Frame.h"
#include "FrameTree.h"
#include "FrameView.h"
@@ -62,16 +61,10 @@
}
SettingsBase::SettingsBase(Page* page)
- : m_page(nullptr)
- , m_fontGenericFamilies(makeUnique<FontGenericFamilies>())
+ : m_page(page)
, m_minimumDOMTimerInterval(DOMTimer::defaultMinimumInterval())
, m_setImageLoadingSettingsTimer(*this, &SettingsBase::imageLoadingSettingsTimerFired)
{
- // A Frame may not have been created yet, so we initialize the AtomString
- // hash before trying to use it.
- AtomString::init();
- initializeDefaultFontFamilies();
- m_page = page; // Page is not yet fully initialized when constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call.
}
SettingsBase::~SettingsBase() = default;
@@ -92,86 +85,86 @@
#endif
-const AtomString& SettingsBase::standardFontFamily(UScriptCode script) const
+const String& SettingsBase::standardFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->standardFontFamily(script);
+ return fontGenericFamilies().standardFontFamily(script);
}
-void SettingsBase::setStandardFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setStandardFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setStandardFontFamily(family, script);
+ bool changes = fontGenericFamilies().setStandardFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::fixedFontFamily(UScriptCode script) const
+const String& SettingsBase::fixedFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->fixedFontFamily(script);
+ return fontGenericFamilies().fixedFontFamily(script);
}
-void SettingsBase::setFixedFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setFixedFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setFixedFontFamily(family, script);
+ bool changes = fontGenericFamilies().setFixedFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::serifFontFamily(UScriptCode script) const
+const String& SettingsBase::serifFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->serifFontFamily(script);
+ return fontGenericFamilies().serifFontFamily(script);
}
-void SettingsBase::setSerifFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setSerifFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setSerifFontFamily(family, script);
+ bool changes = fontGenericFamilies().setSerifFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::sansSerifFontFamily(UScriptCode script) const
+const String& SettingsBase::sansSerifFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->sansSerifFontFamily(script);
+ return fontGenericFamilies().sansSerifFontFamily(script);
}
-void SettingsBase::setSansSerifFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setSansSerifFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setSansSerifFontFamily(family, script);
+ bool changes = fontGenericFamilies().setSansSerifFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::cursiveFontFamily(UScriptCode script) const
+const String& SettingsBase::cursiveFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->cursiveFontFamily(script);
+ return fontGenericFamilies().cursiveFontFamily(script);
}
-void SettingsBase::setCursiveFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setCursiveFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setCursiveFontFamily(family, script);
+ bool changes = fontGenericFamilies().setCursiveFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::fantasyFontFamily(UScriptCode script) const
+const String& SettingsBase::fantasyFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->fantasyFontFamily(script);
+ return fontGenericFamilies().fantasyFontFamily(script);
}
-void SettingsBase::setFantasyFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setFantasyFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setFantasyFontFamily(family, script);
+ bool changes = fontGenericFamilies().setFantasyFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
-const AtomString& SettingsBase::pictographFontFamily(UScriptCode script) const
+const String& SettingsBase::pictographFontFamily(UScriptCode script) const
{
- return m_fontGenericFamilies->pictographFontFamily(script);
+ return fontGenericFamilies().pictographFontFamily(script);
}
-void SettingsBase::setPictographFontFamily(const AtomString& family, UScriptCode script)
+void SettingsBase::setPictographFontFamily(const String& family, UScriptCode script)
{
- bool changes = m_fontGenericFamilies->setPictographFontFamily(family, script);
+ bool changes = fontGenericFamilies().setPictographFontFamily(family, script);
if (changes)
invalidateAfterGenericFamilyChange(m_page);
}
Modified: trunk/Source/WebCore/page/SettingsBase.h (271741 => 271742)
--- trunk/Source/WebCore/page/SettingsBase.h 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/page/SettingsBase.h 2021-01-22 10:59:50 UTC (rev 271742)
@@ -30,6 +30,7 @@
#include "ContentType.h"
#include "EditableLinkBehavior.h"
#include "EditingBehaviorType.h"
+#include "FontGenericFamilies.h"
#include "FontLoadTimingOverride.h"
#include "FontRenderingMode.h"
#include "ForcedAccessibilityValue.h"
@@ -49,7 +50,6 @@
#include <wtf/Seconds.h>
#include <wtf/URL.h>
#include <wtf/Vector.h>
-#include <wtf/text/AtomString.h>
#if ENABLE(DATA_DETECTION)
#include "DataDetectorType.h"
@@ -57,14 +57,11 @@
namespace WebCore {
-class FontGenericFamilies;
class Page;
class SettingsBase {
WTF_MAKE_NONCOPYABLE(SettingsBase); WTF_MAKE_FAST_ALLOCATED;
public:
- ~SettingsBase();
-
void pageDestroyed() { m_page = nullptr; }
#if ENABLE(MEDIA_SOURCE)
@@ -74,27 +71,30 @@
static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
static const unsigned defaultMaximumRenderTreeDepth = 512;
- WEBCORE_EXPORT void setStandardFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ virtual FontGenericFamilies& fontGenericFamilies() = 0;
+ virtual const FontGenericFamilies& fontGenericFamilies() const = 0;
- WEBCORE_EXPORT void setFixedFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setStandardFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
- WEBCORE_EXPORT void setSerifFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setFixedFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
- WEBCORE_EXPORT void setSansSerifFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setSerifFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
- WEBCORE_EXPORT void setCursiveFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setSansSerifFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
- WEBCORE_EXPORT void setFantasyFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setCursiveFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
- WEBCORE_EXPORT void setPictographFontFamily(const AtomString&, UScriptCode = USCRIPT_COMMON);
- WEBCORE_EXPORT const AtomString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setFantasyFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ WEBCORE_EXPORT void setPictographFontFamily(const String&, UScriptCode = USCRIPT_COMMON);
+ WEBCORE_EXPORT const String& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
+
WEBCORE_EXPORT void setMinimumDOMTimerInterval(Seconds); // Initialized to DOMTimer::defaultMinimumInterval().
Seconds minimumDOMTimerInterval() const { return m_minimumDOMTimerInterval; }
@@ -110,6 +110,7 @@
protected:
explicit SettingsBase(Page*);
+ virtual ~SettingsBase();
void initializeDefaultFontFamilies();
@@ -140,7 +141,6 @@
Page* m_page;
- const std::unique_ptr<FontGenericFamilies> m_fontGenericFamilies;
Seconds m_minimumDOMTimerInterval;
Timer m_setImageLoadingSettingsTimer;
Modified: trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp (271741 => 271742)
--- trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp 2021-01-22 10:59:50 UTC (rev 271742)
@@ -30,11 +30,11 @@
namespace WebCore {
-static bool setGenericFontFamilyForScript(ScriptFontFamilyMap& fontMap, const AtomString& family, UScriptCode script)
+static bool setGenericFontFamilyForScript(ScriptFontFamilyMap& fontMap, const String& family, UScriptCode script)
{
if (family.isEmpty())
return fontMap.remove(static_cast<int>(script));
- auto& familyInMap = fontMap.add(static_cast<int>(script), AtomString { }).iterator->value;
+ auto& familyInMap = fontMap.add(static_cast<int>(script), String { }).iterator->value;
if (familyInMap == family)
return false;
familyInMap = family;
@@ -64,7 +64,7 @@
cachedUserPrefersSimplified() = computeUserPrefersSimplified();
}
-static const AtomString& genericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script)
+static const String& genericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script)
{
ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script));
if (it != fontMap.end())
@@ -83,76 +83,99 @@
FontGenericFamilies::FontGenericFamilies()
{
- addLanguageChangeObserver(this, &languageChanged);
- languageChanged(nullptr);
+ static std::once_flag once;
+ std::call_once(once, [&] {
+ addLanguageChangeObserver(&once, &languageChanged);
+ languageChanged(nullptr);
+ });
}
-const AtomString& FontGenericFamilies::standardFontFamily(UScriptCode script) const
+FontGenericFamilies FontGenericFamilies::isolatedCopy() const
{
+ FontGenericFamilies copy;
+ for (auto &keyValue : m_standardFontFamilyMap)
+ copy.m_standardFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_serifFontFamilyMap)
+ copy.m_serifFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_fixedFontFamilyMap)
+ copy.m_fixedFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_sansSerifFontFamilyMap)
+ copy.m_sansSerifFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_cursiveFontFamilyMap)
+ copy.m_cursiveFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_fantasyFontFamilyMap)
+ copy.m_fantasyFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ for (auto &keyValue : m_pictographFontFamilyMap)
+ copy.m_pictographFontFamilyMap.add(keyValue.key, keyValue.value.isolatedCopy());
+ return copy;
+}
+
+const String& FontGenericFamilies::standardFontFamily(UScriptCode script) const
+{
return genericFontFamilyForScript(m_standardFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::fixedFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::fixedFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_fixedFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::serifFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::serifFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_serifFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::sansSerifFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::sansSerifFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_sansSerifFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::cursiveFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::cursiveFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_cursiveFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::fantasyFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::fantasyFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_fantasyFontFamilyMap, script);
}
-const AtomString& FontGenericFamilies::pictographFontFamily(UScriptCode script) const
+const String& FontGenericFamilies::pictographFontFamily(UScriptCode script) const
{
return genericFontFamilyForScript(m_pictographFontFamilyMap, script);
}
-bool FontGenericFamilies::setStandardFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setStandardFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_standardFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setFixedFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setFixedFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_fixedFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setSerifFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setSerifFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_serifFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setSansSerifFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setSansSerifFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_sansSerifFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setCursiveFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setCursiveFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_cursiveFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setFantasyFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setFantasyFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_fantasyFontFamilyMap, family, script);
}
-bool FontGenericFamilies::setPictographFontFamily(const AtomString& family, UScriptCode script)
+bool FontGenericFamilies::setPictographFontFamily(const String& family, UScriptCode script)
{
return setGenericFontFamilyForScript(m_pictographFontFamilyMap, family, script);
}
Modified: trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h (271741 => 271742)
--- trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h 2021-01-22 10:59:50 UTC (rev 271742)
@@ -42,7 +42,7 @@
static bool isDeletedValue(int value) { return value == -3; }
};
-typedef HashMap<int, AtomString, DefaultHash<int>, UScriptCodeHashTraits> ScriptFontFamilyMap;
+typedef HashMap<int, String, DefaultHash<int>, UScriptCodeHashTraits> ScriptFontFamilyMap;
class FontGenericFamilies {
WTF_MAKE_FAST_ALLOCATED;
@@ -49,22 +49,24 @@
public:
FontGenericFamilies();
- const AtomString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
- const AtomString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ FontGenericFamilies isolatedCopy() const;
- bool setStandardFontFamily(const AtomString&, UScriptCode);
- bool setFixedFontFamily(const AtomString&, UScriptCode);
- bool setSerifFontFamily(const AtomString&, UScriptCode);
- bool setSansSerifFontFamily(const AtomString&, UScriptCode);
- bool setCursiveFontFamily(const AtomString&, UScriptCode);
- bool setFantasyFontFamily(const AtomString&, UScriptCode);
- bool setPictographFontFamily(const AtomString&, UScriptCode);
+ const String& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ const String& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
+ bool setStandardFontFamily(const String&, UScriptCode);
+ bool setFixedFontFamily(const String&, UScriptCode);
+ bool setSerifFontFamily(const String&, UScriptCode);
+ bool setSansSerifFontFamily(const String&, UScriptCode);
+ bool setCursiveFontFamily(const String&, UScriptCode);
+ bool setFantasyFontFamily(const String&, UScriptCode);
+ bool setPictographFontFamily(const String&, UScriptCode);
+
private:
ScriptFontFamilyMap m_standardFontFamilyMap;
ScriptFontFamilyMap m_serifFontFamilyMap;
Modified: trunk/Source/WebCore/style/StyleResolveForFontRaw.cpp (271741 => 271742)
--- trunk/Source/WebCore/style/StyleResolveForFontRaw.cpp 2021-01-22 09:34:10 UTC (rev 271741)
+++ trunk/Source/WebCore/style/StyleResolveForFontRaw.cpp 2021-01-22 10:59:50 UTC (rev 271742)
@@ -74,7 +74,7 @@
switchOn(item, [&] (CSSValueID ident) {
isGenericFamily = ident != CSSValueWebkitBody;
family = isGenericFamily ? CSSPropertyParserHelpers::genericFontFamilyFromValueID(ident)
- : document.settings().standardFontFamily();
+ : AtomString(document.settings().standardFontFamily());
}, [&] (const String& familyString) {
family = familyString;
});