Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f5665ae82cc3854a847d27d097f30ab01b092137
https://github.com/WebKit/WebKit/commit/f5665ae82cc3854a847d27d097f30ab01b092137
Author: Per Arne Vollan <[email protected]>
Date: 2025-11-05 (Wed, 05 Nov 2025)
Changed paths:
A LayoutTests/contentfiltering/delay-willsendrequest-decision-expected.html
A LayoutTests/contentfiltering/delay-willsendrequest-decision.html
M Source/WebCore/loader/ContentFilter.cpp
M Source/WebCore/loader/ContentFilter.h
M Source/WebCore/platform/PlatformContentFilter.h
M Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h
M Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm
M Source/WebCore/platform/cocoa/ParentalControlsContentFilter.h
M Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm
M Source/WebCore/testing/MockContentFilter.cpp
M Source/WebCore/testing/MockContentFilter.h
M Source/WebCore/testing/MockContentFilterSettings.cpp
M Source/WebCore/testing/MockContentFilterSettings.h
M Source/WebCore/testing/MockContentFilterSettings.idl
M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
M Source/WebKit/NetworkProcess/NetworkResourceLoader.h
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
Log Message:
-----------
The ContentFilter method continueAfterWillSendRequest should use a completion
handler
https://bugs.webkit.org/show_bug.cgi?id=301189
rdar://151461666
Reviewed by Chris Dumez and Sihui Liu.
The ContentFilter method continueAfterWillSendRequest should use a completion
handler to avoid blocking
the main thread waiting for a decision that can take a significant amount of
time. In particular, it is
the NetworkExtensionContentFilter that can take a long time. For this reason,
it is currently doing the
work on a non-main thread, and we have a binary semaphore that we use to wait
synchronously for the
decision. Performing this work on the main thread can block other network
requests. To avoid blocking
the main thread waiting for a semaphore, we should instead use a completion
handler. This patch adds no
new threads, but is instead introducing a completion handler that is called
when the decision is ready.
Before this change, the responsiveness timer in the UI process would terminate
the Networking process
if the content filter was blocking the main thread for more than 6s. This issue
is resolved with this
patch.
Test: contentfiltering/delay-willsendrequest-decision.html
* Source/WebCore/loader/ContentFilter.cpp:
(WebCore::ContentFilter::continueAfterWillSendRequest):
(WebCore::ContentFilter::ContentFilterCallbackAggregator::~ContentFilterCallbackAggregator):
(WebCore::ContentFilter::ContentFilterCallbackAggregator::didReceivePlatformContentFilterDecision):
(WebCore::ContentFilter::ContentFilterCallbackAggregator::ContentFilterCallbackAggregator):
(WebCore::ContentFilter::anyContentFilterIsEnabled const):
* Source/WebCore/loader/ContentFilter.h:
(WebCore::ContentFilter::ContentFilterCallbackAggregator::create):
* Source/WebCore/platform/PlatformContentFilter.h:
(WebCore::PlatformContentFilter::isEnabled const):
* Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.h:
* Source/WebCore/platform/cocoa/NetworkExtensionContentFilter.mm:
(WebCore::NetworkExtensionContentFilter::willSendRequest):
* Source/WebCore/platform/cocoa/ParentalControlsContentFilter.h:
* Source/WebCore/platform/cocoa/ParentalControlsContentFilter.mm:
(WebCore::ParentalControlsContentFilter::willSendRequest):
* Source/WebCore/testing/MockContentFilter.cpp:
(WebCore::MockContentFilter::willSendRequest):
* Source/WebCore/testing/MockContentFilter.h:
* Source/WebCore/testing/MockContentFilterSettings.cpp:
(WebCore::MockContentFilterSettings::setWillSendRequestDecisionDelay):
* Source/WebCore/testing/MockContentFilterSettings.h:
(WebCore::MockContentFilterSettings::willSendRequestDecisionDelay const):
* Source/WebCore/testing/MockContentFilterSettings.idl:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::startContentFiltering):
(WebKit::NetworkResourceLoader::startWithServiceWorker):
* Source/WebKit/NetworkProcess/NetworkResourceLoader.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
Canonical link: https://commits.webkit.org/302627@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications