| 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 3e9c5d1e26b6a768db73e1eb8eb4afdb3bdfb0b3..76f9cc072bae4cd62f66e49957673a55b0d6482b 100644
|
| --- a/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| +++ b/third_party/WebKit/Source/core/css/resolver/StyleResolver.cpp
|
| @@ -628,8 +628,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.
|
| @@ -640,6 +643,7 @@ void StyleResolver::loadPendingResources(StyleResolverState& state) {
|
| PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
|
| Element* element,
|
| const ComputedStyle* defaultParent,
|
| + const ComputedStyle* defaultLayoutParent,
|
| StyleSharingBehavior sharingBehavior,
|
| RuleMatchingBehavior matchingBehavior) {
|
| DCHECK(document().frame());
|
| @@ -677,7 +681,8 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
|
| return sharedStyle.release();
|
| }
|
|
|
| - StyleResolverState state(document(), elementContext, defaultParent);
|
| + StyleResolverState state(document(), elementContext, defaultParent,
|
| + defaultLayoutParent);
|
|
|
| ElementAnimations* elementAnimations = element->elementAnimations();
|
| const ComputedStyle* baseComputedStyle =
|
| @@ -685,8 +690,10 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
|
|
|
| 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();
|
| @@ -698,6 +705,7 @@ PassRefPtr<ComputedStyle> StyleResolver::styleForElement(
|
| } else {
|
| state.setStyle(initialStyleForElement());
|
| state.setParentStyle(ComputedStyle::clone(*state.style()));
|
| + state.setLayoutParentStyle(state.parentStyle());
|
| }
|
| }
|
|
|
| @@ -812,7 +820,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);
|
| @@ -860,7 +869,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();
|
| @@ -963,12 +972,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)
|
| @@ -1824,7 +1835,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) {
|
|
|