Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c4a7ebcc295f78d1ab83f219b92bda34163da68b
https://github.com/WebKit/WebKit/commit/c4a7ebcc295f78d1ab83f219b92bda34163da68b
Author: Devin Rousso <[email protected]>
Date: 2026-09-10 (Thu, 10 Sep 2026)
Changed paths:
M
LayoutTests/http/tests/inspector/network/setEmulatedConditions-expected.txt
M LayoutTests/http/tests/inspector/network/setEmulatedConditions.html
M
LayoutTests/http/tests/site-isolation/inspector/network/set-emulated-conditions-and-resource-caching-disabled-expected.txt
M
LayoutTests/http/tests/site-isolation/inspector/network/set-emulated-conditions-and-resource-caching-disabled.html
M LayoutTests/platform/mac-wk2/TestExpectations
M Source/JavaScriptCore/inspector/protocol/Network.json
M Source/WTF/wtf/PlatformEnableCocoa.h
M Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h
M Source/WebCore/inspector/InspectorBackendClient.h
M Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
M Source/WebCore/inspector/agents/InspectorNetworkAgent.h
M Source/WebCore/inspector/agents/page/PageNetworkAgent.cpp
M Source/WebCore/inspector/agents/page/PageNetworkAgent.h
M Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.cpp
M Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h
M Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js
M Source/WebKit/NetworkProcess/NetworkDataTask.cpp
M Source/WebKit/NetworkProcess/NetworkDataTask.h
M Source/WebKit/NetworkProcess/NetworkLoad.cpp
M Source/WebKit/NetworkProcess/NetworkLoad.h
M Source/WebKit/NetworkProcess/NetworkProcess.cpp
M Source/WebKit/NetworkProcess/NetworkProcess.h
M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
M Source/WebKit/NetworkProcess/NetworkSession.cpp
M Source/WebKit/NetworkProcess/NetworkSession.h
M Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
M Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm
M Source/WebKit/UIProcess/Inspector/Agents/ProxyingNetworkAgent.cpp
M Source/WebKit/UIProcess/Inspector/Agents/ProxyingNetworkAgent.h
M Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.cpp
M Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.h
M Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.messages.in
M Source/WebKit/UIProcess/Inspector/WebInspectorUIProxy.cpp
M Source/WebKit/UIProcess/Inspector/WebInspectorUIProxy.h
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
M Source/WebKit/WebProcess/Inspector/WebInspectorBackend.cpp
M Source/WebKit/WebProcess/Inspector/WebInspectorBackend.h
M Source/WebKit/WebProcess/Inspector/WebInspectorBackendClient.cpp
M Source/WebKit/WebProcess/Inspector/WebInspectorBackendClient.h
Log Message:
-----------
Web Inspector: Support HTTP throttling or some Network Conditioner for the
inspected web page
https://bugs.webkit.org/show_bug.cgi?id=287737
<rdar://problem/144892477>
Reviewed by Alex Christensen.
Replace the legacy `-[NSURLSession _bytesPerSecondLimit:]` SPI with a custom
throttling system.
`bandwidth` causes data to be buffered and released at the given rate when
received, emulating a slower transfer rate.
`latency` delays the start of the request, emulating a round-trip time before
the request is sent.
As such, this also fixes <https://webkit.org/b/254607> Web Inspector: Support
throttling latency
* Source/WebKit/NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::emulatedConditions const): Added.
(WebKit::NetworkSession::bytesPerSecondLimit const): Deleted.
* Source/WebKit/NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::setEmulatedConditions):
* Source/WebKit/NetworkProcess/NetworkDataTask.h:
(WebKit::NetworkDataTaskClient::emulatedConditionsDidChange): Added.
(WebKit::NetworkDataTask::setEmulatedConditions): Deleted.
* Source/WebKit/NetworkProcess/NetworkDataTask.cpp:
(WebKit::NetworkDataTask::create):
(WebKit::NetworkDataTask::notifyEmulatedConditionsChanged): Added.
* Source/WebKit/NetworkProcess/NetworkLoad.h:
(WebKit::NetworkLoad::NetworkLoad): Deleted.
* Source/WebKit/NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::ConditionEmulator::tryCreate): Added.
(WebKit::NetworkLoad::ConditionEmulator::ConditionEmulator): Added.
(WebKit::NetworkLoad::ConditionEmulator::~ConditionEmulator): Added.
(WebKit::NetworkLoad::ConditionEmulator::isWaitingForLatency): Added.
(WebKit::NetworkLoad::ConditionEmulator::didReceiveData): Added.
(WebKit::NetworkLoad::ConditionEmulator::deferCompletion): Added.
(WebKit::NetworkLoad::ConditionEmulator::conditionsDidChange): Added.
(WebKit::NetworkLoad::ConditionEmulator::emulatedConditions): Added.
(WebKit::NetworkLoad::ConditionEmulator::updateBudget): Added.
(WebKit::NetworkLoad::ConditionEmulator::timerFired): Added.
(WebKit::NetworkLoad::start):
(WebKit::NetworkLoad::NetworkLoad): Added.
(WebKit::NetworkLoad::~NetworkLoad):
(WebKit::NetworkLoad::cancel):
(WebKit::NetworkLoad::didReceiveData):
(WebKit::NetworkLoad::didCompleteWithError):
(WebKit::NetworkLoad::emulatedConditionsDidChange): Added.
Use a `Timer` and finite state machine to initially and/or continually throttle
transferred data.
* Source/JavaScriptCore/inspector/protocol/Network.json:
* Source/WebCore/inspector/agents/InspectorNetworkAgent.h:
* Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:
(WebCore::InspectorNetworkAgent::disable):
(WebCore::InspectorNetworkAgent::setEmulatedConditions):
* Source/WebCore/inspector/agents/page/PageNetworkAgent.h:
* Source/WebCore/inspector/agents/page/PageNetworkAgent.cpp:
(WebCore::PageNetworkAgent::setEmulatedConditionsInternal):
* Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.h:
* Source/WebCore/inspector/agents/worker/WorkerNetworkAgent.cpp:
(WebCore::WorkerNetworkAgent::setEmulatedConditionsInternal):
* Source/WebKit/UIProcess/Inspector/Agents/ProxyingNetworkAgent.h:
* Source/WebKit/UIProcess/Inspector/Agents/ProxyingNetworkAgent.cpp:
(Inspector::ProxyingNetworkAgent::disable):
(Inspector::ProxyingNetworkAgent::setEmulatedConditions):
* Source/WebCore/inspector/InspectorBackendClient.h:
(WebCore::InspectorBackendClient::setEmulatedConditions):
* Source/WebKit/WebProcess/Inspector/WebInspectorBackend.h:
* Source/WebKit/WebProcess/Inspector/WebInspectorBackend.cpp:
(WebKit::WebInspectorBackend::setEmulatedConditions):
* Source/WebKit/WebProcess/Inspector/WebInspectorBackendClient.h:
* Source/WebKit/WebProcess/Inspector/WebInspectorBackendClient.cpp:
(WebKit::WebInspectorBackendClient::setEmulatedConditions):
* Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.messages.in:
* Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.h:
* Source/WebKit/UIProcess/Inspector/WebInspectorBackendProxy.cpp:
(WebKit::WebInspectorBackendProxy::setEmulatedConditions):
* Source/WebKit/UIProcess/Inspector/WebInspectorUIProxy.h:
* Source/WebKit/UIProcess/Inspector/WebInspectorUIProxy.cpp:
(WebKit::WebInspectorUIProxy::setEmulatedConditions):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::setEmulatedConditions):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::setEmulatedConditions):
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::setEmulatedConditions):
Add necessary piping of both `bandwidth` and `latency` from Web Inspector to
the NetworkProcess.
* Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js:
(WI.NetworkManager.prototype._applyEmulatedCondition):
Pass both `bandwidth` and `latency` from the selected emulated condition.
* Source/WTF/wtf/PlatformEnableCocoa.h:
Enable the feature flag.
* Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h:
* Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
* Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::setEmulatedConditions): Deleted.
Remove no longer used old SPI.
* LayoutTests/http/tests/inspector/network/setEmulatedConditions.html:
* LayoutTests/http/tests/inspector/network/setEmulatedConditions-expected.txt:
*
LayoutTests/http/tests/site-isolation/inspector/network/set-emulated-conditions-and-resource-caching-disabled.html:
*
LayoutTests/http/tests/site-isolation/inspector/network/set-emulated-conditions-and-resource-caching-disabled-expected.txt:
* LayoutTests/platform/mac-wk2/TestExpectations:
Canonical link: https://commits.webkit.org/320893@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications