Title: [270613] trunk
Revision
270613
Author
[email protected]
Date
2020-12-09 22:39:21 -0800 (Wed, 09 Dec 2020)

Log Message

Support overscroll-behavior parsing
https://bugs.webkit.org/show_bug.cgi?id=219305

Reviewed by Simon Fraser.

Based on Frédéric Wang's patch.

LayoutTests/imported/w3c:

Update expectations for overscroll-behavior parsing tests.

* web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
* web-platform-tests/css/css-overscroll-behavior/inheritance-expected.txt:
* web-platform-tests/css/css-overscroll-behavior/overscroll-behavior-logical-expected.txt:
* web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-computed-expected.txt:
* web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-valid-expected.txt:
* web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt:

Source/WebCore:

Support parsing CSS properties: overscroll-behavior, overscroll-behavior-x and overscroll-behavior-y.

Tests: fast/css/overscroll-behavior-invalidate-if-disabled.html
       fast/css/overscroll-behavior-validate-if-enable.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::CSSComputedStyleDeclaration::settings const):
(WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
* css/CSSComputedStyleDeclaration.h:
* css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator OverscrollBehavior const):
* css/CSSProperties.json:
* css/CSSStyleDeclaration.cpp:
(WebCore::CSSStyleDeclaration::settings const):
(WebCore::CSSStyleDeclaration::namedItem):
(WebCore::CSSStyleDeclaration::setNamedItem):
(WebCore::CSSStyleDeclaration::supportedPropertyNames const):
* css/CSSStyleDeclaration.h:
* css/CSSValueKeywords.in:
* css/StyleProperties.cpp:
(WebCore::StyleProperties::getPropertyValue const):
(WebCore::StyleProperties::asText const):
* css/parser/CSSParserContext.cpp:
(WebCore::CSSParserContext::CSSParserContext):
(WebCore::operator==):
* css/parser/CSSParserContext.h:
(WebCore::CSSParserContextHash::hash):
* css/parser/CSSParserFastPaths.cpp:
(WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
(WebCore::CSSParserFastPaths::isKeywordPropertyID):
* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeOverscrollBehavior):
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::CSSPropertyParser::consumeOverscrollBehaviorShorthand):
(WebCore::CSSPropertyParser::parseShorthand):
* css/parser/CSSPropertyParser.h:
* platform/ScrollTypes.h:
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::overscrollBehaviorX const):
(WebCore::RenderStyle::overscrollBehaviorY const):
(WebCore::RenderStyle::setOverscrollBehaviorX):
(WebCore::RenderStyle::setOverscrollBehaviorY):
(WebCore::RenderStyle::initialOverscrollBehaviorX):
(WebCore::RenderStyle::initialOverscrollBehaviorY):
* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator== const):
* rendering/style/StyleRareNonInheritedData.h:

Source/WebKitLegacy/win:

Add an experimental feature flag for overscroll-behavior.

* Interfaces/IWebPreferencesPrivate.idl:
* WebPreferenceKeysPrivate.h:
* WebPreferences.cpp:
(WebPreferences::initializeDefaultSettings):
(WebPreferences::overscrollBehaviorEnabled):
(WebPreferences::setOverscrollBehaviorEnabled):
* WebPreferences.h:
* WebView.cpp:
(WebView::notifyPreferencesChanged):

Source/WTF:

Add an experimental feature flag for overscroll-behavior.

* Scripts/Preferences/WebPreferencesExperimental.yaml:

Tools:

Add support for testing overscroll-behavior parsing.

* DumpRenderTree/TestOptions.cpp:
(WTR::TestOptions::defaults):

LayoutTests:

Test overscrollBehavior's validation when enable or disable OverscrollBehaviorEnabled.

* fast/css/overscroll-behavior-invalidate-if-disabled-expected.txt: Added.
* fast/css/overscroll-behavior-invalidate-if-disabled.html: Added.
* fast/css/overscroll-behavior-validate-if-enable-expected.txt: Added.
* fast/css/overscroll-behavior-validate-if-enable.html: Added.
* platform/ios-13/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
* platform/ios-wk2/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt:
* platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (270612 => 270613)


--- trunk/LayoutTests/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,22 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Test overscrollBehavior's validation when enable or disable OverscrollBehaviorEnabled.
+
+        * fast/css/overscroll-behavior-invalidate-if-disabled-expected.txt: Added.
+        * fast/css/overscroll-behavior-invalidate-if-disabled.html: Added.
+        * fast/css/overscroll-behavior-validate-if-enable-expected.txt: Added.
+        * fast/css/overscroll-behavior-validate-if-enable.html: Added.
+        * platform/ios-13/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
+        * platform/ios-wk2/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt:
+        * platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
+
 2020-12-09  Geoffrey Garen  <[email protected]>
 
         Marked some WPT worklet tests as flaky

Added: trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled-expected.txt (0 => 270613)


--- trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -0,0 +1,11 @@
+Test overscrollBehavior should be invalidated if overscrollBehaviorEnabled is disabled
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'overscrollBehavior' in document.documentElement.style is false
+PASS 'overscroll-behavior' in getComputedStyle(document.documentElement) is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled.html (0 => 270613)


--- trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/overscroll-behavior-invalidate-if-disabled.html	2020-12-10 06:39:21 UTC (rev 270613)
@@ -0,0 +1,16 @@
+<!DOCTYPE html><!-- webkit-test-runner [ OverscrollBehaviorEnabled=false ] -->
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+</head>
+<body>
+<script>
+description("Test overscrollBehavior should be invalidated if overscrollBehaviorEnabled is disabled");
+
+shouldBeFalse("'overscrollBehavior' in document.documentElement.style");
+shouldBeFalse("'overscroll-behavior' in getComputedStyle(document.documentElement)");
+
+</script>
+</body>
+</html>

Added: trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable-expected.txt (0 => 270613)


--- trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -0,0 +1,11 @@
+Test overscrollBehavior should be validated if overscrollBehaviorEnabled is enabled
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'overscrollBehavior' in document.documentElement.style is true
+PASS 'overscroll-behavior' in getComputedStyle(document.documentElement) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable.html (0 => 270613)


--- trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/overscroll-behavior-validate-if-enable.html	2020-12-10 06:39:21 UTC (rev 270613)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src=""
+</head>
+<body>
+<script>
+description("Test overscrollBehavior should be validated if overscrollBehaviorEnabled is enabled");
+
+shouldBeTrue("'overscrollBehavior' in document.documentElement.style");
+shouldBeTrue("'overscroll-behavior' in getComputedStyle(document.documentElement)");
+</script>
+</body>
+</html>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,21 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Update expectations for overscroll-behavior parsing tests.
+
+        * web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt:
+        * web-platform-tests/css/css-overscroll-behavior/inheritance-expected.txt:
+        * web-platform-tests/css/css-overscroll-behavior/overscroll-behavior-logical-expected.txt:
+        * web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-computed-expected.txt:
+        * web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-valid-expected.txt:
+        * web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt:
+
 2020-12-09  Antoine Quint  <[email protected]>
 
         text-decoration-color animation should not be discrete

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -195,6 +195,8 @@
 PASS overflow-wrap
 PASS overflow-x
 PASS overflow-y
+PASS overscroll-behavior-x
+PASS overscroll-behavior-y
 PASS padding-block-end
 PASS padding-block-start
 PASS padding-bottom

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/inheritance-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/inheritance-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/inheritance-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -3,8 +3,8 @@
 FAIL Property overscroll-behavior-block does not inherit assert_true: expected true got false
 FAIL Property overscroll-behavior-inline has initial value auto assert_true: overscroll-behavior-inline doesn't seem to be supported in the computed style expected true got false
 FAIL Property overscroll-behavior-inline does not inherit assert_true: expected true got false
-FAIL Property overscroll-behavior-x has initial value auto assert_true: overscroll-behavior-x doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-x does not inherit assert_true: expected true got false
-FAIL Property overscroll-behavior-y has initial value auto assert_true: overscroll-behavior-y doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-y does not inherit assert_true: expected true got false
+PASS Property overscroll-behavior-x has initial value auto
+PASS Property overscroll-behavior-x does not inherit
+PASS Property overscroll-behavior-y has initial value auto
+PASS Property overscroll-behavior-y does not inherit
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/overscroll-behavior-logical-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/overscroll-behavior-logical-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/overscroll-behavior-logical-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,5 +1,5 @@
 
-FAIL Logical overscroll-behavior maps correctly when element has horizontal-tb writing mode assert_equals: expected (string) "none" but got (undefined) undefined
-FAIL Logical overscroll-behavior maps correctly when element has vertical-rl writing mode assert_equals: expected (string) "contain" but got (undefined) undefined
-FAIL Logical overscroll-behavior maps correctly when element has horizontal-tb writing mode and is not affected by rtl direction assert_equals: expected (string) "none" but got (undefined) undefined
+FAIL Logical overscroll-behavior maps correctly when element has horizontal-tb writing mode assert_equals: expected "none" but got "auto"
+FAIL Logical overscroll-behavior maps correctly when element has vertical-rl writing mode assert_equals: expected "contain" but got "auto"
+FAIL Logical overscroll-behavior maps correctly when element has horizontal-tb writing mode and is not affected by rtl direction assert_equals: expected "none" but got "auto"
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-computed-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-computed-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-computed-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,10 +1,10 @@
 
-FAIL Property overscroll-behavior-x value 'contain' assert_true: overscroll-behavior-x doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-x value 'none' assert_true: overscroll-behavior-x doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-x value 'auto' assert_true: overscroll-behavior-x doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-y value 'contain' assert_true: overscroll-behavior-y doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-y value 'none' assert_true: overscroll-behavior-y doesn't seem to be supported in the computed style expected true got false
-FAIL Property overscroll-behavior-y value 'auto' assert_true: overscroll-behavior-y doesn't seem to be supported in the computed style expected true got false
+PASS Property overscroll-behavior-x value 'contain'
+PASS Property overscroll-behavior-x value 'none'
+PASS Property overscroll-behavior-x value 'auto'
+PASS Property overscroll-behavior-y value 'contain'
+PASS Property overscroll-behavior-y value 'none'
+PASS Property overscroll-behavior-y value 'auto'
 FAIL Property overscroll-behavior-inline value 'contain' assert_true: overscroll-behavior-inline doesn't seem to be supported in the computed style expected true got false
 FAIL Property overscroll-behavior-inline value 'none' assert_true: overscroll-behavior-inline doesn't seem to be supported in the computed style expected true got false
 FAIL Property overscroll-behavior-inline value 'auto' assert_true: overscroll-behavior-inline doesn't seem to be supported in the computed style expected true got false

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-valid-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-valid-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-overscroll-behavior/parsing/overscroll-behavior-valid-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,19 +1,19 @@
 
-FAIL e.style['overscroll-behavior'] = "contain" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "none" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "auto" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "contain none" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "none auto" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "auto contain" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "contain contain" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "none none" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior'] = "auto auto" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-x'] = "contain" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-x'] = "none" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-x'] = "auto" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-y'] = "contain" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-y'] = "none" should set the property value assert_not_equals: property should be set got disallowed value ""
-FAIL e.style['overscroll-behavior-y'] = "auto" should set the property value assert_not_equals: property should be set got disallowed value ""
+PASS e.style['overscroll-behavior'] = "contain" should set the property value
+PASS e.style['overscroll-behavior'] = "none" should set the property value
+PASS e.style['overscroll-behavior'] = "auto" should set the property value
+PASS e.style['overscroll-behavior'] = "contain none" should set the property value
+PASS e.style['overscroll-behavior'] = "none auto" should set the property value
+PASS e.style['overscroll-behavior'] = "auto contain" should set the property value
+PASS e.style['overscroll-behavior'] = "contain contain" should set the property value
+PASS e.style['overscroll-behavior'] = "none none" should set the property value
+PASS e.style['overscroll-behavior'] = "auto auto" should set the property value
+PASS e.style['overscroll-behavior-x'] = "contain" should set the property value
+PASS e.style['overscroll-behavior-x'] = "none" should set the property value
+PASS e.style['overscroll-behavior-x'] = "auto" should set the property value
+PASS e.style['overscroll-behavior-y'] = "contain" should set the property value
+PASS e.style['overscroll-behavior-y'] = "none" should set the property value
+PASS e.style['overscroll-behavior-y'] = "auto" should set the property value
 FAIL e.style['overscroll-behavior-inline'] = "contain" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['overscroll-behavior-inline'] = "none" should set the property value assert_not_equals: property should be set got disallowed value ""
 FAIL e.style['overscroll-behavior-inline'] = "auto" should set the property value assert_not_equals: property should be set got disallowed value ""

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt (270612 => 270613)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -7,5 +7,5 @@
 PASS another cssText order (non-alphabetical order)
 PASS whitespaces in value
 PASS invalid property does not appear
-FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "align-content: normal; align-items: normal; align-self: auto; alignment-baseline: auto; all: ; alt: \"\"; animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; aspect-ratio: auto; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; baseline-shift: baseline; block-size: 0px; border-block-end-color: rgb(255, 0, 0); border-block-end-style: none; border-block-end-width: 0px; border-block-start-color: rgb(255, 0, 0); border-block-start-style:
  none; border-block-start-width: 0px; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0px; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-inline-end-color: rgb(255, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(255, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; buffered
 -rendering: auto; caption-side: top; caret-color: rgb(255, 0, 0); clear: none; clip: auto; clip-path: none; clip-rule: nonzero; color: rgb(255, 0, 0); color-interpolation: sRGB; color-interpolation-filters: linearRGB; color-rendering: auto; color-scheme: auto; column-count: auto; column-fill: balance; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; content: ; counter-increment: none; counter-reset: none; cursor: auto; cx: 0px; cy: 0px; direction: ltr; display: block; dominant-baseline: auto; empty-cells: show; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; filter: none; flex-basis: auto; flex-direction: row; flex-grow: 0; flex-shrink: 1; flex-wrap: nowrap; float: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; font-family: -webkit-standard; font-feature-settings: normal; font-optical-sizing: auto; font-size: 13.333333015441895px; font-stretch: normal; font-style: normal; font-
 synthesis: style weight small-caps; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; glyph-orientation-horizontal: 0deg; glyph-orientation-vertical: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-row-end: auto; grid-row-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; hanging-punctuation: none; height: 0px; image-orientation: from-image; image-rendering: auto; inline-size: 784px; inset-block-end: auto; inset-block-start: auto; inset-inline-end: auto; inset-inline-start: auto; isolation: auto; justify-content: normal; justify-items: normal; justify-self: auto; kerning: 0; left: auto; letter-spacing: normal; lighting-color: rgb(255, 255, 255); line-break: auto; line-height:
  normal; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; marker-end: none; marker-mid: none; marker-start: none; mask: none; mask-type: luminance; math-style: normal; max-block-size: none; max-height: none; max-inline-size: none; max-width: none; min-block-size: 0px; min-height: 0px; min-inline-size: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; opacity: 1; order: 0; orphans: auto; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; padding-block-end: 0px; padding-block-start: 0px; padding-bottom: 0px; padding-inline-end: 0px; padding-inline-start: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; page-break-after: auto; page-b
 reak-before: auto; page-break-inside: auto; paint-order: normal; perspective: none; perspective-origin-x: ; perspective-origin-y: ; pointer-events: auto; position: static; quotes: auto; r: 0px; resize: none; right: auto; rotate: none; row-gap: normal; rx: auto; ry: auto; scale: none; scroll-behavior: auto; scroll-margin-bottom: 0px; scroll-margin-left: 0px; scroll-margin-right: 0px; scroll-margin-top: 0px; scroll-padding-bottom: 0px; scroll-padding-left: 0px; scroll-padding-right: 0px; scroll-padding-top: 0px; scroll-snap-align: none none; scroll-snap-type: none; shape-image-threshold: 0; shape-margin: 0px; shape-outside: none; shape-rendering: auto; size: ; speak-as: normal; stop-color: rgb(0, 0, 0); stop-opacity: 1; stroke: none; stroke-color: rgba(0, 0, 0, 0); stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; tab-size: 8; table-layout: auto; text-align: start; text-anchor: star
 t; text-decoration: none; text-decoration-color: rgb(255, 0, 0); text-decoration-line: none; text-decoration-skip: auto; text-decoration-style: solid; text-decoration-thickness: auto; text-indent: 0px; text-orientation: mixed; text-overflow: clip; text-rendering: auto; text-shadow: none; text-transform: none; text-underline-offset: auto; text-underline-position: auto; top: auto; touch-action: auto; transform: none; transform-box: view-box; transform-origin-x: ; transform-origin-y: ; transform-origin-z: ; transform-style: flat; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; translate: none; unicode-bidi: normal; vector-effect: none; vertical-align: baseline; visibility: visible; white-space: normal; widows: auto; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; word-wrap: normal; writing-mode: horizontal-tb; x: 0px; y: 0px; z-index: auto; zoom: 1; -apple-color-filter: none; -apple-pay-button-style: bla
 ck; -apple-pay-button-type: plain; -apple-trailing-word: auto; -webkit-appearance: none; -webkit-backdrop-filter: none; -webkit-backface-visibility: visible; -webkit-background-clip: border-box; -webkit-background-composite: source-over; -webkit-background-origin: padding-box; -webkit-background-size: auto; -webkit-border-fit: border; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-flex-group: 1; -webkit-box-lines: single; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; -webkit-box-shadow: none; -webkit-column-axis: auto; -webkit-column-break-after: auto; -webkit-column-break-before: auto; -webkit-column-break-inside: auto; -webkit-column-progression: normal; -webkit-cursor-visibility: auto; -webkit-font-kerning: auto; -webkit-font-sm
 oothing: auto; -webkit-hyphenate-character: auto; -webkit-hyphenate-limit-after: auto; -webkit-hyphenate-limit-before: auto; -webkit-hyphenate-limit-lines: no-limit; -webkit-hyphens: manual; -webkit-initial-letter: normal; -webkit-line-align: none; -webkit-line-box-contain: block inline replaced; -webkit-line-clamp: none; -webkit-line-grid: none; -webkit-line-snap: none; -webkit-locale: auto; -webkit-margin-after-collapse: collapse; -webkit-margin-before-collapse: collapse; -webkit-margin-bottom-collapse: collapse; -webkit-margin-top-collapse: collapse; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0px; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position-x: 0%; -webkit-mask-position-y: 0%; -webkit-mask-repeat: repeat; -webki
 t-mask-size: auto; -webkit-mask-source-type: alpha; -webkit-nbsp-mode: normal; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; -webkit-ruby-position: before; -webkit-text-combine: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: mixed; -webkit-text-security: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; -webkit-text-zoom: normal; -webkit-transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; -webkit-user-select: text;"
+FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "align-content: normal; align-items: normal; align-self: auto; alignment-baseline: auto; all: ; alt: \"\"; animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; aspect-ratio: auto; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; baseline-shift: baseline; block-size: 0px; border-block-end-color: rgb(255, 0, 0); border-block-end-style: none; border-block-end-width: 0px; border-block-start-color: rgb(255, 0, 0); border-block-start-style: 
 none; border-block-start-width: 0px; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0px; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-inline-end-color: rgb(255, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(255, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; buffered-
 rendering: auto; caption-side: top; caret-color: rgb(255, 0, 0); clear: none; clip: auto; clip-path: none; clip-rule: nonzero; color: rgb(255, 0, 0); color-interpolation: sRGB; color-interpolation-filters: linearRGB; color-rendering: auto; color-scheme: auto; column-count: auto; column-fill: balance; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; content: ; counter-increment: none; counter-reset: none; cursor: auto; cx: 0px; cy: 0px; direction: ltr; display: block; dominant-baseline: auto; empty-cells: show; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; filter: none; flex-basis: auto; flex-direction: row; flex-grow: 0; flex-shrink: 1; flex-wrap: nowrap; float: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; font-family: -webkit-standard; font-feature-settings: normal; font-optical-sizing: auto; font-size: 13.333333015441895px; font-stretch: normal; font-style: normal; font-s
 ynthesis: style weight small-caps; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; glyph-orientation-horizontal: 0deg; glyph-orientation-vertical: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-row-end: auto; grid-row-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; hanging-punctuation: none; height: 0px; image-orientation: from-image; image-rendering: auto; inline-size: 784px; inset-block-end: auto; inset-block-start: auto; inset-inline-end: auto; inset-inline-start: auto; isolation: auto; justify-content: normal; justify-items: normal; justify-self: auto; kerning: 0; left: auto; letter-spacing: normal; lighting-color: rgb(255, 255, 255); line-break: auto; line-height: 
 normal; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; marker-end: none; marker-mid: none; marker-start: none; mask: none; mask-type: luminance; math-style: normal; max-block-size: none; max-height: none; max-inline-size: none; max-width: none; min-block-size: 0px; min-height: 0px; min-inline-size: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; opacity: 1; order: 0; orphans: auto; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; overscroll-behavior-x: auto; overscroll-behavior-y: auto; padding-block-end: 0px; padding-block-start: 0px; padding-bottom: 0px; padding-inline-end: 0px; padding-inline-start: 0px; padding-left: 0px; padding-rig
 ht: 0px; padding-top: 0px; page-break-after: auto; page-break-before: auto; page-break-inside: auto; paint-order: normal; perspective: none; perspective-origin-x: ; perspective-origin-y: ; pointer-events: auto; position: static; quotes: auto; r: 0px; resize: none; right: auto; rotate: none; row-gap: normal; rx: auto; ry: auto; scale: none; scroll-behavior: auto; scroll-margin-bottom: 0px; scroll-margin-left: 0px; scroll-margin-right: 0px; scroll-margin-top: 0px; scroll-padding-bottom: 0px; scroll-padding-left: 0px; scroll-padding-right: 0px; scroll-padding-top: 0px; scroll-snap-align: none none; scroll-snap-type: none; shape-image-threshold: 0; shape-margin: 0px; shape-outside: none; shape-rendering: auto; size: ; speak-as: normal; stop-color: rgb(0, 0, 0); stop-opacity: 1; stroke: none; stroke-color: rgba(0, 0, 0, 0); stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; tab-size: 8;
  table-layout: auto; text-align: start; text-anchor: start; text-decoration: none; text-decoration-color: rgb(255, 0, 0); text-decoration-line: none; text-decoration-skip: auto; text-decoration-style: solid; text-decoration-thickness: auto; text-indent: 0px; text-orientation: mixed; text-overflow: clip; text-rendering: auto; text-shadow: none; text-transform: none; text-underline-offset: auto; text-underline-position: auto; top: auto; touch-action: auto; transform: none; transform-box: view-box; transform-origin-x: ; transform-origin-y: ; transform-origin-z: ; transform-style: flat; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; translate: none; unicode-bidi: normal; vector-effect: none; vertical-align: baseline; visibility: visible; white-space: normal; widows: auto; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; word-wrap: normal; writing-mode: horizontal-tb; x: 0px; y: 0px; z-index: auto; zoom: 1
 ; -apple-color-filter: none; -apple-pay-button-style: black; -apple-pay-button-type: plain; -apple-trailing-word: auto; -webkit-appearance: none; -webkit-backdrop-filter: none; -webkit-backface-visibility: visible; -webkit-background-clip: border-box; -webkit-background-composite: source-over; -webkit-background-origin: padding-box; -webkit-background-size: auto; -webkit-border-fit: border; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-flex-group: 1; -webkit-box-lines: single; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; -webkit-box-shadow: none; -webkit-column-axis: auto; -webkit-column-break-after: auto; -webkit-column-break-before: auto; -webkit-column-break-inside: auto; -webkit-column-progression: normal; -webkit-cursor-visi
 bility: auto; -webkit-font-kerning: auto; -webkit-font-smoothing: auto; -webkit-hyphenate-character: auto; -webkit-hyphenate-limit-after: auto; -webkit-hyphenate-limit-before: auto; -webkit-hyphenate-limit-lines: no-limit; -webkit-hyphens: manual; -webkit-initial-letter: normal; -webkit-line-align: none; -webkit-line-box-contain: block inline replaced; -webkit-line-clamp: none; -webkit-line-grid: none; -webkit-line-snap: none; -webkit-locale: auto; -webkit-margin-after-collapse: collapse; -webkit-margin-before-collapse: collapse; -webkit-margin-bottom-collapse: collapse; -webkit-margin-top-collapse: collapse; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0px; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position-x: 0%; -webkit
 -mask-position-y: 0%; -webkit-mask-repeat: repeat; -webkit-mask-size: auto; -webkit-mask-source-type: alpha; -webkit-nbsp-mode: normal; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; -webkit-ruby-position: before; -webkit-text-combine: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: mixed; -webkit-text-security: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; -webkit-text-zoom: normal; -webkit-transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; -webkit-user-select: text;"
 

Modified: trunk/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (270612 => 270613)


--- trunk/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/platform/ios/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -194,6 +194,8 @@
 PASS overflow-wrap
 PASS overflow-x
 PASS overflow-y
+PASS overscroll-behavior-x 
+PASS overscroll-behavior-y 
 PASS padding-block-end
 PASS padding-block-start
 PASS padding-bottom

Modified: trunk/LayoutTests/platform/ios-13/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt (270612 => 270613)


--- trunk/LayoutTests/platform/ios-13/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/platform/ios-13/imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -194,6 +194,8 @@
 PASS overflow-wrap
 PASS overflow-x
 PASS overflow-y
+PASS overscroll-behavior-x
+PASS overscroll-behavior-y
 PASS padding-block-end
 PASS padding-block-start
 PASS padding-bottom

Modified: trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt (270612 => 270613)


--- trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/LayoutTests/platform/ios-wk2/imported/w3c/web-platform-tests/css/cssom/cssstyledeclaration-csstext-expected.txt	2020-12-10 06:39:21 UTC (rev 270613)
@@ -7,5 +7,5 @@
 PASS another cssText order (non-alphabetical order)
 PASS whitespaces in value
 PASS invalid property does not appear
-FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "align-content: normal; align-items: normal; align-self: auto; alignment-baseline: auto; all: ; alt: \"\"; animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; aspect-ratio: auto; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; baseline-shift: baseline; block-size: 0px; border-block-end-color: rgb(255, 0, 0); border-block-end-style: none; border-block-end-width: 0px; border-block-start-color: rgb(255, 0, 0); border-block-start-style:
  none; border-block-start-width: 0px; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0px; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-inline-end-color: rgb(255, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(255, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; buffered
 -rendering: auto; caption-side: top; caret-color: rgb(255, 0, 0); clear: none; clip: auto; clip-path: none; clip-rule: nonzero; color: rgb(255, 0, 0); color-interpolation: sRGB; color-interpolation-filters: linearRGB; color-rendering: auto; color-scheme: auto; column-count: auto; column-fill: balance; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; content: ; counter-increment: none; counter-reset: none; cursor: auto; cx: 0px; cy: 0px; direction: ltr; display: block; dominant-baseline: auto; empty-cells: show; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; filter: none; flex-basis: auto; flex-direction: row; flex-grow: 0; flex-shrink: 1; flex-wrap: nowrap; float: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; font-family: -webkit-standard; font-feature-settings: normal; font-optical-sizing: auto; font-size: 13.333333015441895px; font-stretch: normal; font-style: normal; font-
 synthesis: style weight small-caps; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; glyph-orientation-horizontal: 0deg; glyph-orientation-vertical: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-row-end: auto; grid-row-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; hanging-punctuation: none; height: 0px; image-orientation: from-image; image-rendering: auto; inline-size: 784px; inset-block-end: auto; inset-block-start: auto; inset-inline-end: auto; inset-inline-start: auto; isolation: auto; justify-content: normal; justify-items: normal; justify-self: auto; kerning: 0; left: auto; letter-spacing: normal; lighting-color: rgb(255, 255, 255); line-break: auto; line-height:
  normal; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; marker-end: none; marker-mid: none; marker-start: none; mask: none; mask-type: luminance; math-style: normal; max-block-size: none; max-height: none; max-inline-size: none; max-width: none; min-block-size: 0px; min-height: 0px; min-inline-size: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; opacity: 1; order: 0; orphans: auto; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; padding-block-end: 0px; padding-block-start: 0px; padding-bottom: 0px; padding-inline-end: 0px; padding-inline-start: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; page-break-after: auto; page-b
 reak-before: auto; page-break-inside: auto; paint-order: normal; perspective: none; perspective-origin-x: ; perspective-origin-y: ; pointer-events: auto; position: static; quotes: auto; r: 0px; resize: none; right: auto; rotate: none; row-gap: normal; rx: auto; ry: auto; scale: none; scroll-behavior: auto; scroll-margin-bottom: 0px; scroll-margin-left: 0px; scroll-margin-right: 0px; scroll-margin-top: 0px; scroll-padding-bottom: 0px; scroll-padding-left: 0px; scroll-padding-right: 0px; scroll-padding-top: 0px; scroll-snap-align: none none; scroll-snap-type: none; shape-image-threshold: 0; shape-margin: 0px; shape-outside: none; shape-rendering: auto; size: ; speak-as: normal; stop-color: rgb(0, 0, 0); stop-opacity: 1; stroke: none; stroke-color: rgba(0, 0, 0, 0); stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; tab-size: 8; table-layout: auto; text-align: start; text-anchor: star
 t; text-decoration: none; text-decoration-color: rgb(255, 0, 0); text-decoration-line: none; text-decoration-skip: auto; text-decoration-style: solid; text-decoration-thickness: auto; text-indent: 0px; text-orientation: mixed; text-overflow: clip; text-rendering: auto; text-shadow: none; text-transform: none; text-underline-offset: auto; text-underline-position: auto; top: auto; touch-action: auto; transform: none; transform-box: view-box; transform-origin-x: ; transform-origin-y: ; transform-origin-z: ; transform-style: flat; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; translate: none; unicode-bidi: normal; vector-effect: none; vertical-align: baseline; visibility: visible; white-space: normal; widows: auto; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; word-wrap: normal; writing-mode: horizontal-tb; x: 0px; y: 0px; z-index: auto; zoom: 1; -apple-color-filter: none; -apple-pay-button-style: bla
 ck; -apple-pay-button-type: plain; -apple-trailing-word: auto; -webkit-appearance: none; -webkit-backdrop-filter: none; -webkit-backface-visibility: visible; -webkit-background-clip: border-box; -webkit-background-composite: source-over; -webkit-background-origin: padding-box; -webkit-background-size: auto; -webkit-border-fit: border; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-flex-group: 1; -webkit-box-lines: single; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; -webkit-box-shadow: none; -webkit-column-axis: auto; -webkit-column-break-after: auto; -webkit-column-break-before: auto; -webkit-column-break-inside: auto; -webkit-column-progression: normal; -webkit-cursor-visibility: auto; -webkit-font-kerning: auto; -webkit-font-sm
 oothing: auto; -webkit-hyphenate-character: auto; -webkit-hyphenate-limit-after: auto; -webkit-hyphenate-limit-before: auto; -webkit-hyphenate-limit-lines: no-limit; -webkit-hyphens: manual; -webkit-initial-letter: normal; -webkit-line-align: none; -webkit-line-box-contain: block inline replaced; -webkit-line-clamp: none; -webkit-line-grid: none; -webkit-line-snap: none; -webkit-locale: auto; -webkit-margin-after-collapse: collapse; -webkit-margin-before-collapse: collapse; -webkit-margin-bottom-collapse: collapse; -webkit-margin-top-collapse: collapse; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0px; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position-x: 0%; -webkit-mask-position-y: 0%; -webkit-mask-repeat: repeat; -webki
 t-mask-size: auto; -webkit-mask-source-type: alpha; -webkit-nbsp-mode: normal; -webkit-overflow-scrolling: auto; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; -webkit-ruby-position: before; -webkit-text-combine: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: mixed; -webkit-text-security: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; -webkit-text-zoom: normal; -webkit-touch-callout: default; -webkit-transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; -webkit-user-select: text;"
+FAIL cssText on computed style declaration returns the empty string assert_equals: cssText is empty expected "" but got "align-content: normal; align-items: normal; align-self: auto; alignment-baseline: auto; all: ; alt: \"\"; animation-delay: 0s; animation-direction: normal; animation-duration: 0s; animation-fill-mode: none; animation-iteration-count: 1; animation-name: none; animation-play-state: running; animation-timing-function: ease; aspect-ratio: auto; background-attachment: scroll; background-blend-mode: normal; background-clip: border-box; background-color: rgba(0, 0, 0, 0); background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; baseline-shift: baseline; block-size: 0px; border-block-end-color: rgb(255, 0, 0); border-block-end-style: none; border-block-end-width: 0px; border-block-start-color: rgb(255, 0, 0); border-block-start-style: 
 none; border-block-start-width: 0px; border-bottom-color: rgb(255, 0, 0); border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-bottom-style: none; border-bottom-width: 0px; border-collapse: separate; border-image-outset: 0px; border-image-repeat: stretch; border-image-slice: 100%; border-image-source: none; border-image-width: 1; border-inline-end-color: rgb(255, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(255, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(255, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(255, 0, 0); border-right-style: none; border-right-width: 0px; border-top-color: rgb(255, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-top-style: none; border-top-width: 0px; bottom: auto; box-shadow: none; box-sizing: content-box; break-after: auto; break-before: auto; break-inside: auto; buffered-
 rendering: auto; caption-side: top; caret-color: rgb(255, 0, 0); clear: none; clip: auto; clip-path: none; clip-rule: nonzero; color: rgb(255, 0, 0); color-interpolation: sRGB; color-interpolation-filters: linearRGB; color-rendering: auto; color-scheme: auto; column-count: auto; column-fill: balance; column-gap: normal; column-rule-color: rgb(255, 0, 0); column-rule-style: none; column-rule-width: 0px; column-span: none; column-width: auto; content: ; counter-increment: none; counter-reset: none; cursor: auto; cx: 0px; cy: 0px; direction: ltr; display: block; dominant-baseline: auto; empty-cells: show; fill: rgb(0, 0, 0); fill-opacity: 1; fill-rule: nonzero; filter: none; flex-basis: auto; flex-direction: row; flex-grow: 0; flex-shrink: 1; flex-wrap: nowrap; float: none; flood-color: rgb(0, 0, 0); flood-opacity: 1; font-family: -webkit-standard; font-feature-settings: normal; font-optical-sizing: auto; font-size: 13.333333015441895px; font-stretch: normal; font-style: normal; font-s
 ynthesis: style weight small-caps; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; font-weight: normal; glyph-orientation-horizontal: 0deg; glyph-orientation-vertical: auto; grid-auto-columns: auto; grid-auto-flow: row; grid-auto-rows: auto; grid-column-end: auto; grid-column-start: auto; grid-row-end: auto; grid-row-start: auto; grid-template-areas: none; grid-template-columns: none; grid-template-rows: none; hanging-punctuation: none; height: 0px; image-orientation: from-image; image-rendering: auto; inline-size: 784px; inset-block-end: auto; inset-block-start: auto; inset-inline-end: auto; inset-inline-start: auto; isolation: auto; justify-content: normal; justify-items: normal; justify-self: auto; kerning: 0; left: auto; letter-spacing: normal; lighting-color: rgb(255, 255, 255); line-break: auto; line-height: 
 normal; list-style-image: none; list-style-position: outside; list-style-type: disc; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; marker-end: none; marker-mid: none; marker-start: none; mask: none; mask-type: luminance; math-style: normal; max-block-size: none; max-height: none; max-inline-size: none; max-width: none; min-block-size: 0px; min-height: 0px; min-inline-size: 0px; min-width: 0px; mix-blend-mode: normal; object-fit: fill; object-position: 50% 50%; opacity: 1; order: 0; orphans: auto; outline-color: rgb(255, 0, 0); outline-offset: 0px; outline-style: none; outline-width: 0px; overflow-wrap: normal; overflow-x: visible; overflow-y: visible; overscroll-behavior-x: auto; overscroll-behavior-y: auto; padding-block-end: 0px; padding-block-start: 0px; padding-bottom: 0px; padding-inline-end: 0px; padding-inline-start: 0px; padding-left: 0px; padding-rig
 ht: 0px; padding-top: 0px; page-break-after: auto; page-break-before: auto; page-break-inside: auto; paint-order: normal; perspective: none; perspective-origin-x: ; perspective-origin-y: ; pointer-events: auto; position: static; quotes: auto; r: 0px; resize: none; right: auto; rotate: none; row-gap: normal; rx: auto; ry: auto; scale: none; scroll-behavior: auto; scroll-margin-bottom: 0px; scroll-margin-left: 0px; scroll-margin-right: 0px; scroll-margin-top: 0px; scroll-padding-bottom: 0px; scroll-padding-left: 0px; scroll-padding-right: 0px; scroll-padding-top: 0px; scroll-snap-align: none none; scroll-snap-type: none; shape-image-threshold: 0; shape-margin: 0px; shape-outside: none; shape-rendering: auto; size: ; speak-as: normal; stop-color: rgb(0, 0, 0); stop-opacity: 1; stroke: none; stroke-color: rgba(0, 0, 0, 0); stroke-dasharray: none; stroke-dashoffset: 0px; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; stroke-opacity: 1; stroke-width: 1px; tab-size: 8;
  table-layout: auto; text-align: start; text-anchor: start; text-decoration: none; text-decoration-color: rgb(255, 0, 0); text-decoration-line: none; text-decoration-skip: auto; text-decoration-style: solid; text-decoration-thickness: auto; text-indent: 0px; text-orientation: mixed; text-overflow: clip; text-rendering: auto; text-shadow: none; text-transform: none; text-underline-offset: auto; text-underline-position: auto; top: auto; touch-action: auto; transform: none; transform-box: view-box; transform-origin-x: ; transform-origin-y: ; transform-origin-z: ; transform-style: flat; transition-delay: 0s; transition-duration: 0s; transition-property: all; transition-timing-function: ease; translate: none; unicode-bidi: normal; vector-effect: none; vertical-align: baseline; visibility: visible; white-space: normal; widows: auto; width: 784px; will-change: auto; word-break: normal; word-spacing: 0px; word-wrap: normal; writing-mode: horizontal-tb; x: 0px; y: 0px; z-index: auto; zoom: 1
 ; -apple-color-filter: none; -apple-pay-button-style: black; -apple-pay-button-type: plain; -apple-trailing-word: auto; -webkit-appearance: none; -webkit-backdrop-filter: none; -webkit-backface-visibility: visible; -webkit-background-clip: border-box; -webkit-background-composite: source-over; -webkit-background-origin: padding-box; -webkit-background-size: auto; -webkit-border-fit: border; -webkit-border-horizontal-spacing: 0px; -webkit-border-image: none; -webkit-border-vertical-spacing: 0px; -webkit-box-align: stretch; -webkit-box-decoration-break: slice; -webkit-box-direction: normal; -webkit-box-flex: 0; -webkit-box-flex-group: 1; -webkit-box-lines: single; -webkit-box-ordinal-group: 1; -webkit-box-orient: horizontal; -webkit-box-pack: start; -webkit-box-reflect: none; -webkit-box-shadow: none; -webkit-column-axis: auto; -webkit-column-break-after: auto; -webkit-column-break-before: auto; -webkit-column-break-inside: auto; -webkit-column-progression: normal; -webkit-cursor-visi
 bility: auto; -webkit-font-kerning: auto; -webkit-font-smoothing: auto; -webkit-hyphenate-character: auto; -webkit-hyphenate-limit-after: auto; -webkit-hyphenate-limit-before: auto; -webkit-hyphenate-limit-lines: no-limit; -webkit-hyphens: manual; -webkit-initial-letter: normal; -webkit-line-align: none; -webkit-line-box-contain: block inline replaced; -webkit-line-clamp: none; -webkit-line-grid: none; -webkit-line-snap: none; -webkit-locale: auto; -webkit-margin-after-collapse: collapse; -webkit-margin-before-collapse: collapse; -webkit-margin-bottom-collapse: collapse; -webkit-margin-top-collapse: collapse; -webkit-mask-box-image: none; -webkit-mask-box-image-outset: 0px; -webkit-mask-box-image-repeat: stretch; -webkit-mask-box-image-slice: 0 fill; -webkit-mask-box-image-source: none; -webkit-mask-box-image-width: auto; -webkit-mask-clip: border-box; -webkit-mask-composite: source-over; -webkit-mask-image: none; -webkit-mask-origin: border-box; -webkit-mask-position-x: 0%; -webkit
 -mask-position-y: 0%; -webkit-mask-repeat: repeat; -webkit-mask-size: auto; -webkit-mask-source-type: alpha; -webkit-nbsp-mode: normal; -webkit-overflow-scrolling: auto; -webkit-print-color-adjust: economy; -webkit-rtl-ordering: logical; -webkit-ruby-position: before; -webkit-text-combine: none; -webkit-text-emphasis-color: rgb(255, 0, 0); -webkit-text-emphasis-position: over right; -webkit-text-emphasis-style: none; -webkit-text-fill-color: rgb(255, 0, 0); -webkit-text-orientation: mixed; -webkit-text-security: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-color: rgb(255, 0, 0); -webkit-text-stroke-width: 0px; -webkit-text-zoom: normal; -webkit-touch-callout: default; -webkit-transform-style: flat; -webkit-user-drag: auto; -webkit-user-modify: read-only; -webkit-user-select: text;"
 

Modified: trunk/Source/WTF/ChangeLog (270612 => 270613)


--- trunk/Source/WTF/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WTF/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,16 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Add an experimental feature flag for overscroll-behavior.
+
+        * Scripts/Preferences/WebPreferencesExperimental.yaml:
+
 2020-12-09  Chris Dumez  <[email protected]>
 
         Turn on HAVE(SYSTEM_FEATURE_FLAGS) on WatchOS and TvOS

Modified: trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml (270612 => 270613)


--- trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml	2020-12-10 06:39:21 UTC (rev 270613)
@@ -591,6 +591,18 @@
     WebCore:
       default: false
 
+OverscrollBehaviorEnabled:
+  type: bool
+  humanReadableName: "CSS Overscroll Behavior"
+  humanReadableDescription: "Enable CSS overscroll-behavior"
+  defaultValue:
+    WebKitLegacy:
+      default: false
+    WebKit:
+      default: false
+    WebCore:
+      default: false
+
 PageAtRuleSupportEnabled:
   type: bool
   humanReadableName: "@page CSS at-rule support"

Modified: trunk/Source/WebCore/ChangeLog (270612 => 270613)


--- trunk/Source/WebCore/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,62 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Support parsing CSS properties: overscroll-behavior, overscroll-behavior-x and overscroll-behavior-y.
+
+        Tests: fast/css/overscroll-behavior-invalidate-if-disabled.html
+               fast/css/overscroll-behavior-validate-if-enable.html
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::CSSComputedStyleDeclaration::settings const):
+        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
+        * css/CSSComputedStyleDeclaration.h:
+        * css/CSSPrimitiveValueMappings.h:
+        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+        (WebCore::CSSPrimitiveValue::operator OverscrollBehavior const):
+        * css/CSSProperties.json:
+        * css/CSSStyleDeclaration.cpp:
+        (WebCore::CSSStyleDeclaration::settings const):
+        (WebCore::CSSStyleDeclaration::namedItem):
+        (WebCore::CSSStyleDeclaration::setNamedItem):
+        (WebCore::CSSStyleDeclaration::supportedPropertyNames const):
+        * css/CSSStyleDeclaration.h:
+        * css/CSSValueKeywords.in:
+        * css/StyleProperties.cpp:
+        (WebCore::StyleProperties::getPropertyValue const):
+        (WebCore::StyleProperties::asText const):
+        * css/parser/CSSParserContext.cpp:
+        (WebCore::CSSParserContext::CSSParserContext):
+        (WebCore::operator==):
+        * css/parser/CSSParserContext.h:
+        (WebCore::CSSParserContextHash::hash):
+        * css/parser/CSSParserFastPaths.cpp:
+        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
+        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeOverscrollBehavior):
+        (WebCore::CSSPropertyParser::parseSingleValue):
+        (WebCore::CSSPropertyParser::consumeOverscrollBehaviorShorthand):
+        (WebCore::CSSPropertyParser::parseShorthand):
+        * css/parser/CSSPropertyParser.h:
+        * platform/ScrollTypes.h:
+        * rendering/style/RenderStyle.h:
+        (WebCore::RenderStyle::overscrollBehaviorX const):
+        (WebCore::RenderStyle::overscrollBehaviorY const):
+        (WebCore::RenderStyle::setOverscrollBehaviorX):
+        (WebCore::RenderStyle::setOverscrollBehaviorY):
+        (WebCore::RenderStyle::initialOverscrollBehaviorX):
+        (WebCore::RenderStyle::initialOverscrollBehaviorY):
+        * rendering/style/StyleRareNonInheritedData.cpp:
+        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
+        (WebCore::StyleRareNonInheritedData::operator== const):
+        * rendering/style/StyleRareNonInheritedData.h:
+
 2020-12-09  Peng Liu  <[email protected]>
 
         [Media in GPU Process][MSE] Implement basic video playback

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -2258,6 +2258,11 @@
     return ComputedStyleExtractor(m_element.ptr(), m_allowVisitedStyle, m_pseudoElementSpecifier).copyProperties();
 }
 
+const Settings* CSSComputedStyleDeclaration::settings() const
+{
+    return &m_element->document().settings();
+}
+
 static inline bool hasValidStyleForProperty(Element& element, CSSPropertyID propertyID)
 {
     if (element.styleValidity() != Style::Validity::Valid)
@@ -3138,6 +3143,18 @@
             return cssValuePool.createValue(style.overflowX());
         case CSSPropertyOverflowY:
             return cssValuePool.createValue(style.overflowY());
+        case CSSPropertyOverscrollBehavior:
+            if (renderer && !renderer->settings().overscrollBehaviorEnabled())
+                return nullptr;
+            return cssValuePool.createValue(std::max(style.overscrollBehaviorX(), style.overscrollBehaviorY()));
+        case CSSPropertyOverscrollBehaviorX:
+            if (renderer && !renderer->settings().overscrollBehaviorEnabled())
+                return nullptr;
+            return cssValuePool.createValue(style.overscrollBehaviorX());
+        case CSSPropertyOverscrollBehaviorY:
+            if (renderer && !renderer->settings().overscrollBehaviorEnabled())
+                return nullptr;
+            return cssValuePool.createValue(style.overscrollBehaviorY());
         case CSSPropertyPaddingTop:
             return zoomAdjustedPaddingOrMarginPixelValue<&RenderStyle::paddingTop, &RenderBoxModelObject::computedCSSPaddingTop>(style, renderer);
         case CSSPropertyPaddingRight:

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.h (270612 => 270613)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -138,6 +138,8 @@
 
     RefPtr<CSSValue> getPropertyCSSValue(CSSPropertyID, EUpdateLayout = UpdateLayout) const;
 
+    const Settings* settings() const final;
+
     mutable Ref<Element> m_element;
     PseudoId m_pseudoElementSpecifier;
     bool m_allowVisitedStyle;

Modified: trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h (270612 => 270613)


--- trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -39,6 +39,7 @@
 #include "LineClampValue.h"
 #include "RenderStyleConstants.h"
 #include "SVGRenderStyleDefs.h"
+#include "ScrollTypes.h"
 #include "TextFlags.h"
 #include "ThemeTypes.h"
 #include "TouchAction.h"
@@ -2206,6 +2207,42 @@
     return Overflow::Visible;
 }
 
+template<> inline CSSPrimitiveValue::CSSPrimitiveValue(OverscrollBehavior behavior)
+    : CSSValue(PrimitiveClass)
+{
+    setPrimitiveUnitType(CSSUnitType::CSS_VALUE_ID);
+    switch (behavior) {
+    case OverscrollBehavior::Contain:
+        m_value.valueID = CSSValueContain;
+        break;
+    case OverscrollBehavior::None:
+        m_value.valueID = CSSValueNone;
+        break;
+    case OverscrollBehavior::Auto:
+        m_value.valueID = CSSValueAuto;
+        break;
+    }
+}
+
+template<> inline CSSPrimitiveValue::operator OverscrollBehavior() const
+{
+    ASSERT(isValueID());
+
+    switch (m_value.valueID) {
+    case CSSValueContain:
+        return OverscrollBehavior::Contain;
+    case CSSValueNone:
+        return OverscrollBehavior::None;
+    case CSSValueAuto:
+        return OverscrollBehavior::Auto;
+    default:
+        break;
+    }
+
+    ASSERT_NOT_REACHED();
+    return OverscrollBehavior::Auto;
+}
+
 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(BreakBetween e)
     : CSSValue(PrimitiveClass)
 {

Modified: trunk/Source/WebCore/css/CSSProperties.json (270612 => 270613)


--- trunk/Source/WebCore/css/CSSProperties.json	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSProperties.json	2020-12-10 06:39:21 UTC (rev 270613)
@@ -3294,6 +3294,53 @@
                 "url": "https://www.w3.org/TR/css-overflow-3/#propdef-overflow-y"
             }
         },
+        "overscroll-behavior": {
+            "codegen-properties": {
+                "longhands": [
+                    "overscroll-behavior-x",
+                    "overscroll-behavior-y"
+                ],
+                "settings-flag": "overscrollBehavior"
+            },
+            "status": {
+                "status": "in development"
+            },
+            "specification": {
+                "url": "https://drafts.csswg.org/css-overscroll-1/#propdef-overscroll-behavior"
+            }
+        },
+        "overscroll-behavior-x": {
+            "values": [
+                "contain",
+                "none",
+                "auto"
+            ],
+            "codegen-properties": {
+                "settings-flag": "overscrollBehavior"
+            },
+            "status": {
+                "status": "in development"
+            },
+            "specification": {
+                "url": "https://drafts.csswg.org/css-overscroll-1/#propdef-overscroll-behavior-x"
+            }
+        },
+        "overscroll-behavior-y": {
+            "values": [
+                "contain",
+                "none",
+                "auto"
+            ],
+            "codegen-properties": {
+                "settings-flag": "overscrollBehavior"
+            },
+            "status": {
+                "status": "in development"
+            },
+            "specification": {
+                "url": "https://drafts.csswg.org/css-overscroll-1/#propdef-overscroll-behavior-y"
+            }
+        },
         "padding": {
             "codegen-properties": {
                 "longhands": [

Modified: trunk/Source/WebCore/css/CSSStyleDeclaration.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/CSSStyleDeclaration.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSStyleDeclaration.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -254,10 +254,14 @@
     return propertyInfoFromJavaScriptCSSPropertyName(propertyName, nullptr).propertyID;
 }
 
+const Settings* CSSStyleDeclaration::settings() const
+{
+    return parentElement() ? &parentElement()->document().settings() : nullptr;
+}
+
 Optional<Variant<String, double>> CSSStyleDeclaration::namedItem(const AtomString& propertyName)
 {
-    auto* settings = parentElement() ? &parentElement()->document().settings() : nullptr;
-    auto propertyInfo = propertyInfoFromJavaScriptCSSPropertyName(propertyName, settings);
+    auto propertyInfo = propertyInfoFromJavaScriptCSSPropertyName(propertyName, settings());
     if (!propertyInfo.propertyID)
         return WTF::nullopt;
 
@@ -279,8 +283,7 @@
 
 ExceptionOr<void> CSSStyleDeclaration::setNamedItem(const AtomString& propertyName, String value, bool& propertySupported)
 {
-    auto* settings = parentElement() ? &parentElement()->document().settings() : nullptr;
-    auto propertyInfo = propertyInfoFromJavaScriptCSSPropertyName(propertyName, settings);
+    auto propertyInfo = propertyInfoFromJavaScriptCSSPropertyName(propertyName, settings());
     if (!propertyInfo.propertyID) {
         propertySupported = false;
         return { };
@@ -310,12 +313,11 @@
 Vector<AtomString> CSSStyleDeclaration::supportedPropertyNames() const
 {
     static unsigned numNames = 0;
-    static const AtomString* const cssPropertyNames = [] {
+    static const AtomString* const cssPropertyNames = [this] {
         String names[numCSSProperties];
         for (int i = 0; i < numCSSProperties; ++i) {
             CSSPropertyID id = static_cast<CSSPropertyID>(firstCSSProperty + i);
-            // FIXME: Should take account for flags in settings().
-            if (isEnabledCSSProperty(id))
+            if (isEnabledCSSProperty(id) && isCSSPropertyEnabledBySettings(id, settings()))
                 names[numNames++] = getJSPropertyName(id);
         }
         std::sort(&names[0], &names[numNames], WTF::codePointCompareLessThan);

Modified: trunk/Source/WebCore/css/CSSStyleDeclaration.h (270612 => 270613)


--- trunk/Source/WebCore/css/CSSStyleDeclaration.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSStyleDeclaration.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -72,6 +72,8 @@
 
     virtual CSSStyleSheet* parentStyleSheet() const { return nullptr; }
 
+    virtual const Settings* settings() const;
+
     // Bindings support.
     Optional<Variant<String, double>> namedItem(const AtomString&);
     ExceptionOr<void> setNamedItem(const AtomString& name, String value, bool& propertySupported);

Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (270612 => 270613)


--- trunk/Source/WebCore/css/CSSValueKeywords.in	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1389,6 +1389,9 @@
 // auto
 smooth
 
+// overscroll-behavior
+// contain
+
 // hanging-punctuation
 allow-end
 first

Modified: trunk/Source/WebCore/css/StyleProperties.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/StyleProperties.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/StyleProperties.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -253,6 +253,8 @@
         return getShorthandValue(webkitMarginCollapseShorthand());
     case CSSPropertyOverflow:
         return get2Values(overflowShorthand());
+    case CSSPropertyOverscrollBehavior:
+        return get2Values(overscrollBehaviorShorthand());
     case CSSPropertyPadding:
         return get4Values(paddingShorthand());
     case CSSPropertyPaddingBlock:
@@ -1152,6 +1154,10 @@
             case CSSPropertyOverflowY:
                 shorthandPropertyID = CSSPropertyOverflow;
                 break;
+            case CSSPropertyOverscrollBehaviorX:
+            case CSSPropertyOverscrollBehaviorY:
+                shorthandPropertyID = CSSPropertyOverscrollBehavior;
+                break;
             case CSSPropertyPaddingTop:
             case CSSPropertyPaddingRight:
             case CSSPropertyPaddingBottom:

Modified: trunk/Source/WebCore/css/parser/CSSParserContext.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/parser/CSSParserContext.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/parser/CSSParserContext.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -76,6 +76,7 @@
 #endif
     deferredCSSParserEnabled = document.settings().deferredCSSParserEnabled();
     scrollBehaviorEnabled = document.settings().CSSOMViewSmoothScrollingEnabled();
+    overscrollBehaviorEnabled = document.settings().overscrollBehaviorEnabled();
     useSystemAppearance = document.page() ? document.page()->useSystemAppearance() : false;
     individualTransformPropertiesEnabled = document.settings().cssIndividualTransformPropertiesEnabled();
     aspectRatioEnabled = document.settings().aspectRatioEnabled();
@@ -106,7 +107,8 @@
         && a.individualTransformPropertiesEnabled == b.individualTransformPropertiesEnabled
         && a.hasDocumentSecurityOrigin == b.hasDocumentSecurityOrigin
         && a.useSystemAppearance == b.useSystemAppearance
-        && a.aspectRatioEnabled == b.aspectRatioEnabled;
+        && a.aspectRatioEnabled == b.aspectRatioEnabled
+        && a.overscrollBehaviorEnabled == b.overscrollBehaviorEnabled;
 }
 
 URL CSSParserContext::completeURL(const String& url) const

Modified: trunk/Source/WebCore/css/parser/CSSParserContext.h (270612 => 270613)


--- trunk/Source/WebCore/css/parser/CSSParserContext.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/parser/CSSParserContext.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -68,6 +68,8 @@
     bool scrollBehaviorEnabled { false };
     bool individualTransformPropertiesEnabled { false };
 
+    bool overscrollBehaviorEnabled { false };
+    
     // This is only needed to support getMatchedCSSRules.
     bool hasDocumentSecurityOrigin { false };
     
@@ -113,7 +115,8 @@
 #endif
             & key.scrollBehaviorEnabled                     << 12
             & key.individualTransformPropertiesEnabled      << 13
-            & key.mode                                      << 14; // Keep this last.
+            & key.overscrollBehaviorEnabled                 << 14
+            & key.mode                                      << 15; // Keep this last.
         hash ^= WTF::intHash(bits);
         return hash;
     }

Modified: trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -685,6 +685,11 @@
         return valueID == CSSValueVisible || valueID == CSSValueHidden || valueID == CSSValueScroll || valueID == CSSValueAuto || valueID == CSSValueOverlay;
     case CSSPropertyOverflowY: // visible | hidden | scroll | auto | overlay | -webkit-paged-x | -webkit-paged-y (overlay is a synonym for auto)
         return valueID == CSSValueVisible || valueID == CSSValueHidden || valueID == CSSValueScroll || valueID == CSSValueAuto || valueID == CSSValueOverlay || valueID == CSSValueWebkitPagedX || valueID == CSSValueWebkitPagedY;
+    case CSSPropertyOverscrollBehaviorX:
+    case CSSPropertyOverscrollBehaviorY:
+        if (!context.overscrollBehaviorEnabled)
+            return false;
+        return valueID == CSSValueAuto || valueID == CSSValueContain || valueID == CSSValueNone;
     case CSSPropertyBreakAfter:
     case CSSPropertyBreakBefore:
         return valueID == CSSValueAuto || valueID == CSSValueAvoid || valueID == CSSValueAvoidPage || valueID == CSSValuePage || valueID == CSSValueLeft || valueID == CSSValueRight || valueID == CSSValueRecto || valueID == CSSValueVerso || valueID == CSSValueAvoidColumn || valueID == CSSValueColumn;
@@ -940,6 +945,8 @@
     case CSSPropertyOverflowWrap:
     case CSSPropertyOverflowX:
     case CSSPropertyOverflowY:
+    case CSSPropertyOverscrollBehaviorX:
+    case CSSPropertyOverscrollBehaviorY:
     case CSSPropertyPointerEvents:
     case CSSPropertyPosition:
     case CSSPropertyResize:

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (270612 => 270613)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -2531,6 +2531,14 @@
     return consumeIdent(range);
 }
 
+static RefPtr<CSSValue> consumeOverscrollBehavior(CSSParserTokenRange& range)
+{
+    auto valueID = range.peek().id();
+    if (valueID != CSSValueAuto && valueID != CSSValueNone && valueID != CSSValueContain)
+        return nullptr;
+    return consumeIdent(range);
+}
+
 static RefPtr<CSSValue> consumeBorderRadiusCorner(CSSParserTokenRange& range, CSSParserMode cssParserMode)
 {
     RefPtr<CSSPrimitiveValue> parsedValue1 = consumeLengthOrPercent(range, cssParserMode, ValueRangeNonNegative);
@@ -4146,6 +4154,11 @@
         if (!m_context.scrollBehaviorEnabled)
             return nullptr;
         return consumeScrollBehavior(m_range);
+    case CSSPropertyOverscrollBehaviorX:
+    case CSSPropertyOverscrollBehaviorY:
+        if (!m_context.overscrollBehaviorEnabled)
+            return nullptr;
+        return consumeOverscrollBehavior(m_range);
     case CSSPropertyClip:
         return consumeClip(m_range, m_context.mode);
     case CSSPropertyTouchAction:
@@ -5752,6 +5765,35 @@
     return true;
 }
 
+bool CSSPropertyParser::consumeOverscrollBehaviorShorthand(bool important)
+{
+    ASSERT(shorthandForProperty(CSSPropertyOverscrollBehavior).length() == 2);
+    if (!m_context.overscrollBehaviorEnabled)
+        return false;
+
+    if (m_range.atEnd())
+        return false;
+
+    RefPtr<CSSValue> overscrollBehaviorX = consumeOverscrollBehavior(m_range);
+    if (!overscrollBehaviorX)
+        return false;
+
+    RefPtr<CSSValue> overscrollBehaviorY;
+    m_range.consumeWhitespace();
+    if (m_range.atEnd())
+        overscrollBehaviorY = overscrollBehaviorX;
+    else {
+        overscrollBehaviorY = consumeOverscrollBehavior(m_range);
+        m_range.consumeWhitespace();
+        if (!m_range.atEnd())
+            return false;
+    }
+
+    addProperty(CSSPropertyOverscrollBehaviorX, CSSPropertyOverscrollBehavior, *overscrollBehaviorX, important);
+    addProperty(CSSPropertyOverscrollBehaviorY, CSSPropertyOverscrollBehavior, *overscrollBehaviorY, important);
+    return true;
+}
+
 bool CSSPropertyParser::parseShorthand(CSSPropertyID property, bool important)
 {
     switch (property) {
@@ -5772,6 +5814,8 @@
     }
     case CSSPropertyOverflow:
         return consumeOverflowShorthand(important);
+    case CSSPropertyOverscrollBehavior:
+        return consumeOverscrollBehaviorShorthand(important);
     case CSSPropertyFont: {
         const CSSParserToken& token = m_range.peek();
         if (token.id() >= CSSValueCaption && token.id() <= CSSValueStatusBar)

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.h (270612 => 270613)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -113,6 +113,8 @@
     bool consumeTransformOrigin(bool important);
     bool consumePerspectiveOrigin(bool important);
 
+    bool consumeOverscrollBehaviorShorthand(bool important);
+
 private:
     // Inputs:
     CSSParserTokenRange m_range;

Modified: trunk/Source/WebCore/platform/ScrollTypes.h (270612 => 270613)


--- trunk/Source/WebCore/platform/ScrollTypes.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/platform/ScrollTypes.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -46,6 +46,12 @@
     Programmatic
 };
 
+enum class OverscrollBehavior : uint8_t {
+    Auto,
+    Contain,
+    None
+};
+
 enum ScrollDirection : uint8_t {
     ScrollUp,
     ScrollDown,

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (270612 => 270613)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -48,6 +48,7 @@
 #include "RoundedRect.h"
 #include "SVGRenderStyle.h"
 #include "ScaleTransformOperation.h"
+#include "ScrollTypes.h"
 #include "ShadowData.h"
 #include "ShapeValue.h"
 #include "StyleBackgroundData.h"
@@ -330,6 +331,9 @@
     Overflow overflowInlineDirection() const { return isHorizontalWritingMode() ? overflowX() : overflowY(); }
     Overflow overflowBlockDirection() const { return isHorizontalWritingMode() ? overflowY() : overflowX(); }
     bool isOverflowVisible() const { return overflowX() == Overflow::Visible || overflowY() == Overflow::Visible; }
+
+    OverscrollBehavior overscrollBehaviorX() const { return static_cast<OverscrollBehavior>(m_rareNonInheritedData->overscrollBehaviorX); }
+    OverscrollBehavior overscrollBehaviorY() const { return static_cast<OverscrollBehavior>(m_rareNonInheritedData->overscrollBehaviorY); }
     
     Visibility visibility() const { return static_cast<Visibility>(m_inheritedFlags.visibility); }
     VerticalAlign verticalAlign() const { return static_cast<VerticalAlign>(m_nonInheritedFlags.verticalAlign); }
@@ -913,6 +917,8 @@
 
     void setOverflowX(Overflow v) { m_nonInheritedFlags.overflowX =  static_cast<unsigned>(v); }
     void setOverflowY(Overflow v) { m_nonInheritedFlags.overflowY = static_cast<unsigned>(v); }
+    void setOverscrollBehaviorX(OverscrollBehavior v) { SET_VAR(m_rareNonInheritedData, overscrollBehaviorX, static_cast<unsigned>(v)); }
+    void setOverscrollBehaviorY(OverscrollBehavior v) { SET_VAR(m_rareNonInheritedData, overscrollBehaviorY, static_cast<unsigned>(v)); }
     void setVisibility(Visibility v) { m_inheritedFlags.visibility = static_cast<unsigned>(v); }
     void setVerticalAlign(VerticalAlign v) { m_nonInheritedFlags.verticalAlign = static_cast<unsigned>(v); }
     void setVerticalAlignLength(Length&& length) { setVerticalAlign(VerticalAlign::Length); SET_VAR(m_boxData, m_verticalAlign, WTFMove(length)); }
@@ -1501,6 +1507,9 @@
     // Initial values for all the properties
     static Overflow initialOverflowX() { return Overflow::Visible; }
     static Overflow initialOverflowY() { return Overflow::Visible; }
+    static OverscrollBehavior initialOverscrollBehaviorX() { return OverscrollBehavior::Auto; }
+    static OverscrollBehavior initialOverscrollBehaviorY() { return OverscrollBehavior::Auto; }
+
     static Clear initialClear() { return Clear::None; }
     static DisplayType initialDisplay() { return DisplayType::Inline; }
     static EUnicodeBidi initialUnicodeBidi() { return UBNormal; }

Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp (270612 => 270613)


--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -59,6 +59,8 @@
 #endif
     , grid(StyleGridData::create())
     , gridItem(StyleGridItemData::create())
+    , overscrollBehaviorX(static_cast<unsigned>(RenderStyle::initialOverscrollBehaviorX()))
+    , overscrollBehaviorY(static_cast<unsigned>(RenderStyle::initialOverscrollBehaviorY()))
     , willChange(RenderStyle::initialWillChange())
     , mask(FillLayer::create(FillLayerType::Mask))
     , maskBoxImage(NinePieceImage::Type::Mask)
@@ -140,6 +142,8 @@
     , scrollSnapType(o.scrollSnapType)
     , scrollSnapAlign(o.scrollSnapAlign)
 #endif
+    , overscrollBehaviorX(o.overscrollBehaviorX)
+    , overscrollBehaviorY(o.overscrollBehaviorY)
     , content(o.content ? o.content->clone() : nullptr)
     , counterDirectives(o.counterDirectives ? makeUnique<CounterDirectiveMap>(*o.counterDirectives) : nullptr)
     , altText(o.altText)
@@ -244,6 +248,8 @@
         && scrollSnapType == o.scrollSnapType
         && scrollSnapAlign == o.scrollSnapAlign
 #endif
+        && overscrollBehaviorX == o.overscrollBehaviorX
+        && overscrollBehaviorY == o.overscrollBehaviorY
         && contentDataEquivalent(o)
         && arePointingToEqualData(counterDirectives, o.counterDirectives)
         && altText == o.altText

Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h (270612 => 270613)


--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -138,6 +138,9 @@
     ScrollSnapAlign scrollSnapAlign;
 #endif
 
+    unsigned overscrollBehaviorX : 2; // OverscrollBehavior
+    unsigned overscrollBehaviorY : 2; // OverscrollBehavior
+
     std::unique_ptr<ContentData> content;
     std::unique_ptr<CounterDirectiveMap> counterDirectives;
     String altText;

Modified: trunk/Source/WebKitLegacy/win/ChangeLog (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,24 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Add an experimental feature flag for overscroll-behavior.
+
+        * Interfaces/IWebPreferencesPrivate.idl:
+        * WebPreferenceKeysPrivate.h:
+        * WebPreferences.cpp:
+        (WebPreferences::initializeDefaultSettings):
+        (WebPreferences::overscrollBehaviorEnabled):
+        (WebPreferences::setOverscrollBehaviorEnabled):
+        * WebPreferences.h:
+        * WebView.cpp:
+        (WebView::notifyPreferencesChanged):
+
 2020-11-30  Chris Dumez  <[email protected]>
 
         sessionStorage should not be cloned when a window is opened with rel=noopener

Modified: trunk/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/Interfaces/IWebPreferencesPrivate.idl	2020-12-10 06:39:21 UTC (rev 270613)
@@ -275,4 +275,6 @@
     HRESULT setStringPreferenceForTesting([in] BSTR key, [in] BSTR value);
     HRESULT speechRecognitionEnabled([out, retval] BOOL* enabled);
     HRESULT setSpeechRecognitionEnabled([in] BOOL enabled);
+    HRESULT overscrollBehaviorEnabled([ out, retval ] BOOL*);
+    HRESULT setOverscrollBehaviorEnabled([in] BOOL enabled);
 }

Modified: trunk/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/WebPreferenceKeysPrivate.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -233,3 +233,5 @@
 #define WebKitCSSIndividualTransformPropertiesEnabledPreferenceKey "WebKitCSSIndividualTransformPropertiesEnabled"
 
 #define WebKitSpeechRecognitionEnabledPreferenceKey "WebKitSpeechRecognitionEnabled"
+
+#define WebKitOverscrollBehaviorEnabledPreferenceKey "WebKitOverscrollBehaviorEnabled"

Modified: trunk/Source/WebKitLegacy/win/WebPreferences.cpp (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/WebPreferences.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/WebPreferences.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -352,6 +352,8 @@
 
     CFDictionaryAddValue(defaults, CFSTR(WebKitSpeechRecognitionEnabledPreferenceKey), kCFBooleanFalse);
 
+    CFDictionaryAddValue(defaults, CFSTR(WebKitOverscrollBehaviorEnabledPreferenceKey), kCFBooleanFalse);
+
     defaultSettings = defaults;
 #endif
 }
@@ -2577,3 +2579,17 @@
     setBoolValue(WebKitSpeechRecognitionEnabledPreferenceKey, enabled);
     return S_OK;
 }
+
+HRESULT WebPreferences::overscrollBehaviorEnabled(_Out_ BOOL* enabled)
+{
+    if (!enabled)
+        return E_POINTER;
+    *enabled = boolValueForKey(WebKitOverscrollBehaviorEnabledPreferenceKey);
+    return S_OK;
+}
+
+HRESULT WebPreferences::setOverscrollBehaviorEnabled(BOOL enabled)
+{
+    setBoolValue(WebKitOverscrollBehaviorEnabledPreferenceKey, enabled);
+    return S_OK;
+}

Modified: trunk/Source/WebKitLegacy/win/WebPreferences.h (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/WebPreferences.h	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/WebPreferences.h	2020-12-10 06:39:21 UTC (rev 270613)
@@ -313,6 +313,8 @@
     virtual HRESULT STDMETHODCALLTYPE setStringPreferenceForTesting(_In_ BSTR key, _In_ BSTR);
     virtual HRESULT STDMETHODCALLTYPE speechRecognitionEnabled(_Out_ BOOL*);
     virtual HRESULT STDMETHODCALLTYPE setSpeechRecognitionEnabled(BOOL);
+    virtual HRESULT STDMETHODCALLTYPE overscrollBehaviorEnabled(_Out_ BOOL*);
+    virtual HRESULT STDMETHODCALLTYPE setOverscrollBehaviorEnabled(BOOL);
 
     // WebPreferences
 

Modified: trunk/Source/WebKitLegacy/win/WebView.cpp (270612 => 270613)


--- trunk/Source/WebKitLegacy/win/WebView.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Source/WebKitLegacy/win/WebView.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -5658,6 +5658,11 @@
         return hr;
     settings.setSpeechRecognitionEnabled(!!enabled);
 
+    hr = prefsPrivate->overscrollBehaviorEnabled(&enabled);
+    if (FAILED(hr))
+        return hr;
+    settings.setOverscrollBehaviorEnabled(!!enabled);
+
     return S_OK;
 }
 

Modified: trunk/Tools/ChangeLog (270612 => 270613)


--- trunk/Tools/ChangeLog	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Tools/ChangeLog	2020-12-10 06:39:21 UTC (rev 270613)
@@ -1,3 +1,17 @@
+2020-12-09  Cathie Chen  <[email protected]>
+
+        Support overscroll-behavior parsing
+        https://bugs.webkit.org/show_bug.cgi?id=219305
+
+        Reviewed by Simon Fraser.
+
+        Based on Frédéric Wang's patch.
+
+        Add support for testing overscroll-behavior parsing.
+
+        * DumpRenderTree/TestOptions.cpp:
+        (WTR::TestOptions::defaults):
+
 2020-12-09  John Wilander  <[email protected]>
 
         PCM: Make JSON key names use underscores according to the W3C conversation

Modified: trunk/Tools/DumpRenderTree/TestOptions.cpp (270612 => 270613)


--- trunk/Tools/DumpRenderTree/TestOptions.cpp	2020-12-10 05:04:06 UTC (rev 270612)
+++ trunk/Tools/DumpRenderTree/TestOptions.cpp	2020-12-10 06:39:21 UTC (rev 270613)
@@ -94,6 +94,7 @@
             { "MenuItemElementEnabled", false },
             { "ModernMediaControlsEnabled", true },
             { "NeedsStorageAccessFromFileURLsQuirk", false },
+            { "OverscrollBehaviorEnabled", true },
             { "PluginsEnabled", true },
             { "PrivateClickMeasurementEnabled", false },
             { "RequestIdleCallbackEnabled", false },
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to