[webkit-changes] [WebKit/WebKit] 0c0655: Implement event firing from the web process for we...

Brian Weinstein noreply at github.com
Tue Jan 23 23:39:25 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0c0655a175613f58168c7f30652e989cc0fe2736
      https://github.com/WebKit/WebKit/commit/0c0655a175613f58168c7f30652e989cc0fe2736
  Author: Brian Weinstein <bweinstein at apple.com>
  Date:   2024-01-23 (Tue, 23 Jan 2024)

  Changed paths:
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h
    M Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
    M Source/WebKit/NetworkProcess/NetworkResourceLoader.h
    M Source/WebKit/Shared/Extensions/WebExtensionFrameIdentifier.h
    M Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebRequestCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebRequestEventCocoa.mm
    M Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebRequestEvent.h
    M Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebRequestFilter.h
    M Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebRequestFilter.mm
    M Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIWebRequestEvent.idl
    M Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWebRequest.mm

  Log Message:
  -----------
  Implement event firing from the web process for webRequest events and add tests
https://bugs.webkit.org/show_bug.cgi?id=267963
rdar://114823223

Reviewed by Timothy Hatcher.

The tests exposed a few issues that were also fixed here:
1) The network process wasn't calling into WebPageProxy when running the tests because the
page didn't have a resource load delegate. To fix this, also call into the WebPageProxy when
the page has an extension controller.
2) There was a copy/paste-o in WebExtensionContext::resourceLoadDidPerformHTTPRedirection where
the wrong events were being sent.
3) When just a filter was being passed to webRequest.event.addListener, it was being treated as the extraInfoSpec because
we weren't being specific enough about the type.

This PR also changed _WKWebExtensionWebRequestFilter to deal with WebKit::ResourceLoadInfo instead of _WKResourceLoadInfo.

* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::NetworkResourceLoadParameters): Add a new pageHasExtensionController parameter.
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h:
* Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.serialization.in:
* Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::shouldSendResourceLoadMessages const): Check both pageHasResourceLoadClient and pageHasExtensionController.
(WebKit::NetworkResourceLoader::startNetworkLoad): Adopt shouldSendResourceLoadMessages.
(WebKit::NetworkResourceLoader::didReceiveResponse): Ditto.
(WebKit::NetworkResourceLoader::didFinishLoading): Ditto.
(WebKit::NetworkResourceLoader::didFailLoading): Ditto.
(WebKit::NetworkResourceLoader::didReceiveChallenge): Ditto.
(WebKit::NetworkResourceLoader::continueWillSendRequest): Ditto.
* Source/WebKit/NetworkProcess/NetworkResourceLoader.h:
* Source/WebKit/Shared/Extensions/WebExtensionFrameIdentifier.h:
(WebKit::toWebExtensionFrameIdentifier): Add a new flavor of this method.
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::resourceLoadDidPerformHTTPRedirection): Make sure we are calling the correct events here.
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebRequestCocoa.mm:
(WebKit::convertRequestBodyToWebExtensionFormat): Convert the request body to the format extensions expect.
(WebKit::webRequestDetailsForResourceLoad): Generate a dictionary of information about the resource load conforming to the webRequest spec.
(WebKit::convertHeaderFieldsToWebExtensionFormat): Convert the header fields to an array of dictionaries.
(WebKit::headersReceivedDetails): Convert the NSHTTPURLResponse information into a dictionary conforming to the webRequest spec.
(WebKit::WebExtensionContextProxy::resourceLoadDidSendRequest): Call the correct events.
(WebKit::WebExtensionContextProxy::resourceLoadDidPerformHTTPRedirection): Ditto.
(WebKit::WebExtensionContextProxy::resourceLoadDidReceiveChallenge): Ditto.
(WebKit::WebExtensionContextProxy::resourceLoadDidReceiveResponse): Ditto.
(WebKit::WebExtensionContextProxy::resourceLoadDidCompleteWithError): Ditto.
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWebRequestEventCocoa.mm:
(WebKit::WebExtensionAPIWebRequestEvent::invokeListenersWithArgument): Check the filter and invoke the correct listeners.
* Source/WebKit/WebProcess/Extensions/API/WebExtensionAPIWebRequestEvent.h:
* Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebRequestFilter.h:
* Source/WebKit/WebProcess/Extensions/Cocoa/_WKWebExtensionWebRequestFilter.mm:
(_WKWebExtensionWebRequestResourceTypeFromResourceLoadInfo): Updated to deal with ResourceLoadInfo::Type.
(_WKWebExtensionWebRequestResourceTypeFromWKResourceLoadInfo): Deleted.
* Source/WebKit/WebProcess/Extensions/Interfaces/WebExtensionAPIWebRequestEvent.idl: Make sure extraInfoSpec is an array of strings.
* Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::addParametersShared): Set pageHasExtensionController.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/WKWebExtensionAPIWebRequest.mm:
(TestWebKitAPI::TEST): Add tests for various parts of webRequest functionality.

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




More information about the webkit-changes mailing list