Commit 828cbae2 authored by Anders Hartvoll Ruud's avatar Anders Hartvoll Ruud Committed by Commit Bot

Don't ignore CascadeOrigin::kNone for <summary> use-counter

I forgot to handle CascadeOrigin::kNone, which means the subsequent
call to priority.GetPosition() would always return zero, and we would
access the wrong value (and possibly crash).

Handle that case, and add a more detailed test which verifies each
origin.

Fixed: 1108019
Change-Id: I298c12ed56231b27f3ce505911db5e3fe0c2a16e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2310535Reviewed-by: default avatarXiaocheng Hu <xiaochengh@chromium.org>
Commit-Queue: Anders Hartvoll Ruud <andruud@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790979}
parent f844efb2
...@@ -945,7 +945,7 @@ void StyleCascade::MaybeUseCountSummaryDisplayBlock() { ...@@ -945,7 +945,7 @@ void StyleCascade::MaybeUseCountSummaryDisplayBlock() {
if (!state_.GetElement().HasTagName(html_names::kSummaryTag)) if (!state_.GetElement().HasTagName(html_names::kSummaryTag))
return; return;
CascadePriority priority = map_.At(CSSPropertyName(CSSPropertyID::kDisplay)); CascadePriority priority = map_.At(CSSPropertyName(CSSPropertyID::kDisplay));
if (priority.GetOrigin() == CascadeOrigin::kUserAgent) if (priority.GetOrigin() <= CascadeOrigin::kUserAgent)
return; return;
const CSSValue* value = ValueAt(match_result_, priority.GetPosition()); const CSSValue* value = ValueAt(match_result_, priority.GetPosition());
if (auto* identifier = DynamicTo<CSSIdentifierValue>(value)) { if (auto* identifier = DynamicTo<CSSIdentifierValue>(value)) {
......
...@@ -3365,4 +3365,53 @@ TEST_F(StyleCascadeTest, MaxSubstitutionTokens) { ...@@ -3365,4 +3365,53 @@ TEST_F(StyleCascadeTest, MaxSubstitutionTokens) {
cascade.ComputedValue("--above-limit-reference-fallback")); cascade.ComputedValue("--above-limit-reference-fallback"));
} }
TEST_F(StyleCascadeTest, UseCountSummary) {
const auto feature = WebFeature::kSummaryElementWithDisplayBlockAuthorRule;
Element* summary = GetDocument().CreateRawElement(html_names::kSummaryTag);
GetDocument().body()->AppendChild(summary);
{
ASSERT_FALSE(GetDocument().IsUseCounted(feature));
TestCascade cascade(GetDocument(), summary);
cascade.Apply();
EXPECT_FALSE(GetDocument().IsUseCounted(feature));
}
{
ASSERT_FALSE(GetDocument().IsUseCounted(feature));
TestCascade cascade(GetDocument(), summary);
cascade.Add("color:green");
cascade.Apply();
EXPECT_FALSE(GetDocument().IsUseCounted(feature));
}
{
ASSERT_FALSE(GetDocument().IsUseCounted(feature));
TestCascade cascade(GetDocument(), summary);
cascade.Add("display:block", CascadeOrigin::kUserAgent);
cascade.Apply();
EXPECT_FALSE(GetDocument().IsUseCounted(feature));
}
{
ASSERT_FALSE(GetDocument().IsUseCounted(feature));
TestCascade cascade(GetDocument(), summary);
cascade.Add("display:block", CascadeOrigin::kUser);
cascade.Apply();
EXPECT_TRUE(GetDocument().IsUseCounted(feature));
GetDocument().ClearUseCounterForTesting(feature);
}
{
ASSERT_FALSE(GetDocument().IsUseCounted(feature));
TestCascade cascade(GetDocument(), summary);
cascade.Add("display:block", CascadeOrigin::kAuthor);
cascade.Apply();
EXPECT_TRUE(GetDocument().IsUseCounted(feature));
GetDocument().ClearUseCounterForTesting(feature);
}
}
} // namespace blink } // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment