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

Reply via email to