Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 88d77c06c9590b9b2eacde147a4fcbcb13e7b7f7
https://github.com/WebKit/WebKit/commit/88d77c06c9590b9b2eacde147a4fcbcb13e7b7f7
Author: Brady Eidson <[email protected]>
Date: 2026-10-14 (Wed, 14 Oct 2026)
Changed paths:
M Source/WebKit/Headers.cmake
M Source/WebKit/PlatformCocoa.cmake
M Source/WebKit/Shared/API/Cocoa/WebKit.h
M Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.h
M Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.mm
M Source/WebKit/Shared/API/Cocoa/_WKHitTestResultInternal.h
M Source/WebKit/Shared/NavigationActionData.h
M Source/WebKit/Shared/NavigationActionData.serialization.in
M Source/WebKit/Shared/NodeHitTestResult.h
M Source/WebKit/Shared/NodeHitTestResult.serialization.in
M Source/WebKit/SourcesCocoa.txt
M Source/WebKit/UIProcess/API/APIHitTestResult.cpp
M Source/WebKit/UIProcess/API/APIHitTestResult.h
M Source/WebKit/UIProcess/API/APINavigation.h
M Source/WebKit/UIProcess/API/APINavigationAction.h
A Source/WebKit/UIProcess/API/Cocoa/WKHitTestResult.h
A Source/WebKit/UIProcess/API/Cocoa/WKHitTestResult.mm
A Source/WebKit/UIProcess/API/Cocoa/WKHitTestResultInternal.h
M Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.h
M Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
M Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h
M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Tools/TestWebKitAPI/Helpers/cocoa/WKWebView+Extras.swift
M Tools/TestWebKitAPI/PlatformCocoa.cmake
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
M
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/DecidePolicyForNavigationAction.mm
M Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation-1.mm
A Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebViewHitTestTests.swift
Log Message:
-----------
Add basic hit testing API to WKWebView
rdar://185821740
https://bugs.webkit.org/show_bug.cgi?id=326830
Reviewed by Richard Robinson.
The following SPIs exist:
- `_WKHitTestResult`
- WKWebView `_hitTestResultAtPoint:` methods
- `WKNavigationAction._hitTestResult`
These should all be API.
As for `WKHitTestResult`, let's not dump literally every property into API at
once.
The hit dom node's `WKJSHandle` is by far the most valuable.
And to support the case of a link click resulting in a navigation action, info
about the link
is next most important.
Tests:
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/DecidePolicyForNavigationAction.mm
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation-1.mm
Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebViewHitTestTests.swift
* Source/WebKit/Headers.cmake:
* Source/WebKit/PlatformCocoa.cmake:
* Source/WebKit/Shared/API/Cocoa/WebKit.h:
* Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.h:
* Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.mm:
(-[_WKHitTestResult absoluteImageURL]):
(-[_WKHitTestResult absolutePDFURL]):
(-[_WKHitTestResult absoluteMediaURL]):
(-[_WKHitTestResult absoluteModelURL]):
(-[_WKHitTestResult dealloc]): Deleted.
(URLFromString): Deleted.
(-[_WKHitTestResult absoluteLinkURL]): Deleted.
(-[_WKHitTestResult linkLabel]): Deleted.
(-[_WKHitTestResult linkTitle]): Deleted.
(-[_WKHitTestResult copyWithZone:]): Deleted.
(-[_WKHitTestResult _apiObject]): Deleted.
* Source/WebKit/Shared/API/Cocoa/_WKHitTestResultInternal.h:
* Source/WebKit/Shared/NavigationActionData.h:
* Source/WebKit/Shared/NavigationActionData.serialization.in:
* Source/WebKit/Shared/NodeHitTestResult.h:
* Source/WebKit/Shared/NodeHitTestResult.serialization.in:
* Source/WebKit/SourcesCocoa.txt:
* Source/WebKit/UIProcess/API/APIHitTestResult.cpp:
(API::HitTestResult::create):
* Source/WebKit/UIProcess/API/APIHitTestResult.h:
(API::HitTestResult::HitTestResult):
* Source/WebKit/UIProcess/API/APINavigation.h:
(API::Navigation::setLastNavigationAction):
(API::Navigation::lastNavigationActionHitTestJSHandle const):
* Source/WebKit/UIProcess/API/APINavigationAction.h:
* Source/WebKit/UIProcess/API/Cocoa/WKHitTestResult.h: Added.
* Source/WebKit/UIProcess/API/Cocoa/WKHitTestResult.mm: Added.
(WebKit::URLFromHitTestResultString):
(-[WKHitTestResult dealloc]):
(-[WKHitTestResult domNodeHandle]):
(-[WKHitTestResult absoluteLinkURL]):
(-[WKHitTestResult linkTitle]):
(-[WKHitTestResult linkLabel]):
(-[WKHitTestResult copyWithZone:]):
(-[WKHitTestResult _apiObject]):
* Source/WebKit/UIProcess/API/Cocoa/WKHitTestResultInternal.h: Copied from
Source/WebKit/Shared/API/Cocoa/_WKHitTestResultInternal.h.
* Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.h:
* Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm:
(-[WKNavigationAction hitTestResult]):
(-[WKNavigationAction _hitTestResult]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(nsErrorFromHitTestAtPointError):
(-[WKWebView
hitTestAtPoint:inCoordinateSpaceOfFrame:inContentWorld:completionHandler:]):
(-[WKWebView
_hitTestAtPoint:inFrameCoordinateSpace:inContentWorld:completionHandler:]):
* Source/WebKit/UIProcess/API/Cocoa/WebKitSwiftOverlay.swift:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::takeHitTestJSHandle):
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::decidePolicyForNewWindowAction):
(WebKit::WebPageProxy::hitTestAtPoint):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::createWindow):
* Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::jsHandleInfoForHitTestResult):
(WebKit::WebFrameLoaderClient::navigationActionData const):
* Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.h:
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::didSameDocumentNavigationForFrameViaJS):
(WebKit::WebLocalFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::hitTestAtPoint):
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/DecidePolicyForNavigationAction.mm:
(runDecidePolicyForNavigationActionForHyperlinkThatRedirects):
(TEST(WebKit, DecidePolicyForNavigationActionHitTestResult)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/SiteIsolation-1.mm:
(TestWebKitAPI::TEST(SiteIsolation, HitTestResultAPI)):
* Tools/TestWebKitAPI/Tests/WebKit/WKWebView/WKWebViewHitTestTests.swift: Added.
(HitTestResultBox.result):
(makeServer):
(idOfElement(for:in:contentWorld:)):
(loadExampleAndWaitForIframe(in:navigationDelegate:)):
(expectIframeLinkResult(_:contentWorld:in:)):
(WKWebViewHitTestTests.apiShape):
(WKWebViewHitTestTests.defaultArgumentsHitTestTheMainFrameInThePageWorld(_:)):
(WKWebViewHitTestTests.explicitFrameAndContentWorld(_:)):
(WKWebViewHitTestTests.completionHandlerWithExplicitFrameAndContentWorld(_:)):
(WKWebViewHitTestTests.noNodeHitReturnsResultWithoutHandle):
(WKWebViewHitTestTests.frameFromAnotherWebViewThrowsInvalidFrameTarget):
(WKWebViewHitTestTests.closingWebViewThrowsWebViewInvalidated):
(WKWebViewHitTestTests.webContentProcessTerminationThrowsWebContentProcessTerminated):
Canonical link: https://commits.webkit.org/323719@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications