Changeset 287987 in webkit for trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
- Timestamp:
- Jan 13, 2022, 12:34:29 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp
r287926 r287987 76 76 #include "StyleScope.h" 77 77 #include "StyleScrollSnapPoints.h" 78 #include "Styleable.h" 78 79 #include "TouchAction.h" 79 80 #include "WebKitFontFamilyNames.h" … … 2375 2376 } 2376 2377 2377 Element* ComputedStyleExtractor::styledElement() const2378 RenderElement* ComputedStyleExtractor::styledRenderer() const 2378 2379 { 2379 2380 if (!m_element) 2380 2381 return nullptr; 2381 PseudoElement* pseudoElement; 2382 if (m_pseudoElementSpecifier == PseudoId::Before && (pseudoElement = m_element->beforePseudoElement())) 2383 return pseudoElement; 2384 if (m_pseudoElementSpecifier == PseudoId::After && (pseudoElement = m_element->afterPseudoElement())) 2385 return pseudoElement; 2386 return m_element.get(); 2387 } 2388 2389 RenderElement* ComputedStyleExtractor::styledRenderer() const 2390 { 2391 auto* element = styledElement(); 2392 if (!element) 2382 if (m_pseudoElementSpecifier != PseudoId::None) 2383 return Styleable(*m_element, m_pseudoElementSpecifier).renderer(); 2384 if (m_element->hasDisplayContents()) 2393 2385 return nullptr; 2394 if (m_pseudoElementSpecifier != PseudoId::None && element == m_element.get()) 2395 return nullptr; 2396 if (element->hasDisplayContents()) 2397 return nullptr; 2398 return element->renderer(); 2386 return m_element->renderer(); 2399 2387 } 2400 2388 … … 2451 2439 if (element.styleValidity() != Style::Validity::Valid) 2452 2440 return false; 2453 if (element.isPseudoElement()) {2454 if (auto* host = downcast<PseudoElement>(element).hostElement()) {2455 if (host->styleValidity() != Style::Validity::Valid)2456 return false;2457 }2458 }2459 2441 if (element.document().hasPendingFullStyleRebuild()) 2460 2442 return false; … … 2516 2498 } 2517 2499 2518 static inline const RenderStyle* computeRenderStyleForProperty(Element& element, PseudoId pseudoElementSpecifier, CSSPropertyID propertyID, std::unique_ptr<RenderStyle>& ownedStyle) 2519 { 2520 auto* renderer = element.renderer(); 2500 static inline const RenderStyle* computeRenderStyleForProperty(Element& element, PseudoId pseudoElementSpecifier, CSSPropertyID propertyID, std::unique_ptr<RenderStyle>& ownedStyle, RenderElement* renderer) 2501 { 2502 if (!renderer) 2503 renderer = element.renderer(); 2521 2504 2522 2505 if (renderer && renderer->isComposited() && CSSPropertyAnimation::animationOfPropertyIsAccelerated(propertyID)) { 2523 2506 ownedStyle = renderer->animatedStyle(); 2524 if (pseudoElementSpecifier != PseudoId::None && !element.isPseudoElement()) {2507 if (pseudoElementSpecifier != PseudoId::None) { 2525 2508 // FIXME: This cached pseudo style will only exist if the animation has been run at least once. 2526 2509 return ownedStyle->getCachedPseudoStyle(pseudoElementSpecifier); … … 2529 2512 } 2530 2513 2531 return element.computedStyle( element.isPseudoElement() ? PseudoId::None :pseudoElementSpecifier);2514 return element.computedStyle(pseudoElementSpecifier); 2532 2515 } 2533 2516 … … 2667 2650 RefPtr<CSSValue> ComputedStyleExtractor::customPropertyValue(const String& propertyName) 2668 2651 { 2669 Element* styledElement = this->styledElement();2652 Element* styledElement = m_element.get(); 2670 2653 if (!styledElement) 2671 2654 return nullptr; 2672 2655 2673 if (updateStyleIfNeededForProperty(*styledElement, CSSPropertyCustom)) { 2674 // Style update may change styledElement() to PseudoElement or back. 2675 styledElement = this->styledElement(); 2676 } 2656 updateStyleIfNeededForProperty(*styledElement, CSSPropertyCustom); 2677 2657 2678 2658 std::unique_ptr<RenderStyle> ownedStyle; 2679 auto* style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, CSSPropertyCustom, ownedStyle );2659 auto* style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, CSSPropertyCustom, ownedStyle, nullptr); 2680 2660 if (!style) 2681 2661 return nullptr; … … 2735 2715 RefPtr<CSSValue> ComputedStyleExtractor::propertyValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) 2736 2716 { 2737 auto* styledElement = this->styledElement();2717 auto* styledElement = m_element.get(); 2738 2718 if (!styledElement) 2739 2719 return nullptr; … … 2746 2726 Document& document = m_element->document(); 2747 2727 2748 if (updateStyleIfNeededForProperty(*styledElement, propertyID)) { 2749 // Style update may change styledElement() to PseudoElement or back. 2750 styledElement = this->styledElement(); 2751 } 2728 updateStyleIfNeededForProperty(*styledElement, propertyID); 2752 2729 renderer = styledRenderer(); 2753 2730 … … 2755 2732 return nullptr; 2756 2733 2757 style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, propertyID, ownedStyle );2734 style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, propertyID, ownedStyle, renderer); 2758 2735 2759 2736 // FIXME: Some of these cases could be narrowed down or optimized better. … … 2762 2739 || (document.styleScope().resolverIfExists() && document.styleScope().resolverIfExists()->hasViewportDependentMediaQueries() && document.ownerElement()); 2763 2740 2764 if (forceFullLayout) {2741 if (forceFullLayout) 2765 2742 document.updateLayoutIgnorePendingStylesheets(); 2766 styledElement = this->styledElement();2767 }2768 2743 } 2769 2744 2770 2745 if (!updateLayout || forceFullLayout) { 2771 style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, propertyID, ownedStyle );2746 style = computeRenderStyleForProperty(*styledElement, m_pseudoElementSpecifier, propertyID, ownedStyle, renderer); 2772 2747 renderer = styledRenderer(); 2773 2748 } … … 4411 4386 { 4412 4387 ASSERT(property == CSSPropertyBackground || property == CSSPropertyMask); 4413 if (! styledElement())4388 if (!m_element) 4414 4389 return 0; 4415 4390 4416 4391 std::unique_ptr<RenderStyle> ownedStyle; 4417 const RenderStyle* style = computeRenderStyleForProperty(* styledElement(), m_pseudoElementSpecifier, property, ownedStyle);4392 const RenderStyle* style = computeRenderStyleForProperty(*m_element, m_pseudoElementSpecifier, property, ownedStyle, nullptr); 4418 4393 if (!style) 4419 4394 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.