Skip to content

Commit

Permalink
::backdrop UA styles should be appended unconditionally
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=248456
rdar://102748281

Reviewed by Darin Adler.

* Source/WebCore/css/dialog.css:
(dialog::backdrop):
(::backdrop): Deleted.
* Source/WebCore/css/html.css:
(::backdrop):
* Source/WebCore/rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
(WebCore::RenderTreeUpdater::GeneratedContent::updateBackdropRenderer):

Canonical link: https://commits.webkit.org/257320@main
  • Loading branch information
nt1m committed Dec 3, 2022
1 parent fb7087c commit fdf33fd
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 13 deletions.
9 changes: 0 additions & 9 deletions Source/WebCore/css/dialog.css
Expand Up @@ -29,12 +29,3 @@ dialog:modal {
dialog::backdrop {
background: rgba(0, 0, 0, 0.1);
}

::backdrop {
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
8 changes: 8 additions & 0 deletions Source/WebCore/css/html.css
Expand Up @@ -112,6 +112,14 @@ abbr[title], acronym[title] {
text-decoration: dotted underline;
}

/* ::backdrop */

::backdrop {
display: block;
position: fixed;
inset: 0;
}

/* media elements */

body:-webkit-full-page-media {
Expand Down
Expand Up @@ -177,13 +177,22 @@ void RenderTreeUpdater::GeneratedContent::updateBackdropRenderer(RenderElement&
{
if (!renderer.canHaveGeneratedChildren())
return;
// ::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) {
auto destroyBackdropIfNeeded = [&renderer, this]() {
if (WeakPtr backdropRenderer = renderer.backdropRenderer())
m_updater.m_builder.destroy(*backdropRenderer);
};

// Intentionally bail out early here to avoid computing the style.
if (!renderer.element() || !renderer.element()->isInTopLayer()) {
destroyBackdropIfNeeded();
return;
}

// ::backdrop does not inherit style, hence using the view style as parent style
auto style = renderer.getCachedPseudoStyle(PseudoId::Backdrop, &renderer.view().style());
if (!style || style->display() == DisplayType::None) {
destroyBackdropIfNeeded();
return;
}

Expand Down

0 comments on commit fdf33fd

Please sign in to comment.