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

Reply via email to