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

Reply via email to