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

Unified Diff: third_party/WebKit/Source/core/css/resolver/StyleResolver.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/StyleResolver.cpp
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
index 7612822a3b872abc7cfafcbf871758b387a0f8f1..c4e95bcc8ee98a914eb5d4330ad7e44fc7dbcf97 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
@@ -577,8 +577,11 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForDocument(Document& document) {
void StyleResolver::adjustComputedStyle(StyleResolverState& state,
Element* element) {
+ DCHECK(state.layoutParentStyle());
+ DCHECK(state.parentStyle());
StyleAdjuster::adjustComputedStyle(state.mutableStyleRef(),
- *state.parentStyle(), element);
+ *state.parentStyle(),
+ *state.layoutParentStyle(), element);
}
// Start loading resources referenced by this style.
@@ -620,6 +623,7 @@ static void updateBaseComputedStyle(StyleResolverState& state,
PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
Element* element,
const ComputedStyle* defaultParent,
+ const ComputedStyle* defaultLayoutParent,
StyleSharingBehavior sharingBehavior,
RuleMatchingBehavior matchingBehavior) {
DCHECK(document().frame());
@@ -656,15 +660,18 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
return sharedStyle.release();
}
- StyleResolverState state(document(), elementContext, defaultParent);
+ StyleResolverState state(document(), elementContext, defaultParent,
+ defaultLayoutParent);
const ComputedStyle* baseComputedStyle =
calculateBaseComputedStyle(state, element);
if (baseComputedStyle) {
state.setStyle(ComputedStyle::clone(*baseComputedStyle));
- if (!state.parentStyle())
+ if (!state.parentStyle()) {
state.setParentStyle(initialStyleForElement());
+ state.setLayoutParentStyle(state.parentStyle());
+ }
} else {
if (state.parentStyle()) {
RefPtr<ComputedStyle> style = ComputedStyle::create();
@@ -676,6 +683,7 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
} else {
state.setStyle(initialStyleForElement());
state.setParentStyle(ComputedStyle::clone(*state.style()));
+ state.setLayoutParentStyle(state.parentStyle());
}
}
@@ -790,7 +798,8 @@ PassRefPtr<AnimatableValue> StyleResolver::createAnimatableValueSnapshot(
const CSSValue* value) {
// TODO(alancutter): Avoid creating a StyleResolverState just to apply a
// single value on a ComputedStyle.
- StyleResolverState state(element.document(), &element, parentStyle);
+ StyleResolverState state(element.document(), &element, parentStyle,
+ parentStyle);
state.setStyle(ComputedStyle::clone(baseStyle));
if (value) {
StyleBuilder::applyProperty(property, state, *value);
@@ -838,7 +847,7 @@ PseudoElement* StyleResolver::createPseudoElementIfNeeded(Element& parent,
return createPseudoElement(&parent, pseudoId);
}
- StyleResolverState state(document(), &parent, parentStyle);
+ StyleResolverState state(document(), &parent, parentStyle, parentStyle);
if (!pseudoStyleForElementInternal(parent, pseudoId, parentStyle, state))
return nullptr;
RefPtr<ComputedStyle> style = state.takeStyle();
@@ -939,12 +948,14 @@ bool StyleResolver::pseudoStyleForElementInternal(
PassRefPtr<ComputedStyle> StyleResolver::pseudoStyleForElement(
Element* element,
const PseudoStyleRequest& pseudoStyleRequest,
- const ComputedStyle* parentStyle) {
+ const ComputedStyle* parentStyle,
+ const ComputedStyle* parentLayoutObjectStyle) {
DCHECK(parentStyle);
if (!element)
return nullptr;
- StyleResolverState state(document(), element, parentStyle);
+ StyleResolverState state(document(), element, parentStyle,
+ parentLayoutObjectStyle);
if (!pseudoStyleForElementInternal(*element, pseudoStyleRequest, parentStyle,
state)) {
if (pseudoStyleRequest.type == PseudoStyleRequest::ForRenderer)
@@ -1911,7 +1922,7 @@ void StyleResolver::computeFont(ComputedStyle* style,
};
// TODO(timloh): This is weird, the style is being used as its own parent
- StyleResolverState state(document(), nullptr, style);
+ StyleResolverState state(document(), nullptr, style, style);
state.setStyle(style);
for (CSSPropertyID property : properties) {

Powered by Google App Engine
This is Rietveld 408576698