Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 09e9de9492291368b7300a9da5ee6d0d6d7bd6ca
https://github.com/WebKit/WebKit/commit/09e9de9492291368b7300a9da5ee6d0d6d7bd6ca
Author: Elijah Sawyers <[email protected]>
Date: 2026-09-09 (Wed, 09 Sep 2026)
Changed paths:
M Source/WebCore/contentextensions/ContentExtensionsBackend.cpp
M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
M
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestRule.h
M
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestRule.mm
M
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestTranslator.mm
M
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDeclarativeNetRequest.mm
Log Message:
-----------
DNR high priority static redirect rule not favored over low priority session
redirect rule
https://bugs.webkit.org/show_bug.cgi?id=313963
rdar://176176246
Reviewed by Kiara Rose and Timothy Hatcher.
This patch makes declarativeNetRequest redirect rules honor rule priority. An
extension's static, session, and dynamic rules are compiled into one content
rule
list ordered by priority, but processContentRuleListsForLoad recorded every
matching
redirect and the apply step then applied each in turn, overwriting the request
URL
each time, so the last and lowest priority redirect won. Now only the first,
highest
priority, matching redirect is recorded, so it is the one that gets applied,
mirroring
the existing guard on block actions.
Recording only the first matching redirect also changes how a priority tie is
resolved. Two redirects of equal priority previously resolved to the
last-declared
rule, matching other browsers; taking the first matching redirect would instead
favor
the first-declared rule. To preserve that behavior, equal-priority redirect
rules are
now sorted with the later-declared rule first, so the last-declared redirect
still
wins the tie. Each rule records its declaration order for this comparison, and
currentDeclarativeNetRequestRuleTranslatorVersion is bumped so previously
compiled
rule lists recompile with the new ordering.
Test:
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDeclarativeNetRequest.mm
* Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:
(WebCore::ContentExtensions::ContentExtensionsBackend::processContentRuleListsForLoad
const):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
*
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestRule.h:
*
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestRule.mm:
(-[_WKWebExtensionDeclarativeNetRequestRule compare:]):
*
Source/WebKit/UIProcess/Extensions/Cocoa/_WKWebExtensionDeclarativeNetRequestTranslator.mm:
(+[_WKWebExtensionDeclarativeNetRequestTranslator
translateRules:errorStrings:]):
*
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebExtensionAPIDeclarativeNetRequest.mm:
(TestWebKitAPI::TEST(WKWebExtensionAPIDeclarativeNetRequest,
HighestPriorityRedirectWinsRegardlessOfDeclarationOrder)):
(TestWebKitAPI::TEST(WKWebExtensionAPIDeclarativeNetRequest,
HigherPriorityNoOpRedirectSuppressesLowerPriorityRedirect)):
(TestWebKitAPI::TEST(WKWebExtensionAPIDeclarativeNetRequest,
LowerPriorityRedirectDoesNotComposeOntoWinner)):
(TestWebKitAPI::TEST(WKWebExtensionAPIDeclarativeNetRequest,
LastDeclaredRedirectWinsAmongEqualPriority)):
Canonical link: https://commits.webkit.org/320739@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications