Changeset 292582 in webkit
- Timestamp:
- Apr 7, 2022 5:47:15 PM (2 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r292570 r292582 1 2022-04-07 Tim Nguyen <ntim@apple.com> 2 3 [:has() pseudo-class] Support invalidation for :indeterminate pseudo class on <progress> 4 https://bugs.webkit.org/show_bug.cgi?id=238923 5 6 Reviewed by Antti Koivisto. 7 8 * web-platform-tests/css/selectors/invalidation/input-pseudo-classes-in-has-expected.txt: 9 * web-platform-tests/css/selectors/invalidation/input-pseudo-classes-in-has.html: 10 1 11 2022-04-07 Matteo Flores <matteo_flores@apple.com> 2 12 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/input-pseudo-classes-in-has-expected.txt
r292523 r292582 1 1 Check me! 2 2 3 PASS :checked & :indeterminate invalidation 3 PASS :checked & :indeterminate invalidation on <input> 4 PASS :indeterminate invalidation on <progress> 4 5 PASS :disabled invalidation 5 6 PASS :read-only invalidation -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/selectors/invalidation/input-pseudo-classes-in-has.html
r292466 r292582 16 16 .ancestor:has(#numberinput:out-of-range) { color: darkgreen } 17 17 .ancestor:has(#numberinput:required) { color: pink } 18 .ancestor:has(#progress:indeterminate) { color: orange } 18 19 </style> 19 20 <div id=subject class=ancestor> … … 23 24 <input id="radioinput" checked> 24 25 <input id="numberinput" type="number" min="1" max="10" value="5"> 26 <progress id="progress" value="50" max="100"></progress> 25 27 </div> 26 28 <script> … … 48 50 assert_equals(getComputedStyle(subject).color, "rgb(0, 128, 0)", 49 51 "ancestor should be green"); 50 }, ":checked & :indeterminate invalidation"); 52 }, ":checked & :indeterminate invalidation on <input>"); 53 54 test(function() { 55 this.add_cleanup(() => { 56 progress.setAttribute("value", "50"); 57 }); 58 assert_equals(getComputedStyle(subject).color, "rgb(0, 0, 0)", 59 "ancestor should be black"); 60 progress.removeAttribute("value"); 61 assert_equals(getComputedStyle(subject).color, "rgb(255, 165, 0)", 62 "ancestor should be orange"); 63 }, ":indeterminate invalidation on <progress>"); 51 64 52 65 test(function() { -
trunk/Source/WebCore/ChangeLog
r292575 r292582 1 2022-04-07 Tim Nguyen <ntim@apple.com> 2 3 [:has() pseudo-class] Support invalidation for :indeterminate pseudo class on <progress> 4 https://bugs.webkit.org/show_bug.cgi?id=238923 5 6 Reviewed by Antti Koivisto. 7 8 Test: imported/w3c/web-platform-tests/css/selectors/invalidation/input-pseudo-classes-in-has.html 9 10 * html/HTMLProgressElement.cpp: 11 (WebCore::HTMLProgressElement::HTMLProgressElement): 12 (WebCore::HTMLProgressElement::parseAttribute): 13 (WebCore::HTMLProgressElement::didAttachRenderers): 14 (WebCore::HTMLProgressElement::updateDeterminateState): 15 (WebCore::HTMLProgressElement::didElementStateChange): 16 (WebCore::HTMLProgressElement::isDeterminate const): Deleted. 17 * html/HTMLProgressElement.h: 18 1 19 2022-04-07 Nikolas Zimmermann <nzimmermann@igalia.com> 2 20 -
trunk/Source/WebCore/html/HTMLProgressElement.cpp
r283269 r292582 26 26 #include "HTMLParserIdioms.h" 27 27 #include "ProgressShadowElement.h" 28 #include "PseudoClassChangeInvalidation.h" 28 29 #include "RenderProgress.h" 29 30 #include "ShadowRoot.h" … … 42 43 : LabelableElement(tagName, document) 43 44 , m_value(0) 45 , m_isDeterminate(false) 44 46 { 45 47 ASSERT(hasTagName(progressTag)); … … 78 80 void HTMLProgressElement::parseAttribute(const QualifiedName& name, const AtomString& value) 79 81 { 80 if (name == valueAttr) 82 if (name == valueAttr) { 83 updateDeterminateState(); 81 84 didElementStateChange(); 82 else if (name == maxAttr)85 } else if (name == maxAttr) 83 86 didElementStateChange(); 84 87 else … … 88 91 void HTMLProgressElement::didAttachRenderers() 89 92 { 90 if (RenderProgress* render = renderProgress())91 render ->updateFromElement();93 if (RenderProgress* renderer = renderProgress()) 94 renderer->updateFromElement(); 92 95 } 93 96 … … 122 125 } 123 126 124 bool HTMLProgressElement::isDeterminate() const 127 void HTMLProgressElement::updateDeterminateState() 125 128 { 126 return hasAttributeWithoutSynchronization(valueAttr); 129 bool newIsDeterminate = hasAttributeWithoutSynchronization(valueAttr); 130 if (m_isDeterminate == newIsDeterminate) 131 return; 132 Style::PseudoClassChangeInvalidation styleInvalidation(*this, CSSSelector::PseudoClassIndeterminate, !newIsDeterminate); 133 m_isDeterminate = newIsDeterminate; 127 134 } 128 135 129 136 void HTMLProgressElement::didElementStateChange() 130 137 { 131 138 m_value->setWidthPercentage(position() * 100); 132 if (RenderProgress* render = renderProgress()) { 133 bool wasDeterminate = render->isDeterminate(); 134 render->updateFromElement(); 135 if (wasDeterminate != isDeterminate()) 136 invalidateStyleForSubtree(); 137 } 139 if (RenderProgress* renderer = renderProgress()) 140 renderer->updateFromElement(); 138 141 } 139 142 -
trunk/Source/WebCore/html/HTMLProgressElement.h
r246490 r292582 59 59 void didAttachRenderers() final; 60 60 61 void updateDeterminateState(); 61 62 void didElementStateChange(); 62 63 void didAddUserAgentShadowRoot(ShadowRoot&) final; 63 bool isDeterminate() const ;64 bool isDeterminate() const { return m_isDeterminate; }; 64 65 65 66 bool canContainRangeEndPoint() const final { return false; } 66 67 67 68 ProgressValueElement* m_value; 69 bool m_isDeterminate { false }; 68 70 }; 69 71
Note: See TracChangeset
for help on using the changeset viewer.