Diff
Modified: trunk/LayoutTests/ChangeLog (281228 => 281229)
--- trunk/LayoutTests/ChangeLog 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/LayoutTests/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,3 +1,15 @@
+2021-08-19 Tim Nguyen <n...@apple.com>
+
+ Implement ::backdrop pseudo element
+ https://bugs.webkit.org/show_bug.cgi?id=227801
+
+ Reviewed by Antti Koivisto.
+
+ This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
+ Some imported blink tests now start passing, some still need proper top layer support.
+
+ * TestExpectations:
+
2021-08-19 Fujii Hironori <hironori.fu...@sony.com>
[WinCairo] Unreviewed test gardening
Modified: trunk/LayoutTests/TestExpectations (281228 => 281229)
--- trunk/LayoutTests/TestExpectations 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/LayoutTests/TestExpectations 2021-08-19 09:02:02 UTC (rev 281229)
@@ -2373,17 +2373,10 @@
imported/blink/fast/multicol/outlines-at-column-boundaries.html [ ImageOnlyFailure ]
fast/multicol/multicol-with-child-renderLayer-for-input.html [ ImageOnlyFailure ]
-# ::backdrop
-webkit.org/b/227801 imported/blink/dialog/backdrop-descendant-selector.html [ ImageOnlyFailure ]
-webkit.org/b/227801 imported/blink/dialog/backdrop-does-not-inherit.html [ ImageOnlyFailure ]
-webkit.org/b/227801 imported/blink/dialog/backdrop-dynamic-style-change.html [ ImageOnlyFailure ]
-webkit.org/b/227801 imported/blink/dialog/backdrop-in-flow.html [ ImageOnlyFailure ]
-webkit.org/b/227801 imported/blink/dialog/backdrop-stacking-order.html [ ImageOnlyFailure ]
-
# Top layer tests
+webkit.org/b/84796 imported/blink/dialog/backdrop-in-flow.html [ ImageOnlyFailure ]
+webkit.org/b/84796 imported/blink/dialog/backdrop-stacking-order.html [ ImageOnlyFailure ]
webkit.org/b/84796 imported/blink/dialog/dont-share-style-to-top-layer.html [ ImageOnlyFailure ]
-webkit.org/b/84796 imported/blink/dialog/modal-dialog-backdrop.html [ ImageOnlyFailure ]
-webkit.org/b/84796 imported/blink/dialog/modal-dialog-generated-content.html [ ImageOnlyFailure ]
webkit.org/b/84796 imported/blink/dialog/modal-dialog-in-replaced-renderer.html [ ImageOnlyFailure ]
webkit.org/b/84796 imported/blink/dialog/modal-dialog-in-table-column.html [ ImageOnlyFailure ]
webkit.org/b/84796 imported/blink/dialog/removed-element-is-removed-from-top-layer.html [ ImageOnlyFailure ]
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (281228 => 281229)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,3 +1,15 @@
+2021-08-19 Tim Nguyen <n...@apple.com>
+
+ Implement ::backdrop pseudo element
+ https://bugs.webkit.org/show_bug.cgi?id=227801
+
+ Reviewed by Antti Koivisto.
+
+ This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
+ Some imported blink tests now start passing, some still need proper top layer support.
+
+ * web-platform-tests/css/css-values/ch-empty-pseudo-recalc-on-font-load-expected.txt:
+
2021-08-19 Youenn Fablet <you...@apple.com>
Add support for RTCDtlsTransport
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/ch-empty-pseudo-recalc-on-font-load-expected.txt (281228 => 281229)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/ch-empty-pseudo-recalc-on-font-load-expected.txt 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/ch-empty-pseudo-recalc-on-font-load-expected.txt 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,5 +1,5 @@
-FAIL ch in pseudo-element ::before should be recalculated after loading a web font assert_less_than: expected a number less than 24 but got NaN
-FAIL ch in pseudo-element ::after should be recalculated after loading a web font assert_less_than: expected a number less than 24 but got NaN
-FAIL ch in pseudo-element ::backdrop should be recalculated after loading a web font assert_less_than: expected a number less than 24 but got NaN
+PASS ch in pseudo-element ::before should be recalculated after loading a web font
+PASS ch in pseudo-element ::after should be recalculated after loading a web font
+PASS ch in pseudo-element ::backdrop should be recalculated after loading a web font
Modified: trunk/Source/_javascript_Core/ChangeLog (281228 => 281229)
--- trunk/Source/_javascript_Core/ChangeLog 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,3 +1,15 @@
+2021-08-19 Tim Nguyen <n...@apple.com>
+
+ Implement ::backdrop pseudo element
+ https://bugs.webkit.org/show_bug.cgi?id=227801
+
+ Reviewed by Antti Koivisto.
+
+ This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
+ Some imported blink tests now start passing, some still need proper top layer support.
+
+ * inspector/protocol/CSS.json:
+
2021-08-18 Yusuke Suzuki <ysuz...@apple.com>
[JSC] Remove op_has_indexed_property related code
Modified: trunk/Source/_javascript_Core/inspector/protocol/CSS.json (281228 => 281229)
--- trunk/Source/_javascript_Core/inspector/protocol/CSS.json 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/_javascript_Core/inspector/protocol/CSS.json 2021-08-19 09:02:02 UTC (rev 281229)
@@ -43,6 +43,7 @@
"before",
"after",
"selection",
+ "backdrop",
"scrollbar",
"scrollbar-thumb",
"scrollbar-button",
Modified: trunk/Source/WebCore/ChangeLog (281228 => 281229)
--- trunk/Source/WebCore/ChangeLog 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,3 +1,40 @@
+2021-08-19 Tim Nguyen <n...@apple.com>
+
+ Implement ::backdrop pseudo element
+ https://bugs.webkit.org/show_bug.cgi?id=227801
+
+ Reviewed by Antti Koivisto.
+
+ This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
+ Some imported blink tests now start passing, some still need proper top layer support.
+
+ * css/CSSSelector.cpp:
+ (WebCore::CSSSelector::pseudoId):
+ * css/CSSSelector.h:
+ * css/SelectorPseudoElementTypeMap.in:
+ * css/dialog.css:
+ (dialog::backdrop):
+ (::backdrop):
+ * inspector/agents/InspectorCSSAgent.cpp:
+ (WebCore::protocolValueForPseudoId):
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::backdropRenderer const):
+ (WebCore::RenderElement::setBackdropRenderer):
+ * rendering/RenderElement.h:
+ * rendering/RenderObject.h:
+ * rendering/style/RenderStyleConstants.cpp:
+ (WebCore::operator<<):
+ * rendering/style/RenderStyleConstants.h:
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers):
+ * rendering/updating/RenderTreeUpdater.cpp:
+ (WebCore::RenderTreeUpdater::updateAfterDescendants):
+ * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
+ (WebCore::RenderTreeUpdater::GeneratedContent::updateBackdropRenderer):
+ * rendering/updating/RenderTreeUpdaterGeneratedContent.h:
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::resolvePseudoStyle):
+
2021-08-19 Carlos Garcia Campos <cgar...@igalia.com>
document.hasFocus() returns true for unfocused pages
Modified: trunk/Source/WebCore/css/CSSSelector.cpp (281228 => 281229)
--- trunk/Source/WebCore/css/CSSSelector.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/css/CSSSelector.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -232,6 +232,8 @@
return PseudoId::Highlight;
case PseudoElementMarker:
return PseudoId::Marker;
+ case PseudoElementBackdrop:
+ return PseudoId::Backdrop;
case PseudoElementBefore:
return PseudoId::Before;
case PseudoElementAfter:
Modified: trunk/Source/WebCore/css/CSSSelector.h (281228 => 281229)
--- trunk/Source/WebCore/css/CSSSelector.h 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/css/CSSSelector.h 2021-08-19 09:02:02 UTC (rev 281229)
@@ -180,6 +180,7 @@
enum PseudoElementType {
PseudoElementUnknown = 0,
PseudoElementAfter,
+ PseudoElementBackdrop,
PseudoElementBefore,
#if ENABLE(VIDEO)
PseudoElementCue,
Modified: trunk/Source/WebCore/css/SelectorPseudoElementTypeMap.in (281228 => 281229)
--- trunk/Source/WebCore/css/SelectorPseudoElementTypeMap.in 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/css/SelectorPseudoElementTypeMap.in 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,4 +1,5 @@
after
+backdrop
before
#if ENABLE(VIDEO)
cue
Modified: trunk/Source/WebCore/css/dialog.css (281228 => 281229)
--- trunk/Source/WebCore/css/dialog.css 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/css/dialog.css 2021-08-19 09:02:02 UTC (rev 281229)
@@ -24,3 +24,16 @@
max-width: calc(100% - 6px - 2em);
max-height: calc(100% - 6px - 2em);
}
+
+dialog::backdrop {
+ background: rgba(0, 0, 0, 0.1);
+}
+
+::backdrop {
+ display: block;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
Modified: trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp (281228 => 281229)
--- trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/inspector/agents/InspectorCSSAgent.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -449,6 +449,8 @@
return Protocol::CSS::PseudoId::FirstLetter;
case PseudoId::Marker:
return Protocol::CSS::PseudoId::Marker;
+ case PseudoId::Backdrop:
+ return Protocol::CSS::PseudoId::Backdrop;
case PseudoId::Before:
return Protocol::CSS::PseudoId::Before;
case PseudoId::After:
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (281228 => 281229)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -2375,4 +2375,14 @@
return result;
}
+WeakPtr<RenderBlockFlow> RenderElement::backdropRenderer() const
+{
+ return hasRareData() ? rareData().backdropRenderer : nullptr;
}
+
+void RenderElement::setBackdropRenderer(RenderBlockFlow& renderer)
+{
+ ensureRareData().backdropRenderer = makeWeakPtr(renderer);
+}
+
+}
Modified: trunk/Source/WebCore/rendering/RenderElement.h (281228 => 281229)
--- trunk/Source/WebCore/rendering/RenderElement.h 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/RenderElement.h 2021-08-19 09:02:02 UTC (rev 281229)
@@ -257,6 +257,9 @@
virtual void suspendAnimations(MonotonicTime = MonotonicTime()) { }
std::unique_ptr<RenderStyle> animatedStyle();
+ WeakPtr<RenderBlockFlow> backdropRenderer() const;
+ void setBackdropRenderer(RenderBlockFlow&);
+
protected:
enum BaseTypeFlag {
RenderLayerModelObjectFlag = 1 << 0,
Modified: trunk/Source/WebCore/rendering/RenderObject.h (281228 => 281229)
--- trunk/Source/WebCore/rendering/RenderObject.h 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2021-08-19 09:02:02 UTC (rev 281229)
@@ -59,6 +59,7 @@
class RenderBoxModelObject;
class RenderInline;
class RenderBlock;
+class RenderBlockFlow;
class RenderElement;
class RenderFragmentedFlow;
class RenderGeometryMap;
@@ -938,6 +939,7 @@
// From RenderElement
std::unique_ptr<RenderStyle> cachedFirstLineStyle;
+ WeakPtr<RenderBlockFlow> backdropRenderer;
};
const RenderObject::RenderObjectRareData& rareData() const;
Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.cpp (281228 => 281229)
--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -887,6 +887,7 @@
case PseudoId::FirstLetter: ts << "first-letter"; break;
case PseudoId::Highlight: ts << "highlight"; break;
case PseudoId::Marker: ts << "marker"; break;
+ case PseudoId::Backdrop: ts << "backdrop"; break;
case PseudoId::Before: ts << "before"; break;
case PseudoId::After: ts << "after"; break;
case PseudoId::Selection: ts << "selection"; break;
Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.h (281228 => 281229)
--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.h 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.h 2021-08-19 09:02:02 UTC (rev 281229)
@@ -95,6 +95,7 @@
Before,
After,
Selection,
+ Backdrop,
Scrollbar,
// Internal:
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (281228 => 281229)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -807,6 +807,12 @@
return;
}
+ // Also destroy ::backdrop along with element if there is one
+ if (is<RenderElement>(rendererToDestroy)) {
+ if (auto backdropRenderer = downcast<RenderElement>(rendererToDestroy).backdropRenderer())
+ destroy(*backdropRenderer);
+ }
+
auto isAnonymousAndSafeToDelete = [] (const auto& renderer) {
return renderer.isAnonymous() && !renderer.isRenderView() && !renderer.isRenderFragmentedFlow();
};
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp (281228 => 281229)
--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -266,6 +266,7 @@
if (!renderer)
return;
+ generatedContent().updateBackdropRenderer(*renderer);
m_builder.updateAfterDescendants(*renderer);
if (element.hasCustomStyleResolveCallbacks() && updates && updates->update.change == Style::Change::Renderer)
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp (281228 => 281229)
--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -172,6 +172,45 @@
m_updater.m_builder.updateAfterDescendants(*pseudoElementRenderer);
}
+void RenderTreeUpdater::GeneratedContent::updateBackdropRenderer(RenderElement& renderer)
+{
+ // ::backdrop does not inherit style, hence using the view style as parent style
+ auto style = renderer.getCachedPseudoStyle(PseudoId::Backdrop, &renderer.view().style());
+
+ // Destroy ::backdrop if new element no longer is in top layer, or if it is hidden
+ if ((renderer.element() && !renderer.element()->isInTopLayer()) || !style || style->display() == DisplayType::None) {
+ if (WeakPtr backdropRenderer = renderer.backdropRenderer())
+ m_updater.m_builder.destroy(*backdropRenderer);
+ return;
+ }
+
+ auto newStyle = RenderStyle::clone(*style);
+ RenderPtr<RenderBlockFlow> newBackdropRenderer;
+ auto backdropRenderer = renderer.backdropRenderer();
+ if (backdropRenderer)
+ backdropRenderer->setStyle(WTFMove(newStyle));
+ else {
+ newBackdropRenderer = WebCore::createRenderer<RenderBlockFlow>(renderer.document(), WTFMove(newStyle));
+ newBackdropRenderer->initializeStyle();
+ backdropRenderer = makeWeakPtr(newBackdropRenderer.get());
+ renderer.setBackdropRenderer(*backdropRenderer);
+ }
+
+ // Update or attach to renderer parent
+ auto currentParent = makeWeakPtr(backdropRenderer->parent());
+ auto newParent = makeWeakPtr(renderer.parent());
+
+ ASSERT(newParent, "Should have new parent");
+
+ if (newParent == currentParent)
+ return;
+
+ if (currentParent)
+ m_updater.m_builder.attach(*newParent, m_updater.m_builder.detach(*currentParent, *backdropRenderer, RenderTreeBuilder::CanCollapseAnonymousBlock::No), &renderer);
+ else
+ m_updater.m_builder.attach(*newParent, WTFMove(newBackdropRenderer), &renderer);
+}
+
bool RenderTreeUpdater::GeneratedContent::needsPseudoElement(const Style::ElementUpdate* update)
{
if (!update)
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h (281228 => 281229)
--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.h 2021-08-19 09:02:02 UTC (rev 281229)
@@ -38,6 +38,7 @@
public:
GeneratedContent(RenderTreeUpdater&);
+ void updateBackdropRenderer(RenderElement&);
void updatePseudoElement(Element&, const Style::ElementUpdates&, PseudoId);
void updateRemainingQuotes();
Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (281228 => 281229)
--- trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-08-19 09:02:02 UTC (rev 281229)
@@ -275,6 +275,8 @@
std::optional<ElementUpdate> TreeResolver::resolvePseudoStyle(Element& element, const ElementUpdate& elementUpdate, PseudoId pseudoId)
{
+ ASSERT(pseudoId != PseudoId::Backdrop, "This method does not handle ::backdrop currently");
+
if (pseudoId == PseudoId::Marker && elementUpdate.style->display() != DisplayType::ListItem)
return { };
if (elementUpdate.style->display() == DisplayType::None)
@@ -281,10 +283,10 @@
return { };
if (!elementUpdate.style->hasPseudoStyle(pseudoId))
return { };
-
+
auto& parentStyle = *elementUpdate.style;
auto* parentBoxStyle = parentBoxStyleForPseudo(elementUpdate);
-
+
auto pseudoStyle = scope().resolver->pseudoStyleForElement(element, { pseudoId }, parentStyle, parentBoxStyle, &scope().selectorFilter);
if (!pseudoStyle)
return { };
Modified: trunk/Source/WebInspectorUI/ChangeLog (281228 => 281229)
--- trunk/Source/WebInspectorUI/ChangeLog 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebInspectorUI/ChangeLog 2021-08-19 09:02:02 UTC (rev 281229)
@@ -1,3 +1,16 @@
+2021-08-19 Tim Nguyen <n...@apple.com>
+
+ Implement ::backdrop pseudo element
+ https://bugs.webkit.org/show_bug.cgi?id=227801
+
+ Reviewed by Antti Koivisto.
+
+ This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
+ Some imported blink tests now start passing, some still need proper top layer support.
+
+ * UserInterface/Controllers/CSSManager.js:
+ (WI.CSSManager.displayNameForPseudoId):
+
2021-08-17 Devin Rousso <drou...@apple.com>
Web Inspector: match the undocked tab bar style when docked bottom/side
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js (281228 => 281229)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js 2021-08-19 08:46:05 UTC (rev 281228)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CSSManager.js 2021-08-19 09:02:02 UTC (rev 281229)
@@ -155,6 +155,8 @@
return WI.unlocalizedString("::after");
case CSSManager.PseudoSelectorNames.Selection:
return WI.unlocalizedString("::selection");
+ case CSSManager.PseudoSelectorNames.Backdrop:
+ return WI.unlocalizedString("::backdrop");
case CSSManager.PseudoSelectorNames.Scrollbar:
return WI.unlocalizedString("::scrollbar");
case CSSManager.PseudoSelectorNames.ScrollbarThumb:
@@ -684,6 +686,7 @@
WI.CSSManager.PseudoSelectorNames = {
After: "after",
Before: "before",
+ Backdrop: "backdrop",
FirstLetter: "first-letter",
FirstLine: "first-line",
Highlight: "highlight",