Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b29e92ba5f100cd7808852be5e206b2df4bba6ea
https://github.com/WebKit/WebKit/commit/b29e92ba5f100cd7808852be5e206b2df4bba6ea
Author: Wenson Hsieh <[email protected]>
Date: 2024-03-21 (Thu, 21 Mar 2024)
Changed paths:
M Source/WebCore/page/ElementTargeting.cpp
M Source/WebCore/page/text-extraction/TextExtraction.cpp
M Source/WebCore/page/text-extraction/TextExtraction.h
M Tools/TestWebKitAPI/SourcesCocoa.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebKitCocoa/ElementTargetingTests.mm
A Tools/TestWebKitAPI/Tests/WebKitCocoa/element-targeting-1.html
Log Message:
-----------
Implement an initial heuristic to find targeted elements for remote inspection
https://bugs.webkit.org/show_bug.cgi?id=271344
Reviewed by Abrar Rahman Protyasha.
Implement an initial, basic version of an element targeting heuristic in
`ElementTargeting.cpp`.
This heuristic performs a piercing hit-test for main frame content at the given
location, and
returns an array of `_WKTargetedElementInfo` results, with the frontmost
hit-tested element first.
Test: ElementTargeting.BasicElementTargeting
* Source/WebCore/page/ElementTargeting.cpp:
(WebCore::elementAndAncestorsAreOnlyChildren):
(WebCore::querySelectorMatchesOneElement):
(WebCore::childIndexByType):
(WebCore::computeIDSelector):
(WebCore::computeClassSelector):
(WebCore::selectorForElementRecursive):
(WebCore::parentRelativeSelectorRecursive):
(WebCore::selectorsForTarget):
Implement an algorithm to find one or more suitable CSS selectors that uniquely
match the given
target element. This works by checking whether:
1. The ID (if present) is unique in the document.
2. The first several classes (if present) can be combined to form a selector
that uniquely matches
the target.
3. The tag name is unique in the document.
4. If none of the above are true, but we've found a unique selector for the
parent element
(recursively using this definition), then use an `nth-child` selector (or
`last`/`first-child`,
in the case where the element is the last or first of its type) to
establish a unique selector
for this element, relative to the parent.
(WebCore::computeOffsetEdges):
(WebCore::targetedElementInfo):
(WebCore::findTargetedElements):
Perform the piercing hit-test here, discarding some elements that are too large
or small.
* Source/WebCore/page/text-extraction/TextExtraction.cpp:
(WebCore::TextExtraction::extractRenderedText):
Refactor this helper method, so that we're able to perform rendered text
extraction for a specific
DOM element. Use this in the `ElementTargeting` heuristic, to compute the
`-renderedText` property
on the targeted element info.
* Source/WebCore/page/text-extraction/TextExtraction.h:
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ElementTargetingTests.mm: Added.
(-[WKWebView targetedElementInfoAt:]):
(TestWebKitAPI::TEST):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/element-targeting-1.html: Added.
Canonical link: https://commits.webkit.org/276508@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes