Diff
Modified: branches/safari-613-branch/LayoutTests/ChangeLog (293079 => 293080)
--- branches/safari-613-branch/LayoutTests/ChangeLog 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/LayoutTests/ChangeLog 2022-04-20 05:39:13 UTC (rev 293080)
@@ -1,5 +1,73 @@
2022-04-19 Alan Coon <[email protected]>
+ Cherry-pick r292274. rdar://problem/80544133
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ Source/WebCore:
+
+ This patch simply calls setNeedsRecalcStyleInAllFrames on every Page when we receive a
+ kCTFontManagerRegisteredFontsChangedNotification.
+
+ FontCache::invalidateAllFontCaches() can't do this directly because it's in platform/ and
+ therefore isn't allowed to know what Pages are. Instead, this patch takes a process-global
+ callback and calls that instead. This callback is set at initialization time.
+
+ Test: fast/text/install-font-style-recalc.html
+
+ * page/Page.cpp:
+ (WebCore::m_contentSecurityPolicyModeForExtension):
+ (WebCore::Page::firstTimeInitialization):
+ * page/Page.h:
+ * platform/graphics/FontCache.cpp:
+ (WebCore::Function<void):
+ (WebCore::FontCache::registerFontCacheInvalidationCallback):
+ (WebCore::FontCache::invalidateAllFontCaches):
+ * platform/graphics/FontCache.h:
+
+ Tools:
+
+ Make TestRunner::dumpResourceLoadStatistics() clear any currently-recorded statistics.
+ This avoids the problem where spurious layouts during the time when the page has been created but
+ before the test has begun record irrelevant statistics.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::beginTesting):
+ (WTR::InjectedBundle::clearResourceLoadStatistics):
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::dumpResourceLoadStatistics):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * fast/text/install-font-style-recalc-expected.txt: Added.
+ * fast/text/install-font-style-recalc.html: Added.
+ * platform/ios-wk2/TestExpectations:
+ * platform/mac-wk2/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292274 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-04-02 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ * TestExpectations:
+ * fast/text/install-font-style-recalc-expected.txt: Added.
+ * fast/text/install-font-style-recalc.html: Added.
+ * platform/ios-wk2/TestExpectations:
+ * platform/mac-wk2/TestExpectations:
+
+2022-04-19 Alan Coon <[email protected]>
+
Cherry-pick r292079. rdar://problem/88512506
Don't mutate children during RenderGrid::computeIntrinsicLogicalWidths unless we're about to re-layout.
Modified: branches/safari-613-branch/LayoutTests/TestExpectations (293079 => 293080)
--- branches/safari-613-branch/LayoutTests/TestExpectations 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/LayoutTests/TestExpectations 2022-04-20 05:39:13 UTC (rev 293080)
@@ -5206,3 +5206,6 @@
security/contentSecurityPolicy/plugins-types-blocks-youtube-plugin-replacement-without-mime-type.html [ Skip ]
security/contentSecurityPolicy/plugins-types-blocks-youtube-plugin-replacement.html [ Skip ]
userscripts/user-script-plugin-document.html [ Skip ]
+
+# Only some ports automatically relayout if a font is installed while the page is open
+fast/text/install-font-style-recalc.html [ Failure ]
Added: branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc-expected.txt (0 => 293080)
--- branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc-expected.txt (rev 0)
+++ branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc-expected.txt 2022-04-20 05:39:13 UTC (rev 293080)
@@ -0,0 +1,11 @@
+This test makes sure that installing a font causes a style recalc. The test only runs in DumpRenderTree/WebKitTestRunner. It passes if the text above is rendered as black boxes (aka in Ahem).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS target.offsetWidth became 200
+PASS The font was used.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+rrrr
Added: branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc.html (0 => 293080)
--- branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc.html (rev 0)
+++ branches/safari-613-branch/LayoutTests/fast/text/install-font-style-recalc.html 2022-04-20 05:39:13 UTC (rev 293080)
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<span id="target" style="font: 50px 'Helvetica2';">rrrr</span>
+<script>
+description("This test makes sure that installing a font causes a style recalc. The test only runs in DumpRenderTree/WebKitTestRunner. It passes if the text above is rendered as black boxes (aka in Ahem).");
+window.jsTestIsAsync = true;
+let target = document.getElementById("target");
+target.offsetWidth; // Force a font lookup
+if (window.testRunner)
+ testRunner.installFakeHelvetica("Helvetica2-400");
+shouldBecomeEqual("target.offsetWidth", "200", function() {
+ testPassed("The font was used.");
+ finishJSTest();
+});
+</script>
+</body>
+</html>
Modified: branches/safari-613-branch/LayoutTests/platform/ios-wk2/TestExpectations (293079 => 293080)
--- branches/safari-613-branch/LayoutTests/platform/ios-wk2/TestExpectations 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/LayoutTests/platform/ios-wk2/TestExpectations 2022-04-20 05:39:13 UTC (rev 293080)
@@ -2211,3 +2211,5 @@
# See webkit.org/b/233498 for context on this pointerevents tests
imported/w3c/web-platform-tests/pointerevents [ Skip ]
pointerevents/mouse [ Failure ]
+
+fast/text/install-font-style-recalc.html [ Pass ]
Modified: branches/safari-613-branch/LayoutTests/platform/mac-wk2/TestExpectations (293079 => 293080)
--- branches/safari-613-branch/LayoutTests/platform/mac-wk2/TestExpectations 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/LayoutTests/platform/mac-wk2/TestExpectations 2022-04-20 05:39:13 UTC (rev 293080)
@@ -1675,3 +1675,5 @@
# rdar://86037417 WindowServer returned not alive with context:,unresponsive work processor(s)
[ Monterey+ ] http/tests/model/model-document.html [ Skip ]
+
+fast/text/install-font-style-recalc.html [ Pass ]
Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (293079 => 293080)
--- branches/safari-613-branch/Source/WebCore/ChangeLog 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog 2022-04-20 05:39:13 UTC (rev 293080)
@@ -1,5 +1,86 @@
2022-04-19 Alan Coon <[email protected]>
+ Cherry-pick r292274. rdar://problem/80544133
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ Source/WebCore:
+
+ This patch simply calls setNeedsRecalcStyleInAllFrames on every Page when we receive a
+ kCTFontManagerRegisteredFontsChangedNotification.
+
+ FontCache::invalidateAllFontCaches() can't do this directly because it's in platform/ and
+ therefore isn't allowed to know what Pages are. Instead, this patch takes a process-global
+ callback and calls that instead. This callback is set at initialization time.
+
+ Test: fast/text/install-font-style-recalc.html
+
+ * page/Page.cpp:
+ (WebCore::m_contentSecurityPolicyModeForExtension):
+ (WebCore::Page::firstTimeInitialization):
+ * page/Page.h:
+ * platform/graphics/FontCache.cpp:
+ (WebCore::Function<void):
+ (WebCore::FontCache::registerFontCacheInvalidationCallback):
+ (WebCore::FontCache::invalidateAllFontCaches):
+ * platform/graphics/FontCache.h:
+
+ Tools:
+
+ Make TestRunner::dumpResourceLoadStatistics() clear any currently-recorded statistics.
+ This avoids the problem where spurious layouts during the time when the page has been created but
+ before the test has begun record irrelevant statistics.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::beginTesting):
+ (WTR::InjectedBundle::clearResourceLoadStatistics):
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::dumpResourceLoadStatistics):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * fast/text/install-font-style-recalc-expected.txt: Added.
+ * fast/text/install-font-style-recalc.html: Added.
+ * platform/ios-wk2/TestExpectations:
+ * platform/mac-wk2/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292274 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-04-02 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ This patch simply calls setNeedsRecalcStyleInAllFrames on every Page when we receive a
+ kCTFontManagerRegisteredFontsChangedNotification.
+
+ FontCache::invalidateAllFontCaches() can't do this directly because it's in platform/ and
+ therefore isn't allowed to know what Pages are. Instead, this patch takes a process-global
+ callback and calls that instead. This callback is set at initialization time.
+
+ Test: fast/text/install-font-style-recalc.html
+
+ * page/Page.cpp:
+ (WebCore::m_contentSecurityPolicyModeForExtension):
+ (WebCore::Page::firstTimeInitialization):
+ * page/Page.h:
+ * platform/graphics/FontCache.cpp:
+ (WebCore::Function<void):
+ (WebCore::FontCache::registerFontCacheInvalidationCallback):
+ (WebCore::FontCache::invalidateAllFontCaches):
+ * platform/graphics/FontCache.h:
+
+2022-04-19 Alan Coon <[email protected]>
+
Cherry-pick r292079. rdar://problem/88512506
Don't mutate children during RenderGrid::computeIntrinsicLogicalWidths unless we're about to re-layout.
Modified: branches/safari-613-branch/Source/WebCore/page/Page.cpp (293079 => 293080)
--- branches/safari-613-branch/Source/WebCore/page/Page.cpp 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Source/WebCore/page/Page.cpp 2022-04-20 05:39:13 UTC (rev 293080)
@@ -349,10 +349,10 @@
m_userContentProvider->addPage(*this);
m_visitedLinkStore->addPage(*this);
- static bool addedListener;
- if (!addedListener) {
- platformStrategies()->loaderStrategy()->addOnlineStateChangeListener(&networkStateChanged);
- addedListener = true;
+ static bool firstTimeInitializationRan = false;
+ if (!firstTimeInitializationRan) {
+ firstTimeInitialization();
+ firstTimeInitializationRan = true;
}
ASSERT(!allPages().contains(this));
@@ -426,6 +426,17 @@
m_visitedLinkStore->removePage(*this);
}
+void Page::firstTimeInitialization()
+{
+ platformStrategies()->loaderStrategy()->addOnlineStateChangeListener(&networkStateChanged);
+
+ FontCache::registerFontCacheInvalidationCallback([] {
+ forEachPage([](auto& page) {
+ page.setNeedsRecalcStyleInAllFrames();
+ });
+ });
+}
+
void Page::clearPreviousItemFromAllPages(HistoryItem* item)
{
for (auto* page : allPages()) {
Modified: branches/safari-613-branch/Source/WebCore/page/Page.h (293079 => 293080)
--- branches/safari-613-branch/Source/WebCore/page/Page.h 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Source/WebCore/page/Page.h 2022-04-20 05:39:13 UTC (rev 293080)
@@ -939,6 +939,8 @@
};
void logNavigation(const Navigation&);
+ static void firstTimeInitialization();
+
WEBCORE_EXPORT void initGroup();
void setIsInWindowInternal(bool);
Modified: branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.cpp (293079 => 293080)
--- branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.cpp 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.cpp 2022-04-20 05:39:13 UTC (rev 293080)
@@ -489,6 +489,17 @@
purgeInactiveFontData();
}
+static Function<void()>& fontCacheInvalidationCallback()
+{
+ static NeverDestroyed<Function<void()>> callback;
+ return callback.get();
+}
+
+void FontCache::registerFontCacheInvalidationCallback(Function<void()>&& callback)
+{
+ fontCacheInvalidationCallback() = WTFMove(callback);
+}
+
void FontCache::invalidateAllFontCaches()
{
ASSERT(isMainThread());
@@ -495,6 +506,9 @@
// FIXME: Invalidate FontCaches in workers too.
FontCache::forCurrentThread().invalidate();
+
+ if (fontCacheInvalidationCallback())
+ fontCacheInvalidationCallback()();
}
#if !PLATFORM(COCOA)
Modified: branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.h (293079 => 293080)
--- branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.h 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Source/WebCore/platform/graphics/FontCache.h 2022-04-20 05:39:13 UTC (rev 293080)
@@ -322,6 +322,7 @@
unsigned short generation() const { return m_generation; }
WEBCORE_EXPORT void invalidate();
+ static void registerFontCacheInvalidationCallback(Function<void()>&&);
WEBCORE_EXPORT static void invalidateAllFontCaches();
WEBCORE_EXPORT size_t fontCount();
Modified: branches/safari-613-branch/Tools/ChangeLog (293079 => 293080)
--- branches/safari-613-branch/Tools/ChangeLog 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Tools/ChangeLog 2022-04-20 05:39:13 UTC (rev 293080)
@@ -1,5 +1,78 @@
2022-04-19 Alan Coon <[email protected]>
+ Cherry-pick r292274. rdar://problem/80544133
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ Source/WebCore:
+
+ This patch simply calls setNeedsRecalcStyleInAllFrames on every Page when we receive a
+ kCTFontManagerRegisteredFontsChangedNotification.
+
+ FontCache::invalidateAllFontCaches() can't do this directly because it's in platform/ and
+ therefore isn't allowed to know what Pages are. Instead, this patch takes a process-global
+ callback and calls that instead. This callback is set at initialization time.
+
+ Test: fast/text/install-font-style-recalc.html
+
+ * page/Page.cpp:
+ (WebCore::m_contentSecurityPolicyModeForExtension):
+ (WebCore::Page::firstTimeInitialization):
+ * page/Page.h:
+ * platform/graphics/FontCache.cpp:
+ (WebCore::Function<void):
+ (WebCore::FontCache::registerFontCacheInvalidationCallback):
+ (WebCore::FontCache::invalidateAllFontCaches):
+ * platform/graphics/FontCache.h:
+
+ Tools:
+
+ Make TestRunner::dumpResourceLoadStatistics() clear any currently-recorded statistics.
+ This avoids the problem where spurious layouts during the time when the page has been created but
+ before the test has begun record irrelevant statistics.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::beginTesting):
+ (WTR::InjectedBundle::clearResourceLoadStatistics):
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::dumpResourceLoadStatistics):
+
+ LayoutTests:
+
+ * TestExpectations:
+ * fast/text/install-font-style-recalc-expected.txt: Added.
+ * fast/text/install-font-style-recalc.html: Added.
+ * platform/ios-wk2/TestExpectations:
+ * platform/mac-wk2/TestExpectations:
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292274 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-04-02 Myles C. Maxfield <[email protected]>
+
+ [Cocoa] Automatically relayout the page when new fonts are installed
+ https://bugs.webkit.org/show_bug.cgi?id=238483
+ <rdar://problem/80544133>
+
+ Reviewed by Chris Dumez.
+
+ Make TestRunner::dumpResourceLoadStatistics() clear any currently-recorded statistics.
+ This avoids the problem where spurious layouts during the time when the page has been created but
+ before the test has begun record irrelevant statistics.
+
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+ (WTR::InjectedBundle::beginTesting):
+ (WTR::InjectedBundle::clearResourceLoadStatistics):
+ * WebKitTestRunner/InjectedBundle/InjectedBundle.h:
+ * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+ (WTR::TestRunner::dumpResourceLoadStatistics):
+
+2022-04-19 Alan Coon <[email protected]>
+
Cherry-pick r292680. rdar://problem/91323230
The Youtube plugin replacement should only work for actual Youtube URLs
Modified: branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp (293079 => 293080)
--- branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp 2022-04-20 05:39:13 UTC (rev 293080)
@@ -543,7 +543,7 @@
WKBundleClearAllDatabases(m_bundle.get());
WKBundlePageClearApplicationCache(page()->page());
WKBundleResetOriginAccessAllowLists(m_bundle.get());
- WKBundleClearResourceLoadStatistics(m_bundle.get());
+ clearResourceLoadStatistics();
// [WK2] REGRESSION(r128623): It made layout tests extremely slow
// https://bugs.webkit.org/show_bug.cgi?id=96862
@@ -576,6 +576,11 @@
m_state = Idle;
}
+void InjectedBundle::clearResourceLoadStatistics()
+{
+ WKBundleClearResourceLoadStatistics(m_bundle.get());
+}
+
void InjectedBundle::dumpBackForwardListsForAllPages(StringBuilder& stringBuilder)
{
size_t size = m_pages.size();
Modified: branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h (293079 => 293080)
--- branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h 2022-04-20 05:39:13 UTC (rev 293080)
@@ -148,6 +148,8 @@
void increaseUserScriptInjectedCount() { ++m_userScriptInjectedCount; }
size_t userScriptInjectedCount() const { return m_userScriptInjectedCount; }
+ void clearResourceLoadStatistics();
+
private:
InjectedBundle() = default;
~InjectedBundle();
Modified: branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp (293079 => 293080)
--- branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2022-04-20 05:39:06 UTC (rev 293079)
+++ branches/safari-613-branch/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp 2022-04-20 05:39:13 UTC (rev 293080)
@@ -1333,6 +1333,7 @@
void TestRunner::dumpResourceLoadStatistics()
{
+ InjectedBundle::singleton().clearResourceLoadStatistics();
postSynchronousPageMessage("dumpResourceLoadStatistics");
}