Commit 50460696 authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

blink: adds feature flag for overflow-clip

And wires up parsing of overflow:clip. This also
makes it so that if clip is set along one axis, it's
set along the other (similar to visible).

BUG=1087667
TEST=none

Change-Id: I3377d2122cf9ec2d5f938c9c67d92778a4337915
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2380314Reviewed-by: default avatarAnders Hartvoll Ruud <andruud@chromium.org>
Reviewed-by: default avatarChris Harrelson <chrishtr@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#803258}
parent d94c399f
......@@ -2852,7 +2852,7 @@
property_methods: ["CSSValueFromComputedStyleInternal"],
field_template: "keyword",
keywords: [
"visible", "hidden", "scroll", "auto", "overlay"
"visible", "hidden", "scroll", "auto", "overlay", "clip"
],
typedom_types: ["Keyword"],
default_value: "visible",
......@@ -2863,7 +2863,7 @@
property_methods: ["CSSValueFromComputedStyleInternal"],
field_template: "keyword",
keywords: [
"visible", "hidden", "scroll", "auto", "overlay",
"visible", "hidden", "scroll", "auto", "overlay", "clip"
],
typedom_types: ["Keyword"],
default_value: "visible",
......
......@@ -130,6 +130,18 @@ const CSSValue* StyleValueToCSSValue(
}
break;
}
case CSSPropertyID::kOverflowX:
case CSSPropertyID::kOverflowY: {
if (!RuntimeEnabledFeatures::OverflowClipEnabled()) {
auto* identifier_value =
DynamicTo<CSSIdentifierValue>(style_value.ToCSSValue());
if (identifier_value &&
identifier_value->GetValueID() == CSSValueID::kClip) {
return nullptr;
}
}
break;
}
case CSSPropertyID::kPaintOrder: {
// level 1 only accepts single keywords
const auto* value = style_value.ToCSSValue();
......
......@@ -97,4 +97,51 @@ TEST_F(StylePropertyMapTest, SetRevertWithFeatureDisabled) {
EXPECT_FALSE(y);
}
TEST_F(StylePropertyMapTest, SetOverflowClipString) {
ScopedOverflowClipForTest overflow_clip_feature_enabler(true);
DummyExceptionStateForTesting exception_state;
HeapVector<CSSStyleValueOrString> clip_string;
clip_string.push_back(CSSStyleValueOrString::FromString(" clip"));
auto* map =
MakeGarbageCollected<InlineStylePropertyMap>(GetDocument().body());
map->set(GetDocument().GetExecutionContext(), "overflow-x", clip_string,
exception_state);
CSSStyleValue* overflow = map->get(GetDocument().GetExecutionContext(),
"overflow-x", exception_state);
ASSERT_TRUE(DynamicTo<CSSKeywordValue>(overflow));
EXPECT_EQ(CSSValueID::kClip,
DynamicTo<CSSKeywordValue>(overflow)->KeywordValueID());
EXPECT_FALSE(exception_state.HadException());
}
TEST_F(StylePropertyMapTest, SetOverflowClipStyleValue) {
ScopedOverflowClipForTest overflow_clip_feature_enabler(true);
DummyExceptionStateForTesting exception_state;
HeapVector<CSSStyleValueOrString> clip_style_value;
clip_style_value.push_back(CSSStyleValueOrString::FromCSSStyleValue(
CSSKeywordValue::Create("clip", exception_state)));
auto* map =
MakeGarbageCollected<InlineStylePropertyMap>(GetDocument().body());
map->set(GetDocument().GetExecutionContext(), "overflow-x", clip_style_value,
exception_state);
CSSStyleValue* overflow = map->get(GetDocument().GetExecutionContext(),
"overflow-x", exception_state);
ASSERT_TRUE(DynamicTo<CSSKeywordValue>(overflow));
EXPECT_EQ(CSSValueID::kClip,
DynamicTo<CSSKeywordValue>(overflow)->KeywordValueID());
EXPECT_FALSE(exception_state.HadException());
}
} // namespace blink
......@@ -673,7 +673,9 @@ bool CSSParserFastPaths::IsValidKeywordPropertyAndValue(
return value_id == CSSValueID::kVisible ||
value_id == CSSValueID::kHidden ||
value_id == CSSValueID::kScroll || value_id == CSSValueID::kAuto ||
value_id == CSSValueID::kOverlay;
value_id == CSSValueID::kOverlay ||
(RuntimeEnabledFeatures::OverflowClipEnabled() &&
value_id == CSSValueID::kClip);
case CSSPropertyID::kBreakAfter:
case CSSPropertyID::kBreakBefore:
return value_id == CSSValueID::kAuto || value_id == CSSValueID::kAvoid ||
......
......@@ -225,4 +225,14 @@ TEST(CSSParserFastPathsTest, ParseColorWithDecimal) {
EXPECT_EQ(Color::kWhite, To<cssvalue::CSSColorValue>(*value).Value());
}
TEST(CSSParserFastPathsTest, IsValidKeywordPropertyAndValueOverflowClip) {
EXPECT_FALSE(CSSParserFastPaths::IsValidKeywordPropertyAndValue(
CSSPropertyID::kOverflowX, CSSValueID::kClip,
CSSParserMode::kHTMLStandardMode));
ScopedOverflowClipForTest overflow_clip_feature_enabler(true);
EXPECT_TRUE(CSSParserFastPaths::IsValidKeywordPropertyAndValue(
CSSPropertyID::kOverflowX, CSSValueID::kClip,
CSSParserMode::kHTMLStandardMode));
}
} // namespace blink
......@@ -1375,6 +1375,9 @@
{
name: "OutOfBlinkCors",
},
{
name: "OverflowClip",
},
{
name: "OverflowIconsForMediaControls",
},
......
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