[webkit-changes] [WebKit/WebKit] 9b7b8d: [Remote Inspection] Add the ability to target elem...

Wenson Hsieh noreply at github.com
Wed May 22 21:51:32 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9b7b8ded8fa6f6aa85d72ec5f68bee3252c00a81
      https://github.com/WebKit/WebKit/commit/9b7b8ded8fa6f6aa85d72ec5f68bee3252c00a81
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2024-05-22 (Wed, 22 May 2024)

  Changed paths:
    M Source/WebCore/page/ElementTargetingController.cpp
    M Source/WebCore/page/ElementTargetingController.h
    M Source/WebCore/page/ElementTargetingTypes.h
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/API/APITargetedElementInfo.h
    M Source/WebKit/UIProcess/API/APITargetedElementRequest.cpp
    M Source/WebKit/UIProcess/API/APITargetedElementRequest.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.mm
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementRequest.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementRequest.mm
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/ElementTargetingTests.mm

  Log Message:
  -----------
  [Remote Inspection] Add the ability to target elements based on selector information
https://bugs.webkit.org/show_bug.cgi?id=274532

Reviewed by Aditya Keerthi.

Add the ability to target elements based on compound selectors (i.e. selectors including all shadow
hosts). Additionally, expose a new property on targeted element info to indicate whether or not the
element is inside of an adjustment subtree.

See below for more details.

Test: ElementTargeting.RequestElementsFromSelectors

* Source/WebCore/page/ElementTargetingController.cpp:
(WebCore::targetedElementInfo):
(WebCore::ElementTargetingController::findTargets):
(WebCore::ElementTargetingController::findNodes):

Add `WebCore::TargetedElementSelectors` as a new type of targeted element request data, alongside
a point in root view coordinates and a search string. Add a new `findNodes()` implementation for
this targeted element selectors list. Build on top of the `findElementFromSelectors` method (see
below for more details).

(WebCore::ElementTargetingController::extractTargets):

Drive-by adjustment: only target elements if they're non-empty. This can otherwise happen in the
case where the list of candidates was derived from ascending the DOM when performing a text search.

(WebCore::ElementTargetingController::adjustVisibilityInRepeatedlyTargetedRegions):
(WebCore::resolveSelectorToQuery):

Pull this out into a separate static helper function, so we can use it from both methods below.

(WebCore::ElementTargetingController::applyVisibilityAdjustmentFromSelectors):

Pull logic out of this method, and into `findElementFromSelectors`. Also, remove the document
argument (which was only ever the main document), and instead just retrieve the main document from
the `m_page` (or exit early if it's null).

(WebCore::ElementTargetingController::findElementFromSelectors):

Factor out logic for mapping a list of compound selectors (including all shadow hosts) into a
separate private method, so that it can be reused in multiple places in this class.

(WebCore::ElementTargetingController::mainDocument const):

Avoid some code duplication by adding a private helper method to return the main document, through
`m_page`.

(WebCore::ElementTargetingController::selectorBasedVisibilityAdjustmentTimerFired):
* Source/WebCore/page/ElementTargetingController.h:
* Source/WebCore/page/ElementTargetingTypes.h:
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:

Add the new IPC types.

* Source/WebKit/UIProcess/API/APITargetedElementInfo.h:
* Source/WebKit/UIProcess/API/APITargetedElementRequest.cpp:
(API::TargetedElementRequest::setSelectors):
(API::TargetedElementRequest::searchText const): Deleted.

Remove an unused getter for `-searchText`, along with support in the API object.

* Source/WebKit/UIProcess/API/APITargetedElementRequest.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.mm:
(-[_WKTargetedElementInfo isInVisibilityAdjustmentSubtree]):
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementRequest.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementRequest.mm:
(-[_WKTargetedElementRequest initWithSelectors:]):

Add a new initializer that takes a compound selector representing the element to target.

(-[_WKTargetedElementRequest searchText]): Deleted.
(-[_WKTargetedElementRequest point]): Deleted.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ElementTargetingTests.mm:
(-[WKWebView targetedElementInfoWithSelectors:]):
(TestWebKitAPI::TEST(ElementTargeting, RequestElementsFromSelectors)):

Add a new API test to exercise the change.

(TestWebKitAPI::TEST(ElementTargeting, AdjustVisibilityFromPseudoSelectors)):

Canonical link: https://commits.webkit.org/279178@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