[webkit-changes] [WebKit/WebKit] b5d3f9: Web Inspector doesn't show nested workers

Devin Rousso noreply at github.com
Thu Jun 6 22:48:13 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b5d3f9b6724bf506145bf2233e392479be0a95fa
      https://github.com/WebKit/WebKit/commit/b5d3f9b6724bf506145bf2233e392479be0a95fa
  Author: Devin Rousso <hi at devinrousso.com>
  Date:   2024-06-06 (Thu, 06 Jun 2024)

  Changed paths:
    A LayoutTests/inspector/worker/console-basic-subworker-expected.txt
    A LayoutTests/inspector/worker/console-basic-subworker.html
    A LayoutTests/inspector/worker/debugger-pause-subworker-expected.txt
    A LayoutTests/inspector/worker/debugger-pause-subworker.html
    A LayoutTests/inspector/worker/resources-in-subworker-expected.txt
    A LayoutTests/inspector/worker/resources-in-subworker.html
    A LayoutTests/inspector/worker/resources/subworker-manager.js
    M LayoutTests/inspector/worker/resources/worker-utilities.js
    A LayoutTests/inspector/worker/runtime-basic-subworker-expected.txt
    A LayoutTests/inspector/worker/runtime-basic-subworker.html
    M LayoutTests/platform/mac-site-isolation/TestExpectations
    M Source/JavaScriptCore/inspector/protocol/Worker.json
    M Source/WebCore/Modules/fetch/FetchLoader.cpp
    M Source/WebCore/Modules/fetch/FetchLoader.h
    M Source/WebCore/Modules/notifications/NotificationResourcesLoader.cpp
    M Source/WebCore/Modules/notifications/NotificationResourcesLoader.h
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/bindings/js/WorkerModuleScriptLoader.cpp
    M Source/WebCore/bindings/js/WorkerModuleScriptLoader.h
    M Source/WebCore/fileapi/FileReaderLoader.cpp
    M Source/WebCore/fileapi/FileReaderLoader.h
    M Source/WebCore/inspector/InspectorController.cpp
    M Source/WebCore/inspector/InspectorInstrumentation.cpp
    M Source/WebCore/inspector/InspectorInstrumentation.h
    M Source/WebCore/inspector/WorkerInspectorController.cpp
    M Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp
    M Source/WebCore/inspector/agents/InspectorWorkerAgent.cpp
    M Source/WebCore/inspector/agents/InspectorWorkerAgent.h
    A Source/WebCore/inspector/agents/page/PageWorkerAgent.cpp
    A Source/WebCore/inspector/agents/page/PageWorkerAgent.h
    A Source/WebCore/inspector/agents/worker/WorkerWorkerAgent.cpp
    A Source/WebCore/inspector/agents/worker/WorkerWorkerAgent.h
    M Source/WebCore/loader/DocumentThreadableLoader.cpp
    M Source/WebCore/loader/ThreadableLoaderClient.h
    M Source/WebCore/loader/ThreadableLoaderClientWrapper.h
    M Source/WebCore/loader/WorkerThreadableLoader.cpp
    M Source/WebCore/loader/WorkerThreadableLoader.h
    M Source/WebCore/page/EventSource.cpp
    M Source/WebCore/page/EventSource.h
    M Source/WebCore/workers/Worker.cpp
    M Source/WebCore/workers/Worker.h
    M Source/WebCore/workers/WorkerFontLoadRequest.cpp
    M Source/WebCore/workers/WorkerFontLoadRequest.h
    M Source/WebCore/workers/WorkerGlobalScope.cpp
    M Source/WebCore/workers/WorkerScriptLoader.cpp
    M Source/WebCore/workers/WorkerScriptLoader.h
    M Source/WebCore/workers/WorkerScriptLoaderClient.h
    M Source/WebCore/workers/service/ServiceWorkerJob.cpp
    M Source/WebCore/workers/service/ServiceWorkerJob.h
    M Source/WebCore/workers/shared/SharedWorkerScriptLoader.cpp
    M Source/WebCore/workers/shared/SharedWorkerScriptLoader.h
    M Source/WebCore/xml/XMLHttpRequest.cpp
    M Source/WebCore/xml/XMLHttpRequest.h
    M Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js
    M Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js
    M Source/WebInspectorUI/UserInterface/Models/Script.js
    M Source/WebInspectorUI/UserInterface/Views/QuickConsole.js
    M Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js

  Log Message:
  -----------
  Web Inspector doesn't show nested workers
https://bugs.webkit.org/show_bug.cgi?id=255402
<rdar://problem/108322385>

Reviewed by Alexey Proskuryakov.

This allows for sub-`Worker` to appear in Web Inspector in the same way as the parent `Worker`.

* Source/JavaScriptCore/inspector/protocol/Worker.json:
* Source/WebCore/inspector/InspectorController.cpp:
(WebCore::InspectorController::createLazyAgents):
* Source/WebCore/inspector/WorkerInspectorController.cpp:
(WebCore::WorkerInspectorController::createLazyAgents):
* Source/WebCore/inspector/agents/InspectorWorkerAgent.h:
* Source/WebCore/inspector/agents/InspectorWorkerAgent.cpp:
(WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
(WebCore::InspectorWorkerAgent::enable):
(WebCore::InspectorWorkerAgent::connectToAllWorkerInspectorProxiesForPage): Deleted.
* Source/WebCore/inspector/agents/page/PageWorkerAgent.h: Added.
* Source/WebCore/inspector/agents/page/PageWorkerAgent.cpp: Added.
(WebCore::PageWorkerAgent::PageWorkerAgent):
(WebCore::PageWorkerAgent::connectToAllWorkerInspectorProxies):
* Source/WebCore/inspector/agents/worker/WorkerWorkerAgent.h: Added.
* Source/WebCore/inspector/agents/worker/WorkerWorkerAgent.cpp: Added.
(WebCore::WorkerWorkerAgent::WorkerWorkerAgent):
(WebCore::WorkerWorkerAgent::connectToAllWorkerInspectorProxies):
Add support for the `Worker` inspector protocol domain inside `"worker"` inspector targets.

* Source/WebCore/bindings/js/WorkerModuleScriptLoader.h:
* Source/WebCore/bindings/js/WorkerModuleScriptLoader.cpp:
(WebCore::WorkerModuleScriptLoader::load):
(WebCore::WorkerModuleScriptLoader::notifyFinished):
* Source/WebCore/fileapi/FileReaderLoader.h:
* Source/WebCore/fileapi/FileReaderLoader.cpp:
(WebCore::FileReaderLoader::didReceiveResponse):
(WebCore::FileReaderLoader::didFinishLoading):
(WebCore::FileReaderLoader::didFail):
* Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:
(WebCore::InspectorThreadableLoaderClient::didReceiveResponse):
(WebCore::InspectorThreadableLoaderClient::didFinishLoading):
(WebCore::InspectorThreadableLoaderClient::didFail):
* Source/WebCore/loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::cancel):
(WebCore::DocumentThreadableLoader::didReceiveResponse):
(WebCore::DocumentThreadableLoader::didFinishLoading):
(WebCore::DocumentThreadableLoader::didFail):
(WebCore::DocumentThreadableLoader::preflightFailure):
(WebCore::DocumentThreadableLoader::logErrorAndFail):
* Source/WebCore/loader/ThreadableLoaderClient.h:
(WebCore::ThreadableLoaderClient::didReceiveResponse):
(WebCore::ThreadableLoaderClient::didFinishLoading):
(WebCore::ThreadableLoaderClient::didFail):
* Source/WebCore/loader/ThreadableLoaderClientWrapper.h:
(WebCore::ThreadableLoaderClientWrapper::didReceiveResponse):
(WebCore::ThreadableLoaderClientWrapper::didFinishLoading):
(WebCore::ThreadableLoaderClientWrapper::didFail):
(WebCore::ThreadableLoaderClientWrapper::didReceiveAuthenticationCancellation): Deleted.
* Source/WebCore/loader/WorkerThreadableLoader.h:
* Source/WebCore/loader/WorkerThreadableLoader.cpp:
(WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
* Source/WebCore/Modules/fetch/FetchLoader.h:
* Source/WebCore/Modules/fetch/FetchLoader.cpp:
(WebCore::FetchLoader::didReceiveResponse):
(WebCore::FetchLoader::didFinishLoading):
(WebCore::FetchLoader::didFail):
* Source/WebCore/Modules/notifications/NotificationResourcesLoader.h:
* Source/WebCore/Modules/notifications/NotificationResourcesLoader.cpp:
(WebCore::NotificationResourcesLoader::ResourceLoader::didReceiveResponse):
(WebCore::NotificationResourcesLoader::ResourceLoader::didFinishLoading):
(WebCore::NotificationResourcesLoader::ResourceLoader::didFail):
* Source/WebCore/page/EventSource.h:
* Source/WebCore/page/EventSource.cpp:
(WebCore::EventSource::didReceiveResponse):
(WebCore::EventSource::didFinishLoading):
(WebCore::EventSource::didFail):
* Source/WebCore/workers/Worker.h:
* Source/WebCore/workers/Worker.cpp:
(WebCore::Worker::didReceiveResponse):
(WebCore::Worker::notifyFinished):
* Source/WebCore/workers/WorkerFontLoadRequest.h:
* Source/WebCore/workers/WorkerFontLoadRequest.cpp:
(WebCore::WorkerFontLoadRequest::didReceiveResponse):
(WebCore::WorkerFontLoadRequest::didFinishLoading):
(WebCore::WorkerFontLoadRequest::didFail):
* Source/WebCore/workers/WorkerScriptLoader.h:
* Source/WebCore/workers/WorkerScriptLoader.cpp:
(WebCore::WorkerScriptLoader::didReceiveResponse):
(WebCore::WorkerScriptLoader::didFinishLoading):
(WebCore::WorkerScriptLoader::didFail):
(WebCore::WorkerScriptLoader::notifyError):
(WebCore::WorkerScriptLoader::notifyFinished):
* Source/WebCore/workers/WorkerScriptLoaderClient.h:
* Source/WebCore/workers/service/ServiceWorkerJob.h:
* Source/WebCore/workers/service/ServiceWorkerJob.cpp:
(WebCore::ServiceWorkerJob::didReceiveResponse):
(WebCore::ServiceWorkerJob::notifyFinished):
* Source/WebCore/workers/shared/SharedWorkerScriptLoader.h:
* Source/WebCore/workers/shared/SharedWorkerScriptLoader.cpp:
(WebCore::SharedWorkerScriptLoader::didReceiveResponse):
(WebCore::SharedWorkerScriptLoader::notifyFinished):
* Source/WebCore/xml/XMLHttpRequest.h:
* Source/WebCore/xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::didFail):
(WebCore::XMLHttpRequest::didFinishLoading):
(WebCore::XMLHttpRequest::didReceiveResponse):
Pass along the toplevel `ScriptExecutionContextIdentifier` so that clients can use that to get the toplevel context and do things with it (e.g. "notify the `Document` that this load has finished").
This is used by Web Inspector because `Worker` do not have an `InspectorNetworkAgent`, meaning that any `InspectorInstrumentation` that pipe through to it need to be done on the same thread as the `Document`.

* Source/WebCore/workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::importScripts):
Remove redundant `InspectorInstrumentation` call.

* Source/WebInspectorUI/UserInterface/Controllers/WorkerManager.js:
(WI.WorkerManager):
(WI.WorkerManager.prototype.workerCreated):
(WI.WorkerManager.prototype.workerTerminated):
(WI.WorkerManager.prototype.dispatchMessageFromWorker):
Keep a multimap of sub-`Worker` for each `Worker`.

* Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js:
(WI.DebuggerManager.prototype.scriptDidParse):
* Source/WebInspectorUI/UserInterface/Models/Script.js:
(WI.Script.prototype.couldBeMainResource): Added.
(WI.Script.prototype._resolveResource):
`InspectorInstrumentation::didReceiveScriptResponse` is not always called in time before `Network.responseReceived` due to the fact that the `Worker` was created on another thread (i.e. sub-`Worker`), the `WI.Script` was loaded from memory cache, or some other reason. As such, we cannot rely on `WI.Resource.Type.Script` being the only way to associate a `WI.Resource` with a `WI.Script`.  In the sub-`Worker` scenario, do a second pass to see if any `WI.Resource` with the same URL happen to have a script MIME type (even though they're marked as some other type) and associate with that.

* Source/WebInspectorUI/UserInterface/Views/QuickConsole.js:
(WI.QuickConsole):
(WI.QuickConsole.prototype.closed):
(WI.QuickConsole.prototype._populateActiveExecutionContextNavigationItemContextMenu):
(WI.QuickConsole.prototype._handleTargetAdded): Added.
Show sub-`Worker` underneath and indented from the parent `Worker`.
Also refresh the execution context picker when new targets (e.g. `Worker`) are added.

* Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js:
(WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
Only use the associated `WI.Resource` when showing a `WI.Script` if it's not the main resource. Otherwise, things like `WI.WorkerTreeElement` that use the `WI.Script` as the `representedObject` won't be found when searching for a `WI.TreeElement` matching the `representedObject`.

* Source/WebCore/inspector/InspectorInstrumentation.h:
* Source/WebCore/inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::instrumentingAgents):
(WebCore::InspectorInstrumentation::willSendRequest):
(WebCore::InspectorInstrumentation::didReceiveResourceResponse):
(WebCore::InspectorInstrumentation::didReceiveData):
(WebCore::InspectorInstrumentation::didFinishLoading):
(WebCore::InspectorInstrumentation::didFailLoading):
(WebCore::InspectorInstrumentation::didReceiveScriptResponse):
Drive-by: Mark instrumentation only used by `ServiceWorker` as such.

* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:

* LayoutTests/inspector/worker/resources/subworker-manager.js: Added.
* LayoutTests/inspector/worker/resources/worker-utilities.js:
(TestPage.registerInitializer.awaitTarget): Added.
* LayoutTests/inspector/worker/console-basic-subworker.html: Added.
* LayoutTests/inspector/worker/console-basic-subworker-expected.txt: Added.
* LayoutTests/inspector/worker/debugger-pause-subworker.html: Added.
* LayoutTests/inspector/worker/debugger-pause-subworker-expected.txt: Added.
* LayoutTests/inspector/worker/resources-in-subworker.html: Added.
* LayoutTests/inspector/worker/resources-in-subworker-expected.txt: Added.
* LayoutTests/inspector/worker/runtime-basic-subworker.html: Added.
* LayoutTests/inspector/worker/runtime-basic-subworker-expected.txt: Added.
* LayoutTests/platform/mac-site-isolation/TestExpectations:

Canonical link: https://commits.webkit.org/279793@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list