Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(582)

Unified Diff: third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp

Issue 2450093005: Support display: contents for elements, first-line and first-letter pseudos. (Closed)
Patch Set: Support display: contents for elements, first-line and first-letter pseudos. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
index 127e05c930c7092e5c882155c9ac68d0d255469f..dc21e25edac0fcf4d09c08933395faf70e5057f6 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleAdjuster.cpp
@@ -75,6 +75,7 @@ static EDisplay equivalentBlockDisplay(EDisplay display) {
case EDisplay::InlineGrid:
return EDisplay::Grid;
+ case EDisplay::Contents:
case EDisplay::Inline:
case EDisplay::InlineBlock:
case EDisplay::TableRowGroup:
@@ -87,7 +88,6 @@ static EDisplay equivalentBlockDisplay(EDisplay display) {
case EDisplay::TableCaption:
return EDisplay::Block;
case EDisplay::None:
- case EDisplay::Contents:
ASSERT_NOT_REACHED();
return display;
}
@@ -131,9 +131,9 @@ static bool isInTopLayer(const Element* element, const ComputedStyle& style) {
style.styleType() == PseudoIdBackdrop;
}
-static bool parentStyleForcesZIndexToCreateStackingContext(
- const ComputedStyle& parentStyle) {
- return parentStyle.isDisplayFlexibleOrGridBox();
+static bool layoutParentStyleForcesZIndexToCreateStackingContext(
+ const ComputedStyle& layoutParentStyle) {
+ return layoutParentStyle.isDisplayFlexibleOrGridBox();
}
void StyleAdjuster::adjustStyleForEditing(ComputedStyle& style) {
@@ -324,16 +324,19 @@ static void adjustOverflow(ComputedStyle& style) {
}
static void adjustStyleForDisplay(ComputedStyle& style,
- const ComputedStyle& parentStyle,
+ const ComputedStyle& layoutParentStyle,
Document* document) {
if (style.display() == EDisplay::Block && !style.isFloating())
return;
+ if (style.display() == EDisplay::Contents)
+ return;
+
// FIXME: Don't support this mutation for pseudo styles like first-letter or
// first-line, since it's not completely clear how that should work.
if (style.display() == EDisplay::Inline &&
style.styleType() == PseudoIdNone &&
- style.getWritingMode() != parentStyle.getWritingMode())
+ style.getWritingMode() != layoutParentStyle.getWritingMode())
style.setDisplay(EDisplay::InlineBlock);
// After performing the display mutation, check table rows. We do not honor
@@ -365,7 +368,7 @@ static void adjustStyleForDisplay(ComputedStyle& style,
style.display() == EDisplay::TableRow ||
style.display() == EDisplay::TableRowGroup ||
style.display() == EDisplay::TableCell)
- style.setWritingMode(parentStyle.getWritingMode());
+ style.setWritingMode(layoutParentStyle.getWritingMode());
// FIXME: Since we don't support block-flow on flexible boxes yet, disallow
// setting of block-flow to anything other than TopToBottomWritingMode.
@@ -375,7 +378,7 @@ static void adjustStyleForDisplay(ComputedStyle& style,
style.display() == EDisplay::WebkitInlineBox))
style.setWritingMode(WritingMode::kHorizontalTb);
- if (parentStyle.isDisplayFlexibleOrGridBox()) {
+ if (layoutParentStyle.isDisplayFlexibleOrGridBox()) {
style.setFloating(EFloat::kNone);
style.setDisplay(equivalentBlockDisplay(style.display()));
@@ -393,9 +396,9 @@ static void adjustStyleForDisplay(ComputedStyle& style,
void StyleAdjuster::adjustComputedStyle(ComputedStyle& style,
const ComputedStyle& parentStyle,
+ const ComputedStyle& layoutParentStyle,
Element* element) {
- if (style.display() != EDisplay::None &&
- style.display() != EDisplay::Contents) {
+ if (style.display() != EDisplay::None) {
if (element && element->isHTMLElement())
adjustStyleForHTMLElement(style, toHTMLElement(*element));
@@ -408,15 +411,18 @@ void StyleAdjuster::adjustComputedStyle(ComputedStyle& style,
// Absolute/fixed positioned elements, floating elements and the document
// element need block-like outside display.
- if (style.hasOutOfFlowPosition() || style.isFloating() ||
- (element && element->document().documentElement() == element))
+ if (style.display() != EDisplay::Contents &&
+ (style.hasOutOfFlowPosition() || style.isFloating()))
+ style.setDisplay(equivalentBlockDisplay(style.display()));
+
+ if (element && element->document().documentElement() == element)
style.setDisplay(equivalentBlockDisplay(style.display()));
// We don't adjust the first letter style earlier because we may change the
// display setting in adjustStyeForTagName() above.
adjustStyleForFirstLetter(style);
- adjustStyleForDisplay(style, parentStyle,
+ adjustStyleForDisplay(style, layoutParentStyle,
element ? &element->document() : 0);
// Paint containment forces a block formatting context, so we must coerce
@@ -432,7 +438,8 @@ void StyleAdjuster::adjustComputedStyle(ComputedStyle& style,
// Make sure our z-index value is only applied if the object is positioned.
if (style.position() == EPosition::kStatic &&
- !parentStyleForcesZIndexToCreateStackingContext(parentStyle)) {
+ !layoutParentStyleForcesZIndexToCreateStackingContext(
+ layoutParentStyle)) {
style.setIsStackingContext(false);
// TODO(alancutter): Avoid altering z-index here.
if (!style.hasAutoZIndex())

Powered by Google App Engine
This is Rietveld 408576698