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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutObject.cpp

Issue 2768053003: Get rid of ownStyle in LayoutObject::getUncachedPseudoStyle. (Closed)
Patch Set: Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2009 Google Inc. All rights reserved. 8 * Copyright (C) 2009 Google Inc. All rights reserved.
9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
10 * (http://www.torchmobile.com/) 10 * (http://www.torchmobile.com/)
(...skipping 1941 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 if (oldStyle.hasPseudoStyle(PseudoIdSelection) || 1952 if (oldStyle.hasPseudoStyle(PseudoIdSelection) ||
1953 styleRef().hasPseudoStyle(PseudoIdSelection)) 1953 styleRef().hasPseudoStyle(PseudoIdSelection))
1954 invalidatePaintForSelection(); 1954 invalidatePaintForSelection();
1955 } 1955 }
1956 1956
1957 void LayoutObject::applyFirstLineChanges(const ComputedStyle& oldStyle) { 1957 void LayoutObject::applyFirstLineChanges(const ComputedStyle& oldStyle) {
1958 if (oldStyle.hasPseudoStyle(PseudoIdFirstLine)) { 1958 if (oldStyle.hasPseudoStyle(PseudoIdFirstLine)) {
1959 RefPtr<ComputedStyle> oldPseudoStyle = 1959 RefPtr<ComputedStyle> oldPseudoStyle =
1960 oldStyle.getCachedPseudoStyle(PseudoIdFirstLine); 1960 oldStyle.getCachedPseudoStyle(PseudoIdFirstLine);
1961 if (styleRef().hasPseudoStyle(PseudoIdFirstLine) && oldPseudoStyle) { 1961 if (styleRef().hasPseudoStyle(PseudoIdFirstLine) && oldPseudoStyle) {
1962 RefPtr<ComputedStyle> newPseudoStyle = 1962 RefPtr<ComputedStyle> newPseudoStyle = uncachedFirstLineStyle();
1963 uncachedFirstLineStyle(mutableStyle());
1964 if (newPseudoStyle) { 1963 if (newPseudoStyle) {
1965 firstLineStyleDidChange(*oldPseudoStyle, *newPseudoStyle); 1964 firstLineStyleDidChange(*oldPseudoStyle, *newPseudoStyle);
1966 return; 1965 return;
1967 } 1966 }
1968 } 1967 }
1969 } 1968 }
1970 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange); 1969 setNeedsLayoutAndPrefWidthsRecalc(LayoutInvalidationReason::StyleChange);
1971 } 1970 }
1972 1971
1973 void LayoutObject::propagateStyleToAnonymousChildren() { 1972 void LayoutObject::propagateStyleToAnonymousChildren() {
(...skipping 1050 matching lines...) Expand 10 before | Expand all | Expand 10 after
3024 if (layoutObject->isBeforeOrAfterContent()) 3023 if (layoutObject->isBeforeOrAfterContent())
3025 layoutObjectForFirstLineStyle = layoutObject->parent(); 3024 layoutObjectForFirstLineStyle = layoutObject->parent();
3026 3025
3027 if (layoutObjectForFirstLineStyle->behavesLikeBlockContainer()) { 3026 if (layoutObjectForFirstLineStyle->behavesLikeBlockContainer()) {
3028 if (const LayoutBlock* firstLineBlock = 3027 if (const LayoutBlock* firstLineBlock =
3029 toLayoutBlock(layoutObjectForFirstLineStyle) 3028 toLayoutBlock(layoutObjectForFirstLineStyle)
3030 ->enclosingFirstLineStyleBlock()) { 3029 ->enclosingFirstLineStyleBlock()) {
3031 if (type == Cached) 3030 if (type == Cached)
3032 return firstLineBlock->getCachedPseudoStyle(PseudoIdFirstLine, style); 3031 return firstLineBlock->getCachedPseudoStyle(PseudoIdFirstLine, style);
3033 return firstLineBlock->getUncachedPseudoStyle( 3032 return firstLineBlock->getUncachedPseudoStyle(
3034 PseudoStyleRequest(PseudoIdFirstLine), style, 3033 PseudoStyleRequest(PseudoIdFirstLine), style);
3035 firstLineBlock == layoutObject ? style : 0);
3036 } 3034 }
3037 } else if (!layoutObjectForFirstLineStyle->isAnonymous() && 3035 } else if (!layoutObjectForFirstLineStyle->isAnonymous() &&
3038 layoutObjectForFirstLineStyle->isLayoutInline() && 3036 layoutObjectForFirstLineStyle->isLayoutInline() &&
3039 !layoutObjectForFirstLineStyle->node() 3037 !layoutObjectForFirstLineStyle->node()
3040 ->isFirstLetterPseudoElement()) { 3038 ->isFirstLetterPseudoElement()) {
3041 const ComputedStyle* parentStyle = 3039 const ComputedStyle* parentStyle =
3042 layoutObjectForFirstLineStyle->parent()->firstLineStyle(); 3040 layoutObjectForFirstLineStyle->parent()->firstLineStyle();
3043 if (parentStyle != layoutObjectForFirstLineStyle->parent()->style()) { 3041 if (parentStyle != layoutObjectForFirstLineStyle->parent()->style()) {
3044 if (type == Cached) { 3042 if (type == Cached) {
3045 // A first-line style is in effect. Cache a first-line style for 3043 // A first-line style is in effect. Cache a first-line style for
3046 // ourselves. 3044 // ourselves.
3047 layoutObjectForFirstLineStyle->mutableStyleRef().setHasPseudoStyle( 3045 layoutObjectForFirstLineStyle->mutableStyleRef().setHasPseudoStyle(
3048 PseudoIdFirstLineInherited); 3046 PseudoIdFirstLineInherited);
3049 return layoutObjectForFirstLineStyle->getCachedPseudoStyle( 3047 return layoutObjectForFirstLineStyle->getCachedPseudoStyle(
3050 PseudoIdFirstLineInherited, parentStyle); 3048 PseudoIdFirstLineInherited, parentStyle);
3051 } 3049 }
3052 return layoutObjectForFirstLineStyle->getUncachedPseudoStyle( 3050 return layoutObjectForFirstLineStyle->getUncachedPseudoStyle(
3053 PseudoStyleRequest(PseudoIdFirstLineInherited), parentStyle, style); 3051 PseudoStyleRequest(PseudoIdFirstLineInherited), parentStyle);
3054 } 3052 }
3055 } 3053 }
3056 return nullptr; 3054 return nullptr;
3057 } 3055 }
3058 3056
3059 PassRefPtr<ComputedStyle> LayoutObject::uncachedFirstLineStyle( 3057 PassRefPtr<ComputedStyle> LayoutObject::uncachedFirstLineStyle() const {
3060 ComputedStyle* style) const {
3061 if (!document().styleEngine().usesFirstLineRules()) 3058 if (!document().styleEngine().usesFirstLineRules())
3062 return nullptr; 3059 return nullptr;
3063 3060
3064 ASSERT(!isText()); 3061 ASSERT(!isText());
3065 3062
3066 return firstLineStyleForCachedUncachedType(Uncached, this, style); 3063 return firstLineStyleForCachedUncachedType(Uncached, this, m_style.get());
3067 } 3064 }
3068 3065
3069 ComputedStyle* LayoutObject::cachedFirstLineStyle() const { 3066 ComputedStyle* LayoutObject::cachedFirstLineStyle() const {
3070 ASSERT(document().styleEngine().usesFirstLineRules()); 3067 ASSERT(document().styleEngine().usesFirstLineRules());
3071 3068
3072 if (RefPtr<ComputedStyle> style = firstLineStyleForCachedUncachedType( 3069 if (RefPtr<ComputedStyle> style = firstLineStyleForCachedUncachedType(
3073 Cached, isText() ? parent() : this, m_style.get())) 3070 Cached, isText() ? parent() : this, m_style.get()))
3074 return style.get(); 3071 return style.get();
3075 3072
3076 return m_style.get(); 3073 return m_style.get();
(...skipping 11 matching lines...) Expand all
3088 3085
3089 RefPtr<ComputedStyle> result = 3086 RefPtr<ComputedStyle> result =
3090 getUncachedPseudoStyle(PseudoStyleRequest(pseudo), parentStyle); 3087 getUncachedPseudoStyle(PseudoStyleRequest(pseudo), parentStyle);
3091 if (result) 3088 if (result)
3092 return mutableStyleRef().addCachedPseudoStyle(result.release()); 3089 return mutableStyleRef().addCachedPseudoStyle(result.release());
3093 return nullptr; 3090 return nullptr;
3094 } 3091 }
3095 3092
3096 PassRefPtr<ComputedStyle> LayoutObject::getUncachedPseudoStyle( 3093 PassRefPtr<ComputedStyle> LayoutObject::getUncachedPseudoStyle(
3097 const PseudoStyleRequest& pseudoStyleRequest, 3094 const PseudoStyleRequest& pseudoStyleRequest,
3098 const ComputedStyle* parentStyle, 3095 const ComputedStyle* parentStyle) const {
3099 const ComputedStyle* ownStyle) const { 3096 if (pseudoStyleRequest.pseudoId < FirstInternalPseudoId &&
3100 if (pseudoStyleRequest.pseudoId < FirstInternalPseudoId && !ownStyle &&
3101 !style()->hasPseudoStyle(pseudoStyleRequest.pseudoId)) 3097 !style()->hasPseudoStyle(pseudoStyleRequest.pseudoId))
rune 2017/03/23 22:57:46 I'm not sure I understand this code, but it looks
3102 return nullptr; 3098 return nullptr;
3103 3099
3104 if (!parentStyle) { 3100 if (!parentStyle)
3105 ASSERT(!ownStyle);
3106 parentStyle = style(); 3101 parentStyle = style();
3107 }
3108 3102
3109 if (!node()) 3103 if (!node())
3110 return nullptr; 3104 return nullptr;
3111 3105
3112 Element* element = Traversal<Element>::firstAncestorOrSelf(*node()); 3106 Element* element = Traversal<Element>::firstAncestorOrSelf(*node());
3113 if (!element) 3107 if (!element)
3114 return nullptr; 3108 return nullptr;
3115 3109
3116 if (pseudoStyleRequest.pseudoId == PseudoIdFirstLineInherited) { 3110 if (pseudoStyleRequest.pseudoId == PseudoIdFirstLineInherited) {
3117 RefPtr<ComputedStyle> result = 3111 RefPtr<ComputedStyle> result =
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
3645 const blink::LayoutObject* root = object1; 3639 const blink::LayoutObject* root = object1;
3646 while (root->parent()) 3640 while (root->parent())
3647 root = root->parent(); 3641 root = root->parent();
3648 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3642 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3649 } else { 3643 } else {
3650 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); 3644 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)");
3651 } 3645 }
3652 } 3646 }
3653 3647
3654 #endif 3648 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.h ('k') | third_party/WebKit/Source/core/layout/api/LayoutItem.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698