Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: ed90582af3fc5871c4a6937b15adcd01980749bd
https://github.com/WebKit/WebKit/commit/ed90582af3fc5871c4a6937b15adcd01980749bd
Author: Cole Carley <[email protected]>
Date: 2026-10-07 (Wed, 07 Oct 2026)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.cpp.erb
M Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.h.erb
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/page/QuirkBehaviors.h
A Source/WebCore/page/QuirkMatchPattern.cpp
A Source/WebCore/page/QuirkMatchPattern.h
M Source/WebCore/page/QuirkTable.cpp
M Source/WebCore/page/QuirkTable.h
M Source/WebCore/page/Quirks.cpp
M Source/WebCore/page/QuirksData.h
A Source/WebCore/page/RuntimeQuirkTable.cpp
A Source/WebCore/page/RuntimeQuirkTable.h
R Source/WebCore/page/URLMatch.cpp
R Source/WebCore/page/URLMatch.h
M Tools/TestWebKitAPI/CMakeLists.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebCore/QuirkMatchPattern.cpp
M Tools/TestWebKitAPI/Tests/WebCore/Quirks.cpp
R Tools/TestWebKitAPI/Tests/WebCore/URLMatch.cpp
Log Message:
-----------
[Quirks] Replace URLMatch with a runtime-parsed match patterns style syntax
rdar://189242642
Reviewed by Brent Fulgham.
Replace the constexpr URLMatch DSL in the site-specific quirk table with
match pattern style syntax (e.g. "*://*.example.com/*"). This lets quirk
matches be represented as a string.
QuirkMatchPattern wraps UserContentURLPattern, and adds one extension: a
host ending in ".*" matches every public suffix ("*://*.amazon.*/*").
QuirkURLMatch and the URL refinements become new fields on Quirk: matches,
embeddedMatches, excludeMatches, queryContains, fragmentContains, environment.
The compiled table is converted once into a RuntimeQuirkTable. QuirksData
now stores RuntimeQuirkBehavior, which exposes parameters and conditions
directly as Strings and parsed patterns.
The compile time quirk table and it's helper classes will be removed in favor
of the RuntimeQuirkTable and RuntimeQuirkBehavior once we move to a datafile.
Tests: Tools/TestWebKitAPI/Tests/WebCore/QuirkMatchPattern.cpp
Tools/TestWebKitAPI/Tests/WebCore/Quirks.cpp
* Source/WebCore/Headers.cmake:
* Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.cpp.erb:
* Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.h.erb:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/page/QuirkBehaviors.h:
(WebCore::URLPatternList::URLPatternList):
(WebCore::URLPatternList::isEmpty const):
(WebCore::QuirkParameters::fromCookieNames):
(WebCore::QuirkBehaviorConditions::secondaryURLMatches):
(WebCore::QuirkBehavior::applyCondition const):
(WebCore::QuirkParameters::operator==): Deleted.
(WebCore::QuirkBehavior::secondaryURLConditionMatches const): Deleted.
* Source/WebCore/page/QuirkMatchPattern.cpp: Renamed from
Source/WebCore/page/URLMatch.cpp.
(WebCore::URLMatchContext::registrableDomain const):
(WebCore::URLMatchContext::domainWithoutPublicSuffix const):
(WebCore::evaluateURLEnvironment):
(WebCore::QuirkMatchPattern::QuirkMatchPattern):
(WebCore::QuirkMatchPattern::parse):
(WebCore::matchesPathAndQuery):
(WebCore::QuirkMatchPattern::matches const):
* Source/WebCore/page/QuirkMatchPattern.h: Added.
(WebCore::URLMatchContext::URLMatchContext):
(WebCore::QuirkMatchPattern::operator==):
(WebCore::anyPatternMatches):
* Source/WebCore/page/QuirkTable.cpp:
* Source/WebCore/page/QuirkTable.h:
(WebCore::QuirkURLMatch::QuirkURLMatch): Deleted.
(WebCore::QuirkURLMatch::embeddedDocument): Deleted.
(WebCore::QuirkURLMatch::embeddedDocumentInTopMatch): Deleted.
* Source/WebCore/page/Quirks.cpp:
(WebCore::Quirks::needsCustomUserAgentOverride):
(WebCore::Quirks::scriptsToEvaluateBeforeRunningScriptFromURL):
(WebCore::Quirks::clearLogoutSurvivingIdentityCookiesIfNeeded):
* Source/WebCore/page/QuirksData.h:
(WebCore::RuntimeQuirkBehavior::secondaryURLConditionMatches const):
(WebCore::QuirksData::behaviorsMatching const):
(WebCore::QuirksData::addBehavior):
(WebCore::QuirksData::behaviorsMatching): Deleted.
* Source/WebCore/page/RuntimeQuirkTable.cpp: Copied from
Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.h.erb.
(WebCore::RuntimeQuirk::appliesTo const):
(WebCore::RuntimeQuirk::apply const):
* Source/WebCore/page/RuntimeQuirkTable.h: Copied from
Source/WebCore/Scripts/QuirkBehaviorsTemplates/QuirksAccessors.h.erb.
* Source/WebCore/page/URLMatch.h: Removed.
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/QuirkMatchPattern.cpp: Added.
(TestWebKitAPI::parsePattern):
(TestWebKitAPI::matchesURL):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, ExactHostMatchesOnlyThatHost)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
SubdomainWildcardMatchesHostAndSubdomains)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
WildcardSchemeMatchesOnlyHTTPFamily)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
ExplicitSchemeMatchesOnlyThatScheme)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, PathIsAGlobOverThePathAndQuery)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, FragmentInPatternNeverMatches)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
AnyPublicSuffixMatchesRegistrableDomain)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
AnyPublicSuffixWithSubdomainWildcard)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, AnyPublicSuffixRespectsPath)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
AnyPublicSuffixDoesNotMatchIPAddresses)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, RejectsInvalidPatterns)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, KeepsItsSourceString)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
SubdomainWildcardUnderstandsMultiLabelPublicSuffixes)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, PortsDoNotAffectMatching)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, URLsWithoutAHostMatchNothing)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
PathComponentPrefixNeedsTwoPatterns)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest,
LastPathComponentNeedsFourPatterns)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, ContextDerivesValuesFromItsURL)):
(TestWebKitAPI::TEST(QuirkMatchPatternTest, ContextCachesDerivedValues)):
* Tools/TestWebKitAPI/Tests/WebCore/Quirks.cpp:
(TestWebKitAPI::patterns):
(TestWebKitAPI::matchesTopURL):
(TestWebKitAPI::matchesEmbeddedDocument):
(TestWebKitAPI::TEST_F(QuirksTest, TopURLMatchIgnoresTheDocumentURL)):
(TestWebKitAPI::TEST_F(QuirksTest,
EmbeddedDocumentMatchesTheDocumentURLNotTheTopURL)):
(TestWebKitAPI::TEST_F(QuirksTest,
EmbeddedDocumentInTopMatchRequiresBothURLsToMatch)):
(TestWebKitAPI::TEST_F(QuirksTest, EmbeddedMatchesNeverApplyToTheTopDocument)):
(TestWebKitAPI::TEST_F(QuirksTest, EveryCompiledPatternParses)):
(TestWebKitAPI::scriptsForScriptURL):
(TestWebKitAPI::TEST_F(QuirksTest,
OneQuirkCanCarryDifferentParametersForDifferentScriptURLs)):
(TestWebKitAPI::TEST_F(QuirksTest,
EveryMatchingRowContributesWhenSeveralSupplyTheSameBehavior)):
(TestWebKitAPI::TEST_F(QuirksTest,
IdenticalBehaviorsWithParametersAreRecordedOnce)):
(TestWebKitAPI::elementSelectorsFor):
(TestWebKitAPI::TEST_F(QuirksTest,
ASecondaryURLConditionIsRecordedOnTheBehavior)):
(TestWebKitAPI::TEST_F(QuirksTest,
LogoutCookieCleanupCarriesTheCookiesToDelete)):
(TestWebKitAPI::documentSelectorsFor):
* Tools/TestWebKitAPI/Tests/WebCore/URLMatch.cpp: Removed.
Canonical link: https://commits.webkit.org/323007@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications