Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 780bd128913de133fa2bcadf4fdd2127be890bcb
      
https://github.com/WebKit/WebKit/commit/780bd128913de133fa2bcadf4fdd2127be890bcb
  Author: Wenson Hsieh <wenson_hs...@apple.com>
  Date:   2024-03-28 (Thu, 28 Mar 2024)

  Changed paths:
    A LayoutTests/fast/element-targeting/target-pseudo-elements-expected.html
    A LayoutTests/fast/element-targeting/target-pseudo-elements.html
    M Source/WebCore/Headers.cmake
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/dom/Element.h
    M Source/WebCore/dom/ElementRareData.cpp
    M Source/WebCore/dom/ElementRareData.h
    A Source/WebCore/dom/VisibilityAdjustment.h
    M Source/WebCore/page/ElementTargetingController.cpp
    M Source/WebCore/page/ElementTargetingTypes.h
    M Source/WebCore/style/StyleAdjuster.cpp
    M Source/WebCore/style/StyleAdjuster.h
    M Source/WebCore/style/StyleResolver.cpp
    M Source/WebCore/style/StyleTreeResolver.cpp
    M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
    M Source/WebKit/UIProcess/API/APITargetedElementInfo.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.h
    M Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.mm

  Log Message:
  -----------
  [Remote Inspection] Make it possible to target ::before/::after pseudo 
elements
https://bugs.webkit.org/show_bug.cgi?id=271791

Reviewed by Megan Gardner.

(...and also incorporates suggestions from Antti).

Add support for targeting `::before` and `::after` pseudo elements, for 
visibility adjustment. See
below for more details.

* LayoutTests/fast/element-targeting/target-pseudo-elements-expected.html: 
Added.
* LayoutTests/fast/element-targeting/target-pseudo-elements.html: Added.

Add a new layout test to exercise the change (targeting both `after` and 
`before` pseudo elements).

* Source/WebCore/Headers.cmake:

Add a new WebCore header that just contains the new `VisibilityAdjustment` enum 
values.

* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::visibilityAdjustment const):
(WebCore::Element::addVisibilityAdjustment):
(WebCore::Element::isVisibilityAdjustmentRoot const): Deleted.
(WebCore::Element::setIsVisibilityAdjustmentRoot): Deleted.

Refactor this code — instead of having a single boolean flag that indicates 
whether the element is
a visibility adjustment root, turn it into an OptionSet with up to 3 bits 
(subtree, `::before`
pseudo element and `::after` pseudo element).

* Source/WebCore/dom/Element.h:
* Source/WebCore/dom/ElementRareData.cpp:
* Source/WebCore/dom/ElementRareData.h:
(WebCore::ElementRareData::visibilityAdjustment const):
(WebCore::ElementRareData::addVisibilityAdjustment):
(WebCore::ElementRareData::isVisibilityAdjustmentRoot const): Deleted.
(WebCore::ElementRareData::setIsVisibilityAdjustmentRoot): Deleted.

See above for more details — replace the single `isVisibilityAdjustmentRoot` 
flag with a new
`OptionSet`.

* Source/WebCore/dom/VisibilityAdjustment.h: Copied from 
Source/WebCore/page/ElementTargetingTypes.h.
* Source/WebCore/page/ElementTargetingController.cpp:
(WebCore::selectorsForTarget):
(WebCore::targetedElementInfo):

Teach this to emit `::before` and `::after` selectors for pseudo elements.

(WebCore::isTargetCandidate):

Teach this helper function to always consider rendered `::before` and `::after` 
pseudo elements to
be candidates for target selection, since adjusting visibility for these 
elements is unlikely to
adversely affect "main content" on the page.

(WebCore::elementToAdjust):
(WebCore::adjustmentToApply):
(WebCore::adjustVisibilityIfNeeded):

Split some of this functionality into multiple helper methods, to make it 
easier to determine how
an element should be marked for visibility adjustment. In particular, for 
before and after pseudo
elements, we mark the pseudo host element with 
`VisibilityAdjustment::{Before|After}Pseudo`, and for
everything else, we mark the element subtree (i.e. the same as what we 
currently do).

(WebCore::ElementTargetingController::adjustVisibility):
(WebCore::ElementTargetingController::adjustVisibilityInRepeatedlyTargetedRegions):
* Source/WebCore/page/ElementTargetingTypes.h:
* Source/WebCore/style/StyleAdjuster.cpp:
(WebCore::Style::Adjuster::adjust const):
(WebCore::Style::Adjuster::adjustVisibilityForPseudoElement):

Honor `VisibilityAdjustment::{BeforePseudo|AfterPseudo}` on the host element, 
by marking the
corresponding pseudo element style with visibility adjustment.

* Source/WebCore/style/StyleAdjuster.h:
* Source/WebCore/style/StyleResolver.cpp:
(WebCore::Style::Resolver::styleForPseudoElement):
* Source/WebCore/style/StyleTreeResolver.cpp:
(WebCore::Style::TreeResolver::resolveStartingStyle const):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/API/APITargetedElementInfo.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKTargetedElementInfo.mm:
(-[_WKTargetedElementInfo isPseudoElement]):

Add a new SPI property to surface whether or not the targeted element is a 
pseudo-element to the
client.

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to